Paste #50984: Untitled Paste

Date: 2018/12/01 20:26:44 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


skill:
  # *Abstract* base skill object.
  type: custom
  debug: true
  uuid: null
  tags:
    corePlayer: # Returns the corePlayer relative to the skill.
      - determine "custom@corePlayer[uuid=<c.this.uuid>]"
    name: # Returns the name of the skill.
      - determine "<c.this.before[<&lb>].after[skill_].to_titlecase>"
    level: # Returns the level of the skill.
      - determine "<yaml[<c.this.corePlayer.file_id>].read[skills.<c.this.name>.level]>"
    xp: # Returns the XP points of the skill.
      - determine "<yaml[<c.this.corePlayer.file_id>].read[skills.<c.this.name>.xp]>"
    xp_needed: # Returns the XP points needed to level up the skill.
      - determine "<yaml[<c.this.corePlayer.file_id>].read[skills.<c.this.name>.xp_needed]>"
    level_xp: # Returns the XP points needed to level up a level of the skill.
      - define level "<c.value>"
      - define base "200"
      - define multiplier "13"
      - define power "2.1"
      - determine "<def[base].add[<def[level].sub[1].power[<def[power]>].mul[<def[multiplier]>]>].round_down>"
  mechanisms:
    xp: # Handles general XP changes.
      - define xp "<c.value>"
      - yaml set "id:<c.this.corePlayer.file_id>" "skills.<c.this.name>.xp:<def[xp]>"
    xp_needed: # Handles general XP needed changes.
      - define xp_needed "<c.value||null>"
      - if "<def[xp_needed]>" == null:
        - queue clear
      - yaml set "id:<c.this.corePlayer.file_id>" "skills.<c.this.name>.xp_needed:<def[xp_needed]>"
    add_xp: # Handles vanilla XP earnings.
      - define xp "<c.value||null>"
      - if "<def[xp]>" == null:
        - queue clear
      - adjust "<c.this>" "xp:<c.this.xp.add[<def[xp]>]>"
      - define msg "<&a><c.this.name><&co> <&b><c.this.xp><&8>/<&c><c.this.xp_needed>" 
      - run coreActionBar "def:<def[msg]>" "player:<c.this.corePlayer.player>" instantly
      - if "<c.this.xp>" >= "<c.this.xp_needed>":
        - adjust "<c.this>" "level_up:true"
    level: # Handles general level changes.
      - define level "<c.value||null>"
      - if "<def[level]>" == null:
        - queue clear
      - define corePlayer "<c.this.corePlayer>"
      - define player "<def[corePlayer].player>"
      - yaml set "id:<def[corePlayer].file_id>" "skills.<c.this.name>.level:<def[level]>"
    level_up: # Handles leveling up.
      - while "<c.this.xp>" >= "<c.this.xp_needed>":
        - adjust "<c.this>" "level<c.this.level.add[1]>"
        - adjust "<c.this>" "xp:<c.this.xp.sub[<c.this.xp_needed>]>"
        - adjust "<c.this>" "xp_needed:<c.this.level_xp[<c.this.level>]>"
      - define title "<&6><&l>Congratulations!"
      - define subtitle "<&e>You are now level <&l><c.this.level><&e>!"
      - define player "<c.this.corePlayer.player>"
      - title "title:<def[title]>" "subtitle:<def[subtitle]>" "player:<def[player]>"
      - playsound "<def[player]>" "sound:ENTITY_PLAYER_LEVELUP"