Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- stats:
- type: world
- debug: false
- config:
- stat:
- - define config.stats.<[stat]>.name:<yaml[config_stats].read[stats.<[stat]>.name]||null>
- - define config.stats.<[stat]>.desciption:<yaml[config_stats].read[stats.<[stat]>.description]||null>
- - define config.stats.<[stat]>.cooldown:<yaml[config_stats].read[stats.<[stat]>.cooldown]||0>
- - define config.stats.<[stat]>.duration:<yaml[config_stats].read[stats.<[stat]>.duration]||0>
- - define config.stats.<[stat]>.effects:<yaml[config_stats].read[stats.<[stat]>.effects]||null>
- - define config.stats.<[stat]>.conditions:<yaml[config_stats].read[stats.<[stat]>.conditions]||>
- - define config.stats.<[stat]>.triggers:<yaml[config_stats].read[stats.<[stat]>.triggers]||>
- - define config.stats.<[stat]>.modifiers:<yaml[config_stats].read[stats.<[stat]>.modifiers]||>
- stats:
- - define config.stats:<yaml[config_stats].list_keys[stats]||>
- conditions:
- - define config.conditions:<yaml[data_stats].read[conditions]>
- link:
- - define config.stats.<[stat]>.link:null
- load():
- - if !<server.has_file[../dStats/data.yml]>:
- - yaml id:data_stats loadtext:<script[stats_data].to_text>
- - yaml id:data_stats savefile:../dStats/data.yml
- - else:
- - yaml id:data_stats load:../dStats/data.yml
- - if !<server.has_file[../dStats/config.yml]>:
- - yaml id:config_stats loadtext:<script[stats_config].to_text>
- - yaml id:config_stats savefile:../dStats/config.yml
- - else:
- - yaml id:config_stats load:../dStats/config.yml
- - foreach <yaml[config_stats].list_keys[skins].filter[contains_any[<yaml[data_stats].list_keys[skins].include[null]||null>].not]> as:skin:
- - ~webget https://api.mineskin.org/generate/url post:url=<yaml[config_stats].read[skins.<[skin]>]> timeout:5s save:skin_data
- - wait 20t
- - yaml id:skin_store loadtext:<entry[skin_data].result||null>
- - yaml id:data_stats set skins.<[skin]>:<yaml[skin_store].read[data.texture.value]>;<yaml[skin_store].read[data.texture.signature]>
- - yaml id:skin_store unload
- - yaml id:data_stats savefile:../dStats/data.yml
- player:
- stat:
- - define player.stats.<[stat]>:<yaml[<player.uuid>_stats].read[stats.<[stat]>]||null>
- stats:
- - define player.stats:<yaml[<player.uuid>_stats].list_keys[stats]||>
- - define player.active_stats:<yaml[<player.uuid>_stats].read[active_stats]||>
- condition:
- - define player.conditions.<[condition]>.stats:<yaml[<player.uuid>_stats].read[conditions.<[condition]>]||>
- - choose <[condition]>:
- - case daytime:
- - if !<list[dawn|day].contains[<player.world.time.period>]>:
- - define result:false
- - case not_daytime:
- - if <list[dawn|day].contains[<player.world.time.period>]>:
- - define result:false
- - case skylight:
- - if <player.location.light.sky> <= 12:
- - define result:false
- - case not_skylight:
- - if <player.location.light.sky> >= 12:
- - define result:false
- - case blocklight:
- - if <player.location.light.block> <= 12:
- - define result:false
- - case not_blocklight:
- - if <player.location.light.block> >= 12:
- - define result:false
- - case poisoned:
- - if !<player.has_flag[poisoned]>:
- - define result:false
- - case not_poisoned:
- - if <player.has_flag[poisoned]>:
- - define result:false
- - case burning:
- - if !<player.is_burning>:
- - define result:false
- - case not_burning:
- - if <player.is_burning>:
- - define result:false
- - case bleeding:
- - if !<player.has_flag[bleeding]>:
- - define result:false
- - case not_bleeding:
- - if <player.has_flag[bleeding]>:
- - define result:false
- - case frozen:
- - if !<player.has_flag[frozen]>:
- - define result:false
- - case not_frozen:
- - if <player.has_flag[frozen]>:
- - define result:false
- - case wet:
- - if !<player.has_flag[wet]>:
- - define result:false
- - case not_wet:
- - if <player.has_flag[wet]>:
- - define result:false
- - case blocking:
- - if !<player.is_blocking>:
- - define result:false
- - case not_blocking:
- - if <player.is_blocking>:
- - define result:false
- - case sprinting:
- - if !<player.is_sprinting>:
- - define result:false
- - case not_sprinting:
- - if <player.is_sprinting>:
- - define result:false
- - case sneaking:
- - if !<player.is_sneaking>:
- - define result:false
- - case not_sneaking:
- - if <player.is_sneaking>:
- - define result:false
- - case flying:
- - if !<player.is_flying>:
- - define result:false
- - case not_flying:
- - if <player.is_flying>:
- - define result:false
- - case gliding:
- - if !<player.is_gliding>:
- - define result:false
- - case not_gliding:
- - if <player.is_gliding>:
- - define result:false
- - case low_health:
- - if <player.health.percentage> >= 25:
- - define result:false
- - case not_low_health:
- - if <player.health.percentage> <= 25:
- - define result:false
- - case full_health:
- - if <player.health> != <player.health.max>:
- - define result:false
- - case not_full_health:
- - if <player.health> == <player.health.max>:
- - define result:false
- - case starving:
- - if <player.food_level> != 0:
- - define result:false
- - case not_starving:
- - if <player.food_level> == 0:
- - define result:false
- - case drowning:
- - if <player.oxygen.in_seconds> >= 0:
- - define result:false
- - case not_drowning:
- - if <player.oxygen.in_seconds> <= 0:
- - define result:false
- - case mounted:
- - if !<player.is_inside_vehicle>:
- - define result:false
- - case not_mounted:
- - if <player.is_inside_vehicle>:
- - define result:false
- - case sneaking:
- - if !<player.is_sneaking>:
- - define result:false
- - case not_sneaking:
- - if <player.is_sneaking>:
- - define result:false
- - case sprinting:
- - if !<player.is_sprinting>:
- - define result:false
- - case not_sprinting:
- - if <player.is_sprinting>:
- - define result:false
- - define player.conditions.<[condition]>.is_met:<[result]||true>
- conditions:
- - define player.conditions:<yaml[<player.uuid>_stats].list_keys[conditions]||>
- - define player.active_conditions:<yaml[<player.uuid>_stats].read[active_conditions]||>
- trigger:
- - define player.triggers.<[trigger]>:<yaml[<player.uuid>_stats].read[triggers.<[trigger]>]||>
- triggers:
- - define player.triggers:<yaml[<player.uuid>_stats].list_keys[triggers]||>
- modifier:
- - define player.modifiers.modifier:<yaml[<player.uuid>_stats].read[modifiers.<[modifier]>]||>
- modifiers:
- - define player.modifiers:<yaml[<player.uuid>_stats].list_keys[modifiers]||>
- load():
- - if !<server.has_file[../dStats/players/<player.uuid>.yml]>:
- - yaml id:<player.uuid>_stats loadtext:<script[stats_player].to_text>
- - ~yaml id:<player.uuid>_stats savefile:../dStats/players/<player.uuid>.yml
- - else:
- - yaml id:<player.uuid>_stats load:../dStats/players/<player.uuid>.yml
- save():
- - ~yaml id:<player.uuid>_stats savefile:../dStats/players/<player.uuid>.yml
- uninit():
- - inject locally player.stats
- - foreach <[player.active_stats]> as:stat:
- - inject locally player.deactivate_stat()
- - inject locally player.save()
- update_conditions():
- - inject locally player.conditions
- - foreach <[player.conditions]> as:condition:
- - inject locally player.condition
- - if <[player.active_conditions].contains[<[condition]>]> && !<[player.conditions.<[condition]>.is_met]>:
- - yaml id:<player.uuid>_stats set active_conditions:<-:<[condition]>
- - else if !<[player.active_conditions].contains[<[condition]>]> && <[player.conditions.<[condition]>.is_met]>:
- - yaml id:<player.uuid>_stats set active_conditions:->:<[condition]>
- update_stats():
- - inject locally player.stats
- - inject locally player.conditions
- - foreach <[player.stats]> as:stat:
- - inject locally player.stat
- - inject locally config.stat
- - if <[config.stats.<[stat]>.triggers]> == null && !<player.has_flag[cooldown_<[stat]>]>:
- - if <[player.active_stats].contains[<[stat]>]> && !<[player.active_conditions].contains_all[<[config.stats.<[stat]>.conditions]>]>:
- - inject locally player.deactivate_stat()
- - else if !<[player.active_stats].contains[<[stat]>]> && <[player.active_conditions].contains_all[<[config.stats.<[stat]>.conditions]>]>:
- - inject locally player.activate_stat()
- handle_trigger():
- - inject locally player.triggers
- - if <[player.triggers].contains[<[trigger]>]>:
- - inject locally player.trigger
- - foreach <[player.triggers.<[trigger]>]> as:stat:
- - inject locally player.conditions
- - inject locally config.stat
- - if <[player.active_conditions].contains_all[<[config.stats.<[stat]>.conditions]>]||true> && !<player.has_flag[cooldown_<[stat]>]>:
- - inject locally player.activate_stat()
- set_stat_effect_state():
- - inject locally player.stat
- - define val:<[player.stats.<[stat]>]>
- - if <[val].is_decimal> && !<[state]>:
- - define val:<[val].*[-1]>
- - else if <[val]> == null && !<[stat]>:
- - define val:!
- - choose <[effect]>:
- - case health:
- - adjust <player> max_health:<player.health.max.+[<[val]>]>
- - case armor:
- - adjust <player> armor_bonus:<player.armor_bonus.+[<[val]>]>
- - case mana:
- - flag player mana:<player.flag[mana].+[<[val]>]>
- - case speed:
- - adjust <player> walk_speed:<player.walk_speed.+[<[val]>]>
- - case hover:
- - adjust <player> gravity:<tern[<[state]>].pass[false].fail[true]>
- - case invisible:
- - invisible <player> state:<[state]>
- - case damage:
- - flag player damage:+:<[val]>
- - case melee_damage:
- - flag player melee_damage:+:<[val]>
- - case projectile_damage:
- - flag player projectile_damage:+:<[val]>
- - case magic_damage:
- - flag player magic_damage:+:<[val]>
- - case lifesteal:
- - flag player lifesteal:+:<[val]>
- - case poison:
- - flag player poison:+:<[val]>
- - case burn:
- - flag player burn:+:<[val]>
- - case bleed:
- - flag player bleed:+:<[val]>
- - case freeze:
- - flag player freeze:+:<[val]>
- - case electrocute:
- - flag player electrocute:+:<[val]>
- - case heal:
- - heal <[val]>
- - case restore_mana:
- - narrate "Todo - Restore mana effect"
- - case hurt:
- - hurt <[val]> <player>
- - case combust:
- - burn <player>
- - case monster:
- - flag player monster:+:<[val]>
- - case skin:
- - if <[state]>:
- - flag player skin:<player.skin_blob>
- - adjust <player> skin_blob:<yaml[data_stats].read[skins.<[val]>]>
- - else:
- - adjust <player> skin_blob:<player.flag[skin]>
- - flag player skin:!
- - case script:
- - if <[state]>:
- - inject <[val]>
- set_stat():
- - inject locally player.stats
- - inject locally player.stat
- - inject locally config.stats
- - inject locally config.stat
- - if !<[config.stats].contains[<[stat]>]>:
- - narrate "<&c>Invalid stat: <&6><[stat]>"
- - stop
- - if <[values].first.matches[0|null]> || <[values].first.+[<[player.stats.<[stat]>].first>]||null> == 0:
- - narrate "Removing stat: <[stat]>"
- - stop
- - inject locally player.remove_stat()
- - narrate "STOPPING"
- - stop
- - foreach <[values]> as:<[value]>:
- - if <[value].is_decimal>
- - define values[<[loop_index]>]:+:<[value]>
- - else:
- - define values[<[loop_index]>]:<[value]>
- - if !<[player.stats].contains[<[stat]>]>:
- - foreach <[config.stats.<[stat]>.conditions]> as:condition:
- - yaml id:<player.uuid>_stats set conditions.<[condition]>:->:<[stat]>
- - foreach <[config.stats.<[stat]>.triggers]> as:trigger:
- - yaml id:<player.uuid>_stats set triggers.<[trigger]>:->:<[stat]>
- - foreach <[config.stats.<[stat]>.modifiers]> as:modifier:
- - yaml id:<player.uuid>_stats set modifiers.<[modifier]>:->:<[stat]>
- - if <[player.active_stats].contains[<[stat]>]>:
- - inject locally player.deactivate_stat()
- - if <[value].is_decimal>:
- - yaml id:<player.uuid>_stats set stats.<[stat]>:+:<[value]>
- - else:
- - yaml id:<player.uuid>_stats set stats.<[stat]>:<[value]>
- - inject locally player.save()
- remove_stat():
- - inject locally player.stats
- - inject locally config.stat
- - foreach <[config.stats.<[stat]>.conditions]> as:condition:
- - yaml id:<player.uuid>_stats set conditions.<[condition]>:<-:<[stat]>
- - foreach <[config.stats.<[stat]>.triggers]> as:trigger:
- - yaml id:<player.uuid>_stats set triggers.<[trigger]>:<-:<[stat]>
- - foreach <[config.stats.<[stat]>.modifiers]> as:modifier:
- - yaml id:<player.uuid>_stats set modifiers.<[modifier]>:<-:<[stat]>
- - if <[player.active_stats].contains[<[stat]>]>:
- - inject locally player.deactivate_stat()
- - yaml id:<player.uuid>_stats set stats.<[stat]>:!
- - inject locally player.save()
- activate_stat():
- - inject locally player.stats
- - inject locally config.stat
- - if <[player.stats].contains[<[stat]>]> && !<[player.active_stats].contains[<[stat]>]> && !<player.has_flag[cooldown_<[stat]>]>:
- - yaml id:<player.uuid>_stats set active_stats:->:<[stat]>
- - if <[config.stats.<[stat]>.cooldown]> != 0:
- - flag player cooldown_<[stat]> duration:<[config.stats.<[stat]>.cooldown]>s
- - if <[config.stats.<[stat]>.duration]> != 0:
- - flag player stat_durations:->:<[stat]>/<util.date.time.duration>
- - foreach <[config.stats.<[stat]>.effects]> as:effect:
- - define state:true
- - inject locally player.set_stat_effect_state()
- - inject locally player.save()
- deactivate_stat():
- - inject locally player.stats
- - inject locally config.stat
- - if <[player.active_stats].contains[<[stat]>]>:
- - yaml id:<player.uuid>_stats set active_stats:<-:<[stat]>
- - foreach <[config.stats.<[stat]>.effects]> as:effect:
- - define state:false
- - inject locally player.set_stat_effect_state()
- - inject locally player.save()
- events:
- on server start:
- - inject locally config.load()
- on player joins:
- - wait 1t
- - inject locally player.load()
- on player quits:
- - inject locally player.uninit()
- on delta time secondly every:3:
- - foreach <server.list_online_players> as:player:
- - inject locally player.update_conditions() player:<[player]>
- - inject locally player.update_stats() player:<[player]>
- on delta time secondly every:1:
- - foreach <server.list_online_players_flagged[stat_durations]> as:player:
- - foreach <[player].flag[stat_durations]> as:dur:
- - define stat:<[dur].before[/]>
- - inject locally config.stat
- - if <util.date.time.duration.sub[<[dur].after[/].as_duration>].in_seconds> >= <[config.stats.<[stat]>.duration].as_duration.in_seconds>:
- - flag <[player]> stat_durations:<-:<[dur]>
- - inject locally player.deactivate_stat() player:<[player]>
- on player damages entity:
- - define mod:<element[1].+[<player.flag[damage]||0>]>
- - define trigger:hit
- - inject locally player.handle_trigger()
- - if !<player.item_in_hand.material.name.contains_any[bow|stick]>:
- - define mod:+:<player.flag[melee_damage]||0>
- - define trigger:melee_hit
- - inject locally player.handle_trigger()
- - if <player.item_in_hand.material.name.contains_any[bow]>:
- - define mod:+:<player.flag[projectile_damage]||0>
- - define trigger:projectile_hit
- - inject locally player.handle_trigger()
- on entity damages player:
- - define mod:<element[1].+[<player.flag[damage_resistance]||0>]>
- - define trigger:damaged
- - inject locally player.handle_trigger()
- on player kills entity:
- - define trigger:kill
- - inject locally player.handle_trigger()
- on player kills player:
- - define trigger:player_kill
- - inject locally player.handle_trigger()
- on player starts sprinting:
- - define trigger:sprints
- - inject locally player.handle_trigger()
- on player starts sneaking:
- - define trigger:sneaks
- - inject locally player.handle_trigger()
- on player starts gliding:
- - define trigger:glides
- - inject locally player.handle_trigger()
- on player jumps:
- - define trigger:jumps
- - inject locally player.handle_trigger()
- on player enters vehicle:
- - define trigger:mounts
- - inject locally player.handle_trigger()
- on player clicks:
- - define trigger:click
- - inject locally player.handle_trigger()
- - if <context.click_type.contains[right_click]>:
- - define trigger:right_click
- - inject locally player.handle_trigger()
- - if <context.click_type.contains[left_click]>:
- - define trigger:left_click
- - inject locally player.handle_trigger()
- traits:
- type: world
- debug: true
- config:
- trait:
- - define config.traits.<[trait]>.name:<yaml[config_traits].read[traits.<[trait]>.name]||null>
- - define config.traits.<[trait]>.description:<yaml[config_traits].read[traits.<[trait]>.description]||null>
- - define config.traits.<[trait]>.max_level:<yaml[config_traits].read[traits.<[trait]>.max_level]||0>
- - define config.traits.<[trait]>.max_subtraits:<yaml[config_traits].read[traits.<[trait]>.max_subtraits]||0>
- - define config.traits.<[trait]>.supertraits:<yaml[config_traits].read[traits.<[trait]>.supertraits]||>
- - define config.traits.<[trait]>.subtraits:<yaml[config_traits].read[traits.<[trait]>.subtraits]||>
- - define config.traits.<[trait]>.stats:<yaml[config_traits].read[traits.<[trait]>.stats]||>
- traits:
- - define config.traits:<yaml[config_traits].list_keys[traits]||>
- - define config.base_traits:<yaml[config_traits].read[default_traits]||>
- load():
- - if !<server.has_file[../dTraits/config.yml]>:
- - yaml id:config_traits loadtext:<script[traits_config].to_text>
- - yaml id:config_traits savefile:../dTraits/config.yml
- - else:
- - yaml id:config_traits load:../dTraits/config.yml
- player:
- trait:
- - define player.traits.<[trait]>:<yaml[<player.uuid>_traits].read[traits.<[trait]>]||0>
- traits:
- - define player.traits:<yaml[<player.uuid>_traits].list_keys[traits]||>
- - define player.active_traits:<yaml[<player.uuid>_traits].read[active_traits]||>
- load():
- - if !<server.has_file[../dTraits/players/<player.uuid>.yml]>:
- - yaml id:<player.uuid>_traits loadtext:<script[traits_player].to_text>
- - yaml id:<player.uuid>_traits savefile:../dTraits/players/<player.uuid>.yml
- - else:
- - yaml id:<player.uuid>_traits load:../dTraits/players/<player.uuid>.yml
- - inject locally player.traits
- - inject locally config.traits
- - foreach <[config.base_traits].filter[contains_any[<[player.traits]||>].not]> as:trait:
- - inject locally player.set_trait()
- - inject locally player.activate_trait()
- - inject locally player.save()
- save():
- - yaml id:<player.uuid>_traits savefile:../dTraits/players/<player.uuid>.yml
- set_trait():
- - inject locally player.traits
- - inject locally player.trait
- - inject locally config.traits
- - inject locally config.trait
- - if !<[config.traits].contains[<[trait]>]>:
- - narrate "<&c>Invalid trait: <[trait]>"
- - stop
- - if <[level]||1> == 0 || <[player.traits.<[trait]>].+[<[level]>]||1> == 0:
- - inject locally player.remove_trait()
- - stop
- - if !<[player.active_traits].contains_all[<[config.traits.<[trait]>.supertraits]||>]||true>:
- - narrate "<&c>You do not meet the requirements for: <[trait]>"
- - stop
- - narrate "<&e>Setting trait: <[trait]>"
- - yaml id:<player.uuid>_traits set traits.<[trait]>:<[level]||1>
- - inject locally player.activate_trait()
- remove_trait():
- - inject player.traits()
- - if !<[player.traits].contains[<[trait]>]>:
- - narrate "<&c>Cannot remove: <[trait]>"
- - stop
- - narrate "<&e>Removing trait: <[trait]>"
- - yaml id:<player.uuid>_traits set traits.<[trait]>:!
- - if <[player.active_traits].contains[<[trait]>]>:
- - inject locally player.deactivate_trait()
- - inject locally player.save()
- activate_trait():
- - inject locally player.traits
- - inject locally player.trait
- - inject locally config.trait
- - if !<[player.active_traits].contains_all[<[config.traits.<[trait]>.supertraits]||>]||true>:
- - narrate "<&c>You do not meet the requirements for: <[trait]>"
- - stop
- - if <[player.traits].contains[<[trait]>]> && !<[player.active_traits].contains[<[trait]>]>:
- - foreach <[config.traits.<[trait]>.supertraits]> as:supertrait:
- - if <[player.active_traits].filter[contains_any[<yaml[config_traits].read[traits.<[supertrait]>.subtraits]||>]].size> >= <yaml[config_traits].read[traits.<[supertrait]>.max_subtraits]||1>:
- - define original_trait:<[trait]>
- - foreach <yaml[config_traits].read[traits.<[supertrait]>.subtraits].filter[contains_any[<[player.active_traits]>]]||> as:trait:
- - inject locally player.deactivate_trait()
- - define trait:<[original_trait]>
- - narrate "<&e>Activating trait: <[trait]>"
- - yaml id:<player.uuid>_traits set active_traits:->:<[trait]>
- - else:
- - narrate "<&c>Cannot activate trait: <[trait]>"
- deactivate_trait():
- - inject locally player.traits
- - if <[player.active_traits].contains[<[trait]>]>:
- - narrate "<&e>Deactivating trait: <[trait]>"
- - yaml id:<player.uuid>_traits set active_traits:<-:<[trait]>
- - foreach <proc[get_trait_tree].context[<[trait]>].filter[matches_any[<[player.active_traits]>]]> as:subtrait:
- - narrate "<&e>Deactivating trait: <[subtrait]>"
- - yaml id:<player.uuid>_traits set active_traits:<-:<[subtrait]>
- - else:
- - narrate "<&c>Cannot deactivate trait: <[trait]>"
- events:
- on server start:
- - inject locally config.load()
- on player joins:
- - wait 1t
- - inject locally player.load()
- on player quits:
- - inject locally player.save()
- get_trait_tree:
- type: procedure
- debug: true
- definitions: trait
- script:
- - inject traits.config.trait
- - foreach <[config.traits.<[trait]>.subtraits]||> as:subtrait:
- - define tree:|:<proc[get_trait_tree].context[<[subtrait]>].include[subtrait]||<[subtrait]>>
- - determine <[tree]||>
- stats_command:
- type: command
- name: stats
- usage: /stats (set/remove) (stat) (value) (player)
- permission: stats.command
- script:
- - choose <context.args.[1]||help>:
- - case help:
- - narrate "- Stats Help -"
- - narrate "<&e>/stats set"
- - narrate "<&e>/stats remove"
- - case set:
- - inject stats.config.stats
- - define stat:<context.args.[2]>
- - define values:|:<context.args.[3]||none>
- - if !<[config.stats].contains[<[stat]>]>:
- - narrate "<&c>Invalid stat: <[stat]>"
- - stop
- - if <[values].first> == none:
- - narrate "<&c>Invalid value"
- - stop
- - inject stats.player.set_stat()
- - case remove:
- - inject stats.player.stats
- - define stat:<context.args.[2]>
- - if !<[player.stats].contains[<[stat]>]>:
- - narrate "<&c>Invalid stat: <[stat]>"
- - stop
- - case profile:
- - announce "<queue.stats>"
- traits_command:
- type: command
- name: traits
- usage: /traits (help/list/info/change) (trait)
- script:
- - choose <context.args.[1]||help>:
- - case help:
- - narrate "- Trait Help -"
- - case list:
- - narrate "- Trait List -"
- - case info:
- - narrate "- Trait Info -"
- - case change:
- - define trait:<context.args.[2]||>
- - inject traits.player.traits
- - if <[player.traits].contains[<[trait]>]>:
- - inject traits.player.activate_trait()
- - else:
- - define level:1
- - inject traits.player.set_trait()
- - narrate "traits_command - <queue.time_ran>"
- - inject traits.player.save()
- - case set:
- - define trait:<context.args.[2]>
- - define level:<context.args.[3]||1>
- - inject traits.player.set_trait()
- - inject traits.player.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement