From 7d1eec24cbd2cf89cf82c7ecaae9a52afd7ef381 Mon Sep 17 00:00:00 2001 From: Timberpoes Date: Fri, 8 Oct 2021 11:58:46 +0100 Subject: [PATCH] Fix maint loot spawners not deleting after roundstart/spawning their loot. (#61707) Maint loot spawners hang around and never get qdeleted after spawning their loot. This does a little bit of simple code logic to limit copypasta and ensure that loot spawners never qdel late and that they qdel precisely when they intend to. Or when SSmapping intends for them to. --- code/controllers/subsystem/mapping.dm | 2 +- .../effects/spawners/random/maintenance.dm | 21 ++++++++++++------- .../objects/effects/spawners/random/random.dm | 6 +++++- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 1e0bb974373..2ad24b4c846 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -601,4 +601,4 @@ GLOBAL_LIST_EMPTY(the_station_areas) CHECK_TICK spawner.spawn_loot() - spawner.hide() + qdel(spawner) diff --git a/code/game/objects/effects/spawners/random/maintenance.dm b/code/game/objects/effects/spawners/random/maintenance.dm index ad3f26ffcb7..d685e448368 100644 --- a/code/game/objects/effects/spawners/random/maintenance.dm +++ b/code/game/objects/effects/spawners/random/maintenance.dm @@ -10,16 +10,21 @@ . += span_info("This spawner has an effective loot count of [get_effective_lootcount()].") /obj/effect/spawner/random/maintenance/Initialize(mapload) - . = ..() - // There is a single callback in SSmapping to spawn all delayed maintenance loot - // so we don't just make one callback per loot spawner - GLOB.maintenance_loot_spawners += src loot = GLOB.maintenance_loot - // Late loaded templates like shuttles can have maintenance loot - if(SSticker.current_state >= GAME_STATE_SETTING_UP) - spawn_loot() - hide() + . = ..() + + GLOB.maintenance_loot_spawners += src + +/obj/effect/spawner/random/maintenance/should_spawn_on_init() + . = ..() + + if(.) + return + + // Late loaded templates like shuttles can have maintenance loot. + // Once the game state progresses to roundstart, new maint loot spawners should just instantly pop. + return (SSticker.current_state >= GAME_STATE_SETTING_UP) /obj/effect/spawner/random/maintenance/Destroy() GLOB.maintenance_loot_spawners -= src diff --git a/code/game/objects/effects/spawners/random/random.dm b/code/game/objects/effects/spawners/random/random.dm index ca43aa3fef7..d4a381ec1b1 100644 --- a/code/game/objects/effects/spawners/random/random.dm +++ b/code/game/objects/effects/spawners/random/random.dm @@ -33,10 +33,14 @@ /obj/effect/spawner/random/Initialize(mapload) . = ..() - if(spawn_on_init) + if(should_spawn_on_init()) spawn_loot() return INITIALIZE_HINT_QDEL +/// Helper proc that returns TRUE if the spawner should spawn loot in Initialise() and FALSE otherwise. Override this to change spawning behaviour. +/obj/effect/spawner/random/proc/should_spawn_on_init() + return spawn_on_init + ///If the spawner has any loot defined, randomly picks some and spawns it. Does not cleanup the spawner. /obj/effect/spawner/random/proc/spawn_loot(lootcount_override) if(!prob(spawn_loot_chance))