2010-11-20 10:37:14 +00:00
|
|
|
/* (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. */
|
2010-05-29 07:25:38 +00:00
|
|
|
#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()
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
public:
|
2011-02-12 10:40:36 +00:00
|
|
|
CPlayer(CGameContext *pGameServer, int ClientID, int Team);
|
2010-05-29 07:25:38 +00:00
|
|
|
~CPlayer();
|
|
|
|
|
2011-01-29 00:59:50 +00:00
|
|
|
void Init(int CID);
|
2010-05-29 07:25:38 +00:00
|
|
|
|
|
|
|
void TryRespawn();
|
|
|
|
void Respawn();
|
|
|
|
void SetTeam(int Team);
|
|
|
|
int GetTeam() const { return m_Team; };
|
|
|
|
int GetCID() const { return m_ClientID; };
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void Tick();
|
2011-03-10 09:08:14 +00:00
|
|
|
void PostTick();
|
2010-05-29 07:25:38 +00:00
|
|
|
void Snap(int SnappingClient);
|
|
|
|
|
|
|
|
void OnDirectInput(CNetObj_PlayerInput *NewInput);
|
|
|
|
void OnPredictedInput(CNetObj_PlayerInput *NewInput);
|
2011-02-14 18:41:32 +00:00
|
|
|
void OnDisconnect(const char *pReason);
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void KillCharacter(int Weapon = WEAPON_GAME);
|
|
|
|
CCharacter *GetCharacter();
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
//---------------------------------------------------------
|
|
|
|
// this is used for snapping so we know how we can clip the view for the player
|
|
|
|
vec2 m_ViewPos;
|
2011-03-01 17:31:20 +00:00
|
|
|
|
|
|
|
// 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];
|
2011-03-10 09:08:14 +00:00
|
|
|
|
|
|
|
// used for spectator mode
|
|
|
|
int m_SpectatorID;
|
2011-03-15 08:58:57 +00:00
|
|
|
|
|
|
|
bool m_IsReady;
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
//
|
|
|
|
int m_Vote;
|
|
|
|
int m_VotePos;
|
|
|
|
//
|
2011-03-10 09:08:14 +00:00
|
|
|
int m_LastVoteCall;
|
|
|
|
int m_LastVoteTry;
|
|
|
|
int m_LastChat;
|
|
|
|
int m_LastSetTeam;
|
|
|
|
int m_LastSetSpectatorMode;
|
|
|
|
int m_LastChangeInfo;
|
|
|
|
int m_LastEmote;
|
|
|
|
int m_LastKill;
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
// TODO: clean this up
|
2011-04-13 18:37:12 +00:00
|
|
|
struct
|
2010-05-29 07:25:38 +00:00
|
|
|
{
|
|
|
|
char m_SkinName[64];
|
|
|
|
int m_UseCustomColor;
|
|
|
|
int m_ColorBody;
|
|
|
|
int m_ColorFeet;
|
|
|
|
} m_TeeInfos;
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
int m_RespawnTick;
|
|
|
|
int m_DieTick;
|
|
|
|
int m_Score;
|
2010-05-31 20:35:47 +00:00
|
|
|
int m_ScoreStartTick;
|
2010-05-29 07:25:38 +00:00
|
|
|
bool m_ForceBalanced;
|
2010-10-09 17:14:42 +00:00
|
|
|
int m_LastActionTick;
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
int m_TargetX;
|
|
|
|
int m_TargetY;
|
|
|
|
} m_LatestActivity;
|
2011-03-10 09:08:14 +00:00
|
|
|
|
2011-04-13 18:37:12 +00:00
|
|
|
// network latency calculations
|
2011-03-10 09:08:14 +00:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
int m_Accum;
|
|
|
|
int m_AccumMin;
|
|
|
|
int m_AccumMax;
|
|
|
|
int m_Avg;
|
|
|
|
int m_Min;
|
2011-04-13 18:37:12 +00:00
|
|
|
int m_Max;
|
2011-03-10 09:08:14 +00:00
|
|
|
} m_Latency;
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
private:
|
2011-04-19 08:42:48 +00:00
|
|
|
CCharacter *m_pCharacter;
|
2010-05-29 07:25:38 +00:00
|
|
|
CGameContext *m_pGameServer;
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
CGameContext *GameServer() const { return m_pGameServer; }
|
|
|
|
IServer *Server() const;
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
//
|
|
|
|
bool m_Spawning;
|
|
|
|
int m_ClientID;
|
|
|
|
int m_Team;
|
|
|
|
|
2011-01-29 00:59:50 +00:00
|
|
|
|
2011-04-09 06:41:31 +00:00
|
|
|
// DDRace
|
|
|
|
|
2011-01-29 00:59:50 +00:00
|
|
|
public:
|
2011-04-09 06:41:31 +00:00
|
|
|
|
2011-01-29 00:59:50 +00:00
|
|
|
struct PauseInfo
|
|
|
|
{
|
|
|
|
CCharacterCore m_Core;
|
|
|
|
int m_StartTime;
|
|
|
|
int m_DDRaceState;
|
|
|
|
int m_FreezeTime;
|
|
|
|
int m_Armor;
|
|
|
|
int m_LastMove;
|
|
|
|
vec2 m_PrevPos;
|
|
|
|
int m_ActiveWeapon;
|
|
|
|
int m_LastWeapon;
|
|
|
|
bool m_Respawn;
|
|
|
|
bool m_aHasWeapon[NUM_WEAPONS];
|
|
|
|
bool m_Super;
|
|
|
|
bool m_DeepFreeze;
|
|
|
|
bool m_EndlessHook;
|
|
|
|
int m_PauseTime;
|
|
|
|
int m_Team;
|
2011-05-17 23:12:39 +00:00
|
|
|
int m_TeleCheckpoint;
|
2011-01-29 00:59:50 +00:00
|
|
|
} m_PauseInfo;
|
|
|
|
bool m_InfoSaved;
|
|
|
|
void LoadCharacter();
|
|
|
|
void SaveCharacter();
|
|
|
|
int64 m_Last_KickVote;
|
|
|
|
int64 m_Last_Team;
|
|
|
|
int m_Authed;
|
|
|
|
bool m_IsUsingDDRaceClient;
|
|
|
|
bool m_ShowOthers;
|
2011-02-02 10:49:19 +00:00
|
|
|
|
2011-02-08 12:44:59 +00:00
|
|
|
int m_ChatScore;
|
|
|
|
|
2011-05-06 19:16:53 +00:00
|
|
|
bool AfkTimer(int new_target_x, int new_target_y); //returns true if kicked
|
2011-03-22 19:49:12 +00:00
|
|
|
int64 m_LastPlaytime;
|
|
|
|
int m_LastTarget_x;
|
|
|
|
int m_LastTarget_y;
|
2011-04-23 17:59:25 +00:00
|
|
|
int m_Sent1stAfkWarning; // afk timer's 1st warning after 50% of sv_max_afk_time
|
|
|
|
int m_Sent2ndAfkWarning; // afk timer's 2nd warning after 90% of sv_max_afk_time
|
2011-03-22 19:49:12 +00:00
|
|
|
char m_pAfkMsg[160];
|
2010-05-29 07:25:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|