Paste #121200: Auction

Date: 2024/03/22 06:14:16 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


ah_command:
    type: command
    name: ah
    debug: false
    description: Buy and Sell player items!
    usage: /ah sell (price)
    tab completions:
        1: sell
    script:
    - if <context.args.size> > 0:
        - choose <context.args.get[1]>:
            - case sell:
                - define item <player.item_in_hand>
                - define quantity <[item].quantity>
                - define lore <[item].lore.if_null[]>
                - define item <[item].with_flag[auction_item].with_flag[seller:<player>]>
                - define item <[item].with_flag[price:<[price]>]>
                - define rank <player.luckperms_primary_group.group_name>
                - if <[rank]> == default:
                    - define duration 1m
                - else if <[rank]> == syfon:
                    - define duration 18h
                - else:
                    - define duration 24h
                    #Should I add a tax system? :thinking:
                - define item <[item].with_flag[expire_after].duration[<[duration]>]>
                - define seller <[item].flag[seller]>
                - define price <[item].flag[price]>
                - define time <[item].flag_expiration[expire_after].from_now.formatted>
                - define info "<&nl><&a>Price: <&e><&l><[price]><&nl><&a>Seller: <&e><&l><[seller].name><&nl><&a>Time Left: <&e><&l><[time]>"
                - adjust def:item "lore:<[lore]> <[info]>"
                - flag server ah.items:->:<[item]>
                - take iteminhand quantity:<[quantity]>

test_script:
    type: world
    debug: false
    events:
        after player clicks item_flagged:auction_item in auction_player_lists:
            - define item <context.item>
            - define inventory <inventory[auction_player_lists]>
            - define time <[item].flag_expiration[expire_after].if_null[null]>
            - define seller <[item].flag[seller]>
            - if <[item].has_flag[expired]>:
                - determine cancelled
            - define lore <[item].lore>
            - define lore <[lore].reverse.remove[1|2|3|4].reverse>
            - flag server ah.items:<-:<[item]>
            - adjust def:item lore:<[lore]>
            - give <[item].with_flag[auction_item:!].with_flag[seller:!].with_flag[price:!].with_flag[expire_after:!]>
            - run auctionshop_pages def.page:1 def.category:player
            #- narrate <[time].format[dd/MM/yyyy : HH:mm:SS].if_null[<&c>Nothing here]>
        after player clicks item_flagged:expired in auction_player_lists:
            - define item <context.item>
            - define inventory <inventory[auction_player_lists]>
            - define time <[item].flag_expiration[expire_after].if_null[null]>
            - define seller <[item].flag[seller]>
            - define lore <[item].lore>
            - define lore <[lore].reverse.remove[1|2|3|4].reverse>
            - flag server ah.items:<-:<[item]>
            - adjust def:item lore:<[lore]>
            - give <[item].with_flag[auction_item:!].with_flag[seller:!].with_flag[price:!].with_flag[expire_after:!].with_flag[expired:!]>
            - run auctionshop_pages def.page:1 def.category:player
#test_script:
auction_player:
    type: procedure
    debug: false
    script:
        - define ah_items <server.flag[ah.items].if_null[<item[filler_item].repeat_as_list[1]>]>
        - foreach <[ah_items]> as:item:
            - define seller <[item].flag[seller].if_null[<item[filler_item].repeat_as_list[1]>]>
            - if !<[item].has_flag[expire_after]>:
                - define item <[item].with_flag[expired:done]>
                - define lore <[item].lore>
                - define lore <[lore].reverse.remove[1].reverse>
                - adjust def:item lore:<[lore].include[<&c>Item has Expired!]>
            - if <[seller]> == <player>:
                - define items:->:<[item]>
        - determine <[items].reverse.if_null[<item[filler_item].repeat_as_list[1]>]>

auction_all:
    type: procedure
    debug: false
    script:
        - define ah_items <server.flag[ah.items].if_null[<item[filler_item].repeat_as_list[1]>]>
        - foreach <[ah_items]> as:item:
            - if !<[item].has_flag[expire_after]>:
                - foreach next
            - define items:->:<[item]>
        - determine <[items].reverse.if_null[<item[filler_item].repeat_as_list[1]>]>