diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index f9515eab70..43cd7fd69d 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -118,19 +118,32 @@ A.on_removed(user, src) LAZYREMOVE(accessories, A) + + var/any_removable = FALSE + for(var/obj/item/clothing/accessory/accessory in accessories) + if(accessory.removable) + any_removable = TRUE + break + if(!any_removable) + verbs -= /obj/item/clothing/proc/removetie_verb + update_clothing_icon() /obj/item/clothing/proc/removetie_verb() set name = "Remove Accessory" set category = "Object" set src in usr - if(!isliving(usr)) + + remove_accessory(usr, pick_accessory_to_remove(usr, usr)) + +/obj/item/clothing/proc/pick_accessory_to_remove(mob/user, mob/targetmob) + if(!isliving(user)) return - if(usr.stat) + if(user.stat) return if(!LAZYLEN(accessories)) return - var/obj/item/clothing/accessory/A + var/obj/item/clothing/accessory/accessory var/list/removables = list() var/list/choice_to_accessory = list() for(var/obj/item/clothing/accessory/ass in accessories) @@ -141,18 +154,16 @@ choice_to_accessory[capitalized_name] = ass if(LAZYLEN(removables) > 1) - var/use_radials = usr.client.prefs?.no_radials_preference ? FALSE : TRUE - var/choice = use_radials ? show_radial_menu(usr, src, removables, require_near = TRUE) : tgui_input_list(usr, "Select an accessory to remove from [src]", "Remove accessory", removables) - A = choice_to_accessory[choice] + var/use_radials = user.client.prefs?.no_radials_preference ? FALSE : TRUE + var/choice = use_radials ? show_radial_menu(user, targetmob, removables, require_near = FALSE) : tgui_input_list(user, "Select an accessory to remove from [src]", "Remove accessory", removables) + accessory = choice_to_accessory[choice] else - A = choice_to_accessory[removables[1]] - if(!usr.Adjacent(src)) - to_chat(usr, SPAN_WARNING("You're too far away!")) + accessory = choice_to_accessory[removables[1]] + if(!user.Adjacent(src)) + to_chat(user, SPAN_WARNING("You're too far away!")) return - src.remove_accessory(usr,A) - removables -= A - if(!removables.len) - verbs -= /obj/item/clothing/proc/removetie_verb + + return accessory /obj/item/clothing/emp_act(severity) . = ..() diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index fbf6fb5ce4..210e5f266f 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -129,13 +129,12 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( return var/obj/item/clothing/under/uniform = sourcemob.w_uniform - if(!LAZYLEN(uniform.accessories)) - return FALSE - var/obj/item/clothing/accessory/accessory = LAZYACCESS(uniform.accessories, 1) - if(LAZYLEN(uniform.accessories) > 1) - accessory = tgui_input_list(user, "Select an accessory to remove from [uniform]", "Remove accessory", uniform.accessories) - if(!istype(accessory)) + + var/obj/item/clothing/accessory/accessory = uniform.pick_accessory_to_remove(user, sourcemob) + + if(!accessory) return + sourcemob.attack_log += text("\[[time_stamp()]\] Has had their accessory ([accessory]) removed by [key_name(user)]") user.attack_log += text("\[[time_stamp()]\] Attempted to remove [key_name(sourcemob)]'s' accessory ([accessory])") if(istype(accessory, /obj/item/clothing/accessory/holobadge) || istype(accessory, /obj/item/clothing/accessory/medal))