Paste #47769: Edit of P#47741 - Lottery

Date: 2018/06/08 14:55:35 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


lottery_command:
  type: command
  name: Lottery
  description: Main command for Lottery plugin
  usage: "/lottery help"
  script:
  - define opt <context.args.get[1]>
  - if li@gui|buy|credits| !contains <def[opt]> {
    - define opt help
    }
  - inject locally path:<def[opt]>
  help:
    - narrate "<&6>Lottery help - Commands:"
    - ^narrate "<&6>/lottery help - <&7>Displays this page"
    - ^narrate "<&6>/lottery gui - <&7>Opens lottery inventory GUI"
    - ^narrate "<&6>/lottery buy (amount) - <&7>Buy lottery credits"
    - ^narrate "<&7> 1 credit = 10$"
    - ^narrate "<&6>/lottery credits - <&7>Check your credits balance"
  gui:
    - inventory open d:in@lottery_gui
  credits: 
    - narrate "<&6>[<&b>Lottery<&6>] <&e>You have <&6><player.flag[credits].round> <&e>credits."
  buy:
    - if !<context.args.get[2].matches[[0-9]+]||false> || <context.args.get[2].length||0> >= 4 {
      - narrate "<&6>[<&b>Lottery<&6>] <&e>You didn't specify an amount, or the specified was either invalid or too big"
      - queue clear
      }
    - if <player.money> >= <context.args.get[2].mul[10]> {
      - execute as_op "eco take <player.name> <context.args.get[2].mul[10]>"
      - flag player credits:+:<context.args.get[2]>
      - narrate "<&6>[<&b>Lottery<&6>] <&6><context.args.get[2].round> <&e>credits has been added to your account."
      - if <player.has_flag[extracredits].not> {
        - flag player extracredits:1
        } 
        else if <player.has_flag[extracredits]> {
        - determine passively cancelled 
        }
      - queue clear
      }
      else {
      - narrate "<&6>[<&b>Lottery<&6>] <&e>You don't have enough money"
      - determine cancelled
      }

extracredits_handler:
  type: world
  events:
    on system time hourly:
    - if <server.get_players_flagged[extracredits].size> >= 3 {
      - define randomplayer <server.get_players_flagged[extracredits].random>
      - flag <def[randomplayer]> credits:+:10
      - announce "<&6>[<&b>Lottery<&6>] <&e><def[randomplayer].name> recieved 10 extra credits!"
      - foreach <server.get_players_flagged[extracredits]> {
        - flag <def[value]> extracredits:!
        }
      }

rtd_gui_task:  
  type: task  
  debug: false  
  speed: 0  
  prefix: '&ss1&ss2&ss1&ss5&ss2&ss0&ss2&ss0&ss0&ss5&ss1&ss8&ss2&ss5&ss0&ss7&ss2&ss1&ss0&ss9&ssr'  
  script:  
  - define base_inv ''  
  #- define base_inv 'in@generic[title=<&6><&l>Lottery GUI;size=27;contents=li@i@air]'  
  - inventory open 'd:in@generic[title=<script.yaml_key[prefix].unescaped><&6><&l>Lottery GUI;size=27]'  
  - wait 1t  
  - repeat 50 {  
    - define rng '<util.random.int[1].to[300]>'  
    - if <def[rng]> < 30 {  
      - define item 'i@iron_sword[display_name=&sseLottery Sword;lore=&ss6Whippity whoopity, you now have a sword!;enchantments=DURABILITY,2|DAMAGE_ALL,3]'  
    }   
    else if <def[rng]> < 40 {  
      - define item 'i@largetoken' 
    }   
    else if <def[rng]> < 60 {  
      - define item 'i@diamond_chestplate[display_name=&ssaLottery Chestplate;nbt_attributes=generic.armor/chest/0/1]'  
    }  
    else if <def[rng]> < 85 {  
      - define item 'i@lootpot' 
    }  
    else if <def[rng]> < 110 {  
      - define item 'i@FartPotion' 
    }  
    else if <def[rng]> < 140 {  
      - define item 'i@lifegem'  
    }  
    else if <def[rng]> < 145 { 
      - define item 'i@relic' 
    } 
    else if <def[rng]> < 165 { 
      - define item 'i@smalltoken' 
    } 
    else if <def[rng]> < 175 { 
      - define item 'i@mediumtoken' 
    } 
    else if <def[rng]> < 190 { 
      - define item 'i@dirt[display_name=<&6>Dertt :c]' 
    } 
    else if <def[rng]> < 210 { 
      - define item 'i@cobblestone[display_name=<&c>Better luck next time...]' 
    }
    else if <def[rng]> < 230 {
      - define item 'i@diamond[display_name=<&b>Diamond]'
    }
    else if <def[rng]> < 250 {
      - define item 'i@Golden_Apple[display_name=<&b>Golden Apple]'
    }
    else if <def[rng]> < 270 {
      - define item 'i@totem[display_name=<&d>Totem of Undying]'
    }
    else if <def[rng]> < 285 {
      - define item 'i@saddle[display_name=<&d>Saddle!]'
    }
    else {  
      - define item 'i@LuckyTag'  
    }  
    - if <def[item]> != <def[prev_item]||i@air> {  
      - inventory open  
        'd:in@generic[title=<script.yaml_key[prefix].unescaped><&6><&l>Lottery GUI;size=27;contents=li@i@air|i@air|i@air|i@air|i@air|i@air|i@air|i@air|i@air|i@air|i@air|i@air|i@air|<def[item]>]'  
    }  
    - define prev_item '<def[item]>'  
    - wait <el@2.71828182846.power[<def[value].mul[0.125].sub[3]>].round_up>t  
  }  
  - wait 1s  
  - narrate "<&6>[<&b>Lottery<&6>] <&e>Congratulations! You got <def[item].display_name>!" 
  - give <def[item]>  
  - flag player can_close_inv  
  - inventory close  

rtd_gui_evts:  
  type: world  
  debug: false  
  events:  
    on player closes inventory:  
    - if <context.inventory.title.escaped.starts_with[&ss1&ss2&ss1&ss5&ss2&ss0&ss2&ss0&ss0&ss5&ss1&ss8&ss2&ss5&ss0&ss7&ss2&ss1&ss0&ss9&ssr]> {  
      - if !<player.has_flag[can_close_inv]> {  
        - determine cancelled  
      }  
      - flag player can_close_inv:!  
    }  

runscript:
  type: item
  material: i@diamond[flags=HIDE_ATTRIBUTES|HIDE_ENCHANTS;enchantments=ARROW_DAMAGE,1]
  display name: <&d>Play lottery for 20 credits!

lottery_gui:
  type: inventory
  title: Lottery
  size: 27
  slots:
  - "[wgs] [wgs] [bal] [] [] [] [bal] [wgs] [wgs]"
  - "[wgs] [lcredits] [] [] [runscript] [] [] [lcredits] [wgs]"
  - "[wgs] [wgs] [bal] [] [] [] [bal] [wgs] [wgs]"
  definitions:
    wgs: i@black_stained_glass_pane
    lcredits: i@white_stained_glass_pane[display_name=<&d>Credits:;lore=<&f><player.flag[credits].round>]
    bal: i@white_stained_glass_pane[display_name=<&d>Your money:;lore=<&f>$<player.money.as_int.round>]

roll_handler:
  type: world
  events:
    on player clicks in lottery_gui:
    - determine cancelled
    on player drags in lottery_gui:
    - determine cancelled
    on player clicks runscript in lottery_gui: 
    - if <player.flag[credits].round> < 20 { 
      - inventory close 
      - narrate "<&6>[<&b>Lottery<&6>] <&e>You don't have enough credits!" 
      - queue clear 
      } 
    - if <player.has_flag[limit]> { 
      - inventory close 
      - narrate "<&6>[<&b>Lottery<&6>] <&e>You need to wait <player.flag[limit].expiration.in_minutes.round_to[2]> minutes to play again!" 
      - queue clear 
      } 
    - if <player.inventory.empty_slots.is[==].to[0]> { 
      - inventory close 
      - narrate "<&6>[<&b>Lottery<&6>] <&e>You can't play lottery, inventory is full!" 
      - queue clear 
      } 
    - inventory close     
    - flag player credits:-:20 
    - flag player limit:1 d:10m
    - run rtd_gui_task instantly player:<player>