Типо Статистико, api2 lua 5.1.3 |
Здравствуйте, гость ( Вход | Регистрация )
Типо Статистико, api2 lua 5.1.3 |
29.9.2008, 23:04
Сообщение
#41
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.7.2008 Из: Тамбов Пользователь №: 259 Спасибо сказали: 1 раз |
Wariner: Вот,про шару самый раз,ток щас въехал,сорри,короче скрипт вылетает,если кто то запрашивает статистику с нулевой шарой,или скрытой шарой,значит в этом и есть проблема вылета,но тестил уже с исправлением Setuper! Возможно исправить этот баг?
Вот с исправлением Setuper
Прикрепленные файлы
|
|
|
29.9.2008, 23:05
Сообщение
#42
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Сравнивай и смотри где у тебя ошибка)) Сравнишь, отпиши что у тебя было не так!!!
CODE --[[ Statistics v1.0 by Wariner
Возможности скрипта: - Показывает Топ пользователей по шаре - Показывает максимальное колличество юзеров, шары на хабе и даты их установления всё это одной командой Скрипт удобнее смотреть в Notepad++ ]]-- ----------------------------------------------------------------------------- -- Конфигурация ----------------------------------------------------------------------------- gBot = SetMan.GetString(21) gPath = Core.GetPtokaXPath():gsub("/", "\\").."scripts\\Statistics\\" -- основная папка скрипта gStat = gPath.."Statistics.tbl" -- таблица max статистики gMaxShowed = 10 -- максимально выводимое кол-во участников ранжирования byte=1 Kbyte=1024 Mbyte=Kbyte*Kbyte Gbyte=Kbyte*Kbyte*Kbyte Tbyte=Kbyte*Kbyte*Kbyte*Kbyte tStat = {} ----------------------------------------------------------------------------- -- дальше лучше ничего не трогать ----------------------------------------------------------------------------- function OnStartup() -- функции которые выполняются при загрузке скрипта if loadfile(gStat) ~= nil then dofile(gStat) else tStat["tSharatop"] = {} tStat["tMaxtop"] = {} tStat.tMaxtop["MaxUsers"] = 0 tStat.tMaxtop["MaxUsersTime"] = 0 tStat.tMaxtop["MaxShara"] = 0 tStat.tMaxtop["MaxSharaTime"] = 0 WriteFile(tStat, "tStat", gStat) end TmrMan.AddTimer(30*1000,"UpdateHubStats") end function UserConnected(sUser) Core.GetUserAllData(sUser) Core.SendToNick(sUser.sNick,"$UserCommand 1 3 Статистика\\Посмотреть$<%[mynick]> !statistics|") local shara = sUser.iShareSize or 0 if shara ~= 0 then tStat.tSharatop[sUser.sNick] = shara WriteFile(tStat, "tStat", gStat) end end OpConnected = UserConnected RegConnected = UserConnected function ChatArrival(sUser,sData) sData = string.sub(sData,1,-2) local _,_,cmd =string.find(sData, "%b<>%s+(%S+)") if cmd == "!statistics" then Core.SendToNick(sUser.sNick,"<"..gBot.."> "..ShowRanks(sUser, tStat.tSharatop)) return true end end function ShowRanks(sUser, tQWERTY) Core.GetUserAllData(sUser) local shara = sUser.iShareSize or 0 local tTemp = {} local numb = "none" for i,v in pairs(tQWERTY) do table.insert(tTemp,{i,v}) end table.sort(tTemp,function(a,b) return (a[2] > b[2]) end) msg = "\r\n\r\n\t\t\t\tСтатистика хаба\r\n".. "-"..string.rep("«»", 40).."-\r\n".. "\tСейчас юзеров: "..Core.GetUsersCount()..", максимум: ".. tStat.tMaxtop["MaxUsers"]..", был: "..tStat.tMaxtop["MaxUsersTime"].."\r\n".. "\tСейчас общая шара: "..getNormalShare(Core.GetCurrentSharedSize()).. ", максимум: "..getNormalShare(tStat.tMaxtop["MaxShara"])..", был: ".. tStat.tMaxtop["MaxSharaTime"].."\r\n".. "-"..string.rep("«»", 40).."-\r\n".. "\tРейтинг самых больших коллекций хаба:\r\n" --[[for i = 1,gMaxShowed do if tTemp[i] then msg = msg.."\t["..i.."] "..getLenght(tTemp[i][1]).."\t".. getNormalShare(tTemp[i][2]).."\r\n" if tTemp[i][1] == sUser.sNick then numb = i end end end]] for i = 1,#tTemp do if tTemp[i] then if i<=gMaxShowed then msg = msg.."\t["..i.."] "..getLenght(tTemp[i][1]).."\t".. getNormalShare(tTemp[i][2]).."\r\n" end if tTemp[i][1] == sUser.sNick then numb = i end end end msg = msg.."-"..string.rep("«»", 40).."-\r\n".. "\tВы расшарили: "..getNormalShare(shara).. ",\t ваш вклад в общую шару хаба: ".. tostring(math.floor(1000*((shara*100)/Core.GetCurrentSharedSize()))/1000).. "%\r\n".. "\tВаша позиция в рейтинге: "..numb.."\r\n".. "\tПользователи участвуют в рейтинге в течение неограниченного времени\r\n".. "-"..string.rep("«»", 40).."-" return msg end function UpdateHubStats() local sTotalUsers = Core.GetUsersCount() local sTotalShare = Core.GetCurrentSharedSize() if sTotalUsers > tStat.tMaxtop["MaxUsers"] then tStat.tMaxtop["MaxUsers"] = sTotalUsers tStat.tMaxtop["MaxUsersTime"] = os.date("%d.%m.%Y в %H:%M:%S") Core.SendToAll("<"..gBot.."> Установлен новый рекорд по количеству пользователей: "..sTotalUsers.." !") end if sTotalShare > tStat.tMaxtop["MaxShara"] then tStat.tMaxtop["MaxShara"] = sTotalShare tStat.tMaxtop["MaxSharaTime"] = os.date("%d.%m.%Y в %H:%M:%S") Core.SendToAll("<"..gBot.."> Установлен новый рекорд по общему размеру шары: "..getNormalShare(sTotalShare).." !") end WriteFile(tStat, "tStat", gStat) end function getNormalShare(share) -- шара не в байтах local sshare = 0; if tonumber (share) then sshare = tonumber (share) else sshare =0; end local tshare="" if sshare >=Tbyte then tshare = tostring(math.floor(1000*sshare/Tbyte)/1000).." ТБ" elseif sshare >=Gbyte then tshare = tostring(math.floor(1000*sshare/Gbyte)/1000).." ГБ" elseif sshare >=Mbyte then tshare = tostring(math.floor(1000*sshare/Mbyte)/1000).." МБ" elseif sshare >=Kbyte then tshare = tostring(math.floor(1000*sshare/Kbyte)/1000).." КБ" else tshare = tostring(sshare).." Б" end return tshare end function getLenght(Name) -- функция длинны ника local Nick = Name sLength = string.len(Nick) if sLength < 20 then tLength = 20 - sLength end Nick = Nick..string.rep(" ", tLength) return Nick end function WriteFile(table, tablename, file) local handle = io.open(file, "w") Serialize(table, 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 |
|
|
29.9.2008, 23:19
Сообщение
#43
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.7.2008 Из: Тамбов Пользователь №: 259 Спасибо сказали: 1 раз |
Я скрипты то не умею писать,если проблема вылета скрипта при запросе стастики была в том,что нулевая шара у меня или у других пользователей,то версия без твоего исправления Setuper тож работает,но всё равно спасибо за помощь,вот только не приколько что из за юзеров с нулевой шарой при запросе статистики,вылетает скрипт...((
|
|
|
29.9.2008, 23:22
Сообщение
#44
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Первый вариант:
Код local numb = "none" Второй вариант (классный вариант ): Код local numb = "очень низкая" Третий вариант: изменить код: Код if shara ~= 0 then tStat.tSharatop[sUser.sNick] = shara WriteFile(tStat, "tStat", gStat) end на код: Код tStat.tSharatop[sUser.sNick] = shara WriteFile(tStat, "tStat", gStat) в последнем случае пользователи с нулевой шарой тоже будут участвовать в топе! |
|
|
29.9.2008, 23:49
Сообщение
#45
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.7.2008 Из: Тамбов Пользователь №: 259 Спасибо сказали: 1 раз |
Спасибо тебе огромное Setuper , теперь всё норм!!!
Сразу что то до меня не дошло что проблемма вылета скрипта при запросе из за нулевой шары(( Сам пока не соображаю,но всё же по образцам что то исправляю,может когда нить и простые скрипты научусь писать,хотя сложно всё же)) |
|
|
6.10.2008, 23:45
Сообщение
#46
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 29.7.2008 Из: керчь Пользователь №: 293 Спасибо сказали: 0 раз |
нежелаете прикрутить топ100 по шаре ато топ 10 тока =(
|
|
|
6.10.2008, 23:53
Сообщение
#47
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
ну а какие проблемы?
меняй gMaxShowed = 10 на gMaxShowed = 100 |
|
|
7.10.2008, 17:38
Сообщение
#48
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 29.7.2008 Из: керчь Пользователь №: 293 Спасибо сказали: 0 раз |
нез аменить а прикрутить дополнительно чтобы мона было ето смотреть и типо Статистика\\шара\\топ100 ето я для примера написал
|
|
|
7.10.2008, 20:15
Сообщение
#49
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
|
|
|
13.11.2008, 20:55
Сообщение
#50
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
добавил в скрипт ограничение колличества дней участия в топе
Прикрепленные файлы
|
|
|
13.11.2008, 23:46
Сообщение
#51
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
хех не совсем понятно для чего в функции очистки строчка:
Код sNick = q Не проще ли было написать просто: Код if (tStat.tSharatop[q].Date + sDay*86400) < os.time() then Зачем вводить какую-то новую переменную sNick, причём глобальную, когда всё тоже самое можно сделать с локальной переменной q? Это к слову оптимизации. Данный факт я наблюдал уже в нескольких твоих скриптах))))
tStat.tSharatop[q] = nil end |
|
|
13.11.2008, 23:55
Сообщение
#52
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
Как бы это объяснить... Я пишу скрипт, иногда что то не работает, при этом появляется несколько вариаций кода и к моему сожалению моя крайняя не внимательность приводит к лишним строчкам... Наверно так.
PS хорошо что есть человек готовый ткнуть носом)))) |
|
|
14.11.2008, 0:24
Сообщение
#53
|
|
lua-паддаван Группа: Пользователи Сообщений: 75 Регистрация: 1.7.2008 Из: www.u-l.ru Пользователь №: 114 Спасибо сказали: 29 раз |
добавил в скрипт ограничение колличества дней участия в топе при заходе любого юзера на хаб скрипт вылетает с ошибкой Код attempt to index field 'tSharatop' (a nil value) строка Код if tStat.tSharatop[sUser.sNick] == nil then P.S. путём удаления старого файла Statistics.tbl скрипт был запущен и пока прекрасно работает всем спасибо сам виноват , в папке оказался файл от старой версии скрипта Сообщение отредактировал KauH - 14.11.2008, 0:31 |
|
|
14.11.2008, 0:31
Сообщение
#54
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
по всей видимости каким-то образом удалились (или ты сам удалил) все данный из файла Statistics.tbl
Открой файл и посмотри если ли там что-то? Если файл отсутствует, то ошибки быть не должно. Не успел написать)) |
|
|
20.11.2008, 0:58
Сообщение
#55
|
|
Участник Группа: Пользователи Сообщений: 35 Регистрация: 2.11.2008 Из: Балаково Пользователь №: 971 Спасибо сказали: 0 раз |
|
|
|
20.11.2008, 1:37
Сообщение
#56
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
|
|
|
20.11.2008, 8:12
Сообщение
#57
|
|
Участник Группа: Пользователи Сообщений: 35 Регистрация: 2.11.2008 Из: Балаково Пользователь №: 971 Спасибо сказали: 0 раз |
CODE dofile(frmHub:GetPtokaXLocation().."scripts/old_api.lu") gBot = "-=хХ]ЗлОдЕЙ[Хх=-" gPath = Core.GetPtokaXPath():gsub("/", "\\").."scripts\\Statistics\\" -- основная папка скрипта gStat = gPath.."Statistics.tbl" -- таблица max статистики gMaxShowed = 25 -- максимально выводимое кол-во участников ранжирования byte=1 Kbyte=1024 Mbyte=Kbyte*Kbyte Gbyte=Kbyte*Kbyte*Kbyte Tbyte=Kbyte*Kbyte*Kbyte*Kbyte tStat = {} ------------------------------------------------------------------------------------------------------------------------ -- дальше лучше ничего не трогать ------------------------------------------------------------------------------------------------------------------------ function OnStartup() -- функции которые выполняются при загрузке скрипта if loadfile(gStat) ~= nil then dofile(gStat) else tStat["tSharatop"] = {} tStat["tMaxtop"] = {} tStat.tMaxtop["MaxUsers"] = 0 tStat.tMaxtop["MaxUsersTime"] = 0 tStat.tMaxtop["MaxShara"] = 0 tStat.tMaxtop["MaxSharaTime"] = 0 WriteFile(tStat, "tStat", gStat) end TmrMan.AddTimer(30*1000,"UpdateHubStats") end function UserConnected(sUser) Core.GetUserAllData(sUser) Core.SendToNick(sUser.sNick,"$UserCommand 1 3 -=хХ] ГлаВноЕ МенЮ [Хх=-\\-=[Информация]=-\\Посмотреть статитику$<%[mynick]> !statistics|") local shara = sUser.iShareSize or 0 if shara ~= 0 then tStat.tSharatop[sUser.sNick] = shara WriteFile(tStat, "tStat", gStat) end end OpConnected = UserConnected RegConnected = UserConnected function ChatArrival(sUser,sData) sData = string.sub(sData,1,-2) local _,_,cmd =string.find(sData, "%b<>%s+(%S+)") if cmd == "!statistics" then Core.SendToNick(sUser.sNick,"<"..gBot.."> "..ShowRanks(sUser, tStat.tSharatop)) return true end end function ShowRanks(sUser, tQWERTY) Core.GetUserAllData(sUser) local shara = sUser.iShareSize or 0 local tTemp = {} for i,v in pairs(tQWERTY) do table.insert(tTemp,{i,v}) end table.sort(tTemp,function(a,b) return (a[2] > b[2]) end) msg = "\r\n\r\n\t\t\t\tСтатистика хаба\r\n".. "-"..string.rep("«»", 40).."-\r\n".. "\tСейчас юзеров: "..Core.GetUsersCount()..", максимум: "..tStat.tMaxtop["MaxUsers"]..", был: "..tStat.tMaxtop["MaxUsersTime"].."\r\n".. "\tСейчас общая шара: "..getNormalShare(Core.GetCurrentSharedSize())..", максимум: "..getNormalShare(tStat.tMaxtop["MaxShara"])..", был: "..tStat.tMaxtop["MaxSharaTime"].."\r\n".. "-"..string.rep("«»", 40).."-\r\n".. "\tРейтинг самых больших коллекций хаба:\r\n" for i = 1,gMaxShowed do if tTemp[i] then msg = msg.."\t["..i.."] "..getLenght(tTemp[i][1]).."\t"..getNormalShare(tTemp[i][2]).."\r\n" if tTemp[i][1] == sUser.sNick then numb = i end end end msg = msg.."-"..string.rep("«»", 40).."-\r\n".. "\tВы расшарили: "..getNormalShare(shara)..",\t ваш вклад в общую шару хаба: "..tostring(math.floor(1000*((shara*100)/Core.GetCurrentSharedSize()))/1000).."%\r\n".. "\tВаша позиция в рейтинге: "..numb.."\r\n".. "\tПользователи участвуют врейтинге в течении неограниченного времени\r\n".. "-"..string.rep("«»", 40).."-" return msg end function UpdateHubStats() local sTotalUsers = Core.GetUsersCount() local sTotalShare = Core.GetCurrentSharedSize() if sTotalUsers > tStat.tMaxtop["MaxUsers"] then tStat.tMaxtop["MaxUsers"] = sTotalUsers tStat.tMaxtop["MaxUsersTime"] = os.date("%d.%m.%Y в %H:%M:%S") --"%Y/%m/%d %H:%M:%S" Core.SendToAll("<"..gBot.."> Установлен новый рекорд по количеству пользователей: "..sTotalUsers.." !") end if sTotalShare > tStat.tMaxtop["MaxShara"] then tStat.tMaxtop["MaxShara"] = sTotalShare tStat.tMaxtop["MaxSharaTime"] = os.date("%d.%m.%Y в %H:%M:%S") Core.SendToAll("<"..gBot.."> Установлен новый рекорд по общему размеру шары: "..getNormalShare(sTotalShare).." !") end WriteFile(tStat, "tStat", gStat) end function getNormalShare(share) -- шара не в байтах local sshare = 0; if tonumber (share) then sshare = tonumber (share) else sshare =0; end local tshare="" if sshare >=Tbyte then tshare = tostring(math.floor(1000*sshare/Tbyte)/1000).." ТБ" elseif sshare >=Gbyte then tshare = tostring(math.floor(1000*sshare/Gbyte)/1000).." ГБ" elseif sshare >=Mbyte then tshare = tostring(math.floor(1000*sshare/Mbyte)/1000).." МБ" elseif sshare >=Kbyte then tshare = tostring(math.floor(1000*sshare/Kbyte)/1000).." КБ" else tshare = tostring(sshare).." Б" end return tshare end function getLenght(Name) -- функция длинны ника local Nick = Name sLength = string.len(Nick) if sLength < 20 then tLength = 20 - sLength end Nick = Nick..string.rep(" ", tLength) return Nick end function WriteFile(table, tablename, file) local handle = io.open(file, "w") Serialize(table, 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 всё равно не работает, пишет следующее Синтакс D\PtokaX 0.3.6.0\scripts\Статистика.lua:38: attempt to index field 'tSharatop' (a nil value) |
|
|
20.11.2008, 12:51
Сообщение
#58
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
папку для скрипта Statistics создал?
|
|
|
20.11.2008, 14:37
Сообщение
#59
|
|
Участник Группа: Пользователи Сообщений: 35 Регистрация: 2.11.2008 Из: Балаково Пользователь №: 971 Спасибо сказали: 0 раз |
|
|
|
20.11.2008, 14:43
Сообщение
#60
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
удали файл Statistics.tbl в этой папке и перезапусти скрипт - должно всё работать!
Ты вообще читаешь сообщения форума? Человек с такой же ошибкой уже писал тут: http://mydc.ru/ipb.html?s=&showtopic=3...post&p=4576 |
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
Типо игра.... | 5 | random name | 8 456 | 21.3.2010, 17:30 Посл. сообщение: Invisible | |
От: Типо игра.... От темы с ID: 3238 |
1 | теньь | 5 391 | 18.3.2010, 13:07 Посл. сообщение: Saymon21 |
|
Сейчас: 27.11.2024, 2:01 |