ent_cs: cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / teamplay.qc
index f2d88aa..2fbbd50 100644 (file)
@@ -1,4 +1,19 @@
 #include "teamplay.qh"
+#include "_all.qh"
+
+#include "cl_client.qh"
+#include "race.qh"
+#include "scores.qh"
+#include "scores_rules.qh"
+
+#include "bot/bot.qh"
+
+#include "command/vote.qh"
+
+#include "mutators/mutators_include.qh"
+
+#include "../common/deathtypes.qh"
+#include "../common/teams.qh"
 
 void TeamchangeFrags(entity e)
 {
@@ -26,6 +41,7 @@ void ActivateTeamplay()
 {
        serverflags |= SERVERFLAG_TEAMPLAY;
        teamplay = 1;
+       cvar_set("teamplay", "2");  // DP needs this for sending proper getstatus replies.
 }
 
 void InitGameplayMode()
@@ -42,12 +58,13 @@ void InitGameplayMode()
        world.maxs = mi_max;
 
        MapInfo_LoadMapSettings(mapname);
-       teamplay = 0;
        serverflags &= ~SERVERFLAG_TEAMPLAY;
+       teamplay = 0;
+       cvar_set("teamplay", "0");  // DP needs this for sending proper getstatus replies.
 
        if (!cvar_value_issafe(world.fog))
        {
-               print("The current map contains a potentially harmful fog setting, ignored\n");
+               LOG_INFO("The current map contains a potentially harmful fog setting, ignored\n");
                world.fog = string_null;
        }
        if(MapInfo_Map_fog != "")
@@ -67,6 +84,7 @@ void InitGameplayMode()
 
        if(g_dm)
        {
+               MUTATOR_ADD(gamemode_deathmatch);
        }
 
        if(g_tdm)
@@ -123,6 +141,8 @@ void InitGameplayMode()
                ActivateTeamplay();
                fraglimit_override = autocvar_g_keyhunt_point_limit;
                leadlimit_override = autocvar_g_keyhunt_point_leadlimit;
+               if(autocvar_g_keyhunt_team_spawns)
+                       have_team_spawns = -1; // request team spawns
                MUTATOR_ADD(gamemode_keyhunt);
        }
 
@@ -227,9 +247,6 @@ void InitGameplayMode()
                MUTATOR_ADD(gamemode_invasion);
        }
 
-       if(teamplay)
-               entcs_init();
-
        cache_mutatormsg = strzone("");
        cache_lastmutatormsg = strzone("");
 
@@ -249,7 +266,8 @@ void InitGameplayMode()
        InitializeEntity(world, default_delayedinit, INITPRIO_GAMETYPE_FALLBACK);
 }
 
-string GetClientVersionMessage() {
+string GetClientVersionMessage()
+{SELFPARAM();
        string versionmsg;
        if (self.version_mismatch) {
                if(self.version < autocvar_gameversion) {
@@ -267,8 +285,7 @@ string getwelcomemessage(void)
 {
        string s, modifications, motd;
 
-       ret_string = "";
-       MUTATOR_CALLHOOK(BuildMutatorsPrettyString);
+       MUTATOR_CALLHOOK(BuildMutatorsPrettyString, "");
        modifications = ret_string;
 
        if(g_weaponarena)
@@ -278,14 +295,12 @@ string getwelcomemessage(void)
                else
                        modifications = strcat(modifications, ", ", g_weaponarena_list, " Arena");
        }
-       if(cvar("g_balance_blaster_weaponstart") == 0)
+       else if(cvar("g_balance_blaster_weaponstart") == 0)
                modifications = strcat(modifications, ", No start weapons");
        if(cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))
                modifications = strcat(modifications, ", Low gravity");
        if(g_cloaked && !g_cts)
                modifications = strcat(modifications, ", Cloaked");
-       if(g_grappling_hook)
-               modifications = strcat(modifications, ", Hook");
        if(g_weapon_stay && !g_cts)
                modifications = strcat(modifications, ", Weapons stay");
        if(g_jetpack)
@@ -305,9 +320,6 @@ string getwelcomemessage(void)
        if(modifications != "")
                s = strcat(s, "^8\nactive modifications: ^3", modifications, "^8\n");
 
-       if (g_grappling_hook)
-               s = strcat(s, "\n\n^3grappling hook^8 is enabled, press 'e' to use it\n");
-
        if (cvar("g_nades"))
                s = strcat(s, "\n\n^3nades^8 are enabled, press 'g' to use them\n");
 
@@ -325,6 +337,12 @@ string getwelcomemessage(void)
                s = strcat(s, "\n\n^8special gameplay tips: ^7", cache_mutatormsg);
        }
 
+       string mutator_msg = "";
+       MUTATOR_CALLHOOK(BuildGameplayTipsString, mutator_msg);
+       mutator_msg = ret_string;
+
+       s = strcat(s, mutator_msg); // trust that the mutator will do proper formatting
+
        motd = autocvar_sv_motd;
        if (motd != "") {
                s = strcat(s, "\n\n^8MOTD: ^7", strreplace("\\n", "\n", motd));
@@ -379,7 +397,7 @@ void SetPlayerTeam(entity pl, float t, float s, float noprint)
 
 // set c1...c4 to show what teams are allowed
 void CheckAllowedTeams (entity for_whom)
-{
+{SELFPARAM();
        float dm;
        entity head;
        string teament_name;
@@ -416,8 +434,7 @@ void CheckAllowedTeams (entity for_whom)
                // cover anything else by treating it like tdm with no teams spawned
                dm = 2;
 
-               ret_float = dm;
-               MUTATOR_CALLHOOK(GetTeamCount);
+               MUTATOR_CALLHOOK(GetTeamCount, dm);
                dm = ret_float;
 
                if(dm >= 4)
@@ -686,7 +703,7 @@ float FindSmallestTeam(entity pl, float ignore_pl)
 }
 
 float JoinBestTeam(entity pl, float only_return_best, float forcebestteam)
-{
+{SELFPARAM();
        float smallest, selectedteam;
 
        // don't join a team if we're not playing a team game
@@ -763,7 +780,7 @@ float JoinBestTeam(entity pl, float only_return_best, float forcebestteam)
 
 //void() ctf_playerchanged;
 void SV_ChangeTeam(float _color)
-{
+{SELFPARAM();
        float scolor, dcolor, steam, dteam; //, dbotcount, scount, dcount;
 
        // in normal deathmatch we can just apply the color and we're done
@@ -831,7 +848,11 @@ void SV_ChangeTeam(float _color)
                TeamchangeFrags(self);
        }
 
-       SetPlayerTeam(self, dteam, steam, false);
+       // since this is an engine function, and gamecode doesn't have any calls earlier than this, do the connecting message here
+       if(!IS_CLIENT(self))
+               Send_Notification(NOTIF_ONE, self, MSG_INFO, INFO_CONNECTING, self.netname);
+
+       SetPlayerTeam(self, dteam, steam, !IS_CLIENT(self));
 
        if(IS_PLAYER(self) && steam != dteam)
        {