Paste #68199: Experience exchange

Date: 2020/04/27 16:25:07 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


#I never do this but since it's kind of a complex script and you are retarded (Stein that is(still love you tho <3), I don't judge anyone else) I feel like i have to
#If anything ever breaks, either take away exchange.use from default, put a # in front of ExpEvents, or move the .yml to DisabledScripts folder
#Do NOT touch any multiplying or any tags, if you want to change the lvl required to exchange, change the first value only (value: 1), the one has to be there
#Do NOT attempt to fix anything because if something like last time happens I'll personally find your location and murder every living thing that's related to you, invluding #yourself, but you'll have to watch as I murder your family first
#that's all love you
#
#
#
#Items for inventory
Ratio:
  type: item
  material: i@globe_banner_pattern[flags=HIDE_POTION_EFFECTS]
  display name: "<&6>Ratio per skill class:"
  lore:
  - "<&6>Format: <&e>Experience level:mcMMO level"
  - "<&e>Gathering class: <&7>1:0,1 (10 Xp Levels for 1 Level)"
  - "<&e>Combat class: <&7>1:0,05 (20 Xp Levels for 1 Level)"
  - "<&e>Misc class: <&7>1:0,1 (10 Xp Levels for 1 Level)"  

Statsitem:
  type: item
  material: player_head[skull_skin=<player.name>]
  display name: "<&6>mcMMO stats for <&e><player.name>"
  lore:
  - "<&a>Excavation: <&7><player.mcmmo.level[Excavation]>"
  - "<&a>Fishing: <&7><player.mcmmo.level[Fishing]>"
  - "<&a>Herbalism: <&7><player.mcmmo.level[Herbalism]>"
  - "<&a>Mining: <&7><player.mcmmo.level[Mining]>"
  - "<&a>Woodcutting: <&7><player.mcmmo.level[Mining]>"
  - "<&7>--------------------"
  - "<&a>Archery: <&7><player.mcmmo.level[Archery]>"
  - "<&a>Axes: <&7><player.mcmmo.level[Axes]>"
  - "<&a>Swords: <&7><player.mcmmo.level[Swords]>"
  - "<&a>Taming: <&7><player.mcmmo.level[Taming]>"
  - "<&a>Unarmed: <&7><player.mcmmo.level[Unarmed]>"
  - "<&7>--------------------"
  - "<&a>Acrobatics: <&7><player.mcmmo.level[Acrobatics]>"
  - "<&a>Alchemy: <&7><player.mcmmo.level[Alchemy]>"
  - "<&a>Repair: <&7><player.mcmmo.level[Repair]>"
  - "<&a>Salvage: <&7><player.mcmmo.level[Salvage]>"
  - "<&a>Smelting: <&7><player.mcmmo.level[Smelting]>"
Archery:
  type: item
  material: bow[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Archery
  lore:
  - "<&e>Class: <&7>Combat"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Axes:
  type: item
  material: diamond_axe[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Axes
  lore:
  - "<&e>Class: <&7>Combat"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Acrobatics:
  type: item
  material: diamond_boots[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Acrobatics
  lore:
  - "<&e>Class: <&7>Misc."
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Alchemy:
  type: item
  material: splash_potion[flags=HIDE_POTION_EFFECTS;potion_effects=li@JUMP,true,false]
  display name: <&a>Alchemy
  lore:
  - "<&e>Class: <&7>Misc."
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Repair:
  type: item
  material: iron_block
  display name: <&a>Acrobatics
  lore:
  - "<&e>Class: <&7>Misc."
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Salvage:
  type: item
  material: anvil
  display name: <&a>Salvage
  lore:
  - "<&e>Class: <&7>Misc."
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Smelting:
  type: item
  material: blast_furnace
  display name: <&a>Smelting
  lore:
  - "<&e>Class: <&7>Misc."
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Swords:
  type: item
  material: diamond_sword[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Swords
  lore:
  - "<&e>Class: <&7>Combat"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Taming:
  type: item
  material: lead
  display name: <&a>Taming
  lore:
  - "<&e>Class: <&7>Combat"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Unarmed:
  type: item
  material: skeleton_skull
  display name: <&a>Unarmed
  lore:
  - "<&e>Class: <&7>Combat"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Excavation:
  type: item
  material: diamond_shovel[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Excavation
  lore:
  - "<&e>Class: <&7>Gathering"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Fishing:
  type: item
  material: fishing_rod[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  display name: <&a>Fishing
  lore:
  - "<&e>Class: <&7>Gathering"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Herbalism:
  type: item
  material: diamond_hoe[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Herbalism
  lore:
  - "<&e>Class: <&7>Gathering"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Mining:
  type: item
  material: diamond_pickaxe[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Mining
  lore:
  - "<&e>Class: <&7>Gathering"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
Woodcutting:
  type: item
  material: diamond_axe[flags=HIDE_ENCHANTS|HIDE_ATTRIBUTES]
  enchantments:
  - UNBREAKING:1
  display name: <&a>Woodcutting
  lore:
  - "<&e>Class: <&7>Gathering"
  - ""
  - "<&7>- <&e>Right click to exchange"
  - "<&e>for 1 mcMMO level."
  - "<&7>- <&e>Left click to exchange for"
  - "<&e>all the xp levels you have."
close7:
  type: item
  material: barrier
  display name: <&e>Close

#Inventory
ExpInv1:
  type: inventory
  inventory: CHEST
  title: "<&5><&l>Experience exchange."
  size: 45
  definitions:
    exp: "i@experience_bottle[display_name=<&6>Experience Level: <&7><player.xp_level>]"
    bg: i@black_stained_glass_pane[display_name:<&7>]
  slots:
    - "[bg] [bg] [bg] [bg] [bg] [bg] [bg] [bg] [bg]"
    - "[statsitem] [bg] [excavation] [fishing] [herbalism] [mining] [woodcutting] [bg] [statsitem]"
    - "[exp] [bg] [archery] [axes] [swords] [taming] [unarmed] [bg] [exp]"
    - "[ratio] [bg] [acrobatics] [alchemy] [bg] [repair] [smelting] [bg] [ratio]"
    - "[bg] [bg] [bg] [bg] [close7] [bg] [bg] [bg] [bg]"


#Exp exchange handling
#if anything ever breaks and you want to disable the script completely, just put a # before ExpEvents
ExpEvents:
  type: world
  debug: true
  # levels required for the player to exchange exp
  # those levels don't count in the exchange, ex. 1:0.05 > You need 50 levels, and additional 20 (so 70) to exchange
  lvl_required:
    50: 1
  events:
    on player clicks in ExpInv1:
    - determine cancelled passively          
    on player drags in ExpInv1:
    - determine cancelled
    on player right clicks in ExpInv1:
    - determine cancelled passively
    - if <context.item.lore.contains_any_text[Combat]>:
      - if <context.item.scriptname> == RATIO:
        - determine cancelled
      - if <player.groups.contains[baron].not>:
        - define xp 40
      - else:
        - define xp 20
      - if <player.xp_level> >= <script.list_keys[lvl_required].get[1].as_element.add[<def[xp]>]>:
        - experience take level <def[xp]>
        - mcmmo add levels skill:<context.item.scriptname> quantity:1
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You have exchanged <&d><def[xp]> XP <&e>levels for 1 level in <&d><context.item.scriptname><&e>."
      - else if <player.xp_level> < <script.list_keys[lvl_required].get[1].as_element>:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You need at least <script.list_keys[lvl_required].get[1]> xp levels to be able to exchange."
        - queue clear
      - else:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You don't have enough levels to do this."
        - queue clear
    - if <context.item.lore.contains_any_text[Gathering]> || <context.item.lore.contains_any_text[Misc]>:
      - if <context.item.scriptname> == RATIO:
        - determine cancelled
      - if <player.groups.contains[baron].not>:
        - define xp 20
      - else:
        - define xp 10
      - if <player.xp_level> >= <script.list_keys[lvl_required].get[1].as_element.add[<def[xp]>]>:
        - experience take level <def[xp]>
        - mcmmo add levels skill:<context.item.scriptname> quantity:1
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You have exchanged <&d><def[xp]> XP <&e>levels for 1 level in <&d><context.item.scriptname><&e>."
      - else if <player.xp_level> < <script.list_keys[lvl_required].get[1].as_element>:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You need at least <script.list_keys[lvl_required].get[1]> xp levels to be able to exchange."
        - queue clear
      - else:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You don't have enough levels to do this."
        - queue clear
    on player left clicks in ExpInv1:
    - determine cancelled passively
    - if <player.groups.contains[baron].not>
      - inject locally path:peasant_to_knight instantly
    - else:
      - inject locally path:baron_plus instantly
  peasant_to_knight:
  - if <context.item.lore.contains_any_text[Combat]>:
    - if <context.item.scriptname> == RATIO:
      - determine cancelled
    - if <player.xp_level> >= <script.list_keys[lvl_required].get[1].as_element.add[40]>:
      - define mcmmo <player.xp_level.sub[<script.list_keys[lvl_required].get[1]>].mul[0.025].round_down>
      - experience take level <def[mcmmo].mul[40]>
      - mcmmo add levels skill:<context.item.scriptname> quantity:<def[mcmmo]>
      - inventory close
      - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You have exchanged <&d><def[mcmmo].mul[40]> XP <&e>levels for <def[mcmmo]> level(s) in <&d><context.item.scriptname><&e>."  
    - else if <player.xp_level> < <script.list_keys[lvl_required].get[1]>:
      - inventory close
      - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You need at least <script.list_keys[lvl_required].get[1]> XP levels to do this."      
      - queue clear
    - else:
      - inventory close
      - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You don't have enough levels to do this."      
      - queue clear
    - if <context.item.lore.contains_any_text[Gathering]> || <context.item.lore.contains_any_text[Misc.]>:
      - if <context.item.scriptname> == RATIO:
        - determine cancelled
      - if <player.xp_level> >= <script.list_keys[lvl_required].get[1].as_element.add[20]>:
        - define mcmmo <player.xp_level.sub[<script.list_keys[lvl_required].get[1]>].mul[0.05].round_down>
        - experience take level <def[mcmmo].mul[20]>
        - mcmmo add levels skill:<context.item.scriptname> quantity:<def[mcmmo]>
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You have exchanged <&d><def[mcmmo].mul[20]> XP <&e>levels for <def[mcmmo]> level(s) in <&d><context.item.scriptname><&e>."  
      - else if <player.xp_level> < <script.list_keys[lvl_required].get[1]>:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You need at least <script.list_keys[lvl_required].get[1]> XP levels to do this."      
        - queue clear
      - else:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You don't have enough levels to do this."      
        - queue clear  
  baron_plus:
  - if <context.item.lore.contains_any_text[Combat]>:
    - if <context.item.scriptname> == RATIO:
      - determine cancelled
    - if <player.xp_level> >= <script.list_keys[lvl_required].get[1].as_element.add[20]>:
      - define mcmmo <player.xp_level.sub[<script.list_keys[lvl_required].get[1]>].mul[0.05].round_down>
      - experience take level <def[mcmmo].mul[20]>
      - mcmmo add levels skill:<context.item.scriptname> quantity:<def[mcmmo]>
      - inventory close
      - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You have exchanged <&d><def[mcmmo].mul[20]> XP <&e>levels for <def[mcmmo]> level(s) in <&d><context.item.scriptname><&e>."  
    - else if <player.xp_level> < <script.list_keys[lvl_required].get[1]>:
      - inventory close
      - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You need at least <script.list_keys[lvl_required].get[1]> XP levels to do this."      
      - queue clear
    - else:
      - inventory close
      - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You don't have enough levels to do this."      
      - queue clear
    - if <context.item.lore.contains_any_text[Gathering]> || <context.item.lore.contains_any_text[Misc.]>:
      - if <context.item.scriptname> == RATIO:
        - determine cancelled
      - if <player.xp_level> >= <script.list_keys[lvl_required].get[1].as_element.add[10]>:
        - define mcmmo <player.xp_level.sub[<script.list_keys[lvl_required].get[1]>].mul[0.1].round_down>
        - experience take level <def[mcmmo].mul[10]>
        - mcmmo add levels skill:<context.item.scriptname> quantity:<def[mcmmo]>
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You have exchanged <&d><def[mcmmo].mul[10]> XP <&e>levels for <def[mcmmo]> level(s) in <&d><context.item.scriptname><&e>."  
      - else if <player.xp_level> < <script.list_keys[lvl_required].get[1]>:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You need at least <script.list_keys[lvl_required].get[1]> XP levels to do this."      
        - queue clear
      - else:
        - inventory close
        - narrate "<&6>[<&d>Experience Exchange<&6>] <&e>You don't have enough levels to do this."      
        - queue clear 

#command to open the GUI
#If anything breaks remove exchange.use from default group
ExpCommand:
  type: command
  name: exchangexp
  description: "Exchange Experience for mcMMO levels."
  usage: /exchangexp
  permission: exchange.use
  permission message: "<&6>[<&d>Experience Exchange<&6>] <&e>You are not allowed to use this command."
  script:
  - inventory open d:ExpInv1