PtokaX forum

Archive => Archived 4.0 boards => Request for Lua 4 scripts => Topic started by: Scorpion on 28 March, 2004, 21:51:36

Title: top online
Post by: Scorpion on 28 March, 2004, 21:51:36
is there a top online script, if yes help me find it
Title:
Post by: Corayzon on 29 March, 2004, 03:47:04
mean machine has a good example of a top hubbers script...have a look for it...

if u need some examples...i might help u out laters when i have some time =]

hope mm helps ya ;)
Title:
Post by: Scorpion on 29 March, 2004, 16:19:37
2 complicated script, i need a simple one
and i can't find the part of the top huburs thing
Title:
Post by: uNiOn on 29 March, 2004, 18:58:06
nr = 10 --<-------Numbers of "Toppers" You want to show
limit = 8 --<-------Limitter for Time-counter, to filter away "short-time" visitors. Set in minutes.


Tlist = {["Onliners"]={["login"]={}, ["Time"]={}}}
list = {["Kickers"]={}, ["Chatters"]={}, ["Banners"]={}}

Timefile = "Timer.txt"
Kickerfile = "Kickers.txt"


 

function Main()
  Tlist, list = loadTableFromFile(Timefile), loadTableFromFile(Kickerfile)
end
 

function OnExit()
         saveTableToFile(Kickerfile,list)
         saveTableToFile(Timefile,Tlist)    
end


function DataArrival(curUser, sData)
 
  if ( strsub(sData, 1, 5) == "$Kick" ) then
    list.Kickers[curUser.sName] = list.Kickers[curUser.sName] or 0
    list.Kickers[curUser.sName] = list.Kickers[curUser.sName]+1
 
  elseif( strsub(sData, 1, 1) == "<" ) then
    list.Chatters[curUser.sName] = list.Chatters[curUser.sName] or 0
    list.Chatters[curUser.sName] = list.Chatters[curUser.sName]+1  
 
      sData=strsub(sData,1,-2)
      s,e,cmd,arg = strfind( sData, "%b<>%s+(%S+)%s*(%S*)" )

        if (cmd=="!nickban") or (cmd=="!ban") then
 
          list.Banners[curUser.sName] = list.Banners[curUser.sName] or 0
          list.Banners[curUser.sName] = list.Banners[curUser.sName]+1  

        elseif (cmd=="+TopKicker") and (curUser.bOperator) then

          local curtime = date()
          SendToNick(curUser.sName,"\r\n\tTOP KICKER\t\t("..curtime..")\r\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r\n")
          local Index = sorting(list.Kickers)
 
            for i = 1, Index.n do

              local key = Index
              SendToNick(curUser.sName, "**** "..i.." [ "..key.." ]\t\t=>\t"..list.Kickers[key])
              SendToNick(curUser.sName,"-----------------------------------------------------------------------------------------------------------")

                if i>=nr then break end
                     
            end
   return 1
       

        elseif (cmd=="+TopChatter") then

          local curtime = date()
          SendToNick(curUser.sName,"\r\n\tTOP CHATTER\t\t("..curtime..")\r\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r\n")
          local Index = sorting(list.Chatters)

            for i = 1, Index.n do

              local key = Index
              SendToNick(curUser.sName, "**** "..i.." [ "..key.." ]\t\t=>\t"..list.Chatters[key])
              SendToNick(curUser.sName,"-----------------------------------------------------------------------------------------------------------")

                if i>=nr then break end

            end
   return 1
         

        elseif (cmd=="+TopBanner") and (curUser.bOperator) then

          local curtime = date()
          SendToNick(curUser.sName,"\r\n\tTOP BANNER\t\t("..curtime..")\r\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r\n")
          local Index = sorting(list.Banners)

            for i = 1, Index.n do

              local key = Index
              SendToNick(curUser.sName, "**** "..i.." [ "..key.." ]\t\t=>\t"..list.Banners[key])
              SendToNick(curUser.sName,"-----------------------------------------------------------------------------------------------------------")

                if i>=nr then break end

            end
   return 1
         

         elseif (cmd=="+TopOnliner") then

           local curtime = date()
           local now = Calc(Tlist.Onliners.login, Tlist.Onliners.Time)
             SendToNick(curUser.sName,"\r\n\tTOP ONLINER\t\t\t\t("..curtime..")\r\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r\n")
           local Index = sorting(now)
                for i = 1, Index.n do
                  local key = Index
                  local days, hrs, min = Timemess(now[key])
                    SendToNick(curUser.sName, "**** "..i.." [ "..key.." ] has been here for; "..days.." days, "..hrs.." hours and "..min.." minutes")
                    SendToNick(curUser.sName,"-----------------------------------------------------------------------------------------------------------------------------------------------")
                  if i>=nr then break end
                end
    return 1
         

         elseif (cmd=="+MyTime") then

           local curtime = date()
           local usrtime = MyTime(Tlist.Onliners.login, Tlist.Onliners.Time, curUser)
           local days, hrs, min = Timemess(usrtime)
             SendToNick(curUser.sName,"*** You have been here for "..days.." days, "..hrs.." hours and "..min.." minutes in this hub \t( "..curtime.." )" )

          return 1
 
     elseif (cmd=="+NickTime") then
      local nick = arg
           local curtime = date()
           local usrtime = nickTime(Tlist.Onliners.login, Tlist.Onliners.Time, nick)   
      if  usrtime ==nil then
      SendToNick(curUser.sName,"**** "..nick.." isn't in our records****\t( "..curtime.." )") return 1 end
           local days, hrs, min = Timemess(usrtime)
                SendToNick(curUser.sName,"*** "..nick.." have been here for "..days.." days, "..hrs.." hours and "..min.." minutes in this hub \t( "..curtime.." )" )

          return 1
         end end
end
 


function sorting(table)

  local index = {n=0}
  foreach(table, function(key, value) tinsert(%index, key) end)
  local func = function(a, b) return %table[a] > %table end
  sort(index, func) return index
end
 


function loadTableFromFile(file)
  if readfrom(file) ~= nil then
   local aString = read("*all")
     return unpickle(aString)
  else
   saveTableToFile(Kickerfile,list)
   saveTableToFile(Timefile,Tlist)
  readfrom(file)
   local aString = read("*all")
    return unpickle(aString)
  end
end
 


function saveTableToFile(file,table)

   local aString = pickle(table)
     writeto(file)
       write(aString)
     writeto()
end
 


function NewUserConnected(curUser)

  local minute = Jmn(a)
  Tlist.Onliners.login[curUser.sName] = Tlist.Onliners.login[curUser.sName] or 0
  Tlist.Onliners.login[curUser.sName] = tonumber(minute)
  Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] or 0
  Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] + tonumber(minute) - tonumber(Tlist.Onliners.login[curUser.sName])  

end
 


function UserDisconnected(curUser)

  local minute = Jmn(a)
 
    if Tlist.Onliners.login[curUser.sName] == nil then
     Tlist.Onliners.Time[curUser.sName] = nil
    else
     Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] or 0
     Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] + tonumber(minute) - tonumber(Tlist.Onliners.login[curUser.sName])

      if Tlist.Onliners.Time[curUser.sName] <= limit then
       Tlist.Onliners.Time[curUser.sName] = nil
       Tlist.Onliners.login[curUser.sName] = nil
      else
       Tlist.Onliners.login[curUser.sName] = nil  
      end
    end
end
 


function OpConnected(curUser)

  local minute = Jmn(a)
  Tlist.Onliners.login[curUser.sName] = Tlist.Onliners.login[curUser.sName] or 0
  Tlist.Onliners.login[curUser.sName] = tonumber(minute)
  Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] or 0
  Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] + tonumber(minute) - tonumber(Tlist.Onliners.login[curUser.sName])  

end
 


function OpDisconnected(curUser)

  local minute = Jmn(a)
 
    if Tlist.Onliners.login[curUser.sName] == nil then
     Tlist.Onliners.Time[curUser.sName] = nil
    else
     Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] or 0
     Tlist.Onliners.Time[curUser.sName] = Tlist.Onliners.Time[curUser.sName] + tonumber(minute) - tonumber(Tlist.Onliners.login[curUser.sName])

      if Tlist.Onliners.Time[curUser.sName] <= limit then
       Tlist.Onliners.Time[curUser.sName] = nil
       Tlist.Onliners.login[curUser.sName] = nil
      else
       Tlist.Onliners.login[curUser.sName] = nil  
      end
    end
 
end
 


function Calc(a, c)

  local indeX = {}
    foreach(a, function(key,value)
      for key, value in %a do
        for key2, value2 in %c do
          if (key == key2) then
          local minute = Jmn()
          local diff = tonumber(value2) + minute - tonumber(value)
          rawset(%indeX, key, diff)
          end
        end
      end
    end)
    return indeX
end



function MyTime(a, c, curUser)

  local minute = Jmn()
  local onTime =""
    for key, value in a do
      for key2, value2 in c do
        if key == curUser.sName and key2 == curUser.sName then
          onTime = tonumber(value2) + minute - tonumber(value)
          return onTime
        end
      end
    end
 
end
 


function Jmn() --(Modified Julian "minute" number. This restricts the algorithm to 1900 Mar 01 until 2100 Feb 28)

  D = tonumber(date("%d"))
  H = tonumber(date("%H"))
  minutE = tonumber(date("%M"))
  Y = tonumber(date("%Y"))
  M = tonumber(date("%m"))
    if M <= 2 then
      M = M + 12
      Y=Y-1
    end
        mn = 1440*(floor(Y*365,25) + floor((M+1)*30,6) + D -428) + H*60 + minutE
        return mn
end
 

function Timemess(T)

  local min = tonumber(T)
  local days = floor(min/1440)
  local hrs = floor((min-(days*1440))/60)
  min = floor(min-(days*1440)-(hrs*60))
  return days, hrs, min
end

function nickTime(a, c, e)

  local minute = Jmn()
  local onTime =""
    for k, v in a do
       for k2, v2 in c do
        if k==e and k2==e then
   onTime = tonumber(v2) + minute - tonumber(v) return onTime
   elseif (a[e] == nil) then
   onTime = tonumber(c[e]) return onTime          
        end end end
end

----------------------------------------------
-- Pickle.lua
-- An table serialization utility for lua
-- Steve Dekorte, http://www.dekorte.com, Apr 2000
-- Freeware
----------------------------------------------

function pickle(t)
  return Pickle:clone():pickle_(t)
end

Pickle = {
  clone = function (t) local nt={}; for i, v in t do nt=v end return nt end
}

function Pickle:pickle_(root)
  if type(root) ~= "table" then
    error("can only pickle tables, not ".. type(root).."s")
  end
  self._tableToRef = {}
  self._refToTable = {}
  local savecount = 0
  self:ref_(root)
  local s = ""

  while getn(self._refToTable) > savecount do
    savecount = savecount + 1
    local t = self._refToTable[savecount]
    s = s.."{\n"
    for i, v in t do
        s = format("%s[%s]=%s,\n", s, self:value_(i), self:value_(v))
    end
    s = s.."},\n"
  end

  return format("{%s}", s)
end

function Pickle:value_(v)
  local vtype = type(v)
  if     vtype == "string" then return format("%q", v)
  elseif vtype == "number" then return v
  elseif vtype == "table" then return "{"..self:ref_(v).."}"
  else --error("pickle a "..type(v).." is not supported")
  end  
end

function Pickle:ref_(t)
  local ref = self._tableToRef[t]
  if not ref then
    if t == self then error("can't pickle the pickle class") end
    tinsert(self._refToTable, t)
    ref = getn(self._refToTable)
    self._tableToRef[t] = ref
  end
  return ref
end

----------------------------------------------
-- unpickle
----------------------------------------------

function unpickle(s)
  if type(s) ~= "string" then
    error("can't unpickle a "..type(s)..", only strings")
  end
  local tables = dostring("return "..s)
 
  for tnum = 1, getn(tables) do
    local t = tables[tnum]
    local tcopy = {}; for i, v in t do tcopy = v end
    for i, v in tcopy do
      local ni, nv
      if type(i) == "table" then ni = tables[i[1]] else ni = i end
      if type(v) == "table" then nv = tables[v[1]] else nv = v end
      t[ni] = nv
    end
  end
  return tables[1]
end


Maybe thisone i found it on the lua bord and it works for me... =)

Cheers
Title:
Post by: uNiOn on 29 March, 2004, 18:58:57
Try This Tread

http://board.univ-angers.fr/thread.php?threadid=319&boardid=12&sid=c5299118ab85e9bd42f7e216452f9b80


Cheers
Title:
Post by: Scorpion on 30 March, 2004, 01:30:27
10z uNiOn dicoverd it 2, not bug free, but it works well
 :)