From a088f5d067b4087f36cb52ea6b98e6988ae8a973 Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Wed, 4 Dec 2024 02:12:43 +0200 Subject: [PATCH] [no gbp] fixes monkey disarming runtimes (#88332) ## About The Pull Request fixes some runtimes related to trying to remove things from a blackboard key list that arent tracked to begin with ## Why It's Good For The Game fixes monkey disarming runtimes ## Changelog :cl: /:cl: --- code/datums/ai/monkey/monkey_behaviors.dm | 20 ++++++++++++-------- code/datums/ai/monkey/monkey_controller.dm | 5 ++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index 22946022840..ef49de98823 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -4,11 +4,18 @@ /datum/ai_behavior/monkey_equip behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH -/datum/ai_behavior/monkey_equip/finish_action(datum/ai_controller/controller, success) +/datum/ai_behavior/monkey_equip/setup(datum/ai_controller/controller, target_key) + . = ..() + var/obj/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/monkey_equip/finish_action(datum/ai_controller/controller, success, target_key) . = ..() if(!success) //Don't try again on this item if we failed - controller.set_blackboard_key_assoc(BB_MONKEY_BLACKLISTITEMS, controller.blackboard[BB_MONKEY_PICKUPTARGET], TRUE) + controller.set_blackboard_key_assoc(BB_MONKEY_BLACKLISTITEMS, controller.blackboard[target_key], TRUE) controller.clear_blackboard_key(BB_MONKEY_PICKUPTARGET) @@ -50,9 +57,8 @@ return FALSE /datum/ai_behavior/monkey_equip/ground - required_distance = 0 -/datum/ai_behavior/monkey_equip/ground/perform(seconds_per_tick, datum/ai_controller/controller) +/datum/ai_behavior/monkey_equip/ground/perform(seconds_per_tick, datum/ai_controller/controller, target_key) . = ..() if(equip_item(controller)) return . | AI_BEHAVIOR_SUCCEEDED @@ -60,7 +66,7 @@ /datum/ai_behavior/monkey_equip/pickpocket -/datum/ai_behavior/monkey_equip/pickpocket/perform(seconds_per_tick, datum/ai_controller/controller) +/datum/ai_behavior/monkey_equip/pickpocket/perform(seconds_per_tick, datum/ai_controller/controller, target_key) . = ..() if(controller.blackboard[BB_MONKEY_PICKPOCKETING]) //We are pickpocketing, don't do ANYTHING!!!! return @@ -75,8 +81,6 @@ finish_action(controller, FALSE) return - - victim.visible_message(span_warning("[living_pawn] starts trying to take [target] from [victim]!"), span_danger("[living_pawn] tries to take [target]!")) controller.set_blackboard_key(BB_MONKEY_PICKPOCKETING, TRUE) @@ -196,7 +200,7 @@ if(isnull(potential_weapon)) controller.ai_interact(target = target, modifiers = disarm ? list(RIGHT_CLICK = TRUE) : null, combat_mode = TRUE) - if(!isnull(holding_weapon)) + if(disarm && !isnull(holding_weapon) && controller.blackboard[BB_MONKEY_BLACKLISTITEMS][holding_weapon]) controller.remove_thing_from_blackboard_key(BB_MONKEY_BLACKLISTITEMS, holding_weapon) //lets try to pickpocket it again! return TRUE diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 8b753b9c1cc..4c778f66122 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -171,11 +171,10 @@ have ways of interacting with a specific mob and control it. return FALSE set_blackboard_key(BB_MONKEY_PICKUPTARGET, weapon) - set_movement_target(type, weapon) if(pickpocket) - queue_behavior(/datum/ai_behavior/monkey_equip/pickpocket) + queue_behavior(/datum/ai_behavior/monkey_equip/pickpocket, BB_MONKEY_PICKUPTARGET) else - queue_behavior(/datum/ai_behavior/monkey_equip/ground) + queue_behavior(/datum/ai_behavior/monkey_equip/ground, BB_MONKEY_PICKUPTARGET) return TRUE ///Reactive events to being hit