From 9917906834bdd6f2fbf0ebddbaf35e02de0af985 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Wed, 20 Apr 2016 15:40:16 -0700 Subject: [PATCH 1/2] RIGsuit fixes - Replaced /proc/toggle_seals with /proc/unseal and /proc/seal - You can no longer retract anything but the helmet after you seal the suit (what the fuck was the point of having the seal if it does nothing but make it latch onto your back) - Clicking on parts and popping them off shouldn't be a thing anymore (hopefully) - Rewrote some of the nasty toggle_piece code. --- code/modules/clothing/spacesuits/rig/rig.dm | 422 +++++++++++------- .../clothing/spacesuits/rig/rig_verbs.dm | 26 +- 2 files changed, 265 insertions(+), 183 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 066c4893f73..445c196ed46 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -190,112 +190,217 @@ piece.flags &= ~(STOPSPRESSUREDMAGE|AIRTIGHT) update_icon(1) -/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M, var/mob/living/user, var/instant) - - if(sealing) return - - if(!check_power_cost(M, 1)) //costs tiny amount of power to unseal/seal +/obj/item/weapon/rig/proc/seal(mob/living/user) + if(sealing) return 0 - deploy(M, instant) + if(!wearer || !user) + return - var/seal_target = (flags & NODROP) - var/failed_to_seal + var/sealed = (flags & NODROP) + if(sealed) + to_chat(user, "\The [src] is already sealed!") + return 0 - flags |= NODROP // No removing the suit while unsealing. - sealing = 1 + if(!check_power_cost(user, 1)) //need power to seal the suit + return 0 - if(!seal_target && !suit_is_deployed()) - M.visible_message("[M]'s suit flashes an error light.","Your suit flashes an error light. It can't function properly without being fully deployed.") - failed_to_seal = 1 + var/failed_to_seal = FALSE + + if(!suit_is_deployed()) + to_chat(user, "\The [src] cannot seal, as it is not fully deployed!") + return 0 + + flags |= NODROP + sealing = TRUE + + to_chat(user, "\The [src] begins to tighten it's seals.") + wearer.visible_message("\The [wearer]'s suit emits a quiet hum as it begins to tighten it's seals.", + "With a quiet hum, your suit begins to seal.") + + if(seal_delay && !do_after(user, seal_delay, target = wearer)) + to_chat(user, "You must remain still to seal \the [src]!") + failed_to_seal = TRUE if(!failed_to_seal) + deploy(user) - if(!instant) - M.visible_message("[M]'s suit emits a quiet hum as it begins to adjust its seals.","With a quiet hum, the suit begins running checks and adjusting components.") - if(seal_delay && !do_after(user, seal_delay, target = M)) - if(user) - to_chat(user, "You must remain still while the suit is adjusting the components.") - failed_to_seal = 1 + var/list/pieces_data = list(list(wearer.shoes, boots, "boots", boot_type), + list(wearer.gloves, gloves, "gloves", glove_type), + list(wearer.head, helmet, "helmet", helm_type), + list(wearer.wear_suit, chest, "chest", chest_type)) - if(!M) - failed_to_seal = 1 - else - for(var/list/piece_data in list(list(M.shoes,boots,"boots",boot_type),list(M.gloves,gloves,"gloves",glove_type),list(M.head,helmet,"helmet",helm_type),list(M.wear_suit,chest,"chest",chest_type))) + for(var/list/piece_data in pieces_data) + var/obj/item/user_piece = piece_data[1] + var/obj/item/correct_piece = piece_data[2] + var/msg_type = piece_data[3] + var/piece_type = piece_data[4] - var/obj/item/piece = piece_data[1] - var/obj/item/compare_piece = piece_data[2] - var/msg_type = piece_data[3] - var/piece_type = piece_data[4] + if(!user_piece || !piece_type) + continue - if(!piece || !piece_type) - continue + if(user_piece != correct_piece) + to_chat(user, "\The [user_piece] is blocking \the [src] from deploying.") + failed_to_seal = TRUE - if(!istype(M) || !istype(piece) || !istype(compare_piece) || !msg_type) - if(M) - to_chat(M, "You must remain still while the suit is adjusting the components.") - failed_to_seal = 1 - break + if(seal_delay && !do_after(user, seal_delay, needhand = 0, target = wearer)) + to_chat(user, "You must remain still to seal \the [src]!") + failed_to_seal = TRUE - if(!failed_to_seal && M.back == src && piece == compare_piece) + if(failed_to_seal) + break - if(seal_delay && !instant && !do_after(user, seal_delay, needhand = 0, target = M)) - failed_to_seal = 1 + correct_piece.icon_state = "[initial(icon_state)]_sealed" + switch(msg_type) + if("boots") + to_chat(wearer, "\The [correct_piece] seal around your feet.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been sealed.") + wearer.update_inv_shoes() + if("gloves") + to_chat(wearer, "\The [correct_piece] tighten around your fingers and wrists.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been sealed.") + wearer.update_inv_gloves() + if("chest") + to_chat(wearer, "\The [correct_piece] cinches tight again your chest.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been sealed.") + wearer.update_inv_wear_suit() + if("helmet") + to_chat(wearer, "\The [correct_piece] hisses closed.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been sealed.") + wearer.update_inv_head() + if(helmet) + helmet.update_light(wearer) - piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]" - switch(msg_type) - if("boots") - to_chat(M, "\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"].") - M.update_inv_shoes() - if("gloves") - to_chat(M, "\The [piece] [!seal_target ? "tighten around your fingers and wrists" : "become loose around your fingers"].") - M.update_inv_gloves() - if("chest") - to_chat(M, "\The [piece] [!seal_target ? "cinches tight again your chest" : "releases your chest"].") - M.update_inv_wear_suit() - if("helmet") - to_chat(M, "\The [piece] hisses [!seal_target ? "closed" : "open"].") - M.update_inv_head() - if(helmet) - helmet.update_light(wearer) + correct_piece.armor["bio"] = 100 - //sealed pieces become airtight, protecting against diseases - if (!seal_target) - piece.armor["bio"] = 100 - else - piece.armor["bio"] = src.armor["bio"] - - else - failed_to_seal = 1 - - if((M && !(istype(M) && M.back == src) && !istype(M,/mob/living/silicon)) || (!seal_target && !suit_is_deployed())) - failed_to_seal = 1 - - sealing = null + sealing = FALSE if(failed_to_seal) - for(var/obj/item/piece in list(helmet,boots,gloves,chest)) - if(!piece) continue - piece.icon_state = "[initial(icon_state)][!seal_target ? "" : "_sealed"]" - if(seal_target) - flags |= NODROP - else - flags &= ~NODROP + for(var/obj/item/piece in list(helmet, boots, gloves, chest)) + if(!piece) + continue + piece.icon_state = "[initial(icon_state)]" + flags &= ~NODROP if(airtight) update_component_sealed() update_icon(1) return 0 - // Success! - if(seal_target) - flags &= ~NODROP - else - flags |= NODROP - to_chat(M, "Your entire suit [!(flags & NODROP) ? "loosens as the components relax" : "tightens around you as the components lock into place"].") + if(user != wearer) + to_chat(user, "\The [src] has been loosened.") + to_chat(wearer, "Your entire suit tightens around you as the components lock into place.") + if(airtight) + update_component_sealed() + update_icon(1) + +/obj/item/weapon/rig/proc/unseal(mob/living/user) + if(sealing) + return 0 + + if(!wearer || !user) + return + + var/sealed = (flags & NODROP) + if(!sealed) + to_chat(user, "\The [src] is already unsealed!") + return 0 + + sealing = TRUE + + var/failed_to_seal = FALSE + + if(!suit_is_deployed()) + to_chat(user, "\The [src] cannot unseal, as it is not fully deployed!") + failed_to_seal = TRUE + + if(!failed_to_seal) + if(user != wearer) + to_chat(user, "\The [src] begins to loosen it's seals.") + wearer.visible_message("\The [wearer]'s suit emits a quiet hum as it begins to loosen it's seals.", + "With a quiet hum, your suit begins to unseal.") + + if(seal_delay && !do_after(user, seal_delay, target = wearer)) + to_chat(user, "You must remain still to unseal \the [src]!") + failed_to_seal = TRUE + + if(!failed_to_seal) + var/list/pieces_data = list(list(wearer.shoes, boots, "boots", boot_type), + list(wearer.gloves, gloves, "gloves", glove_type), + list(wearer.head, helmet, "helmet", helm_type), + list(wearer.wear_suit, chest, "chest", chest_type)) + + for(var/list/piece_data in pieces_data) + var/obj/item/user_piece = piece_data[1] + var/obj/item/correct_piece = piece_data[2] + var/msg_type = piece_data[3] + var/piece_type = piece_data[4] + + if(!correct_piece || !piece_type) + continue + + if(user_piece != correct_piece) + to_chat(user, "\The [user_piece] is blocking \the [src] from deploying.") + failed_to_seal = TRUE + + if(seal_delay && !do_after(user, seal_delay, needhand = 0, target = wearer)) + to_chat(user, "You must remain still to unseal \the [src]!") + failed_to_seal = TRUE + + if(failed_to_seal) + break + + correct_piece.icon_state = "[initial(icon_state)]" + switch(msg_type) + if("boots") + to_chat(wearer, "\The [correct_piece] relax their grip on your legs.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been unsealed.") + wearer.update_inv_shoes() + if("gloves") + to_chat(wearer, "\The [correct_piece] become loose around your fingers.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been unsealed.") + wearer.update_inv_gloves() + if("chest") + to_chat(wearer, "\The [correct_piece] releases your chest.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been unsealed.") + wearer.update_inv_wear_suit() + if("helmet") + to_chat(wearer, "\The [correct_piece] hisses open.") + if(user != wearer) + to_chat(user, "\The [correct_piece] has been unsealed.") + wearer.update_inv_head() + if(helmet) + helmet.update_light(wearer) + + correct_piece.armor["bio"] = armor["bio"] + + sealing = FALSE + + if(failed_to_seal) + for(var/obj/item/piece in list(helmet, boots, gloves, chest)) + if(!piece) + continue + piece.icon_state = "[initial(icon_state)]_sealed" + if(airtight) + update_component_sealed() + update_icon(1) + return 0 + + if(user != wearer) + to_chat(user, "\The [src] has been unsealed.") + to_chat(wearer, "Your entire suit loosens as the components relax.") + + flags &= ~NODROP + + for(var/obj/item/rig_module/module in installed_modules) + module.deactivate() - if(!(flags & NODROP)) - for(var/obj/item/rig_module/module in installed_modules) - module.deactivate() if(airtight) update_component_sealed() update_icon(1) @@ -310,7 +415,6 @@ piece.flags |= AIRTIGHT /obj/item/weapon/rig/process() - // If we've lost any parts, grab them back. var/mob/living/M for(var/obj/item/piece in list(gloves,boots,helmet,chest)) @@ -367,7 +471,6 @@ cell.use(module.process()*10) /obj/item/weapon/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai) - if(!istype(user)) return 0 @@ -524,7 +627,6 @@ return 1 -//TODO: Fix Topic vulnerabilities for malfunction and AI override. /obj/item/weapon/rig/Topic(href,href_list) if(!check_suit_access(usr)) return 0 @@ -532,11 +634,13 @@ if(href_list["toggle_piece"]) if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying)) return 0 - toggle_piece(href_list["toggle_piece"], wearer, user = usr) + toggle_piece(href_list["toggle_piece"], usr) else if(href_list["toggle_seals"]) - toggle_seals(wearer, usr) + if(flags & NODROP) + unseal(usr) + else + seal(usr) else if(href_list["interact_module"]) - var/module_index = text2num(href_list["interact_module"]) if(module_index > 0 && module_index <= installed_modules.len) @@ -559,7 +663,7 @@ locked = !locked usr.set_machine(src) - src.add_fingerprint(usr) + add_fingerprint(usr) return 0 /obj/item/weapon/rig/proc/notify_ai(var/message) @@ -570,8 +674,11 @@ if(ai && ai.client && !ai.stat) to_chat(ai, "[message]") -/obj/item/weapon/rig/equipped(mob/living/carbon/human/M) +/obj/item/weapon/rig/equipped(mob/living/carbon/human/M, slot) ..() + if(!istype(M) || slot != slot_back) + return //we don't care about picking up/nonhumans + spawn(1) //equipped() is called BEFORE the item is actually set as the slot if(seal_delay > 0 && istype(M) && M.back == src) @@ -588,115 +695,100 @@ wearer.wearing_rig = src update_icon() -/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode, var/force, var/mob/living/user) +/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/user, var/deploy_mode, var/force) + if(!istype(wearer) || wearer.back != src) + if(force) //can only force retracting sorry + for(var/obj/item/uneq_piece in list(helmet, gloves, boots, chest)) + if(uneq_piece) + if(isliving(uneq_piece.loc)) + var/mob/living/L = uneq_piece.loc + L.unEquip(uneq_piece, 1) + uneq_piece.flags &= ~NODROP + uneq_piece.forceMove(src) + return 0 - if(!force) //forces the hardsuit to ignore most checks, as the suit being dropped should retract all pieces regardless of power status - if(sealing || !cell || !cell.charge) //or else you have issues with shit getting stuck - return + if(sealing || !cell || !cell.charge) + return 0 - if(!istype(wearer) || !wearer.back == src) - return - - if(usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) // If the usr isn't wearing the suit it's probably an AI. - return + if(user == wearer && user.incapacitated()) // If the user isn't wearing the suit it's probably an AI. + return 0 var/obj/item/check_slot var/equip_to var/obj/item/use_obj - if(!H) - return - switch(piece) if("helmet") equip_to = slot_head use_obj = helmet - check_slot = H.head + check_slot = wearer.head if("gauntlets") equip_to = slot_gloves use_obj = gloves - check_slot = H.gloves + check_slot = wearer.gloves if("boots") equip_to = slot_shoes use_obj = boots - check_slot = H.shoes + check_slot = wearer.shoes if("chest") equip_to = slot_wear_suit use_obj = chest - check_slot = H.wear_suit + check_slot = wearer.wear_suit if(use_obj) - if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) - - var/mob/living/carbon/human/holder - - if(use_obj) - holder = use_obj.loc - if(istype(holder)) - if(use_obj && check_slot == use_obj) - to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") - use_obj.flags &= ~NODROP - holder.unEquip(use_obj, 1) - use_obj.forceMove(src) - - else if (deploy_mode != ONLY_RETRACT) - if(check_slot) - if(check_slot != use_obj) - to_chat(H, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.") + if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) //user is wearing it, retract it if not forced to deploy + if((flags & NODROP) && equip_to != slot_head && !force) //you can only retract the helmet if the suit isn't unsealed + to_chat(user, "You can't retract \the [use_obj] while the suit is sealed!") return - else - use_obj.forceMove(H) + + if(isliving(use_obj.loc)) + var/mob/living/L = use_obj.loc use_obj.flags &= ~NODROP - if(!H.equip_to_slot_if_possible(use_obj, equip_to, 0, 1)) - use_obj.forceMove(src) - else - to_chat(H, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") - use_obj.flags |= NODROP + L.unEquip(use_obj, 1) + use_obj.forceMove(src) + to_chat(wearer, "Your [use_obj] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") + + else if(deploy_mode != ONLY_RETRACT) + if(check_slot && check_slot != use_obj) + to_chat(wearer, "You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.") + return + use_obj.forceMove(wearer) + use_obj.flags &= ~NODROP + if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, 0, 1)) + use_obj.forceMove(src) + else + to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") + use_obj.flags |= NODROP if(piece == "helmet" && helmet) - helmet.update_light(H) + helmet.update_light(wearer) -/obj/item/weapon/rig/proc/deploy(mob/M,var/sealed, mob/user) +/obj/item/weapon/rig/proc/deploy(mob/user) + if(!wearer || !user) + return 0 - var/mob/living/carbon/human/H = M + if(flags & NODROP) + if(wearer.head && wearer.head != helmet) + to_chat(user, "\The [wearer.head] is blocking \the [src] from deploying!") + return 0 + if(wearer.gloves && wearer.gloves != gloves) + to_chat(user, "\The [wearer.gloves] is preventing \the [src] from deploying!") + return 0 + if(wearer.shoes && wearer.shoes != boots) + to_chat(user, "\The [wearer.shoes] is preventing \the [src] from deploying!") + return 0 + if(wearer.wear_suit && wearer.wear_suit != chest) + to_chat(user, "\The [wearer.wear_suit] is preventing \the [src] from deploying!") + return 0 - if(!H || !istype(H)) return - if(H.back != src) - return - - if(sealed) - if(H.head) - var/obj/item/garbage = H.head - H.unEquip(garbage) - H.head = null - qdel(garbage) - - if(H.gloves) - var/obj/item/garbage = H.gloves - H.unEquip(garbage) - H.gloves = null - qdel(garbage) - - if(H.shoes) - var/obj/item/garbage = H.shoes - H.unEquip(garbage) - H.shoes = null - qdel(garbage) - - if(H.wear_suit) - var/obj/item/garbage = H.wear_suit - H.unEquip(garbage) - H.wear_suit = null - qdel(garbage) - - for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, wearer, ONLY_DEPLOY, user = user) + for(var/piece in list("helmet", "gauntlets", "chest", "boots")) + toggle_piece(piece, user, ONLY_DEPLOY) /obj/item/weapon/rig/dropped(var/mob/user) ..() for(var/piece in list("helmet","gauntlets","chest","boots")) - toggle_piece(piece, wearer, ONLY_RETRACT, 1, user = user) + toggle_piece(piece, user, ONLY_RETRACT, 1) if(wearer) wearer.wearing_rig = null wearer = null diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm index f4769eddf0b..5214ea919f6 100644 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm @@ -1,6 +1,5 @@ // Interface for humans. /obj/item/weapon/rig/verb/hardsuit_interface() - set name = "Open Hardsuit Interface" set desc = "Open the hardsuit system interface." set category = "Hardsuit" @@ -10,7 +9,6 @@ ui_interact(usr) /obj/item/weapon/rig/verb/toggle_vision() - set name = "Toggle Visor" set desc = "Turns your rig visor off or on." set category = "Hardsuit" @@ -44,7 +42,6 @@ visor.deactivate() /obj/item/weapon/rig/proc/toggle_helmet() - set name = "Toggle Helmet" set desc = "Deploys or retracts your helmet." set category = "Hardsuit" @@ -61,10 +58,9 @@ if(M.incapacitated()) return - toggle_piece("helmet",wearer, user = usr) + toggle_piece("helmet", usr) /obj/item/weapon/rig/proc/toggle_chest() - set name = "Toggle Chestpiece" set desc = "Deploys or retracts your chestpiece." set category = "Hardsuit" @@ -77,10 +73,9 @@ if(M.incapacitated()) return - toggle_piece("chest",wearer, user = usr) + toggle_piece("chest", usr) /obj/item/weapon/rig/proc/toggle_gauntlets() - set name = "Toggle Gauntlets" set desc = "Deploys or retracts your gauntlets." set category = "Hardsuit" @@ -97,10 +92,9 @@ if(M.incapacitated()) return - toggle_piece("gauntlets",wearer, user = usr) + toggle_piece("gauntlets", usr) /obj/item/weapon/rig/proc/toggle_boots() - set name = "Toggle Boots" set desc = "Deploys or retracts your boots." set category = "Hardsuit" @@ -117,10 +111,9 @@ if(M.incapacitated()) return - toggle_piece("boots",wearer, user = usr) + toggle_piece("boots", usr) /obj/item/weapon/rig/verb/deploy_suit() - set name = "Deploy Hardsuit" set desc = "Deploys helmet, gloves and boots." set category = "Hardsuit" @@ -143,7 +136,6 @@ deploy(wearer, usr) /obj/item/weapon/rig/verb/toggle_seals_verb() - set name = "Toggle Hardsuit" set desc = "Activates or deactivates your rig." set category = "Hardsuit" @@ -160,10 +152,12 @@ if(M.incapacitated()) return - toggle_seals(wearer) + if(flags & NODROP) + unseal(usr) + else + seal(usr) /obj/item/weapon/rig/verb/switch_vision_mode() - set name = "Switch Vision Mode" set desc = "Switches between available vision modes." set category = "Hardsuit" @@ -197,7 +191,6 @@ visor.engage() /obj/item/weapon/rig/verb/alter_voice() - set name = "Configure Voice Synthesiser" set desc = "Toggles or configures your voice synthesizer." set category = "Hardsuit" @@ -225,7 +218,6 @@ speech.engage() /obj/item/weapon/rig/verb/select_module() - set name = "Select Module" set desc = "Selects a module as your primary system." set category = "Hardsuit" @@ -265,7 +257,6 @@ to_chat(usr, "Primary system is now: [selected_module.interface_name].") /obj/item/weapon/rig/verb/toggle_module() - set name = "Toggle Module" set desc = "Toggle a system module." set category = "Hardsuit" @@ -307,7 +298,6 @@ module.activate() /obj/item/weapon/rig/verb/engage_module() - set name = "Engage Module" set desc = "Engages a system module." set category = "Hardsuit" From 1a53464a1c9a7e5da392a306e00046466c507f2a Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Wed, 20 Apr 2016 16:02:07 -0700 Subject: [PATCH 2/2] Make toggle_piece more robust --- code/modules/clothing/spacesuits/rig/rig.dm | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 445c196ed46..c9a8cbe13cb 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -741,11 +741,18 @@ to_chat(user, "You can't retract \the [use_obj] while the suit is sealed!") return - if(isliving(use_obj.loc)) - var/mob/living/L = use_obj.loc - use_obj.flags &= ~NODROP - L.unEquip(use_obj, 1) - use_obj.forceMove(src) + var/mob/living/to_strip + if(wearer) + to_strip = wearer + else if(isliving(use_obj.loc)) + to_strip = use_obj.loc + + if(to_strip) + to_strip.unEquip(use_obj, 1) + + use_obj.flags &= ~NODROP + use_obj.forceMove(src) + if(wearer) to_chat(wearer, "Your [use_obj] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.") else if(deploy_mode != ONLY_RETRACT) @@ -757,7 +764,8 @@ if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, 0, 1)) use_obj.forceMove(src) else - to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") + if(wearer) + to_chat(wearer, "Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.") use_obj.flags |= NODROP if(piece == "helmet" && helmet)