From 2b0638def875da79a7fef71610d350d8b854af42 Mon Sep 17 00:00:00 2001 From: Alan Date: Wed, 12 Aug 2026 23:48:38 +0000 Subject: [PATCH] Fix storing several recently-migrated items. (#32383) * Fix storing light replacers, handheld defibs. * Apply suggestion from CRUNCH review. * Fix similar mishap in body analyzer, flash, gas analyzer, laser pointer, garrote, evidence bag, and organ extractor. --- .../objects/items/devices/bodyanalyzer.dm | 3 ++ code/game/objects/items/devices/flash.dm | 3 ++ .../game/objects/items/devices/gasanalyzer.dm | 6 ++++ .../objects/items/devices/handheld_defib.dm | 2 +- .../objects/items/devices/laserpointer.dm | 6 ++++ .../objects/items/devices/lightreplacer.dm | 34 ++++++++++++------- code/game/objects/items/weapons/garrote.dm | 4 +-- code/modules/detective_work/evidence.dm | 5 +++ .../modules/surgery/organs/organ_extractor.dm | 4 +++ 9 files changed, 52 insertions(+), 15 deletions(-) diff --git a/code/game/objects/items/devices/bodyanalyzer.dm b/code/game/objects/items/devices/bodyanalyzer.dm index 80cbe09fbcf..023f19ea542 100644 --- a/code/game/objects/items/devices/bodyanalyzer.dm +++ b/code/game/objects/items/devices/bodyanalyzer.dm @@ -71,6 +71,9 @@ if(user.incapacitated() || !user.Adjacent(target)) return ITEM_INTERACT_COMPLETE + if(!ismob(target)) + return NONE + add_fingerprint(user) if(!ready) to_chat(user, SPAN_WARNING("The scanner beeps angrily at you! It's currently recharging - [round((time_to_use - world.time) * 0.1)] seconds remaining.")) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 019cc9649c3..f60017c5199 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -138,6 +138,9 @@ target.AdjustConfused(power) /obj/item/flash/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!istype(target, /obj/machinery/camera) && !iscarbon(target) && !issilicon(target)) + return NONE + if(!try_use_flash(user)) return NONE diff --git a/code/game/objects/items/devices/gasanalyzer.dm b/code/game/objects/items/devices/gasanalyzer.dm index 2f9360dd4ca..d44309d4228 100644 --- a/code/game/objects/items/devices/gasanalyzer.dm +++ b/code/game/objects/items/devices/gasanalyzer.dm @@ -106,6 +106,12 @@ /obj/item/analyzer/interact_with_atom(atom/target, mob/living/user, list/modifiers) ..() + if(!isturf(target.loc)) + return NONE + + if(isstorage(target)) + return NONE + if(target.return_analyzable_air()) atmos_scan(user, target, detailed = show_detailed) else diff --git a/code/game/objects/items/devices/handheld_defib.dm b/code/game/objects/items/devices/handheld_defib.dm index 1c6a26ad936..099da19e1c7 100644 --- a/code/game/objects/items/devices/handheld_defib.dm +++ b/code/game/objects/items/devices/handheld_defib.dm @@ -36,7 +36,7 @@ /obj/item/handheld_defibrillator/interact_with_atom(atom/target, mob/living/user, list/modifiers) if(!ishuman(target)) - return ITEM_INTERACT_COMPLETE + return ..() if(cooldown) to_chat(user, SPAN_WARNING("[src] is still charging!")) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 90ebb1b9de1..047d721bd9b 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -48,6 +48,12 @@ diode = new /obj/item/stock_parts/micro_laser/ultra(src) /obj/item/laser_pointer/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!isturf(target.loc)) + return NONE + + if(isstorage(target)) + return NONE + laser_act(target, user, modifiers) add_fingerprint(user) return ITEM_INTERACT_COMPLETE diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index eae4168ae91..ee0d4c71c8c 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -65,9 +65,17 @@ . += status_string() /obj/item/lightreplacer/item_interaction(mob/user, obj/item/used, list/modifiers) + if(fill_replacer(user, used)) + return ITEM_INTERACT_COMPLETE + return ..() + +/obj/item/lightreplacer/proc/fill_replacer(mob/user, obj/item/used) + if(!istype(used)) + return FALSE + if(uses >= max_uses) to_chat(user, SPAN_WARNING("[src] is full!")) - return ITEM_INTERACT_COMPLETE + return TRUE if(istype(used, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/stack = used @@ -77,23 +85,23 @@ to_chat(user, SPAN_NOTICE("You insert some glass into [src]. You have [uses] light\s remaining.")) else to_chat(user, SPAN_WARNING("You need one sheet of glass to replace lights!")) - return ITEM_INTERACT_COMPLETE + return TRUE if(istype(used, /obj/item/shard)) if(!user.drop_item_to_ground(used)) to_chat(user, SPAN_WARNING("[used] is stuck to your hand!")) - return ITEM_INTERACT_COMPLETE + return TRUE AddUses(increment) to_chat(user, SPAN_NOTICE("You insert a shard of glass into [src]. You have [uses] light\s remaining.")) qdel(used) - return ITEM_INTERACT_COMPLETE + return TRUE if(istype(used, /obj/item/light)) var/obj/item/light/bulb = used if(!user.drop_item_to_ground(bulb)) to_chat(user, SPAN_WARNING("[bulb] is stuck to your hand!")) - return ITEM_INTERACT_COMPLETE + return TRUE if(bulb.status == LIGHT_OK) AddUses(1) @@ -126,16 +134,15 @@ qdel(bulb) if(!found_lightbulbs) - to_chat(user, SPAN_WARNING("[container] contains no bulbs!")) - return ITEM_INTERACT_COMPLETE + return FALSE if(!replaced_something && uses == max_uses) to_chat(user, SPAN_WARNING("[src] is full!")) - return ITEM_INTERACT_COMPLETE + return TRUE to_chat(user, SPAN_NOTICE("You fill [src] with lights from [container]. " + status_string() + "")) - return ITEM_INTERACT_COMPLETE - return ..() + return TRUE + return FALSE /obj/item/lightreplacer/emag_act(user as mob) if(!emagged) @@ -220,8 +227,11 @@ return ITEM_INTERACT_COMPLETE if(isitem(target)) - item_interaction(user, target) - return ITEM_INTERACT_COMPLETE + if(isstorage(target) && uses >= max_uses) + return ..() + if(fill_replacer(user, target)) + return ITEM_INTERACT_COMPLETE + return ..() var/turf/replace_turf = get_turf(target) if(!istype(replace_turf)) diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 836738ae009..704aa762ca1 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -55,8 +55,8 @@ STOP_PROCESSING(SSobj, src) /obj/item/garrote/interact_with_atom(mob/living/carbon/human/target, mob/living/carbon/human/user, list/modifiers) - if(..()) - return ITEM_INTERACT_COMPLETE + if(!ismob(target)) + return NONE if(garrote_time > world.time) // Cooldown. return ITEM_INTERACT_COMPLETE diff --git a/code/modules/detective_work/evidence.dm b/code/modules/detective_work/evidence.dm index 1d27723b847..29f87ff24ad 100644 --- a/code/modules/detective_work/evidence.dm +++ b/code/modules/detective_work/evidence.dm @@ -12,6 +12,11 @@ if(loc == target) return ITEM_INTERACT_COMPLETE + if(isstorage(target)) + var/obj/item/storage/target_storage = target + if(istype(target_storage, /obj/item/storage/box) || target_storage.w_class > WEIGHT_CLASS_NORMAL) + return NONE + evidencebag_equip(target, user) return ITEM_INTERACT_COMPLETE diff --git a/code/modules/surgery/organs/organ_extractor.dm b/code/modules/surgery/organs/organ_extractor.dm index b7727370000..bd1bebd1f80 100644 --- a/code/modules/surgery/organs/organ_extractor.dm +++ b/code/modules/surgery/organs/organ_extractor.dm @@ -52,6 +52,10 @@ if(in_use) to_chat(user, SPAN_WARNING("[src] is already busy!")) return ITEM_INTERACT_COMPLETE + + if(!ismob(target)) + return NONE + if(!iscarbon(target)) to_chat(user, SPAN_WARNING("ERROR: [target] has no organs to harvest!")) return ITEM_INTERACT_COMPLETE