]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/cl_client.qc
Merge remote branch 'origin/master' into samual/mutator_ctf
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / cl_client.qc
index 1b10b6e254869f29b1482635c27f36fdaf963f9e..ed3027a194d1fee080b12c663e37301da8729b9a 100644 (file)
@@ -132,9 +132,9 @@ vector Spawn_Score(entity spot, entity playerlist, float teamcheck, float anypoi
        prio = 0;
 
        // filter out spots for the wrong team
-       if(teamcheck)
-       if(spot.team != teamcheck)
-               return '-1 0 0';
+       if(teamcheck >= 0)
+               if(spot.team != teamcheck)
+                       return '-1 0 0';
 
        if(race_spawns)
                if(spot.target == "")
@@ -269,7 +269,7 @@ entity Spawn_FilterOutBadSpots(entity firstspot, entity playerlist, float mindis
                                        spotlist = spot;
 
                                /*
-                               if(teamcheck)
+                               if(teamcheck >= 0)
                                if(spot.team != teamcheck)
                                        error("invalid spawn added");
 
@@ -283,7 +283,7 @@ entity Spawn_FilterOutBadSpots(entity firstspot, entity playerlist, float mindis
 
        /*
                entity e;
-               if(teamcheck)
+               if(teamcheck >= 0)
                        for(e = spotlist; e; e = e.chain)
                        {
                                print("seen ", etos(e), "\n");
@@ -325,10 +325,30 @@ entity SelectSpawnPoint (float anypoint)
        if (spot)
                return spot;
 
-       teamcheck = 0;
+       if(anypoint)
+               teamcheck = -1;
+       else if(have_team_spawns > 0)
+       {
+               if(have_team_spawns_forteam[self.team] == 0)
+               {
+                       // we request a spawn for a team, and we have team
+                       // spawns, but that team has no spawns?
+                       if(have_team_spawns[0])
+                               // try noteam spawns
+                               teamcheck = 0;
+                       else
+                               // if not, any spawn has to do
+                               teamcheck = -1;
+               }
+               else
+                       teamcheck = self.team; // MUST be team
+       }
+       else if(have_team_spawns == 0 && have_team_spawns[0])
+               teamcheck = 0; // MUST be noteam
+       else
+               teamcheck = -1;
+               // if we get here, we either require team spawns but have none, or we require non-team spawns and have none; use any spawn then
 
-       if(!anypoint && have_team_spawns > 0)
-               teamcheck = self.team;
 
        // get the list of players
        playerlist = findchain(classname, "player");
@@ -368,7 +388,7 @@ entity SelectSpawnPoint (float anypoint)
                print("spot mindistance: ", vtos(spot.spawnpoint_score), "\n");
 
                entity e;
-               if(teamcheck)
+               if(teamcheck >= 0)
                        for(e = firstspot; e; e = e.chain)
                                if(e.team != teamcheck)
                                        error("invalid spawn found");
@@ -603,7 +623,7 @@ void PutObserverInServer (void)
        }
 
        if(self.flagcarried)
-               DropFlag(self.flagcarried, world, world);
+               ctf_Handle_Drop(self); // FIXCTF
 
        if(self.ballcarried && g_nexball)
                DropBall(self.ballcarried, self.origin + self.ballcarried.origin, self.velocity);
@@ -1800,7 +1820,7 @@ void ClientDisconnect (void)
        Portal_ClearAll(self);
 
        if(self.flagcarried)
-               DropFlag(self.flagcarried, world, world);
+               ctf_Handle_Drop(self); // FIXCTF
        if(self.ballcarried && g_nexball)
                DropBall(self.ballcarried, self.origin + self.ballcarried.origin, self.velocity);
 
@@ -2604,7 +2624,7 @@ PlayerPreThink
 Called every frame for each client before the physics are run
 =============
 */
-void() ctf_setstatus;
+//void() ctf_setstatus;
 void() nexball_setstatus;
 .float items_added;
 void PlayerPreThink (void)
@@ -2693,13 +2713,6 @@ void PlayerPreThink (void)
                        return;                                 // the think tics
                }
 
-               if(self.teleport_time)
-               if(time > self.teleport_time)
-               {
-                       self.teleport_time = 0;
-                       self.effects = self.effects - (self.effects & EF_NODRAW);
-               }
-
                if(frametime > 0) // don't do this in cl_movement frames, just in server ticks
                        UpdateSelectedPlayer();
 
@@ -2893,8 +2906,8 @@ void PlayerPreThink (void)
                if (g_minstagib)
                        minstagib_ammocheck();
 
-               if(g_ctf)
-                       ctf_setstatus();
+               //if(g_ctf)
+               //      ctf_setstatus();
 
                if(g_nexball)
                        nexball_setstatus();