mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-24 20:47:43 +01:00
* MouseDrop()'s over_object may be null if dropping over a stat panel or over other empty space. Fix runtimes from assuming it is not null. * Fixes Runtime in clothing_accessories.dm,54: Cannot read null.name * Fixes Runtime in evidencebag.dm,21: Cannot read null.loc
107 lines
3.0 KiB
Plaintext
107 lines
3.0 KiB
Plaintext
/obj/item/clothing/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
|
if(valid_accessory_slots && istype(A) && (A.slot in valid_accessory_slots))
|
|
.=1
|
|
else
|
|
return 0
|
|
if(accessories.len && restricted_accessory_slots && (A.slot in restricted_accessory_slots))
|
|
for(var/obj/item/clothing/accessory/AC in accessories)
|
|
if (AC.slot == A.slot)
|
|
return 0
|
|
|
|
/obj/item/clothing/attackby(var/obj/item/I, var/mob/user)
|
|
if(istype(I, /obj/item/clothing/accessory))
|
|
|
|
if(!valid_accessory_slots || !valid_accessory_slots.len)
|
|
usr << "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>"
|
|
return
|
|
|
|
var/obj/item/clothing/accessory/A = I
|
|
if(can_attach_accessory(A))
|
|
user.drop_item()
|
|
attach_accessory(user, A)
|
|
return
|
|
else
|
|
user << "<span class='warning'>You cannot attach more accessories of this type to [src].</span>"
|
|
return
|
|
|
|
if(accessories.len)
|
|
for(var/obj/item/clothing/accessory/A in accessories)
|
|
A.attackby(I, user)
|
|
return
|
|
|
|
..()
|
|
|
|
/obj/item/clothing/attack_hand(var/mob/user)
|
|
//only forward to the attached accessory if the clothing is equipped (not in a storage)
|
|
if(accessories.len && src.loc == user)
|
|
for(var/obj/item/clothing/accessory/A in accessories)
|
|
A.attack_hand(user)
|
|
return
|
|
return ..()
|
|
|
|
/obj/item/clothing/MouseDrop(var/obj/over_object)
|
|
if (over_object && (ishuman(usr) || issmall(usr)))
|
|
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
|
|
if (!(src.loc == usr))
|
|
return
|
|
|
|
if (( usr.restrained() ) || ( usr.stat ))
|
|
return
|
|
|
|
if (!usr.unEquip(src))
|
|
return
|
|
|
|
switch(over_object.name)
|
|
if("r_hand")
|
|
usr.put_in_r_hand(src)
|
|
if("l_hand")
|
|
usr.put_in_l_hand(src)
|
|
src.add_fingerprint(usr)
|
|
|
|
/obj/item/clothing/examine(var/mob/user)
|
|
..(user)
|
|
if(accessories.len)
|
|
for(var/obj/item/clothing/accessory/A in accessories)
|
|
user << "\A [A] is attached to it."
|
|
|
|
/**
|
|
* Attach accessory A to src
|
|
*
|
|
* user is the user doing the attaching. Can be null, such as when attaching
|
|
* items on spawn
|
|
*/
|
|
/obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A)
|
|
accessories += A
|
|
A.on_attached(src, user)
|
|
src.verbs |= /obj/item/clothing/proc/removetie_verb
|
|
update_clothing_icon()
|
|
|
|
/obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
|
if(!(A in accessories))
|
|
return
|
|
|
|
A.on_removed(user)
|
|
accessories -= A
|
|
update_clothing_icon()
|
|
|
|
/obj/item/clothing/proc/removetie_verb()
|
|
set name = "Remove Accessory"
|
|
set category = "Object"
|
|
set src in usr
|
|
if(!istype(usr, /mob/living)) return
|
|
if(usr.stat) return
|
|
if(!accessories.len) return
|
|
var/obj/item/clothing/accessory/A
|
|
if(accessories.len > 1)
|
|
A = input("Select an accessory to remove from [src]") as null|anything in accessories
|
|
else
|
|
A = accessories[1]
|
|
src.remove_accessory(usr,A)
|
|
if(!accessories.len)
|
|
src.verbs -= /obj/item/clothing/proc/removetie_verb
|
|
|
|
/obj/item/clothing/emp_act(severity)
|
|
if(accessories.len)
|
|
for(var/obj/item/clothing/accessory/A in accessories)
|
|
A.emp_act(severity)
|
|
..() |