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

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

MyDC.ru _ Kорзина _ Типо Статистико

Автор: DEM0N 23.8.2008, 17:22

Хотелосьбы такой скриптик =) чтобы менюшка была типо Статистика\\Топ хаба!

 

Автор: dimetrius 23.8.2008, 22:56

топ по всему? или чему-то определённому?

Автор: DEM0N 23.8.2008, 23:12

имено 1й командой в меню выводило такой топ просто такой топ!

Автор: DEM0N 24.8.2008, 19:00

ктонибудь етим займёться? ну оно какбы должно фиксировать естесно! ети статистики и чтобы выводило например када на хабе первый раз там ну 1567 человек оно писало в чат типо
<бот хаба>новый рекорд хаба 1567 юзеров
ну и также с шарой думаю отличный скрипт! вот прикрепляю чтото похожее но надо имено 1 менюшка и чтобы показывало прям как на скрине а там их тьма!!


 StatPX_1.01a.zip ( 31.74 килобайт ) : 39
 

Автор: tot@l 25.8.2008, 9:49

я это сделал через веб-статистику, тот же скрипт, что выдает на сайт, он же показывает в приват или общак топ по посещаемости. Показывает так же "новый рекорд хаба ХХ юзеров" По шаре не выводил, это видно всем желающим на сайте. Если сайта нет- не беда, статистика просто накапливается в хтмл-"логе", можно посмотреть в любой момент.

http://mydc.ru/topic55.html?hl=%F1%F2%E0%F2%E8%F1%F2%E8%EA%E0


Автор: DEM0N 25.8.2008, 10:19

смотри внимательнее я такой я якрипт приложил а нужен такой как на скрине

Автор: mariner 25.8.2008, 14:14

ну так ручками, ручками. Править от ситы строк 5 big_smile.gif

Автор: Wariner 27.8.2008, 20:54

2DEM0N сделал я тебе почти всё что ты просил... Единственный недостаток не сделал удаление из топа по шаре если юзер не заходил в течении какого то времени или шара сменилась(пока не знаю как)

PS не забудь создать папку ...\scripts\Statistics

 Statistics.lua ( 7.61 килобайт ) : 56
 

Автор: DEM0N 1.9.2008, 16:53

преблагодарен всё прекарасно работает респект feel_good.gif

реал ету статистику добавить в этот скрипт? о_О

 прикрутить_к_етому___.rar ( 22.32 килобайт ) : 24
 

Автор: Wariner 2.9.2008, 15:43

Цитата(DEM0N @ 1.9.2008, 17:53) *
реал ету статистику добавить в этот скрипт? о_О

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

Автор: DEM0N 2.9.2008, 16:13

чтобы в етот скрипт статистики добавить такой раздел статистики не на вебсервере а в дц в меню такой я хочю убрать те статистики чтобы была ета которую ты написал но чтобы оно всё также фиксировало и писало и на вебсервере отображала а остальные менющкшки я просто отменю в скриптах

Автор: Wariner 3.9.2008, 15:59

бредовая идея!!! накой тебе это?!

Автор: DEM0N 3.9.2008, 20:44

ну очень нужно ) во 2х краткость сестра таланта а нужно оно мне на то чтобы статистики небыло от скрипта каторый выводит статистику на сайт чтобы выводило на сайт статистику а на хабе покказывало такую о_О

Автор: Wariner 3.9.2008, 21:16

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

Автор: =TuRoK= 10.9.2008, 8:27

Цитата(Wariner @ 27.8.2008, 20:54) *
2DEM0N сделал я тебе почти всё что ты просил...


В этом скрипте нашёл один косяк,после перезапуска хаба,статистика почему то слетает,и все,кто после перезапуска входит на хаб,опять скрипт выводит Установлен новый рекорд по количеству пользователей: 1 !
и так далее...

А точней после перезапуска скриптов статистика обнуляется...

 Статистика.lua ( 7.65 килобайт ) : 13
 

Автор: =TuRoK= 13.9.2008, 20:17

Может кто подправить этот глюк,послеперезапуска скриптов статистика обнуляется,удаляется с файла unhappy.gif

 Статистика.lua ( 7.65 килобайт ) : 5
 

Автор: Wariner 13.9.2008, 20:41

Я короче посмотрел, но пока не знаю как устранить!((( Как найду решение выложу;)

Автор: =TuRoK= 13.9.2008, 22:58

Цитата(Wariner @ 13.9.2008, 21:41) *
Я короче посмотрел, но пока не знаю как устранить!((( Как найду решение выложу;)


Спасибо за откликbig_smile.gif Бум ждать))

Автор: Wariner 14.9.2008, 10:39

Короче так я и не понял в чём ошибка, так что переделал полность часть скрипта отвечающую за создание таблиц)))
Если найдёте ещё баги пишите

 Statistics.lua ( 6.24 килобайт ) : 55
 

Автор: =TuRoK= 14.9.2008, 13:53

Спасиб Wariner, всё норм работает big_smile.gif

Автор: Dem 14.9.2008, 18:16

Поставил StatPX, норм пашет. Ток чтоб его поставить, нужен веб сервак на компе. Иначе другим будет недоступно.


Автор: Wariner 14.9.2008, 19:39

Цитата(Dem @ 14.9.2008, 19:16) *
Поставил StatPX, норм пашет. Ток чтоб его поставить, нужен веб сервак на компе. Иначе другим будет недоступно.

Я не понял а причём тут это? вроде бы в этой теме этот скрипт не обсуждается...

Автор: Dem 15.9.2008, 18:10

Цитата(Wariner @ 14.9.2008, 19:39) *
Я не понял а причём тут это? вроде бы в этой теме этот скрипт не обсуждается...


Смотри 4 пост. Человек просто парим мозги и все. То одно ему не так, то второе. Лучше были норм скрипты начиная от птоки 0.4.0.0 и выше.

Автор: DEM0N 15.9.2008, 20:07

то что мне надо было уже зделать ненадо тулить лишних месаг

Автор: =TuRoK= 15.9.2008, 23:35

Ещё один скрипт статистики,случайно наткнулся на него, в архиве для API 1 и 2. Провелял немного,вроде работает норм,единственное пути для сохранения файлов пропишите нормальней если надо, ато сохраняется чисто на С диске за пределами папки PtokaX

 StatPX_1.02_beta.rar ( 20.42 килобайт ) : 7
 

Автор: DEM0N 15.9.2008, 23:35

со временем почемуто просто проходит время и она отрубаеться о_О

Автор: =TuRoK= 26.9.2008, 0:37

Что то проблемка появилась со статистикой,как только я хочу посмотреть статистику,скрипт отрубается вылазит такая ошибка
Синтаксис C:\Хаб\scripts\Статистика.lua:90: attempt to concatenate global 'numb' (a nil value)
Точней на тестовом хабе,где почти никого,по запросу всё пашет, а вот уже где есть народ, при запросе она и отрубается
Проблема только с запросом статистики, остальное работает

 Статистика.lua ( 6.26 килобайт ) : 3
 

Автор: Wariner 26.9.2008, 14:11

думаю если на одном хабе работает а на другом нет(и хабы одинаковые) то проблема в скриптах. попробуй поотключать и проверить с каким скриптом не дружит данная статистика

Автор: =TuRoK= 27.9.2008, 0:36

Пробовал отключать другие скрипты,не помогает, да и смысл,если при пустом хабе при запросе статистики пашет,а с народом почему то нет,подумаю,мож сам найду ещ проблему

Автор: TMB 27.9.2008, 23:22

нихрена етот скрипт не работает! т.е работает но почему то отключается! по команде и из меню не выводится!
сначало вроде работал....один день... scorn.gif

Автор: Wariner 28.9.2008, 8:21

2TMB: какие ошибки выдаёт?

Автор: TMB 28.9.2008, 17:32

Цитата(Wariner @ 28.9.2008, 8:21) *
2TMB: какие ошибки выдаёт?

[18:29] Синтаксис E:\PtokaX\scripts\Статистика.lua:90: attempt to concatenate global 'numb' (a nil value)
вот такую...!!!

Автор: Wariner 29.9.2008, 9:38

попробуйте так

 Statistics.lua ( 6.24 килобайт ) : 15
 

Автор: TMB 29.9.2008, 18:27

Цитата(Wariner @ 29.9.2008, 9:38) *
попробуйте так

[19:25] Синтаксис E:\PtokaX\scripts\Статистика.lua:91: attempt to concatenate local 'numb' (a nil value)
неработает!

Автор: =TuRoK= 29.9.2008, 19:20

И это факт,при пустом хабе пашет,а с народом нет,после запроса статистики вылетает скрипт(((

Автор: Wariner 29.9.2008, 19:35

Так давайте разберёмся! Скрипт вылетает именно тогда когда вы смотрите статистику или кто то? Если после вашего напишите чему равна ваша шара!

Автор: Setuper 29.9.2008, 20:10

Потому, что автор скрипта немного не внимателен)))

Вот эту часть кода надо исправить:

Код
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


И ещё несколько грамматических ошибок:
Пользователи участвуют врейтинге в течении неограниченного времени

Пользователи участвуют в рейтинге в течение неограниченного времени

feel_good.gif

Автор: TMB 29.9.2008, 21:58

Цитата(Setuper @ 29.9.2008, 20:10) *
Потому, что автор скрипта немного не внимателен)))

Вот эту часть кода надо исправить:
Код
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


И ещё несколько грамматических ошибок:
Пользователи участвуют врейтинге в течении неограниченного времени

Пользователи участвуют в рейтинге в течение неограниченного времени

feel_good.gif

а после правки этого участка кода скрипт у тебя работает? если работает выложы уже рабочую весрию!! если не сложно!!

Автор: Setuper 29.9.2008, 22:23

Исправь сам и убедись, что он работает)))

Здесь все учатся писать и исправлять скрипты. Для этого и создан этот форум.

Не знаешь - поможем. Не хочешь - заставим)))))))))

Хочешь научиться сам писать скрипты? Первое, чему надо научится - это исправлять указанные ошибки big_smile.gif

Автор: TMB 29.9.2008, 22:55

Цитата(Setuper @ 29.9.2008, 22:23) *
Исправь сам и убедись, что он работает)))

Здесь все учатся писать и исправлять скрипты. Для этого и создан этот форум.

Не знаешь - поможем. Не хочешь - заставим)))))))))

Хочешь научиться сам писать скрипты? Первое, чему надо научится - это исправлять указанные ошибки big_smile.gif


всё зделал как выше описанно! толку ноль!!!
[23:52] Синтаксис E:\PtokaX\scripts\Статистика.lua:90: attempt to concatenate global 'numb' (a nil value)
Выложи свою версию..!

Автор: =TuRoK= 29.9.2008, 23:04

Wariner: Вот,про шару самый раз,ток щас въехал,сорри,короче скрипт вылетает,если кто то запрашивает статистику с нулевой шарой,или скрытой шарой,значит в этом и есть проблема вылета,но тестил уже с исправлением Setuper! Возможно исправить этот баг?
Вот с исправлением Setuper

 Статистика.lua ( 6.22 килобайт ) : 18
 

Автор: Setuper 29.9.2008, 23:05

Сравнивай и смотри где у тебя ошибка)) Сравнишь, отпиши что у тебя было не так!!!

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

Автор: =TuRoK= 29.9.2008, 23:19

Я скрипты то не умею писать,если проблема вылета скрипта при запросе стастики была в том,что нулевая шара у меня или у других пользователей,то версия без твоего исправления Setuper тож работает,но всё равно спасибо за помощь,вот только не приколько что из за юзеров с нулевой шарой при запросе статистики,вылетает скрипт...((

Автор: Setuper 29.9.2008, 23:22

Первый вариант:

Код
local numb = "none"


Второй вариант (классный вариант big_smile.gif ):
Код
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)

в последнем случае пользователи с нулевой шарой тоже будут участвовать в топе!

Автор: =TuRoK= 29.9.2008, 23:49

Спасибо тебе огромное Setuper , теперь всё норм!!! big_smile.gif
Сразу что то до меня не дошло что проблемма вылета скрипта при запросе из за нулевой шары((
Сам пока не соображаю,но всё же по образцам что то исправляю,может когда нить и простые скрипты научусь писать,хотя сложно всё же))

Автор: DEM0N 6.10.2008, 23:45

нежелаете прикрутить топ100 по шаре ато топ 10 тока =(

Автор: Setuper 6.10.2008, 23:53

ну а какие проблемы? shocked.gif
меняй gMaxShowed = 10 на gMaxShowed = 100

Автор: DEM0N 7.10.2008, 17:38

нез аменить а прикрутить дополнительно чтобы мона было ето смотреть и типо Статистика\\шара\\топ100 ето я для примера написал

Автор: Wariner 7.10.2008, 20:15

2DEM0N Тебя не поймёшь... то ты хочешь так

Цитата(DEM0N @ 23.8.2008, 18:22) *
Хотелосьбы такой скриптик =) чтобы менюшка была типо Статистика\\Топ хаба!

то тебе топ 100 подавай.... определись со своими желаниями!

Автор: Wariner 13.11.2008, 20:55

добавил в скрипт ограничение колличества дней участия в топе

 Statistics.lua ( 7.5 килобайт ) : 55
 

Автор: Setuper 13.11.2008, 23:46

хех не совсем понятно для чего в функции очистки строчка:

Код
sNick = q

Не проще ли было написать просто:
Код
if (tStat.tSharatop[q].Date + sDay*86400) < os.time() then
  tStat.tSharatop[q] = nil
end
Зачем вводить какую-то новую переменную sNick, причём глобальную, когда всё тоже самое можно сделать с локальной переменной q? Это к слову оптимизации. Данный факт я наблюдал уже в нескольких твоих скриптах))))

Автор: Wariner 13.11.2008, 23:55

Как бы это объяснить... Я пишу скрипт, иногда что то не работает, при этом появляется несколько вариаций кода и к моему сожалению моя крайняя не внимательность приводит к лишним строчкам... Наверно так.

PS хорошо что есть человек готовый ткнуть носом))))

Автор: KauH 14.11.2008, 0:24

Цитата(Wariner @ 13.11.2008, 20:55) *
добавил в скрипт ограничение колличества дней участия в топе

при заходе любого юзера на хаб скрипт вылетает с ошибкой
Код
attempt to index field 'tSharatop' (a nil value)

строка
Код
if tStat.tSharatop[sUser.sNick] == nil then


P.S. путём удаления старого файла Statistics.tbl скрипт был запущен и пока прекрасно работает feel_good.gif
всем спасибо сам виноват , в папке оказался файл от старой версии скрипта

Автор: Setuper 14.11.2008, 0:31

по всей видимости каким-то образом удалились (или ты сам удалил) все данный из файла Statistics.tbl
Открой файл и посмотри если ли там что-то?
Если файл отсутствует, то ошибки быть не должно. big_smile.gif

Не успел написать))

Автор: STAJIKER 20.11.2008, 0:58

Цитата(Wariner @ 14.9.2008, 10:39) *
Короче так я и не понял в чём ошибка, так что переделал полность часть скрипта отвечающую за создание таблиц)))
Если найдёте ещё баги пишите

а можешь сделать тоже смое на апи 1? big_smile.gif

Автор: Setuper 20.11.2008, 1:37

API1: http://mydc.ru/topic605.html

Автор: STAJIKER 20.11.2008, 8:12

Цитата(Setuper @ 20.11.2008, 1:37) *
API1: http://mydc.ru/topic605.html

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)

Автор: Setuper 20.11.2008, 12:51

папку для скрипта Statistics создал?

Автор: STAJIKER 20.11.2008, 14:37

Цитата(Setuper @ 20.11.2008, 12:51) *
папку для скрипта Statistics создал?

Конечно big_smile.gif

Автор: Setuper 20.11.2008, 14:43

удали файл Statistics.tbl в этой папке и перезапусти скрипт - должно всё работать!

Ты вообще читаешь сообщения форума? Человек с такой же ошибкой уже писал тут: http://mydc.ru/ipb.html?s=&showtopic=305&view=findpost&p=4576

Автор: STAJIKER 21.11.2008, 11:13

Цитата(Setuper @ 20.11.2008, 14:43) *
удали файл Statistics.tbl в этой папке и перезапусти скрипт - должно всё работать!

Ты вообще читаешь сообщения форума? Человек с такой же ошибкой уже писал тут: http://mydc.ru/ipb.html?s=&showtopic=305&view=findpost&p=4576

Блин у миня уже зла не хватает. Всё что ты говорил ни чего не помогает :(

Автор: Setuper 21.11.2008, 11:23

ну так надо исправлять ошибки и пытаться сделать так, чтобы всё заработало.

во-первых, по инструкции быстрого перевода под апи1, ты полностью не выполнил пункт 3. Надо дописывать Core. вот так:
function Core.OnStartup()
function Core.UserConnected(sUser)
Core.OpConnected = Core.UserConnected
Core.RegConnected = Core.UserConnected
function Core.ChatArrival(sUser,sData)

Автор: =TuRoK= 29.11.2008, 0:21

Цитата(Wariner @ 13.11.2008, 21:55) *
добавил в скрипт ограничение колличества дней участия в топе



За скрипт спасибо  feel_good.gif

Но время от времени вылетает с такой ошибкой:

[23:36] Синтаксис C:\Hub\scripts\Статистика.lua:142: attempt to index field '?' (a nil value)  

но запускается после вылета без проблем