You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
2.5 KiB
133 lines
2.5 KiB
// AgCTF.h: interface for the AgCTF class. |
|
// |
|
////////////////////////////////////////////////////////////////////// |
|
|
|
#if !defined(__AG_CTF_H__) |
|
#define __AG_CTF_H__ |
|
|
|
#if _MSC_VER > 1000 |
|
#pragma once |
|
#endif // _MSC_VER > 1000 |
|
|
|
#define CTF_TEAM1_NAME "blue" |
|
#define CTF_TEAM2_NAME "red" |
|
|
|
|
|
class AgCTFFileItemCache; |
|
class AgCTFFileItem |
|
{ |
|
char m_szName[32]; |
|
Vector m_vOrigin; |
|
Vector m_vAngles; |
|
|
|
public: |
|
AgCTFFileItem(); |
|
virtual ~AgCTFFileItem(); |
|
|
|
void Show(); |
|
|
|
friend class AgCTFFileItemCache; |
|
}; |
|
|
|
class AgCTFFileItemCache |
|
{ |
|
bool m_bInitDone; |
|
typedef list<AgCTFFileItem*> AgCTFFileItemList; |
|
AgCTFFileItemList m_lstFileItems; |
|
|
|
void Load(CBasePlayer* pPlayer = NULL); |
|
void Save(CBasePlayer* pPlayer = NULL); |
|
|
|
public: |
|
AgCTFFileItemCache(); |
|
virtual ~AgCTFFileItemCache(); |
|
|
|
|
|
void Init(); |
|
|
|
void Add(const AgString& sItem,CBasePlayer* pPlayer); |
|
void Del(CBasePlayer* pPlayer); |
|
void List(CBasePlayer* pPlayer); |
|
}; |
|
|
|
|
|
class AgCTF |
|
{ |
|
int m_iTeam1Captures; |
|
int m_iTeam2Captures; |
|
|
|
int m_iPlayerFlag1; |
|
int m_iPlayerFlag2; |
|
|
|
enum CTFStatus { Waiting, Countdown, Spawning, Playing}; |
|
CTFStatus m_Status; |
|
float m_fNextCountdown; |
|
float m_fMatchStart; |
|
AgString m_sWinner; |
|
|
|
public: |
|
AgCTF(); |
|
virtual ~AgCTF(); |
|
|
|
bool CaptureLimit(); |
|
void ResetCaptures(); |
|
void ResetScore(bool bResetCaptures = true); |
|
void SendCaptures(CBasePlayer* pPlayer); |
|
void Think(); |
|
void RoundBasedThink(); |
|
|
|
void PlayerInitHud(CBasePlayer* pPlayer); |
|
void ClientDisconnected(CBasePlayer* pPlayer); |
|
void ClientConnected(CBasePlayer* pPlayer); |
|
void PlayerKilled(CBasePlayer* pPlayer,entvars_t *pKiller); |
|
void AddPointsForKill(CBasePlayer *pAttacker, CBasePlayer *pKilled); |
|
|
|
void PlayerDropFlag(CBasePlayer* pPlayer, bool bPlayerDrop = false); |
|
|
|
void RoundOver(const char* pszWinner); |
|
|
|
AgCTFFileItemCache m_FileItemCache; |
|
}; |
|
|
|
|
|
class AgCTFFlag : public CBaseEntity |
|
{ |
|
public: |
|
void Spawn( void ); |
|
|
|
float m_fNextTouch; |
|
bool m_bDropped; |
|
char m_szTeamName[64]; |
|
float m_fNextReset; |
|
|
|
static void ResetFlag(const char *pTeamName); |
|
|
|
void ResetFlag(); |
|
|
|
private: |
|
void Precache ( void ); |
|
void Capture(CBasePlayer *pPlayer, const char *pTeamName); |
|
void Materialize( void ); |
|
void FlagTouch( CBaseEntity *pOther ); |
|
BOOL MyTouch( CBasePlayer *pPlayer ); |
|
void Think( void ); |
|
}; |
|
|
|
class AgCTFPlayerFlag : public CBaseEntity |
|
{ |
|
public: |
|
void Spawn( void ); |
|
virtual void UpdateOnRemove( void ); |
|
|
|
CBasePlayer* m_pOwner; |
|
char m_szTeamName[64]; |
|
|
|
private: |
|
void Precache ( void ); |
|
void Think( void ); |
|
}; |
|
|
|
|
|
|
|
|
|
#endif // !defined(__AG_CTF_H__)
|
|
|