Paste #37142: Untitled Paste

Date: 2016/10/25 08:14:50 UTC-07:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


## Add features:
# Highest Combo
# Highest Online-Time
# Highest Streak
# Highest Bounty
# 


PlayerData_Data:
    type: yaml data
    config:
        save_path: "data/players/" 
        flags_to_convert:
            Kit_Quest_Type1: servers.kitpvp.quests.type.1
            Kit_Quest_Type2: servers.kitpvp.quests.type.2
            Kit_Quest_Type3: servers.kitpvp.quests.type.3
            Kit_Quest_Goal1: servers.kitpvp.quests.goal.1
            Kit_Quest_Goal2: servers.kitpvp.quests.goal.2
            Kit_Quest_Goal3: servers.kitpvp.quests.goal.3
            Kit_Quest_Level: servers.kitpvp.quests.level
            KitSystem_Status_AutoKit: servers.kitpvp.config.kit.autokit
            KitSystem_Status_AutoArmor: servers.kitpvp.config.kit.autoarmor
            KitSystem_sort_config: servers.kitpvp.config.kit.order
            kitpvp_kills: servers.kitpvp.stats.kills
            kitpvp_death: servers.kitpvp.stats.deaths
            kitpvp_bounty: servers.kitpvp.stats.bounty
            KITPVP_ICOSA: servers.kitpvp.stats.icosa
            online_total: servers.kitpvp.stats.online
            Teams_Player_Group: servers.kitpvp.stats.team
            # More to come...

# <proc[PD_Proc].context[servers.kitpvp.stats.team|read]>
# - ~run PD_Set instantly player:<player> context:servers.kitpvp.quests.goal.<def[check]>|!

PlayerData_Events:
    type: world
    debug: false
    events:
        on shutdown:
        - foreach <server.list_online_players> {
            - yaml id:<def[value].uuid> "savefile:<s@PlayerData_Data.yaml_key[config.save_path]><def[value].uuid>.yml"
            - yaml unload id:<def[value].uuid>
        }

        on player join:
        - inject PlayerData_Load

        on player quit:
        - wait 10t
        - if <yaml.list.contains[<player.uuid>]> {
            - yaml id:<player.uuid> "savefile:<s@PlayerData_Data.yaml_key[config.save_path]><player.uuid>.yml"
            - yaml unload id:<player.uuid>
        }

# - ~run PD_Set instantly player:<player> context:servers.kitpvp.config.kit.autokit|!

PD_Set:
    type: task
    definitions: path|data|type
    script:
    - define data <def[data].as_element.replace[&linje].with[|]>
    - if <def[type].exists.not||true> {
        - define type set
    }
    - if <def[path].exists.not||true> {
        - queue clear
    }
    - define player <player>
    - if <yaml.list.contains[<def[player].uuid>].not||true> {
        - yaml "load:<s@PlayerData_Data.yaml_key[config.save_path]><def[player].uuid>.yml" id:<def[player].uuid>
    }
    - if <def[type]> == add {
        - yaml id:<def[player].uuid> set <def[path]>:->:<def[data]>
    }
    else if <def[type]> == remove {
        - yaml id:<def[player].uuid> set <def[path]>:<-:<def[data]>
    }
    else if <def[type]> == plus {
        - yaml id:<def[player].uuid> set <def[path]>:+:<def[data]>
    }
    else {
        - yaml id:<def[player].uuid> set <def[path]>:<def[data]>
    }
    - if <def[player].is_online.not> {
        - yaml id:<def[player].uuid> "savefile:<s@PlayerData_Data.yaml_key[config.save_path]><def[player].uuid>.yml"
        - yaml unload id:<def[player].uuid>
    }


# <proc[PD_Proc].context[servers.kitpvp.stats.deaths|read|<player>]>
# <proc[PD_Proc].context[servers.kitpvp.stats.team]>
# <proc[PD_Proc].context[servers.kitpvp.stats.team]>

PD_Proc:
    type: procedure
    debug: false
    definitions: path|type|player
    script:
    - if <def[path].exists.not||true> {
        - queue clear
    }
    # - determine <yaml[<def[player].uuid||<player.uuid>>].read[<def[path]>]||null>
    - if <def[type].exists.not||true> {
        - define type read
    }
    - if <def[player].exists.not||true> {
        - define player <player>
    }
    - if <yaml.list.contains[<def[player].uuid||<player.uuid>>].not> {
        - if <server.has_file[<s@PlayerData_Data.yaml_key[config.save_path]><def[player].uuid||<player.uuid>>.yml].not||true> {
            - determine 0
        }
        - yaml "load:<s@PlayerData_Data.yaml_key[config.save_path]><def[player].uuid||<player.uuid>>.yml" id:<def[player].uuid||<player.uuid>>
    }
    - if <def[type]> == list {
        - defnie outcome <yaml[<def[player].uuid||<player.uuid>>].list_keys[<def[path]>]||0>
    }
    else if <def[type]> == has {
        - define outcome <yaml[<def[player].uuid||<player.uuid>>].contains[<def[path]>]||false>
    }
    else {
        - define outcome <yaml[<def[player].uuid||<player.uuid>>].read[<def[path]>]||0>
    }
    - if <def[player].is_online.not> {
        - if <yaml.list.contains[<def[player].uuid||<player.uuid>>]> {
            - yaml id:<def[player].uuid||<player.uuid>> "savefile:<s@PlayerData_Data.yaml_key[config.save_path]><def[player].uuid||<player.uuid>>.yml"
            - yaml unload id:<def[player].uuid||<player.uuid>>
        }
    }
    - determine <def[outcome]>

PlayerData_Load:
    type: task
    debug: false
    script:
    - if <server.has_file[<s@PlayerData_Data.yaml_key[config.save_path]><player.uuid>.yml].not> {
        - yaml create id:<player.uuid>
        - define path "name"
        - define text "<player.name>"
        - yaml id:<player.uuid> set <def[path]>:<def[text]>
        - yaml id:<player.uuid> "savefile:<s@PlayerData_Data.yaml_key[config.save_path]><player.uuid>.yml"
    }
    else {
        - yaml "load:<s@PlayerData_Data.yaml_key[config.save_path]><player.uuid>.yml" id:<player.uuid>
    }

PlayerData_Convert_All:
    type: task
    script:
    - announce "Starting data convert..."
    - wait 10t
    - define size <server.list_players.size>
    - foreach <server.list_players> {
        - actionbar "Converting... (<def[loop_index]>/<def[size]>)" targets:<server.list_online_players>
        - ~run PlayerData_Convert player:<def[value]> instantly context:<player>
    }
    - announce "FINISHED"

PlayerData_Convert:
    type: task
    definitions: converter
    script:
    - if <def[converter].exists.not||true> {
        - define converter <player>
    }
    - inject PlayerData_Load
    - if <player||null> == null {
        - queue clear
    }
    - announce "<&e>Converting for... <player.name>"
    - foreach <s@PlayerData_Data.list_keys[config.flags_to_convert]> {
        - if <player.has_flag[<def[value]>]> {
            - define path <s@PlayerData_Data.yaml_key[config.flags_to_convert.<def[value]>]>
            - define text <player.flag[<def[value]>]>
            - if <def[text]> == null {
                - announce "<&c>Stopped for null<&co> <def[value]>"
                - queue clear
            }
            - yaml id:<player.uuid> set <def[path]>:<def[text]>
            - announce "<&a><def[path]><&co><def[text]>"
        }
        else {
            - announce "<&c>Has no <def[value]>"
        }
    }
    - yaml id:<player.uuid> "savefile:<s@PlayerData_Data.yaml_key[config.save_path]><player.uuid>.yml"
    - if <player.is_online.not> {
        - wait 1t
        - yaml unload id:<player.uuid>
    }