DDNet 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;
17class IServer;
18struct CScoreSaveResult;
19
21{
22 // `m_TeeStarted` is used to keep track whether a given tee has hit the
23 // start of the map yet. If a tee that leaves hasn't hit the start line
24 // yet, the team will be marked as "not allowed to finish"
25 // (`ETeamState::STARTED_UNFINISHABLE`). If this were not the case, tees
26 // could go around the startline on a map, leave one tee behind at
27 // start, go to the finish line, let the tee start and kill, allowing
28 // the team to finish instantly.
32
38 std::shared_ptr<CScoreSaveResult> m_apSaveTeamResult[NUM_DDRACE_TEAMS];
39 uint64_t m_aLastSwap[MAX_CLIENTS]; // index is id of player who initiated swap
41 // `m_aTeamUnfinishableKillTick` is -1 by default and gets set when a
42 // team becomes unfinishable. If the team hasn't entered practice mode
43 // by that time, it'll get killed to prevent people not understanding
44 // the message from playing for a long time in an unfinishable team.
46
47 // Team numbers as they are sent to clients before VERSION_DDNET_128_TEAMS, see UpdateLegacyTeamMap
50
52
59 void KillTeam(int Team, int NewStrongId, int ExceptId = -1);
60 bool TeamFinished(int Team);
61 void OnTeamFinish(int Team, CPlayer **Players, unsigned int Size, int TimeTicks, const char *pTimestamp);
62 void OnFinish(CPlayer *Player, int TimeTicks, const char *pTimestamp);
63
64public:
66
67 CGameTeams(CGameContext *pGameContext);
68
69 // helper methods
70 CCharacter *Character(int ClientId);
71 const CCharacter *Character(int ClientId) const;
72 CPlayer *GetPlayer(int ClientId);
74 const CGameContext *GameServer() const;
75 IServer *Server();
76 const IServer *Server() const;
77
83 int TeamForClient(int Team, int ClientId) const;
84 bool ClientSupportsServerNumTeams(int ClientId) const;
85
86 void OnCharacterStart(int ClientId);
87 void OnCharacterFinish(int ClientId);
88 void OnCharacterSpawn(int ClientId);
89 void OnCharacterDeath(int ClientId, int Weapon);
90 void Tick();
91
92 // sets pError to an empty string on success (true)
93 // and sets pError if it returns false
94 bool CanJoinTeam(int ClientId, int Team, char *pError, int ErrorSize) const;
95
96 // returns true if successful. Writes error into pError on failure
97 bool SetCharacterTeam(int ClientId, int Team, char *pError, int ErrorSize);
98 void CheckTeamFinished(int Team);
99
100 void ChangeTeamState(int Team, ETeamState State);
101
102 CClientMask TeamMask(int Team, int ExceptId = -1, int Asker = -1, int VersionFlags = CGameContext::FLAG_SIX | CGameContext::FLAG_SIXUP);
103
104 int TeamSize(int Team) const;
105
106 // need to be very careful using this method. SERIOUSLY...
107 void SetForceCharacterTeam(int ClientId, int Team);
108
109 void Reset();
110 void ResetRoundState(int Team);
111 void ResetSwitchers(int Team);
112
113 void SendTeamsState(int ClientId);
114 void SetTeamLock(int Team, bool Lock);
115 void SetTeamFlock(int Team, bool Mode);
116 void ResetInvited(int Team);
117 void SetClientInvited(int Team, int ClientId, bool Invited);
118
119 ERaceState GetDDRaceState(const CPlayer *Player) const;
120 int GetStartTime(CPlayer *Player);
121 float *GetCurrentTimeCp(CPlayer *Player);
122 void SetDDRaceState(CPlayer *Player, ERaceState DDRaceState);
123 void SetStartTime(CPlayer *Player, int StartTime);
124 void SetLastTimeCp(CPlayer *Player, int LastTimeCp);
125 void KillCharacterOrTeam(int ClientId, int Team);
126 void ResetSavedTeam(int ClientId, int Team);
127 void RequestTeamSwap(CPlayer *pPlayer, CPlayer *pTargetPlayer, int Team);
128 void SwapTeamCharacters(CPlayer *pPrimaryPlayer, CPlayer *pTargetPlayer, int Team);
129 void CancelTeamSwap(CPlayer *pPlayer, int Team);
130 void ProcessSaveTeam();
131 std::optional<int> GetFirstEmptyTeam() const;
132 bool TeeStarted(int ClientId) const;
133 bool TeeFinished(int ClientId) const;
134 ETeamState GetTeamState(int Team) const;
135 bool TeamLocked(int Team) const;
136 bool TeamFlock(int Team) const;
137 bool IsInvited(int Team, int ClientId) const;
138 bool IsStarted(int Team) const;
139 void SetStarted(int ClientId, bool Started);
140 void SetFinished(int ClientId, bool Finished);
141 void SetSaving(int TeamId, std::shared_ptr<CScoreSaveResult> &SaveResult);
142 bool GetSaving(int TeamId) const;
143 void SetPractice(int Team, bool Enabled);
144 bool IsPractice(int Team);
145 bool IsValidTeamNumber(int Team) const;
146};
147
148#endif
Definition character.h:24
Definition gamecontext.h:114
@ FLAG_SIXUP
Definition gamecontext.h:307
@ FLAG_SIX
Definition gamecontext.h:306
int TeamForClient(int Team, int ClientId) const
Definition teams.cpp:726
bool TeamLocked(int Team) const
Definition teams.cpp:1469
bool GetSaving(int TeamId) const
Definition teams.cpp:1511
void OnCharacterSpawn(int ClientId)
Definition teams.cpp:1277
CGameContext * m_pGameContext
Definition teams.h:51
IServer * Server()
Definition teams.cpp:981
float * GetCurrentTimeCp(CPlayer *Player)
Definition teams.cpp:794
bool IsPractice(int Team)
Definition teams.cpp:1535
void SetFinished(int ClientId, bool Finished)
Definition teams.cpp:1501
CTeamsCore m_Core
Definition teams.h:65
CGameTeams(CGameContext *pGameContext)
Definition teams.cpp:24
int GetStartTime(CPlayer *Player)
Definition teams.cpp:763
void OnTeamFinish(int Team, CPlayer **Players, unsigned int Size, int TimeTicks, const char *pTimestamp)
Definition teams.cpp:805
bool m_aTeeFinished[MAX_CLIENTS]
Definition teams.h:30
void CheckTeamFinished(int Team)
Definition teams.cpp:328
uint64_t m_aLastSwap[MAX_CLIENTS]
Definition teams.h:39
void Reset()
Definition teams.cpp:30
bool m_aTeamLocked[NUM_DDRACE_TEAMS]
Definition teams.h:34
void KillTeam(int Team, int NewStrongId, int ExceptId=-1)
Definition teams.cpp:528
void OnFinish(CPlayer *Player, int TimeTicks, const char *pTimestamp)
Definition teams.cpp:827
void SwapTeamCharacters(CPlayer *pPrimaryPlayer, CPlayer *pTargetPlayer, int Team)
Definition teams.cpp:1038
bool SetCharacterTeam(int ClientId, int Team, char *pError, int ErrorSize)
Definition teams.cpp:453
void ResetRoundState(int Team)
Definition teams.cpp:55
bool CanJoinTeam(int ClientId, int Team, char *pError, int ErrorSize) const
Definition teams.cpp:391
void ResetInvited(int Team)
Definition teams.cpp:1399
void SetStarted(int ClientId, bool Started)
Definition teams.cpp:1496
bool TeeStarted(int ClientId) const
Definition teams.cpp:1454
bool m_aTeamFlock[NUM_DDRACE_TEAMS]
Definition teams.h:35
bool m_aTeamSentStartWarning[NUM_DDRACE_TEAMS]
Definition teams.h:40
void RequestTeamSwap(CPlayer *pPlayer, CPlayer *pTargetPlayer, int Team)
Definition teams.cpp:991
void CancelTeamSwap(CPlayer *pPlayer, int Team)
Definition teams.cpp:1109
void ProcessSaveTeam()
Definition teams.cpp:1147
void SetDDRaceState(CPlayer *Player, ERaceState DDRaceState)
Definition teams.cpp:753
bool TeamFlock(int Team) const
Definition teams.cpp:1477
CClientMask m_aInvited[NUM_DDRACE_TEAMS]
Definition teams.h:36
void SetTeamFlock(int Team, bool Mode)
Definition teams.cpp:1393
void SetTeamLock(int Team, bool Lock)
Definition teams.cpp:1387
std::optional< int > GetFirstEmptyTeam() const
Definition teams.cpp:1446
void ChangeTeamState(int Team, ETeamState State)
Definition teams.cpp:523
ETeamState GetTeamState(int Team) const
Definition teams.cpp:1464
int m_aLegacyTeamMap[NUM_DDRACE_TEAMS]
Definition teams.h:48
int m_aLastChat[MAX_CLIENTS]
Definition teams.h:31
void OnCharacterStart(int ClientId)
Definition teams.cpp:85
bool TeeFinished(int ClientId) const
Definition teams.cpp:1459
void UpdateLegacyTeamMap()
Definition teams.cpp:692
CClientMask TeamMask(int Team, int ExceptId=-1, int Asker=-1, int VersionFlags=CGameContext::FLAG_SIX|CGameContext::FLAG_SIXUP)
Definition teams.cpp:596
void OnCharacterDeath(int ClientId, int Weapon)
Definition teams.cpp:1296
void SetLastTimeCp(CPlayer *Player, int LastTimeCp)
Definition teams.cpp:784
void SetStartTime(CPlayer *Player, int StartTime)
Definition teams.cpp:774
bool TeamFinished(int Team)
Definition teams.cpp:584
void SetClientInvited(int Team, int ClientId, bool Invited)
Definition teams.cpp:1404
void ResetSwitchers(int Team)
Definition teams.cpp:75
void Tick()
Definition teams.cpp:229
bool IsInvited(int Team, int ClientId) const
Definition teams.cpp:1486
void SetSaving(int TeamId, std::shared_ptr< CScoreSaveResult > &SaveResult)
Definition teams.cpp:1506
void OnCharacterFinish(int ClientId)
Definition teams.cpp:203
CPlayer * GetPlayer(int ClientId)
Definition teams.cpp:966
int TeamSize(int Team) const
Definition teams.cpp:509
ERaceState GetDDRaceState(const CPlayer *Player) const
Definition teams.cpp:742
CGameContext * GameServer()
Definition teams.cpp:971
bool IsValidTeamNumber(int Team) const
Definition teams.cpp:1550
ETeamState m_aTeamState[NUM_DDRACE_TEAMS]
Definition teams.h:33
bool m_aTeeStarted[MAX_CLIENTS]
Definition teams.h:29
CCharacter * Character(int ClientId)
Definition teams.cpp:956
void ResetSavedTeam(int ClientId, int Team)
Definition teams.cpp:1427
std::shared_ptr< CScoreSaveResult > m_apSaveTeamResult[NUM_DDRACE_TEAMS]
Definition teams.h:38
void KillCharacterOrTeam(int ClientId, int Team)
Definition teams.cpp:1415
void SetPractice(int Team, bool Enabled)
Definition teams.cpp:1521
bool IsStarted(int Team) const
Definition teams.cpp:1491
void SendTeamsState(int ClientId)
Definition teams.cpp:633
void SetForceCharacterTeam(int ClientId, int Team)
Definition teams.cpp:462
bool ClientSupportsServerNumTeams(int ClientId) const
Definition teams.cpp:736
int m_aTeamUnfinishableKillTick[NUM_DDRACE_TEAMS]
Definition teams.h:45
bool m_aPractice[NUM_DDRACE_TEAMS]
Definition teams.h:37
Definition player.h:29
Definition teamscore.h:26
Definition server.h:38
std::bitset< MAX_CLIENTS > CClientMask
Definition protocol.h:193
@ MAX_CLIENTS
Definition protocol.h:89
ERaceState
Definition race_state.h:5
Definition scoreworker.h:152
ETeamState
Definition team_state.h:5
@ NUM_DDRACE_TEAMS
Definition teamscore.h:11