XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
HellCEzaR
Проект "Instance Rush"
offline
Опыт: 2,711
Активность:
Bluff и BackStab
Как высчитать спину противника ?
и как скилом повернуть цель спиной к кастующему?
Пробовал
Цитата:
Facing Angle цели * 2

но чтото не так
Старый 20.08.2010, 15:50
reALien

offline
Опыт: 29,211
Активность:
ну скажем, если у одного юнита угол зрения 180, и у второго тоже, то они смотрят в одну сторону, соответственно один из них повернут к другому спиной.
Старый 20.08.2010, 15:54
Doc

offline
Опыт: 63,163
Активность:
reALien, это лишь один из вариантов.
Старый 20.08.2010, 15:55
Ksan

offline
Опыт: 13,248
Активность:
if ((GetUnitFacing(<юнит 1>) < GetUnitFacing(<юнит 2>) - 20) or (GetUnitFacing(<юнит 1>) > GetUnitFacing(<юнит 2>) + 20)) then

else

endif

Отредактировано Ksan, 20.08.2010 в 16:16.
Старый 20.08.2010, 16:08
Doc

offline
Опыт: 63,163
Активность:
Ksan, не будет это работать =/
Старый 20.08.2010, 16:11
Ksan

offline
Опыт: 13,248
Активность:
Doc, да, ошибся. там надо не =, а > и <
Старый 20.08.2010, 16:14
Doc

offline
Опыт: 63,163
Активность:
Ksan, все равно хрень, надо делать через модуль, т.е. RAbsBJ.
Старый 20.08.2010, 16:16
Ksan

offline
Опыт: 13,248
Активность:
Doc, нет. Так лучше, ибо это удобней, понятней, наглядней.
Старый 20.08.2010, 16:16
Doc

offline
Опыт: 63,163
Активность:
Ksan, нет, там будет одно число и одна проверка, тут 2.
Старый 20.08.2010, 16:18
Ksan

offline
Опыт: 13,248
Активность:
Doc, достаточно сделать элс. например так
if (GetUnitFacing(<юнит 1>) < GetUnitFacing(<юнит 2>) - 20) then

else
        if (GetUnitFacing(<юнит 1>) > GetUnitFacing(<юнит 2>) + 20) then

        else

        endif
endif
Ksan добавил:
Doc, да и кстате из-за одной проверки комп не зависнет.
Старый 20.08.2010, 16:25
HellCEzaR
Проект "Instance Rush"
offline
Опыт: 2,711
Активность:
Ksan,
Цитата:
if (GetUnitFacing(<юнит 1>) < GetUnitFacing(<юнит 2>) - 20) then

else
if (GetUnitFacing(<юнит 1>) > GetUnitFacing(<юнит 2>) + 20) then

else

endif
endif

Это работает 100%?
Старый 20.08.2010, 17:05
silumin

offline
Опыт: 11,153
Активность:
Код:
function GetBackFacing takes unit Hero , unit Target , real xAng returns boolean
local real dx = GetUnitX(Target) - GetUnitX(Hero)
local real dy = GetUnitY(Target) - GetUnitY(Hero)
local real cAng = 57.29583*Atan2(dy,dx) - GetUnitFacing(Hero)
local real fAng = GetUnitFacing(Hero) - GetUnitFacing(Target)
set cAng = SquareRoot(cAng*cAng)
set fAng = SquareRoot(fAng*fAng)
return cAng<xAng and fAng<xAng
endfunction
Не могу проверить насколько верно функционирует код. Не с компьютера.
По идее функция должна возвращать "истину", если юнит Target стоит спиной к юниту Hero с допустимым отклонением xAng.
Старый 20.08.2010, 18:16
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Код:
local unit u = GetTriggerUni()
    local unit ut = GetEnumUnit()
    local real x1 = GetWidgetX(u)
    local real y1 = GetWidgetY(u)
    local real x2 = GetWidgetX(ut)
    local real y2 = GetWidgetY(ut)
    local real a = 57.295827 * Atan2(y2-y1,x2-x1) 
    if a>= 20 and a <= -20 then
    // твои действия
    endif
    u =null
    ut = null


блаф примерно таким же способом делается, просто меняется угол поворота юнита цели на разницу между углом поворота между кастером и целью

Отредактировано Faion, 20.08.2010 в 18:46.
Старый 20.08.2010, 18:41
silumin

offline
Опыт: 11,153
Активность:
Faion, и что твой код делает? Могу сказать что бэкстабом даже не пахнет.
Старый 20.08.2010, 20:19
alexkill

offline
Опыт: 18,872
Активность:
все уже украдено до вас
Старый 20.08.2010, 20:46
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:32.