diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 14c752613b..567e96b9c3 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -38,4 +38,6 @@ GLOBAL_LIST_EMPTY(wire_name_directory) GLOBAL_LIST_EMPTY(ai_status_displays) GLOBAL_LIST_EMPTY(mob_spawners) // All mob_spawn objects +GLOBAL_LIST_EMPTY(latejoin_mob_spawners) // All mob_spawn objects that can be viewed and accessed from the lobby. + GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/computer/station_alert diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 7274f73965..a05d731f0a 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -28,6 +28,7 @@ var/show_flavour = TRUE var/banType = "lavaland" var/ghost_usable = TRUE + var/latejoin_visible = TRUE //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling) @@ -66,13 +67,22 @@ create() else if(ghost_usable) GLOB.poi_list |= src - LAZYADD(GLOB.mob_spawners[job_description ? job_description : name], src) + var/job_or_name = job_description ? job_description : name + LAZYADD(GLOB.mob_spawners[job_or_name], src) + if(latejoin_visible) + LAZYADD(GLOB.latejoin_mob_spawners[job_or_name], src) + /obj/effect/mob_spawn/Destroy() GLOB.poi_list -= src - LAZYREMOVE(GLOB.mob_spawners[job_description ? job_description : name], src) - if(!LAZYLEN(GLOB.mob_spawners[job_description ? job_description : name])) - GLOB.mob_spawners -= job_description ? job_description : name + var/job_or_name = job_description ? job_description : name + LAZYREMOVE(GLOB.mob_spawners[job_or_name], src) + if(!LAZYLEN(GLOB.mob_spawners[job_or_name])) + GLOB.mob_spawners -= job_or_name + LAZYREMOVE(GLOB.latejoin_mob_spawners[job_or_name], src) + if(!LAZYLEN(GLOB.latejoin_mob_spawners[job_or_name])) + GLOB.latejoin_mob_spawners -= job_or_name + return ..() /obj/effect/mob_spawn/proc/special(mob/M) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 84be6438c0..ceca7e1372 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -163,7 +163,7 @@ to_chat(usr, "Server is full.") return - var/obj/effect/mob_spawn/MS = pick(GLOB.mob_spawners[href_list["JoinAsGhostRole"]]) + var/obj/effect/mob_spawn/MS = pick(GLOB.latejoin_mob_spawners[href_list["JoinAsGhostRole"]]) if(istype(MS) && MS.attack_ghost(src, latejoinercalling = TRUE)) SSticker.queued_players -= src SSticker.queue_delay = 4 @@ -443,7 +443,7 @@ for(var/datum/job/job in SSjob.occupations) if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE) available_job_count++ - for(var/spawner in GLOB.mob_spawners) + for(var/spawner in GLOB.latejoin_mob_spawners) available_job_count++ break @@ -457,14 +457,14 @@ "Engineering" = list(jobs = list(), titles = GLOB.engineering_positions, color = "#ffd699"), "Supply" = list(jobs = list(), titles = GLOB.supply_positions, color = "#ead4ae"), "Miscellaneous" = list(jobs = list(), titles = list(), color = "#ffffff", colBreak = TRUE), - "Ghost Role" = list(jobs = list(), titles = GLOB.mob_spawners, color = "#ffffff"), + "Ghost Role" = list(jobs = list(), titles = GLOB.latejoin_mob_spawners, color = "#ffffff"), "Synthetic" = list(jobs = list(), titles = GLOB.nonhuman_positions, color = "#ccffcc"), "Service" = list(jobs = list(), titles = GLOB.civilian_positions, color = "#cccccc"), "Medical" = list(jobs = list(), titles = GLOB.medical_positions, color = "#99ffe6", colBreak = TRUE), "Science" = list(jobs = list(), titles = GLOB.science_positions, color = "#e6b3e6"), "Security" = list(jobs = list(), titles = GLOB.security_positions, color = "#ff9999"), ) - for(var/spawner in GLOB.mob_spawners) + for(var/spawner in GLOB.latejoin_mob_spawners) categorizedJobs["Ghost Role"]["jobs"] += spawner for(var/datum/job/job in SSjob.occupations)