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))