Версия для печати темы
MyDC.ru _ Kорзина _ Перезагрузка Скрипта По Таймеру
Автор: Jackson 28.3.2009, 1:07
В общем есть код, который выводит сообщение в общий чат по установленному таймеру.
Код
sTime = 5 -- Время в минутах
sBot = SetMan.GetString(21)
function OnStartup()
TmrMan.AddTimer(sTime*60000)
end
function OnTimer()
Core.SendToAll("<"..sBot.."> сообщение")
end
нужно что-бы вместо вывода сообщения запускалась команда, а точнее
!restartscript scriptname.lua или-же другим способом добиться перезапуска скрипта по таймеру! уже всю голову изломал... помогите пожалуйста
API2
Автор: Setuper 28.3.2009, 1:21
Во-первых, не в тот раздел пишешь. Перемещаю в нужный радел.
Во-вторых, команды можно вызвать только клиентом. Скрипт не вызывает команд, а только обрабатывает их.
В-третьих, для перезагрузки скриптов в API2 существует функция
Код
ScriptMan.RestartScript(sScriptName)
В-четвёртых, не надо ломать голову, она ещё пригодится, надо просто почитать какие функции бывают в файле scripting-interface.txt
Автор: Jackson 28.3.2009, 12:08
большое спасибо за помощь! вот что у меня вышло:
Код
sTime = 2 -- Время в минутах
sBot = SetMan.GetString(21)
function OnStartup()
TmrMan.AddTimer(sTime*60000)
end
function OnTimer()
ScriptMan.RestartScript(ScriptMan.GetScript().sName)
end
всё легко и просто.
извиняюсь что создал тему не в том разделе... еще не совсем разобрался у вас на форуме
Автор: Wariner 28.3.2009, 15:42
вообще то поидеи если надо перезапустить все скрипты, то
Код
sTime = 2 -- Время в минутах
sBot = SetMan.GetString(21)
function OnStartup()
TmrMan.AddTimer(sTime*60000)
end
function OnTimer()
tScripts = ScriptMan.GetScript()
for i,v in pairs(tScripts) do
ScriptMan.RestartScript(v.sName)
end
end
Автор: Jackson 28.3.2009, 16:41
Warnier,
спасибо мне нужно было для перезапуска одного скрипта, того в котором это написано...
Автор: Wariner 28.3.2009, 16:53
просто вот этот код
Код
ScriptMan.RestartScript(ScriptMan.GetScript().sName)
не должен работать!
Автор: Jackson 28.3.2009, 17:26
Цитата(Wariner @ 28.3.2009, 17:53)
просто вот этот код
Код
ScriptMan.RestartScript(ScriptMan.GetScript().sName)
не должен работать!
хмм... но ведь у меня работает! никаких ошибок, как часы
в любом случае всем спасибо, помогли!
Автор: Wariner 28.3.2009, 18:04
а как ты это определяешь?
напиши в функции OnStarup следующий код
Код
Core.SendToAll(tostring(ScriptMan.GetScript().sName))
и он ничего не вернёт!
а вот тут должно быть имя скрипта
Код
ScriptMan.RestartScript("скрипт.lua")
Автор: Setuper 28.3.2009, 19:10
Wariner, ты не прав.
Функция ScriptMan.GetScript() работает только после запуска скрипта, поэтому если скрипт уже запущен, то она будет работать, а если скрипт только запускается, то во время запуска она не работает.
В случае работы по таймеру всё будет работать.
Автор: Wariner 28.3.2009, 19:26
ну блин я проверил этот код http://mydc.ru/ipb.html?s=&showtopic=1672&view=findpost&p=12935
Цитата
[19:25] Синтаксис test.lua:10: attempt to call field 'GetScript' (a nil value)
Автор: Setuper 28.3.2009, 19:33
хм... значит плохо проверял.
У меня всё работает
Автор: Wariner 28.3.2009, 20:00
тогда объясни почему это должно работать?
ведь ScriptMan.GetScript() вернёт таблицу типа:
Код
t = {
[1] = {
[sName] = "Скрипт"
....
},
[2] = {
[sName] = "Скрипт2"
....
},
}
куда мы деваем промежуточный индекс и как скрипт определит что это нужный скрипт для рестарта?
Автор: Setuper 28.3.2009, 20:09
ты путаешь функции
ScriptMan.GetScript()
и
ScriptMan.GetScripts()
Автор: Wariner 28.3.2009, 20:13
ухахахаха оно и правильно))) я по привычке лазею в скрипт интерфейс 0400 птоки и тестил на ней......................
Автор: Setuper 28.3.2009, 20:17
Это уже тонкости API2
Хотя если используешь 0.4.0.0, почему бы не перейти на 0.4.1.1 ? Учитывая то, что 0.4.1.1 более стабильная версия, в которой множество фиксов и добавлений.
Автор: Wariner 28.3.2009, 20:21
продолжаем оффтоп))) я уже перешёл а на рабочем столе остались старые тестовые хабы....