Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

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

всё легко и просто.
извиняюсь что создал тему не в том разделе... еще не совсем разобрался у вас на форуме big_smile.gif

Автор: 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,
спасибо big_smile.gif мне нужно было для перезапуска одного скрипта, того в котором это написано...

Автор: 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)

не должен работать!

хмм... но ведь у меня работает! никаких ошибок, как часы big_smile.gif

в любом случае всем спасибо, помогли!

Автор: 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 big_smile.gif

Хотя если используешь 0.4.0.0, почему бы не перейти на 0.4.1.1 ? Учитывая то, что 0.4.1.1 более стабильная версия, в которой множество фиксов и добавлений.

Автор: Wariner 28.3.2009, 20:21

продолжаем оффтоп))) я уже перешёл а на рабочем столе остались старые тестовые хабы....