diff --git a/amxmodx/emsg.cpp b/amxmodx/emsg.cpp index 0c0e47a0..988e456d 100755 --- a/amxmodx/emsg.cpp +++ b/amxmodx/emsg.cpp @@ -112,6 +112,20 @@ void Client_TeamInfo(void* mValue) g_players[index].team.assign(msg); g_teamsIds.registerTeam(msg, -1); g_players[index].teamId = g_teamsIds.findTeamId(msg); + + /** + * CS fix for SPECTATOR team. + * - + * When a player chooses spectator, ScoreInfo is sent before TeamInfo and with 0 as index. + * This means for the first round of first spectator, SPECTATOR name is not associated with its index. + * The following fix manually sets the team index when we hit SPECTATOR team. + */ + if (g_players[index].teamId == -1 && g_bmod_cstrike && !strcmp(msg, "SPECTATOR")) + { + g_players[index].teamId = 3; + g_teamsIds.registerTeam(msg, 3); + } + break; } } diff --git a/amxmodx/modules.cpp b/amxmodx/modules.cpp index c7f8e0cf..c220c012 100755 --- a/amxmodx/modules.cpp +++ b/amxmodx/modules.cpp @@ -1761,8 +1761,14 @@ int MNF_SetPlayerTeamInfo(int player, int teamid, const char *teamname) pPlayer->teamId = teamid; if (teamname != NULL) + { pPlayer->team.assign(teamname); + // Make sure team is registered, otherwise + // natives relying on team id will return wrong result. + g_teamsIds.registerTeam(teamname, teamid); + } + return 1; }