DDraceNetwork Documentation
Loading...
Searching...
No Matches
teams.h
Go to the documentation of this file.
1/* (c) Shereef Marzouk. See "licence DDRace.txt" and the readme.txt in the root of the distribution for more information. */
2#ifndef GAME_SERVER_TEAMS_H
3#define GAME_SERVER_TEAMS_H
4
6
7#include <game/race_state.h>
9#include <game/team_state.h>
10#include <game/teamscore.h>
11
12#include <memory>
13#include <optional>
14
15class CCharacter;
16class CPlayer;
17struct CScoreSaveResult;
18
20{
21 // `m_TeeStarted` is used to keep track whether a given tee has hit the
22 // start of the map yet. If a tee that leaves hasn't hit the start line
23 // yet, the team will be marked as "not allowed to finish"
24 // (`ETeamState::STARTED_UNFINISHABLE`). If this were not the case, tees
25 // could go around the startline on a map, leave one tee behind at
26 // start, go to the finish line, let the tee start and kill, allowing
27 // the team to finish instantly.
31
37 std::shared_ptr<CScoreSaveResult> m_apSaveTeamResult[NUM_DDRACE_TEAMS];
38 uint64_t m_aLastSwap[MAX_CLIENTS]; // index is id of player who initiated swap
40 // `m_aTeamUnfinishableKillTick` is -1 by default and gets set when a
41 // team becomes unfinishable. If the team hasn't entered practice mode
42 // by that time, it'll get killed to prevent people not understanding
43 // the message from playing for a long time in an unfinishable team.
45
47
54 void KillTeam(int Team, int NewStrongId, int ExceptId = -1);
55 bool TeamFinished(int Team);
56 void OnTeamFinish(int Team, CPlayer **Players, unsigned int Size, int TimeTicks, const char *pTimestamp);
57 void OnFinish(CPlayer *Player, int TimeTicks, const char *pTimestamp);
58
59public:
61
62 CGameTeams(CGameContext *pGameContext);
63
64 // helper methods
65 CCharacter *Character(int ClientId);
66 const CCharacter *Character(int ClientId) const;
67 CPlayer *GetPlayer(int ClientId);
69 const CGameContext *GameServer() const;
70 class IServer *Server();
71
72 void OnCharacterStart(int ClientId);
73 void OnCharacterFinish(int ClientId);
74 void OnCharacterSpawn(int ClientId);
75 void OnCharacterDeath(int ClientId, int Weapon);
76 void Tick();
77
78 // sets pError to an empty string on success (true)
79 // and sets pError if it returns false
80 bool CanJoinTeam(int ClientId, int Team, char *pError, int ErrorSize) const;
81
82 // returns true if successful. Writes error into pError on failure
83 bool SetCharacterTeam(int ClientId, int Team, char *pError, int ErrorSize);
84 void CheckTeamFinished(int Team);
85
86 void ChangeTeamState(int Team, ETeamState State);
87
88 CClientMask TeamMask(int Team, int ExceptId = -1, int Asker = -1, int VersionFlags = CGameContext::FLAG_SIX | CGameContext::FLAG_SIXUP);
89
90 int Count(int Team) const;
91
92 // need to be very careful using this method. SERIOUSLY...
93 void SetForceCharacterTeam(int ClientId, int Team);
94
95 void Reset();
96 void ResetRoundState(int Team);
97 void ResetSwitchers(int Team);
98
99 void SendTeamsState(int ClientId);
100 void SetTeamLock(int Team, bool Lock);
101 void SetTeamFlock(int Team, bool Mode);
102 void ResetInvited(int Team);
103 void SetClientInvited(int Team, int ClientId, bool Invited);
104
105 ERaceState GetDDRaceState(const CPlayer *Player) const;
106 int GetStartTime(CPlayer *Player);
107 float *GetCurrentTimeCp(CPlayer *Player);
108 void SetDDRaceState(CPlayer *Player, ERaceState DDRaceState);
109 void SetStartTime(CPlayer *Player, int StartTime);
110 void SetLastTimeCp(CPlayer *Player, int LastTimeCp);
111 void KillCharacterOrTeam(int ClientId, int Team);
112 void ResetSavedTeam(int ClientId, int Team);
113 void RequestTeamSwap(CPlayer *pPlayer, CPlayer *pTargetPlayer, int Team);
114 void SwapTeamCharacters(CPlayer *pPrimaryPlayer, CPlayer *pTargetPlayer, int Team);
115 void CancelTeamSwap(CPlayer *pPlayer, int Team);
116 void ProcessSaveTeam();
117 std::optional<int> GetFirstEmptyTeam() const;
118 bool TeeStarted(int ClientId) const;
119 bool TeeFinished(int ClientId) const;
120 ETeamState GetTeamState(int Team) const;
121 bool TeamLocked(int Team) const;
122 bool TeamFlock(int Team) const;
123 bool IsInvited(int Team, int ClientId) const;
124 bool IsStarted(int Team) const;
125 void SetStarted(int ClientId, bool Started);
126 void SetFinished(int ClientId, bool Finished);
127 void SetSaving(int TeamId, std::shared_ptr<CScoreSaveResult> &SaveResult);
128 bool GetSaving(int TeamId) const;
129 void SetPractice(int Team, bool Enabled);
130 bool IsPractice(int Team);
131 bool IsValidTeamNumber(int Team) const;
132};
133
134#endif
Definition character.h:24
Definition gamecontext.h:108
@ FLAG_SIXUP
Definition gamecontext.h:291
@ FLAG_SIX
Definition gamecontext.h:290
bool TeamLocked(int Team) const
Definition teams.cpp:1360
bool GetSaving(int TeamId) const
Definition teams.cpp:1402
void OnCharacterSpawn(int ClientId)
Definition teams.cpp:1182
int Count(int Team) const
Definition teams.cpp:501
CGameContext * m_pGameContext
Definition teams.h:46
float * GetCurrentTimeCp(CPlayer *Player)
Definition teams.cpp:712
bool IsPractice(int Team)
Definition teams.cpp:1426
void SetFinished(int ClientId, bool Finished)
Definition teams.cpp:1392
CTeamsCore m_Core
Definition teams.h:60
CGameTeams(CGameContext *pGameContext)
Definition teams.cpp:18
int GetStartTime(CPlayer *Player)
Definition teams.cpp:681
void OnTeamFinish(int Team, CPlayer **Players, unsigned int Size, int TimeTicks, const char *pTimestamp)
Definition teams.cpp:723
bool m_aTeeFinished[MAX_CLIENTS]
Definition teams.h:29
void CheckTeamFinished(int Team)
Definition teams.cpp:321
uint64_t m_aLastSwap[MAX_CLIENTS]
Definition teams.h:38
void Reset()
Definition teams.cpp:24
bool m_aTeamLocked[NUM_DDRACE_TEAMS]
Definition teams.h:33
void KillTeam(int Team, int NewStrongId, int ExceptId=-1)
Definition teams.cpp:520
void OnFinish(CPlayer *Player, int TimeTicks, const char *pTimestamp)
Definition teams.cpp:745
void SwapTeamCharacters(CPlayer *pPrimaryPlayer, CPlayer *pTargetPlayer, int Team)
Definition teams.cpp:951
bool SetCharacterTeam(int ClientId, int Team, char *pError, int ErrorSize)
Definition teams.cpp:446
void ResetRoundState(int Team)
Definition teams.cpp:48
bool CanJoinTeam(int ClientId, int Team, char *pError, int ErrorSize) const
Definition teams.cpp:384
void ResetInvited(int Team)
Definition teams.cpp:1290
void SetStarted(int ClientId, bool Started)
Definition teams.cpp:1387
bool TeeStarted(int ClientId) const
Definition teams.cpp:1345
bool m_aTeamFlock[NUM_DDRACE_TEAMS]
Definition teams.h:34
bool m_aTeamSentStartWarning[NUM_DDRACE_TEAMS]
Definition teams.h:39
void RequestTeamSwap(CPlayer *pPlayer, CPlayer *pTargetPlayer, int Team)
Definition teams.cpp:904
void CancelTeamSwap(CPlayer *pPlayer, int Team)
Definition teams.cpp:1022
void ProcessSaveTeam()
Definition teams.cpp:1060
void SetDDRaceState(CPlayer *Player, ERaceState DDRaceState)
Definition teams.cpp:671
bool TeamFlock(int Team) const
Definition teams.cpp:1368
CClientMask m_aInvited[NUM_DDRACE_TEAMS]
Definition teams.h:35
void SetTeamFlock(int Team, bool Mode)
Definition teams.cpp:1284
void SetTeamLock(int Team, bool Lock)
Definition teams.cpp:1278
std::optional< int > GetFirstEmptyTeam() const
Definition teams.cpp:1337
void ChangeTeamState(int Team, ETeamState State)
Definition teams.cpp:515
ETeamState GetTeamState(int Team) const
Definition teams.cpp:1355
int m_aLastChat[MAX_CLIENTS]
Definition teams.h:30
void OnCharacterStart(int ClientId)
Definition teams.cpp:78
bool TeeFinished(int ClientId) const
Definition teams.cpp:1350
CClientMask TeamMask(int Team, int ExceptId=-1, int Asker=-1, int VersionFlags=CGameContext::FLAG_SIX|CGameContext::FLAG_SIXUP)
Definition teams.cpp:557
void OnCharacterDeath(int ClientId, int Weapon)
Definition teams.cpp:1201
void SetLastTimeCp(CPlayer *Player, int LastTimeCp)
Definition teams.cpp:702
void SetStartTime(CPlayer *Player, int StartTime)
Definition teams.cpp:692
bool TeamFinished(int Team)
Definition teams.cpp:545
void SetClientInvited(int Team, int ClientId, bool Invited)
Definition teams.cpp:1295
void ResetSwitchers(int Team)
Definition teams.cpp:68
void Tick()
Definition teams.cpp:222
bool IsInvited(int Team, int ClientId) const
Definition teams.cpp:1377
void SetSaving(int TeamId, std::shared_ptr< CScoreSaveResult > &SaveResult)
Definition teams.cpp:1397
void OnCharacterFinish(int ClientId)
Definition teams.cpp:196
CPlayer * GetPlayer(int ClientId)
Definition teams.cpp:884
ERaceState GetDDRaceState(const CPlayer *Player) const
Definition teams.cpp:660
CGameContext * GameServer()
Definition teams.cpp:889
bool IsValidTeamNumber(int Team) const
Definition teams.cpp:1441
ETeamState m_aTeamState[NUM_DDRACE_TEAMS]
Definition teams.h:32
bool m_aTeeStarted[MAX_CLIENTS]
Definition teams.h:28
CCharacter * Character(int ClientId)
Definition teams.cpp:874
void ResetSavedTeam(int ClientId, int Team)
Definition teams.cpp:1318
class IServer * Server()
Definition teams.cpp:899
std::shared_ptr< CScoreSaveResult > m_apSaveTeamResult[NUM_DDRACE_TEAMS]
Definition teams.h:37
void KillCharacterOrTeam(int ClientId, int Team)
Definition teams.cpp:1306
void SetPractice(int Team, bool Enabled)
Definition teams.cpp:1412
bool IsStarted(int Team) const
Definition teams.cpp:1382
void SendTeamsState(int ClientId)
Definition teams.cpp:635
void SetForceCharacterTeam(int ClientId, int Team)
Definition teams.cpp:455
int m_aTeamUnfinishableKillTick[NUM_DDRACE_TEAMS]
Definition teams.h:44
bool m_aPractice[NUM_DDRACE_TEAMS]
Definition teams.h:36
Definition player.h:26
Definition teamscore.h:25
Definition server.h:33
std::bitset< MAX_CLIENTS > CClientMask
Definition protocol.h:166
@ MAX_CLIENTS
Definition protocol.h:89
ERaceState
Definition race_state.h:5
Definition scoreworker.h:148
ETeamState
Definition team_state.h:5
@ NUM_DDRACE_TEAMS
Definition teamscore.h:11