world_script: type: world events: #todo #/ex narrate "" #convert to - flag server cuboids:notabe/owner on world loads: - if || null == null: - flag server index:1 - if == null: - note as:farmcube #mayor creation on player right clicks stone_bricks with wheat: - take iteminhand - drop mayor_placer on player right clicks block with mayor_placer: - if !: - take iteminhand - create player mayor save:mayorID - assignment set script:mayor_assignment npc: - adjust owner: - adjust lookclose:true - flag player has_mayor: - determine cancelled - else: - narrate "you already have a mayor" - narrate "dismiss your mayor to spawn a new one" - narrate "or type /resetmayor to remove your mayor" - determine cancelled #mayor creation end ##mayor interactions ## ## #create a soldier npc on player clicks mayor_hire_soldier in mayor_menu: - if >= 64 && < 5: - take wheat quantity:64 - narrate "you hired a soldier" - create player soldier trait:sentinel save:soldierID - flag player soldier:++ - assignment set script:soldier_assignment npc: #configure soldier as sentinel owned by player - adjust owner: - adjust speed:1.3 - execute as_op "npc select " silent - execute as_op "npc skin --url https://i.imgur.com/nwUVLKc.png" silent - execute as_server "sentinel chaserange 15 --id " - execute as_server "sentinel addtarget monsters --id " - execute as_server "sentinel guard --id " - execute as_server "sentinel attackrate 1 --id " - execute as_server "sentinel realistic --id " - execute as_server "sentinel safeshot true --id " - execute as_server "sentinel speed 1.5 --id " - execute as_server "sentinel respawntime -1 --id " - inventory open d:mayor_menu - determine cancelled - else: - if > 5: - narrate "soldier limit reached for mayor(5)" - determine cancelled - else: - narrate "you dont have enough wheat" - determine cancelled #soldier creation end #create a farmer npc on player clicks mayor_hire_farmer in mayor_menu: - if >= 10 && < 3: - take iron_ingot quantity:10 - narrate "you hired a farmer" - create player farmer save:farmerID - flag player farmer:++ - assignment set script:farmer_assignment npc: - adjust owner: - inventory open d:mayor_menu - determine cancelled - else: - if > 5: - narrate "farmer limit reached for mayor(3)" - determine cancelled - else: - narrate "you dont have enough iron" - determine cancelled #create farmer end #remove the npc the player is talking with on player clicks mayor_dismiss in mayor_menu: - narrate "goodbye" - remove ]> - flag player has_mayor:! - inventory close - determine cancelled on npc death: #todo FIX - flag :-- - note remove as: on player left clicks with air: - if && : - execute as_op "npc equip" - flag player equiping:! - determine cancelled - if && : - execute as_op "npc path" - execute as_op "sentinel guard" - narrate "the soldier will now guard this area" - flag player pathing:! - determine cancelled ## ## ## #soldier interactions ## ## ## on player clicks soldier_equip in soldier_menu: - if !( player.flag[equiping] == ) && !: - execute as_op "npc select " silent - execute as_op "npc equip" - narrate "Shift left click with an empty hand to exit" - flag player equiping:!|: - inventory close - determine cancelled - else: - inventory close - wait 8t - narrate "already equiping a soldier or assigning waypoints" - determine cancelled on player clicks soldier_path in soldier_menu: - if !( player.flag[pathing] == ) && !: - execute as_op "npc select " silent - execute as_op "npc path" - flag player pathing:!|: - inventory close - determine cancelled - else: - inventory close - wait 8t - narrate "already assigning waypoints or equiping a soldier" - determine cancelled on player clicks soldier_guard in soldier_menu: - execute as_op "sentinel guard --id " - narrate "soldier is now following" - determine cancelled #remove the npc the player is interacting with on player clicks soldier_dismiss in soldier_menu: - narrate "goodbye" - remove ]> - flag player soldier:-- - inventory close - determine cancelled ## ## ## #farmer interactions ## ## on player clicks farmer_area in farmer_menu: - narrate "right click corners with an empty hand to mark the area" - narrate "shift click with an empty hand to cancel" - flag player editing: - flag player farming:1 - inventory close - determine cancelled #defining farm area and add to farm cube on player right clicks block with air: - if == 1: - narrate "corner set at " - flag player corner1: - flag player farming:++ - determine cancelled - else: - if == 2: - define new_area:|]> - define area_name:]> - define area_index:].replace[farm_area_]> #check if the player is overwriting a previous region - if <[area_name].length> > 3: #overwrites the old cuboid with one at 0.0.0 so it does not intersect with the previous area - note as:farmcube #if the new area does not overlap another area replace the old area and add it to the world area - if !: - note new_area as:farm_area_[area_index] - note as:farmcube #if it overlaps restore the previous area to the farm cube and return an error - else: - narrate "Error: this area overlaps another farm area &nl Restoring previous area &nl right click to select a new are &nl shift left click to cancel" - note ]> as:farmcube #restarts the new area definition - flag player farming:1 - determine cancelled #else create a new one with the next available index - else: - if !: #create the farm area and add it to the farm cube and cuboids list - note new_area as:farm_area_ #list the npc that the area belongs to and advance the index for the next area - flag server cuboids:->:/farm_area_ - flag server index:++ - note as:farmcube - narrate "farm area created" - flag player farming:! - determine cancelled - else: #if it overlaps restore the previous area to the farm cube and return an error - narrate "Error: this area overlaps another farm area &nl Restoring previous area &nl right click to select a new are &nl shift left click to cancel" - note ]>]> as:farmcube - flag player farming:1 - determine cancelled ## ## #world events ## ## ## on wheat grows in:farmcube: - wait 1t - if == : #if the location is contained within a cuboid - if == farmcube: - adjust ].map_get[]>]> add_waypoint: - adjust ].map_get[]>]> clear_waypoints mayor_assignment: type: assignment actions: on assignment: - trigger name:click state:true interact scripts: - 1 mayor_interact soldier_assignment: type: assignment actions: on assignment: - trigger name:click state:true interact scripts: - 1 soldier_interact farmer_assignment: type: assignment actions: on assignment: - trigger name:click state:true interact scripts: - 1 farmer_interact mayor_interact: type: interact steps: 1: click trigger: script: #open the menu and flag the npc as the one being interacted with - if == : - inventory open d:mayor_menu - flag player interact_ID: - else: - narrate "this person does not obey you" soldier_interact: type: interact steps: 1: click trigger: script: #open the menu if the player owns the npc and flag the npc as the one being interacted with - if == : - inventory open d:soldier_menu - flag player interact_ID: - else: - narrate "this soldier does not obey you" farmer_interact: type: interact steps: 1: click trigger: script: #open the menu and flag the npc as the one being interacted with - if == : - inventory open d:farmer_menu - flag player interact_ID: - else: - narrate "this person does not obey you" mayor_menu: type: inventory title: Mayor size: 27 slots: - "[mayor_dismiss] [] [] [] [] [] [] [] []" - "[] [] [] [mayor_hire_farmer] [mayor_hire_soldier] [] [] [] []" - "[] [] [] [] [] [] [] [] []" soldier_menu: type: inventory title: Soldier size: 9 slots: - "[soldier_dismiss] [] [] [soldier_equip] [soldier_path] [soldier_guard] [] [] []" farmer_menu: type: inventory title: Farmer size: 27 slots: - "[] [] [] [] [] [] [] [] []" - "[] [] [] [] [farmer_area] [] [] [] []" - "[] [] [] [] [] [] [] [] []" mayor_placer: type: item material: bat_spawn_egg display name: Mayor spawner mayor_hire_soldier: type: item material: stone_sword display name: Hire a soldier for 64 Wheat (/5) mayor_hire_farmer: type: item material: stone_hoe display name: Hire a farmer for 10 iron ingots mayor_dismiss: type: item material: barrier display name: Dismiss the mayor soldier_path: type: item material: arrow display name: set the patrol path soldier_guard: type: item material: shield display name: guard the player soldier_equip: type: item material: iron_chestplate display name: equip your soldier soldier_dismiss: type: item material: barrier display name: Dismiss this soldier farmer_area: type: item material: farmland display name: set farming area reset_command: type: command name: reset description: resets variables usage: /reset (type) tab complete: - determine script: - if == farms: - note as:farmcube - while != 1: - flag server index:-- - note remove as:farm_area_ - flag server index:1 - flag server cuboids:! - narrate "farms reset" if == mayor: - remove - narrate "mayor removed" - flag player has_mayor:!