Paste #29591: Diff note for paste #29590

Date: 2016/02/03 05:34:45 UTC-08:00
Type: Diff Report

View Raw Paste Download This Paste
Copy Link


 LeaderBoard_Version:
   type: version
   name: LeaderBoard
   id: 71
   description: A PVP Leaderboard system.
   version: 1.2
 
 LeaderBoard_Command:
   type: command
   debug: false
   name: leaderboard
   aliases:
   - leaders
   - leader
   - leaderboards
   usage: /leaderboard
   description: Check the pvp leaderboards!
   script:
     - if <player.has_permission[leaderboard.reset]||<context.server>> && <context.args.get[1]||null> == reset {
       - narrate "<&6>Resetting the server's leaderboard. <&f>NOTE: May lag servers with a large playerbase."
       - foreach <server.list_players> {
         - flag <def[Value]> kill_score:!
         - flag <def[Value]> death_score:!
         - flag <def[Value]> kill_death_ratio:!
       }
       - flag server "leaders:!"
       - narrate "<&6>Successfully reset the server's leaderboard."
       - queue clear
     }
+    - if <server.has_flag[update_leaders]> {
+      - flag server update_leaders:!
+      - inject s@LeaderBoard_Handler path:update
+    }
     - narrate "----- <&6>Leaderboards<&r> -----"
     - if <server.has_flag[leaders].not> {
       - narrate "Sorry, there are <&6>no<&r> leaders at this time!"
       - queue clear
     }
     - foreach <server.flag[leaders].as_list> {
       - narrate "<def[loop_index]>. <&6><def[Value].name><&r> - KDR: <&6><def[value].flag[kill_death_ratio]||0><&r> (<&6><def[value].flag[kill_score].round||0> <&r>Kills & <&6><def[Value].flag[death_score].round||0><&r> Deaths)"
     }
     
 LeaderBoard_ResetScore_Command:
   type: command
   debug: false
   name: resetscore
   aliases:
   - scorereset
   usage: /resetscore (player)
   description: Reset your own or another player's score.
   tab complete:
   - determine <server.list_players.parse[name].filter[starts_with[<context.args.last||>]]>
   permission message: <&c>I'm sorry, but you do not have permission to perform this command. Please contact the server administrators if you believe that this is in error.
   script:
   - choose <context.args.size>:
     - case 0:
       - define Target <player>
       - narrate "Resetting your <&6>Leadeboard scores<&r>!"
     - case 1:
       - if <player.has_permission[leaderboard.reset].not||<context.server.not>> {
         - narrate "<parse:<script.yaml_key[permission message]>>"
         - queue clear
       }
       - define Target <server.match_offline_player[<context.args.get[1]>]||null>
       - if <def[Target]> == null {
         - narrate "<&c>No player can be found by that name!"
         - queue clear
       }
       - narrate "Resetting the Leaderboard scores of <&6><def[Target].name><&r>."
     - default:
       - narrate "Usage: <parse:<script.yaml_key[usage]>>"
       
   - flag <def[Target]> kill_score:!
   - flag <def[Target]> death_score:!
   - flag <def[Target]> kill_death_ratio:!
   - run s@LeaderBoard_Handler path:update instantly
     
 Stats_Command:
   type: command
   debug: false
   name: stats
   aliases:
   - stats
   usage: /stats (player)
   description: Check your own or another player's pvp stats.
   script:
   - if <context.server> && <context.args.size> == 0 {
     - narrate "<&c>You must enter a player from console!"
     - queue clear
   }
   - if <context.server.not> {
     - define Target <player>
   }
   - if <context.args.size> >= 1 {
     - define Target <server.match_offline_player[<context.args.get[1]>]||null>
     - if <def[Target]> == null {
       - narrate "<&c>No player can be found by that name!"
       - queue clear
     }
   }
   - if <context.server.not> && <def[Target]> == <player> {
     - narrate "<&6>Your stats!"
   }
   else {
     - narrate "Stats for: <&6><def[Target].name>"
   }
   - narrate "KDR: <&6><def[Target].flag[kill_death_ratio]||0><&r> (<&6><def[Target].flag[kill_score].round||0> <&r>Kills & <&6><def[Target].flag[death_score].round||0><&r> Deaths)"
 
 LeaderBoard_Handler:
   debug: false
   type: world
 
   ## A death!
   death:
   - flag <player> "death_score:++"
   - flag <player> "kill_death_ratio:<player.flag[kill_score].div[<player.flag[death_score]>].round_to[2]||0>"
 
   ## A kill!
   kill:
   - flag <player> "kill_score:++"
   - flag <player> "kill_death_ratio:<player.flag[kill_score].div[<player.flag[death_score]||1>].round_to[2]>"
   
   ## Update the leaderboard!
   update:
   - flag server "leaders:!"
   - define Leaders <server.list_players.filter[has_flag[kill_death_ratio]].sort[LeaderBoard_Sort].get[1].to[5]||li@>
   - if <def[Leaders].is_empty.not> {
     - flag server "leaders:|:<def[Leaders]>"
   }
 
   events:
     ## Someone got smacked in the face! :o
     on player kills player:
     - run <script> path:kill player:<context.damager> instantly
     - run <script> path:death player:<context.entity> instantly
-    - run <script> path:update
+    - flag server update_leaders
 
 LeaderBoard_Sort:
   type: procedure
   debug: false
   definitions: p1|p2
   script:
   ## If P2's kill score is better than P1's move P2 up, ooh that bitch is climbin!
   - if <def[p2].flag[kill_death_ratio]||0> > <def[p1].flag[kill_death_ratio]||0> {
     - determine 1
   }
   ## If P1's kill score is better than P2's move P1 up, ooh that bitch is climbin!
   else if <def[p1].flag[kill_death_ratio]||0> > <def[p2].flag[kill_death_ratio]||0> {
     - determine -1
   }
   ## Their kill score is equal, so do nothing... boring..
   else {
     - determine 0
   }
-