Paste #29510: Untitled Paste

Date: 2016/02/02 07:47:02 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


LeaderBoard_Command:
  type: command
  debug: true
  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
    }
    - 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: true
  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:
  - if <context.args.size> = 0 {
    - define Target <player> 
    - narrate "Resetting your <&6>Leadeboard scores<&r>!"
    - queue clear
  }
  else if <player.has_permission[leaderboard.reset].not||<context.server.not>> {
    - narrate "<parse:<script.yaml_key[permission message]>>"
    - queue clear
  else if {
    - define Target <server.match_offline_player[<context.args.get[1]>]||null>
  }
  else 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: true
  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: true
  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 dies:
    - run <script> path:kill player:<context.damager> instantly
    - run <script> path:death player:<context.entity> instantly
    - run <script> path:update
LeaderBoard_Sort:
  type: procedure
  debug: true
  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
  }