DDNet documentation
Loading...
Searching...
No Matches
player.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef GAME_SERVER_PLAYER_H
4#define GAME_SERVER_PLAYER_H
5
6#include "teeinfo.h"
7
8#include <base/vmath.h>
9
11
12#include <generated/protocol.h>
13
14#include <game/alloc.h>
15#include <game/server/save.h>
16
17#include <memory>
18#include <optional>
19
20class CCharacter;
21class CGameContext;
22class IServer;
24struct CNetObj_PlayerInput;
26
27// player object
29{
31
32public:
33 CPlayer(CGameContext *pGameServer, uint32_t UniqueClientId, int ClientId, int Team);
34 ~CPlayer();
35
36 void Reset();
37
38 void TryRespawn();
39
40 // mark respawning, with weak hook if WeakHook is true and strong otherwise
41 void Respawn(bool WeakHook = false);
42 CCharacter *ForceSpawn(vec2 Pos); // required for loading savegames
43 void SetTeam(int Team, bool DoChatMsg = true);
44 int GetTeam() const { return m_Team; }
45 int GetCid() const { return m_ClientId; }
46 uint32_t GetUniqueCid() const { return m_UniqueClientId; }
47 int GetClientVersion() const;
48 bool SetTimerType(int TimerType);
49
50 void Tick();
51 void PostTick();
52
53 // will be called after all Tick and PostTick calls from other players
54 void PostPostTick();
55 void Snap(int SnappingClient);
56 void FakeSnap();
57 void SendConnect(int FakeId, int ClientId);
58 void SendDisconnect(int FakeId);
60
61 void OnDirectInput(const CNetObj_PlayerInput *pNewInput);
62 void OnPredictedInput(const CNetObj_PlayerInput *pNewInput);
63 void OnPredictedEarlyInput(const CNetObj_PlayerInput *pNewInput);
64 void OnDisconnect();
65
66 void KillCharacter(int Weapon = WEAPON_GAME, bool SendKillMsg = true);
68 const CCharacter *GetCharacter() const;
69
70 void SpectatePlayerName(const char *pName);
71
72 //---------------------------------------------------------
73 // this is used for snapping so we know how we can clip the view for the player
77
78 // states if the client is chatting, accessing a menu etc.
80
81 // used for snapping to just update latency if the scoreboard is active
83
84 int m_SentSnaps = 0;
85
86 int SpectatorId() const { return m_SpectatorId; }
87 void SetSpectatorId(int Id);
88
90
91 //
92 int m_Vote;
94 //
108
110 // last option sent, only read while m_SendVoteIndex is greater than zero. Options
111 // appended after the list was fully sent follow it.
113
114 const CTeeInfo &TeeInfos() const { return m_TeeInfos; }
115 void SetTeeInfos(const CTeeInfo &TeeInfos);
116 // Sets the 0.6 tee infos, deriving the 0.7 skin parts from them unless the client is 0.7
117 void SetTeeInfos(const char *pSkinName, bool UseCustomColor, int ColorBody, int ColorFeet);
118 // The snapped client info is the same for every snapping client, so it is cached
119 // and only rebuilt once the name, clan, country or tee infos have changed
121
127
128 // network latency calculations
129 struct
130 {
131 int m_Accum;
132 int m_AccumMin;
133 int m_AccumMax;
134 int m_Avg;
135 int m_Min;
136 int m_Max;
138
139private:
141 CNetObj_ClientInfo m_ClientInfo = {};
142 bool m_ClientInfoValid = false;
143
144 const uint32_t m_UniqueClientId;
148
150 IServer *Server() const;
151
152 //
157
158 // used for spectator mode
160
163 int64_t m_LastPause;
164 bool m_Afk;
165
170
171public:
172 enum
173 {
177 };
178
179 enum
180 {
187 };
188
189 bool m_DND;
193
194 void ProcessPause();
195 int Pause(int State, bool Force);
196 int ForcePause(int Time);
197 int IsPaused() const;
198 bool CanSpec() const;
199
200 bool IsPlaying() const;
202 std::optional<int64_t> m_LastDDRaceTeamChange;
209
210 // camera info is used sparingly for converting aim target to absolute world coordinates
212 {
213 friend class CPlayer;
215 float m_Zoom;
218
219 public:
220 vec2 ConvertTargetToWorld(vec2 Position, vec2 Target) const;
221 void Write(const CNetMsg_Cl_CameraInfo *pMsg);
222 void Reset();
224
225 // effective radius for network clipping, updated every tick since it depends on the dynamic camera offset
228
230
232
233 void UpdatePlaytime();
234 void AfkTimer();
235 void SetAfk(bool Afk);
236 void SetInitialAfk(bool Afk);
237 bool IsAfk() const { return m_Afk; }
238
243
244 CNetObj_PlayerInput *m_pLastTarget;
246
249
250 // Tick at which to kick the client if it still hasn't identified as a DDNet-based client
252
253 int GetDefaultEmote() const;
254 void OverrideDefaultEmote(int Emote, int Tick);
255 bool CanOverrideDefaultEmote() const;
256
260 std::shared_ptr<CScorePlayerResult> m_ScoreQueryResult;
261 std::shared_ptr<CScorePlayerResult> m_ScoreFinishResult;
265 int m_SwapTargetsClientId; //Client ID of the swap target for the given player
267
269
271 std::optional<CSaveTee> m_LastDeath;
272};
273
274#endif
#define MACRO_ALLOC_POOL_ID()
Definition alloc.h:39
Definition character.h:24
Definition gamecontext.h:114
Definition player.h:212
float m_Zoom
Definition player.h:215
int m_Deadzone
Definition player.h:216
void Write(const CNetMsg_Cl_CameraInfo *pMsg)
Definition player.cpp:1143
bool m_HasCameraInfo
Definition player.h:214
void Reset()
Definition player.cpp:1152
vec2 ConvertTargetToWorld(vec2 Position, vec2 Target) const
Definition player.cpp:1104
int m_FollowFactor
Definition player.h:217
friend class CPlayer
Definition player.h:213
int m_TimerType
Definition player.h:248
void SendConnect(int FakeId, int ClientId)
Definition player.cpp:586
int64_t m_LastSqlQuery
Definition player.h:258
int m_ShowOthers
Definition player.h:203
bool m_SpecTeam
Definition player.h:207
void OverrideDefaultEmote(int Emote, int Tick)
Definition player.cpp:878
bool m_ClientInfoValid
Definition player.h:142
int GetClientVersion() const
Definition player.cpp:693
void SpectatePlayerName(const char *pName)
Definition player.cpp:994
void SetTeam(int Team, bool DoChatMsg=true)
Definition player.cpp:741
bool m_IsReady
Definition player.h:89
void SendDisconnect(int FakeId)
Definition player.cpp:614
class CPlayer::CCameraInfo m_CameraInfo
bool m_Moderating
Definition player.h:231
bool m_LastBroadcastImportance
Definition player.h:242
int m_DDNetVersionKickTick
Definition player.h:251
int m_Paused
Definition player.h:161
int m_Team
Definition player.h:156
void SetInitialAfk(bool Afk)
Definition player.cpp:853
void KillCharacter(int Weapon=WEAPON_GAME, bool SendKillMsg=true)
Definition player.cpp:712
vec2 m_ShowDistance
Definition player.h:206
const uint32_t m_UniqueClientId
Definition player.h:144
bool m_BirthdayAnnounced
Definition player.h:266
CGameContext * GameServer() const
Definition player.h:149
IServer * Server() const
Definition player.cpp:27
int m_LastKill
Definition player.h:103
bool m_Spawning
Definition player.h:153
int m_SpectatorId
Definition player.h:159
int GetTeam() const
Definition player.h:44
std::shared_ptr< CScorePlayerResult > m_ScoreQueryResult
Definition player.h:260
int m_DieTick
Definition player.h:122
@ PAUSE_NONE
Definition player.h:174
@ PAUSE_SPEC
Definition player.h:176
@ PAUSE_PAUSED
Definition player.h:175
int64_t m_EligibleForFinishCheck
Definition player.h:263
void FakeSnap()
Definition player.cpp:505
void ProcessScoreResult(CScorePlayerResult &Result)
Definition player.cpp:1009
int m_VotePos
Definition player.h:93
int GetDefaultEmote() const
Definition player.cpp:870
CPlayer(CGameContext *pGameServer, uint32_t UniqueClientId, int ClientId, int Team)
Definition player.cpp:29
bool IsAfk() const
Definition player.h:237
CCharacter * m_pCharacter
Definition player.h:145
void PostTick()
Definition player.cpp:301
int m_aCurLatency[MAX_CLIENTS]
Definition player.h:82
int m_TeamChangeTick
Definition player.h:126
void SetSpectatorId(int Id)
Definition player.cpp:1003
void OnPredictedInput(const CNetObj_PlayerInput *pNewInput)
Definition player.cpp:634
CGameContext * m_pGameServer
Definition player.h:147
CTeeInfo m_TeeInfos
Definition player.h:140
int64_t m_ForcePauseTime
Definition player.h:162
int m_DefEmote
Definition player.h:166
int m_OverrideEmoteReset
Definition player.h:168
int m_LastChangeInfo
Definition player.h:100
int m_LastActionTick
Definition player.h:125
int m_aStrongWeakId[LEGACY_MAX_CLIENTS]
Definition player.h:59
int m_LastInvited
Definition player.h:107
int m_LastWhisperTo
Definition player.h:106
int m_LastVoteTry
Definition player.h:96
CSaveTee m_LastTeleTee
Definition player.h:270
int m_ChatScore
Definition player.h:229
void AfkTimer()
Definition player.cpp:839
int m_PreviousDieTick
Definition player.h:123
CNetObj_ClientInfo m_ClientInfo
Definition player.h:141
void Snap(int SnappingClient)
Definition player.cpp:332
int m_LastSetSpectatorMode
Definition player.h:99
int m_aLastCommands[4]
Definition player.h:104
vec2 m_ViewPos
Definition player.h:74
void SetTeeInfos(const CTeeInfo &TeeInfos)
Definition player.cpp:158
int64_t m_LastPlaytime
Definition player.h:239
void InvalidateClientInfo()
Definition player.h:120
void OnDisconnect()
Definition player.cpp:627
int m_Vote
Definition player.h:92
std::shared_ptr< CScorePlayerResult > m_ScoreFinishResult
Definition player.h:261
bool m_Afk
Definition player.h:164
int m_RescueMode
Definition player.h:268
bool m_EyeEmoteEnabled
Definition player.h:247
void ProcessPause()
Definition player.cpp:895
int m_LastVoteCall
Definition player.h:95
std::optional< int64_t > m_LastDDRaceTeamChange
Definition player.h:202
int m_ClientId
Definition player.h:155
bool m_ShowAll
Definition player.h:204
int IsPaused() const
Definition player.cpp:984
int m_SendVoteIndex
Definition player.h:109
int ForcePause(int Time)
Definition player.cpp:970
int m_OverrideEmote
Definition player.h:167
void UpdatePlaytime()
Definition player.cpp:834
int m_NumInputs
Definition player.h:146
vec2 m_NetworkClipRadius
Definition player.h:226
char m_aTimeoutCode[64]
Definition player.h:192
void TryRespawn()
Definition player.cpp:816
int GetCid() const
Definition player.h:45
bool m_NotEligibleForFinish
Definition player.h:262
int m_SwapTargetsClientId
Definition player.h:265
int m_LastSetTeam
Definition player.h:98
void OnPredictedEarlyInput(const CNetObj_PlayerInput *pNewInput)
Definition player.cpp:678
int64_t m_LastBroadcast
Definition player.h:241
int m_LastCommandPos
Definition player.h:105
const CVoteOptionServer * m_pLastSentVoteOption
Definition player.h:112
CNetObj_PlayerInput * m_pLastTarget
Definition player.h:244
bool m_EnableSpectatorCount
Definition player.h:205
bool m_LastTargetInit
Definition player.h:245
void SetAfk(bool Afk)
Definition player.cpp:844
uint32_t GetUniqueCid() const
Definition player.h:46
int m_TuneZoneOld
Definition player.h:76
int m_PlayerFlags
Definition player.h:79
int Pause(int State, bool Force)
Definition player.cpp:911
CCharacter * ForceSpawn(vec2 Pos)
Definition player.cpp:732
void PostPostTick()
Definition player.cpp:323
void Reset()
Definition player.cpp:49
int m_TuneZone
Definition player.h:75
@ TIMERTYPE_GAMETIMER
Definition player.h:182
@ TIMERTYPE_DEFAULT
Definition player.h:181
@ TIMERTYPE_BROADCAST
Definition player.h:183
@ TIMERTYPE_SIXUP
Definition player.h:185
@ TIMERTYPE_NONE
Definition player.h:186
@ TIMERTYPE_GAMETIMER_AND_BROADCAST
Definition player.h:184
bool m_FirstPacket
Definition player.h:257
int64_t m_LastPause
Definition player.h:163
int m_LastEmote
Definition player.h:101
std::optional< CSaveTee > m_LastDeath
Definition player.h:271
CCharacter * GetCharacter()
Definition player.cpp:698
void OnDirectInput(const CNetObj_PlayerInput *pNewInput)
Definition player.cpp:652
bool m_DND
Definition player.h:189
bool CanSpec() const
Definition player.cpp:890
void UpdateNetworkClipRadius()
Definition player.cpp:1118
bool m_WeakHookSpawn
Definition player.h:154
bool SetTimerType(int TimerType)
Definition player.cpp:770
int SpectatorId() const
Definition player.h:86
int64_t m_LastEyeEmote
Definition player.h:240
bool m_VotedForPractice
Definition player.h:264
bool CanOverrideDefaultEmote() const
Definition player.cpp:885
int m_LastEmoteGlobal
Definition player.h:102
void Tick()
Definition player.cpp:186
int m_SentSnaps
Definition player.h:84
struct CPlayer::@362014343304371120322235126273006135276344116343 m_Latency
bool IsPlaying() const
Definition player.cpp:989
int m_JoinTick
Definition player.h:124
const CTeeInfo & TeeInfos() const
Definition player.h:114
bool m_Halloween
Definition player.h:169
bool m_Whispers
Definition player.h:190
int m_LastChat
Definition player.h:97
void Respawn(bool WeakHook=false)
Definition player.cpp:723
bool m_NinjaJetpack
Definition player.h:208
int64_t m_LastKickVote
Definition player.h:201
int64_t m_FirstVoteTick
Definition player.h:191
Definition save.h:45
Definition teeinfo.h:9
Definition server.h:38
@ LEGACY_MAX_CLIENTS
Definition protocol.h:92
@ MAX_CLIENTS
Definition protocol.h:89
Definition scoreworker.h:32
Definition voting.h:23
vector2_base< float > vec2
Definition vmath.h:168