[MIRROR] Corgis will no longer pick up non-items (like entire cars) (#6306)

* Corgis will no longer pick up non-items (like entire cars) (#59246)

I made one hell of a whoopsie with dog AI, letting dogs fetch and pick up and carry around things that are absolutely not meant to be carryable, basically anything that isn't anchored. This restricts their carrying ability to items.

Fixes: #59202

* Corgis will no longer pick up non-items (like entire cars)

Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
This commit is contained in:
SkyratBot
2021-06-14 08:42:29 +02:00
committed by GitHub
parent 3a75764ae8
commit 8f3f5cd70b
2 changed files with 13 additions and 6 deletions

View File

@@ -35,7 +35,7 @@
/datum/ai_behavior/simple_equip/perform(delta_time, datum/ai_controller/controller) /datum/ai_behavior/simple_equip/perform(delta_time, datum/ai_controller/controller)
. = ..() . = ..()
var/obj/item/fetch_target = controller.blackboard[BB_FETCH_TARGET] var/obj/item/fetch_target = controller.blackboard[BB_FETCH_TARGET]
if(!isturf(fetch_target?.loc)) // someone picked it up or something happened to it if(!isturf(fetch_target?.loc) || !isitem(fetch_target)) // someone picked it up, something happened to it, or it wasn't an item anyway
finish_action(controller, FALSE) finish_action(controller, FALSE)
return return

View File

@@ -75,8 +75,11 @@
current_movement_target = interact_target current_movement_target = interact_target
if(IS_EDIBLE(interact_target)) if(IS_EDIBLE(interact_target))
current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/eat_snack) current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/eat_snack)
else else if(isitem(interact_target))
current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/simple_equip) current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/simple_equip)
else
blackboard[BB_FETCH_TARGET] = null
blackboard[BB_FETCH_DELIVER_TO] = null
return return
// if we're carrying something and we have a destination to deliver it, do that // if we're carrying something and we have a destination to deliver it, do that
@@ -302,21 +305,25 @@
/datum/ai_controller/dog/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable) /datum/ai_controller/dog/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable)
SIGNAL_HANDLER SIGNAL_HANDLER
var/mob/living/living_pawn = pawn
if(IS_DEAD_OR_INCAP(living_pawn))
return
if(!COOLDOWN_FINISHED(src, command_cooldown)) if(!COOLDOWN_FINISHED(src, command_cooldown))
return return
if(pointed_movable == pawn || blackboard[BB_FETCH_TARGET] || !istype(pointed_movable) || blackboard[BB_DOG_ORDER_MODE] == DOG_COMMAND_NONE) // busy or no command if(pointed_movable == pawn || blackboard[BB_FETCH_TARGET] || !istype(pointed_movable) || blackboard[BB_DOG_ORDER_MODE] == DOG_COMMAND_NONE) // busy or no command
return return
if(!can_see(pawn, pointing_friend, length=AI_DOG_VISION_RANGE) || !can_see(pawn, pointed_movable, length=AI_DOG_VISION_RANGE)) if(!can_see(pawn, pointing_friend, length=AI_DOG_VISION_RANGE) || !can_see(pawn, pointed_movable, length=AI_DOG_VISION_RANGE))
return return
var/mob/living/living_pawn = pawn
if(IS_DEAD_OR_INCAP(living_pawn))
return
COOLDOWN_START(src, command_cooldown, AI_DOG_COMMAND_COOLDOWN) COOLDOWN_START(src, command_cooldown, AI_DOG_COMMAND_COOLDOWN)
switch(blackboard[BB_DOG_ORDER_MODE]) switch(blackboard[BB_DOG_ORDER_MODE])
if(DOG_COMMAND_FETCH) if(DOG_COMMAND_FETCH)
if(ismob(pointed_movable) || pointed_movable.anchored) if(!isitem(pointed_movable) || pointed_movable.anchored)
return
var/obj/item/pointed_item = pointed_movable
if(pointed_item.obj_flags & ABSTRACT)
return return
pawn.visible_message("<span class='notice'>[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and barks excitedly!</span>") pawn.visible_message("<span class='notice'>[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and barks excitedly!</span>")
current_movement_target = pointed_movable current_movement_target = pointed_movable