mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 11:05:03 +01:00
ensure some ai behavior procs call parent (#30703)
* ensure some ai behavior procs call parent * fix slippage
This commit is contained in:
committed by
GitHub
parent
846c5de47e
commit
050494fe31
@@ -32,6 +32,7 @@
|
||||
/// `finish_action` proc is given TRUE or FALSE depending on whether or not the
|
||||
/// return value of `perform` is marked as successful or unsuccessful.
|
||||
/datum/ai_behavior/proc/perform(seconds_per_tick, datum/ai_controller/controller, ...)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
controller.behavior_cooldowns[src] = world.time + action_cooldown
|
||||
|
||||
/// Called when the action is finished. This needs the same args as `perform`
|
||||
@@ -42,6 +43,7 @@
|
||||
/// [/datum/ai_behavior/proc/perform] returns [AI_BEHAVIOR_SUCCEEDED] or
|
||||
/// [AI_BEHAVIOR_FAILED].
|
||||
/datum/ai_behavior/proc/finish_action(datum/ai_controller/controller, succeeded, ...)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
LAZYREMOVE(controller.current_behaviors, src)
|
||||
controller.behavior_args -= type
|
||||
// If this was a movement task, reset our movement target if necessary
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key)
|
||||
. = ..()
|
||||
if(isliving(controller.pawn))
|
||||
var/mob/living/pawn = controller.pawn
|
||||
if(world.time < pawn.next_move)
|
||||
@@ -70,6 +71,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/basic_ranged_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key)
|
||||
. = ..()
|
||||
var/mob/living/basic/basic_mob = controller.pawn
|
||||
//targeting strategy will kill the action if not real anymore
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/datum/ai_behavior/befriend_target
|
||||
|
||||
/datum/ai_behavior/befriend_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, befriend_message)
|
||||
. = ..()
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
var/mob/living/living_target = controller.blackboard[target_key]
|
||||
if(QDELETED(living_target))
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
set_movement_target(controller, hunt_target)
|
||||
|
||||
/datum/ai_behavior/emote_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, list/emote_list)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(!length(emote_list) || isnull(target))
|
||||
return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/interact_with_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target) || !pre_interact(controller, target))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/ai_behavior/run_away_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key)
|
||||
. = ..()
|
||||
if(controller.blackboard[BB_BASIC_MOB_STOP_FLEEING])
|
||||
return AI_BEHAVIOR_DELAY
|
||||
var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key]
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
return cooldown_for.blackboard[BB_STATIONARY_COOLDOWN]
|
||||
|
||||
/datum/ai_behavior/stop_and_stare/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/movable/target = controller.blackboard[target_key]
|
||||
if(!ismovable(target) || !isturf(target.loc)) // just to make sure that nothing funky happened between setup and perform
|
||||
return AI_BEHAVIOR_DELAY
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/swirl_around_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
/datum/ai_behavior/targeted_mob_ability
|
||||
|
||||
/datum/ai_behavior/targeted_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key)
|
||||
. = ..()
|
||||
var/datum/action/cooldown/ability = controller.blackboard[ability_key]
|
||||
var/mob/living/target = controller.blackboard[target_key]
|
||||
if(QDELETED(ability) || QDELETED(target))
|
||||
|
||||
@@ -26,6 +26,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(
|
||||
return ..()
|
||||
|
||||
/datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key)
|
||||
. = ..()
|
||||
var/mob/living/living_mob = controller.pawn
|
||||
var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key])
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/datum/ai_behavior/tipped_reaction
|
||||
|
||||
/datum/ai_behavior/tipped_reaction/perform(seconds_per_tick, datum/ai_controller/controller, tipper_key, reacting_key)
|
||||
. = ..()
|
||||
var/mob/living/carbon/tipper = controller.blackboard[tipper_key]
|
||||
|
||||
// visible part of the visible message
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
set_movement_target(controller, target, new_movement_type)
|
||||
|
||||
/datum/ai_behavior/travel_towards/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
|
||||
/datum/ai_behavior/travel_towards/finish_action(datum/ai_controller/controller, succeeded, target_key)
|
||||
@@ -53,4 +54,5 @@
|
||||
set_movement_target(controller, target_atom)
|
||||
|
||||
/datum/ai_behavior/travel_towards_atom/perform(seconds_per_tick, datum/ai_controller/controller, atom/target_atom)
|
||||
. = ..()
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
var/can_attack_dense_objects = TRUE
|
||||
|
||||
/datum/ai_behavior/attack_obstructions/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/mob/living/basic/basic_mob = controller.pawn
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
action_cooldown = 1 SECONDS
|
||||
|
||||
/datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targeting_strategy_key, ignore_faction)
|
||||
. = ..()
|
||||
var/atom/pawn = controller.pawn
|
||||
if(controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST))
|
||||
var/deaggro_chance = controller.blackboard[BB_RANDOM_DEAGGRO_CHANCE] || 10
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
var/look_range = 7
|
||||
|
||||
/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()
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
return FALSE
|
||||
|
||||
/datum/ai_behavior/step_away/perform(seconds_per_tick, datum/ai_controller/controller)
|
||||
. = ..()
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
|
||||
/datum/ai_behavior/step_away/finish_action(datum/ai_controller/controller, succeeded)
|
||||
@@ -81,6 +82,7 @@
|
||||
set_movement_target(controller, current_target)
|
||||
|
||||
/datum/ai_behavior/pursue_to_range/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range)
|
||||
. = ..()
|
||||
var/atom/current_target = controller.blackboard[target_key]
|
||||
if(!QDELETED(current_target) && get_dist(controller.pawn, current_target) > range)
|
||||
return AI_BEHAVIOR_INSTANT
|
||||
@@ -112,4 +114,5 @@
|
||||
set_movement_target(controller, target = chosen_turf)
|
||||
|
||||
/datum/ai_behavior/cover_minimum_distance/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
var/max_nearby_pop = 3
|
||||
|
||||
/datum/ai_behavior/find_partner/perform(seconds_per_tick, datum/ai_controller/controller, target_key, partner_types_key, child_types_key)
|
||||
. = ..()
|
||||
var/maximum_pop = controller.blackboard[BB_MAX_CHILDREN] || max_nearby_pop
|
||||
var/mob/pawn_mob = controller.pawn
|
||||
var/list/similar_species_types = controller.blackboard[partner_types_key] + controller.blackboard[child_types_key]
|
||||
@@ -84,6 +85,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/make_babies/perform(seconds_per_tick, datum/ai_controller/controller, target_key, child_types_key)
|
||||
. = ..()
|
||||
var/mob/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target) || target.stat != CONSCIOUS)
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/ai_behavior/find_mineral_wall
|
||||
|
||||
/datum/ai_behavior/find_mineral_wall/perform(seconds_per_tick, datum/ai_controller/controller, found_wall_key)
|
||||
. = ..()
|
||||
var/mob/living_pawn = controller.pawn
|
||||
|
||||
for(var/turf/simulated/mineral/potential_wall in oview(9, living_pawn))
|
||||
@@ -45,6 +46,7 @@
|
||||
action_cooldown = 15 SECONDS
|
||||
|
||||
/datum/ai_behavior/interact_with_target/mine_wall/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/mob/living/basic/living_pawn = controller.pawn
|
||||
var/turf/simulated/mineral/target = controller.blackboard[target_key]
|
||||
if(!controller.ai_interact(target = target))
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
search_turf_types = TRUE
|
||||
|
||||
/datum/ai_behavior/find_hunt_target/prowl/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range)
|
||||
. = ..()
|
||||
var/mob/living/living_mob = controller.pawn
|
||||
var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob)
|
||||
shuffle_inplace(interesting_objects)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
return !QDELETED(target)
|
||||
|
||||
/datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
var/vision_range = 9
|
||||
|
||||
/datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targeting_strategy_key, hiding_location_key, check_faction)
|
||||
. = ..()
|
||||
var/mob/living/living_mob = controller.pawn
|
||||
var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key])
|
||||
if(!targeting_strategy)
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
/datum/ai_behavior/use_mob_ability
|
||||
|
||||
/datum/ai_behavior/use_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key)
|
||||
. = ..()
|
||||
var/datum/action/using_action = controller.blackboard[ability_key]
|
||||
if(QDELETED(using_action))
|
||||
return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
action_cooldown = 45 SECONDS
|
||||
|
||||
/datum/ai_behavior/find_ventcrawl_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range)
|
||||
. = ..()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(range, controller.pawn))
|
||||
if(!v.welded)
|
||||
|
||||
@@ -156,6 +156,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/interact_with_vent/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
var/search_turf_types = FALSE
|
||||
|
||||
/datum/ai_behavior/find_hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range)
|
||||
. = ..()
|
||||
var/mob/living/living_mob = controller.pawn
|
||||
var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob)
|
||||
for(var/atom/possible_dinner as anything in typecache_filter_list(interesting_objects, types_to_hunt))
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
set_movement_target(controller, hunt_target)
|
||||
|
||||
/datum/ai_behavior/hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key)
|
||||
. = ..()
|
||||
var/mob/living/hunter = controller.pawn
|
||||
var/atom/hunted = controller.blackboard[hunting_target_key]
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
action_cooldown = 2 SECONDS
|
||||
|
||||
/datum/ai_behavior/find_and_set/perform(seconds_per_tick, datum/ai_controller/controller, set_key, locate_path, search_range)
|
||||
. = ..()
|
||||
if(controller.blackboard_key_exists(set_key))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
if(QDELETED(controller.pawn))
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/ai_behavior/perform_emote
|
||||
|
||||
/datum/ai_behavior/perform_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote, speech_sound)
|
||||
. = ..()
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
if(!istype(living_pawn))
|
||||
return AI_BEHAVIOR_INSTANT
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/pet_follow_friend/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
return FALSE
|
||||
|
||||
/datum/ai_behavior/return_home/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
var/static/list/possible_emotes = list("rests its legs...", "yawns and naps...", "curls up and rests...")
|
||||
living_pawn.custom_emote(EMOTE_VISIBLE, pick(possible_emotes))
|
||||
@@ -149,4 +150,5 @@
|
||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||
|
||||
/datum/ai_behavior/return_home/incursion_portal/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
return AI_BEHAVIOR_SUCCEEDED
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/enter_exit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key)
|
||||
. = ..()
|
||||
var/obj/structure/beebox/current_home = controller.blackboard[target_key]
|
||||
var/atom/attack_target = controller.blackboard[attack_key]
|
||||
|
||||
@@ -47,6 +48,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/inhabit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/obj/structure/beebox/potential_home = controller.blackboard[target_key]
|
||||
var/mob/living/bee_pawn = controller.pawn
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
var/scan_range = 3
|
||||
|
||||
/datum/ai_behavior/find_unwebbed_turf/perform(seconds_per_tick, datum/ai_controller/controller)
|
||||
. = ..()
|
||||
var/mob/living/spider = controller.pawn
|
||||
var/atom/current_target = controller.blackboard[target_key]
|
||||
if(current_target && !(locate(/obj/structure/spider/stickyweb) in current_target))
|
||||
@@ -145,6 +146,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/ai_behavior/spin_web/perform(seconds_per_tick, datum/ai_controller/controller, action_key, target_key)
|
||||
. = ..()
|
||||
var/datum/action/innate/web_giant_spider/web_action = controller.blackboard[action_key]
|
||||
if(web_action?.Trigger())
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
@@ -169,6 +171,7 @@
|
||||
var/scan_range = 3
|
||||
|
||||
/datum/ai_behavior/find_unwrapped_target/perform(seconds_per_tick, datum/ai_controller/controller)
|
||||
. = ..()
|
||||
var/mob/living/spider = controller.pawn
|
||||
var/atom/current_target = controller.blackboard[target_key]
|
||||
if(current_target)
|
||||
@@ -225,6 +228,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/ai_behavior/wrap_target/perform(seconds_per_tick, datum/ai_controller/controller, action_key, target_key)
|
||||
. = ..()
|
||||
var/datum/action/innate/wrap_giant_spider/wrap_action = controller.blackboard[action_key]
|
||||
if(wrap_action?.Trigger())
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
@@ -257,6 +261,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/ai_behavior/lay_eggs/perform(seconds_per_tick, datum/ai_controller/controller, action_key)
|
||||
. = ..()
|
||||
var/datum/action/innate/lay_eggs_giant_spider/egg_action = controller.blackboard[action_key]
|
||||
if(egg_action?.Trigger())
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
|
||||
@@ -293,6 +298,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/cling_spider_follow/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/relay_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/mob/living/target = controller.blackboard[target_key]
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
var/scan_range = 3
|
||||
|
||||
/datum/ai_behavior/goliath_find_diggable_turf/perform(seconds_per_tick, datum/ai_controller/controller)
|
||||
. = ..()
|
||||
var/turf/target_turf = controller.blackboard[target_key]
|
||||
if(is_valid_turf(target_turf))
|
||||
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
|
||||
@@ -110,6 +111,7 @@
|
||||
set_movement_target(controller, target_turf)
|
||||
|
||||
/datum/ai_behavior/goliath_dig/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/turf/target_turf = controller.blackboard[target_key]
|
||||
var/mob/living/basic/basic_mob = controller.pawn
|
||||
if(!basic_mob.can_reach(target_turf))
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
action_cooldown = 2 MINUTES
|
||||
|
||||
/datum/ai_behavior/send_sos_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/mob/living/carbon/target = controller.blackboard[target_key]
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
if(QDELETED(target) || is_station_level(target.z))
|
||||
@@ -157,6 +158,7 @@
|
||||
set_movement_target(controller, target)
|
||||
|
||||
/datum/ai_behavior/minebot_mine_turf/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/mob/living/basic/living_pawn = controller.pawn
|
||||
var/turf/target = controller.blackboard[target_key]
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
required_distance = 0
|
||||
|
||||
/datum/ai_behavior/summon_brood/perform(seconds_per_tick, datum/ai_controller/controller)
|
||||
. = ..()
|
||||
var/mob/living/basic/mining/hivelord/summoner = controller.pawn
|
||||
var/mob/living/basic/mining/hivelordbrood/A = new summoner.brood_type(summoner.loc)
|
||||
A.admin_spawned = summoner.admin_spawned
|
||||
|
||||
Reference in New Issue
Block a user