From 79ca96d8bc3bafb330fc6a20cf0b153369c1ee87 Mon Sep 17 00:00:00 2001 From: Fikou <23585223+Fikou@users.noreply.github.com> Date: Fri, 2 Sep 2022 14:52:21 +0200 Subject: [PATCH] fixes a few small modsuit bugs (#69618) the admin suit now has the advanced jetpack instead of the normal one fixes chestplate unequipping no longer retracting the suit storage item fixes the surgical processor causing runtimes with medborgs after the modsuit pr fixes #68166 fixes #68574 --- code/game/machinery/gulag_teleporter.dm | 1 - code/modules/mod/mod_control.dm | 38 ++++++++++++--------- code/modules/mod/mod_types.dm | 2 +- code/modules/mod/modules/module_kinesis.dm | 2 ++ code/modules/mod/modules/modules_general.dm | 4 ++- code/modules/surgery/tools.dm | 4 +++ 6 files changed, 31 insertions(+), 20 deletions(-) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 1be6593b689..b1b6d427263 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -140,7 +140,6 @@ The console is located at computer/gulag_teleporter.dm continue if(linked_reclaimer) linked_reclaimer.stored_items[mob_occupant] += W - linked_reclaimer.contents += W W.forceMove(linked_reclaimer) else W.forceMove(src) diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 0341247c241..a1ac24fe87c 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -247,8 +247,9 @@ /obj/item/mod/control/dropped(mob/user) . = ..() - if(wearer) - unset_wearer() + if(!wearer) + return + clean_up() /obj/item/mod/control/item_action_slot_check(slot) if(slot == slot_flags) @@ -258,20 +259,7 @@ . = ..() if(!wearer || old_loc != wearer || loc == wearer) return - if(active || activating) - for(var/obj/item/mod/module/module as anything in modules) - if(!module.active) - continue - module.on_deactivation(display_message = FALSE) - for(var/obj/item/part as anything in mod_parts) - seal_part(part, seal = FALSE) - for(var/obj/item/part as anything in mod_parts) - retract(null, part) - if(active) - finish_activation(on = FALSE) - unset_wearer() - var/mob/old_wearer = old_loc - old_wearer.temporarilyRemoveItemFromInventory(src) + clean_up() /obj/item/mod/control/allow_attack_hand_drop(mob/user) if(user != wearer) @@ -471,6 +459,22 @@ SEND_SIGNAL(src, COMSIG_MOD_WEARER_UNSET, wearer) wearer = null +/obj/item/mod/control/proc/clean_up() + if(active || activating) + for(var/obj/item/mod/module/module as anything in modules) + if(!module.active) + continue + module.on_deactivation(display_message = FALSE) + for(var/obj/item/part as anything in mod_parts) + seal_part(part, seal = FALSE) + for(var/obj/item/part as anything in mod_parts) + retract(null, part) + if(active) + finish_activation(on = FALSE) + var/mob/old_wearer = wearer + unset_wearer() + old_wearer.temporarilyRemoveItemFromInventory(src) + /obj/item/mod/control/proc/on_species_gain(datum/source, datum/species/new_species, datum/species/old_species) SIGNAL_HANDLER @@ -688,7 +692,7 @@ return atom_destruction(damage_flag) -/obj/item/mod/control/proc/on_part_deletion(obj/item/part) +/obj/item/mod/control/proc/on_part_deletion(obj/item/part) //the part doesnt count as being qdeleted, so our destroying does an infinite loop, fix later SIGNAL_HANDLER if(QDELETED(src)) diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 1f149cf7024..246e79b2083 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -373,7 +373,7 @@ /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/quick_carry/advanced, /obj/item/mod/module/magboot/advanced, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/anomaly_locked/kinesis/plus, ) diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index 75f734d9f36..f2c321a2633 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -138,6 +138,8 @@ COOLDOWN_START(src, hit_cooldown, hit_cooldown_time) /obj/item/mod/module/anomaly_locked/kinesis/proc/can_grab(atom/target) + if(mod.wearer == target) + return FALSE if(!ismovable(target)) return FALSE if(iseffect(target)) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 40519fec0eb..6b4edd97e91 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -25,6 +25,7 @@ var/datum/storage/modstorage = mod.create_storage(max_specific_storage = max_w_class, max_total_storage = max_combined_w_class, max_slots = max_items) modstorage.set_real_location(src) atom_storage.locked = FALSE + RegisterSignal(mod.chestplate, COMSIG_ITEM_PRE_UNEQUIP, .proc/on_chestplate_unequip) /obj/item/mod/module/storage/on_uninstall(deleting = FALSE) var/datum/storage/modstorage = mod.atom_storage @@ -38,7 +39,8 @@ if(QDELETED(source) || !mod.wearer || newloc == mod.wearer || !mod.wearer.s_store) return to_chat(mod.wearer, span_notice("[src] tries to store [mod.wearer.s_store] inside itself.")) - atom_storage?.attempt_insert(mod.wearer.s_store, mod.wearer, override = TRUE) + if(atom_storage?.attempt_insert(mod.wearer.s_store, mod.wearer, override = TRUE)) + mod.wearer.temporarilyRemoveItemFromInventory(mod.wearer.s_store) /obj/item/mod/module/storage/large_capacity name = "MOD expanded storage module" diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 84a12e3f5ac..2541fc3e0b9 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -263,6 +263,10 @@ . = ..() UnregisterSignal(user, COMSIG_SURGERY_STARTING) +/obj/item/surgical_processor/cyborg_unequip(mob/user) + . = ..() + UnregisterSignal(user, COMSIG_SURGERY_STARTING) + /obj/item/surgical_processor/afterattack(atom/design_holder, mob/user, proximity) if(!proximity) return ..()