Leaderboard:
type: world
events:
on player killed by player:
- flag <context.damager.as_player> kill_player_count:++
- flag <context.player> death_player_count:++
#Run through the current top players to see if this kill places the player on the list
- define x 1
- define KD <<context.damager.as_player>.flag[kill_player_count].div[<<context.damager.as_player>.flag[death_player_count]>]||0>
- - while <def[KD].is[OR_LESS].than[5]> {
- - announce "Loop <def[loop_index]> value <def[value]>"
- - define value <def[value].add[1]>
- }
+ #Check if KD is greater than any of the top 5
+ - while <def[x].is[OR_LESS].than[5]> {
+ #Define the player at position
+ - define TopPlayer <server.flag[Leaderboard].get[<def[x]>].as_player>
+ #Define their KD
+ - define TopKD <<def[TopPlayer]>.flag[kill_player_count.div[<def[TopPlayer]>.flag[death_player_count]>||0>
+ #Compare their KD against the current killer. If it's greater, insert that player in the list.
+ - if <<def[KD]>.is[OR_GREATER].than[<def[TopKD]>> {
+ - flag server Leaderboard:<server.flag[Leaderboard].insert[<context.damager.as_player>].at[<def[x]>]>
+ #break the loop to avoid any unnecessary calculations
+ - define x 5
+ }
+ #If not, try the next position on the list
+ - define x <def[x].add[1]>
+ }
+ #For sake of space/memory, prune the list back down to 5.
+ - flag server Leaderboard:<server.flag[Leaderbpard].get[1].to[5]>
+
on leaderboard command:
- narrate "<player.flag[kill_player_count].div[<player.flag[death_player_count]>]||0>"
LeaderboardProc:
type: procedure