blob: 630abe9ef485069615bdef59edb8b7026a359663 (
plain) (
blame)
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
184
185
186
187
188
189
190
191
192
193
194
195
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: provides an interface for dlls to query information about players from the game dll
//
//=============================================================================//
#ifndef IPLAYERINFO_H
#define IPLAYERINFO_H
#ifdef _WIN32
#pragma once
#endif
#include "mathlib/vector.h"
// helper class for user commands
class CBotCmd
{
public:
CBotCmd()
{
Reset();
}
virtual ~CBotCmd() { };
void Reset()
{
command_number = 0;
tick_count = 0;
viewangles.Init();
forwardmove = 0.0f;
sidemove = 0.0f;
upmove = 0.0f;
buttons = 0;
impulse = 0;
weaponselect = 0;
weaponsubtype = 0;
random_seed = 0;
mousedx = 0;
mousedy = 0;
hasbeenpredicted = false;
}
CBotCmd& operator =( const CBotCmd& src )
{
if ( this == &src )
return *this;
command_number = src.command_number;
tick_count = src.tick_count;
viewangles = src.viewangles;
forwardmove = src.forwardmove;
sidemove = src.sidemove;
upmove = src.upmove;
buttons = src.buttons;
impulse = src.impulse;
weaponselect = src.weaponselect;
weaponsubtype = src.weaponsubtype;
random_seed = src.random_seed;
mousedx = src.mousedx;
mousedy = src.mousedy;
hasbeenpredicted = src.hasbeenpredicted;
return *this;
}
// For matching server and client commands for debugging
int command_number;
// the tick the client created this command
int tick_count;
// Player instantaneous view angles.
QAngle viewangles;
// Intended velocities
// forward velocity.
float forwardmove;
// sideways velocity.
float sidemove;
// upward velocity.
float upmove;
// Attack button states
int buttons;
// Impulse command issued.
byte impulse;
// Current weapon id
int weaponselect;
int weaponsubtype;
int random_seed; // For shared random functions
short mousedx; // mouse accum in x from create move
short mousedy; // mouse accum in y from create move
// Client only, tracks whether we've predicted this command at least once
bool hasbeenpredicted;
};
abstract_class IPlayerInfo
{
public:
// returns the players name (UTF-8 encoded)
virtual const char *GetName() = 0;
// returns the userid (slot number)
virtual int GetUserID() = 0;
// returns the string of their network (i.e Steam) ID
virtual const char *GetNetworkIDString() = 0;
// returns the team the player is on
virtual int GetTeamIndex() = 0;
// changes the player to a new team (if the game dll logic allows it)
virtual void ChangeTeam( int iTeamNum ) = 0;
// returns the number of kills this player has (exact meaning is mod dependent)
virtual int GetFragCount() = 0;
// returns the number of deaths this player has (exact meaning is mod dependent)
virtual int GetDeathCount() = 0;
// returns if this player slot is actually valid
virtual bool IsConnected() = 0;
// returns the armor/health of the player (exact meaning is mod dependent)
virtual int GetArmorValue() = 0;
// extensions added to V2
// various player flags
virtual bool IsHLTV() = 0;
virtual bool IsPlayer() = 0;
virtual bool IsFakeClient() = 0;
virtual bool IsDead() = 0;
virtual bool IsInAVehicle() = 0;
virtual bool IsObserver() = 0;
// player position and size
virtual const Vector GetAbsOrigin() = 0;
virtual const QAngle GetAbsAngles() = 0;
virtual const Vector GetPlayerMins() = 0;
virtual const Vector GetPlayerMaxs() = 0;
// the name of the weapon currently being carried
virtual const char *GetWeaponName() = 0;
// the name of the player model in use
virtual const char *GetModelName() = 0;
// current player health
virtual const int GetHealth() = 0;
// max health value
virtual const int GetMaxHealth() = 0;
// the last user input from this player
virtual CBotCmd GetLastUserCommand() = 0;
virtual bool IsReplay() = 0;
};
#define INTERFACEVERSION_PLAYERINFOMANAGER "PlayerInfoManager002"
abstract_class IPlayerInfoManager
{
public:
virtual IPlayerInfo *GetPlayerInfo( edict_t *pEdict ) = 0;
virtual CGlobalVars *GetGlobalVars() = 0;
};
abstract_class IBotController
{
public:
// change the bots position
virtual void SetAbsOrigin( Vector & vec ) = 0;
virtual void SetAbsAngles( QAngle & ang ) = 0;
virtual void SetLocalOrigin( const Vector& origin ) = 0;
virtual const Vector GetLocalOrigin( void ) = 0;
virtual void SetLocalAngles( const QAngle& angles ) = 0;
virtual const QAngle GetLocalAngles( void ) = 0;
// strip them of weapons, etc
virtual void RemoveAllItems( bool removeSuit ) = 0;
// give them a weapon
virtual void SetActiveWeapon( const char *WeaponName ) = 0;
// check various effect flags
virtual bool IsEFlagSet( int nEFlagMask ) = 0;
// fire a virtual move command to the bot
virtual void RunPlayerMove( CBotCmd *ucmd ) = 0;
};
#define INTERFACEVERSION_PLAYERBOTMANAGER "BotManager001"
abstract_class IBotManager
{
public:
virtual IBotController *GetBotController( edict_t *pEdict ) = 0;
// create a new bot and spawn it into the server
virtual edict_t *CreateBot( const char *botname ) = 0;
};
#endif // IPLAYERINFO_H
|