From: Lyberta Date: Sun, 18 Mar 2018 10:14:51 +0000 (+0300) Subject: Improved MoveToTeam. X-Git-Tag: xonotic-v0.8.5~1953^2~27 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=77f1f3b0667dfde580e45fc96d4957eadc8b83bf;p=xonotic%2Fxonotic-data.pk3dir.git Improved MoveToTeam. --- diff --git a/qcsrc/server/command/sv_cmd.qc b/qcsrc/server/command/sv_cmd.qc index aac321039..71a359fcf 100644 --- a/qcsrc/server/command/sv_cmd.qc +++ b/qcsrc/server/command/sv_cmd.qc @@ -1138,7 +1138,7 @@ void GameCommand_moveplayer(float request, float argc) // If so, lets continue and finally move the player client.team_forced = 0; - if (MoveToTeam(client, team_id, 6)) + if (MoveToTeam(client, Team_TeamToIndex(team_id), 6)) { successful = strcat(successful, (successful ? ", " : ""), playername(client, false)); LOG_INFO("Player ", ftos(GetFilteredNumber(t)), " (", playername(client, false), ") has been moved to the ", Team_ColoredFullName(team_id), "^7."); @@ -1421,8 +1421,11 @@ void GameCommand_shuffleteams(float request) int team_index = 0; FOREACH_CLIENT_RANDOM(IS_PLAYER(it) || it.caplayer, { - int target_team_number = Team_IndexToTeam(team_index + 1); - if (it.team != target_team_number) MoveToTeam(it, target_team_number, 6); + int target_team_index = team_index + 1; + if (Entity_GetTeamIndex(it) != target_team_index) + { + MoveToTeam(it, target_team_index, 6); + } team_index = (team_index + 1) % number_of_teams; }); diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index af8c3a052..5befffee4 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -231,8 +231,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, int d // WEAPONTODO #define DMG_NOWEP (weaponentities[0]) -float lockteams; - float sv_maxidle; float sv_maxidle_spectatorsareidle; int sv_maxidle_slots; diff --git a/qcsrc/server/player.qc b/qcsrc/server/player.qc index 65eaf16a8..2a8710137 100644 --- a/qcsrc/server/player.qc +++ b/qcsrc/server/player.qc @@ -664,21 +664,6 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, } } -bool MoveToTeam(entity client, int team_colour, int type) -{ - int lockteams_backup = lockteams; // backup any team lock - lockteams = 0; // disable locked teams - TeamchangeFrags(client); // move the players frags - if (!Player_SetTeamIndex(client, Team_TeamToIndex(team_colour))) - { - return false; - } - KillPlayerForTeamChange(client); - lockteams = lockteams_backup; // restore the team lock - LogTeamchange(client.playerid, client.team, type); - return true; -} - /** print(), but only print if the server is not local */ void dedicated_print(string input) { diff --git a/qcsrc/server/player.qh b/qcsrc/server/player.qh index ee073ccb4..f462a1a52 100644 --- a/qcsrc/server/player.qh +++ b/qcsrc/server/player.qh @@ -69,13 +69,6 @@ void calculate_player_respawn_time(entity this); void ClientKill_Now_TeamChange(entity this); -/// \brief Moves player to the specified team. -/// \param[in,out] client Client to move. -/// \param[in] team_colour Color of the team. -/// \param[in] type ??? -/// \return True on success, false otherwise. -bool MoveToTeam(entity client, float team_colour, float type); - void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force); int Say(entity source, float teamsay, entity privatesay, string msgin, float floodcontrol); diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index ffa1399d4..51e360a19 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -222,6 +222,22 @@ bool SetPlayerTeam(entity player, int destination_team_index, return true; } +bool MoveToTeam(entity client, int team_index, int type) +{ + int lockteams_backup = lockteams; // backup any team lock + lockteams = 0; // disable locked teams + TeamchangeFrags(client); // move the players frags + if (!Player_SetTeamIndex(client, team_index)) + { + lockteams = lockteams_backup; // restore the team lock + return false; + } + KillPlayerForTeamChange(client); + lockteams = lockteams_backup; // restore the team lock + LogTeamchange(client.playerid, client.team, type); + return true; +} + void KillPlayerForTeamChange(entity player) { if (IS_DEAD(player)) diff --git a/qcsrc/server/teamplay.qh b/qcsrc/server/teamplay.qh index 396a45d89..a7fc34b56 100644 --- a/qcsrc/server/teamplay.qh +++ b/qcsrc/server/teamplay.qh @@ -1,5 +1,9 @@ #pragma once +bool lockteams; + +// ========================== Global teams API ================================ + /// \brief Returns the global team entity at the given index. /// \param[in] index Index of the team. /// \return Global team entity at the given index. @@ -11,6 +15,8 @@ entity Team_GetTeamFromIndex(int index); /// \return Global team entity that corresponds to the given TEAM_NUM value. entity Team_GetTeam(int team_num); +// ========================= Team specific API ================================ + /// \brief Returns the score of the team. /// \param[in] team_ Team entity. /// \return Score of the team. @@ -53,6 +59,8 @@ void TeamchangeFrags(entity e); void LogTeamchange(float player_id, float team_number, float type); +// ======================= Entity specific API ================================ + void setcolor(entity this, int clr); /// \brief Returns whether the given entity belongs to a valid team. @@ -87,6 +95,13 @@ bool Player_SetTeamIndex(entity player, int index); bool SetPlayerTeam(entity player, int destination_team_index, int source_team_index, bool no_print); +/// \brief Moves player to the specified team. +/// \param[in,out] client Client to move. +/// \param[in] team_index Index of the team. +/// \param[in] type ??? +/// \return True on success, false otherwise. +bool MoveToTeam(entity client, int team_index, float type); + /// \brief Kills player as a result of team change. /// \param[in,out] player Player to kill. void KillPlayerForTeamChange(entity player);