-
Notifications
You must be signed in to change notification settings - Fork 0
/
QuakeClient.h
183 lines (166 loc) · 5.95 KB
/
QuakeClient.h
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
// QuakeClient.h: interface for the CQuakeClient class.
//
// Pandora Bot v2.0
// By Darrin W. Cullop (dcullop@arizona.edu)
//
// Copyright (c) 1998-1999 by Darrin W. Cullop. All Rights Reserved.
//
// Permission to use, copy and distribute unedited copies of this whole
// document is hereby granted, provided that no fee is charged for the
// use or availability of this document (other than the normal connection
// costs for on-line services, if applicable). The above copyright notice
// and this permission notice must be left intact in all copies of this
// document. Short excerpts of this document may be quoted in discussion
// groups or mailing list articles, as long as a reference to the full
// document is given.
//
// Commercial distribution of this document, in whole or in part,
// requires prior agreement with the author. Commercial distribution
// includes any means by which the user has to pay either for the support
// (e.g. book, newsletter or CD-ROM) or for the document itself.
//
// Unauthorized commercial distribution is prohibited.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_QUAKECLIENT_H__3F622862_D2DB_11D1_AF1C_0060080A5FD2__INCLUDED_)
#define AFX_QUAKECLIENT_H__3F622862_D2DB_11D1_AF1C_0060080A5FD2__INCLUDED_
#include "GameState.h"
#include "QuakeConnect.h"
#include "AdvTime.h"
#include "TextMessage.h"
#include "TempEntity.h"
#include "Sound.h"
#include "MoveList.h"
#include "BotMove.h"
#include "MoveData.h"
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#define WAVE_FLIPOFF 0
#define WAVE_SALUTE 1
#define WAVE_TAUNT 2
#define WAVE_WAVE 3
#define WAVE_POINT 4
class CEntityState;
class CQuakeClient : public CQuakeConnect, public CGameState
{
// Attributes
protected:
CMoveList m_mlMoves;
long m_nServerVersion;
long m_nLevelKey;
BYTE m_nIsDemo;
CString m_strGameDir;
CString m_strMapName;
UINT m_nFrameNumber;
UINT m_nRefFrame;
CString m_strRemoteInfo;
// Bot Settings
BYTE m_nRetriesMax;
BYTE m_nFPS;
BYTE m_nMsgLevel;
UINT m_nRate;
BYTE m_nFOV;
BYTE m_nHand;
CString m_strSkin;
CString m_strName;
private:
CAdvTime m_tCurrentConnect;
CAdvTime m_tTotalConnect;
CAdvTime m_tLastMove;
BYTE m_nRetries;
// Construction / Destruction
public:
CQuakeClient();
virtual ~CQuakeClient() { Disconnect(); };
// Data Manipulation
public:
const CString& GetBotName() { return m_strName; };
const UINT& GetFrameNumber() { return m_nFrameNumber; };
// Overrides
public:
virtual void ProcessConnectionless( const CString& );
virtual void ProcessDataPacket( CQuakePacket* );
protected:
virtual void ProcessErrorMessage( const UINT& nResID ) { CQuakeConnect::ProcessErrorMessage( nResID ); };
virtual void OnDisconnected();
virtual void SendDisconnect();
// Overridables
protected:
virtual void OnMoveSent() {};
virtual void OnMuzzleFlash( const WORD ) {};
virtual void OnMuzzleFlash2( const WORD ) {};
virtual void OnServerNoOp() { SendNoOp(); };
virtual void OnUpdateEntityActive( const WORD ) {};
virtual void OnUpdateEntityRemove( const WORD ) {};
virtual void OnUpdateInventory() {};
virtual void OnUpdatePlayerInfo( const UINT ) {};
virtual void OnUpdatePlayerInfoStats( const UINT ) {};
virtual void OnUpdateServerData() {};
virtual void OnLevelChange();
virtual void OnPreConnect();
virtual void OnServerBeginLevel();
virtual void OnServerDisconnect();
virtual void OnServerReadError( CQuakePacket* );
virtual void OnServerReconnect();
virtual void ProcessDisplayText( CTextMessage* );
virtual void ProcessPrint( CTextMessage* );
virtual void ProcessCenterText( const CString& );
virtual void ProcessStuffText( const CString& );
virtual void ProcessLayout( const CString& );
virtual void ProcessTempEntity( CTempEntity* );
virtual void ProcessSound( CSound* );
// Operations
public:
float GetAverageMoveTime() const { return m_mlMoves.AverageMoveTime(); };
const CVector& GetDeltaOrigin() const { return m_mlMoves.GetDeltaOrigin(); };
// Communications Functions
void ConsoleCommand( const CString& strC ) { SendStringCmd( strC ); };
void WaveFlipoff() { Wave( WAVE_FLIPOFF ); };
void WavePoint() { Wave( WAVE_POINT ); };
void WaveSalute() { Wave( WAVE_SALUTE ); };
void WaveTaunt() { Wave( WAVE_TAUNT ); };
void WaveWave() { Wave( WAVE_WAVE ); };
void DisplayText( const UINT& );
void DisplayText( const CString& );
void GetConnectTime( CString& ) const;
void Say( const CString& );
void SayTeam( const CString& );
void SendMove( const CBotMove& );
void SendMove( CMoveData* );
void Wave( const BYTE );
protected:
void Connect( const CString& );
void SendStringCmd( const CString& );
void SendStringCmd( const UINT& );
private:
// Send Functions
void SendChallengeRequest();
void SendConnectRequest( const CString& );
void SendNoOp();
void SendUserInfo( const CString& );
void SendMove();
// Receive Functions
void DecodeMuzzleFlash( CQuakePacket* );
void DecodeMuzzleFlash2( CQuakePacket* );
void DecodeTempEntity( CQuakePacket* );
void DecodeLayout( CQuakePacket* );
void DecodeInventory( CQuakePacket* );
void DecodeSound( CQuakePacket* );
void DecodePrint( CQuakePacket* );
void DecodeStuffText( CQuakePacket* );
void DecodeServerData( CQuakePacket* );
void DecodeConfigString( CQuakePacket* );
void DecodeSpawnBaseline( CQuakePacket* );
void DecodeCenterPrint( CQuakePacket* );
void DecodeDownload( CQuakePacket* );
void DecodePlayerInfo( CQuakePacket* );
void DecodePacketEntities( CQuakePacket* );
void DecodeDeltaPacketEntities( CQuakePacket* );
void DecodeFrame( CQuakePacket* );
void DecodeEntityHeader( CQuakePacket*, WORD&, UINT& );
void DecodeEntityState( CQuakePacket*, CEntityState*, const UINT& );
// Other Functions
CString GetClientStats() const;
};
#endif // !defined(AFX_QUAKECLIENT_H__3F622862_D2DB_11D1_AF1C_0060080A5FD2__INCLUDED_)