ddnet/src/game/server/teams.h

129 lines
2.8 KiB
C
Raw Normal View History

/* (c) Shereef Marzouk. See "licence DDRace.txt" and the readme.txt in the root of the distribution for more information. */
2010-08-28 13:47:52 +00:00
#ifndef GAME_SERVER_TEAMS_H
#define GAME_SERVER_TEAMS_H
#include <game/teamscore.h>
2010-08-28 13:47:52 +00:00
#include <game/server/gamecontext.h>
class CGameTeams
{
int m_TeamState[MAX_CLIENTS];
int m_MembersCount[MAX_CLIENTS];
bool m_TeeFinished[MAX_CLIENTS];
bool m_TeamLocked[MAX_CLIENTS];
bool m_IsSaving[MAX_CLIENTS];
uint64_t m_Invited[MAX_CLIENTS];
class CGameContext * m_pGameContext;
2010-08-28 13:47:52 +00:00
public:
enum
{
TEAMSTATE_EMPTY, TEAMSTATE_OPEN, TEAMSTATE_STARTED, TEAMSTATE_FINISHED
2010-08-28 13:47:52 +00:00
};
CTeamsCore m_Core;
CGameTeams(CGameContext *pGameContext);
2010-08-28 13:47:52 +00:00
//helper methods
CCharacter* Character(int ClientID)
{
return GameServer()->GetPlayerChar(ClientID);
}
CPlayer* GetPlayer(int ClientID)
{
return GameServer()->m_apPlayers[ClientID];
}
class CGameContext *GameServer()
{
return m_pGameContext;
}
class IServer *Server()
{
return m_pGameContext->Server();
}
void OnCharacterStart(int ClientID);
void OnCharacterFinish(int ClientID);
void OnCharacterSpawn(int ClientID);
void OnCharacterDeath(int ClientID, int Weapon);
void CheckTeamFinished(int ClientID);
bool SetCharacterTeam(int ClientID, int Team);
void ChangeTeamState(int Team, int State);
void onChangeTeamState(int Team, int State, int OldState);
2010-08-28 13:47:52 +00:00
bool TeamFinished(int Team);
2013-12-31 05:13:57 +00:00
int64_t TeamMask(int Team, int ExceptID = -1, int Asker = -1);
2010-11-06 22:54:35 +00:00
int Count(int Team) const;
//need to be very carefull using this method
void SetForceCharacterTeam(int id, int Team);
void ForceLeaveTeam(int id);
void Reset();
void SendTeamsState(int Cid);
2013-11-15 23:44:49 +00:00
void SetTeamLock(int Team, bool Lock);
void ResetInvited(int Team);
void SetClientInvited(int Team, int ClientID, bool Invited);
int m_LastChat[MAX_CLIENTS];
int GetDDRaceState(CPlayer* Player);
int GetStartTime(CPlayer* Player);
float *GetCpCurrent(CPlayer* Player);
void SetDDRaceState(CPlayer* Player, int DDRaceState);
void SetStartTime(CPlayer* Player, int StartTime);
void SetRefreshTime(CPlayer* Player, int RefreshTime);
void SetCpActive(CPlayer* Player, int CpActive);
2013-07-21 06:46:52 +00:00
void OnTeamFinish(CPlayer** Players, unsigned int Size);
void OnFinish(CPlayer* Player);
void KillSavedTeam(int Team);
bool TeeFinished(int ClientID)
{
return m_TeeFinished[ClientID];
}
int GetTeamState(int Team)
{
return m_TeamState[Team];
}
2013-11-15 23:44:49 +00:00
bool TeamLocked(int Team)
{
2014-01-30 02:37:45 +00:00
if (Team <= TEAM_FLOCK || Team >= TEAM_SUPER)
return false;
2013-11-15 23:44:49 +00:00
return m_TeamLocked[Team];
}
bool IsInvited(int Team, int ClientID)
{
return m_Invited[Team] & 1LL << ClientID;
}
2014-07-26 12:46:31 +00:00
void SetFinished(int ClientID, bool finished)
{
m_TeeFinished[ClientID] = finished;
}
void SetSaving(int TeamID, bool Value)
{
m_IsSaving[TeamID] = Value;
}
bool GetSaving(int TeamID)
{
return m_IsSaving[TeamID];
}
2010-08-28 13:47:52 +00:00
};
#endif