• 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!

RANK LEVEL BROADCAST

antoniolagos

Member
Joined
Apr 10, 2010
Messages
34
Reaction score
6
Hello, I´m developing an incredible WAR OT, and I need a script for globaevents that broadcast TOP 8 levels Online (each XXX minutes). Anyone can help please :D
 
Solution
try with this 2
Lua:
function onThink(interval, lastExecution)
   local max, query = 8 , db.getResult("SELECT `name`, `level` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `level` DESC, `name` ASC;")
   local str = "TOP"..max.." Rank Level:\n\n"
   if (query:getID() ~= -1) then
     k = 1
     while true do
       str = str .. "\n " .. k .. " - "..query:getDataString("name").."["..query:getDataInt("level").."]"
       k = k + 1
       if not(query:next()) or k > max then
         break
       end
     end
     query:free()
   end
    doBroadcastMessage(str, 22)
   return true
end

Lua:
function getTop5Players()
local player1 = {0,-1}
local player2 = {0,-1}
local player3 = {0,-1}
local player4 = {0,-1}
local player5 = {0,-1}...
try this
Lua:
function onThink()
    local players = getOnlinePlayers()
    table.sort(players, function(cid1, cid2)
        return getPlayerLevel(cid1) > getPlayerLevel(cid2)
    end)
    local msg = {"Top 8 Players Online:"}
    for i = 1, 8 do
        local cid = players[i]
        if cid then
            msg[#msg + 1] = string.format("%d. %s (Level: %d)", i, getCreatureName(cid), getPlayerLevel(cid))
        end
    end
    broadcastMessage(table.concat(msg, "\n"), MESSAGE_STATUS_CONSOLE_RED)
    return true
end

XML:
<globalevent name="top players" interval="600000" script="script name.lua" />
 
try this
Lua:
function onThink()
    local players = getOnlinePlayers()
    table.sort(players, function(cid1, cid2)
        return getPlayerLevel(cid1) > getPlayerLevel(cid2)
    end)
    local msg = {"Top 8 Players Online:"}
    for i = 1, 8 do
        local cid = players[i]
        if cid then
            msg[#msg + 1] = string.format("%d. %s (Level: %d)", i, getCreatureName(cid), getPlayerLevel(cid))
        end
    end
    broadcastMessage(table.concat(msg, "\n"), MESSAGE_STATUS_CONSOLE_RED)
    return true
end

XML:
<globalevent name="top players" interval="600000" script="script name.lua" />

I will try it when I get back home! Thanks very much for colaboration. I hope it works :) I will tell you later how it goes.
 
try this
Lua:
function onThink()
    local players = getOnlinePlayers()
    table.sort(players, function(cid1, cid2)
        return getPlayerLevel(cid1) > getPlayerLevel(cid2)
    end)
    local msg = {"Top 8 Players Online:"}
    for i = 1, 8 do
        local cid = players[i]
        if cid then
            msg[#msg + 1] = string.format("%d. %s (Level: %d)", i, getCreatureName(cid), getPlayerLevel(cid))
        end
    end
    broadcastMessage(table.concat(msg, "\n"), MESSAGE_STATUS_CONSOLE_RED)
    return true
end

XML:
<globalevent name="top players" interval="600000" script="script name.lua" />

[Error - GlobalEvent Interface]
[21/11/2018 11:14:6] data/globalevents/scripts/topplayers.lua:eek:nThink
[21/11/2018 11:14:6] Description:
[21/11/2018 11:14:6] data/globalevents/scripts/topplayers.lua:10: bad argument #3 to 'format' (string expected, got boolean)
[21/11/2018 11:14:6] stack traceback:
[21/11/2018 11:14:6] [C]: in function 'format'
[21/11/2018 11:14:6] data/globalevents/scripts/topplayers.lua:10: in function <data/globalevents/scripts/topplayers.lua:1>
[21/11/2018 11:14:6] [Error - GlobalEvents::think] Couldn't execute event: top players

Have this problem. My line 10 is

msg[#msg + 1] = string.format("%d. %s (Level: %d)", i, getCreatureName(cid), getPlayerLevel(cid))
 
try with this 2
Lua:
function onThink(interval, lastExecution)
   local max, query = 8 , db.getResult("SELECT `name`, `level` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `level` DESC, `name` ASC;")
   local str = "TOP"..max.." Rank Level:\n\n"
   if (query:getID() ~= -1) then
     k = 1
     while true do
       str = str .. "\n " .. k .. " - "..query:getDataString("name").."["..query:getDataInt("level").."]"
       k = k + 1
       if not(query:next()) or k > max then
         break
       end
     end
     query:free()
   end
    doBroadcastMessage(str, 22)
   return true
end

Lua:
function getTop5Players()
local player1 = {0,-1}
local player2 = {0,-1}
local player3 = {0,-1}
local player4 = {0,-1}
local player5 = {0,-1}
local player6 = {0,-1}
local player7 = {0,-1}
local player8 = {0,-1}
local top5text = "Top 8 level online"
local players = getPlayersOnline()
if #players == 0 then
return top5text
end
for i, cid in ipairs(players) do
if getPlayerLevel(cid) > player1[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {player1[1], player1[2]}
player1 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player2[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player3[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player4[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player5[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player6[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player7[2] then
player8 = {player7[1], player7[2]}
player7 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player8[2] then
player8 = {cid, getPlayerLevel(cid)}
end
end
if player1[1] > 0 then
top5text = top5text .. "\n1. " .. getCreatureName(player1[1]) .. " - " .. player1[2] .. " Level"
end
if player2[1] > 0 then
top5text = top5text .. "\n2. " .. getCreatureName(player2[1]) .. " - " .. player2[2] .. " Level"
end
if player3[1] > 0 then
top5text = top5text .. "\n3. " .. getCreatureName(player3[1]) .. " - " .. player3[2] .. " Level"
end
if player4[1] > 0 then
top5text = top5text .. "\n4. " .. getCreatureName(player4[1]) .. " - " .. player4[2] .. " Level"
end
if player5[1] > 0 then
top5text = top5text .. "\n5. " .. getCreatureName(player5[1]) .. " - " .. player5[2] .. " Level"
end
if player6[1] > 0 then
top5text = top5text .. "\n6. " .. getCreatureName(player6[1]) .. " - " .. player6[2] .. " Level"
end
if player7[1] > 0 then
top5text = top5text .. "\n7. " .. getCreatureName(player7[1]) .. " - " .. player7[2] .. " Level"
end
if player8[1] > 0 then
top5text = top5text .. "\n8. " .. getCreatureName(player8[1]) .. " - " .. player8[2] .. " Level"
end
return top5text
end
function onThink(interval, lastExecution)
doBroadcastMessage(getTop5Players())
return TRUE
end
 
Last edited:
Solution
This should work correctly with OTX Copy correctly and have a fun!

  1. local config = {
  2. limit = 8
  3. }
  4. function onThink(interval, lastExecution)
  5. local t, ret, tmp = {}, "Top " .. math.min(config.limit, getWorldCreatures(0)) .. " fraggers online:"
  6. for _, cid in ipairs(getPlayersOnline()) do
  7. tmp = db.getResult("SELECT COUNT(*) as count FROM killers WHERE death_id IN (SELECT kill_id FROM player_killers) AND " .. getPlayerGUID(cid) .. " IN (SELECT player_id FROM player_killers WHERE kill_id = death_id)")
  8. table.insert(t, {cid, tmp:getDataInt("count")})
  9. tmp:free()
  10. end
  11. table.sort(t, function(a,b) return a[2] > b[2] end)
  12. for i = 1, math.min(#t, config.limit) do
  13. ret = ret .. "\n" .. i .. ". " .. getPlayerName(t[1]) .. " - " .. t[2] .. " frags"
    [*] end
    [*] return doBroadcastMessage(ret)
    [*]end
 
try with this 2
Lua:
function onThink(interval, lastExecution)
   local max, query = 8 , db.getResult("SELECT `name`, `level` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `level` DESC, `name` ASC;")
   local str = "TOP"..max.." Rank Level:\n\n"
   if (query:getID() ~= -1) then
     k = 1
     while true do
       str = str .. "\n " .. k .. " - "..query:getDataString("name").."["..query:getDataInt("level").."]"
       k = k + 1
       if not(query:next()) or k > max then
         break
       end
     end
     query:free()
   end
    doBroadcastMessage(str, 22)
   return true
end

Lua:
function getTop5Players()
local player1 = {0,-1}
local player2 = {0,-1}
local player3 = {0,-1}
local player4 = {0,-1}
local player5 = {0,-1}
local player6 = {0,-1}
local player7 = {0,-1}
local player8 = {0,-1}
local top5text = "Top 8 level online"
local players = getPlayersOnline()
if #players == 0 then
return top5text
end
for i, cid in ipairs(players) do
if getPlayerLevel(cid) > player1[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {player1[1], player1[2]}
player1 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player2[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player3[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player4[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player5[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player6[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player7[2] then
player8 = {player7[1], player7[2]}
player7 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player8[2] then
player8 = {cid, getPlayerLevel(cid)}
end
end
if player1[1] > 0 then
top5text = top5text .. "\n1. " .. getCreatureName(player1[1]) .. " - " .. player1[2] .. " Level"
end
if player2[1] > 0 then
top5text = top5text .. "\n2. " .. getCreatureName(player2[1]) .. " - " .. player2[2] .. " Level"
end
if player3[1] > 0 then
top5text = top5text .. "\n3. " .. getCreatureName(player3[1]) .. " - " .. player3[2] .. " Level"
end
if player4[1] > 0 then
top5text = top5text .. "\n4. " .. getCreatureName(player4[1]) .. " - " .. player4[2] .. " Level"
end
if player5[1] > 0 then
top5text = top5text .. "\n5. " .. getCreatureName(player5[1]) .. " - " .. player5[2] .. " Level"
end
if player6[1] > 0 then
top5text = top5text .. "\n6. " .. getCreatureName(player6[1]) .. " - " .. player6[2] .. " Level"
end
if player7[1] > 0 then
top5text = top5text .. "\n7. " .. getCreatureName(player7[1]) .. " - " .. player7[2] .. " Level"
end
if player8[1] > 0 then
top5text = top5text .. "\n8. " .. getCreatureName(player8[1]) .. " - " .. player8[2] .. " Level"
end
return top5text
end
function onThink(interval, lastExecution)
doBroadcastMessage(getTop5Players())
return TRUE
end

Thanks very much! the second option did the trick perfectly! the first one shows the best level of offline and online players, but the second one only the players online, that is what I needed. Thanks a lot! Here is the code if somebody wants to use it:

Create a file in globalevents topplayers.lua and copy the following:

function getTop5Players()
local player1 = {0,-1}
local player2 = {0,-1}
local player3 = {0,-1}
local player4 = {0,-1}
local player5 = {0,-1}
local player6 = {0,-1}
local player7 = {0,-1}
local player8 = {0,-1}
local top5text = "Top 8 level Online"
local players = getPlayersOnline()
if #players == 0 then
return top5text
end
for i, cid in ipairs(players) do
if getPlayerLevel(cid) > player1[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {player1[1], player1[2]}
player1 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player2[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {player2[1], player2[2]}
player2 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player3[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {player3[1], player3[2]}
player3 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player4[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {player4[1], player4[2]}
player4 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player5[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {player5[1], player5[2]}
player5 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player6[2] then
player8 = {player7[1], player7[2]}
player7 = {player6[1], player6[2]}
player6 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player7[2] then
player8 = {player7[1], player7[2]}
player7 = {cid, getPlayerLevel(cid)}
elseif getPlayerLevel(cid) > player8[2] then
player8 = {cid, getPlayerLevel(cid)}
end
end
if player1[1] > 0 then
top5text = top5text .. "\n1. " .. getCreatureName(player1[1]) .. " - " .. player1[2] .. " Level"
end
if player2[1] > 0 then
top5text = top5text .. "\n2. " .. getCreatureName(player2[1]) .. " - " .. player2[2] .. " Level"
end
if player3[1] > 0 then
top5text = top5text .. "\n3. " .. getCreatureName(player3[1]) .. " - " .. player3[2] .. " Level"
end
if player4[1] > 0 then
top5text = top5text .. "\n4. " .. getCreatureName(player4[1]) .. " - " .. player4[2] .. " Level"
end
if player5[1] > 0 then
top5text = top5text .. "\n5. " .. getCreatureName(player5[1]) .. " - " .. player5[2] .. " Level"
end
if player6[1] > 0 then
top5text = top5text .. "\n6. " .. getCreatureName(player6[1]) .. " - " .. player6[2] .. " Level"
end
if player7[1] > 0 then
top5text = top5text .. "\n7. " .. getCreatureName(player7[1]) .. " - " .. player7[2] .. " Level"
end
if player8[1] > 0 then
top5text = top5text .. "\n8. " .. getCreatureName(player8[1]) .. " - " .. player8[2] .. " Level"
end
return top5text
end
function onThink(interval, lastExecution)
doBroadcastMessage(getTop5Players(),22)
return TRUE
end


AND IN GLOBALEVENTS.XML:

<globalevent name="top players" interval="180000" script="topplayers.lua" />

Ready, you have best 8 players online each 3 minutes.
 
Back
Top