|
dvander@435
|
1 |
/** |
|
dvander@435
|
2 |
* vim: set ts=4 : |
|
ds@1330
|
3 |
* ============================================================================= |
|
dvander@1226
|
4 |
* SourceMod |
|
ds@1947
|
5 |
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. |
|
ds@1330
|
6 |
* ============================================================================= |
|
dvander@435
|
7 |
* |
|
ds@1330
|
8 |
* This program is free software; you can redistribute it and/or modify it under |
|
ds@1330
|
9 |
* the terms of the GNU General Public License, version 3.0, as published by the |
|
ds@1330
|
10 |
* Free Software Foundation. |
|
dvander@435
|
11 |
* |
|
ds@1330
|
12 |
* This program is distributed in the hope that it will be useful, but WITHOUT |
|
ds@1330
|
13 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
|
ds@1330
|
14 |
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
|
ds@1330
|
15 |
* details. |
|
dvander@1226
|
16 |
* |
|
ds@1330
|
17 |
* You should have received a copy of the GNU General Public License along with |
|
ds@1330
|
18 |
* this program. If not, see <http://www.gnu.org/licenses/>. |
|
dvander@1226
|
19 |
* |
|
ds@1330
|
20 |
* As a special exception, AlliedModders LLC gives you permission to link the |
|
ds@1330
|
21 |
* code of this program (as well as its derivative works) to "Half-Life 2," the |
|
ds@1330
|
22 |
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software |
|
ds@1330
|
23 |
* by the Valve Corporation. You must obey the GNU General Public License in |
|
ds@1330
|
24 |
* all respects for all other code used. Additionally, AlliedModders LLC grants |
|
ds@1330
|
25 |
* this exception to all derivative works. AlliedModders LLC defines further |
|
ds@1330
|
26 |
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), |
|
ds@1330
|
27 |
* or <http://www.sourcemod.net/license.php>. |
|
dvander@435
|
28 |
* |
|
dvander@435
|
29 |
* Version: $Id$ |
|
dvander@435
|
30 |
*/ |
|
dvander@435
|
31 |
|
|
dvander@435
|
32 |
#ifndef _INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_ |
|
dvander@435
|
33 |
#define _INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_ |
|
dvander@435
|
34 |
|
|
dvander@1137
|
35 |
/** |
|
dvander@1137
|
36 |
* @file IPlayerHelpers.h |
|
dvander@1137
|
37 |
* @brief Defines basic helper functions for Half-Life 2 clients |
|
dvander@1137
|
38 |
*/ |
|
dvander@1137
|
39 |
|
|
dvander@435
|
40 |
#include <IShareSys.h> |
|
dvander@458
|
41 |
#include <IAdminSystem.h> |
|
dvander@435
|
42 |
|
|
dvander@435
|
43 |
#define SMINTERFACE_PLAYERMANAGER_NAME "IPlayerManager" |
|
kyle@4217
|
44 |
#define SMINTERFACE_PLAYERMANAGER_VERSION 19 |
|
dvander@435
|
45 |
|
|
dvander@435
|
46 |
struct edict_t; |
|
dvander@1455
|
47 |
class IPlayerInfo; |
|
dvander@435
|
48 |
|
|
dvander@1519
|
49 |
#define SM_REPLY_CONSOLE 0 /**< Reply to console. */ |
|
dvander@1519
|
50 |
#define SM_REPLY_CHAT 1 /**< Reply to chat. */ |
|
dvander@1519
|
51 |
|
|
dvander@435
|
52 |
namespace SourceMod |
|
dvander@435
|
53 |
{ |
|
dvander@435
|
54 |
/** |
|
dvander@435
|
55 |
* @brief Abstracts some Half-Life 2 and SourceMod properties about clients. |
|
dvander@435
|
56 |
*/ |
|
dvander@435
|
57 |
class IGamePlayer |
|
dvander@435
|
58 |
{ |
|
dvander@435
|
59 |
public: |
|
dvander@435
|
60 |
/** |
|
dvander@435
|
61 |
* @brief Returns the player's name. |
|
dvander@435
|
62 |
* |
|
dvander@435
|
63 |
* @return String containing the player's name, |
|
dvander@435
|
64 |
* or NULL if unavailable. |
|
dvander@435
|
65 |
*/ |
|
dvander@615
|
66 |
virtual const char *GetName() =0; |
|
dvander@435
|
67 |
|
|
dvander@435
|
68 |
/** |
|
dvander@435
|
69 |
* @brief Returns the player's IP address. |
|
dvander@435
|
70 |
* |
|
dvander@435
|
71 |
* @return String containing the player's IP address, |
|
dvander@435
|
72 |
* or NULL if unavailable. |
|
dvander@435
|
73 |
*/ |
|
dvander@615
|
74 |
virtual const char *GetIPAddress() =0; |
|
dvander@435
|
75 |
|
|
dvander@435
|
76 |
/** |
|
dvander@435
|
77 |
* @brief Returns the player's authentication string. |
|
dvander@435
|
78 |
* |
|
asherkin@3808
|
79 |
* @param validated Check backend validation status. |
|
dvander@435
|
80 |
* @return String containing the player's auth string. |
|
dvander@435
|
81 |
* May be NULL if unavailable. |
|
dvander@435
|
82 |
*/ |
|
asherkin@3808
|
83 |
virtual const char *GetAuthString(bool validated = true) =0; |
|
dvander@435
|
84 |
|
|
dvander@435
|
85 |
/** |
|
dvander@435
|
86 |
* @brief Returns the player's edict_t structure. |
|
dvander@435
|
87 |
* |
|
dvander@435
|
88 |
* @return edict_t pointer, or NULL if unavailable. |
|
dvander@435
|
89 |
*/ |
|
dvander@615
|
90 |
virtual edict_t *GetEdict() =0; |
|
dvander@435
|
91 |
|
|
dvander@435
|
92 |
/** |
|
dvander@435
|
93 |
* @brief Returns whether the player is in game (putinserver). |
|
dvander@435
|
94 |
* |
|
dvander@435
|
95 |
* @return True if in game, false otherwise. |
|
dvander@435
|
96 |
*/ |
|
dvander@615
|
97 |
virtual bool IsInGame() =0; |
|
dvander@435
|
98 |
|
|
dvander@435
|
99 |
/** |
|
dvander@435
|
100 |
* @brief Returns whether the player is connected. |
|
dvander@435
|
101 |
* |
|
dvander@435
|
102 |
* Note: If this returns true, all above functions except for |
|
dvander@435
|
103 |
* GetAuthString() should return non-NULL results. |
|
dvander@435
|
104 |
* |
|
dvander@435
|
105 |
* @return True if connected, false otherwise. |
|
dvander@435
|
106 |
*/ |
|
dvander@615
|
107 |
virtual bool IsConnected() =0; |
|
dvander@435
|
108 |
|
|
dvander@435
|
109 |
/** |
|
dvander@435
|
110 |
* @brief Returns whether the player is a fake client. |
|
dvander@435
|
111 |
* |
|
dvander@435
|
112 |
* @return True if a fake client, false otherwise. |
|
dvander@435
|
113 |
*/ |
|
dvander@615
|
114 |
virtual bool IsFakeClient() =0; |
|
dvander@458
|
115 |
|
|
dvander@458
|
116 |
/** |
|
dvander@458
|
117 |
* @brief Returns the client's AdminId, if any. |
|
dvander@458
|
118 |
* |
|
dvander@458
|
119 |
* @return AdminId, or INVALID_ADMIN_ID if none. |
|
dvander@458
|
120 |
*/ |
|
dvander@615
|
121 |
virtual AdminId GetAdminId() =0; |
|
dvander@458
|
122 |
|
|
dvander@458
|
123 |
/** |
|
dvander@458
|
124 |
* @brief Sets the client's AdminId. |
|
dvander@458
|
125 |
* |
|
dvander@458
|
126 |
* @param id AdminId to set. |
|
dvander@458
|
127 |
* @param temp If true, the id will be invalidated on disconnect. |
|
dvander@458
|
128 |
*/ |
|
dvander@458
|
129 |
virtual void SetAdminId(AdminId id, bool temp) =0; |
|
dvander@1350
|
130 |
|
|
dvander@1350
|
131 |
/** |
|
dvander@1353
|
132 |
* @brief Returns the client's userid. |
|
dvander@1353
|
133 |
* |
|
dvander@1353
|
134 |
* @return Userid. |
|
dvander@1353
|
135 |
*/ |
|
dvander@1353
|
136 |
virtual int GetUserId() =0; |
|
dvander@1353
|
137 |
|
|
dvander@1353
|
138 |
/** |
|
faluco@1352
|
139 |
* @brief Returns the client's language id. |
|
faluco@1352
|
140 |
* |
|
faluco@1352
|
141 |
* @return Language id. |
|
faluco@1352
|
142 |
*/ |
|
faluco@1352
|
143 |
virtual unsigned int GetLanguageId() =0; |
|
dvander@1455
|
144 |
|
|
dvander@1455
|
145 |
/** |
|
dvander@1455
|
146 |
* @brief Returns a player's IPlayerInfo object, if any. |
|
dvander@1455
|
147 |
* |
|
dvander@1455
|
148 |
* @return IPlayerInfo pointer, or NULL if none. |
|
dvander@1455
|
149 |
*/ |
|
dvander@1455
|
150 |
virtual IPlayerInfo *GetPlayerInfo() =0; |
|
dvander@1688
|
151 |
|
|
dvander@1688
|
152 |
/** |
|
dvander@1688
|
153 |
* @brief Runs through Core's admin authorization checks. If the |
|
dvander@1688
|
154 |
* client is already an admin, no checks are performed. |
|
dvander@1688
|
155 |
* |
|
dvander@1688
|
156 |
* Note that this function operates solely against the in-memory admin |
|
dvander@1688
|
157 |
* cache. It will check steamids, IPs, names, and verify a password |
|
dvander@1688
|
158 |
* if one exists. To implement other authentication schemes, simply |
|
dvander@1688
|
159 |
* don't call this function and use IGamePlayer::SetAdminId() instead. |
|
dvander@1688
|
160 |
* |
|
dvander@1688
|
161 |
* @return True if access changed, false otherwise. |
|
dvander@1688
|
162 |
*/ |
|
dvander@1688
|
163 |
virtual bool RunAdminCacheChecks() =0; |
|
dvander@1688
|
164 |
|
|
dvander@1688
|
165 |
/** |
|
dvander@1688
|
166 |
* @brief Notifies all listeners that the client has completed |
|
dvander@1688
|
167 |
* all of your post-connection (in-game, auth, admin) checks. |
|
dvander@1688
|
168 |
* |
|
dvander@1688
|
169 |
* If you returned "false" from OnClientPreAdminCheck(), you must |
|
dvander@1688
|
170 |
* ALWAYS manually invoke this function, even if RunAdminCacheChecks() |
|
dvander@1688
|
171 |
* failed or you did not assign an AdminId. Failure to call this |
|
dvander@1688
|
172 |
* function could result in plugins (such as reservedslots) not |
|
dvander@1688
|
173 |
* working properly. |
|
dvander@1688
|
174 |
* |
|
dvander@1688
|
175 |
* If you are implementing asynchronous fetches, and the client |
|
dvander@1688
|
176 |
* disconnects during your fetching process, you should make sure to |
|
dvander@1688
|
177 |
* recognize that case and not call this function. That is, do not |
|
dvander@1688
|
178 |
* call this function on mismatched PreCheck calls, or on disconnected |
|
dvander@1688
|
179 |
* clients. A good way to check this is to pass userids around, which |
|
dvander@1688
|
180 |
* are unique per client connection. |
|
dvander@1688
|
181 |
* |
|
dvander@1688
|
182 |
* Calling this has no effect if it has already been called on the |
|
dvander@1688
|
183 |
* given client (thus it is safe for multiple asynchronous plugins to |
|
dvander@1688
|
184 |
* call it at various times). |
|
dvander@1688
|
185 |
*/ |
|
dvander@1688
|
186 |
virtual void NotifyPostAdminChecks() =0; |
|
pred@2591
|
187 |
|
|
pred@2591
|
188 |
/** |
|
pred@2591
|
189 |
* @brief Returns the clients unique serial identifier. |
|
pred@2591
|
190 |
* |
|
pred@2591
|
191 |
* @return Serial number. |
|
pred@2591
|
192 |
*/ |
|
pred@2591
|
193 |
virtual unsigned int GetSerial() =0; |
|
pred@2667
|
194 |
|
|
pred@2667
|
195 |
/** |
|
pred@2667
|
196 |
* @brief Return whether the client is authorized. |
|
pred@2667
|
197 |
* |
|
pred@2667
|
198 |
* @return True if authorized, false otherwise. |
|
pred@2667
|
199 |
*/ |
|
theY4Kman@2777
|
200 |
virtual bool IsAuthorized() =0; |
|
theY4Kman@2777
|
201 |
|
|
theY4Kman@2777
|
202 |
/** |
|
theY4Kman@2777
|
203 |
* @brief Kicks the client with a message |
|
theY4Kman@2777
|
204 |
* |
|
theY4Kman@2777
|
205 |
* @param message The message shown to the client when kicked |
|
theY4Kman@2777
|
206 |
*/ |
|
theY4Kman@2777
|
207 |
virtual void Kick(const char *message) =0; |
|
theY4Kman@2777
|
208 |
|
|
theY4Kman@2777
|
209 |
/** |
|
theY4Kman@2777
|
210 |
* @brief Returns whether the client is marked as being in the kick |
|
theY4Kman@2777
|
211 |
* queue. The client doesn't necessarily have to be in the actual kick |
|
theY4Kman@2777
|
212 |
* queue for this function to return true. |
|
theY4Kman@2777
|
213 |
* |
|
theY4Kman@2777
|
214 |
* @return True if in the kick queue, false otherwise. |
|
theY4Kman@2777
|
215 |
*/ |
|
theY4Kman@2777
|
216 |
virtual bool IsInKickQueue() =0; |
|
theY4Kman@2777
|
217 |
|
|
theY4Kman@2777
|
218 |
/** |
|
theY4Kman@2777
|
219 |
* @brief Marks the client as being in the kick queue. They are not |
|
theY4Kman@2777
|
220 |
* actually added to the kick queue. Use IGameHelpers::AddDelayedKick() |
|
theY4Kman@2777
|
221 |
* to actually add them to the queue. |
|
theY4Kman@2777
|
222 |
*/ |
|
theY4Kman@2777
|
223 |
virtual void MarkAsBeingKicked() =0; |
|
skamonkey@3213
|
224 |
|
|
skamonkey@3213
|
225 |
virtual void SetLanguageId(unsigned int id) =0; |
|
skamonkey@3418
|
226 |
|
|
skamonkey@3418
|
227 |
/** |
|
skamonkey@3418
|
228 |
* @brief Returns whether the player is the SourceTV bot. |
|
skamonkey@3418
|
229 |
* |
|
skamonkey@3418
|
230 |
* @return True if the SourceTV bot, false otherwise. |
|
skamonkey@3418
|
231 |
*/ |
|
skamonkey@3418
|
232 |
virtual bool IsSourceTV() const =0; |
|
skamonkey@3418
|
233 |
|
|
skamonkey@3418
|
234 |
/** |
|
skamonkey@3418
|
235 |
* @brief Returns whether the player is the Replay bot. |
|
skamonkey@3418
|
236 |
* |
|
skamonkey@3418
|
237 |
* @return True if the Replay bot, false otherwise. |
|
skamonkey@3418
|
238 |
*/ |
|
skamonkey@3418
|
239 |
virtual bool IsReplay() const =0; |
|
kyle@3825
|
240 |
|
|
kyle@3825
|
241 |
/** |
|
kyle@3825
|
242 |
* @brief Returns the client's Steam account ID. |
|
kyle@3825
|
243 |
* |
|
kyle@3825
|
244 |
* @param validated Check backend validation status. |
|
kyle@3825
|
245 |
* |
|
kyle@3825
|
246 |
* @return Steam account ID or 0 if not available. |
|
kyle@3825
|
247 |
*/ |
|
kyle@3825
|
248 |
virtual unsigned int GetSteamAccountID(bool validated = true) =0; |
|
skamonkey@3913
|
249 |
|
|
skamonkey@3913
|
250 |
/** |
|
skamonkey@3913
|
251 |
* @brief Returns the client's edict/entity index. |
|
skamonkey@3913
|
252 |
* |
|
skamonkey@3913
|
253 |
* @return Client's index. |
|
skamonkey@3913
|
254 |
*/ |
|
skamonkey@3913
|
255 |
virtual int GetIndex() const =0; |
|
kyle@4217
|
256 |
|
|
kyle@4217
|
257 |
/** |
|
kyle@4217
|
258 |
* @brief Prints a string to the client console. |
|
kyle@4217
|
259 |
* |
|
kyle@4217
|
260 |
* @param pMsg String to print. |
|
kyle@4217
|
261 |
*/ |
|
kyle@4217
|
262 |
virtual void PrintToConsole(const char *pMsg) =0; |
|
dvander@435
|
263 |
}; |
|
dvander@435
|
264 |
|
|
dvander@435
|
265 |
/** |
|
dvander@435
|
266 |
* @brief Provides callbacks for important client events. |
|
dvander@435
|
267 |
*/ |
|
dvander@435
|
268 |
class IClientListener |
|
dvander@435
|
269 |
{ |
|
dvander@435
|
270 |
public: |
|
faluco@620
|
271 |
/** |
|
faluco@620
|
272 |
* @brief Returns the current client listener version. |
|
faluco@620
|
273 |
* |
|
faluco@620
|
274 |
* @return Client listener version. |
|
faluco@620
|
275 |
*/ |
|
dvander@541
|
276 |
virtual unsigned int GetClientListenerVersion() |
|
dvander@435
|
277 |
{ |
|
dvander@435
|
278 |
return SMINTERFACE_PLAYERMANAGER_VERSION; |
|
dvander@435
|
279 |
} |
|
dvander@435
|
280 |
public: |
|
dvander@435
|
281 |
/** |
|
dvander@435
|
282 |
* @brief Called when a client requests connection. |
|
dvander@435
|
283 |
* |
|
dvander@435
|
284 |
* @param client Index of the client. |
|
dvander@435
|
285 |
* @param error Error buffer for a disconnect reason. |
|
dvander@435
|
286 |
* @param maxlength Maximum length of error buffer. |
|
dvander@435
|
287 |
* @return True to allow client, false to reject. |
|
dvander@435
|
288 |
*/ |
|
dvander@435
|
289 |
virtual bool InterceptClientConnect(int client, char *error, size_t maxlength) |
|
dvander@435
|
290 |
{ |
|
dvander@435
|
291 |
return true; |
|
dvander@435
|
292 |
} |
|
dvander@435
|
293 |
|
|
dvander@435
|
294 |
/** |
|
dvander@435
|
295 |
* @brief Called when a client has connected. |
|
dvander@435
|
296 |
* |
|
dvander@435
|
297 |
* @param client Index of the client. |
|
dvander@435
|
298 |
*/ |
|
dvander@435
|
299 |
virtual void OnClientConnected(int client) |
|
dvander@435
|
300 |
{ |
|
dvander@435
|
301 |
} |
|
dvander@435
|
302 |
|
|
dvander@435
|
303 |
/** |
|
dvander@435
|
304 |
* @brief Called when a client is put in server. |
|
dvander@435
|
305 |
* |
|
dvander@435
|
306 |
* @param client Index of the client. |
|
dvander@435
|
307 |
*/ |
|
dvander@435
|
308 |
virtual void OnClientPutInServer(int client) |
|
dvander@435
|
309 |
{ |
|
dvander@435
|
310 |
} |
|
dvander@435
|
311 |
|
|
dvander@435
|
312 |
/** |
|
dvander@435
|
313 |
* @brief Called when a client is disconnecting (not fully disconnected yet). |
|
dvander@435
|
314 |
* |
|
dvander@435
|
315 |
* @param client Index of the client. |
|
dvander@435
|
316 |
*/ |
|
dvander@435
|
317 |
virtual void OnClientDisconnecting(int client) |
|
dvander@435
|
318 |
{ |
|
dvander@435
|
319 |
} |
|
dvander@435
|
320 |
|
|
dvander@435
|
321 |
/** |
|
dvander@435
|
322 |
* @brief Called when a client has fully disconnected. |
|
dvander@435
|
323 |
* |
|
dvander@435
|
324 |
* @param client Index of the client. |
|
dvander@435
|
325 |
*/ |
|
dvander@435
|
326 |
virtual void OnClientDisconnected(int client) |
|
dvander@435
|
327 |
{ |
|
dvander@435
|
328 |
} |
|
dvander@435
|
329 |
|
|
dvander@435
|
330 |
/** |
|
ds@729
|
331 |
* @brief Called when a client has received authorization. |
|
dvander@435
|
332 |
* |
|
dvander@435
|
333 |
* @param client Index of the client. |
|
dvander@435
|
334 |
* @param authstring Authorization string. |
|
dvander@435
|
335 |
*/ |
|
dvander@435
|
336 |
virtual void OnClientAuthorized(int client, const char *authstring) |
|
dvander@435
|
337 |
{ |
|
dvander@435
|
338 |
} |
|
dvander@1485
|
339 |
|
|
dvander@1485
|
340 |
/** |
|
dvander@1485
|
341 |
* @brief Called when the server is activated. |
|
dvander@1485
|
342 |
*/ |
|
dvander@1485
|
343 |
virtual void OnServerActivated(int max_clients) |
|
dvander@1485
|
344 |
{ |
|
dvander@1485
|
345 |
} |
|
dvander@1688
|
346 |
|
|
dvander@1688
|
347 |
/** |
|
dvander@1688
|
348 |
* @brief Called once a client is authorized and fully in-game, but |
|
dvander@1688
|
349 |
* before admin checks are done. This can be used to override the |
|
dvander@1688
|
350 |
* default admin checks for a client. |
|
dvander@1688
|
351 |
* |
|
dvander@1688
|
352 |
* By default, this function allows the authentication process to |
|
dvander@1688
|
353 |
* continue as normal. If you need to delay the cache searching |
|
dvander@1688
|
354 |
* process in order to get asynchronous data, then return false here. |
|
dvander@1688
|
355 |
* |
|
dvander@1688
|
356 |
* If you return false, you must call IPlayerManager::NotifyPostAdminCheck |
|
dvander@1688
|
357 |
* for the same client, or else the OnClientPostAdminCheck callback will |
|
dvander@1688
|
358 |
* never be called. |
|
dvander@1688
|
359 |
* |
|
dvander@1688
|
360 |
* @param client Client index. |
|
dvander@1688
|
361 |
* @return True to continue normally, false to override |
|
dvander@1688
|
362 |
* the authentication process. |
|
dvander@1688
|
363 |
*/ |
|
dvander@1688
|
364 |
virtual bool OnClientPreAdminCheck(int client) |
|
dvander@1688
|
365 |
{ |
|
dvander@1688
|
366 |
return true; |
|
dvander@1688
|
367 |
} |
|
dvander@1688
|
368 |
|
|
dvander@1688
|
369 |
/** |
|
dvander@1688
|
370 |
* @brief Called once a client is authorized and fully in-game, and |
|
dvander@1688
|
371 |
* after all post-connection authorizations have been passed. If the |
|
dvander@1688
|
372 |
* client does not have an AdminId by this stage, it means that no |
|
dvander@1688
|
373 |
* admin entry was in the cache that matched, and the user could not |
|
dvander@1688
|
374 |
* be authenticated as an admin. |
|
dvander@1688
|
375 |
* |
|
dvander@1688
|
376 |
* @param client Client index. |
|
dvander@1688
|
377 |
*/ |
|
dvander@1688
|
378 |
virtual void OnClientPostAdminCheck(int client) |
|
dvander@1688
|
379 |
{ |
|
dvander@1688
|
380 |
} |
|
pred@2323
|
381 |
|
|
pred@2323
|
382 |
/** |
|
pred@2323
|
383 |
* @brief Notifies the extension that the maxplayers value has changed |
|
pred@2323
|
384 |
* |
|
pred@2323
|
385 |
* @param newvalue New maxplayers value. |
|
pred@2323
|
386 |
*/ |
|
pred@2323
|
387 |
virtual void OnMaxPlayersChanged(int newvalue) |
|
pred@2323
|
388 |
{ |
|
pred@2323
|
389 |
} |
|
rgr_02@3212
|
390 |
|
|
rgr_02@3212
|
391 |
/** |
|
rgr_02@3212
|
392 |
* @brief Notifies the extension that a clients settings changed |
|
rgr_02@3212
|
393 |
* |
|
rgr_02@3212
|
394 |
* @param client Client index. |
|
rgr_02@3212
|
395 |
*/ |
|
rgr_02@3212
|
396 |
virtual void OnClientSettingsChanged(int client) |
|
rgr_02@3212
|
397 |
{ |
|
rgr_02@3212
|
398 |
} |
|
dvander@435
|
399 |
}; |
|
dvander@435
|
400 |
|
|
dvander@1623
|
401 |
#define COMMAND_FILTER_ALIVE (1<<0) /**< Only allow alive players */ |
|
dvander@1623
|
402 |
#define COMMAND_FILTER_DEAD (1<<1) /**< Only filter dead players */ |
|
dvander@1623
|
403 |
#define COMMAND_FILTER_CONNECTED (1<<2) /**< Allow players not fully in-game */ |
|
dvander@1623
|
404 |
#define COMMAND_FILTER_NO_IMMUNITY (1<<3) /**< Ignore immunity rules */ |
|
dvander@1623
|
405 |
#define COMMAND_FILTER_NO_MULTI (1<<4) /**< Do not allow multiple target patterns */ |
|
dvander@1623
|
406 |
#define COMMAND_FILTER_NO_BOTS (1<<5) /**< Do not allow bots to be targetted */ |
|
dvander@1623
|
407 |
|
|
dvander@1623
|
408 |
#define COMMAND_TARGET_VALID 1 /**< Client passed the filter */ |
|
dvander@1623
|
409 |
#define COMMAND_TARGET_NONE 0 /**< No target was found */ |
|
dvander@1623
|
410 |
#define COMMAND_TARGET_NOT_ALIVE -1 /**< Single client is not alive */ |
|
dvander@1623
|
411 |
#define COMMAND_TARGET_NOT_DEAD -2 /**< Single client is not dead */ |
|
dvander@1623
|
412 |
#define COMMAND_TARGET_NOT_IN_GAME -3 /**< Single client is not in game */ |
|
dvander@1623
|
413 |
#define COMMAND_TARGET_IMMUNE -4 /**< Single client is immune */ |
|
dvander@1623
|
414 |
#define COMMAND_TARGET_EMPTY_FILTER -5 /**< A multi-filter (such as @all) had no targets */ |
|
dvander@1623
|
415 |
#define COMMAND_TARGET_NOT_HUMAN -6 /**< Target was not human */ |
|
dvander@1623
|
416 |
#define COMMAND_TARGET_AMBIGUOUS -7 /**< Partial name had too many targets */ |
|
dvander@1623
|
417 |
|
|
dvander@1623
|
418 |
#define COMMAND_TARGETNAME_RAW 0 /**< Target name is a raw string */ |
|
dvander@1623
|
419 |
#define COMMAND_TARGETNAME_ML 1 /**< Target name is a multi-lingual phrase */ |
|
dvander@1623
|
420 |
|
|
dvander@1623
|
421 |
/** |
|
dvander@1623
|
422 |
* @brief Holds the many command target info parameters. |
|
dvander@1623
|
423 |
*/ |
|
dvander@1623
|
424 |
struct cmd_target_info_t |
|
dvander@1623
|
425 |
{ |
|
dvander@1623
|
426 |
const char *pattern; /**< IN: Target pattern string. */ |
|
dvander@1623
|
427 |
int admin; /**< IN: Client admin index, or 0 if server .*/ |
|
dvander@1623
|
428 |
cell_t *targets; /**< IN: Array to store targets. */ |
|
dvander@1623
|
429 |
cell_t max_targets; /**< IN: Max targets (always >= 1) */ |
|
dvander@1623
|
430 |
int flags; /**< IN: COMMAND_FILTER flags. */ |
|
dvander@1623
|
431 |
char *target_name; /**< OUT: Buffer to store target name. */ |
|
dvander@1623
|
432 |
size_t target_name_maxlength; /**< IN: Maximum length of the target name buffer. */ |
|
dvander@1623
|
433 |
int target_name_style; /**< OUT: Target name style (COMMAND_TARGETNAME) */ |
|
dvander@1623
|
434 |
int reason; /**< OUT: COMMAND_TARGET reason. */ |
|
dvander@1623
|
435 |
unsigned int num_targets; /**< OUT: Number of targets. */ |
|
dvander@1623
|
436 |
}; |
|
dvander@1623
|
437 |
|
|
dvander@1623
|
438 |
/** |
|
dvander@1623
|
439 |
* @brief Intercepts a command target operation. |
|
dvander@1623
|
440 |
*/ |
|
dvander@1623
|
441 |
class ICommandTargetProcessor |
|
dvander@1623
|
442 |
{ |
|
dvander@1623
|
443 |
public: |
|
dvander@1623
|
444 |
/** |
|
dvander@1623
|
445 |
* @brief Must process the command target and return a COMMAND_TARGET value. |
|
dvander@1623
|
446 |
* |
|
dvander@1623
|
447 |
* @param info Struct containing command target information. |
|
dvander@1623
|
448 |
* Any members labelled OUT must be filled if processing |
|
dvander@1623
|
449 |
* is to be completed (i.e. true returned). |
|
dvander@1623
|
450 |
* @return True to end processing, false to let Core continue. |
|
dvander@1623
|
451 |
*/ |
|
dvander@1623
|
452 |
virtual bool ProcessCommandTarget(cmd_target_info_t *info) =0; |
|
dvander@1623
|
453 |
}; |
|
dvander@1623
|
454 |
|
|
dvander@435
|
455 |
class IPlayerManager : public SMInterface |
|
dvander@435
|
456 |
{ |
|
dvander@435
|
457 |
public: |
|
dvander@435
|
458 |
const char *GetInterfaceName() |
|
dvander@435
|
459 |
{ |
|
dvander@435
|
460 |
return SMINTERFACE_PLAYERMANAGER_NAME; |
|
dvander@435
|
461 |
} |
|
dvander@435
|
462 |
unsigned int GetInterfaceVersion() |
|
dvander@435
|
463 |
{ |
|
dvander@435
|
464 |
return SMINTERFACE_PLAYERMANAGER_VERSION; |
|
dvander@435
|
465 |
} |
|
dvander@435
|
466 |
public: |
|
dvander@435
|
467 |
/** |
|
dvander@435
|
468 |
* @brief Adds a client listener. |
|
dvander@435
|
469 |
* |
|
dvander@435
|
470 |
* @param listener Pointer to an IClientListener. |
|
dvander@435
|
471 |
*/ |
|
dvander@435
|
472 |
virtual void AddClientListener(IClientListener *listener) =0; |
|
dvander@435
|
473 |
|
|
dvander@435
|
474 |
/** |
|
dvander@435
|
475 |
* @brief Removes a client listener. |
|
dvander@435
|
476 |
* |
|
dvander@435
|
477 |
* @param listener Pointer to an IClientListener. |
|
dvander@435
|
478 |
*/ |
|
dvander@435
|
479 |
virtual void RemoveClientListener(IClientListener *listener) =0; |
|
dvander@435
|
480 |
|
|
dvander@435
|
481 |
/** |
|
dvander@435
|
482 |
* @brief Retrieves an IGamePlayer object by its client index. |
|
dvander@435
|
483 |
* |
|
dvander@435
|
484 |
* Note: This will return a valid object for any player, connected or not. |
|
dvander@435
|
485 |
* Note: Client indexes start at 1, not 0. |
|
dvander@435
|
486 |
* |
|
dvander@435
|
487 |
* @param client Index of the client. |
|
dvander@435
|
488 |
* @return An IGamePlayer pointer, or NULL if out of range. |
|
dvander@435
|
489 |
*/ |
|
dvander@435
|
490 |
virtual IGamePlayer *GetGamePlayer(int client) =0; |
|
dvander@435
|
491 |
|
|
dvander@435
|
492 |
/** |
|
dvander@435
|
493 |
* @brief Retrieves an IGamePlayer object by its edict_t pointer. |
|
dvander@435
|
494 |
* |
|
dvander@435
|
495 |
* @param pEdict Index of the client |
|
dvander@435
|
496 |
* @return An IGamePlayer pointer, or NULL if out of range. |
|
dvander@435
|
497 |
*/ |
|
dvander@435
|
498 |
virtual IGamePlayer *GetGamePlayer(edict_t *pEdict) =0; |
|
dvander@435
|
499 |
|
|
dvander@435
|
500 |
/** |
|
dvander@435
|
501 |
* @brief Returns the maximum number of clients. |
|
dvander@435
|
502 |
* |
|
dvander@1486
|
503 |
* Note: this will not work until the server is activated. |
|
dvander@1486
|
504 |
* |
|
dvander@435
|
505 |
* @return Maximum number of clients. |
|
dvander@435
|
506 |
*/ |
|
dvander@435
|
507 |
virtual int GetMaxClients() =0; |
|
dvander@435
|
508 |
|
|
dvander@435
|
509 |
/** |
|
dvander@435
|
510 |
* @brief Returns the number of players currently connected. |
|
dvander@435
|
511 |
* |
|
dvander@435
|
512 |
* @return Current number of connected clients. |
|
dvander@435
|
513 |
*/ |
|
dvander@435
|
514 |
virtual int GetNumPlayers() =0; |
|
faluco@682
|
515 |
|
|
faluco@682
|
516 |
/** |
|
faluco@682
|
517 |
* @brief Returns the client index by its userid. |
|
faluco@682
|
518 |
* |
|
faluco@682
|
519 |
* @param userid Userid of the client. |
|
faluco@682
|
520 |
* @return Client index, or 0 if invalid userid passed. |
|
faluco@682
|
521 |
*/ |
|
faluco@682
|
522 |
virtual int GetClientOfUserId(int userid) =0; |
|
dvander@1485
|
523 |
|
|
dvander@1485
|
524 |
/** |
|
dvander@1485
|
525 |
* @brief Returns whether or not the server is activated. |
|
dvander@1485
|
526 |
* |
|
dvander@1485
|
527 |
* @return True if ServerActivate() has been called |
|
dvander@1485
|
528 |
* at least once, false otherwise. |
|
dvander@1485
|
529 |
*/ |
|
skamonkey@3347
|
530 |
virtual bool IsServerActivated() =0; |
|
dvander@1519
|
531 |
|
|
dvander@1519
|
532 |
/** |
|
dvander@1519
|
533 |
* @brief Gets SourceMod's reply source. |
|
dvander@1519
|
534 |
* |
|
dvander@1519
|
535 |
* @return ReplyTo source. |
|
dvander@1519
|
536 |
*/ |
|
dvander@1519
|
537 |
virtual unsigned int GetReplyTo() =0; |
|
dvander@1519
|
538 |
|
|
dvander@1519
|
539 |
/** |
|
dvander@1519
|
540 |
* @brief Sets SourceMod's reply source. |
|
dvander@1519
|
541 |
* |
|
dvander@1519
|
542 |
* @param reply Reply source. |
|
dvander@1519
|
543 |
* @return Old reply source. |
|
dvander@1519
|
544 |
*/ |
|
dvander@1519
|
545 |
virtual unsigned int SetReplyTo(unsigned int reply) =0; |
|
dvander@1623
|
546 |
|
|
dvander@1623
|
547 |
/** |
|
dvander@1623
|
548 |
* @brief Tests if a player meets command filtering rules. |
|
dvander@1623
|
549 |
* |
|
dvander@1623
|
550 |
* @param pAdmin IGamePlayer of the admin, or NULL if the server. |
|
dvander@1623
|
551 |
* @param pTarget IGamePlayer of the player being targeted. |
|
dvander@1623
|
552 |
* @param flags COMMAND_FILTER flags. |
|
dvander@1623
|
553 |
* @return COMMAND_TARGET value. |
|
dvander@1623
|
554 |
*/ |
|
dvander@1623
|
555 |
virtual int FilterCommandTarget(IGamePlayer *pAdmin, IGamePlayer *pTarget, int flags) =0; |
|
dvander@1623
|
556 |
|
|
dvander@1623
|
557 |
/** |
|
dvander@1623
|
558 |
* @brief Registers a command target processor. |
|
dvander@1623
|
559 |
* |
|
dvander@1623
|
560 |
* @param pHandler Pointer to an ICommandTargetProcessor instance. |
|
dvander@1623
|
561 |
*/ |
|
dvander@1623
|
562 |
virtual void RegisterCommandTargetProcessor(ICommandTargetProcessor *pHandler) =0; |
|
dvander@1623
|
563 |
|
|
dvander@1623
|
564 |
/** |
|
dvander@1623
|
565 |
* @brief Removes a command target processor. |
|
dvander@1623
|
566 |
* |
|
dvander@1623
|
567 |
* @param pHandler Pointer to an ICommandTargetProcessor instance. |
|
dvander@1623
|
568 |
*/ |
|
dvander@1623
|
569 |
virtual void UnregisterCommandTargetProcessor(ICommandTargetProcessor *pHandler) =0; |
|
pred@2591
|
570 |
|
|
pred@2591
|
571 |
/** |
|
pred@2591
|
572 |
* @brief Returns the client index by its serial number. |
|
pred@2591
|
573 |
* |
|
pred@2591
|
574 |
* @return Client index, or 0 for invalid serial. |
|
pred@2591
|
575 |
*/ |
|
pred@2591
|
576 |
virtual int GetClientFromSerial(unsigned int serial) =0; |
|
theY4Kman@3178
|
577 |
|
|
theY4Kman@3178
|
578 |
/** |
|
theY4Kman@3178
|
579 |
* @brief Processes the pattern inside a cmd_target_info_t structure |
|
theY4Kman@3178
|
580 |
* and outputs the clients that match it. |
|
theY4Kman@3178
|
581 |
* |
|
theY4Kman@3178
|
582 |
* @param info Pointer to the cmd_target_info_t structure to process. |
|
theY4Kman@3178
|
583 |
*/ |
|
theY4Kman@3178
|
584 |
virtual void ProcessCommandTarget(cmd_target_info_t *info) =0; |
|
dvander@435
|
585 |
}; |
|
dvander@435
|
586 |
} |
|
dvander@435
|
587 |
|
|
dvander@435
|
588 |
#endif //_INCLUDE_SOURCEMOD_INTERFACE_IPLAYERHELPERS_H_ |