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

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

Закрытая тема
 
DioD

offline
Опыт: 45,134
Активность:
градусы и радианы путать-смешивать не рекомендуется.
Старый 23.10.2012, 15:59
Hanabishi
COOL STATUS
offline
Опыт: отключен
Hate, вроде ошибка была, попробуй так (исправил выше).
DioD, я и не смешивал, всё на радианах.
Hate, если не робит, хз, попробуй на градусах:
function Actions takes nothing returns nothing
    local real a = Atan2(GetUnitY(GetAttacker())-GetUnitY(GetTriggerUnit()),GetUnitX(GetAttacker())-GetUnitX(GetTrigger​​Unit()))*bj_RADTODEG-GetUnitFacing(GetTriggerUnit())
    if ((a>-45)and(a<45))or((a>135)and(a<225)) then
        //сбоку
    endif
endfunction

Отредактировано Hanabishi, 23.10.2012 в 16:27.
Старый 23.10.2012, 16:18
Arti

offline
Опыт: 11,196
Активность:
слоупокккк....
возьми ту функцию шо сзади, продублируй её и навзи удар справа, удар слева. При событии вызывай их обе. Но там поиграйся с углами... вроди вместо +360, в одной 180 в другой -180...
Старый 23.10.2012, 16:40
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Hanabishi:
Hate, вроде ошибка была, попробуй так (исправил выше).
DioD, я и не смешивал, всё на радианах.
Hate, если не робит, хз, попробуй на градусах:
function Actions takes nothing returns nothing
    local real a = Atan2(GetUnitY(GetAttacker())-GetUnitY(GetTriggerUnit()),GetUnitX(GetAttacker())-GetUnitX(GetTrigger​&#8203;Unit()))*bj_RADTODEG-GetUnitFacing(GetTriggerUnit())
    if ((a>-45)and(a<45))or((a>135)and(a<225)) then
        //сбоку
    endif
endfunction
обе не работают :c
Hate добавил:
Arti:
слоупокккк....
возьми ту функцию шо сзади, продублируй её и навзи удар справа, удар слева. При событии вызывай их обе. Но там поиграйся с углами... вроди вместо +360, в одной 180 в другой -180...
ты сам то пробовал?
Старый 23.10.2012, 16:47
DioD

offline
Опыт: 45,134
Активность:
  • 180 не бывает, 180 и -180 это один и тот же градус, я же блин нарисовал предельно понятно, что это 90 и 270 бока юнита, чем вы вообще думаете...
-45 у нас всегда было равно 360-45, но никак не ровно 45
Старый 23.10.2012, 17:24
Arti

offline
Опыт: 11,196
Активность:
фу фу бред с телефона написал насчет 180 :).
Старый 24.10.2012, 00:47
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
opa
gui-style
Прикрепленные файлы
Тип файла: w3x SideDamage_system.w3x (13.9 Кбайт, 3 просмотров )
Старый 24.10.2012, 11:38
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
HolyMoon:
opa
gui-style
Миниатюры
Кликните на картинку для увеличения
Название:  SS.JPG
Просмотров: 31
Размер:  127.3 Кбайт  
Старый 24.10.2012, 11:54
DioD

offline
Опыт: 45,134
Активность:
имплементировать чтоле, ваши страдания огорчают негров...
всеготонавсегонадо рейкаст от атакующего к атакованному и повернуть на фейсинг атакованного.
Старый 24.10.2012, 12:10
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
что такое рейкаст?)
Старый 24.10.2012, 13:25
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
а если так?
правда, несколько извращенно. Но вроде все работает :D

при желании, я уверен, можно даже как-то упростить все это
Прикрепленные файлы
Тип файла: w3x SideDamage_system.w3x (13.9 Кбайт, 2 просмотров )

Отредактировано DragonSpirit, 24.10.2012 в 22:10.
Старый 24.10.2012, 18:19
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
HolyMoon:
a esli tak?
pravda, neskol'ko izvrashenno. No vrode vse rabotaet :D
pri zhelanii, ya uveren, mozhno dazhe kak-to uprostit' vse eto
збс, все работает так, спасиб большое, офк прикрепляю сюда конечный результат в виде функции
» катег
real ABU (unit A, unit B) {
    return Atan2(GetUnitY(B)-GetUnitY(A), GetUnitX(B)-GetUnitX(A))*bj_RADTODEG
}

bool IsSide(unit ataker,unit victim) {
real angle1 = GetUnitFacing(victim)
real angle2 = ABU(ataker,victim)

    if not (GetUnitY(victim) > GetUnitY(ataker)) {
        angle1 -= 360.
    }
    
    if (angle2 <= ( angle1 + 135.00 ) and angle2 >= ( angle1 + 45.00 ))\\
    or (angle2 <= ( angle1 - 45.00 ) and angle2 >= ( angle1 - 135.00 ))\\
    or (GetUnitY(victim) > GetUnitY(ataker) and GetUnitX(victim) > GetUnitX(ataker) and angle2 <= ( angle1 - 225.00 ) and angle2 >= ( angle1 - 315.00 ) )\\
    or (GetUnitY(victim) < GetUnitY(ataker) and GetUnitX(victim) > GetUnitX(ataker) and angle2 >= ( angle1 + 225.00 ) and angle2 <= ( angle1 + 315.00 ))
    {
        return true
    }
return false
}
Старый 24.10.2012, 19:46
Закрытая тема

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

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

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

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



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