Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 30.59 KB | None | 0 0
  1. stats:
  2.     type: world
  3.     debug: false
  4.  
  5.     config:
  6.         stat:
  7.            - define config.stats.<[stat]>.name:<yaml[config_stats].read[stats.<[stat]>.name]||null>
  8.            - define config.stats.<[stat]>.desciption:<yaml[config_stats].read[stats.<[stat]>.description]||null>
  9.            - define config.stats.<[stat]>.cooldown:<yaml[config_stats].read[stats.<[stat]>.cooldown]||0>
  10.            - define config.stats.<[stat]>.duration:<yaml[config_stats].read[stats.<[stat]>.duration]||0>
  11.            - define config.stats.<[stat]>.effects:<yaml[config_stats].read[stats.<[stat]>.effects]||null>
  12.            - define config.stats.<[stat]>.conditions:<yaml[config_stats].read[stats.<[stat]>.conditions]||>
  13.            - define config.stats.<[stat]>.triggers:<yaml[config_stats].read[stats.<[stat]>.triggers]||>
  14.            - define config.stats.<[stat]>.modifiers:<yaml[config_stats].read[stats.<[stat]>.modifiers]||>
  15.         stats:
  16.            - define config.stats:<yaml[config_stats].list_keys[stats]||>
  17.         conditions:
  18.            - define config.conditions:<yaml[data_stats].read[conditions]>
  19.         link:
  20.            - define config.stats.<[stat]>.link:null
  21.  
  22.         load():
  23.             - if !<server.has_file[../dStats/data.yml]>:
  24.                - yaml id:data_stats loadtext:<script[stats_data].to_text>
  25.                - yaml id:data_stats savefile:../dStats/data.yml
  26.             - else:
  27.                - yaml id:data_stats load:../dStats/data.yml
  28.  
  29.             - if !<server.has_file[../dStats/config.yml]>:
  30.                - yaml id:config_stats loadtext:<script[stats_config].to_text>
  31.                - yaml id:config_stats savefile:../dStats/config.yml
  32.             - else:
  33.                - yaml id:config_stats load:../dStats/config.yml
  34.  
  35.             - foreach <yaml[config_stats].list_keys[skins].filter[contains_any[<yaml[data_stats].list_keys[skins].include[null]||null>].not]> as:skin:
  36.                - ~webget https://api.mineskin.org/generate/url post:url=<yaml[config_stats].read[skins.<[skin]>]> timeout:5s save:skin_data
  37.                 - wait 20t
  38.                 - yaml id:skin_store loadtext:<entry[skin_data].result||null>
  39.                - yaml id:data_stats set skins.<[skin]>:<yaml[skin_store].read[data.texture.value]>;<yaml[skin_store].read[data.texture.signature]>
  40.                - yaml id:skin_store unload
  41.  
  42.             - yaml id:data_stats savefile:../dStats/data.yml
  43.  
  44.     player:
  45.         stat:
  46.            - define player.stats.<[stat]>:<yaml[<player.uuid>_stats].read[stats.<[stat]>]||null>
  47.         stats:
  48.            - define player.stats:<yaml[<player.uuid>_stats].list_keys[stats]||>
  49.            - define player.active_stats:<yaml[<player.uuid>_stats].read[active_stats]||>
  50.         condition:
  51.            - define player.conditions.<[condition]>.stats:<yaml[<player.uuid>_stats].read[conditions.<[condition]>]||>
  52.             - choose <[condition]>:
  53.                 - case daytime:
  54.                     - if !<list[dawn|day].contains[<player.world.time.period>]>:
  55.                        - define result:false
  56.                 - case not_daytime:
  57.                     - if <list[dawn|day].contains[<player.world.time.period>]>:
  58.                        - define result:false
  59.                 - case skylight:
  60.                     - if <player.location.light.sky> <= 12:
  61.                        - define result:false
  62.                 - case not_skylight:
  63.                     - if <player.location.light.sky> >= 12:
  64.                        - define result:false
  65.                 - case blocklight:
  66.                     - if <player.location.light.block> <= 12:
  67.                        - define result:false
  68.                 - case not_blocklight:
  69.                     - if <player.location.light.block> >= 12:
  70.                        - define result:false
  71.                 - case poisoned:
  72.                     - if !<player.has_flag[poisoned]>:
  73.                        - define result:false
  74.                 - case not_poisoned:
  75.                     - if <player.has_flag[poisoned]>:
  76.                        - define result:false
  77.                 - case burning:
  78.                     - if !<player.is_burning>:
  79.                        - define result:false
  80.                 - case not_burning:
  81.                     - if <player.is_burning>:
  82.                        - define result:false
  83.                 - case bleeding:
  84.                     - if !<player.has_flag[bleeding]>:
  85.                        - define result:false
  86.                 - case not_bleeding:
  87.                     - if <player.has_flag[bleeding]>:
  88.                        - define result:false
  89.                 - case frozen:
  90.                     - if !<player.has_flag[frozen]>:
  91.                        - define result:false
  92.                 - case not_frozen:
  93.                     - if <player.has_flag[frozen]>:
  94.                        - define result:false
  95.                 - case wet:
  96.                     - if !<player.has_flag[wet]>:
  97.                        - define result:false
  98.                 - case not_wet:
  99.                     - if <player.has_flag[wet]>:
  100.                        - define result:false
  101.                 - case blocking:
  102.                     - if !<player.is_blocking>:
  103.                        - define result:false
  104.                 - case not_blocking:
  105.                     - if <player.is_blocking>:
  106.                        - define result:false
  107.                 - case sprinting:
  108.                     - if !<player.is_sprinting>:
  109.                        - define result:false
  110.                 - case not_sprinting:
  111.                     - if <player.is_sprinting>:
  112.                        - define result:false
  113.                 - case sneaking:
  114.                     - if !<player.is_sneaking>:
  115.                        - define result:false
  116.                 - case not_sneaking:
  117.                     - if <player.is_sneaking>:
  118.                        - define result:false
  119.                 - case flying:
  120.                     - if !<player.is_flying>:
  121.                        - define result:false
  122.                 - case not_flying:
  123.                     - if <player.is_flying>:
  124.                        - define result:false
  125.                 - case gliding:
  126.                     - if !<player.is_gliding>:
  127.                        - define result:false
  128.                 - case not_gliding:
  129.                     - if <player.is_gliding>:
  130.                        - define result:false
  131.                 - case low_health:
  132.                     - if <player.health.percentage> >= 25:
  133.                        - define result:false
  134.                 - case not_low_health:
  135.                     - if <player.health.percentage> <= 25:
  136.                        - define result:false
  137.                 - case full_health:
  138.                     - if <player.health> != <player.health.max>:
  139.                        - define result:false
  140.                 - case not_full_health:
  141.                     - if <player.health> == <player.health.max>:
  142.                        - define result:false
  143.                 - case starving:
  144.                     - if <player.food_level> != 0:
  145.                        - define result:false
  146.                 - case not_starving:
  147.                     - if <player.food_level> == 0:
  148.                        - define result:false
  149.                 - case drowning:
  150.                     - if <player.oxygen.in_seconds> >= 0:
  151.                        - define result:false
  152.                 - case not_drowning:
  153.                     - if <player.oxygen.in_seconds> <= 0:
  154.                        - define result:false
  155.                 - case mounted:
  156.                     - if !<player.is_inside_vehicle>:
  157.                        - define result:false
  158.                 - case not_mounted:
  159.                     - if <player.is_inside_vehicle>:
  160.                        - define result:false
  161.                 - case sneaking:
  162.                     - if !<player.is_sneaking>:
  163.                        - define result:false
  164.                 - case not_sneaking:
  165.                     - if <player.is_sneaking>:
  166.                        - define result:false
  167.                 - case sprinting:
  168.                     - if !<player.is_sprinting>:
  169.                        - define result:false
  170.                 - case not_sprinting:
  171.                     - if <player.is_sprinting>:
  172.                        - define result:false
  173.                
  174.             - define player.conditions.<[condition]>.is_met:<[result]||true>
  175.         conditions:
  176.            - define player.conditions:<yaml[<player.uuid>_stats].list_keys[conditions]||>
  177.            - define player.active_conditions:<yaml[<player.uuid>_stats].read[active_conditions]||>
  178.         trigger:
  179.            - define player.triggers.<[trigger]>:<yaml[<player.uuid>_stats].read[triggers.<[trigger]>]||>
  180.         triggers:
  181.            - define player.triggers:<yaml[<player.uuid>_stats].list_keys[triggers]||>
  182.         modifier:
  183.            - define player.modifiers.modifier:<yaml[<player.uuid>_stats].read[modifiers.<[modifier]>]||>
  184.         modifiers:
  185.            - define player.modifiers:<yaml[<player.uuid>_stats].list_keys[modifiers]||>
  186.         load():
  187.             - if !<server.has_file[../dStats/players/<player.uuid>.yml]>:
  188.                - yaml id:<player.uuid>_stats loadtext:<script[stats_player].to_text>
  189.                - ~yaml id:<player.uuid>_stats savefile:../dStats/players/<player.uuid>.yml
  190.             - else:
  191.                - yaml id:<player.uuid>_stats load:../dStats/players/<player.uuid>.yml
  192.  
  193.         save():
  194.            - ~yaml id:<player.uuid>_stats savefile:../dStats/players/<player.uuid>.yml
  195.  
  196.         uninit():
  197.            - inject locally player.stats
  198.  
  199.             - foreach <[player.active_stats]> as:stat:
  200.                - inject locally player.deactivate_stat()
  201.  
  202.             - inject locally player.save()
  203.  
  204.         update_conditions():
  205.            - inject locally player.conditions
  206.  
  207.             - foreach <[player.conditions]> as:condition:
  208.                - inject locally player.condition
  209.  
  210.                 - if <[player.active_conditions].contains[<[condition]>]> && !<[player.conditions.<[condition]>.is_met]>:
  211.                    - yaml id:<player.uuid>_stats set active_conditions:<-:<[condition]>
  212.                 - else if !<[player.active_conditions].contains[<[condition]>]> && <[player.conditions.<[condition]>.is_met]>:
  213.                    - yaml id:<player.uuid>_stats set active_conditions:->:<[condition]>
  214.         update_stats():
  215.            - inject locally player.stats
  216.             - inject locally player.conditions
  217.  
  218.             - foreach <[player.stats]> as:stat:
  219.                - inject locally player.stat
  220.                 - inject locally config.stat
  221.                
  222.                 - if <[config.stats.<[stat]>.triggers]> == null && !<player.has_flag[cooldown_<[stat]>]>:
  223.                    
  224.                     - if <[player.active_stats].contains[<[stat]>]> && !<[player.active_conditions].contains_all[<[config.stats.<[stat]>.conditions]>]>:
  225.                        - inject locally player.deactivate_stat()
  226.  
  227.                     - else if !<[player.active_stats].contains[<[stat]>]> && <[player.active_conditions].contains_all[<[config.stats.<[stat]>.conditions]>]>:
  228.                        - inject locally player.activate_stat()
  229.  
  230.         handle_trigger():
  231.            - inject locally player.triggers
  232.             - if <[player.triggers].contains[<[trigger]>]>:
  233.                - inject locally player.trigger
  234.  
  235.                 - foreach <[player.triggers.<[trigger]>]> as:stat:
  236.                    - inject locally player.conditions
  237.                     - inject locally config.stat
  238.  
  239.                     - if <[player.active_conditions].contains_all[<[config.stats.<[stat]>.conditions]>]||true> && !<player.has_flag[cooldown_<[stat]>]>:
  240.                        - inject locally player.activate_stat()
  241.  
  242.         set_stat_effect_state():
  243.            - inject locally player.stat
  244.             - define val:<[player.stats.<[stat]>]>
  245.             - if <[val].is_decimal> && !<[state]>:
  246.                - define val:<[val].*[-1]>
  247.             - else if <[val]> == null && !<[stat]>:
  248.                - define val:!
  249.            
  250.             - choose <[effect]>:
  251.                 - case health:
  252.                    - adjust <player> max_health:<player.health.max.+[<[val]>]>
  253.                 - case armor:
  254.                    - adjust <player> armor_bonus:<player.armor_bonus.+[<[val]>]>
  255.                 - case mana:
  256.                    - flag player mana:<player.flag[mana].+[<[val]>]>
  257.                 - case speed:
  258.                    - adjust <player> walk_speed:<player.walk_speed.+[<[val]>]>
  259.                 - case hover:
  260.                    - adjust <player> gravity:<tern[<[state]>].pass[false].fail[true]>
  261.                 - case invisible:
  262.                    - invisible <player> state:<[state]>
  263.                 - case damage:
  264.                    - flag player damage:+:<[val]>
  265.                 - case melee_damage:
  266.                    - flag player melee_damage:+:<[val]>
  267.                 - case projectile_damage:
  268.                    - flag player projectile_damage:+:<[val]>
  269.                 - case magic_damage:
  270.                    - flag player magic_damage:+:<[val]>
  271.                 - case lifesteal:
  272.                    - flag player lifesteal:+:<[val]>
  273.                 - case poison:
  274.                    - flag player poison:+:<[val]>
  275.                 - case burn:
  276.                    - flag player burn:+:<[val]>
  277.                 - case bleed:
  278.                    - flag player bleed:+:<[val]>
  279.                 - case freeze:
  280.                    - flag player freeze:+:<[val]>
  281.                 - case electrocute:
  282.                    - flag player electrocute:+:<[val]>
  283.                 - case heal:
  284.                    - heal <[val]>
  285.                 - case restore_mana:
  286.                    - narrate "Todo - Restore mana effect"
  287.                 - case hurt:
  288.                    - hurt <[val]> <player>
  289.                 - case combust:
  290.                    - burn <player>
  291.                 - case monster:
  292.                    - flag player monster:+:<[val]>
  293.                 - case skin:
  294.                     - if <[state]>:
  295.                        - flag player skin:<player.skin_blob>
  296.                        - adjust <player> skin_blob:<yaml[data_stats].read[skins.<[val]>]>
  297.                     - else:
  298.                        - adjust <player> skin_blob:<player.flag[skin]>
  299.                        - flag player skin:!
  300.                 - case script:
  301.                     - if <[state]>:
  302.                        - inject <[val]>
  303.         set_stat():
  304.            - inject locally player.stats
  305.             - inject locally player.stat
  306.             - inject locally config.stats
  307.             - inject locally config.stat
  308.  
  309.             - if !<[config.stats].contains[<[stat]>]>:
  310.                 - narrate "<&c>Invalid stat: <&6><[stat]>"
  311.                - stop
  312.  
  313.            - if <[values].first.matches[0|null]> || <[values].first.+[<[player.stats.<[stat]>].first>]||null> == 0:
  314.                - narrate "Removing stat: <[stat]>"
  315.                - stop
  316.                - inject locally player.remove_stat()
  317.  
  318.            - narrate "STOPPING"
  319.            - stop
  320.            - foreach <[values]> as:<[value]>:
  321.                - if <[value].is_decimal>
  322.                    - define values[<[loop_index]>]:+:<[value]>
  323.                - else:
  324.                    - define values[<[loop_index]>]:<[value]>
  325.  
  326.            - if !<[player.stats].contains[<[stat]>]>:
  327.                - foreach <[config.stats.<[stat]>.conditions]> as:condition:
  328.                    - yaml id:<player.uuid>_stats set conditions.<[condition]>:->:<[stat]>
  329.            
  330.                - foreach <[config.stats.<[stat]>.triggers]> as:trigger:
  331.                    - yaml id:<player.uuid>_stats set triggers.<[trigger]>:->:<[stat]>
  332.  
  333.                - foreach <[config.stats.<[stat]>.modifiers]> as:modifier:
  334.                    - yaml id:<player.uuid>_stats set modifiers.<[modifier]>:->:<[stat]>
  335.  
  336.            - if <[player.active_stats].contains[<[stat]>]>:
  337.                - inject locally player.deactivate_stat()
  338.  
  339.            - if <[value].is_decimal>:
  340.                - yaml id:<player.uuid>_stats set stats.<[stat]>:+:<[value]>
  341.            - else:
  342.                - yaml id:<player.uuid>_stats set stats.<[stat]>:<[value]>
  343.            
  344.            - inject locally player.save()
  345.        
  346.        remove_stat():
  347.            - inject locally player.stats
  348.            - inject locally config.stat
  349.  
  350.            - foreach <[config.stats.<[stat]>.conditions]> as:condition:
  351.                - yaml id:<player.uuid>_stats set conditions.<[condition]>:<-:<[stat]>
  352.  
  353.            - foreach <[config.stats.<[stat]>.triggers]> as:trigger:
  354.                - yaml id:<player.uuid>_stats set triggers.<[trigger]>:<-:<[stat]>
  355.  
  356.            - foreach <[config.stats.<[stat]>.modifiers]> as:modifier:
  357.                - yaml id:<player.uuid>_stats set modifiers.<[modifier]>:<-:<[stat]>
  358.  
  359.            - if <[player.active_stats].contains[<[stat]>]>:
  360.                - inject locally player.deactivate_stat()
  361.  
  362.            - yaml id:<player.uuid>_stats set stats.<[stat]>:!
  363.            - inject locally player.save()
  364.  
  365.        activate_stat():
  366.            - inject locally player.stats
  367.            - inject locally config.stat
  368.  
  369.            - if <[player.stats].contains[<[stat]>]> && !<[player.active_stats].contains[<[stat]>]> && !<player.has_flag[cooldown_<[stat]>]>:
  370.                - yaml id:<player.uuid>_stats set active_stats:->:<[stat]>
  371.  
  372.                - if <[config.stats.<[stat]>.cooldown]> != 0:
  373.                    - flag player cooldown_<[stat]> duration:<[config.stats.<[stat]>.cooldown]>s
  374.  
  375.                - if <[config.stats.<[stat]>.duration]> != 0:
  376.                    - flag player stat_durations:->:<[stat]>/<util.date.time.duration>
  377.  
  378.                - foreach <[config.stats.<[stat]>.effects]> as:effect:
  379.                    - define state:true
  380.                    - inject locally player.set_stat_effect_state()
  381.  
  382.                - inject locally player.save()
  383.  
  384.        deactivate_stat():
  385.            - inject locally player.stats
  386.            - inject locally config.stat
  387.  
  388.            - if <[player.active_stats].contains[<[stat]>]>:
  389.                - yaml id:<player.uuid>_stats set active_stats:<-:<[stat]>
  390.  
  391.                - foreach <[config.stats.<[stat]>.effects]> as:effect:
  392.                    - define state:false
  393.                    - inject locally player.set_stat_effect_state()
  394.                
  395.                - inject locally player.save()
  396.  
  397.    events:
  398.        on server start:
  399.            - inject locally config.load()
  400.  
  401.        on player joins:
  402.            - wait 1t
  403.            - inject locally player.load()
  404.  
  405.        on player quits:
  406.            - inject locally player.uninit()
  407.  
  408.        on delta time secondly every:3:
  409.            - foreach <server.list_online_players> as:player:
  410.                - inject locally player.update_conditions() player:<[player]>
  411.                - inject locally player.update_stats() player:<[player]>
  412.  
  413.        on delta time secondly every:1:
  414.            - foreach <server.list_online_players_flagged[stat_durations]> as:player:
  415.                - foreach <[player].flag[stat_durations]> as:dur:
  416.                    - define stat:<[dur].before[/]>
  417.                    - inject locally config.stat
  418.                    
  419.                    - if <util.date.time.duration.sub[<[dur].after[/].as_duration>].in_seconds> >= <[config.stats.<[stat]>.duration].as_duration.in_seconds>:
  420.                        - flag <[player]> stat_durations:<-:<[dur]>
  421.                        - inject locally player.deactivate_stat() player:<[player]>
  422.  
  423.        on player damages entity:
  424.            - define mod:<element[1].+[<player.flag[damage]||0>]>
  425.            - define trigger:hit
  426.            - inject locally player.handle_trigger()
  427.  
  428.            - if !<player.item_in_hand.material.name.contains_any[bow|stick]>:
  429.                - define mod:+:<player.flag[melee_damage]||0>
  430.                - define trigger:melee_hit
  431.                - inject locally player.handle_trigger()
  432.  
  433.            - if <player.item_in_hand.material.name.contains_any[bow]>:
  434.                - define mod:+:<player.flag[projectile_damage]||0>
  435.                - define trigger:projectile_hit
  436.                - inject locally player.handle_trigger()
  437.  
  438.        on entity damages player:
  439.            - define mod:<element[1].+[<player.flag[damage_resistance]||0>]>
  440.            - define trigger:damaged
  441.            - inject locally player.handle_trigger()
  442.  
  443.        on player kills entity:
  444.            - define trigger:kill
  445.            - inject locally player.handle_trigger()
  446.  
  447.        on player kills player:
  448.            - define trigger:player_kill
  449.            - inject locally player.handle_trigger()
  450.  
  451.        on player starts sprinting:
  452.            - define trigger:sprints
  453.            - inject locally player.handle_trigger()
  454.  
  455.        on player starts sneaking:
  456.            - define trigger:sneaks
  457.            - inject locally player.handle_trigger()
  458.  
  459.        on player starts gliding:
  460.            - define trigger:glides
  461.            - inject locally player.handle_trigger()
  462.  
  463.        on player jumps:
  464.            - define trigger:jumps
  465.            - inject locally player.handle_trigger()
  466.  
  467.        on player enters vehicle:
  468.            - define trigger:mounts
  469.            - inject locally player.handle_trigger()
  470.  
  471.        on player clicks:
  472.            - define trigger:click
  473.            - inject locally player.handle_trigger()
  474.  
  475.            - if <context.click_type.contains[right_click]>:
  476.                - define trigger:right_click
  477.                - inject locally player.handle_trigger()
  478.            
  479.            - if <context.click_type.contains[left_click]>:
  480.                - define trigger:left_click
  481.                - inject locally player.handle_trigger()
  482.  
  483.  
  484. traits:
  485.    type: world
  486.    debug: true
  487.  
  488.    config:
  489.    
  490.        trait:
  491.            - define config.traits.<[trait]>.name:<yaml[config_traits].read[traits.<[trait]>.name]||null>
  492.            - define config.traits.<[trait]>.description:<yaml[config_traits].read[traits.<[trait]>.description]||null>
  493.            - define config.traits.<[trait]>.max_level:<yaml[config_traits].read[traits.<[trait]>.max_level]||0>
  494.            - define config.traits.<[trait]>.max_subtraits:<yaml[config_traits].read[traits.<[trait]>.max_subtraits]||0>
  495.            - define config.traits.<[trait]>.supertraits:<yaml[config_traits].read[traits.<[trait]>.supertraits]||>
  496.            - define config.traits.<[trait]>.subtraits:<yaml[config_traits].read[traits.<[trait]>.subtraits]||>
  497.            - define config.traits.<[trait]>.stats:<yaml[config_traits].read[traits.<[trait]>.stats]||>
  498.  
  499.        traits:
  500.            - define config.traits:<yaml[config_traits].list_keys[traits]||>
  501.            - define config.base_traits:<yaml[config_traits].read[default_traits]||>
  502.        
  503.        load():
  504.            - if !<server.has_file[../dTraits/config.yml]>:
  505.                - yaml id:config_traits loadtext:<script[traits_config].to_text>
  506.                - yaml id:config_traits savefile:../dTraits/config.yml
  507.            - else:
  508.                - yaml id:config_traits load:../dTraits/config.yml
  509.  
  510.    player:
  511.  
  512.        trait:
  513.            - define player.traits.<[trait]>:<yaml[<player.uuid>_traits].read[traits.<[trait]>]||0>
  514.  
  515.        traits:
  516.            - define player.traits:<yaml[<player.uuid>_traits].list_keys[traits]||>
  517.            - define player.active_traits:<yaml[<player.uuid>_traits].read[active_traits]||>
  518.  
  519.        load():
  520.            - if !<server.has_file[../dTraits/players/<player.uuid>.yml]>:
  521.                - yaml id:<player.uuid>_traits loadtext:<script[traits_player].to_text>
  522.                - yaml id:<player.uuid>_traits savefile:../dTraits/players/<player.uuid>.yml
  523.            - else:
  524.                - yaml id:<player.uuid>_traits load:../dTraits/players/<player.uuid>.yml
  525.  
  526.            - inject locally player.traits
  527.            - inject locally config.traits
  528.  
  529.            - foreach <[config.base_traits].filter[contains_any[<[player.traits]||>].not]> as:trait:
  530.                - inject locally player.set_trait()
  531.                - inject locally player.activate_trait()
  532.  
  533.            - inject locally player.save()
  534.  
  535.        save():
  536.            - yaml id:<player.uuid>_traits savefile:../dTraits/players/<player.uuid>.yml
  537.  
  538.        set_trait():
  539.            - inject locally player.traits
  540.            - inject locally player.trait
  541.            - inject locally config.traits
  542.            - inject locally config.trait
  543.  
  544.            - if !<[config.traits].contains[<[trait]>]>:
  545.                - narrate "<&c>Invalid trait: <[trait]>"
  546.                - stop
  547.  
  548.            - if <[level]||1> == 0 || <[player.traits.<[trait]>].+[<[level]>]||1> == 0:
  549.                - inject locally player.remove_trait()
  550.                - stop
  551.  
  552.            - if !<[player.active_traits].contains_all[<[config.traits.<[trait]>.supertraits]||>]||true>:
  553.                - narrate "<&c>You do not meet the requirements for: <[trait]>"
  554.                - stop
  555.  
  556.            - narrate "<&e>Setting trait: <[trait]>"
  557.            - yaml id:<player.uuid>_traits set traits.<[trait]>:<[level]||1>
  558.            - inject locally player.activate_trait()
  559.  
  560.        remove_trait():
  561.            - inject player.traits()
  562.  
  563.            - if !<[player.traits].contains[<[trait]>]>:
  564.                - narrate "<&c>Cannot remove: <[trait]>"
  565.                - stop
  566.  
  567.            - narrate "<&e>Removing trait: <[trait]>"
  568.            - yaml id:<player.uuid>_traits set traits.<[trait]>:!
  569.  
  570.            - if <[player.active_traits].contains[<[trait]>]>:
  571.                - inject locally player.deactivate_trait()
  572.  
  573.            - inject locally player.save()
  574.  
  575.        activate_trait():
  576.            - inject locally player.traits
  577.            - inject locally player.trait
  578.            - inject locally config.trait
  579.  
  580.            - if !<[player.active_traits].contains_all[<[config.traits.<[trait]>.supertraits]||>]||true>:
  581.                - narrate "<&c>You do not meet the requirements for: <[trait]>"
  582.                - stop
  583.  
  584.            - if <[player.traits].contains[<[trait]>]> && !<[player.active_traits].contains[<[trait]>]>:
  585.                - foreach <[config.traits.<[trait]>.supertraits]> as:supertrait:
  586.                    - if <[player.active_traits].filter[contains_any[<yaml[config_traits].read[traits.<[supertrait]>.subtraits]||>]].size> >= <yaml[config_traits].read[traits.<[supertrait]>.max_subtraits]||1>:
  587.                        - define original_trait:<[trait]>
  588.                        
  589.                        - foreach <yaml[config_traits].read[traits.<[supertrait]>.subtraits].filter[contains_any[<[player.active_traits]>]]||> as:trait:
  590.                            - inject locally player.deactivate_trait()
  591.  
  592.                        - define trait:<[original_trait]>
  593.  
  594.                - narrate "<&e>Activating trait: <[trait]>"
  595.                - yaml id:<player.uuid>_traits set active_traits:->:<[trait]>
  596.            
  597.            - else:
  598.                - narrate "<&c>Cannot activate trait: <[trait]>"
  599.  
  600.        deactivate_trait():
  601.            - inject locally player.traits
  602.  
  603.            - if <[player.active_traits].contains[<[trait]>]>:
  604.                - narrate "<&e>Deactivating trait: <[trait]>"
  605.                - yaml id:<player.uuid>_traits set active_traits:<-:<[trait]>
  606.                
  607.                - foreach <proc[get_trait_tree].context[<[trait]>].filter[matches_any[<[player.active_traits]>]]> as:subtrait:
  608.                    - narrate "<&e>Deactivating trait: <[subtrait]>"
  609.                    - yaml id:<player.uuid>_traits set active_traits:<-:<[subtrait]>
  610.            
  611.            - else:
  612.                - narrate "<&c>Cannot deactivate trait: <[trait]>"
  613.  
  614.    events:
  615.        on server start:
  616.        - inject locally config.load()
  617.  
  618.        on player joins:
  619.        - wait 1t
  620.        - inject locally player.load()
  621.  
  622.        on player quits:
  623.        - inject locally player.save()
  624.  
  625. get_trait_tree:
  626.    type: procedure
  627.    debug: true
  628.    definitions: trait
  629.    script:
  630.        - inject traits.config.trait
  631.  
  632.        - foreach <[config.traits.<[trait]>.subtraits]||> as:subtrait:
  633.            - define tree:|:<proc[get_trait_tree].context[<[subtrait]>].include[subtrait]||<[subtrait]>>
  634.            
  635.        - determine <[tree]||>
  636.  
  637. stats_command:
  638.    type: command
  639.    name: stats
  640.    usage: /stats (set/remove) (stat) (value) (player)
  641.    permission: stats.command
  642.    script:
  643.        - choose <context.args.[1]||help>:
  644.            - case help:
  645.                - narrate "- Stats Help -"
  646.                - narrate "<&e>/stats set"
  647.                - narrate "<&e>/stats remove"
  648.  
  649.            - case set:
  650.                - inject stats.config.stats
  651.                - define stat:<context.args.[2]>
  652.                - define values:|:<context.args.[3]||none>
  653.  
  654.                - if !<[config.stats].contains[<[stat]>]>:
  655.                    - narrate "<&c>Invalid stat: <[stat]>"
  656.                    - stop
  657.                
  658.                - if <[values].first> == none:
  659.                    - narrate "<&c>Invalid value"
  660.                    - stop
  661.  
  662.                - inject stats.player.set_stat()
  663.  
  664.            - case remove:
  665.                - inject stats.player.stats
  666.                - define stat:<context.args.[2]>
  667.  
  668.                - if !<[player.stats].contains[<[stat]>]>:
  669.                    - narrate "<&c>Invalid stat: <[stat]>"
  670.                    - stop
  671.            
  672.            - case profile:
  673.                - announce "<queue.stats>"
  674.  
  675.  
  676. traits_command:
  677.    type: command
  678.    name: traits
  679.    usage: /traits (help/list/info/change) (trait)
  680.    script:
  681.        - choose <context.args.[1]||help>:
  682.            - case help:
  683.                - narrate "- Trait Help -"
  684.  
  685.            - case list:
  686.                - narrate "- Trait List -"
  687.  
  688.            - case info:
  689.                - narrate "- Trait Info -"
  690.  
  691.            - case change:
  692.                - define trait:<context.args.[2]||>
  693.                - inject traits.player.traits
  694.  
  695.                - if <[player.traits].contains[<[trait]>]>:
  696.                    - inject traits.player.activate_trait()
  697.                - else:
  698.                    - define level:1
  699.                    - inject traits.player.set_trait()
  700.  
  701.                - narrate "traits_command - <queue.time_ran>"
  702.                - inject traits.player.save()
  703.  
  704.            - case set:
  705.                - define trait:<context.args.[2]>
  706.                - define level:<context.args.[3]||1>
  707.                - inject traits.player.set_trait()
  708.                - inject traits.player.save()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement