From 0857dd79971ab8bb865e46ae08a9dae51f4dcfeb Mon Sep 17 00:00:00 2001 From: terencehill Date: Mon, 11 Apr 2022 19:07:30 +0200 Subject: [PATCH] Fix this Welcome dialog bug: "If I start up with +map boil then it appears, but when i close it, the old centreprint appears instead and can't be closed except by joining the match." --- qcsrc/client/main.qc | 38 +++++++++++++++++++++++++++----------- qcsrc/client/main.qh | 6 ++++++ qcsrc/client/view.qc | 2 ++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 8165f4cea..10d4cef98 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -1337,8 +1337,8 @@ bool net_handle_ServerWelcome() return true; } - bool force_centerprint = ReadByte(); - string hostname = ReadString(); + welcome_msg_force_centerprint = ReadByte(); + strcpy(hostname, ReadString()); string ver = ReadString(); string modifications = ReadString(); string cache_mutatormsg = ReadString(); @@ -1356,17 +1356,33 @@ bool net_handle_ServerWelcome() if (motd != "") msg = strcat(msg, "\n\n^8", _("MOTD:"), " ^7", motd); - if (!force_centerprint && !isdemo() && cvar("_menu_welcome_dialog_available") && autocvar_cl_welcome_in_menu_dialog) + strcpy(welcome_msg, msg); + welcome_msg_menu_check_maxtime = time + 1; // wait for menu to load before showing the welcome dialog + return true; +} + +void Welcome_Message_Show_Try() +{ + if (!welcome_msg_menu_check_maxtime) + return; + + bool want_dialog = (!welcome_msg_force_centerprint && !isdemo() && autocvar_cl_welcome_in_menu_dialog); + // if want dialog check if menu is initialized but for a short time + if (!want_dialog || cvar("_menu_initialized") || time > welcome_msg_menu_check_maxtime) { - string welcomedialog_args; - welcomedialog_args = strcat("HOSTNAME \"", hostname, "\""); - msg = MakeConsoleSafe(strreplace("\n", "\\n", msg)); - welcomedialog_args = strcat(welcomedialog_args, " WELCOME \"", msg, "\""); - localcmd("\nmenu_cmd directmenu Welcome ", welcomedialog_args, "\n"); + if (want_dialog && cvar("_menu_welcome_dialog_available")) + { + string welcomedialog_args = strcat("HOSTNAME \"", hostname, "\""); + string msg = MakeConsoleSafe(strreplace("\n", "\\n", welcome_msg)); + welcomedialog_args = strcat(welcomedialog_args, " WELCOME \"", msg, "\""); + localcmd("\nmenu_cmd directmenu Welcome ", welcomedialog_args, "\n"); + } + else + centerprint_Add(ORDINAL(CPID_MOTD), strcat(hostname, "\n\n\n", welcome_msg), -1, 0); + + strfree(welcome_msg); + welcome_msg_menu_check_maxtime = 0; } - else - centerprint_Add(ORDINAL(CPID_MOTD), strcat(hostname, "\n\n\n", msg), -1, 0); - return true; } NET_HANDLE(TE_CSQC_SERVERWELCOME, bool isNew) diff --git a/qcsrc/client/main.qh b/qcsrc/client/main.qh index 56dae7f4f..7be53f6de 100644 --- a/qcsrc/client/main.qh +++ b/qcsrc/client/main.qh @@ -103,6 +103,12 @@ float current_viewzoom; float zoomin_effect; bool warmup_stage; +string hostname; +string welcome_msg; +float welcome_msg_menu_check_maxtime; +bool welcome_msg_force_centerprint; +void Welcome_Message_Show_Try(); + void Fog_Force(); string _getcommandkey(string text, string command, bool forcename); diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index 0399ef87b..0a1772fc4 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -1653,6 +1653,8 @@ void CSQC_UpdateView(entity this, float w, float h) } } + Welcome_Message_Show_Try(); + Announcer(); View_CheckButtonStatus(); -- 2.39.2