mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-31 20:11:56 +00:00
* 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>
85 lines
2.5 KiB
Plaintext
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
|