Paste #75966: Untitled Paste

Date: 2020/09/25 14:56:51 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


##Core Script##
##Inventory for the shop creator menu##
ShopCreatorInv:
  type: inventory
  title: Shop Editor
  size: 54
  inventory: CHEST
  slots:
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] [SaveShopIt]"
  - "[ClearCostIt] [CostMinus1It] [CostMinus10It] [CostMinus100It] [CostMinus1000It] [CostPlus1It] [CostPlus10It] [CostPlus100It] [CostPlus1000It]"
  Procedural Items:
  - if <player.has_flag[EditShop]> && <player.has_flag[AdjustedCost].not>:
    - determine <yaml[<player.flag[EditShop].get[1]>].read[<player.flag[EditShop].get[2]>]>
    - stop
  - if <player.has_flag[AdjustedCost]>:
    - determine <player.flag[AdjustedCost]>
##World script to handle Shop Creator Inventory##
ShopCreatorHandler:
  type: world
  debug: true
  events:
    on player drags in ShopCreatorInv:
    - determine cancelled
    after player clicks in ShopCreatorInv:
    - if <context.inventory> == <context.clicked_inventory>:
      - if <context.cursor_item.has_nbt[ShopMenuItem].not> && <context.cursor_item.contains[air].not>:
        - if <context.cursor_item.has_nbt[Cost].not>:
          - define adjustedcost <context.cursor_item.with[nbt=Cost/0]>
          - if <context.cursor_item.lore.size||0> == 0:
            - if <player.has_flag[SellShop]>:
              - adjust def:adjustedcost "lore:Click Here to Sell! Offer: $<[adjustedcost].nbt[Cost]>"
            - else:
              - adjust def:adjustedcost "lore:Click Here to Buy! For: $<[adjustedcost].nbt[Cost]>"
          - else:
            - adjust def:adjustedcost "lore:<[adjustedcost].lore.include[Click Here to Buy! Cost: $<[adjustedcost].nbt[Cost]>]>"
          - inventory set destination:<context.inventory> origin:<[adjustedcost]> slot:<context.slot>
          - adjust <player> item_on_cursor:air
          - stop
    on player clicks in ShopCreatorInv:
    ##Prevent players from placing Shop Menu items in other slots of the menu##
    - if <context.cursor_item.has_nbt[ShopMenuItem]>:
      - determine passively cancelled
    ##Prevent players from placing Cost Adjustment items into their inventory##
    - if <context.cursor_item.has_nbt[Cost]> && <context.raw_slot.is[==].to[-998]>:
      - determine passively cancelled
      - stop
    - if <context.raw_slot> > 54:
      - if <context.cursor_item.has_nbt[ShopMenuItem]>:
        - determine passively cancelled
        - narrate "You can't use that there!"
        - stop
      ##Prevent a player from placing an adjusted item into their inventory##
      - if <context.cursor_item.has_nbt[Cost]>:
        - determine passively cancelled
        - narrate "Click on ClearCost to reset an item!."
        - stop
      - else:
        - stop
    ##Prevent replacing items with Shop Creator Items##
    - if <context.cursor_item.has_nbt[ShopMenuItem].not> && <context.cursor_item.contains[air].not>:
      - if <context.item.has_nbt[ShopMenuItem]>:
        - determine passively cancelled
        - stop
##Add Cost Item To Cursor##
    - if <context.item.nbt[ShopMenuItem]||0> > 0 || <context.item.nbt[ShopMenuItem]||0> < 0:
      - determine passively cancelled
      - if <context.cursor_item.simple> == <context.item.simple>:
        - if <player.item_on_cursor.quantity> == 64:
          - stop
        - else:
          - adjust <context.cursor_item> quantity:<context.cursor_item.quantity.add[1]> save:AdjustCost
          - adjust <player> item_on_cursor:<entry[AdjustCost].result>
          - stop
      - else:
        - if <context.item.nbt[ShopMenuItem]> != Save && <context.item.nbt[ShopMenuItem]> != Clear:
          - adjust <player> item_on_cursor:<context.item>
##Add/Subtract Cost##
    - if <context.raw_slot> > 54 && <context.cursor_item.has_nbt[ShopMenuItem]>:
      - determine passively cancelled
      - stop
    - if <context.item.has_nbt[Cost]> && <context.cursor_item.has_nbt[ShopMenuItem]>:
      - if <context.cursor_item.nbt[ShopMenuItem]> == Clear:
        - stop
      - if <context.item.nbt[Cost].add[<context.cursor_item.nbt[ShopMenuItem].mul[<context.cursor_item.quantity>]>]> < 0:
        - determine passively cancelled
        - narrate "You cannot have a cost go below 0!"
        - stop
      - define adjustedcost <context.item.with[nbt=Cost/<context.item.nbt[Cost].add[<context.cursor_item.nbt[ShopMenuItem].mul[<context.cursor_item.quantity>]>]>]>
      - adjust def:adjustedcost "lore:<[adjustedcost].lore.set[Click Here to Buy! Cost: $<[adjustedcost].nbt[Cost]>].at[<[adjustedcost].lore.size>]>"
      - inventory set destination:<context.inventory> origin:<[adjustedcost]> slot:<context.slot>
      - define CursorStack <player.item_on_cursor>
      - adjust <player> item_on_cursor:air
##Clear Cost##
    on player left clicks ClearCostIt in ShopCreatorInv:
    - determine passively cancelled
    - if <context.cursor_item.has_nbt[cost]>:
      - define ClearCost <context.cursor_item>
      - adjust def:ClearCost remove_nbt
      - adjust def:ClearCost Lore:<context.cursor_item.lore.remove[<context.cursor_item.lore.size>]>
      - adjust <player> item_on_cursor:<[ClearCost]>
      - narrate "Cost removed from Item."
      - stop
    - adjust <player> item_on_cursor:air
    on player right clicks ClearCostIt in ShopCreatorInv:
    - determine passively cancelled
    - adjust <player> item_on_cursor:ClearCostIt
    on player clicks in ShopCreatorInv with:ClearCostIt:
    - if <context.raw_slot> > 54:
      - adjust <player> item_on_cursor:air
      - determine cancelled
      - stop
    - if <context.item.has_nbt[ShopMenuItem]> || <context.item.contains[air]>:
      - determine passively cancelled
      - stop
    - determine passively cancelled
    - define adjustedcost <context.item.with[nbt=Cost/0]>
    - adjust def:adjustedcost "lore:<[adjustedcost].lore.set[Click Here to Buy! Cost: $<[adjustedcost].nbt[Cost]>].at[<[adjustedcost].lore.size>]>"
    - inventory set destination:<context.inventory> origin:<[adjustedcost]> slot:<context.slot>
    - define CursorStack <player.item_on_cursor>
    - adjust <player> item_on_cursor:air
    - adjust <player> item_on_cursor:<[CursorStack]>
##Save and Exit##
    on player clicks SaveShopIt in ShopCreatorInv:
    - determine passively cancelled
    - narrate "Shop Inventory:<player.flag[ShopCreator].get[2]> has been saved to File:<player.flag[ShopCreator].get[1]>.yml!"
    - if <player.has_flag[EditShop]>:
      - yaml id:<player.flag[ShopCreator].get[1]> set <player.flag[ShopCreator].get[2]>:!
    - foreach <player.open_inventory.list_contents.get[1].to[44]>:
      - yaml id:<player.flag[ShopCreator].get[1]> set <player.flag[ShopCreator].get[2]>:->:<[value]>
    - yaml savefile:/Shops/<player.flag[ShopCreator].get[1]>.yml id:<player.flag[ShopCreator].get[1]>
    - yaml unload id:<player.flag[ShopCreator].get[1]>
    - flag player SellShop:!
    - flag player AdjustedCost:!
    - flag player EditShop:!
    - flag player ShopCreator:!
    - inventory close
ShopCreatorCmd:
  type: command
  name: createshop
  usage: /createshop
  description: "Use to create a list for a Denizen shop script. /createshop File:<&lc>FileName<&rc> Shop:<&lc>ShopName<&rc> | add Delete to delete a shop | add Edit to edit an existing shop."
  permission: denizen.shopcreator
  script:
    - if <player.has_flag[EditShop]> || <player.has_flag[ShopCreator]>:
      - flag player EditShop:!
      - flag player ShopCreator:!
      - flag player SellShop:!
##Delete Shop##
    - if <context.args.contains[Delete]>:
      - if <server.has_file[/Shops/<context.args.map_get[File].split_by[<&co>]>.yml].not>:
        - narrate "The File: <context.args.map_get[File].split_by[<&co>]>.yml does not exist! Did you type it in correctly?"
        - stop
      - yaml load:/Shops/<context.args.map_get[File].split_by[<&co>]>.yml id:<context.args.map_get[File].split_by[<&co>]>
      - if <yaml[<context.args.map_get[File].split_by[<&co>]>].contains[<context.args.map_get[Shop].split_by[<&co>]>].not>:
        - narrate "The Shop: <context.args.map_get[Shop].split_by[<&co>]> does not exist in File: <context.args.map_get[File].split_by[<&co>]>! Did you type it in correctly?"
        - stop
      - yaml id:<context.args.map_get[File].split_by[<&co>]> set <context.args.map_get[Shop].split_by[<&co>]>:!
      - yaml savefile:/Shops/<context.args.map_get[File].split_by[<&co>]>.yml id:<context.args.map_get[File].split_by[<&co>]>
      - narrate "The Shop: <context.args.map_get[Shop].split_by[<&co>]> in File: <context.args.map_get[File].split_by[<&co>]> has been deleted!"
      - stop
##Edit Shop##
    - if <context.args.contains[Edit]>:
      - if <player.has_flag[AdjustedCost]>:
        - flag player AdjustedCost:!
      - if <server.has_file[/Shops/<context.args.map_get[File].split_by[<&co>]>.yml].not>:
        - narrate "The File: <context.args.map_get[File].split_by[<&co>]>.yml does not exist! Did you type it in correctly?"
        - stop
      - yaml load:/Shops/<context.args.map_get[File].split_by[<&co>]>.yml id:<context.args.map_get[File].split_by[<&co>]>
      - if <yaml[<context.args.map_get[File].split_by[<&co>]>].contains[<context.args.map_get[Shop].split_by[<&co>]>].not>:
        - narrate "The Shop: <context.args.map_get[Shop].split_by[<&co>]> does not exist in File: <context.args.map_get[File].split_by[<&co>]>! Did you type it in correctly?"
        - stop
      - flag player EditShop:|:<context.args.map_get[File].split_by[<&co>]>|<context.args.map_get[Shop].split_by[<&co>]>
      - flag player ShopCreator:|:<context.args.map_get[File].split_by[<&co>]>|<context.args.map_get[Shop].split_by[<&co>]>
      - inventory open d:ShopCreatorInv
      - stop
##Create Shop##
    - if <server.has_file[/Shops/<context.args.map_get[File].split_by[<&co>]>.yml].not>:
      - yaml create id:<context.args.map_get[File].split_by[<&co>]>
      - yaml savefile:/Shops/<context.args.map_get[File].split_by[<&co>]>.yml id:<context.args.map_get[File].split_by[<&co>]>
      - yaml load:/Shops/<context.args.map_get[File].split_by[<&co>]>.yml id:<context.args.map_get[File].split_by[<&co>]>
    - else:
      - yaml load:/Shops/<context.args.map_get[File].split_by[<&co>]>.yml id:<context.args.map_get[File].split_by[<&co>]>
      - if <yaml[<context.args.map_get[File].split_by[<&co>]>].contains[<context.args.map_get[Shop].split_by[<&co>]>]>:
        - yaml unload id:<context.args.map_get[File].split_by[<&co>]>
        - narrate "That shop already exists! If you wish to Edit or Delete a Shop, add those arguments when using the /createshop command."
        - stop
    - flag player ShopCreator:|:<context.args.map_get[File].split_by[<&co>]>|<context.args.map_get[Shop].split_by[<&co>]>
    - inventory open d:ShopCreatorInv
    - if <context.args.contains[SellShop]>:
      - flag player SellShop
##Shop Creator Items##
SaveShopIt:
  type: item
  display name: Save Shop
  material: writable_book[nbt=ShopMenuItem/Save]
  lore:
  - "Click here to save this shop inventory."
ClearCostIt:
  type: item
  display name: Clear Cursor
  material: barrier[nbt=ShopMenuItem/Clear]
  lore:
  - "Clicking here with a Cost Editting item"
  - "will clear it from your cursor."
  - "Right click to pick up this item."
  - "Click an item to adjust its cost to $0."
  - "With a cost adjusted item on your cursor"
  - "click here to reset the item entirely."
CostPlus1It:
  type: item
  display name: Add $1
  material: stone[nbt=ShopMenuItem/1]
  lore:
  - "Click here to add $1 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will add $1"
  - "for each item in the held stack."
CostPlus10It:
  type: item
  display name: Add $10
  material: iron_block[nbt=ShopMenuItem/10]
  lore:
  - "Click here to add $10 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will add $10"
  - "for each item in the held stack."
CostPlus100It:
  type: item
  display name: Add $100
  material: gold_block[nbt=ShopMenuItem/100]
  lore:
  - "Click here to add $100 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will add $100"
  - "for each item in the held stack."
CostPlus1000It:
  type: item
  display name: Add $1000
  material: diamond_block[nbt=ShopMenuItem/1000]
  lore:
  - "Click here to add $1000 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will add $1000"
  - "for each item in the held stack."
CostMinus1It:
  type: item
  display name: Subtract $1
  material: coal_ore[nbt=ShopMenuItem/-1]
  lore:
  - "Click here to subtract $1 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will subtract $1"
  - "for each item in the held stack."
CostMinus10It:
  type: item
  display name: Subtract $10
  material: iron_ore[nbt=ShopMenuItem/-10]
  lore:
  - "Click here to subtract $10 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will subtract $10"
  - "for each item in the held stack."
CostMinus100It:
  type: item
  display name: Subtract $100
  material: gold_ore[nbt=ShopMenuItem/-100]
  lore:
  - "Click here to subtract $100 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will subtract $100"
  - "for each item in the held stack."
CostMinus1000It:
  type: item
  display name: Subtract $1000
  material: diamond_ore[nbt=ShopMenuItem/-1000]
  lore:
  - "Click here to subtract $1000 to the price"
  - "of an item. With this item in hand"
  - "click on an item. It will subtract $1000"
  - "for each item in the held stack."
##Player Shop Creation System##
PlayerShopHandler:
  type: world
  events:
    on player places PlayerShopIt:
    - flag player ShopOwner:<context.location>
    - flag player ShopCreator:|:PlayerShops|<player.uuid>|<context.location>
    - inventory open d:ShopCreatorInv
    on player closes ShopCreatorInv:
    - foreach <player.inventory.list_contents>:
      - if <[value].contains[ClearCostIt]> || <[value].contains[CostMinus1000It]> || <[value].contains[CostMinus100It]> || <[value].contains[CostMinus10It]>  || <[value].contains[CostMinus1It]> || <[value].contains[CostPlus1000It]> || <[value].contains[CostPlus100It]> || <[value].contains[CostPlus10It]> || <[value].contains[CostPlus1It]>:
        - take <[value]> quantity:<[value].quantity>
##Player Shop Creation Item##
PlayerShopIt:
  type: item
  material: sign
  display name: Shop Post
  lore:
  - "Congratulations! You're the proud owner"
  - "of a Personal Shop Post. Simply place"
  - "this sign anywhere you're allowed to"
  - "setup your own Personal Shop! Others will"
  - "be able to purchase items you place there!"
  - "Should you need to restock, simply right"
  - "click this sign!"
##Example Shop##
GenericShopInv:
  type: inventory
  inventory: CHEST
  title: Shop Name Here
  size: 45
  slots:
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  - "[] [] [] [] [] [] [] [] []"
  Procedural Items:
  - determine <yaml[FileName].read[ShopName]>
NPCAssignment:
  type: assignment
  debug: true
  actions:
    on assignment:
    - trigger name:click state:true
  interact scripts:
  - NPCInteract
NPCInteract:
  type: interact
  debug: true
  steps:
    1:
      click trigger:
        script:
        - narrate "Greeting Here"
        - yaml load:/Shops/FileName.yml id:ShopName
        - wait 2
        - inventory open d:GenericShopInv
        - yaml unload id:ShopName

ShopMenuHandler:
  type: world
  events:
    on player drags in GenericShopInv:
    - determine cancelled
    on player clicks in GenericShopInv:
    - determine passively cancelled
    - if <context.item.has_nbt[Cost]>:
      - if <player.money.is[MORE].to[<context.item.nbt[Cost]>]>:
        - if <player.inventory.empty_slots> == 0:
          - narrate "Your inventory has no space!"
          - stop
        - take money quantity:<context.item.nbt[Cost]>
        - define Item <context.item>
        - adjust def:Item <context.item> remove_nbt
        - adjust def:Item Lore:<context.item.lore.remove[<context.item.lore.size>]>
        - give <[Item]>
        - narrate "$<context.item.nbt[Cost]> has been removed from your wallet."
        - flag player TotalSpent:+:<context.item.nbt[Cost]>
        - stop
      - else:
        - narrate "You don't have enough money! Cost: $<context.item.nbt[Cost]> Your Money: $<player.money>"
        - stop