From ae1c4c30077d3154cf15226b538de7386ba312d2 Mon Sep 17 00:00:00 2001 From: Tkdrg Date: Mon, 8 Feb 2016 21:02:51 -0300 Subject: [PATCH] Fixes server crash by abusing containment fields --- .../power/singularity/containment_field.dm | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 7aaebff4269..c1bdb82a9d8 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -67,25 +67,19 @@ /obj/machinery/field var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second. -/obj/machinery/field/CanPass(mob/mover, turf/target, height=0) +/obj/machinery/field/CanPass(atom/movable/mover, turf/target, height=0) + if(hasShocked) + return 0 if(isliving(mover)) // Don't let mobs through shock(mover) return 0 - return ..() - -/obj/machinery/field/CanPass(obj/mover, turf/target, height=0) - if((istype(mover, /obj/machinery) && !istype(mover, /obj/singularity)) || \ - istype(mover, /obj/structure) || \ - istype(mover, /obj/mecha)) + if(istype(mover, /obj/machinery) || istype(mover, /obj/structure) || istype(mover, /obj/mecha)) bump_field(mover) return 0 return ..() /obj/machinery/field/proc/shock(mob/living/user) - if(hasShocked) - return 0 if(isliving(user)) - hasShocked = 1 var/shock_damage = min(rand(30,40),rand(30,40)) if(iscarbon(user)) @@ -104,14 +98,18 @@ user.updatehealth() bump_field(user) - - spawn(5) - hasShocked = 0 return +/obj/machinery/field/proc/clear_shock() + hasShocked = 0 + /obj/machinery/field/proc/bump_field(atom/movable/AM as mob|obj) + if(hasShocked) + return 0 + hasShocked = 1 var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(5, 1, AM.loc) s.start() var/atom/target = get_edge_target_turf(AM, get_dir(src, get_step_away(AM, src))) AM.throw_at(target, 200, 4) + addtimer(src, "clear_shock", 5)