X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fteamplay.qc;h=c7c939d74d6e4f3c553f958b611f8008aec2c1a3;hb=7a1a4afc273e9e63d447784ec21a21538b580fd7;hp=11509b5428a74f26d96fdc29c21bdfb7019317e5;hpb=4da0b1d48eaa7e046fed22cba4709dea8dd5616e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 11509b542..c7c939d74 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -28,8 +28,6 @@ enum /// \brief Indicates that the player is not allowed to join a team. const int TEAM_NOT_ALLOWED = -1; -.float team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator - .int m_team_balance_state; ///< Holds the state of the team balance entity. .entity m_team_balance_team[NUM_TEAMS]; ///< ??? @@ -37,7 +35,7 @@ const int TEAM_NOT_ALLOWED = -1; .int m_num_players; ///< Number of players (both humans and bots) in a team. .int m_num_bots; ///< Number of bots in a team. .int m_num_players_alive; ///< Number of alive players in a team. -.int m_num_control_points; ///< Number of control points owned by a team. +.int m_num_owned_items; ///< Number of items owned by a team. string autocvar_g_forced_team_red; string autocvar_g_forced_team_blue; @@ -94,6 +92,21 @@ void Team_SetNumberOfAlivePlayers(entity team_ent, int number) team_ent.m_num_players_alive = number; } +int Team_GetWinnerAliveTeam() +{ + int winner = 0; + for (int i = 0; i < NUM_TEAMS; ++i) + { + if (g_team_entities[i].m_num_players_alive > 0) + { + if (winner) + return 0; + winner = Team_IndexToTeam(i + 1); + } + } + return (winner ? winner : -1); +} + int Team_GetNumberOfAliveTeams() { int result = 0; @@ -107,22 +120,37 @@ int Team_GetNumberOfAliveTeams() return result; } -int Team_GetNumberOfControlPoints(entity team_ent) +int Team_GetWinnerTeam_WithOwnedItems(int min_control_points) +{ + int winner = 0; + for (int i = 0; i < NUM_TEAMS; ++i) + { + if (g_team_entities[i].m_num_owned_items >= min_control_points) + { + if (winner) + return 0; + winner = Team_IndexToTeam(i + 1); + } + } + return (winner ? winner : -1); +} + +int Team_GetNumberOfOwnedItems(entity team_ent) { - return team_ent.m_num_control_points; + return team_ent.m_num_owned_items; } -void Team_SetNumberOfControlPoints(entity team_ent, int number) +void Team_SetNumberOfOwnedItems(entity team_ent, int number) { - team_ent.m_num_control_points = number; + team_ent.m_num_owned_items = number; } -int Team_GetNumberOfTeamsWithControlPoints() +int Team_GetNumberOfTeamsWithOwnedItems() { int result = 0; for (int i = 0; i < NUM_TEAMS; ++i) { - if (g_team_entities[i].m_num_control_points > 0) + if (g_team_entities[i].m_num_owned_items > 0) { ++result; } @@ -218,8 +246,7 @@ bool SetPlayerTeam(entity player, int team_index, int type) if (team_index != old_team_index) { KillPlayerForTeamChange(player); - PlayerScore_Clear(player); - CS(player).parm_idlesince = time; + PlayerScore_Clear(player); // works only in game modes without teams if (!IS_BOT_CLIENT(player)) TeamBalance_AutoBalanceBots(); @@ -500,7 +527,7 @@ entity TeamBalance_CheckAllowedTeams(entity for_whom) } // TODO: Balance quantity of bots across > 2 teams when bot_vs_human is set (and remove next line) - if (autocvar_bot_vs_human && AvailableTeams() == 2 && for_whom) + if (autocvar_bot_vs_human && AVAILABLE_TEAMS == 2 && for_whom) { if (autocvar_bot_vs_human > 0) { @@ -686,7 +713,7 @@ void TeamBalance_GetTeamCounts(entity balance, entity ignore) } int team_num; // TODO: Reconsider when the player is truly on the team. - if (IS_CLIENT(it) || (it.caplayer)) + if (IS_CLIENT(it) || INGAME(it)) { team_num = it.team; }