]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into develop
authorterencehill <piuntn@gmail.com>
Fri, 22 Apr 2022 00:41:18 +0000 (02:41 +0200)
committerterencehill <piuntn@gmail.com>
Fri, 22 Apr 2022 00:41:18 +0000 (02:41 +0200)
1  2 
qcsrc/client/main.qc

diff --combined qcsrc/client/main.qc
index 753ed24f8614f747603510457db5633e7165eba1,8bd5d78638c1fc607fd379d7d1b20d82d0b52ca9..4bb2ff9f1c41363749e7cca475bb5ab732c6fe57
@@@ -58,8 -58,6 +58,6 @@@ void CSQC_Init(
                maxclients = i;
        }
  
-       ReplicateVars(REPLICATEVARS_SEND_ALL);
        // needs to be done so early because of the constants they create
        static_init();
        static_init_late();
@@@ -180,14 -178,7 +178,14 @@@ void Shutdown(
                if (!(calledhooks & HOOK_START))
                        localcmd("\n_cl_hook_gamestart nop\n");
                if (!(calledhooks & HOOK_END))
 +              {
 +                      int gamecount = cvar("cl_matchcount");
                        localcmd("\ncl_hook_gameend\n");
 +                      // NOTE: using localcmd here to ensure it's executed AFTER cl_hook_gameend
 +                      // earlier versions of the game abuse the hook to set this cvar
 +                      localcmd(strcat("cl_matchcount ", itos(gamecount + 1), "\n"));
 +                      //cvar_set("cl_matchcount", itos(gamecount + 1));
 +              }
        }
  
        localcmd("\ncl_hook_shutdown\n");
@@@ -446,6 -437,9 +444,9 @@@ void PostInit(
  
        TrueAim_Init();
  
+       // this can't be called in CSQC_Init as it'd send cvars too early
+       ReplicateVars_Start();
        postinit = true;
  }
  
@@@ -1323,6 -1317,55 +1324,55 @@@ NET_HANDLE(TE_CSQC_WEAPONCOMPLAIN, boo
        }
  }
  
+ string translate_modifications(string s)
+ {
+       return build_mutator_list(s);
+ }
+ string translate_weaponarena(string s)
+ {
+       if (s == "") return s;
+       if (s == "All Weapons Arena") return _("All Weapons Arena");
+       if (s == "All Available Weapons Arena") return _("All Available Weapons Arena");
+       if (s == "Most Weapons Arena") return _("Most Weapons Arena");
+       if (s == "Most Available Weapons Arena") return _("Most Available Weapons Arena");
+       if (s == "Dev All Weapons Arena") return s; // development option, do not translate
+       if (s == "Dev All Available Weapons Arena") return s; // development option, do not translate
+       if (s == "No Weapons Arena") return _("No Weapons Arena");
+       int n = tokenizebyseparator(s, " & ");
+       string wpn_list = "";
+       for (int i = 0; i < n; i++)
+       {
+               Weapon wep = Weapon_from_name(argv(i));
+               if (wep == WEP_Null)
+                       LOG_INFO("^3Warning: ^7server sent an invalid weapon name\n");
+               wpn_list = cons_mid(wpn_list, " & ", wep.m_name);
+       }
+       if (wpn_list != "")
+               return sprintf(_("%s Arena"), wpn_list);
+       else
+               return _("No Weapons Arena");
+ }
+ string GetVersionMessage(string hostversion, bool version_mismatch, bool version_check)
+ {
+       string xonotic_hostversion = strcat("Xonotic ", hostversion);
+       if (version_mismatch)
+       {
+               if(!version_check)
+                       return strcat(sprintf(_("This is %s"), xonotic_hostversion), "\n^3",
+                               _("Your client version is outdated."), "\n\n\n",
+                               _("### YOU WON'T BE ABLE TO PLAY ON THIS SERVER ###"), "\n\n\n",
+                               _("Please update!"));
+               else
+                       return strcat(sprintf(_("This is %s"), xonotic_hostversion), "\n^3",
+                               _("This server is using an outdated Xonotic version."), "\n\n\n",
+                               _("### THIS SERVER IS INCOMPATIBLE AND THUS YOU CANNOT JOIN ###"));
+       }
+       return sprintf(_("Welcome to %s"), xonotic_hostversion);
+ }
  bool net_handle_ServerWelcome()
  {
        bool campaign = ReadByte();
  
        welcome_msg_force_centerprint = ReadByte();
        strcpy(hostname, ReadString());
-       string ver = ReadString();
-       string modifications = ReadString();
+       string hostversion = ReadString();
+       bool version_mismatch = ReadByte();
+       bool version_check = ReadByte();
+       string ver = GetVersionMessage(hostversion, version_mismatch, version_check);
+       string modifications = translate_modifications(ReadString());
+       string weaponarena_list = translate_weaponarena(ReadString());
        string cache_mutatormsg = ReadString();
-       string mutator_msg = ReadString();
        string motd = ReadString();
  
        string msg = "";
        msg = strcat(msg, ver);
        msg = strcat(msg, "^8\n\n", strcat(_("Gametype:"), " ^1", MapInfo_Type_ToText(gametype)), "^8\n");
+       modifications = cons_mid(modifications, ", ", weaponarena_list);
        if(modifications != "")
                msg = strcat(msg, "^8\n", _("Active modifications:"), " ^3", modifications, "^8\n");
        if (cache_mutatormsg != "")
                msg = strcat(msg, "\n\n^8", _("Special gameplay tips:"), " ^7", cache_mutatormsg);
+       string mutator_msg = "";
+       MUTATOR_CALLHOOK(BuildGameplayTipsString, mutator_msg);
+       mutator_msg = M_ARGV(0, string);
        msg = strcat(msg, mutator_msg); // trust that the mutator will do proper formatting
        if (motd != "")
                msg = strcat(msg, "\n\n^8", _("MOTD:"), " ^7", motd);