Paste #40234: Untitled Paste

Date: 2017/02/23 22:21:05 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


purchaseItemRegister:
    type: command 
    name: purchase
    aliases: 
    - p
    description: 수매 관련 퀘스트 세팅을 위한 명령어.
    permission: purchase.moderator
    allowed help: 
    - determine <player.is_op||<context.server>> 
    usage:
    - /purchase add [price] [quantity] - 들고있는 아이템을 등록, 가격과 초기 수매량을 지정
    - /purchase del [price] [quantity]- 들고있는 아이템 목록에서 삭제 
    - /purchase addall [price] [quantity]- 인벤토리 아이템 전체 일괄 등록, 가격과 초기 수매량을 지정
    - /purchase addall ranmod - 인벤토리 아이템 전체, 랜덤 가격,수매량으로 등록
    - /purchase delall [price] - 인벤토리 아이템 전체 일괄 삭제
    - /purchase display - 대상 위치에 구매중인 아이템 전시
    - /purchase start - 강제로 구매 시작 이벤트 발생
    - /purchase end - 강제로 구매 이벤트 종료
    - /purchase reset - 셋업 초기화
    script:
    ## 초기화
    - if <server.has_files[<s@purchasequestdefaultsetup.yaml_key[configpath]>]> {
        - narrate "yml loading..."
        - yaml load:<s@purchasequestdefaultsetup.yaml_key[configpath]> id:purchase }
     else {
        ## 디폴트 파일 생성
        - run PurchaseQuestDefaultYmlCreation
     }

    ## 아이템을 등록함 add
    - if <context.args.get[1]||null> == add {

        - if <player.item_in_hand> == i@air {
            - narrate "<&6><player.item_in_hand> 등록할  없습니다."
            - queue clear
        }

        - define item <player.item_in_hand>
        - if <context.args.get[2]||null> == null  {
            - narrate "가격을 정하지 않았습니다. 기본값(<yaml[purchase].read[default.price.initial]>)으로 저장됩니다."
            - define price <yaml[purchase].read[default.price.initial]>
        }
        else {
            - define price <context.args.get[2]>
        }
        - if <context.args.get[3]||null> == null  {
            - narrate "초기 수매량을 정하지 않았습니다. 기본값(<yaml[purchase].read[default.quantity.initial]>)으로 저장됩니다."
            - define quantity <yaml[purchase].read[default.quantity.initial]>
        }
        else {
            - define quantity <context.args.get[3]>
        }

        - ~run PurchaseQuestItemRegistor def:<def[item]>|<def[price]>|<def[quantity]> instantly

    }
    ## 일괄등록
    else if <context.args.get[1]||null> == addall && <context.args.get[2]||null> != random {
        - narrate "<&6>인벤토리의 모든 아이템을 등록합니다."
        - if <context.args.get[2]||null> == null  {
            - narrate "<&c>가격을 정하지 않았습니다. 기본값(<yaml[purchase].read[default.price.initial]>)으로 저장됩니다."
            - define price <yaml[purchase].read[default.price.initial]>
        }
        else {
            - define price <context.args.get[2]>
        }
        - if <context.args.get[3]||null> == null  {
            - narrate "<&c>초기 수매량을 정하지 않았습니다. 기본값(<yaml[purchase].read[default.quantity.initial]>)으로 저장됩니다."
            - define quantity <yaml[purchase].read[default.quantity.initial]>
        }
        else {
            - define quantity <context.args.get[3]>
        }

        - foreach <player.inventory.list_contents> {
            - if <def[value]> != i@air {
            - define item <def[value]>
            - ~run PurchaseQuestItemRegistor def:<def[item]>|<def[price]>|<def[quantity]> instantly
            }
        }
    }
    ## 일괄등록 랜덤화
    else if <context.args.get[1]||null> == addall && <context.args.get[2]||null> == random {
        - narrate "<&6>인벤토리의 모든 아이템을 등록합니다."
        - narrate "<&c>가격과 수량은 랜덤하게 지정됩니다."
        - foreach <player.inventory.list_contents> {
            - define gauss <util.random.decimal[0].to[2]>

            - define price <yaml[purchase].read[default.price.initial].mul[<def[gauss]>].round_to[2]>
            - define quantity <yaml[purchase].read[default.quantity.initial].mul[<def[gauss]>].round>

            - if <def[value]> != i@air {
                - define item <def[value]>
                - ~run PurchaseQuestItemRegistor def:<def[item]>|<def[price]>|<def[quantity]> instantly
            }
        }
    }


    ## 물건 삭제
    else if <context.args.get[1]||null> == del {
        - if <yaml[purchase].read[purchase_list.<player.item_in_hand.material.name>]||null> != null {
            - narrate "<player.item_in_hand.material.name> 목록에서 삭제합니다."
            - yaml id:purchase set purchase_list.<player.item_in_hand.material.name>:!
        }
        else {
        - narrate "<player.item_in_hand.material.name> 그런 물품은 없습니다."
        }
    }

    ## 물건 일괄 삭제
    else if <context.args.get[1]||null> == delall {
        - narrate "<&6>인벤토리의 모든 아이템을 구매목록에서 삭제합니다."
        - foreach <player.inventory.list_contents> {
            - if <def[value]> != i@air {
                - yaml id:purchase set purchase_list.<def[value].material.name>:!
                - narrate "<def[value].material.name>삭제됨"
            }
        }
    }

    ## 수매품목 디스플레이 위치 지정
    else if <context.args.get[1]||null> == display {
        - narrate "<player.location.cursor_on> 위치를 물건 전시 위치로 지정합니다."
        - showfake m@diamond_block <player.location.cursor_on> d:2s
        - yaml id:purchase set default.setting.display_location:<player.location.cursor_on>
    }

    ## 헬프
    else if <context.args.get[1]||null> == help {
        - foreach <s@purchaseItemRegister.yaml_key[usage]> {
            - narrate <def[value]>
        }
    }
    ## 리셋
    else if <context.args.get[1]||null> == reset {
        - ~run warehouse_Purchase_end instantly
        - run PurchaseQuestDefaultYmlCreation
    }

    ## 수매 이벤트 강제 시작 
    else if <context.args.get[1]||null> == start {
        - ~run warehouse_Purchase_start instantly
    }
    ## 수매 이벤트 강제 종료
    else if <context.args.get[1]||null> == end {
        - ~run warehouse_Purchase_end
    }

    ## 예외처리
    else if <context.args.get[1]||null> == null {
        - foreach <s@purchaseItemRegister.yaml_key[usage]> {
            - narrate <def[value]>
        }
    }
    else {
        - narrate "<red><context.args.get[1]>   없는 요소입니다. 정확히 입력해 주십시오." 
    }

    ## yaml 저장하고 마침
    - yaml savefile:<s@purchasequestdefaultsetup.yaml_key[configpath]> id:purchase

purchase_yaml_save:
    type: task
    speed: 1t
    script:
    - yaml savefile:<s@purchasequestdefaultsetup.yaml_key[configpath]> id:purchase

PurchaseQuestItemRegistor:
    type: task
    speed: 1t
    definitions: item|price|quantity
    script:
    - yaml id:purchase set purchase_list.<def[item].material.name>.current.price:<def[price]>
    - yaml id:purchase set purchase_list.<def[item].material.name>.name:<def[item].material.name>
    - yaml id:purchase set purchase_list.<def[item].material.name>.current.quantity:<def[quantity].mul_int[10].div_int[10].round>
    - yaml id:purchase set purchase_list.<def[item].material.name>.history.total.procurement:0
    - yaml id:purchase set purchase_list.<def[item].material.name>.history.total.purchased_quantity:<el@0.round>
    - yaml id:purchase set purchase_list.<def[item].material.name>.history.total.purchased_expenditure:0
    - yaml id:purchase set purchase_list.<def[item].material.name>.history.average.price:<def[price]>
    - yaml id:purchase set purchase_list.<def[item].material.name>.history.average.quantity:<def[quantity].round>
    - narrate "<aqua><def[item].material.name>등록됨. 가격 <yaml[purchase].read[purchase_list.<def[item].material.name>.current.price]> 수량 <yaml[purchase].read[purchase_list.<def[item].material.name>.current.quantity]>"

PurchaseQuestDefaultYmlCreation:
    type: task
    speed: 1t
    script:
## purchase yml 생성
    - narrate "PurchaseQuest Install - yml 파일 생성"
    - narrate "완료될 때까지 잠시 기다려 주십시오."
    - yaml unload id:purchase
    - yaml create id:purchase
    - yaml id:purchase set default.setting.display_location:null
    - yaml id:purchase set default.setting.npc:<player.target||null>
#    - yaml id:purchase set purchase_list:!
    - yaml id:purchase set default.setting.time_limit:50m
    - yaml id:purchase set default.setting.minium_player:3
    - yaml id:purchase set default.quantity.initial:2034
    - yaml id:purchase set default.quantity.delta:0.1
    - yaml id:purchase set default.quantity.max:20340
    - yaml id:purchase set default.quantity.min:8
    - yaml id:purchase set default.price.initial:10
    - yaml id:purchase set default.price.delta:0.1
    - yaml id:purchase set default.price.max:10000
    - yaml id:purchase set default.price.min:0.01
    - yaml id:purchase set default.price.option_ratio:0.1
    - ~run PurchaseQuestItemRegistor def:i@rotten_flesh|<yaml[purchase].read[default.price.initial]>|<yaml[purchase].read[default.quantity.initial]> instantly
    - yaml savefile:<s@purchasequestdefaultsetup.yaml_key[configpath]> id:purchase
    - yaml unload id:purchase
    - narrate "초기 파일 생성함, 썩은 고기가 기본적으로 등록됩니다. 최소한 하나 이상의 아이템이 리스트에 존재해야 합니다."

## seller list yml 생성