• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[TFS 1.1] Broadcasting TOP 5 fraggers

heskey

New Member
Joined
Jan 23, 2015
Messages
1
Reaction score
0
How to make broadcast with top 5 fraggers each 5 min? Just like that:

1. Name (kills)
2. Name (kills) etc...

I don't have "killers" table only player_death...
 
Code:
<globalevent name="fraggers" interval="300000" script="top_fraggers.lua"/>

Code:
local cfg = {
   top = 5,
   messagetype = MESSAGE_STATUS_CONSOLE_ORANGE
}

function table.find(table, value)
   for i, v in pairs(table) do
     if v == value then
       return i
     end
   end
   return nil
end

function getHighest(check, values)
   local highest = 0
   local highestVal = nil
   local highestI = nil
   for i = 1, #values do
     if check[values[i]] > highest then
       highest = check[values[i]]
       highestVal = values[i]
       highestI = i
     end
   end
   
   return {highest, highestVal, highestI}
end

function getTopFraggers()
   local fraggers = {}
   local resultId = db.storeQuery("SELECT `player_id`, `killed_by` FROM `player_deaths` WHERE `is_player` = 1")
   if resultId then
     repeat
       table.insert(fraggers, result.getDataString(resultId, "killed_by"))       
     until not result.next(resultId)
     result.free(resultId)
   end

   local fraggers_names = {}
   for i = 1, #fraggers do
     if not table.find(fraggers_names, fraggers[i]) then
       table.insert(fraggers_names, fraggers[i])
     end
   end
   
   local fraggers_total = {}
   for i = 1, #fraggers do
   for j = 1, #fraggers_names do
     if fraggers_names[j] == fraggers[i] then
       if not fraggers_total[fraggers_names[j]] then fraggers_total[fraggers_names[j]] = 0 end
       fraggers_total[fraggers_names[j]] = fraggers_total[fraggers_names[j]] + 1
     end
   end   
   end
   
   local fraggers_top = {}
   for i = 1, cfg.top do
     local v = getHighest(fraggers_total, fraggers_names)
     table.insert(fraggers_top, {v[1], v[2]})
     table.remove(fraggers_names, v[3])
   end
   
   local msg = "Top fraggers:\n"
   for i = 1, #fraggers_top do
     if fraggers_top[i][2] then
       msg = msg .. "[" .. i .. "]: " .. fraggers_top[i][2] .. ": [" .. fraggers_top[i][1] .. "]" .. ((fraggers_top[i+1][2] and i+1 ~= #fraggers_top) and "\n" or "")
     else
       break
     end
   end
   broadcastMessage(msg, cfg.messagetype)
end

function onThink(interval)
   getTopFraggers()
   return true
end
 
Help Bro Tfs 1.2
Code:
Lua Script Error: [GlobalEvent Interface]
data/globalevents/scripts/top_fraggers.lua:onThink
data/globalevents/scripts/top_fraggers.lua:67: attempt to index a nil value
[Error - GlobalEvents::think] Failed to execute event: fraggers
 
Last edited:
Back
Top