Paste #19174: Untitled Paste

Date: 2015/08/10 12:40:54 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


DoorKeys:
  type: world
  events:
    on player clicks block:
    - if <context.location.material> !contains "door" {
      - queue clear
      }
    - foreach <server.list_flags> {
      - if <fl@%value%.as_list.contains[<context.location.block>]> {
        - goto is_locked
        }
      - if <def[loop_index]> == <server.list_flags.size> {
        - queue clear
        }
      }
    - mark is_locked
    - foreach <server.list_flags> {
      - if <fl@%value%.as_list.contains[<context.location.block>]> {
        - define tier <def[value].after[T]>
        }
      }
    - if "!<context.item.display.contains[Tier <def[tier]>]>" {
      - narrate "<red>You need to use the tier <def[tier]> key to open this!"
      - determine cancelled
      } else {
      - narrate "<green>You have used the tier <def[tier]> key!"
      }

# /doorkey   tier            reset
# /doorkey   tier            list
# /doorkey   tier           create
# /doorkey   tier            edit            display|material|lore|recipe        value
# /doorkey   tier            give                      player

# lore: 1|2|3|4

# recipe: 1|2|3|4|5|6|7|8|9

#  - i@1|i@2|i@3
#  - i@4|i@5|i@6
#  - i@7|i@8|i@9

    on doorkey command:
    - if <player> 
    - determine fulfilled passively
    - define tier <context.args.get[1]>
    - choose <context.args.get[2]>:
      - case "list":
        - narrate "<green>Tier <def[tier]> door keys are currently at<&co>"
        - narrate "<green><server.flag[doorkeys_t<def[tier]>]>"
        - queue clear
      - case "reset":
        - flag server doorkeys_t<def[tier]>:none
        - narrate "<green>Tier <def[tier]> door keys reset!"
        - queue clear
      - case "create":
        - if !<server.has_file[/scripts/doorkeys.dscript]> {
          - yaml create id:doorkeys
          - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
          }
        - yaml load:/scripts/doorkeys.dscript id:doorkeys
        - yaml set <def[tier]>.type:item id:doorkeys
        - yaml set "<def[tier]>.display name:<def[tier]>" id:doorkeys
        - yaml set "<def[tier]>.material:stone" id:doorkeys
        - narrate "<green><def[tier]> key created!"
        - queue clear
      - case "edit":
        - if !<yaml[doorkeys].contains[<def[tier]>]> {
          - narrate "<red>Key not found!"
          - queue clear
          }
        - if <context.args.get[4]> == null {
          - narrate "<red>Please enter a value!"
          - queue clear
          }
        - yaml load:/scripts/doorkeys.dscript id:doorkeys
        - define value <context.args.get[4]>
        - choose <context.args.get[3]>:
          - case "display":
            - yaml set "<def[tier]>.display name:<def[value]>" id:doorkeys
            - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
            - narrate "<green>Display of Key <def[tier]> set to<&co> <def[value]>!"
          - case "material":
            - yaml set <def[tier]>.material:<def[value]> id:doorkeys
            - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
            - narrate "<green>Display of Key <def[tier]> set to<&co> <def[value]>!"
          - case "lore":
            - yaml set <def[tier]>.lore:li@<def[value]> id:doorkeys
            - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
            - narrate "<green>Display of Key <def[tier]> set to<&co> <def[value]>!"
          - case "recipe":
            - if <def[value].as_list.size> > 9 {
              - narrate "<red>Entered too many items!"
              - queue clear
              } else if <def[value].as_list.size> < 9 {
              - narrate "<red>Not enough items entered!"
              - queue clear
              } else {
              - yaml set <def[tier]>.recipe:->:i@<def[value].get[1]><&pipe>i@<def[value].get[3]><&pipe>i@<def[value].get[3]> id:doorkeys
              - yaml set <def[tier]>.recipe:->:i@<def[value].get[4]><&pipe>i@<def[value].get[5]><&pipe>i@<def[value].get[6]> id:doorkeys
              - yaml set <def[tier]>.recipe:->:i@<def[value].get[7]><&pipe>i@<def[value].get[8]><&pipe>i@<def[value].get[9]> id:doorkeys
              - yaml savefile:/scripts/doorkeys.dscript id:doorkeys
              - inventory open origin in@workbench
              - narrate "<green>Display of Key <def[tier]> set to<&co> <def[value]>!"
              }
        - queue clear

    - if <player.location.cursor_on[10].above.material> contains "door" {
      - define otherblock <player.location.cursor_on[10].above>
      - define text "& <player.location.cursor_on[10].above>"
      } else if <player.location.cursor_on[10].below.material> contains "door" {
      - define otherblock <player.location.cursor_on[10].below>
      - define text "& <player.location.cursor_on[10].below>"
      } else {
      - define otherblock none
      }
    - if <server.flag[doorkeys_t<def[tier]>].as_list> contains <player.location.cursor_on[10]> {
      - flag server doorkeys_t<def[tier]>:<-:<player.location.cursor_on[10]>
      - if <def[otherblock]> !== "none" {
        - flag server doorkeys_t<def[tier]>:<-:<def[otherblock]>
        }
      - narrate "<red><player.location.cursor_on[10].simple> <def[otherblock].simple> removed from the Tier <def[tier]> Door list!"
      } else {
      - flag server doorkeys_t<def[tier]>:->:<player.location.cursor_on[10]>
      - if <def[otherblock]> !== "none" {
        - flag server doorkeys_t<def[tier]>:->:<def[otherblock]>
        }
      - narrate "<green><player.location.cursor_on[10].simple> & <def[otherblock].simple> added to the Tier <def[tier]> Door list!"
      }

Tier1:
  type: item
  material: stone
  display name: <aqua>Key Tier 1!
  lore:
  - lore 1
  - lore 2
  recipe:
  - i@stone|i@air|i@air
  - i@diamond|i@air|i@air
  - i@stone|i@air|i@air

Tier2:
  type: item
  material: stone
  display name: <blue>Key Tier 2!
  lore:
  - lore 1
  - lore 2
  recipe:
  - i@stone|i@air|i@air
  - i@diamond|i@air|i@air
  - i@stone|i@air|i@air