Jump to content
Korean Random
kharlashkin

Модернизация прицела

Recommended Posts

Апну темку, наверное пришло время брать лопату ;)

 

Split Screen допилен до играбельного состояния, вибрация работает (а что ей сделается). Нужно теперь консольную систему прицеливания в игре, предчувствую тему и копание на долгие месяцы.

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

Как я понял из первого поста, автор хочет сделать так, чтобы при нахождении прицела в некоторой области около цели (ее проекции в камеру игрока) он перемещался на цель. Насчет триггера тут ничего сложного нет:

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
А вот дальше начинаются вопросы... Куда перемещать прицел, ну понятно что на цель, а конкретно куда... И выцеливать тогда как? Напрашивается вывод - наводить на уязвимые точки, не ну это можно конечно, но это уже чит будет тогда.
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

А вот дальше начинаются вопросы... Куда перемещать прицел, ну понятно что на цель, а конкретно куда... И выцеливать тогда как? Напрашивается вывод - наводить на уязвимые точки, не ну это можно конечно, но это уже чит будет тогда.

Как то дело в том что мне и выцеливать не нужно, несясь на 90-ке по ухабам - можно проще поймать противника в атоприцел, ну или стрелять с "вертухана" - снайперский режим никому не нужно менять, только аркадный.

Share this post


Link to post

Short link
Share on other sites

Убив несколько дней на копошение в скриптах, перелопатил Вычислителя Балистического МодBattle AssistantУлучшенную систему прицеливания начало приходить понимание системы прицеливание в игре, но о написании собственными силами мода пока говорить рано :( Как же тяжело не программисту копаться в этом всем...

 

Зато четко сложилось понимание того, что мне нужно.

Нажатием на кнопку изменяем радиус захвата противника в прицел, если в данный момент времени в вектор попали несколько противников - выбираем ближайшего, автоматически переводим орудие на противника (режим автоприцела), при отпускании возвращаем радиус захвата и отключаем режим автоприцела. Так же желательно фичу при нажатии кнопки автоприцела (правая кнопка мыши по умолчанию) или же при активности автоприцела мод не срабатывал.

 

Вопрос сообществу - где взять данные о круге сведения, имеются ввиду python скрипты.


Так же мне вот этот параметр интересен:

        self.__cursor.focusRadius = focusRadius

Это случайно не то что мне нужно? Может кто сталкивался с ним и понимает что это - файл arcadeaimingsystem.pyc.

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

Вырисовывается кое-что, но не хватает специализации для написания мода.

 

Итак система прицеливания находится в:

'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()", то есть пересечение чего-либо с курсором мыши.

 

Подскажите - я правильно понимаю что к чему?

Share this post


Link to post

Short link
Share on other sites
Определение цели происходит по "BigWorld.MouseTargettingMatrix()", то есть пересечение чего-либо с курсором мыши.

 

Вроде там не "чего-либо" а только танки. Если танка нет в фокусе то  BigWorld.target is None, кажись так.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Вроде там не "чего-либо" а только танки. Если танка нет в фокусе то  BigWorld.target is None, кажись так.

 

Не-не, "BigWorld.target.isEnabled = False".

 

Соответственно, если я поменяю вектор курсора "MouseTargettingMatrix" на нужный - может получиться...

Share this post


Link to post

Short link
Share on other sites

Не-не, "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 by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Не мышкой а хуком 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.

 

Но примера в родном коде не нашел, так что не знаю применим ли он.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

В общем решил забить на темку временно. Картоха и так делает сложное попадание по уязвимым местам  с обновлением 9.6, так что ещё больше управление с геймпадом выровняется по точности с мышей.

 

P.S. Так Вам всем и надо, клавомышечникам! (Смайлик тролля)

Share this post


Link to post

Short link
Share on other sites

Как я понял из первого поста, автор хочет сделать так, чтобы при нахождении прицела в некоторой области около цели (ее проекции в камеру игрока) он перемещался на цель. Насчет триггера тут ничего сложного нет:

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)

Что то не удалось получить координаты ...

Share this post


Link to post

Short link
Share on other sites

Подскажите можно ли таким способом получить положение камеры в стратегическом режиме?

Разные типы камер по разному позиционируются, но матрицы обзора у них все равно имеют один и тот же смысл. Условные координаты камеры с точки зрения ее обзора получаются одним и тем же образом для любой камеры - анализом матрицы обзора (invViewMatrix).

По сути приведенный тобой блок кода имеет тот же смысл, что и в цитате. Только написан немного по-разному.

Если тебе все же нужно перемещать камеру с прицелом, то это абсолютно отдельная тема.

Edited by GPCracker
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Разные типы камер по разному позиционируются, но матрицы обзора у них все равно имеют один и тот же смысл. Условные координаты камеры с точки зрения ее обзора получаются одним и тем же образом для любой камеры - анализом матрицы обзора (invViewMatrix).

По сути приведенный тобой блок кода имеет тот же смысл, что и в цитате. Только написан немного по-разному.

Если тебе все же нужно перемещать камеру с прицелом, то это абсолютно отдельная тема.

 

 Нет перемещать прицел не нужно , пытаюсь  получить условные координаты камеры в любой момент игры в стратегическом режиме, что -ж значит сам что то в коде намудрил , буду смотреть что не так...

Спасибо за подробный ответ, значит я на верном пути.

Edited by Serfer_78

Share this post


Link to post

Short link
Share on other sites
В 25.11.2014 в 11:52, kharlashkin сказал:

Вопрос сообществу - где взять данные о круге сведения, имеются ввиду python скрипты.

 

Так же мне вот этот параметр интересен:


        self.__cursor.focusRadius = focusRadius

Это случайно не то что мне нужно? Может кто сталкивался с ним и понимает что это - файл arcadeaimingsystem.pyc.

 

Для справки...

def dispersion()
       pl = BigWorld.player()
       print '%s' %(pl.gunRotator.dispersionAngle)

Edited by Serfer_78
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...