[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)
. = ..()
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)
return

View File

@@ -75,8 +75,11 @@
current_movement_target = interact_target
if(IS_EDIBLE(interact_target))
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)
else
blackboard[BB_FETCH_TARGET] = null
blackboard[BB_FETCH_DELIVER_TO] = null
return
// 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)
SIGNAL_HANDLER
var/mob/living/living_pawn = pawn
if(IS_DEAD_OR_INCAP(living_pawn))
return
if(!COOLDOWN_FINISHED(src, command_cooldown))
return
if(pointed_movable == pawn || blackboard[BB_FETCH_TARGET] || !istype(pointed_movable) || blackboard[BB_DOG_ORDER_MODE] == DOG_COMMAND_NONE) // busy or no command
return
if(!can_see(pawn, pointing_friend, length=AI_DOG_VISION_RANGE) || !can_see(pawn, pointed_movable, length=AI_DOG_VISION_RANGE))
return
var/mob/living/living_pawn = pawn
if(IS_DEAD_OR_INCAP(living_pawn))
return
COOLDOWN_START(src, command_cooldown, AI_DOG_COMMAND_COOLDOWN)
switch(blackboard[BB_DOG_ORDER_MODE])
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
pawn.visible_message("<span class='notice'>[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and barks excitedly!</span>")
current_movement_target = pointed_movable