[JASS]
как сделать 3 разных действия с одной периодичностью по таймеру?
Алгоритм:
запуск тригера - из чата
остановка тригера - тоже из чата
действие1 через 0.3 сек (итого 0,3)
действие2 через 0.3 сек (итого 0,6)
действие3 через 0.3 сек (итого 0,9)
действие1 через 0.3 сек (итого 1,2)
действие2 через 0.3 сек (итого 1,5)
действие3 через 0.3 сек (итого 1,8)
итд
набросал корявый код, нерабочий конечно:
globals
integer Go=0
integer N=0
endglobals
function Test_Act takes nothing returns nothing
local integer i=GetPlayerId(GetTriggerPlayer())
if ModuloInteger(N,3)==1 then
//0.3
call BJDebugMsg("111 "+I2S(i))
elseif ModuloInteger(N,3)==2 then
//0.6
call BJDebugMsg("222 "+I2S(i))
elseif ModuloInteger(N,3)==3 then
//0.9
call BJDebugMsg("333 "+I2S(i))
endif
set N=N+1
endfunction
function Test_Init takes nothing returns nothing
local integer i=GetPlayerId(GetTriggerPlayer())
local trigger t=CreateTrigger()
local timer time=CreateTimer()
If Go=0 then
set Go=1
call EnableTrigger(t)
else
set Go=0
call DisableTrigger(t)
call PauseTimer(time)
endif
//ver1
call TriggerRegisterTimerEventPeriodic(t, 0.3)
call TriggerAddAction(t, function Test_Act)
//ver2
call TimerStart(time, 0.3, true, function Test_Act)
endfunction
function Event takes nothing returns nothing
local string s=StringCase(GetEventPlayerChatString(),false)
if s=="-t" then
call Test_Init()
endif
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Poma
Отредактирован nazarpunk
Отредактирован host_pi
каждый новый игрок включивший таймер ускоряет тик у каждого включившего.
т.е. если 3 игрока запустят таймер - то у всех из них тик будет чаще в 3 раза
т.е Spell_1 Spell_2 Spell_3 + OnPeriodic_1 OnPeriodic_2 OnPeriodic_3
бред конечно, что нельзя в таймерную функцию передавать переменные. кто-то запустил функцию по таймеру, а кто? да хз кто, тикает и ладно
Отредактирован host_pi
Или сохранять значение в хеш по id таймера
Отредактирован host_pi
как доделаю на тригерах - в один пост запощу оба варианта своего решения
Отредактирован Poma
Отредактирован Borodach
Отредактирован host_pi
у nazarpunk алгоритмика хорошая и рабочая
вот что получилось для 4х игроков на таймерах:
(из них у 1го игрока идёт общий подсчёт действий, у остальных без подсчёта)
ты загнал таймер сразу в Start_init
хотя эта функция вообще за чат отвечает, как и Start
т.е. до твоей правки они были универсальны, а после твоей правки стали бесполезно-громоздки, т.к. получился отдельный большой тригер-чата исключительно под таймер
+ если я правильно прочитал твой код в Start_init - то при старте карты у тебя включится таймер в бэк режиме, оттягивая на себя ресурсы просто так
+ у нас с панком команда из чата работает как вкл/выкл, как и было заявлено в первом посте. а у тебя получается она является стартующей. т.е. она только вкл
+ дебаг:
:39: Index missing for array variable TIME
:40: Index missing for array variable TIME
надо заменить
"timer array TIME" на "timer TIME=null" - для 1го кода
или оставить "timer array TIME" - для 2го кода
каждый 1 тик работает 12 раз (по количеству плееров)
т.е. если 1й игрок пишет -g то за 1 тик выдает 12 строк
видимо потому что в Start_init ты 12 раз запускаешь 12 таймеров т.е. 12 функций OnPeriodic за 1 тик
попробуй сам на карте