mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-22 04:22:39 +01:00
Fixing tesla with no balls (#5988)
This PR fixes Tesla not having miniballs. Problem was that it would delete its own generated balls. Fixes #5749 Tesla that has 9 or more balls will start to melt down any tesla coils or grounding rods. Tesla that has 10 or more balls will start to target and melt down emitters Tesla with no balls looses power as intended, thus dying with less than 0 power.
This commit is contained in:
committed by
Erki
parent
2ad7e66001
commit
db0d918d8c
@@ -30,7 +30,7 @@
|
||||
|
||||
if(W.iswrench())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You [anchored ? "unfasten" : "fasten"] [src] to the flooring.</span>"
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "unfasten" : "fasten"] [src] to the flooring.</span>")
|
||||
anchored = !anchored
|
||||
if(!anchored)
|
||||
disconnect_from_network()
|
||||
@@ -38,8 +38,8 @@
|
||||
connect_to_network()
|
||||
return
|
||||
|
||||
/obj/machinery/power/tesla_coil/tesla_act(var/power)
|
||||
if(anchored)
|
||||
/obj/machinery/power/tesla_coil/tesla_act(var/power, var/melt = FALSE)
|
||||
if(anchored && !melt)
|
||||
being_shocked = 1
|
||||
//don't lose arc power when it's not connected to anything
|
||||
//please place tesla coils all around the station to maximize effectiveness
|
||||
@@ -76,13 +76,14 @@
|
||||
|
||||
if(W.iswrench())
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "<span class='notice'>You [anchored ? "unfasten" : "fasten"] [src] to the flooring.</span>"
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "unfasten" : "fasten"] [src] to the flooring.</span>")
|
||||
anchored = !anchored
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/grounding_rod/tesla_act(var/power)
|
||||
/obj/machinery/power/grounding_rod/tesla_act(var/power, var/melt = FALSE)
|
||||
flick("coil_shock_1", src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/circuitboard/tesla_coil
|
||||
name = "tesla coil circuitry"
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
tesla_zap(ball, range, TESLA_MINI_POWER/7*range, TRUE)
|
||||
else
|
||||
energy = 0 // ensure we dont have miniballs of miniballs
|
||||
if(energy == 0)
|
||||
if(energy < 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/singularity/energy_ball/examine(mob/user)
|
||||
@@ -159,11 +159,14 @@
|
||||
|
||||
else if(orbiting_balls.len)
|
||||
dissipate() //sing code has a much better system.
|
||||
else // that is when we have no balls but our energy is less
|
||||
energy_to_raise = energy_to_raise / 1.25
|
||||
energy_to_lower = (energy_to_raise / 1.25) - 20
|
||||
|
||||
/obj/singularity/energy_ball/proc/new_mini_ball()
|
||||
if(!loc)
|
||||
return
|
||||
var/obj/singularity/energy_ball/EB = new(loc)
|
||||
var/obj/singularity/energy_ball/EB = new(loc, 0)
|
||||
|
||||
EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7)
|
||||
var/icon/I = icon(icon,icon_state,dir)
|
||||
@@ -188,16 +191,16 @@
|
||||
target.dissipate_strength = target.orbiting_balls.len
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/singularity/energy_ball/stop_orbit()
|
||||
if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
|
||||
var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting
|
||||
orbitingball.orbiting_balls -= src
|
||||
orbitingball.dissipate_strength = orbitingball.orbiting_balls.len
|
||||
..()
|
||||
. = ..()
|
||||
if (!loc && !QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/singularity/energy_ball/proc/dust_mobs(atom/A)
|
||||
if(!iscarbon(A))
|
||||
return
|
||||
@@ -219,6 +222,7 @@
|
||||
var/mob/living/closest_mob
|
||||
var/obj/machinery/closest_machine
|
||||
var/obj/structure/closest_structure
|
||||
var/obj/machinery/power/emitter/closest_emitter // Use only if Tesla is too grown with 10 ore more balls. Will escape.
|
||||
var/static/list/blacklisted_types = typecacheof(list(
|
||||
/obj/machinery/atmospherics,
|
||||
/obj/machinery/power/emitter,
|
||||
@@ -245,8 +249,15 @@
|
||||
/mob/living,
|
||||
/obj/structure
|
||||
))
|
||||
var/melt = FALSE
|
||||
if(istype(source, /obj/singularity/energy_ball))
|
||||
var/obj/singularity/energy_ball/E = source
|
||||
melt = (E.orbiting_balls.len >= 9)
|
||||
if(E.orbiting_balls.len >= 10)
|
||||
blacklisted_types -= /obj/machinery/power/emitter
|
||||
|
||||
for(var/A in typecache_filter_multi_list_exclusion(oview(source, zap_range+2), things_to_shock, blacklisted_types))
|
||||
|
||||
if(istype(A, /obj/machinery/power/tesla_coil))
|
||||
var/dist = get_dist(source, A)
|
||||
var/obj/machinery/power/tesla_coil/C = A
|
||||
@@ -271,6 +282,13 @@
|
||||
else if(closest_grounding_rod)
|
||||
continue
|
||||
|
||||
else if(melt && istype(A, /obj/machinery/power/emitter))
|
||||
var/obj/machinery/power/emitter/e = A
|
||||
closest_emitter = e
|
||||
|
||||
else if(closest_emitter)
|
||||
continue
|
||||
|
||||
else if(isliving(A))
|
||||
var/dist = get_dist(source, A)
|
||||
var/mob/living/L = A
|
||||
@@ -311,10 +329,13 @@
|
||||
|
||||
//per type stuff:
|
||||
if(closest_tesla_coil)
|
||||
closest_tesla_coil.tesla_act(power)
|
||||
closest_tesla_coil.tesla_act(power, melt)
|
||||
|
||||
else if(closest_grounding_rod)
|
||||
closest_grounding_rod.tesla_act(power)
|
||||
closest_grounding_rod.tesla_act(power, melt)
|
||||
|
||||
else if(closest_emitter)
|
||||
closest_emitter.tesla_act(power, melt)
|
||||
|
||||
else if(closest_mob)
|
||||
var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
|
||||
|
||||
Reference in New Issue
Block a user