Хотел попробовать в тригерах сделать способность Галла из Героев шторма. В оригенале способность должна работать как снаряды, вылетающие из кастера по лучу от него и в ту сторону, куда указывает курсор мыши. Снаряд уже готов, а вот задать направление ему не знаю как. Можно ли как-то преобразовать координаты в которые указывает курсор как точку, но так, что бы в процессе способности курсор можно было водить и снаряды меняли направление за ним?
Принятый ответ
Положение курсора можно получить только в триггере его события, либо клик мыши, или перемещение мыши
Например лучше использовать маус мув, у примера выше тоже оно.. ну и результат занести в клобалку, можно ещё событие клика (левой/правой/средней)... результатом будут
BlzGetTriggerPlayerMouseX() и
BlzGetTriggerPlayerMouseY()
Вот их нужно занести в глобальную переменную в массив, а дальше выдёргивать массив в любом нужно месте, где интедкс массива = ID игрока, всё можно сделать на гуи, но извините, вот вам на луа, максимально кратко
Например лучше использовать маус мув, у примера выше тоже оно.. ну и результат занести в клобалку, можно ещё событие клика (левой/правой/средней)... результатом будут
BlzGetTriggerPlayerMouseX() и
BlzGetTriggerPlayerMouseY()
Вот их нужно занести в глобальную переменную в массив, а дальше выдёргивать массив в любом нужно месте, где интедкс массива = ID игрока, всё можно сделать на гуи, но извините, вот вам на луа, максимально кратко
GetPlayerMouseX={} -- пустой глобальный массив/таблица
GetPlayerMouseY={} -- пожно заполнить нулями 0,0,0 дабы избежать багов в начале игры, если иполузуется GetPlayerMouseX[id] раньше, чем игрок первый раз двинет мышкой
function InitMouseMoveTrigger() -- вызываем в инициализации
local MouseMoveTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
local player = Player(i)-- для всех игроков сразу, для 24, пофиг столько будет
TriggerRegisterPlayerEvent(MouseMoveTrigger, player, EVENT_PLAYER_MOUSE_MOVE) -- триггер движения мыши
end
TriggerAddAction(MouseMoveTrigger, function()
local id=GetPlayerId(GetTriggerPlayer())
GetPlayerMouseX[id]=BlzGetTriggerPlayerMouseX() -- нам нужные значения курсора
GetPlayerMouseY[id]=BlzGetTriggerPlayerMouseY() -- которые мы выдерним в любом месте
end)
end
Все, теперь мы в любой момент времени выдергиваем положения курсора, стоит помнить что курсор на интерфейсе возвращает 0,0
Далее чтобы узнать угол относительно курсора и чего либо надо просто использовать 1 строчку
Далее чтобы узнать угол относительно курсора и чего либо надо просто использовать 1 строчку
angle = AngleBetweenXY(x, y, GetPlayerMouseX[id], GetPlayerMouseY[id]) / bj_DEGTORAD
Где х и у, например координаты нашего юнита, а GetPlayerMouseX[id] курсор игрока id
Ну и чуть не забыл, сама функция
function AngleBetweenXY(xa, ya, xb, yb)
return math.atan(yb - ya, xb - xa)
end
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Ельнур
Например лучше использовать маус мув, у примера выше тоже оно.. ну и результат занести в клобалку, можно ещё событие клика (левой/правой/средней)... результатом будут
BlzGetTriggerPlayerMouseX() и
BlzGetTriggerPlayerMouseY()
Вот их нужно занести в глобальную переменную в массив, а дальше выдёргивать массив в любом нужно месте, где интедкс массива = ID игрока, всё можно сделать на гуи, но извините, вот вам на луа, максимально кратко
Далее чтобы узнать угол относительно курсора и чего либо надо просто использовать 1 строчку