mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 15:47:15 +01:00
Fixes cascade resonance announcement spam, improves logging (#96758)
## About The Pull Request - Fixes air raid siren/priority announcement being sent each time the cascade strategy is activated. - Improves logging for admins, removes code duplication by moving the log generation into the respective parent procs. ## Why It's Good For The Game Fixes bug, code improvement ## Changelog 🆑 LT3 fix: Fixed duplicate priority announcements about a possible resonance cascade code: Improved supermatter delamination logging /🆑
This commit is contained in:
@@ -9,6 +9,10 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
|
||||
/// Logic holder for supermatter delaminations, goes off the strategy design pattern.
|
||||
/// Selected by [/obj/machinery/power/supermatter_crystal/proc/set_delam]
|
||||
/datum/sm_delam
|
||||
/// User friendly name for messages and logging
|
||||
var/name
|
||||
/// Has a priority announcement been sent since this delam strategy was initialized
|
||||
var/announcement_triggered = FALSE
|
||||
|
||||
/// Whether we are eligible for this delamination or not. TRUE if valid, FALSE if not.
|
||||
/// [/obj/machinery/power/supermatter_crystal/proc/set_delam]
|
||||
@@ -38,8 +42,8 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
|
||||
return FALSE
|
||||
|
||||
if (sm.damage >= sm.emergency_point && sm.damage_archived < sm.emergency_point)
|
||||
sm.investigate_log("has entered the emergency point.", INVESTIGATE_ENGINE)
|
||||
message_admins("[sm] has entered the emergency point [ADMIN_VERBOSEJMP(sm)].")
|
||||
sm.investigate_log("has entered the emergency point: Pending [sm.delamination_strategy.name].", INVESTIGATE_ENGINE)
|
||||
message_admins("[ADMIN_VERBOSEJMP(sm)] has entered the emergency point: Pending [sm.delamination_strategy.name].")
|
||||
|
||||
if((REALTIMEOFDAY - sm.lastwarning) < SUPERMATTER_WARNING_DELAY)
|
||||
return FALSE
|
||||
@@ -75,15 +79,24 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
|
||||
SEND_SIGNAL(sm, COMSIG_SUPERMATTER_DELAM_ALARM)
|
||||
return TRUE
|
||||
|
||||
/// Generates an admin message and creates an investigate log.
|
||||
/datum/sm_delam/proc/log_delamination(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("[ADMIN_VERBOSEJMP(sm)] triggered a [name].")
|
||||
sm.investigate_log("triggered a [name].", INVESTIGATE_ENGINE)
|
||||
|
||||
/// Called when a supermatter switches its strategy from another one to us.
|
||||
/// [/obj/machinery/power/supermatter_crystal/proc/set_delam]
|
||||
/datum/sm_delam/proc/on_select(obj/machinery/power/supermatter_crystal/sm)
|
||||
return
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
sm.investigate_log("functional strategy is now [name].", INVESTIGATE_ENGINE)
|
||||
if(SSticker.HasRoundStarted())
|
||||
message_admins("[ADMIN_VERBOSEJMP(sm)] functional strategy is now [name].")
|
||||
|
||||
/// Called when a supermatter switches its strategy from us to something else.
|
||||
/// [/obj/machinery/power/supermatter_crystal/proc/set_delam]
|
||||
/datum/sm_delam/proc/on_deselect(obj/machinery/power/supermatter_crystal/sm)
|
||||
return
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
sm.investigate_log("previous strategy was [name].", INVESTIGATE_ENGINE)
|
||||
|
||||
/// Added to an examine return value.
|
||||
/// [/obj/machinery/power/supermatter_crystal/examine]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/datum/sm_delam/cascade
|
||||
name = "resonance cascade"
|
||||
|
||||
/datum/sm_delam/cascade/can_select(obj/machinery/power/supermatter_crystal/sm)
|
||||
if(!sm.is_main_engine)
|
||||
@@ -16,6 +17,9 @@
|
||||
if(!..())
|
||||
return FALSE
|
||||
|
||||
if(!announcement_triggered)
|
||||
announce_cascade(sm)
|
||||
|
||||
sm.radio.talk_into(
|
||||
sm,
|
||||
"DANGER: HYPERSTRUCTURE OSCILLATION FREQUENCY OUT OF BOUNDS.",
|
||||
@@ -33,27 +37,20 @@
|
||||
return TRUE
|
||||
|
||||
/datum/sm_delam/cascade/on_select(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("[sm] is heading towards a cascade. [ADMIN_VERBOSEJMP(sm)]")
|
||||
sm.investigate_log("is heading towards a cascade.", INVESTIGATE_ENGINE)
|
||||
|
||||
. = ..()
|
||||
sm.warp = new(sm)
|
||||
sm.vis_contents += sm.warp
|
||||
animate(sm.warp, time = 1, transform = matrix().Scale(0.5,0.5))
|
||||
animate(time = 9, transform = matrix())
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(announce_cascade), sm), 2 MINUTES)
|
||||
|
||||
/datum/sm_delam/cascade/on_deselect(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("[sm] will no longer cascade. [ADMIN_VERBOSEJMP(sm)]")
|
||||
sm.investigate_log("will no longer cascade.", INVESTIGATE_ENGINE)
|
||||
|
||||
. = ..()
|
||||
message_admins("[ADMIN_VERBOSEJMP(sm)] will no longer cascade.")
|
||||
sm.vis_contents -= sm.warp
|
||||
QDEL_NULL(sm.warp)
|
||||
|
||||
/datum/sm_delam/cascade/delaminate(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a cascade delam.")
|
||||
sm.investigate_log("triggered a cascade delam.", INVESTIGATE_ENGINE)
|
||||
|
||||
log_delamination(sm)
|
||||
effect_explosion(sm)
|
||||
effect_emergency_state()
|
||||
effect_cascade_demoralize()
|
||||
@@ -87,9 +84,13 @@
|
||||
return FALSE
|
||||
if(!can_select(sm))
|
||||
return FALSE
|
||||
if(!sm.should_alert_common())
|
||||
return FALSE
|
||||
|
||||
priority_announce("Attention: Long range anomaly scans indicate abnormal quantities of harmonic flux originating from \
|
||||
a subject within [station_name()], a resonance collapse may occur.",
|
||||
"Nanotrasen Star Observation Association", 'sound/announcer/alarm/airraid.ogg')
|
||||
announcement_triggered = TRUE
|
||||
return TRUE
|
||||
|
||||
/// Signal calls cant sleep, we gotta do this.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
/// When we have too much gas.
|
||||
/datum/sm_delam/singularity
|
||||
name = "singularity delamination"
|
||||
|
||||
/datum/sm_delam/singularity/can_select(obj/machinery/power/supermatter_crystal/sm)
|
||||
return (sm.absorbed_gasmix.total_moles() >= MOLE_PENALTY_THRESHOLD)
|
||||
@@ -17,9 +18,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/sm_delam/singularity/delaminate(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a singularity delam.")
|
||||
sm.investigate_log("triggered a singularity delam.", INVESTIGATE_ENGINE)
|
||||
|
||||
log_delamination(sm)
|
||||
effect_irradiate(sm)
|
||||
effect_demoralize(sm)
|
||||
if(sm.is_main_engine)
|
||||
@@ -63,6 +62,7 @@
|
||||
|
||||
/// When we have too much power.
|
||||
/datum/sm_delam/tesla
|
||||
name = "tesla delamination"
|
||||
|
||||
/datum/sm_delam/tesla/can_select(obj/machinery/power/supermatter_crystal/sm)
|
||||
return (sm.internal_energy > POWER_PENALTY_THRESHOLD)
|
||||
@@ -78,9 +78,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/sm_delam/tesla/delaminate(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a tesla delam.")
|
||||
sm.investigate_log("triggered a tesla delam.", INVESTIGATE_ENGINE)
|
||||
|
||||
log_delamination(sm)
|
||||
effect_irradiate(sm)
|
||||
effect_demoralize(sm)
|
||||
if(sm.is_main_engine)
|
||||
@@ -113,14 +111,13 @@
|
||||
|
||||
/// Default delam.
|
||||
/datum/sm_delam/explosive
|
||||
name = "explosive delamination"
|
||||
|
||||
/datum/sm_delam/explosive/can_select(obj/machinery/power/supermatter_crystal/sm)
|
||||
return TRUE
|
||||
|
||||
/datum/sm_delam/explosive/delaminate(obj/machinery/power/supermatter_crystal/sm)
|
||||
message_admins("Supermatter [sm] at [ADMIN_VERBOSEJMP(sm)] triggered a normal delam.")
|
||||
sm.investigate_log("triggered a normal delam.", INVESTIGATE_ENGINE)
|
||||
|
||||
log_delamination(sm)
|
||||
effect_irradiate(sm)
|
||||
effect_demoralize(sm)
|
||||
if(sm.is_main_engine)
|
||||
|
||||
Reference in New Issue
Block a user