mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 09:05:11 +01:00
94 lines
3.7 KiB
Plaintext
94 lines
3.7 KiB
Plaintext
/datum/ai_controller/basic_controller/trader
|
|
blackboard = list(
|
|
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
|
|
)
|
|
|
|
ai_movement = /datum/ai_movement/basic_avoidance
|
|
idle_behavior = /datum/idle_behavior/idle_random_walk/not_while_on_target/trader
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/escape_captivity/pacifist,
|
|
/datum/ai_planning_subtree/target_retaliate,
|
|
/datum/ai_planning_subtree/basic_ranged_attack_subtree/trader,
|
|
/datum/ai_planning_subtree/prepare_travel_to_destination/trader,
|
|
/datum/ai_planning_subtree/travel_to_point/and_clear_target,
|
|
/datum/ai_planning_subtree/setup_shop,
|
|
)
|
|
|
|
/datum/ai_controller/basic_controller/trader/jumpscare
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/escape_captivity/pacifist,
|
|
/datum/ai_planning_subtree/target_retaliate,
|
|
/datum/ai_planning_subtree/basic_ranged_attack_subtree/trader,
|
|
/datum/ai_planning_subtree/prepare_travel_to_destination/trader,
|
|
/datum/ai_planning_subtree/travel_to_point/and_clear_target,
|
|
/datum/ai_planning_subtree/setup_shop/jumpscare,
|
|
)
|
|
|
|
/datum/ai_planning_subtree/basic_ranged_attack_subtree/trader
|
|
ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/trader
|
|
|
|
/datum/ai_behavior/basic_ranged_attack/trader
|
|
action_cooldown = 3 SECONDS
|
|
avoid_friendly_fire = TRUE
|
|
|
|
///Subtree to find our very first customer and set up our shop after walking right into their face
|
|
/datum/ai_planning_subtree/setup_shop
|
|
///What do we do in order to offer our deals?
|
|
var/datum/ai_behavior/setup_shop/setup_shop_behavior = /datum/ai_behavior/setup_shop
|
|
|
|
/datum/ai_planning_subtree/setup_shop/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
|
|
|
|
//If we don't have our ability, return
|
|
if(!controller.blackboard_key_exists(BB_SETUP_SHOP))
|
|
return
|
|
|
|
//If we already have a shop spot, return
|
|
if(controller.blackboard_key_exists(BB_SHOP_SPOT))
|
|
return
|
|
|
|
//If we don't have a costurmer to greet, look for one
|
|
if(!controller.blackboard_key_exists(BB_FIRST_CUSTOMER))
|
|
controller.queue_behavior(/datum/ai_behavior/find_and_set/conscious_person, BB_FIRST_CUSTOMER, /mob/living/carbon/human)
|
|
return
|
|
|
|
//We have our first customer, time to tell them about incredible deals
|
|
controller.queue_behavior(setup_shop_behavior, BB_FIRST_CUSTOMER)
|
|
return SUBTREE_RETURN_FINISH_PLANNING
|
|
|
|
///The ai will create a shop the moment they see a potential costumer
|
|
/datum/ai_behavior/setup_shop
|
|
|
|
/datum/ai_behavior/setup_shop/setup(datum/ai_controller/controller, target_key)
|
|
var/obj/target = controller.blackboard[target_key]
|
|
return !QDELETED(target)
|
|
|
|
/datum/ai_behavior/setup_shop/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
|
//We lost track of our costumer or our ability, abort
|
|
if(!controller.blackboard_key_exists(target_key) || !controller.blackboard_key_exists(BB_SETUP_SHOP))
|
|
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
|
|
|
var/datum/action/setup_shop/shop = controller.blackboard[BB_SETUP_SHOP]
|
|
shop.Trigger()
|
|
|
|
controller.clear_blackboard_key(BB_FIRST_CUSTOMER)
|
|
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
|
|
|
/datum/idle_behavior/idle_random_walk/not_while_on_target/trader
|
|
target_key = BB_SHOP_SPOT
|
|
|
|
///Version of setup show where the trader will run at you to assault you with incredible deals
|
|
/datum/ai_planning_subtree/setup_shop/jumpscare
|
|
setup_shop_behavior = /datum/ai_behavior/setup_shop/jumpscare
|
|
|
|
/datum/ai_behavior/setup_shop/jumpscare
|
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH
|
|
|
|
/datum/ai_behavior/setup_shop/jumpscare/setup(datum/ai_controller/controller, target_key)
|
|
. = ..()
|
|
if(.)
|
|
set_movement_target(controller, controller.blackboard[target_key])
|
|
|
|
/datum/ai_behavior/setup_shop/finish_action(datum/ai_controller/controller, succeeded, target_key)
|
|
. = ..()
|
|
controller.clear_blackboard_key(target_key)
|