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

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

Закрытая тема
 
Чебурашка

offline
Опыт: 5,460
Активность:
Как сделать таймер с разным периодом?
Надо сделать способность, которая раз в несколько секунд увеличивает урон героя. С прокачкой перезарядка способности уменьшается, напрмиер 8 секунд на 1 уровне и 4 секунды на 2 уровне
Решил делать через таймер. Если бы перезарядка не уменьшалась, то нет проблем сделать.
Единственный выход: сделать таймер с периодом 8 секунд, при улучшении способности паузить его и запустить с периодом 4 секунды? Есть ли способ лучше?
Старый 29.05.2010, 15:19
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
сделать таймер с интервалом 4 и проверять количество запусков, ну т.е. куда-то записывать инт, ну или если только раз менятся будет то и булеан записать достаточно.
MrSmiLe добавил:
хотя это относительно - лучше.
Старый 29.05.2010, 15:22
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
local timer t = CreateTimer()
local real time = 8 - 1 * GetUnitAbilityLevel(GetTriggerUnit(), 'твой скил') 
call TimerStart(t, time, false or true, function A)
Старый 29.05.2010, 15:42
Чебурашка

offline
Опыт: 5,460
Активность:
AlexKARASb:
local timer t = CreateTimer()
local real time = 8 - 1 * GetUnitAbilityLevel(GetTriggerUnit(), 'твой скил') 
call TimerStart(t, time, false or true, function A)
Создавать таймер каждый раз как герой прокачивает способность?
Старый 29.05.2010, 16:19
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
таймер сохраняй в хеш либо в глобалку либо в структуру и старт таймера каждый раз делай заного и все
Старый 29.05.2010, 16:50
Чебурашка

offline
Опыт: 5,460
Активность:
Все работает )
» раскрыть
Код:
function Trig_Frostmourne_Conditions takes nothing returns boolean
    return GetLearnedSkill()=='A04H' 
endfunction

function FrAttackTim takes nothing returns nothing
call UnitAddAbility(LoadUnitHandle(udg_MainHashe,GetHandleId(GetExpiredTimer()),Strin  gHash("FrH")),'A04J')
call SetPlayerAbilityAvailable(GetOwningPlayer(LoadUnitHandle(udg_MainHashe,GetHandle  Id(GetExpiredTimer()),StringHash("FrH"))),'A04J',false)
endfunction

function FrAttackC takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(),'A04J')!=0 and not IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) 
endfunction

function FrAttackMain takes nothing returns nothing
call TriggerSleepAction(0.5)
call UnitRemoveAbility(GetAttacker(),'A04J')
call UnitRemoveAbility(GetAttacker(),'B01X')
//call BJDebugMsg(I2S(GetUnitAbilityLevel(GetAttacker(),'A04H')))
call TimerStart(LoadTimerHandle(udg_MainHashe,GetHandleId(GetTriggeringTrigger()),Str  ingHash("FrTim")),28-4*GetUnitAbilityLevel(GetAttacker(),'A04H'),false,function FrAttackTim )
endfunction

function Trig_Frostmourne_Actions takes nothing returns nothing
local timer ltt = null
local trigger t1 = null
if GetUnitAbilityLevel(GetTriggerUnit(),'A04H')==1 then
set ltt = CreateTimer()
set t1 = CreateTrigger()
call UnitAddAbility(GetTriggerUnit(),'A04J')
call SetPlayerAbilityAvailable(GetOwningPlayer(GetTriggerUnit()),'A04J',false)
call TriggerRegisterAnyUnitEventBJ(t1,EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(t1,Condition(function FrAttackC))
call TriggerAddAction(t1, function FrAttackMain)
call SaveTimerHandle(udg_MainHashe,GetHandleId(t1),StringHash("FrTim"),ltt)
call SaveUnitHandle(udg_MainHashe,GetHandleId(ltt),StringHash("FrH"),GetTriggerUnit())

endif
//call 
//call SaveInteger(udg_MainHashe,GetHandleId(t1),StringHash("FrLvl"),GetUnitAbilityLevel(GetTriggerUnit(),'A04H'))
set ltt = null
set t1 = null
endfunction

//===========================================================================
function InitTrig_Frostmourne takes nothing returns nothing
    set gg_trg_Frostmourne = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Frostmourne, EVENT_PLAYER_HERO_SKILL )
    call TriggerAddCondition( gg_trg_Frostmourne, Condition( function Trig_Frostmourne_Conditions ) )
    call TriggerAddAction( gg_trg_Frostmourne, function Trig_Frostmourne_Actions )
endfunction
Старый 29.05.2010, 19:55
Закрытая тема

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

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

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

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



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