# ======================= # # Author: KeangDavid # # Version: 1.0.3 # # Denizen: 0.9.7-SNAPSHOT # # Build: 277 # # Core: 1.10 # # ======================= # # ----- Trade Command ----- # Player_Trade_Command: # Command Settings # use_distance: true distance_limit: 6 description: Used to trade items between players. usage: /trade [player] permission: dCustom.trade permission message: Permission needed, # Command Script, Change with caution! # type: command debug: false name: trade allowed help: - determine help: - narrate "/trade [player]" - queue clear tab complete: - determine ]>]||> script: - if inject locally help - if ]> queue clear - if ].not> { - narrate " is not online." - queue clear } - if { - if ].is[OR_MORE].to[]||true> { - narrate "You are too far away from ." - queue clear } } - flag player Trading: - if ]> { - inject trade locally } else { - flag player Trading: duration:30s - narrate "Type /trade to start trade." targets: - narrate "Trade request sent." - flag player wait duration:3s } trade: - flag player trading: - flag p@ trading: - flag p@ wait:! - flag player trade:! - flag p@ trade:! - run Player_Trade_Update def:start - run Player_Trade_Update def:start as: # =============== Trade Command End =========== # # =============== Update Trade Inventory =============== # Player_Trade_Update: type: task debug: false slots: # i1=player1 i2=player2 ia=player1StatusButton ib=player2Status is=seperator - i1|i1|i1|ia|is|ib|i2|i2|i2 - i1|i1|i1|i1|is|i2|i2|i2|i2 - i1|i1|i1|i1|is|i2|i2|i2|i2 - i1|i1|i1|i1|is|i2|i2|i2|i2 - i1|i1|i1|i1|is|i2|i2|i2|i2 - i1|i1|i1|i1|is|i2|i2|i2|i2 script: # Pre script checks - ^if queue clear - ^if queue clear - wait 1t - ^flag player TradeUpdate # Changing to appropriate interface - ^define slots li@ - ^if { - if run Player_Trade_Wait - flag player TradeWait duration:5s } - ^if define slots - ^if define slots - ^if define slots # Adding trade items to interface - ^if { - foreach { - define slots "" } } - ^if && { - foreach { - define slots "" } } - ^note "in@generic[size=54;title=Trading, ;contents=%slots%]" as:Trade - ^inventory open d:in@Trade - ^inventory update d: - ^flag player TradeUpdate:! Player_Trade_Wait: type: task debug: false script: - wait 1s - while { - wait 1s } - run Player_Trade_Update # =============== Update Trade Inventory End =============== # # =============== Trade Interface Listener ============== # Player_Trade_Listener: type: world debug: false update: - flag player TradeReady:! - flag TradeReady:! - run Player_Trade_Update def:update - run Player_Trade_Update def:update as: events: on player clicks in inventory: - if queue clear - if && { - if && { - if ]> { - narrate "Trade full." - determine CANCELLED } - flag player trade:->: - take slot: - inject locally update } - queue clear } - if ]> && { - flag player trade:<-: - give - inject locally update } #- narrate "slot= raw= click= type= item=" - determine CANCELLED on player clicks Player_Trade_ITEM_A in TRADE: - flag player TradeReady - if { - run Player_Trade_Accept } else { - flag player TradeReady - run Player_Trade_Update def:ready - run Player_Trade_Update def:ready as: } on player closes inventory: - if queue clear - if { - flag player TradeUpdate:! } else { - run Player_Trade_Decline } on player drops item: - if determine CANCELLED # =============== Trade Interface Listener End ============== # # =========== Trade Finish ============ # Player_Trade_Decline: type: task debug: false close: - inventory close script: - flag player wait duration:1s - ^if run locally close as: - ^flag player trading:! - ^foreach { - give } - ^flag player trade:! - ^flag player tradeready:! - narrate "The trade was cancelled." Player_Trade_Accept: type: task debug: false accept: - ^foreach { - give to: } - ^flag player trade:! - ^flag player trading:! - ^flag player tradeready:! - ^flag player TradeUpdate - ^inventory close - narrate "Trade accepted." script: - flag player wait duration:1s - ^if run locally accept as: - ^run locally accept # =========== Trade Finish End ============ # # =========== Trade Interface Items ========== # Player_Trade_Item_1: type: item material: light_gray_stained_glass_pane display name: <&sp> Player_Trade_Item_2: type: item material: light_gray_stained_glass_pane display name: <&sp> Player_Trade_Item_r: type: item material: red_stained_glass_pane display name: <&sp> Player_Trade_Item_s: type: item material: black_stained_glass_pane display name: <&sp> Player_Trade_Item_w: type: item material: yellow_stained_glass_pane display name: <&sp> Player_Trade_Item_a: type: item material: lime_stained_glass_pane display name: Accept lore: - "Click here to" - "accept the trade." Player_Trade_Item_y: type: item material: yellow_stained_glass_pane display name: Ready lore: - "Waiting for" - "other player." Player_Trade_Item_b: type: item material: yellow_stained_glass_pane display name: Waiting lore: - "Other player" - "is not ready." Player_Trade_Item_z: type: item material: lime_stained_glass_pane display name: Ready lore: - "Other player" - "has accepted." # =========== Trade Interface Items End ========== # Player_Trading_Version: type: version author: KeangDavid name: Player Trading version: 1.0.3 description: Player to player trading id: 42