]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into Lyberta/TeamplayOverhaul2
authorLyberta <lyberta@lyberta.net>
Mon, 3 Sep 2018 18:13:11 +0000 (21:13 +0300)
committerLyberta <lyberta@lyberta.net>
Mon, 3 Sep 2018 18:13:11 +0000 (21:13 +0300)
1  2 
qcsrc/server/client.qc
qcsrc/server/client.qh
qcsrc/server/clientkill.qc
qcsrc/server/command/cmd.qc
qcsrc/server/defs.qh

diff --combined qcsrc/server/client.qc
index 9207d9ce32b31fbd104356b871b50df28f2bf61a,85514bdf9e0b02c553e3def6a750ad84b5043e49..ad7f8c47cd28c78148c334c21fa1a6ae9ae4b568
@@@ -17,6 -17,7 +17,7 @@@
  #include "g_hook.qh"
  #include "command/common.qh"
  #include "command/vote.qh"
+ #include "clientkill.qh"
  #include "cheats.qh"
  #include "g_world.qh"
  #include "race.qh"
@@@ -284,16 -285,25 +285,16 @@@ void PutObserverInServer(entity this
  
        WaypointSprite_PlayerDead(this);
  
 -      if (mutator_returnvalue) {
 -          // mutator prevents resetting teams+score
 -      } else {
 -              Player_SetTeamIndex(this, -1);
 -              this.frags = FRAGS_SPECTATOR;
 -        PlayerScore_Clear(this);  // clear scores when needed
 -    }
 -
        if (CS(this).killcount != FRAGS_SPECTATOR)
        {
 -              Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_QUIT_SPECTATE, this.netname);
                if(!game_stopped)
                if(autocvar_g_chat_nospectators == 1 || (!warmup_stage && autocvar_g_chat_nospectators == 2))
                        Send_Notification(NOTIF_ONE_ONLY, this, MSG_INFO, INFO_CHAT_NOSPECTATORS);
  
 -              if(!CS(this).just_joined)
 -                      LogTeamchange(this.playerid, -1, TEAM_CHANGE_SPECTATOR);
 -              else
 +              if(CS(this).just_joined)
 +              {
                        CS(this).just_joined = false;
 +              }
        }
  
        accuracy_resend(this);
                if(axh.owner == this && axh != NULL && !wasfreed(axh))
                        delete(axh);
        }
 +      
 +      if (mutator_returnvalue)
 +      {
 +              // mutator prevents resetting teams+score
 +      }
 +      else
 +      {
 +              SetPlayerTeam(this, -1, TEAM_CHANGE_SPECTATOR);
 +              this.frags = FRAGS_SPECTATOR;
 +    }
  }
  
  int player_getspecies(entity this)
@@@ -901,207 -901,6 +902,6 @@@ void DecodeLevelParms(entity this
        MUTATOR_CALLHOOK(DecodeLevelParms);
  }
  
- /*
- =============
- ClientKill
- Called when a client types 'kill' in the console
- =============
- */
- .float clientkill_nexttime;
- void ClientKill_Now_TeamChange(entity this)
- {
-       if(this.killindicator_teamchange == -1)
-       {
-               TeamBalance_JoinBestTeam(this);
-       }
-       else if(this.killindicator_teamchange == -2)
-       {
-               if(blockSpectators)
-                       Send_Notification(NOTIF_ONE_ONLY, this, MSG_INFO, INFO_SPECTATE_WARNING, autocvar_g_maxplayers_spectator_blocktime);
-               PutObserverInServer(this);
-       }
-       else
-       {
-               Player_SetTeamIndexChecked(this, Team_TeamToIndex(
-                       this.killindicator_teamchange));
-       }
-       this.killindicator_teamchange = 0;
- }
- void ClientKill_Now(entity this)
- {
-       if(this.vehicle)
-       {
-           vehicles_exit(this.vehicle, VHEF_RELEASE);
-           if(!this.killindicator_teamchange)
-           {
-             this.vehicle_health = -1;
-             Damage(this, this, this, 1 , DEATH_KILL.m_id, DMG_NOWEP, this.origin, '0 0 0');
-           }
-       }
-       if(this.killindicator && !wasfreed(this.killindicator))
-               delete(this.killindicator);
-       this.killindicator = NULL;
-       if(this.killindicator_teamchange)
-               ClientKill_Now_TeamChange(this);
-       if (!IS_SPEC(this) && !IS_OBSERVER(this) && MUTATOR_CALLHOOK(ClientKill_Now, this) == false)
-       {
-               Damage(this, this, this, 100000, DEATH_KILL.m_id, DMG_NOWEP, this.origin, '0 0 0');
-       }
-       // now I am sure the player IS dead
- }
- void KillIndicator_Think(entity this)
- {
-       if (game_stopped)
-       {
-               this.owner.killindicator = NULL;
-               delete(this);
-               return;
-       }
-       if (this.owner.alpha < 0 && !this.owner.vehicle)
-       {
-               this.owner.killindicator = NULL;
-               delete(this);
-               return;
-       }
-       if(this.cnt <= 0)
-       {
-               ClientKill_Now(this.owner);
-               return;
-       }
-     else if(this.count == 1) // count == 1 means that it's silent
-     {
-         this.nextthink = time + 1;
-         this.cnt -= 1;
-     }
-       else
-       {
-               if(this.cnt <= 10)
-                       setmodel(this, MDL_NUM(this.cnt));
-               if(IS_REAL_CLIENT(this.owner))
-               {
-                       if(this.cnt <= 10)
-                               { Send_Notification(NOTIF_ONE, this.owner, MSG_ANNCE, Announcer_PickNumber(CNT_KILL, this.cnt)); }
-               }
-               this.nextthink = time + 1;
-               this.cnt -= 1;
-       }
- }
- float clientkilltime;
- void ClientKill_TeamChange (entity this, float targetteam) // 0 = don't change, -1 = auto, -2 = spec
- {
-       float killtime;
-       float starttime;
-       if (game_stopped)
-               return;
-       killtime = autocvar_g_balance_kill_delay;
-     if(MUTATOR_CALLHOOK(ClientKill, this, killtime))
-       return;
-     killtime = M_ARGV(1, float);
-       this.killindicator_teamchange = targetteam;
-     if(!this.killindicator)
-       {
-               if(!IS_DEAD(this))
-               {
-                       killtime = max(killtime, this.clientkill_nexttime - time);
-                       this.clientkill_nexttime = time + killtime + autocvar_g_balance_kill_antispam;
-               }
-               if(killtime <= 0 || !IS_PLAYER(this) || IS_DEAD(this))
-               {
-                       ClientKill_Now(this);
-               }
-               else
-               {
-                       starttime = max(time, clientkilltime);
-                       this.killindicator = spawn();
-                       this.killindicator.owner = this;
-                       this.killindicator.scale = 0.5;
-                       setattachment(this.killindicator, this, "");
-                       setorigin(this.killindicator, '0 0 52');
-                       setthink(this.killindicator, KillIndicator_Think);
-                       this.killindicator.nextthink = starttime + (this.lip) * 0.05;
-                       clientkilltime = max(clientkilltime, this.killindicator.nextthink + 0.05);
-                       this.killindicator.cnt = ceil(killtime);
-                       this.killindicator.count = bound(0, ceil(killtime), 10);
-                       //sprint(this, strcat("^1You'll be dead in ", ftos(this.killindicator.cnt), " seconds\n"));
-                       IL_EACH(g_clones, it.enemy == this && !(it.effects & CSQCMODEL_EF_RESPAWNGHOST),
-                       {
-                               it.killindicator = spawn();
-                               it.killindicator.owner = it;
-                               it.killindicator.scale = 0.5;
-                               setattachment(it.killindicator, it, "");
-                               setorigin(it.killindicator, '0 0 52');
-                               setthink(it.killindicator, KillIndicator_Think);
-                               it.killindicator.nextthink = starttime + (it.lip) * 0.05;
-                               //clientkilltime = max(clientkilltime, it.killindicator.nextthink + 0.05);
-                               it.killindicator.cnt = ceil(killtime);
-                       });
-                       this.lip = 0;
-               }
-       }
-       if(this.killindicator)
-       {
-               if(targetteam == 0) // just die
-               {
-                       this.killindicator.colormod = '0 0 0';
-                       if(IS_REAL_CLIENT(this))
-                       if(this.killindicator.cnt > 0)
-                               Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_TEAMCHANGE_SUICIDE, this.killindicator.cnt);
-               }
-               else if(targetteam == -1) // auto
-               {
-                       this.killindicator.colormod = '0 1 0';
-                       if(IS_REAL_CLIENT(this))
-                       if(this.killindicator.cnt > 0)
-                               Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_TEAMCHANGE_AUTO, this.killindicator.cnt);
-               }
-               else if(targetteam == -2) // spectate
-               {
-                       this.killindicator.colormod = '0.5 0.5 0.5';
-                       if(IS_REAL_CLIENT(this))
-                       if(this.killindicator.cnt > 0)
-                               Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CENTER_TEAMCHANGE_SPECTATE, this.killindicator.cnt);
-               }
-               else
-               {
-                       this.killindicator.colormod = Team_ColorRGB(targetteam);
-                       if(IS_REAL_CLIENT(this))
-                       if(this.killindicator.cnt > 0)
-                               Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, APP_TEAM_NUM(targetteam, CENTER_TEAMCHANGE), this.killindicator.cnt);
-               }
-       }
- }
- void ClientKill (entity this)
- {
-       // TODO: once .health is removed, will need to check it here for the "already dead" message!
-       if(game_stopped) return;
-       if(this.player_blocked) return;
-       if(STAT(FROZEN, this)) return;
-       ClientKill_TeamChange(this, 0);
- }
  void FixClientCvars(entity e)
  {
        // send prediction settings to the client
@@@ -1271,7 -1070,38 +1071,7 @@@ void ClientConnect(entity this
  
        bot_clientconnect(this);
  
 -      // identify the right forced team
 -      if (autocvar_g_campaign)
 -      {
 -              if (IS_REAL_CLIENT(this)) // only players, not bots
 -              {
 -                      switch (autocvar_g_campaign_forceteam)
 -                      {
 -                              case 1: this.team_forced = NUM_TEAM_1; break;
 -                              case 2: this.team_forced = NUM_TEAM_2; break;
 -                              case 3: this.team_forced = NUM_TEAM_3; break;
 -                              case 4: this.team_forced = NUM_TEAM_4; break;
 -                              default: this.team_forced = 0;
 -                      }
 -              }
 -      }
 -      else if (PlayerInList(this, autocvar_g_forced_team_red))    this.team_forced = NUM_TEAM_1;
 -      else if (PlayerInList(this, autocvar_g_forced_team_blue))   this.team_forced = NUM_TEAM_2;
 -      else if (PlayerInList(this, autocvar_g_forced_team_yellow)) this.team_forced = NUM_TEAM_3;
 -      else if (PlayerInList(this, autocvar_g_forced_team_pink))   this.team_forced = NUM_TEAM_4;
 -      else switch (autocvar_g_forced_team_otherwise)
 -      {
 -              default: this.team_forced = 0; break;
 -              case "red": this.team_forced = NUM_TEAM_1; break;
 -              case "blue": this.team_forced = NUM_TEAM_2; break;
 -              case "yellow": this.team_forced = NUM_TEAM_3; break;
 -              case "pink": this.team_forced = NUM_TEAM_4; break;
 -              case "spectate":
 -              case "spectator":
 -                      this.team_forced = -1;
 -                      break;
 -      }
 -      if (!teamplay && this.team_forced > 0) this.team_forced = 0;
 +      Player_DetermineForcedTeam(this);
  
        TRANSMUTE(Observer, this);
  
@@@ -2075,7 -1905,7 +1875,7 @@@ void ShowRespawnCountdown(entity this
  .bool team_selected;
  bool ShowTeamSelection(entity this)
  {
 -      if(!teamplay || autocvar_g_campaign || autocvar_g_balance_teams || this.team_selected || (CS(this).wasplayer && autocvar_g_changeteam_banned) || this.team_forced > 0)
 +      if (!teamplay || autocvar_g_campaign || autocvar_g_balance_teams || this.team_selected || (CS(this).wasplayer && autocvar_g_changeteam_banned) || Player_HasRealForcedTeam(this))
                return false;
        stuffcmd(this, "menu_showteamselect\n");
        return true;
@@@ -2098,6 -1928,7 +1898,6 @@@ void Join(entity this
        if(IS_PLAYER(this))
        if(teamplay && this.team != -1)
        {
 -              //Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_JOIN_PLAY_TEAM), this.netname);
        }
        else
                Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_JOIN_PLAY, this.netname);
@@@ -2122,7 -1953,7 +1922,7 @@@ int nJoinAllowed(entity this, entity ig
                        return 0;
        }
  
 -      if(this && this.team_forced < 0)
 +      if(this && (Player_GetForcedTeamIndex(this) == TEAM_FORCE_SPECTATOR))
                return 0; // forced spectators can never join
  
        // TODO simplify this
@@@ -2674,7 -2505,7 +2474,7 @@@ void PlayerPreThink (entity this
                // don't do this in ClientConnect
                // many things can go wrong if a client is spawned as player on connection
                if (MUTATOR_CALLHOOK(AutoJoinOnConnection, this)
 -                      || (!(autocvar_sv_spectate || autocvar_g_campaign || this.team_forced < 0)
 +                      || (!(autocvar_sv_spectate || autocvar_g_campaign || (Player_GetForcedTeamIndex(this) == TEAM_FORCE_SPECTATOR))
                                && (!teamplay || autocvar_g_balance_teams)))
                {
                        campaign_bots_may_start = true;
diff --combined qcsrc/server/client.qh
index 5f74773d88f5547744782739bc71ea5960767f4d,efb61a436d8db7021028b58c8b60424b6bdfb67a..099fac9f541f5ae71358f2fad6f2e0894a978e14
@@@ -226,8 -226,6 +226,8 @@@ METHOD(Client, m_unwind, bool(Client th
      return false;
  }
  
 +bool PlayerInList(entity player, string list);
 +
  /// \brief Print the string to the client's chat.
  /// \param[in] client Client to print to.
  /// \param[in] text Text to print.
@@@ -276,8 -274,6 +276,6 @@@ void FixPlayermodel(entity player)
  
  void ClientInit_misc(entity this);
  
- void ClientKill_TeamChange(entity this, float targetteam);  // 0 = don't change, -1 = auto, -2 = spec
  bool joinAllowed(entity this);
  void Join(entity this);
  
index 0000000000000000000000000000000000000000,0bb761483b19bb8433c8bf968dad5fa3679b8f19..8d7293bb066214c1f5e47535be2ab93453f47c46
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,201 +1,204 @@@
 -              SV_ChangeTeam(this, this.killindicator_teamchange - 1);
+ #include "clientkill.qh"
+ #include <server/defs.qh>
+ #include "g_damage.qh"
+ #include "teamplay.qh"
+ #include <common/vehicles/sv_vehicles.qh>
+ #include <common/notifications/all.qh>
+ #include <common/stats.qh>
+ void ClientKill_Now_TeamChange(entity this)
+ {
+       if (this.killindicator_teamchange == -1)
+       {
+               TeamBalance_JoinBestTeam(this);
+       }
+       else if (this.killindicator_teamchange == -2)
+       {
+               if (blockSpectators)
+                       Send_Notification(NOTIF_ONE_ONLY, this, MSG_INFO, INFO_SPECTATE_WARNING, autocvar_g_maxplayers_spectator_blocktime);
+               PutObserverInServer(this);
+       }
+       else
++      {
++              Player_SetTeamIndexChecked(this, Team_TeamToIndex(
++                      this.killindicator_teamchange));
++      }
+       this.killindicator_teamchange = 0;
+ }
+ void ClientKill_Now(entity this)
+ {
+       if (this.vehicle)
+       {
+               vehicles_exit(this.vehicle, VHEF_RELEASE);
+               if (!this.killindicator_teamchange)
+               {
+                       this.vehicle_health = -1;
+                       Damage(this, this, this, 1 , DEATH_KILL.m_id, DMG_NOWEP, this.origin, '0 0 0');
+               }
+       }
+       if (this.killindicator && !wasfreed(this.killindicator))
+               delete(this.killindicator);
+       this.killindicator = NULL;
+       if (this.killindicator_teamchange)
+               ClientKill_Now_TeamChange(this);
+       if (!IS_SPEC(this) && !IS_OBSERVER(this) && MUTATOR_CALLHOOK(ClientKill_Now, this) == false)
+       {
+               Damage(this, this, this, 100000, DEATH_KILL.m_id, DMG_NOWEP, this.origin, '0 0 0');
+       }
+       // now I am sure the player IS dead
+ }
+ void KillIndicator_Think(entity this)
+ {
+       if (game_stopped || (this.owner.alpha < 0 && !this.owner.vehicle))
+       {
+               this.owner.killindicator = NULL;
+               delete(this);
+               return;
+       }
+       if (this.cnt <= 0)
+       {
+               ClientKill_Now(this.owner);
+               return;
+       }
+       // count == 1 means that it's silent
+       if (this.count != 1)
+       {
+               if (this.cnt <= 10)
+                       setmodel(this, MDL_NUM(this.cnt));
+               if (IS_REAL_CLIENT(this.owner))
+               {
+                       if (this.cnt <= 10)
+                               Send_Notification(NOTIF_ONE, this.owner, MSG_ANNCE, Announcer_PickNumber(CNT_KILL, this.cnt));
+               }
+       }
+       this.nextthink = time + 1;
+       this.cnt -= 1;
+ }
+ .float lip;
+ float clientkilltime;
+ .float clientkill_nexttime;
+ void ClientKill_TeamChange(entity this, float targetteam) // 0 = don't change, -1 = auto, -2 = spec
+ {
+       if (game_stopped)
+               return;
+       float killtime = autocvar_g_balance_kill_delay;
+       if (MUTATOR_CALLHOOK(ClientKill, this, killtime))
+               return;
+       killtime = M_ARGV(1, float);
+       this.killindicator_teamchange = targetteam;
+       // this.killindicator.count == 1 means that the kill indicator was spawned by ClientKill_Silent
+       if(killtime <= 0 && this.killindicator && this.killindicator.count == 1)
+       {
+               ClientKill_Now(this); // allow instant kill in this case
+               return;
+       }
+       if (!this.killindicator)
+       {
+               if (!IS_DEAD(this))
+               {
+                       killtime = max(killtime, this.clientkill_nexttime - time);
+                       this.clientkill_nexttime = time + killtime + autocvar_g_balance_kill_antispam;
+               }
+               if (killtime <= 0 || !IS_PLAYER(this) || IS_DEAD(this))
+               {
+                       ClientKill_Now(this);
+               }
+               else
+               {
+                       float starttime = max(time, clientkilltime);
+                       this.killindicator = spawn();
+                       this.killindicator.owner = this;
+                       this.killindicator.scale = 0.5;
+                       setattachment(this.killindicator, this, "");
+                       setorigin(this.killindicator, '0 0 52');
+                       setthink(this.killindicator, KillIndicator_Think);
+                       this.killindicator.nextthink = starttime + (this.lip) * 0.05;
+                       clientkilltime = max(clientkilltime, this.killindicator.nextthink + 0.05);
+                       this.killindicator.cnt = ceil(killtime);
+                       this.killindicator.count = bound(0, ceil(killtime), 10);
+                       //sprint(this, strcat("^1You'll be dead in ", ftos(this.killindicator.cnt), " seconds\n"));
+                       IL_EACH(g_clones, it.enemy == this && !(it.effects & CSQCMODEL_EF_RESPAWNGHOST),
+                       {
+                               it.killindicator = spawn();
+                               it.killindicator.owner = it;
+                               it.killindicator.scale = 0.5;
+                               setattachment(it.killindicator, it, "");
+                               setorigin(it.killindicator, '0 0 52');
+                               setthink(it.killindicator, KillIndicator_Think);
+                               it.killindicator.nextthink = starttime + (it.lip) * 0.05;
+                               //clientkilltime = max(clientkilltime, it.killindicator.nextthink + 0.05);
+                               it.killindicator.cnt = ceil(killtime);
+                       });
+                       this.lip = 0;
+               }
+       }
+       if (this.killindicator)
+       {
+               Notification notif;
+               if (targetteam == 0) // just die
+               {
+                       this.killindicator.colormod = '0 0 0';
+                       notif = CENTER_TEAMCHANGE_SUICIDE;
+               }
+               else if (targetteam == -1) // auto
+               {
+                       this.killindicator.colormod = '0 1 0';
+                       notif = CENTER_TEAMCHANGE_AUTO;
+               }
+               else if (targetteam == -2) // spectate
+               {
+                       this.killindicator.colormod = '0.5 0.5 0.5';
+                       notif = CENTER_TEAMCHANGE_SPECTATE;
+               }
+               else
+               {
+                       this.killindicator.colormod = Team_ColorRGB(targetteam);
+                       notif = APP_TEAM_NUM(targetteam, CENTER_TEAMCHANGE);
+               }
+               if (IS_REAL_CLIENT(this) && this.killindicator.cnt > 0)
+                       Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, notif, this.killindicator.cnt);
+       }
+ }
+ void ClientKill_Silent(entity this, float _delay)
+ {
+       this.killindicator = spawn();
+       this.killindicator.owner = this;
+       setthink(this.killindicator, KillIndicator_Think);
+       this.killindicator.nextthink = time + (this.lip) * 0.05;
+       this.killindicator.cnt = ceil(_delay);
+       this.killindicator.count = 1; // this is used to indicate that it should be silent
+       this.lip = 0;
+ }
+ // Called when a client types 'kill' in the console
+ void ClientKill(entity this)
+ {
+       // TODO: once .health is removed, will need to check it here for the "already dead" message!
+       if (game_stopped || this.player_blocked || STAT(FROZEN, this))
+               return;
+       ClientKill_TeamChange(this, 0);
+ }
index ed1024df52fac0faac030bcbd4fcd58a15e750d7,353d81395b0f568acb931cc517219bc0c8d0e139..6f1d60dd9bffe1a9dd9970408ec715f3071f29f1
@@@ -11,6 -11,7 +11,7 @@@
  #include "../campaign.qh"
  #include "../cheats.qh"
  #include "../client.qh"
+ #include "../clientkill.qh"
  #include "../player.qh"
  #include "../ipban.qh"
  #include "../mapvoting.qh"
@@@ -118,7 -119,7 +119,7 @@@ void ClientCommand_clientversion(entit
                                        {
                                                // JoinBestTeam(caller, false, true);
                                        }
 -                                      else if (teamplay && !autocvar_sv_spectate && !(caller.team_forced > 0))
 +                                      else if (teamplay && !autocvar_sv_spectate && !(Player_GetForcedTeamIndex(caller) > 0))
                                        {
                                                TRANSMUTE(Observer, caller);  // really?
                                                stuffcmd(caller, "menu_showteamselect\n");
@@@ -304,7 -305,20 +305,20 @@@ void ClientCommand_say_team(entity call
        {
                case CMD_REQUEST_COMMAND:
                {
-                       if (argc >= 2)   Say(caller, true, NULL, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), 1);
+                       if (argc >= 2)
+                       {
+                               string _classname = string_null;
+                               if (!IS_PLAYER(caller) && caller.caplayer)
+                               {
+                                       // CA: make work team chat for killed players
+                                       _classname = caller.classname;
+                                       caller.classname = STR_PLAYER;
+                               }
+                               Say(caller, true, NULL, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), 1);
+                               if (_classname)
+                                       caller.classname = _classname;
+                       }
                        return;  // never fall through to usage
                }
  
@@@ -338,7 -352,7 +352,7 @@@ void ClientCommand_selectteam(entity ca
                                sprint(caller, "^7selectteam can only be used in teamgames\n");
                                return;
                        }
 -                      if (caller.team_forced > 0)
 +                      if (Player_GetForcedTeamIndex(caller) > 0)
                        {
                                sprint(caller, "^7selectteam can not be used as your team is forced\n");
                                return;
diff --combined qcsrc/server/defs.qh
index f1299bf30d0ae141dbcb01c9a4e32baf74f223f0,173c2d5caec0dbb7b62093a9240aa661938ad9f6..58111fb12bcfea9482a8d89b6d0dbceaf31ab42e
@@@ -219,9 -219,6 +219,6 @@@ bool some_spawn_has_been_used
  int have_team_spawns; // 0 = no team spawns requested, -1 = team spawns requested but none found, 1 = team spawns requested and found
  int have_team_spawns_forteams; // if Xth bit is 1 then team X has spawns else it has no spawns; team 0 is the "no-team"
  
- // set when showing a kill countdown
- .entity killindicator;
  .bool canteamdamage;
  
  void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force);
@@@ -354,6 -351,8 +351,6 @@@ const int ACTIVE_TOGGLE    = 3
  
  //float serverflags;
  
 -.int team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator
 -
  .bool player_blocked;
  
  .float revival_time; // time at which player was last revived
  .entity muzzle_flash;
  .float misc_bulletcounter;    // replaces uzi & hlac bullet counter.
  
- .int killindicator_teamchange;
  void PlayerUseKey(entity this);
  
  USING(spawn_evalfunc_t, vector(entity this, entity player, entity spot, vector current));