Помогите пожалуйста в написании скрипта |
Здравствуйте, гость ( Вход | Регистрация )
Помогите пожалуйста в написании скрипта |
19.5.2009, 19:38
Сообщение
#1
|
|
Продвинутый участник Группа: Пользователи Сообщений: 134 Регистрация: 18.6.2008 Из: подземелье Пользователь №: 41 Спасибо сказали: 7 раз |
Собственно вот.. Пытался по примерам делать небольшой скрипт рекордов
CODE bot = SetMan.GetString(21) nTime = 30 -- время сохранения таблицы в минутах tHub = {} function OnStartup() sAway = Core.GetPtokaXPath().."scripts/silka1.txt" if loadfile(sAway) then dofile(sAway) end OnlineUsers = Core.GetOnlineUsers() OnlineShare = Core.GetCurrentSharedSize() tHub = {} tHub["MaxUsers"] = 0 tHub["MaxShare"] = 0 tHub["MaxUsersDate"] = 0 tHub["MaxShareDate"] = TmrMan.AddTimer(nTime*60000, "OnExit") end function OnExit() WriteTable(tHub, "tHub", sAway) end function UserConnected(user) Core.GetUserAllData(user) if tHub["MaxUsers"] < OnlineUsers then tHub["MaxUsers"] = OnlineUsers tHub["MaxUsersDate"] = os.date("[%H:%M-%d.%m.%y]") end if tHub["MaxShare"] < OnlineShare then tHub["MaxShare"] = OnlineShare tHub["MaxShareDate"] = os.date("[%H:%M-%d.%m.%y]") end end OpConnected = UserConnected RegConnected = UserConnected function WriteTable(tTable, tablename, file) local handle = io.open(file, "w") Serialize(tTable, tablename, handle) handle:close() end function Serialize(tTable, sTableName, hFile, sTab) sTab = sTab or ""; hFile:write(sTab..sTableName.." = {\n" ); for key, value in pairs(tTable) do local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key); if(type(value) == "table") then Serialize(value, sKey, hFile, sTab.."\t"); else local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value); hFile:write(sTab.."\t"..sKey.." = "..sValue); end hFile:write(",\n"); end hFile:write(sTab.."}"); end 0.4.1.1\scripts\records.lua:31: attempt to compare number with table - вот такая штуковина... подскажите как правильно записать данные в таблицу.. а потом брать и использовать при необходимости |
|
|
19.5.2009, 20:12
Сообщение
#2
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
тут много ошибок! в основном даже просто в концепции скрипта!
начнём пожалуй с твоей написанной птокой ошибки: Код if tHub["MaxUsers"] < OnlineUsers then читая описание ошибки видим что tHub["MaxUsers"] даёт нам число а OnlineUsers даёт таблицу, смотрим почему: Код OnlineUsers = Core.GetOnlineUsers() читаем скрипт интерфейс Цитата Return table with all logged user tables. это означает что это нам даёт таблицу с юзерами на хабе а не их количество! поэтому надо так: Код OnlineUsers = Core.GetUsersCount() теперь о самом скрипте Код function OnStartup() sAway = Core.GetPtokaXPath().."scripts/silka1.txt" if loadfile(sAway) then dofile(sAway) end OnlineUsers = Core.GetOnlineUsers() OnlineShare = Core.GetCurrentSharedSize() tHub = {} tHub["MaxUsers"] = 0 tHub["MaxShare"] = 0 tHub["MaxUsersDate"] = 0 tHub["MaxShareDate"] = 0 TmrMan.AddTimer(nTime*60000, "OnExit") end тут ты загружаешь данные, а потом действием Код tHub = {} tHub["MaxUsers"] = 0 tHub["MaxShare"] = 0 tHub["MaxUsersDate"] = 0 tHub["MaxShareDate"] = 0 их обнуляешь! да и потом не рационально проверять рекорды при входе юзера! лучше делать это по таймеру! но если хочешь чтоб было именно так то вид будет такой: Код local bot = SetMan.GetString(21)
local nTime = 30 -- время сохранения таблицы в минутах tHub = {} function OnStartup() sAway = Core.GetPtokaXPath().."scripts/silka1.txt" if loadfile(sAway) then dofile(sAway) end if not TmrMan.AddTimer(nTime*60000, "OnExit") end function OnExit() WriteTable(tHub, "tHub", sAway) end function UserConnected(user) if not tHub["MaxUsers"] or tHub["MaxUsers"] < Core.GetUsersCount() then tHub["MaxUsers"] = Core.GetUsersCount() tHub["MaxUsersDate"] = os.date("[%H:%M-%d.%m.%y]") end if not tHub["MaxShare"] or tHub["MaxShare"] < Core.GetCurrentSharedSize() then tHub["MaxShare"] = Core.GetCurrentSharedSize() tHub["MaxShareDate"] = os.date("[%H:%M-%d.%m.%y]") end end OpConnected = UserConnected RegConnected = UserConnected function WriteTable(tTable, tablename, file) function Serialize(tTable, sTableName, hFile, sTab) |
|
|
19.5.2009, 20:14
Сообщение
#3
|
|
Продвинутый участник Группа: Пользователи Сообщений: 134 Регистрация: 18.6.2008 Из: подземелье Пользователь №: 41 Спасибо сказали: 7 раз |
Спасибо большое, а как как оптимальней будет? Как с таймером поступать?
|
|
|
19.5.2009, 20:19
Сообщение
#4
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
пустить секундный таймер на какую нибудь функцию
Код TmrMan.AddTimer(1000, "название функциии") и перенести всё из функции UserConnected в эту функцию |
|
|
19.5.2009, 20:25
Сообщение
#5
|
|
Продвинутый участник Группа: Пользователи Сообщений: 134 Регистрация: 18.6.2008 Из: подземелье Пользователь №: 41 Спасибо сказали: 7 раз |
Помоги пожалуйста еще (я наглый, извините) :
сделал так: CODE local bot = SetMan.GetString(21) local nTime = 30 -- время сохранения таблицы в минутах tHub = {} function OnStartup() sAway = Core.GetPtokaXPath().."scripts/silka1.txt" if loadfile(sAway) then dofile(sAway) end TmrMan.AddTimer(nTime*60000, "OnExit") TmrMan.AddTimer(1000, "hubstat") end function hubstat() if not tHub["MaxUsers"] or tHub["MaxUsers"] < Core.GetUsersCount() then tHub["MaxUsers"] = Core.GetUsersCount() tHub["MaxUsersDate"] = os.date("[%H:%M-%d.%m.%y]") end if not tHub["MaxShare"] or tHub["MaxShare"] < Core.GetCurrentSharedSize() then tHub["MaxShare"] = Core.GetCurrentSharedSize() tHub["MaxShareDate"] = os.date("[%H:%M-%d.%m.%y]") end end function OnExit() WriteTable(tHub, "tHub", sAway) end OpConnected = UserConnected RegConnected = UserConnected function WriteTable(tTable, tablename, file) end function Serialize(tTable, sTableName, hFile, sTab) end И запутался.. |
|
|
19.5.2009, 20:51
Сообщение
#6
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
ну вроде всё так, в чём проблема?
PS: конечно же должен присутствовать код функция WriteTable и Serialize |
|
|
19.5.2009, 20:59
Сообщение
#7
|
|
Продвинутый участник Группа: Пользователи Сообщений: 134 Регистрация: 18.6.2008 Из: подземелье Пользователь №: 41 Спасибо сказали: 7 раз |
Спасибо, работает что-то я уснул за клавой.. Большенство функций смотрел как сделано в твоих скриптах, пасиба
|
|
|
Похожие темы
|
Сейчас: 27.11.2024, 3:23 |