Автор: Ksan 8.11.2011, 16:31
Товарищ один (Akvilon) попросил помощи, и вот кидаю частное решение (хотя расширить никто не мешает).
Цель - периодическая инициализация действий со сдвигом по времени (например, 2 сообщения в чат, разнесенных по времени на полчаса, то есть, общий период - 1 час)
Код
local iTime = 1 -- в данном случае - это 1 час
function OnStartup()
tmr1 = TmrMan.AddTimer(iTime*3600000)
end
function OnTimer(tmr)
if tmr == tmr1 then
Core.SendToAll("Бла-бла-бла!")
tmr2 = TmrMan.AddTimer(iTime*30000)
elseif tmr == tmr2 then
Core.SendToAll("Шурум-бурум-тяп-ляп!")
TmrMan.RemoveTimer(tmr2)
end
end
Возможно, решение уже где-то есть, а возможно, ещё кому-то пригодится.
Автор: Alexey 8.11.2011, 21:30
Этот вариант проще и лучше масштабируется.
Код
local sBot = "Информер" -- Имя бота-спамера
local nTimer = 30 -- Минут между сообщениями
local nPos = 1 -- Порядковый номер следующего сообщения
local tMsgs = {
[[Сообщение1]],
[[Сообщение2]],
}
function OnStartup()
for i, v in ipairs(tMsgs) do
tMsgs[i] = "<"..sBot.."> "..v
end
TmrMan.AddTimer(nTimer * 60 * 1000)
end
function OnTimer()
Core.SendToAll(tMsgs[nPos])
if #tMsgs > nPos then
nPos = nPos + 1
else
nPos = 1
end
end
Автор: Ksan 9.11.2011, 11:37
Так я же писал для частного случая.
Если бы я сам спонтанно захотел написать, я бы написал скрипт для общего случая.
Но не стал, пусть люди сами думают.
База есть (скриптик из первого сообщения).