From ba44d0f2f0ed49eaad17ca83403119af5fa18a35 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 6 Sep 2020 05:12:22 +0200 Subject: [PATCH] [MIRROR] Fixes light eaters not consuming gunlights / helmet lights (#644) * Fixes light eaters not consuming gunlights / helmet lights (#53182) * Fixes light eaters not consuming gunlights / helmet lights Co-authored-by: ShizCalev --- .../human/species_types/shadowpeople.dm | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 32eed98edad..da5b764730a 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -190,30 +190,27 @@ if(isliving(AM)) var/mob/living/L = AM - if(isethereal(AM)) + if(isethereal(L)) AM.emp_act(EMP_LIGHT) - else if(iscyborg(AM)) - var/mob/living/silicon/robot/borg = AM + else if(iscyborg(L)) + var/mob/living/silicon/robot/borg = L if(borg.lamp_intensity) borg.update_headlamp(TRUE, INFINITY) to_chat(borg, "Your headlamp is fried! You'll need a human to help replace it.") - else if(ishuman(AM)) - var/mob/living/carbon/human/H = AM + else if(ishuman(L)) + var/mob/living/carbon/human/H = L for(var/obj/item/O in H.get_all_gear()) //less expensive than getallcontents - if(O.light_range && O.light_power) - disintegrate(O, AM) + light_item_check(O, H) else - for(var/obj/item/O in AM.GetAllContents()) - if(O.light_range && O.light_power) - disintegrate(O, AM) - if(L.pulling && L.pulling.light_range && isitem(L.pulling)) - disintegrate(L.pulling, L.pulling) + for(var/obj/item/O in L.GetAllContents()) + light_item_check(O, L) + if(L.pulling) + light_item_check(L.pulling, L.pulling) else if(isitem(AM)) - var/obj/item/I = AM - if(I.light_range && I.light_power) - disintegrate(I, I) + light_item_check(AM, AM) + else if(ismecha(AM)) var/obj/vehicle/sealed/mecha/M = AM @@ -224,15 +221,28 @@ for(var/occupant in M.occupants) M.remove_action_type_from_mob(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, occupant) for(var/obj/item/O in AM.GetAllContents()) - if(O.light_range && O.light_power) - disintegrate(O, M) + light_item_check(O, M) else if(istype(AM, /obj/machinery/light)) var/obj/machinery/light/L = AM if(L.status == 1) return - disintegrate(L.drop_light_tube(), AM) + disintegrate(L.drop_light_tube(), L) +///checks if the item has an active light, and destroy the light source if it does. +/obj/item/light_eater/proc/light_item_check(obj/item/I, atom/A) + if(!isitem(I)) + return + if(I.light_range && I.light_power) + disintegrate(I, A) + else if(istype(I, /obj/item/gun)) + var/obj/item/gun/G = I + if(G.gun_light?.on) + disintegrate(G.gun_light, A) + else if(istype(I, /obj/item/clothing/head/helmet)) + var/obj/item/clothing/head/helmet/H = I + if(H.attached_light?.on) + disintegrate(H.attached_light, A) /obj/item/light_eater/proc/disintegrate(obj/item/O, atom/A) if(istype(O, /obj/item/pda))