kharlashkin Posted October 14, 2014 Author Share Posted October 14, 2014 (edited) Апну темку, наверное пришло время брать лопату ;) Split Screen допилен до играбельного состояния, вибрация работает (а что ей сделается). Нужно теперь консольную систему прицеливания в игре, предчувствую тему и копание на долгие месяцы. Edited October 14, 2014 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted November 18, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 18, 2014 Author Share Posted November 18, 2014 А вот дальше начинаются вопросы... Куда перемещать прицел, ну понятно что на цель, а конкретно куда... И выцеливать тогда как? Напрашивается вывод - наводить на уязвимые точки, не ну это можно конечно, но это уже чит будет тогда. Как то дело в том что мне и выцеливать не нужно, несясь на 90-ке по ухабам - можно проще поймать противника в атоприцел, ну или стрелять с "вертухана" - снайперский режим никому не нужно менять, только аркадный. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 25, 2014 Author Share Posted November 25, 2014 (edited) Убив несколько дней на копошение в скриптах, перелопатил Вычислителя Балистического Мод, Battle Assistant, Улучшенную систему прицеливания начало приходить понимание системы прицеливание в игре, но о написании собственными силами мода пока говорить рано :( Как же тяжело не программисту копаться в этом всем... Зато четко сложилось понимание того, что мне нужно. Нажатием на кнопку изменяем радиус захвата противника в прицел, если в данный момент времени в вектор попали несколько противников - выбираем ближайшего, автоматически переводим орудие на противника (режим автоприцела), при отпускании возвращаем радиус захвата и отключаем режим автоприцела. Так же желательно фичу при нажатии кнопки автоприцела (правая кнопка мыши по умолчанию) или же при активности автоприцела мод не срабатывал. Вопрос сообществу - где взять данные о круге сведения, имеются ввиду python скрипты. Так же мне вот этот параметр интересен: self.__cursor.focusRadius = focusRadius Это случайно не то что мне нужно? Может кто сталкивался с ним и понимает что это - файл arcadeaimingsystem.pyc. Edited November 25, 2014 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 29, 2014 Author Share 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 Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 29, 2014 Share Posted November 29, 2014 (edited) Определение цели происходит по "BigWorld.MouseTargettingMatrix()", то есть пересечение чего-либо с курсором мыши. Вроде там не "чего-либо" а только танки. Если танка нет в фокусе то BigWorld.target is None, кажись так. Edited November 29, 2014 by StranikS_Scan @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 29, 2014 Author Share Posted November 29, 2014 Вроде там не "чего-либо" а только танки. Если танка нет в фокусе то BigWorld.target is None, кажись так. Не-не, "BigWorld.target.isEnabled = False". Соответственно, если я поменяю вектор курсора "MouseTargettingMatrix" на нужный - может получиться... @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 29, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 29, 2014 Author Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted January 27, 2015 Author Share Posted January 27, 2015 В общем решил забить на темку временно. Картоха и так делает сложное попадание по уязвимым местам с обновлением 9.6, так что ещё больше управление с геймпадом выровняется по точности с мышей. P.S. Так Вам всем и надо, клавомышечникам! (Смайлик тролля) @ Quote Link to comment Short link Share on other sites More sharing options...
Serfer_78 Posted August 24, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
GPCracker Posted August 24, 2017 Share Posted August 24, 2017 (edited) Подскажите можно ли таким способом получить положение камеры в стратегическом режиме?Разные типы камер по разному позиционируются, но матрицы обзора у них все равно имеют один и тот же смысл. Условные координаты камеры с точки зрения ее обзора получаются одним и тем же образом для любой камеры - анализом матрицы обзора (invViewMatrix). По сути приведенный тобой блок кода имеет тот же смысл, что и в цитате. Только написан немного по-разному. Если тебе все же нужно перемещать камеру с прицелом, то это абсолютно отдельная тема. Edited August 24, 2017 by GPCracker 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Serfer_78 Posted August 24, 2017 Share Posted August 24, 2017 (edited) Разные типы камер по разному позиционируются, но матрицы обзора у них все равно имеют один и тот же смысл. Условные координаты камеры с точки зрения ее обзора получаются одним и тем же образом для любой камеры - анализом матрицы обзора (invViewMatrix). По сути приведенный тобой блок кода имеет тот же смысл, что и в цитате. Только написан немного по-разному. Если тебе все же нужно перемещать камеру с прицелом, то это абсолютно отдельная тема. Нет перемещать прицел не нужно , пытаюсь получить условные координаты камеры в любой момент игры в стратегическом режиме, что -ж значит сам что то в коде намудрил , буду смотреть что не так... Спасибо за подробный ответ, значит я на верном пути. Edited August 24, 2017 by Serfer_78 @ Quote Link to comment Short link Share on other sites More sharing options...
Serfer_78 Posted October 11, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.