ddnet/src/game/server/player.h

205 lines
4.5 KiB
C
Raw Normal View History

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"
#include "score.h"
2020-06-10 16:12:10 +00:00
#include "teeinfo.h"
#include <memory>
2010-05-29 07:25:38 +00:00
// player object
class CPlayer
{
MACRO_ALLOC_POOL_ID()
2015-07-09 00:08:14 +00:00
2014-07-26 12:46:31 +00:00
friend class CSaveTee;
2010-05-29 07:25:38 +00:00
public:
CPlayer(CGameContext *pGameServer, int ClientID, int Team);
2010-05-29 07:25:38 +00:00
~CPlayer();
2014-08-09 12:50:51 +00:00
void Reset();
2010-05-29 07:25:38 +00:00
void TryRespawn();
void Respawn(bool WeakHook = false); // with WeakHook == true the character will be spawned after all calls of Tick from other Players
CCharacter *ForceSpawn(vec2 Pos); // required for loading savegames
void SetTeam(int Team, bool DoChatMsg = true);
2010-05-29 07:25:38 +00:00
int GetTeam() const { return m_Team; };
int GetCID() const { return m_ClientID; };
int GetClientVersion() const;
bool SetTimerType(int NewType);
2010-05-29 07:25:38 +00:00
void Tick();
void PostTick();
// will be called after all Tick and PostTick calls from other players
void PostPostTick();
2010-05-29 07:25:38 +00:00
void Snap(int SnappingClient);
void FakeSnap();
2010-05-29 07:25:38 +00:00
void OnDirectInput(CNetObj_PlayerInput *NewInput);
void OnPredictedInput(CNetObj_PlayerInput *NewInput);
2019-01-29 19:32:11 +00:00
void OnPredictedEarlyInput(CNetObj_PlayerInput *NewInput);
void OnDisconnect(const char *pReason);
2010-05-29 07:25:38 +00:00
void KillCharacter(int Weapon = WEAPON_GAME);
CCharacter *GetCharacter();
void SpectatePlayerName(const char *pName);
2013-12-31 05:13:57 +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;
2014-03-12 23:56:39 +00:00
int m_TuneZone;
int m_TuneZoneOld;
// 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;
2010-05-29 07:25:38 +00:00
//
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;
2013-08-10 02:21:20 +00:00
int m_LastCommands[4];
int m_LastCommandPos;
2013-10-18 09:42:35 +00:00
int m_LastWhisperTo;
int m_LastInvited;
2014-10-26 18:39:42 +00:00
int m_SendVoteIndex;
2020-06-10 16:12:10 +00:00
CTeeInfo m_TeeInfos;
2010-05-29 07:25:38 +00:00
int m_DieTick;
int m_PreviousDieTick;
2010-05-29 07:25:38 +00:00
int m_Score;
int m_JoinTick;
2010-05-29 07:25:38 +00:00
bool m_ForceBalanced;
int m_LastActionTick;
int m_TeamChangeTick;
bool m_SentSemicolonTip;
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;
2010-05-29 07:25:38 +00:00
private:
2011-04-19 08:42:48 +00:00
CCharacter *m_pCharacter;
int m_NumInputs;
2010-05-29 07:25:38 +00:00
CGameContext *m_pGameServer;
2010-05-29 07:25:38 +00:00
CGameContext *GameServer() const { return m_pGameServer; }
IServer *Server() const;
2010-05-29 07:25:38 +00:00
//
bool m_Spawning;
bool m_WeakHookSpawn;
2010-05-29 07:25:38 +00:00
int m_ClientID;
int m_Team;
2017-04-08 22:20:41 +00:00
int m_Paused;
2017-04-08 23:16:48 +00:00
int64 m_ForcePauseTime;
int64 m_LastPause;
2011-01-29 00:59:50 +00:00
public:
enum
2011-01-29 00:59:50 +00:00
{
PAUSE_NONE = 0,
2017-04-08 22:20:41 +00:00
PAUSE_PAUSED,
PAUSE_SPEC
};
enum
{
TIMERTYPE_DEFAULT = -1,
TIMERTYPE_GAMETIMER = 0,
TIMERTYPE_BROADCAST,
TIMERTYPE_GAMETIMER_AND_BROADCAST,
TIMERTYPE_SIXUP,
TIMERTYPE_NONE,
};
2013-12-22 17:30:13 +00:00
bool m_DND;
int64 m_FirstVoteTick;
2014-08-09 15:25:29 +00:00
char m_TimeoutCode[64];
void ProcessPause();
2017-04-08 23:16:48 +00:00
int Pause(int State, bool Force);
2017-04-08 22:20:41 +00:00
int ForcePause(int Time);
int IsPaused();
bool IsPlaying();
2011-01-29 00:59:50 +00:00
int64 m_Last_KickVote;
int64 m_Last_Team;
int m_ShowOthers;
2014-02-02 18:56:10 +00:00
bool m_ShowAll;
vec2 m_ShowDistance;
2014-08-09 17:53:38 +00:00
bool m_SpecTeam;
2014-01-11 12:59:20 +00:00
bool m_NinjaJetpack;
2013-08-18 01:27:30 +00:00
bool m_Afk;
bool m_HasFinishScore;
2011-02-08 12:44:59 +00:00
int m_ChatScore;
2018-01-05 11:04:06 +00:00
bool m_Moderating;
bool AfkTimer(int new_target_x, int new_target_y); //returns true if kicked
void UpdatePlaytime();
2014-02-21 17:27:00 +00:00
void AfkVoteTimer(CNetObj_PlayerInput *NewTarget);
int64 m_LastPlaytime;
int64 m_LastEyeEmote;
2018-03-07 16:22:41 +00:00
int64 m_LastBroadcast;
bool m_LastBroadcastImportance;
int m_LastTarget_x;
int m_LastTarget_y;
CNetObj_PlayerInput *m_pLastTarget;
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
char m_pAfkMsg[160];
Added the following settings to Close #123. sv_time_in_broadcast, 1, 0, 1, CFGFLAG_SERVER, "Whether to display time in broadcast every interval or not by default, later the choice can be changed by players via chat commands" sv_time_in_broadcast_interval, 1, 0, 60, CFGFLAG_SERVER, "How often to update the broadcast time" sv_time_in_gametimer, 0, 0, 1, CFGFLAG_SERVER, "Whether to display time in the round/game timer or not by default, later the choice can be changed by players via chat commands" Added the following Chat commands to give the player the choice over their settings: "saytime", "", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSayTime, this, "Privately messages you your current time in this current running race" "saytimeall", "", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSayTimeAll, this, "Publicly messages everyone your current time in this current running race" "time", "", CFGFLAG_CHAT|CFGFLAG_SERVER, ConTime, this, "Privately shows you your current time in this current running race in the broadcast message" "broadcasttime", "?s", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSetBroadcastTime, this, "Personal Setting of showing time in the broadcast, broadcasttime s, where s = on for on, off for off, toggle for toggle and nothing to show current status" "servergametime", "?s", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSetServerGameTime, this, "Personal Setting of showing time in the round/game timer, servergametime s, where s = on for on off for off, toggle for toggle and nothing to show current status" Fixed Chat Command "eyeemote" and made it a set + toggle instead of just toggle for better bin techneques Moved some vars from CCharacter to CPlayer to keep their status evern after death but not after disconnect. So now players have the choice to see which timer they wanna see if any. Note: These changes are all untested Stay away from this update on your main server until they are tested, i don't even know if they will compile propperly
2011-12-29 12:17:34 +00:00
bool m_EyeEmote;
int m_TimerType;
Added the following settings to Close #123. sv_time_in_broadcast, 1, 0, 1, CFGFLAG_SERVER, "Whether to display time in broadcast every interval or not by default, later the choice can be changed by players via chat commands" sv_time_in_broadcast_interval, 1, 0, 60, CFGFLAG_SERVER, "How often to update the broadcast time" sv_time_in_gametimer, 0, 0, 1, CFGFLAG_SERVER, "Whether to display time in the round/game timer or not by default, later the choice can be changed by players via chat commands" Added the following Chat commands to give the player the choice over their settings: "saytime", "", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSayTime, this, "Privately messages you your current time in this current running race" "saytimeall", "", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSayTimeAll, this, "Publicly messages everyone your current time in this current running race" "time", "", CFGFLAG_CHAT|CFGFLAG_SERVER, ConTime, this, "Privately shows you your current time in this current running race in the broadcast message" "broadcasttime", "?s", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSetBroadcastTime, this, "Personal Setting of showing time in the broadcast, broadcasttime s, where s = on for on, off for off, toggle for toggle and nothing to show current status" "servergametime", "?s", CFGFLAG_CHAT|CFGFLAG_SERVER, ConSetServerGameTime, this, "Personal Setting of showing time in the round/game timer, servergametime s, where s = on for on off for off, toggle for toggle and nothing to show current status" Fixed Chat Command "eyeemote" and made it a set + toggle instead of just toggle for better bin techneques Moved some vars from CCharacter to CPlayer to keep their status evern after death but not after disconnect. So now players have the choice to see which timer they wanna see if any. Note: These changes are all untested Stay away from this update on your main server until they are tested, i don't even know if they will compile propperly
2011-12-29 12:17:34 +00:00
int m_DefEmote;
int m_DefEmoteReset;
2014-09-18 10:14:00 +00:00
bool m_Halloween;
bool m_FirstPacket;
2011-09-07 22:51:55 +00:00
int64 m_LastSQLQuery;
void ProcessScoreResult(CScorePlayerResult &Result);
std::shared_ptr<CScorePlayerResult> m_ScoreQueryResult;
std::shared_ptr<CScorePlayerResult> m_ScoreFinishResult;
2018-12-17 13:55:58 +00:00
bool m_NotEligibleForFinish;
int64 m_EligibleForFinishCheck;
bool m_VotedForPractice;
2010-05-29 07:25:38 +00:00
};
#endif