From 8b08bdcfd71c628ac211a3e5a3f45b1d3a2cc438 Mon Sep 17 00:00:00 2001 From: Timberpoes Date: Tue, 7 Jun 2022 04:11:16 +0100 Subject: [PATCH] Fixes issues where players can enter the game without accepted interviews. (#67565) * Feex * Buttonguard * Re-add removed code from debugging * Remove duplicate line * Be nice --- code/_onclick/hud/new_player.dm | 16 ++++++++++++- code/modules/mob/dead/new_player/login.dm | 23 ++++++++++++------- .../modules/mob/dead/new_player/new_player.dm | 3 ++- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 373a4e1cda9..6946faa6885 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -2,8 +2,13 @@ /datum/hud/new_player/New(mob/owner) ..() - if (owner?.client?.interviewee) + + if(!owner || !owner.client) return + + if (owner.client.interviewee) + return + var/list/buttons = subtypesof(/atom/movable/screen/lobby) for(var/button_type in buttons) var/atom/movable/screen/lobby/lobbyscreen = new button_type() @@ -41,6 +46,9 @@ if(owner != REF(usr)) return + if(!usr.client || usr.client.interviewee) + return + . = ..() if(!enabled) @@ -53,6 +61,9 @@ if(owner != REF(usr)) return + if(!usr.client || usr.client.interviewee) + return + . = ..() highlighted = TRUE update_appearance(UPDATE_ICON) @@ -61,6 +72,9 @@ if(owner != REF(usr)) return + if(!usr.client || usr.client.interviewee) + return + . = ..() highlighted = FALSE update_appearance(UPDATE_ICON) diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index 5ec50107f57..08969aeef4b 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -10,6 +10,13 @@ mind.active = TRUE mind.set_current(src) + // Check if user should be added to interview queue + if (!client.holder && CONFIG_GET(flag/panic_bunker) && CONFIG_GET(flag/panic_bunker_interview) && !(client.ckey in GLOB.interviews.approved_ckeys)) + var/required_living_minutes = CONFIG_GET(number/panic_bunker_living) + var/living_minutes = client.get_exp_living(TRUE) + if (required_living_minutes >= living_minutes) + client.interviewee = TRUE + . = ..() if(!. || !client) return FALSE @@ -32,15 +39,15 @@ var/datum/asset/asset_datum = get_asset_datum(/datum/asset/simple/lobby) asset_datum.send(client) - // Check if user should be added to interview queue - if (!client.holder && CONFIG_GET(flag/panic_bunker) && CONFIG_GET(flag/panic_bunker_interview) && !(client.ckey in GLOB.interviews.approved_ckeys)) - var/required_living_minutes = CONFIG_GET(number/panic_bunker_living) - var/living_minutes = client.get_exp_living(TRUE) - if (required_living_minutes >= living_minutes) - client.interviewee = TRUE - register_for_interview() - return + // The parent call for Login() may do a bunch of stuff, like add verbs. + // Delaying the register_for_interview until the very end makes sure it can clean everything up + // and set the player's client up for interview. + if(client.interviewee) + register_for_interview() + return if(SSticker.current_state < GAME_STATE_SETTING_UP) var/tl = SSticker.GetTimeLeft() to_chat(src, "Please set up your character and select \"Ready\". The game will start [tl > 0 ? "in about [DisplayTimeText(tl)]" : "soon"].") + + diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 045990a2d8a..a05cf24d5b1 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -439,5 +439,6 @@ if (I) I.ui_interact(src) - // Add verb for re-opening the interview panel, and re-init the verbs for the stat panel + // Add verb for re-opening the interview panel, fixing chat and re-init the verbs for the stat panel add_verb(src, /mob/dead/new_player/proc/open_interview) + add_verb(client, /client/verb/fix_tgui_panel)