blob: 877ae0bcda9f3691338527c0e04e96ff9a8c99bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
#ifndef GAME_SERVER_PLAYER_H
#define GAME_SERVER_PLAYER_H
// this include should perhaps be removed
#include "entities/character.h"
#include "gamecontext.h"
// player object
class CPlayer
{
MACRO_ALLOC_POOL_ID()
public:
CPlayer(CGameContext *pGameServer, int ClientID, int Team);
~CPlayer();
void Init(int CID);
void TryRespawn();
void Respawn();
void SetTeam(int Team, bool DoChatMsg=true);
void SetTeamDirect(int Team); //zCatch
int GetTeam() const { return m_Team; };
int GetCID() const { return m_ClientID; };
void Tick();
void PostTick();
void Snap(int SnappingClient);
void OnDirectInput(CNetObj_PlayerInput *NewInput);
void OnPredictedInput(CNetObj_PlayerInput *NewInput);
void OnDisconnect(const char *pReason);
void KillCharacter(int Weapon = WEAPON_GAME);
CCharacter *GetCharacter();
//---------------------------------------------------------
// this is used for snapping so we know how we can clip the view for the player
vec2 m_ViewPos;
// states if the client is chatting, accessing a menu etc.
int m_PlayerFlags;
// used for snapping to just update latency if the scoreboard is active
int m_aActLatency[MAX_CLIENTS];
// used for spectator mode
int m_SpectatorID;
bool m_IsReady;
//
int m_Vote;
int m_VotePos;
//
int m_LastVoteCall;
int m_LastVoteTry;
int m_LastChat;
int m_LastSetTeam;
int m_LastSetSpectatorMode;
int m_LastChangeInfo;
int m_LastEmote;
int m_LastKill;
int m_LastWhisperTo;
int m_ClientVersion;
// TODO: clean this up
struct
{
char m_SkinName[64];
int m_UseCustomColor;
int m_ColorBody;
int m_ColorFeet;
} m_TeeInfos;
int m_RespawnTick;
int m_DieTick;
int m_Score;
int m_ScoreStartTick;
bool m_ForceBalanced;
int m_LastActionTick;
int m_TeamChangeTick;
struct
{
int m_TargetX;
int m_TargetY;
} m_LatestActivity;
// network latency calculations
struct
{
int m_Accum;
int m_AccumMin;
int m_AccumMax;
int m_Avg;
int m_Min;
int m_Max;
} m_Latency;
//zCatch:
int m_CaughtBy;
bool m_SpecExplicit;
int m_Deaths;
int m_Kills;
int m_LastKillTry;
int m_TicksSpec;
int m_TicksIngame;
int m_ChatTicks;
//Anticamper
int Anticamper();
bool m_SentCampMsg;
int m_CampTick;
vec2 m_CampPos;
int m_RespawnProtection;
// zCatch/TeeVi
enum
{
ZCATCH_NOT_CAUGHT = -1,
ZCATCH_RELEASE_ALL = -1,
ZCATCH_CAUGHT_REASON_JOINING = 0,
ZCATCH_CAUGHT_REASON_KILLED,
};
struct CZCatchVictim
{
int ClientID;
int Reason;
CZCatchVictim *prev;
};
CZCatchVictim *m_ZCatchVictims;
int m_zCatchNumVictims;
int m_zCatchNumKillsInARow;
bool m_zCatchJoinSpecWhenReleased;
void AddZCatchVictim(int ClientID, int reason = ZCATCH_CAUGHT_REASON_JOINING);
void ReleaseZCatchVictim(int ClientID, int limit = 0);
bool HasZCatchVictims() { return (m_ZCatchVictims != NULL); }
int LastZCatchVictim() { return HasZCatchVictims() ? m_ZCatchVictims->ClientID : -1; }
// bot detection
int m_IsAimBot;
int m_AimBotIndex;
int m_AimBotRange;
float m_AimBotTargetSpeed;
vec2 m_CurrentTarget;
vec2 m_LastTarget;
int m_AimBotLastDetection;
vec2 m_AimBotLastDetectionPos;
vec2 m_AimBotLastDetectionPosVictim;
private:
CCharacter *m_pCharacter;
CGameContext *m_pGameServer;
CGameContext *GameServer() const { return m_pGameServer; }
IServer *Server() const;
//
bool m_Spawning;
int m_ClientID;
int m_Team;
};
#endif
|