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

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

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

offline
Опыт: 1,162
Активность:
Действия через определенное время
Вообщем смысл аля канальный ульт атропоса (или черт знает как его называют) из доты. Пытался сделать на основе 6.41 опен -в лучшем случае просто все висло и вылетало в виндовс. Попытался переделать только проблема в том что не могу сделать так чтобы урон наносился периодически через определенное время. (когда делал тригер запускается периодически-вылетал с фаталом()) вообщем сам код:
function Banshee_chanal_Conditions takes nothing returns boolean
return( GetSpellAbilityId() == 'A008' )
endfunction

function Banshee_chanal_Main takes nothing returns nothing
local timer Timer = GetExpiredTimer()
local unit Caster = LoadUnitHandle(udg_h,GetHandleId(Timer),1)
local unit Target = LoadUnitHandle(udg_h,GetHandleId(Timer),2)
local real Casterxp = LoadReal(udg_h,GetHandleId(Timer),3)
call DisplayTextToForce( GetPlayersAll(), "2" )
loop
        exitwhen  GetUnitState(Target,UNIT_STATE_LIFE)<=20.
        call DisplayTextToForce( GetPlayersAll(), "3" )
        call SetUnitManaBJ(Caster,GetUnitState(Caster,UNIT_STATE_MANA)-4-4*GetUnitAbilityLevel(Caster,'A008'))
        call UnitDamageTargetBJ(Caster,Target,4+4*GetUnitAbilityLevel(Caster,'A008'),ATTACK_TYPE_NORMAL,DAMAGE_TY​PE_MIND)

    endloop

        call DisplayTextToForce( GetPlayersAll(), "4" )
        call DestroyTimer(Timer)
endfunction


function Banshee_chanal_Actions takes nothing returns nothing
local unit Caster = GetSpellAbilityUnit()
local unit Target = GetSpellTargetUnit()
local timer Timer = CreateTimer()
local trigger trg=GetTriggeringTrigger()
local real Casterxp = GetUnitState(Caster, UNIT_STATE_MAX_LIFE)
call DisplayTextToForce( GetPlayersAll(), "Tbegin" )
call SaveUnitHandle(udg_h,GetHandleId(Timer),1,Caster)
call SaveUnitHandle(udg_h,GetHandleId(Timer),2,Target)
call SaveReal(udg_h,GetHandleId(Timer),3,Casterxp)

call DisplayTextToForce( GetPlayersAll(), "Tbegin1" )
call IssueImmediateOrderById(Target,OrderId("stop"))
call IssueImmediateOrderById(Caster,OrderId("stop"))
call TimerStart(Timer,0.05,true,function Banshee_chanal_Main)
call DisplayTextToForce( GetPlayersAll(), "Tbegin2" )
set Target = null
set Caster = null
set Timer = null
endfunction

//===========================================================================
function InitTrig_Banshee_chanal takes nothing returns nothing
    local trigger trg=CreateTrigger()
    set udg_h=InitHashtable()
    call TriggerAddCondition( trg, Condition( function Banshee_chanal_Conditions ) )
    call TriggerRegisterAnyUnitEventBJ( trg, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddAction( trg, function Banshee_chanal_Actions )
    set trg=null
endfunction
Старый 26.03.2011, 23:29
Doc

offline
Опыт: 63,163
Активность:
Комментируй по строчке, пока не исчезнет фатал, так найдешь причину. И да, зачем цикл в коолбеке таймера? о_о
Старый 26.03.2011, 23:34
Dartesk

offline
Опыт: 1,162
Активность:
Комментируй по строчке, пока не исчезнет фатал, так найдешь причину. И да, зачем цикл в коолбеке таймера? о_о
Не щас фатала нет. А цикл , у это я таким кривым способом пытался сделать урон через определенное время
Старый 26.03.2011, 23:36
Doc

offline
Опыт: 63,163
Активность:
Dartesk, у тебя есть таймер, зачем цикл то?
Старый 26.03.2011, 23:37
Dartesk

offline
Опыт: 1,162
Активность:
call TimerStart(Timer,0.05,true,function Banshee_chanal_Main)
ну ведь таймер показывает время старта функции???
Старый 26.03.2011, 23:43
Doc

offline
Опыт: 63,163
Активность:
Dartesk, время через которое эта функция будет выполняться, если таймер периодический.
Старый 26.03.2011, 23:53
Dartesk

offline
Опыт: 1,162
Активность:
хмм а как создать "периодический таймер" а то я пока находил только периодический тригер
Старый 26.03.2011, 23:56
XOR

offline
Опыт: 38,159
Активность:
call TimerStart(Timer,0.05,true,function Banshee_chanal_Main)
а это что?
Старый 26.03.2011, 23:59
Dartesk

offline
Опыт: 1,162
Активность:
а т.е. для TimerStart true выполнять каждые n сек а false однократно???
Dartesk добавил:
но тогда как же сделать проверку на смерть (да и задать количество циклов??),
Старый 27.03.2011, 00:08
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Dartesk, провирить на смерть либо через хитрую систему либо через хеш таблицы
Цитата:
Сообщение от Dartesk
а т.е. для TimerStart true выполнять каждые n сек а false однократно???

да
Цитата:
Сообщение от Dartesk
(да и задать количество циклов??)

сохраняешь сколько раз был вызван таймер куда нить, и потом проверяй если вызвано больше 5 раз, например убивай таймер. Так же и со смертью
Старый 27.03.2011, 10:21
Dartesk

offline
Опыт: 1,162
Активность:
угу то получилось, ну и последнее тут тогда: как сделать чтобы у кастера и юнита отключились прочие способности на время спела, а то вот это
call IssueImmediateOrderById(Target,OrderId("stop"))
call IssueImmediateOrderById(Caster,OrderId("stop"))
похоже не работает ибо это однократный приказ((

Отредактировано Dartesk, 27.03.2011 в 12:43.
Старый 27.03.2011, 11:55
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Dartesk, call PauseUnit(Target,true)
а когда все заканчивается юзай call PauseUnit(Target,false)
Старый 27.03.2011, 13:11
Dartesk

offline
Опыт: 1,162
Активность:
Dartesk, call PauseUnit(Target,true) ,а когда все заканчивается юзай call PauseUnit(Target,false)
да я как раз только что так и сделал, только вот для таргета это норм а вот для кастера
если я вдруг захочу отменить произнесение заклинания как мне это теперь сделать? ибо у кастера отключаются все способности кроме пассивок на время каста(
Старый 27.03.2011, 13:19
JimALIEN
вдупляет sc2 editor
offline
Опыт: 7,176
Активность:
я п сделал этот спел на основе стандартного дрейн лайф ток без откачки хп, в начале каста запаузить цель и пустить таймер с малым периодом, в котором проверять продолжает ли кастер кастовать и если нет - отпустить цель.
Старый 28.03.2011, 05:55
Extremator

offline
Опыт: 39,512
Активность:
Цитата:
Сообщение от Dartesk
Вообщем смысл аля канальный ульт атропоса (или черт знает как его называют) из доты.
аля Огненно Лассо у альянса...не?)
Старый 02.04.2011, 05:04
Dartesk

offline
Опыт: 1,162
Активность:
Extremator:
аля Огненно Лассо у альянса...не?)
Ну вообще огненное лассо себя ведет несколько странно)) а так я этот спел давно(дня три назад) сделал на основе канала и работает оно как надо
Старый 02.04.2011, 09:14
Закрытая тема

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

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

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

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



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