ddnet/src/game/teamscore.h
def 2f68b50fe1 Assert client id in SetSolo
I could not find a way that an invalid client ID is used here, but
compiler warns anyway:

In member function ‘void CTeamsCore::SetSolo(int, bool)’,
    inlined from ‘void CCharacter::SetSolo(bool)’ at src/game/client/prediction/entities/character.cpp:29:22,
    inlined from ‘void CCharacter::HandleTiles(int)’ at src/game/client/prediction/entities/character.cpp:882:10:
src/game/teamscore.h:45:34: warning: array subscript [0, 63] is outside array bounds of ‘bool [64]’ [-Warray-bounds]
   45 |                 m_IsSolo[ClientID] = Value;
      |                 ~~~~~~~~~~~~~~~~~^
src/game/teamscore.h: In member function ‘void CCharacter::HandleTiles(int)’:
src/game/teamscore.h:27:14: note: while referencing ‘CTeamsCore::m_IsSolo’
   27 |         bool m_IsSolo[MAX_CLIENTS];
      |              ^~~~~~~~
2022-05-14 11:28:01 +02:00

58 lines
1.3 KiB
C++

/* (c) Shereef Marzouk. See "licence DDRace.txt" and the readme.txt in the root of the distribution for more information. */
#ifndef GAME_TEAMSCORE_H
#define GAME_TEAMSCORE_H
#include <engine/shared/protocol.h>
enum
{
TEAM_FLOCK = 0,
TEAM_SUPER = MAX_CLIENTS,
NUM_TEAMS = TEAM_SUPER + 1,
VANILLA_TEAM_SUPER = VANILLA_MAX_CLIENTS
};
// do not change the values of the following enum
enum
{
SV_TEAM_FORBIDDEN = 0, // teams are disabled on the map
SV_TEAM_ALLOWED = 1, // teams are enabled on the map, but optional
SV_TEAM_MANDATORY = 2, // map must be played with a team
SV_TEAM_FORCED_SOLO = 3 // map forces a random team for each individual player
};
class CTeamsCore
{
int m_Team[MAX_CLIENTS];
bool m_IsSolo[MAX_CLIENTS];
public:
bool m_IsDDRace16;
CTeamsCore();
bool SameTeam(int ClientID1, int ClientID2) const;
bool CanKeepHook(int ClientID1, int ClientID2) const;
bool CanCollide(int ClientID1, int ClientID2) const;
int Team(int ClientID) const;
void Team(int ClientID, int Team);
void Reset();
void SetSolo(int ClientID, bool Value)
{
dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "Invalid client id");
m_IsSolo[ClientID] = Value;
}
bool GetSolo(int ClientID) const
{
if(ClientID < 0 || ClientID >= MAX_CLIENTS)
return false;
return m_IsSolo[ClientID];
}
};
#endif