[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 <ShizCalev@users.noreply.github.com>
This commit is contained in:
SkyratBot
2020-09-06 05:12:22 +02:00
committed by GitHub
co-authored by ShizCalev
parent d6efc6fdf9
commit ba44d0f2f0
@@ -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, "<span class='danger'>Your headlamp is fried! You'll need a human to help replace it.</span>")
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))