Files
Bubberstation/code/game/objects/effects/spawners/random/maintenance.dm
SkyratBot 3251c19176 [MIRROR] Fix maint loot spawners not deleting after roundstart/spawning their loot. [MDB IGNORE] (#8686)
* 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.

* Fix maint loot spawners not deleting after roundstart/spawning their loot.

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
2021-10-08 08:06:58 -04:00

85 lines
2.5 KiB
Plaintext

/obj/effect/spawner/random/maintenance
name = "maintenance loot spawner"
desc = "Come on Lady Luck, spawn me a pair of sunglasses."
icon_state = "loot"
spawn_on_init = FALSE
// see code/_globalvars/lists/maintenance_loot.dm for loot table
/obj/effect/spawner/random/maintenance/examine(mob/user)
. = ..()
. += span_info("This spawner has an effective loot count of [get_effective_lootcount()].")
/obj/effect/spawner/random/maintenance/Initialize(mapload)
loot = GLOB.maintenance_loot
. = ..()
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
return ..()
/obj/effect/spawner/random/maintenance/proc/hide()
invisibility = INVISIBILITY_OBSERVER
alpha = 100
/obj/effect/spawner/random/maintenance/proc/get_effective_lootcount()
var/effective_lootcount = spawn_loot_count
if(HAS_TRAIT(SSstation, STATION_TRAIT_FILLED_MAINT))
effective_lootcount = FLOOR(spawn_loot_count * 1.5, 1)
else if(HAS_TRAIT(SSstation, STATION_TRAIT_EMPTY_MAINT))
effective_lootcount = FLOOR(spawn_loot_count * 0.5, 1)
return effective_lootcount
/obj/effect/spawner/random/maintenance/spawn_loot(lootcount_override)
if(isnull(lootcount_override))
lootcount_override = get_effective_lootcount()
. = ..()
// In addition, closets that are closed will have the maintenance loot inserted inside.
for(var/obj/structure/closet/closet in get_turf(src))
if(!closet.opened)
closet.take_contents()
/obj/effect/spawner/random/maintenance/two
name = "2 x maintenance loot spawner"
spawn_loot_count = 2
/obj/effect/spawner/random/maintenance/three
name = "3 x maintenance loot spawner"
spawn_loot_count = 3
/obj/effect/spawner/random/maintenance/four
name = "4 x maintenance loot spawner"
spawn_loot_count = 4
/obj/effect/spawner/random/maintenance/five
name = "5 x maintenance loot spawner"
spawn_loot_count = 5
/obj/effect/spawner/random/maintenance/six
name = "6 x maintenance loot spawner"
spawn_loot_count = 6
/obj/effect/spawner/random/maintenance/seven
name = "7 x maintenance loot spawner"
spawn_loot_count = 7
/obj/effect/spawner/random/maintenance/eight
name = "8 x maintenance loot spawner"
spawn_loot_count = 8