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

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

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

offline
Опыт: 76
Активность:
Не могу найти ошибку
Опишу проблему: есть спелл, который должен толкать применяющего героя в указанную точку. Но при его применении не происходит ровным счетом ничего.
Равкод способности совпадает.
» Вот код спелла:
function Trig_BlinkNew_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction
function Trig_BlinkNew_Actions takes nothing returns nothing
    local unit U = GetSpellAbilityUnit()
    local real array X
    local real array Y
    local real F
    set X[1] = GetUnitX(U)
    set Y[1] = GetUnitY(U)
    set X[0] = GetSpellTargetX()
    set Y[0] = GetSpellTargetY()
    set F = bj_RADTODEG * Atan2(Y[0] - Y[1], X[0] - X[1])
    call SetUnitFacingTimed(U,F,0)
    loop
    exitwhen X[1]!=X[0] and Y[1]!=Y[0]
    set X[1] = X[1] + 1 * Cos(F * bj_DEGTORAD)
    set Y[1] = Y[1] + 1 * Sin(F * bj_DEGTORAD)
    call SetUnitX(U,X[1])
    call SetUnitY(U,Y[1])
    call SetUnitFacing(U,F)
    endloop
    set U = null
endfunction
function InitTrig_BlinkNew takes nothing returns nothing
    local trigger trig = CreateTrigger()
    set bj_forLoopAIndex = 0
    loop
    call TriggerRegisterPlayerUnitEvent(trig, Player(bj_forLoopAIndex), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    set bj_forLoopAIndex = bj_forLoopAIndex + 1
    exitwhen bj_forLoopAIndex == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( gg_trg_BlinkNew, Condition( function Trig_BlinkNew_Conditions ) )
    call TriggerAddAction( gg_trg_BlinkNew, function Trig_BlinkNew_Actions )
    set trig = null
endfunction
Возможно есть какие-то другие способы реализации такого спелла. Если да, то прошу подскажите)
Старый 09.04.2014, 14:17
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
х[0] изначально не равно х[1], с у аналогично, естественно, что не происходит ни одной итерации loop-а.
Очень странный код вобще. ОЧЕНЬ странный
Старый 09.04.2014, 14:42
VboX

offline
Опыт: 76
Активность:
HolyMoon, исправил эту строку
exitwhen X[1]==X[0] and Y[1]==Y[0]
Теперь герой улетает за пределы карты((
Старый 09.04.2014, 14:57
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
сохраняешь в таблицу юнита-кастера и координаты цели,угол от изначальной до конечной точки,при срабатывании таймера проверяешь расстояние между текущими координатами героя и целевыми,если это расстояние меньше 50. например - значит герой долетел и можно очищать таблицу и уничтожать таймер
Старый 09.04.2014, 15:39
PogoMaster

offline
Опыт: 588
Активность:
Про границы... дык контролируй,чтобы этого не происходило.
И вообще - loop заместо таймеров...это очень странно
Старый 09.04.2014, 15:41
VboX

offline
Опыт: 76
Активность:
Nerevar, сделал как описано в статье, всё работает. Спасибо!
Старый 09.04.2014, 16:27
Закрытая тема

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

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

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

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



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