kharlashkin 239 #222461 Posted October 14, 2014 (edited) Апну темку, наверное пришло время брать лопату ;) Split Screen допилен до играбельного состояния, вибрация работает (а что ей сделается). Нужно теперь консольную систему прицеливания в игре, предчувствую тему и копание на долгие месяцы. Edited October 14, 2014 by kharlashkin Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #232170 Posted November 18, 2014 Как я понял из первого поста, автор хочет сделать так, чтобы при нахождении прицела в некоторой области около цели (ее проекции в камеру игрока) он перемещался на цель. Насчет триггера тут ничего сложного нет: import math angle = math.acos(targetVector.dot(cameraVector) / (targetVector.length * cameraVector.length)) где targetVector - вектор "позиция камеры - позиция цели", cameraVector - вектор направления камеры игрока. import BigWorld, Math def getCameraRayAndPoint(): invMatrix = Math.Matrix(BigWorld.camera().invViewMatrix) return invMatrix.applyVector(Math.Vector3(0, 0, 1)), invMatrix.translation А вот дальше начинаются вопросы... Куда перемещать прицел, ну понятно что на цель, а конкретно куда... И выцеливать тогда как? Напрашивается вывод - наводить на уязвимые точки, не ну это можно конечно, но это уже чит будет тогда. 2 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #232177 Posted November 18, 2014 А вот дальше начинаются вопросы... Куда перемещать прицел, ну понятно что на цель, а конкретно куда... И выцеливать тогда как? Напрашивается вывод - наводить на уязвимые точки, не ну это можно конечно, но это уже чит будет тогда. Как то дело в том что мне и выцеливать не нужно, несясь на 90-ке по ухабам - можно проще поймать противника в атоприцел, ну или стрелять с "вертухана" - снайперский режим никому не нужно менять, только аркадный. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #233156 Posted November 25, 2014 (edited) Убив несколько дней на копошение в скриптах, перелопатил Вычислителя Балистического Мод, Battle Assistant, Улучшенную систему прицеливания начало приходить понимание системы прицеливание в игре, но о написании собственными силами мода пока говорить рано :( Как же тяжело не программисту копаться в этом всем... Зато четко сложилось понимание того, что мне нужно. Нажатием на кнопку изменяем радиус захвата противника в прицел, если в данный момент времени в вектор попали несколько противников - выбираем ближайшего, автоматически переводим орудие на противника (режим автоприцела), при отпускании возвращаем радиус захвата и отключаем режим автоприцела. Так же желательно фичу при нажатии кнопки автоприцела (правая кнопка мыши по умолчанию) или же при активности автоприцела мод не срабатывал. Вопрос сообществу - где взять данные о круге сведения, имеются ввиду python скрипты. Так же мне вот этот параметр интересен: self.__cursor.focusRadius = focusRadius Это случайно не то что мне нужно? Может кто сталкивался с ним и понимает что это - файл arcadeaimingsystem.pyc. Edited November 25, 2014 by kharlashkin Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #233663 Posted November 29, 2014 Вырисовывается кое-что, но не хватает специализации для написания мода. Итак система прицеливания находится в: 'X:\Games\World_of_Tanks\res\scripts\client\avatarinputhandler\__init__.py' class _Targeting(): def __init__(self): target = BigWorld.target target.selectionFovDegrees = 1.0 target.deselectionFovDegrees = 80.0 target.maxDistance = 710.0 target.skeletonCheckEnabled = False BigWorld.target.isEnabled = False self.__mouseMatProv = BigWorld.MouseTargettingMatrix() def isEnabled(self): return BigWorld.target.isEnabled def getTargetEntity(self): return BigWorld.target.entity def enable(self, flag): if flag and not BigWorld.target.isEnabled: BigWorld.target.isEnabled = True BigWorld.target.source = self.__mouseMatProv elif not flag: BigWorld.target.isEnabled = False BigWorld.target.clear() BigWorld.target.source = None return def onRecreateDevice(self): if BigWorld.target.isEnabled: BigWorld.target.clear() Определение цели происходит по "BigWorld.MouseTargettingMatrix()", то есть пересечение чего-либо с курсором мыши. Подскажите - я правильно понимаю что к чему? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,123 #233682 Posted November 29, 2014 (edited) Определение цели происходит по "BigWorld.MouseTargettingMatrix()", то есть пересечение чего-либо с курсором мыши. Вроде там не "чего-либо" а только танки. Если танка нет в фокусе то BigWorld.target is None, кажись так. Edited November 29, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #233685 Posted November 29, 2014 Вроде там не "чего-либо" а только танки. Если танка нет в фокусе то BigWorld.target is None, кажись так. Не-не, "BigWorld.target.isEnabled = False". Соответственно, если я поменяю вектор курсора "MouseTargettingMatrix" на нужный - может получиться... Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,123 #233689 Posted November 29, 2014 (edited) Не-не, "BigWorld.target.isEnabled = False". Соответственно, если я поменяю вектор курсора "MouseTargettingMatrix" на нужный - может получиться... Ну судя по коду def enable(self, flag): if flag and not BigWorld.target.isEnabled: BigWorld.target.isEnabled = True BigWorld.target.source = self.__mouseMatProv elif not flag: BigWorld.target.isEnabled = False BigWorld.target.clear() BigWorld.target.source = None return При False target будет зачищен, значит None. Поменять матрицу то поменяешь, а что это тебе даст? курсор то мышкой пользователя определяется. Edited November 29, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #233692 Posted November 29, 2014 Не мышкой а хуком DLL, с передачей координат в моем случае ;) SetKeyDelay -1 if MouseNeedsToBeMoved { SetMouseDelay, -1 x := (DeltaU/45) * (ABS(DeltaU)/45) * JoyMultiplier y := (DeltaR/45) * (ABS(DeltaR)/45) * JoyMultiplier DllCall("mouse_event", uint, 1, int, x, int, y, uint, 0, int, 0) } return Нужно дальше копать. В документации BigWorld нашел углы для определения цели: selectionAngle This is the field of view angle, in degrees, at which an Entity will become a potential target. Lower values will provide a tighter fov, whilst higher values will capture more targets. Но примера в родном коде не нашел, так что не знаю применим ли он. 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #246549 Posted January 27, 2015 В общем решил забить на темку временно. Картоха и так делает сложное попадание по уязвимым местам с обновлением 9.6, так что ещё больше управление с геймпадом выровняется по точности с мышей. P.S. Так Вам всем и надо, клавомышечникам! (Смайлик тролля) Quote Share this post Link to post Short link Share on other sites
Serfer_78 2 #401495 Posted August 24, 2017 Как я понял из первого поста, автор хочет сделать так, чтобы при нахождении прицела в некоторой области около цели (ее проекции в камеру игрока) он перемещался на цель. Насчет триггера тут ничего сложного нет: import math angle = math.acos(targetVector.dot(cameraVector) / (targetVector.length * cameraVector.length)) где targetVector - вектор "позиция камеры - позиция цели", cameraVector - вектор направления камеры игрока. import BigWorld, Math def getCameraRayAndPoint(): invMatrix = Math.Matrix(BigWorld.camera().invViewMatrix) return invMatrix.applyVector(Math.Vector3(0, 0, 1)), invMatrix.translation А вот дальше начинаются вопросы... Куда перемещать прицел, ну понятно что на цель, а конкретно куда... И выцеливать тогда как? Напрашивается вывод - наводить на уязвимые точки, не ну это можно конечно, но это уже чит будет тогда. Приветствую гуру python - a ! Подскажите можно ли таким способом получить положение камеры в стратегическом режиме? Пробовал вот так выудить... from AvatarInputHandler import cameras cameraDir, cameraPos = cameras.getWorldRayAndPoint(0, 0) print('PosCam: %s %s' %cameraDir, cameraPos) Что то не удалось получить координаты ... Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #401536 Posted August 24, 2017 (edited) Подскажите можно ли таким способом получить положение камеры в стратегическом режиме?Разные типы камер по разному позиционируются, но матрицы обзора у них все равно имеют один и тот же смысл. Условные координаты камеры с точки зрения ее обзора получаются одним и тем же образом для любой камеры - анализом матрицы обзора (invViewMatrix). По сути приведенный тобой блок кода имеет тот же смысл, что и в цитате. Только написан немного по-разному. Если тебе все же нужно перемещать камеру с прицелом, то это абсолютно отдельная тема. Edited August 24, 2017 by GPCracker 1 Quote Share this post Link to post Short link Share on other sites
Serfer_78 2 #401548 Posted August 24, 2017 (edited) Разные типы камер по разному позиционируются, но матрицы обзора у них все равно имеют один и тот же смысл. Условные координаты камеры с точки зрения ее обзора получаются одним и тем же образом для любой камеры - анализом матрицы обзора (invViewMatrix). По сути приведенный тобой блок кода имеет тот же смысл, что и в цитате. Только написан немного по-разному. Если тебе все же нужно перемещать камеру с прицелом, то это абсолютно отдельная тема. Нет перемещать прицел не нужно , пытаюсь получить условные координаты камеры в любой момент игры в стратегическом режиме, что -ж значит сам что то в коде намудрил , буду смотреть что не так... Спасибо за подробный ответ, значит я на верном пути. Edited August 24, 2017 by Serfer_78 Quote Share this post Link to post Short link Share on other sites
Serfer_78 2 #406703 Posted October 11, 2017 (edited) В 25.11.2014 в 11:52, kharlashkin сказал: Вопрос сообществу - где взять данные о круге сведения, имеются ввиду python скрипты. Так же мне вот этот параметр интересен: self.__cursor.focusRadius = focusRadius Это случайно не то что мне нужно? Может кто сталкивался с ним и понимает что это - файл arcadeaimingsystem.pyc. Для справки... def dispersion() pl = BigWorld.player() print '%s' %(pl.gunRotator.dispersionAngle) Edited October 11, 2017 by Serfer_78 1 Quote Share this post Link to post Short link Share on other sites