ddnet/src/game/server/entities/character.h
GreYFoX 799f4de2b3 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 14:17:34 +02:00

243 lines
5.6 KiB
C++

/* (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_ENTITIES_CHARACTER_H
#define GAME_SERVER_ENTITIES_CHARACTER_H
#include <game/server/entity.h>
#include <game/generated/server_data.h>
#include <game/generated/protocol.h>
#include <game/gamecore.h>
class CGameTeams;
enum
{
WEAPON_GAME = -3, // team switching etc
WEAPON_SELF = -2, // console kill command
WEAPON_WORLD = -1, // death tiles etc
};
class CCharacter : public CEntity
{
MACRO_ALLOC_POOL_ID()
public:
//character's size
static const int ms_PhysSize = 28;
CCharacter(CGameWorld *pWorld);
virtual void Reset();
virtual void Destroy();
virtual void Tick();
virtual void TickDefered();
virtual void Snap(int SnappingClient);
bool IsGrounded();
void SetWeapon(int W);
void HandleWeaponSwitch();
void DoWeaponSwitch();
void HandleWeapons();
void HandleNinja();
void OnPredictedInput(CNetObj_PlayerInput *pNewInput);
void OnDirectInput(CNetObj_PlayerInput *pNewInput);
void ResetInput();
void FireWeapon();
void Die(int Killer, int Weapon);
bool TakeDamage(vec2 Force, int Dmg, int From, int Weapon);
bool Spawn(class CPlayer *pPlayer, vec2 Pos);
bool Remove();
bool IncreaseHealth(int Amount);
bool IncreaseArmor(int Amount);
bool GiveWeapon(int Weapon, int Ammo);
void GiveNinja();
void SetEmote(int Emote, int Tick);
bool IsAlive() const { return m_Alive; }
class CPlayer *GetPlayer() { return m_pPlayer; }
private:
// player controlling this character
class CPlayer *m_pPlayer;
bool m_Alive;
// weapon info
CEntity *m_apHitObjects[10];
int m_NumObjectsHit;
struct WeaponStat
{
int m_AmmoRegenStart;
int m_Ammo;
int m_Ammocost;
bool m_Got;
} m_aWeapons[NUM_WEAPONS];
int m_ActiveWeapon;
int m_LastWeapon;
int m_QueuedWeapon;
int m_ReloadTimer;
int m_AttackTick;
int m_DamageTaken;
int m_EmoteType;
int m_EmoteStop;
// last tick that the player took any action ie some input
int m_LastAction;
// these are non-heldback inputs
CNetObj_PlayerInput m_LatestPrevInput;
CNetObj_PlayerInput m_LatestInput;
// input
CNetObj_PlayerInput m_PrevInput;
CNetObj_PlayerInput m_Input;
int m_NumInputs;
int m_Jumped;
int m_DamageTakenTick;
int m_Health;
int m_Armor;
// ninja
struct
{
vec2 m_ActivationDir;
int m_ActivationTick;
int m_CurrentMoveTime;
int m_OldVelAmount;
} m_Ninja;
// the player core for the physics
CCharacterCore m_Core;
// info for dead reckoning
int m_ReckoningTick; // tick that we are performing dead reckoning From
CCharacterCore m_SendCore; // core that we should send
CCharacterCore m_ReckoningCore; // the dead reckoning core
// DDRace
void HandleTiles(int Index);
float m_Time;
int m_LastBroadcast;
void DDRaceInit();
void HandleSkippableTiles(int Index);
void DDRaceTick();
void DDRacePostCoreTick();
void HandleBroadcast();
public:
CGameTeams* Teams();
bool Freeze(int Time);
bool Freeze();
bool UnFreeze();
void GiveAllWeapons();
int m_DDRaceState;
int Team();
bool CanCollide(int ClientID);
bool SameTeam(int ClientID);
bool m_Super;
int m_TeamBeforeSuper;
int m_FreezeTime;
int m_FreezeTick;
bool m_DeepFreeze;
bool m_EndlessHook;
enum
{
HIT_ALL=0,
DISABLE_HIT_HAMMER=1,
DISABLE_HIT_SHOTGUN=2,
DISABLE_HIT_GRENADE=4,
DISABLE_HIT_RIFLE=8
};
int m_Hit;
int m_PainSoundTimer;
int m_LastMove;
int m_StartTime;
int m_RefreshTime;
vec2 m_PrevPos;
int m_TeleCheckpoint;
int m_CpTick;
int m_CpActive;
float m_CpCurrent[25];
int m_TileIndex;
int m_TileFlags;
int m_TileFIndex;
int m_TileFFlags;
int m_TileSIndex;
int m_TileSFlags;
int m_TileIndexL;
int m_TileFlagsL;
int m_TileFIndexL;
int m_TileFFlagsL;
int m_TileSIndexL;
int m_TileSFlagsL;
int m_TileIndexR;
int m_TileFlagsR;
int m_TileFIndexR;
int m_TileFFlagsR;
int m_TileSIndexR;
int m_TileSFlagsR;
int m_TileIndexT;
int m_TileFlagsT;
int m_TileFIndexT;
int m_TileFFlagsT;
int m_TileSIndexT;
int m_TileSFlagsT;
int m_TileIndexB;
int m_TileFlagsB;
int m_TileFIndexB;
int m_TileFFlagsB;
int m_TileSIndexB;
int m_TileSFlagsB;
vec2 m_Intersection;
int64 m_LastStartWarning;
// Setters/Getters because i don't want to modify vanilla vars access modifiers
int GetLastWeapon() { return m_LastWeapon; };
void SetLastWeapon(int LastWeap) {m_LastWeapon = LastWeap; };
int GetActiveWeapon() { return m_ActiveWeapon; };
void SetActiveWeapon(int ActiveWeap) {m_ActiveWeapon = ActiveWeap; };
void SetLastAction(int LastAction) {m_LastAction = LastAction; };
int GetArmor() { return m_Armor; };
void SetArmor(int Armor) {m_Armor = Armor; };
CCharacterCore GetCore() { return m_Core; };
void SetCore(CCharacterCore Core) {m_Core = Core; };
CCharacterCore* Core() { return &m_Core; };
bool GetWeaponGot(int Type) { return m_aWeapons[Type].m_Got; };
void SetWeaponGot(int Type, bool Value) { m_aWeapons[Type].m_Got = Value; };
int GetWeaponAmmo(int Type) { return m_aWeapons[Type].m_Ammo; };
void SetWeaponAmmo(int Type, int Value) { m_aWeapons[Type].m_Ammo = Value; };
bool IsAlive() { return m_Alive; };
void SetEmoteType(int EmoteType) { m_EmoteType = EmoteType; };
void SetEmoteStop(int EmoteStop) { m_EmoteStop = EmoteStop; };
void SetNinjaActivationDir(vec2 ActivationDir) { m_Ninja.m_ActivationDir = ActivationDir; };
void SetNinjaActivationTick(int ActivationTick) { m_Ninja.m_ActivationTick = ActivationTick; };
void SetNinjaCurrentMoveTime(int CurrentMoveTime) { m_Ninja.m_CurrentMoveTime = CurrentMoveTime; };
};
enum
{
DDRACE_NONE = 0,
DDRACE_STARTED,
DDRACE_CHEAT, // no time and won't start again unless ordered by a mod or death
DDRACE_FINISHED
};
#endif