mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
Raptor Rework - Ranching and Companionship (#93564)
This commit is contained in:
@@ -4,21 +4,32 @@
|
||||
|
||||
/datum/ai_behavior/find_mom/perform(seconds_per_tick, datum/ai_controller/controller, mom_key, ignore_mom_key, found_mom)
|
||||
var/mob/living_pawn = controller.pawn
|
||||
var/list/mom_types = controller.blackboard[mom_key]
|
||||
var/list/all_moms = list()
|
||||
var/list/mom_types = controller.blackboard[mom_key]
|
||||
var/list/ignore_types = controller.blackboard[ignore_mom_key]
|
||||
|
||||
if(!length(mom_types))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
for(var/mob/mother in oview(look_range, living_pawn))
|
||||
if(!is_type_in_list(mother, mom_types))
|
||||
continue
|
||||
if(is_type_in_list(mother, ignore_types)) //so the not permanent baby and the permanent baby subtype dont followed each other
|
||||
continue
|
||||
all_moms += mother
|
||||
if (is_possible_mom(mother, mom_types, ignore_types))
|
||||
all_moms += mother
|
||||
|
||||
if(length(all_moms))
|
||||
controller.set_blackboard_key(found_mom, pick(all_moms))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
/datum/ai_behavior/find_mom/proc/is_possible_mom(mob/mother, list/mom_types, list/ignore_types)
|
||||
if(!is_type_in_list(mother, mom_types))
|
||||
return FALSE
|
||||
if(is_type_in_list(mother, ignore_types)) // so the not permanent baby and the permanent baby subtype dont followed each other
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/ai_behavior/find_mom/raptor/is_possible_mom(mob/mother, list/mom_types, list/ignore_types)
|
||||
. = ..()
|
||||
if (!. || !istype(mother, /mob/living/basic/raptor))
|
||||
return FALSE
|
||||
var/mob/living/basic/raptor/raptor = mother
|
||||
return raptor.growth_stage == RAPTOR_ADULT
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/mob/baby = controller.pawn
|
||||
|
||||
if(QDELETED(target))
|
||||
controller.queue_behavior(/datum/ai_behavior/find_mom, BB_FIND_MOM_TYPES, BB_IGNORE_MOM_TYPES, BB_FOUND_MOM)
|
||||
find_mom(controller)
|
||||
return
|
||||
|
||||
if(get_dist(target, baby) > minimum_distance)
|
||||
@@ -23,3 +23,9 @@
|
||||
controller.queue_behavior(/datum/ai_behavior/perform_emote, "dances around their parent!")
|
||||
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
|
||||
/datum/ai_planning_subtree/look_for_adult/proc/find_mom(datum/ai_controller/controller)
|
||||
controller.queue_behavior(/datum/ai_behavior/find_mom, BB_FIND_MOM_TYPES, BB_IGNORE_MOM_TYPES, BB_FOUND_MOM)
|
||||
|
||||
/datum/ai_planning_subtree/look_for_adult/raptor/find_mom(datum/ai_controller/controller)
|
||||
controller.queue_behavior(/datum/ai_behavior/find_mom/raptor, BB_FIND_MOM_TYPES, BB_FOUND_MOM)
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
/datum/ai_planning_subtree/simple_find_target
|
||||
/// Variable to store target in
|
||||
var/target_key = BB_BASIC_MOB_CURRENT_TARGET
|
||||
/// Targeting strategy key to use
|
||||
var/strategy_key = BB_TARGETING_STRATEGY
|
||||
|
||||
/datum/ai_planning_subtree/simple_find_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
|
||||
. = ..()
|
||||
controller.queue_behavior(/datum/ai_behavior/find_potential_targets, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION)
|
||||
controller.queue_behavior(/datum/ai_behavior/find_potential_targets, target_key, strategy_key, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION)
|
||||
|
||||
// Prevents finding a target if a human is nearby
|
||||
/datum/ai_planning_subtree/simple_find_target/not_while_observed
|
||||
@@ -21,4 +23,7 @@
|
||||
/datum/ai_planning_subtree/simple_find_target/increased_range
|
||||
|
||||
/datum/ai_planning_subtree/simple_find_target/increased_range/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
|
||||
controller.queue_behavior(/datum/ai_behavior/find_potential_targets/bigger_range, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION)
|
||||
controller.queue_behavior(/datum/ai_behavior/find_potential_targets/bigger_range, target_key, strategy_key, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION)
|
||||
|
||||
/datum/ai_planning_subtree/simple_find_target/hunt
|
||||
strategy_key = BB_HUNT_TARGETING_STRATEGY
|
||||
|
||||
@@ -154,3 +154,6 @@
|
||||
if(!istype(target) || target.has_status_effect(/datum/status_effect/gutted))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/targeting_strategy/basic/exact_match
|
||||
check_factions_exactly = TRUE
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(!(target.resistance_flags & INDESTRUCTIBLE))
|
||||
return TRUE
|
||||
|
||||
if(target in living_mob.ai_controller.blackboard[BB_FRIENDS_LIST])
|
||||
if(isliving(target) && (target in living_mob.ai_controller.blackboard[BB_FRIENDS_LIST]))
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
Reference in New Issue
Block a user