|
milo@2566
|
1 |
/** |
|
milo@2566
|
2 |
* vim: set ts=4 : |
|
milo@2566
|
3 |
* ============================================================================= |
|
milo@2566
|
4 |
* SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. |
|
milo@2566
|
5 |
* ============================================================================= |
|
milo@2566
|
6 |
* |
|
milo@2566
|
7 |
* This file is part of the SourceMod/SourcePawn SDK. |
|
milo@2566
|
8 |
* |
|
milo@2566
|
9 |
* This program is free software; you can redistribute it and/or modify it under |
|
milo@2566
|
10 |
* the terms of the GNU General Public License, version 3.0, as published by the |
|
milo@2566
|
11 |
* Free Software Foundation. |
|
milo@2566
|
12 |
* |
|
milo@2566
|
13 |
* This program is distributed in the hope that it will be useful, but WITHOUT |
|
milo@2566
|
14 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
|
milo@2566
|
15 |
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
|
milo@2566
|
16 |
* details. |
|
milo@2566
|
17 |
* |
|
milo@2566
|
18 |
* You should have received a copy of the GNU General Public License along with |
|
milo@2566
|
19 |
* this program. If not, see <http://www.gnu.org/licenses/>. |
|
milo@2566
|
20 |
* |
|
milo@2566
|
21 |
* As a special exception, AlliedModders LLC gives you permission to link the |
|
milo@2566
|
22 |
* code of this program (as well as its derivative works) to "Half-Life 2," the |
|
milo@2566
|
23 |
* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software |
|
milo@2566
|
24 |
* by the Valve Corporation. You must obey the GNU General Public License in |
|
milo@2566
|
25 |
* all respects for all other code used. Additionally, AlliedModders LLC grants |
|
milo@2566
|
26 |
* this exception to all derivative works. AlliedModders LLC defines further |
|
milo@2566
|
27 |
* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), |
|
milo@2566
|
28 |
* or <http://www.sourcemod.net/license.php>. |
|
milo@2566
|
29 |
* |
|
milo@2566
|
30 |
* Version: $Id$ |
|
milo@2566
|
31 |
*/ |
|
milo@2566
|
32 |
|
|
milo@2566
|
33 |
#if defined _tf2_stocks_included |
|
milo@2566
|
34 |
#endinput |
|
milo@2566
|
35 |
#endif |
|
milo@2566
|
36 |
#define _tf2_stocks_included |
|
milo@2566
|
37 |
|
|
milo@2566
|
38 |
#include <tf2> |
|
milo@2566
|
39 |
#include <sdktools> |
|
milo@2566
|
40 |
|
|
skamonkey@2943
|
41 |
#define TF_CONDFLAG_NONE 0 |
|
skamonkey@2943
|
42 |
#define TF_CONDFLAG_SLOWED (1 << 0) |
|
skamonkey@2943
|
43 |
#define TF_CONDFLAG_ZOOMED (1 << 1) |
|
skamonkey@2943
|
44 |
#define TF_CONDFLAG_DISGUISING (1 << 2) |
|
skamonkey@2943
|
45 |
#define TF_CONDFLAG_DISGUISED (1 << 3) |
|
skamonkey@2943
|
46 |
#define TF_CONDFLAG_CLOAKED (1 << 4) |
|
skamonkey@2943
|
47 |
#define TF_CONDFLAG_UBERCHARGED (1 << 5) |
|
skamonkey@2943
|
48 |
#define TF_CONDFLAG_TELEPORTGLOW (1 << 6) |
|
skamonkey@2943
|
49 |
#define TF_CONDFLAG_TAUNTING (1 << 7) |
|
skamonkey@2943
|
50 |
#define TF_CONDFLAG_UBERCHARGEFADE (1 << 8) |
|
skamonkey@3174
|
51 |
#define TF_CONDFLAG_CLOAKFLICKER (1 << 9) |
|
skamonkey@2943
|
52 |
#define TF_CONDFLAG_TELEPORTING (1 << 10) |
|
skamonkey@2943
|
53 |
#define TF_CONDFLAG_KRITZKRIEGED (1 << 11) |
|
skamonkey@2943
|
54 |
#define TF_CONDFLAG_DEADRINGERED (1 << 13) |
|
skamonkey@2943
|
55 |
#define TF_CONDFLAG_BONKED (1 << 14) |
|
skamonkey@2943
|
56 |
#define TF_CONDFLAG_DAZED (1 << 15) |
|
skamonkey@2943
|
57 |
#define TF_CONDFLAG_BUFFED (1 << 16) |
|
skamonkey@2943
|
58 |
#define TF_CONDFLAG_CHARGING (1 << 17) |
|
skamonkey@2943
|
59 |
#define TF_CONDFLAG_DEMOBUFF (1 << 18) |
|
skamonkey@3044
|
60 |
#define TF_CONDFLAG_CRITCOLA (1 << 19) |
|
skamonkey@3198
|
61 |
#define TF_CONDFLAG_INHEALRADIUS (1 << 20) |
|
skamonkey@3198
|
62 |
#define TF_CONDFLAG_HEALING (1 << 21) |
|
skamonkey@3087
|
63 |
#define TF_CONDFLAG_ONFIRE (1 << 22) |
|
skamonkey@3087
|
64 |
#define TF_CONDFLAG_OVERHEALED (1 << 23) |
|
skamonkey@3087
|
65 |
#define TF_CONDFLAG_JARATED (1 << 24) |
|
skamonkey@3087
|
66 |
#define TF_CONDFLAG_BLEEDING (1 << 25) |
|
skamonkey@3125
|
67 |
#define TF_CONDFLAG_DEFENSEBUFFED (1 << 26) |
|
skamonkey@3125
|
68 |
#define TF_CONDFLAG_MILKED (1 << 27) |
|
laftrykung@3269
|
69 |
#define TF_CONDFLAG_MEGAHEAL (1 << 28) |
|
laftrykung@3269
|
70 |
#define TF_CONDFLAG_REGENBUFFED (1 << 29) |
|
laftrykung@3269
|
71 |
#define TF_CONDFLAG_MARKEDFORDEATH (1 << 30) |
|
skamonkey@2943
|
72 |
|
|
skamonkey@2943
|
73 |
#define TF_DEATHFLAG_KILLERDOMINATION (1 << 0) |
|
skamonkey@2943
|
74 |
#define TF_DEATHFLAG_ASSISTERDOMINATION (1 << 1) |
|
skamonkey@2943
|
75 |
#define TF_DEATHFLAG_KILLERREVENGE (1 << 2) |
|
skamonkey@2943
|
76 |
#define TF_DEATHFLAG_ASSISTERREVENGE (1 << 3) |
|
skamonkey@2943
|
77 |
#define TF_DEATHFLAG_FIRSTBLOOD (1 << 4) |
|
skamonkey@2943
|
78 |
#define TF_DEATHFLAG_DEADRINGER (1 << 5) |
|
skamonkey@3189
|
79 |
#define TF_DEATHFLAG_INTERRUPTED (1 << 6) |
|
skamonkey@3189
|
80 |
#define TF_DEATHFLAG_GIBBED (1 << 7) |
|
skamonkey@3432
|
81 |
#define TF_DEATHFLAG_PURGATORY (1 << 8) |
|
skamonkey@2943
|
82 |
|
|
skamonkey@3125
|
83 |
// Custom kill identifiers for the customkill property on the player_death event |
|
skamonkey@3125
|
84 |
enum { |
|
skamonkey@3126
|
85 |
TF_CUSTOM_HEADSHOT = 1, |
|
skamonkey@3126
|
86 |
TF_CUSTOM_BACKSTAB, |
|
skamonkey@3126
|
87 |
TF_CUSTOM_BURNING, |
|
skamonkey@3126
|
88 |
TF_CUSTOM_WRENCH_FIX, |
|
skamonkey@3126
|
89 |
TF_CUSTOM_MINIGUN, |
|
skamonkey@3126
|
90 |
TF_CUSTOM_SUICIDE, |
|
skamonkey@3126
|
91 |
TF_CUSTOM_TAUNT_HADOUKEN, |
|
skamonkey@3126
|
92 |
TF_CUSTOM_BURNING_FLARE, |
|
skamonkey@3126
|
93 |
TF_CUSTOM_TAUNT_HIGH_NOON, |
|
skamonkey@3126
|
94 |
TF_CUSTOM_TAUNT_GRAND_SLAM, |
|
skamonkey@3126
|
95 |
TF_CUSTOM_PENETRATE_MY_TEAM, |
|
skamonkey@3126
|
96 |
TF_CUSTOM_PENETRATE_ALL_PLAYERS, |
|
skamonkey@3126
|
97 |
TF_CUSTOM_TAUNT_FENCING, |
|
skamonkey@3126
|
98 |
TF_CUSTOM_PENETRATE_HEADSHOT, |
|
laftrykung@3382
|
99 |
TF_CUSTOM_TAUNT_ARROW_STAB, |
|
skamonkey@3126
|
100 |
TF_CUSTOM_TELEFRAG, |
|
skamonkey@3126
|
101 |
TF_CUSTOM_BURNING_ARROW, |
|
skamonkey@3126
|
102 |
TF_CUSTOM_FLYINGBURN, |
|
skamonkey@3126
|
103 |
TF_CUSTOM_PUMPKIN_BOMB, |
|
skamonkey@3126
|
104 |
TF_CUSTOM_DECAPITATION, |
|
skamonkey@3126
|
105 |
TF_CUSTOM_TAUNT_GRENADE, |
|
skamonkey@3126
|
106 |
TF_CUSTOM_BASEBALL, |
|
skamonkey@3126
|
107 |
TF_CUSTOM_CHARGE_IMPACT, |
|
skamonkey@3126
|
108 |
TF_CUSTOM_TAUNT_BARBARIAN_SWING, |
|
skamonkey@3126
|
109 |
TF_CUSTOM_AIR_STICKY_BURST, |
|
skamonkey@3126
|
110 |
TF_CUSTOM_DEFENSIVE_STICKY, |
|
skamonkey@3126
|
111 |
TF_CUSTOM_PICKAXE, |
|
skamonkey@3126
|
112 |
TF_CUSTOM_ROCKET_DIRECTHIT, |
|
skamonkey@3126
|
113 |
TF_CUSTOM_TAUNT_UBERSLICE, |
|
skamonkey@3126
|
114 |
TF_CUSTOM_PLAYER_SENTRY, |
|
skamonkey@3126
|
115 |
TF_CUSTOM_STANDARD_STICKY, |
|
skamonkey@3126
|
116 |
TF_CUSTOM_SHOTGUN_REVENGE_CRIT, |
|
skamonkey@3126
|
117 |
TF_CUSTOM_TAUNT_ENGINEER_SMASH, |
|
skamonkey@3126
|
118 |
TF_CUSTOM_BLEEDING, |
|
skamonkey@3126
|
119 |
TF_CUSTOM_GOLD_WRENCH, |
|
skamonkey@3126
|
120 |
TF_CUSTOM_CARRIED_BUILDING, |
|
skamonkey@3126
|
121 |
TF_CUSTOM_COMBO_PUNCH, |
|
skamonkey@3126
|
122 |
TF_CUSTOM_TAUNT_ENGINEER_ARM, |
|
skamonkey@3144
|
123 |
TF_CUSTOM_FISH_KILL, |
|
skamonkey@3144
|
124 |
TF_CUSTOM_TRIGGER_HURT, |
|
skamonkey@3189
|
125 |
TF_CUSTOM_DECAPITATION_BOSS, |
|
skamonkey@3308
|
126 |
TF_CUSTOM_STICKBOMB_EXPLOSION, |
|
skamonkey@3308
|
127 |
TF_CUSTOM_AEGIS_ROUND, |
|
skamonkey@3308
|
128 |
TF_CUSTOM_FLARE_EXPLOSION, |
|
skamonkey@3310
|
129 |
TF_CUSTOM_BOOTS_STOMP, |
|
skamonkey@3371
|
130 |
TF_CUSTOM_PLASMA, |
|
skamonkey@3371
|
131 |
TF_CUSTOM_PLASMA_CHARGED, |
|
skamonkey@3371
|
132 |
TF_CUSTOM_PLASMA_GIB, |
|
skamonkey@3397
|
133 |
TF_CUSTOM_PRACTICE_STICKY, |
|
skamonkey@3432
|
134 |
TF_CUSTOM_EYEBALL_ROCKET, |
|
skamonkey@3567
|
135 |
TF_CUSTOM_HEADSHOT_DECAPITATION, |
|
skamonkey@3608
|
136 |
TF_CUSTOM_TAUNT_ARMAGEDDON, |
|
skamonkey@3608
|
137 |
TF_CUSTOM_FLARE_PELLET, |
|
skamonkey@3593
|
138 |
TF_CUSTOM_CLEAVER, |
|
skamonkey@3593
|
139 |
TF_CUSTOM_CLEAVER_CRIT, |
|
skamonkey@3593
|
140 |
TF_CUSTOM_SAPPER_RECORDER_DEATH, |
|
skamonkey@3679
|
141 |
TF_CUSTOM_MERASMUS_PLAYER_BOMB, |
|
skamonkey@3679
|
142 |
TF_CUSTOM_MERASMUS_GRENADE, |
|
skamonkey@3679
|
143 |
TF_CUSTOM_MERASMUS_ZAP, |
|
skamonkey@3679
|
144 |
TF_CUSTOM_MERASMUS_DECAPITATION, |
|
skamonkey@3716
|
145 |
TF_CUSTOM_CANNONBALL_PUSH, |
|
skamonkey@3125
|
146 |
}; |
|
skamonkey@3125
|
147 |
|
|
skamonkey@3125
|
148 |
// Weapon codes as used in some events, such as player_death |
|
skamonkey@3125
|
149 |
// (not to be confused with Item Definition Indexes) |
|
skamonkey@3125
|
150 |
enum { |
|
skamonkey@3125
|
151 |
TF_WEAPON_NONE = 0, |
|
skamonkey@3125
|
152 |
TF_WEAPON_BAT, |
|
skamonkey@3125
|
153 |
TF_WEAPON_BAT_WOOD, |
|
skamonkey@3125
|
154 |
TF_WEAPON_BOTTLE, |
|
skamonkey@3125
|
155 |
TF_WEAPON_FIREAXE, |
|
skamonkey@3125
|
156 |
TF_WEAPON_CLUB, |
|
skamonkey@3125
|
157 |
TF_WEAPON_CROWBAR, |
|
skamonkey@3125
|
158 |
TF_WEAPON_KNIFE, |
|
skamonkey@3125
|
159 |
TF_WEAPON_FISTS, |
|
skamonkey@3125
|
160 |
TF_WEAPON_SHOVEL, |
|
skamonkey@3125
|
161 |
TF_WEAPON_WRENCH, |
|
skamonkey@3125
|
162 |
TF_WEAPON_BONESAW, |
|
skamonkey@3125
|
163 |
TF_WEAPON_SHOTGUN_PRIMARY, |
|
skamonkey@3125
|
164 |
TF_WEAPON_SHOTGUN_SOLDIER, |
|
skamonkey@3125
|
165 |
TF_WEAPON_SHOTGUN_HWG, |
|
skamonkey@3125
|
166 |
TF_WEAPON_SHOTGUN_PYRO, |
|
skamonkey@3125
|
167 |
TF_WEAPON_SCATTERGUN, |
|
skamonkey@3125
|
168 |
TF_WEAPON_SNIPERRIFLE, |
|
skamonkey@3125
|
169 |
TF_WEAPON_MINIGUN, |
|
skamonkey@3125
|
170 |
TF_WEAPON_SMG, |
|
skamonkey@3125
|
171 |
TF_WEAPON_SYRINGEGUN_MEDIC, |
|
skamonkey@3125
|
172 |
TF_WEAPON_TRANQ, |
|
skamonkey@3125
|
173 |
TF_WEAPON_ROCKETLAUNCHER, |
|
skamonkey@3125
|
174 |
TF_WEAPON_GRENADELAUNCHER, |
|
skamonkey@3125
|
175 |
TF_WEAPON_PIPEBOMBLAUNCHER, |
|
skamonkey@3125
|
176 |
TF_WEAPON_FLAMETHROWER, |
|
skamonkey@3125
|
177 |
TF_WEAPON_GRENADE_NORMAL, |
|
skamonkey@3125
|
178 |
TF_WEAPON_GRENADE_CONCUSSION, |
|
skamonkey@3125
|
179 |
TF_WEAPON_GRENADE_NAIL, |
|
skamonkey@3125
|
180 |
TF_WEAPON_GRENADE_MIRV, |
|
skamonkey@3125
|
181 |
TF_WEAPON_GRENADE_MIRV_DEMOMAN, |
|
skamonkey@3125
|
182 |
TF_WEAPON_GRENADE_NAPALM, |
|
skamonkey@3125
|
183 |
TF_WEAPON_GRENADE_GAS, |
|
skamonkey@3125
|
184 |
TF_WEAPON_GRENADE_EMP, |
|
skamonkey@3125
|
185 |
TF_WEAPON_GRENADE_CALTROP, |
|
skamonkey@3125
|
186 |
TF_WEAPON_GRENADE_PIPEBOMB, |
|
skamonkey@3125
|
187 |
TF_WEAPON_GRENADE_SMOKE_BOMB, |
|
skamonkey@3125
|
188 |
TF_WEAPON_GRENADE_HEAL, |
|
skamonkey@3125
|
189 |
TF_WEAPON_GRENADE_STUNBALL, |
|
skamonkey@3125
|
190 |
TF_WEAPON_GRENADE_JAR, |
|
skamonkey@3130
|
191 |
TF_WEAPON_GRENADE_JAR_MILK, |
|
skamonkey@3125
|
192 |
TF_WEAPON_PISTOL, |
|
skamonkey@3125
|
193 |
TF_WEAPON_PISTOL_SCOUT, |
|
skamonkey@3125
|
194 |
TF_WEAPON_REVOLVER, |
|
skamonkey@3125
|
195 |
TF_WEAPON_NAILGUN, |
|
skamonkey@3125
|
196 |
TF_WEAPON_PDA, |
|
skamonkey@3125
|
197 |
TF_WEAPON_PDA_ENGINEER_BUILD, |
|
skamonkey@3125
|
198 |
TF_WEAPON_PDA_ENGINEER_DESTROY, |
|
skamonkey@3125
|
199 |
TF_WEAPON_PDA_SPY, |
|
skamonkey@3125
|
200 |
TF_WEAPON_BUILDER, |
|
skamonkey@3125
|
201 |
TF_WEAPON_MEDIGUN, |
|
skamonkey@3125
|
202 |
TF_WEAPON_GRENADE_MIRVBOMB, |
|
skamonkey@3125
|
203 |
TF_WEAPON_FLAMETHROWER_ROCKET, |
|
skamonkey@3125
|
204 |
TF_WEAPON_GRENADE_DEMOMAN, |
|
skamonkey@3125
|
205 |
TF_WEAPON_SENTRY_BULLET, |
|
skamonkey@3125
|
206 |
TF_WEAPON_SENTRY_ROCKET, |
|
skamonkey@3125
|
207 |
TF_WEAPON_DISPENSER, |
|
skamonkey@3125
|
208 |
TF_WEAPON_INVIS, |
|
skamonkey@3125
|
209 |
TF_WEAPON_FLAREGUN, |
|
skamonkey@3125
|
210 |
TF_WEAPON_LUNCHBOX, |
|
skamonkey@3125
|
211 |
TF_WEAPON_JAR, |
|
skamonkey@3125
|
212 |
TF_WEAPON_COMPOUND_BOW, |
|
skamonkey@3125
|
213 |
TF_WEAPON_BUFF_ITEM, |
|
skamonkey@3125
|
214 |
TF_WEAPON_PUMPKIN_BOMB, |
|
skamonkey@3125
|
215 |
TF_WEAPON_SWORD, |
|
skamonkey@3126
|
216 |
TF_WEAPON_DIRECTHIT, |
|
skamonkey@3125
|
217 |
TF_WEAPON_LIFELINE, |
|
skamonkey@3125
|
218 |
TF_WEAPON_LASER_POINTER, |
|
skamonkey@3125
|
219 |
TF_WEAPON_DISPENSER_GUN, |
|
skamonkey@3125
|
220 |
TF_WEAPON_SENTRY_REVENGE, |
|
skamonkey@3125
|
221 |
TF_WEAPON_JAR_MILK, |
|
skamonkey@3125
|
222 |
TF_WEAPON_HANDGUN_SCOUT_PRIMARY, |
|
skamonkey@3174
|
223 |
TF_WEAPON_BAT_FISH, |
|
skamonkey@3174
|
224 |
TF_WEAPON_CROSSBOW, |
|
skamonkey@3308
|
225 |
TF_WEAPON_STICKBOMB, |
|
skamonkey@3308
|
226 |
TF_WEAPON_HANDGUN_SCOUT_SEC, |
|
skamonkey@3308
|
227 |
TF_WEAPON_SODA_POPPER, |
|
skamonkey@3308
|
228 |
TF_WEAPON_SNIPERRIFLE_DECAP, |
|
skamonkey@3371
|
229 |
TF_WEAPON_RAYGUN, |
|
skamonkey@3371
|
230 |
TF_WEAPON_PARTICLE_CANNON, |
|
skamonkey@3371
|
231 |
TF_WEAPON_MECHANICAL_ARM, |
|
skamonkey@3455
|
232 |
TF_WEAPON_DRG_POMSON, |
|
skamonkey@3455
|
233 |
TF_WEAPON_BAT_GIFTWRAP, |
|
skamonkey@3455
|
234 |
TF_WEAPON_GRENADE_ORNAMENT, |
|
skamonkey@3455
|
235 |
TF_WEAPON_RAYGUN_REVENGE, |
|
skamonkey@3567
|
236 |
TF_WEAPON_PEP_BRAWLER_BLASTER, |
|
skamonkey@3593
|
237 |
TF_WEAPON_CLEAVER, |
|
skamonkey@3593
|
238 |
TF_WEAPON_GRENADE_CLEAVER, |
|
skamonkey@3716
|
239 |
TF_WEAPON_STICKY_BALL_LAUNCHER, |
|
skamonkey@3716
|
240 |
TF_WEAPON_GRENADE_STICKY_BALL, |
|
skamonkey@3716
|
241 |
TF_WEAPON_SHOTGUN_BUILDING_RESCUE, |
|
skamonkey@3716
|
242 |
TF_WEAPON_CANNON, |
|
skamonkey@3125
|
243 |
}; |
|
skamonkey@3125
|
244 |
|
|
asherkin@3600
|
245 |
// TF2 Weapon Loadout Slots |
|
asherkin@3191
|
246 |
enum |
|
asherkin@3191
|
247 |
{ |
|
asherkin@3191
|
248 |
TFWeaponSlot_Primary, |
|
asherkin@3191
|
249 |
TFWeaponSlot_Secondary, |
|
asherkin@3191
|
250 |
TFWeaponSlot_Melee, |
|
asherkin@3191
|
251 |
TFWeaponSlot_Grenade, |
|
asherkin@3191
|
252 |
TFWeaponSlot_Building, |
|
asherkin@3191
|
253 |
TFWeaponSlot_PDA, |
|
asherkin@3191
|
254 |
TFWeaponSlot_Item1, |
|
asherkin@3191
|
255 |
TFWeaponSlot_Item2 |
|
asherkin@3191
|
256 |
}; |
|
asherkin@3191
|
257 |
|
|
skamonkey@3125
|
258 |
// Identifiers for the eventtype property on the teamplay_flag_event event |
|
skamonkey@3125
|
259 |
enum { |
|
skamonkey@3125
|
260 |
TF_FLAGEVENT_PICKEDUP = 1, |
|
skamonkey@3125
|
261 |
TF_FLAGEVENT_CAPTURED, |
|
skamonkey@3125
|
262 |
TF_FLAGEVENT_DEFENDED, |
|
skamonkey@3199
|
263 |
TF_FLAGEVENT_DROPPED, |
|
skamonkey@3199
|
264 |
TF_FLAGEVENT_RETURNED |
|
skamonkey@3125
|
265 |
}; |
|
skamonkey@3125
|
266 |
|
|
milo@2566
|
267 |
enum TFResourceType |
|
milo@2566
|
268 |
{ |
|
milo@2566
|
269 |
TFResource_Ping, |
|
milo@2566
|
270 |
TFResource_Score, |
|
milo@2566
|
271 |
TFResource_Deaths, |
|
milo@2566
|
272 |
TFResource_TotalScore, |
|
milo@2566
|
273 |
TFResource_Captures, |
|
milo@2566
|
274 |
TFResource_Defenses, |
|
milo@2566
|
275 |
TFResource_Dominations, |
|
milo@2566
|
276 |
TFResource_Revenge, |
|
milo@2566
|
277 |
TFResource_BuildingsDestroyed, |
|
milo@2566
|
278 |
TFResource_Headshots, |
|
milo@2566
|
279 |
TFResource_Backstabs, |
|
milo@2566
|
280 |
TFResource_HealPoints, |
|
milo@2566
|
281 |
TFResource_Invulns, |
|
milo@2566
|
282 |
TFResource_Teleports, |
|
milo@2566
|
283 |
TFResource_ResupplyPoints, |
|
milo@2566
|
284 |
TFResource_KillAssists, |
|
milo@2566
|
285 |
TFResource_MaxHealth, |
|
milo@2566
|
286 |
TFResource_PlayerClass |
|
milo@2566
|
287 |
}; |
|
milo@2566
|
288 |
|
|
milo@2566
|
289 |
static const String:TFResourceNames[TFResourceType][] = |
|
milo@2566
|
290 |
{ |
|
milo@2566
|
291 |
"m_iPing", |
|
milo@2566
|
292 |
"m_iScore", |
|
milo@2566
|
293 |
"m_iDeaths", |
|
milo@2566
|
294 |
"m_iTotalScore", |
|
milo@2566
|
295 |
"m_iCaptures", |
|
milo@2566
|
296 |
"m_iDefenses", |
|
milo@2566
|
297 |
"m_iDominations", |
|
milo@2566
|
298 |
"m_iRevenge", |
|
milo@2566
|
299 |
"m_iBuildingsDestroyed", |
|
milo@2566
|
300 |
"m_iHeadshots", |
|
milo@2566
|
301 |
"m_iBackstabs", |
|
milo@2566
|
302 |
"m_iHealPoints", |
|
milo@2566
|
303 |
"m_iInvulns", |
|
milo@2566
|
304 |
"m_iTeleports", |
|
milo@2566
|
305 |
"m_iResupplyPoints", |
|
milo@2566
|
306 |
"m_iKillAssists", |
|
milo@2566
|
307 |
"m_iMaxHealth", |
|
milo@2566
|
308 |
"m_iPlayerClass" |
|
milo@2566
|
309 |
}; |
|
milo@2566
|
310 |
|
|
milo@2566
|
311 |
/** |
|
milo@2566
|
312 |
* Get's a Clients current class. |
|
milo@2566
|
313 |
* |
|
milo@2566
|
314 |
* @param client Player's index. |
|
milo@2566
|
315 |
* @return Current TFClassType of player. |
|
milo@2566
|
316 |
* @error Invalid client index. |
|
milo@2566
|
317 |
*/ |
|
milo@2566
|
318 |
stock TFClassType:TF2_GetPlayerClass(client) |
|
milo@2566
|
319 |
{ |
|
milo@2566
|
320 |
return TFClassType:GetEntProp(client, Prop_Send, "m_iClass"); |
|
milo@2566
|
321 |
} |
|
milo@2566
|
322 |
|
|
milo@2566
|
323 |
/** |
|
milo@2566
|
324 |
* Set's a Clients class. |
|
milo@2566
|
325 |
* |
|
milo@2566
|
326 |
* Note: If setting player class in a player spawn hook weapons should be set to false. |
|
milo@2566
|
327 |
* |
|
milo@2566
|
328 |
* @param client Player's index. |
|
milo@2566
|
329 |
* @param class TFClassType class symbol. |
|
milo@2566
|
330 |
* @param weapons This paramater is ignored. |
|
laftrykung@3383
|
331 |
* @param persistent If true changes the players desired class so the change stays after death. |
|
milo@2566
|
332 |
* @noreturn |
|
milo@2566
|
333 |
* @error Invalid client index. |
|
milo@2566
|
334 |
*/ |
|
laftrykung@3383
|
335 |
stock TF2_SetPlayerClass(client, TFClassType:class, bool:weapons=true, bool:persistent=true) |
|
milo@2566
|
336 |
{ |
|
milo@2566
|
337 |
SetEntProp(client, Prop_Send, "m_iClass", _:class); |
|
milo@2566
|
338 |
|
|
laftrykung@3383
|
339 |
if (persistent) |
|
milo@2566
|
340 |
{ |
|
milo@2566
|
341 |
SetEntProp(client, Prop_Send, "m_iDesiredPlayerClass", _:class); |
|
milo@2566
|
342 |
} |
|
milo@2566
|
343 |
} |
|
milo@2566
|
344 |
|
|
milo@2566
|
345 |
/** |
|
milo@2566
|
346 |
* Retrieves client data from the resource entity |
|
milo@2566
|
347 |
* |
|
milo@2566
|
348 |
* @param client Player's index. |
|
milo@2566
|
349 |
* @param type ResourceType constant |
|
milo@2566
|
350 |
* @return Value or -1 on failure. |
|
milo@2566
|
351 |
* @error Invalid client index, client not in game or failed to find resource entity. |
|
milo@2566
|
352 |
*/ |
|
milo@2566
|
353 |
stock TF2_GetPlayerResourceData(client, TFResourceType:type) |
|
milo@2566
|
354 |
{ |
|
milo@2566
|
355 |
if (!IsClientConnected(client)) |
|
milo@2566
|
356 |
{ |
|
milo@2566
|
357 |
return -1; |
|
milo@2566
|
358 |
} |
|
milo@2566
|
359 |
|
|
milo@2566
|
360 |
new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]); |
|
milo@2566
|
361 |
|
|
milo@2566
|
362 |
if (offset < 1) |
|
milo@2566
|
363 |
{ |
|
milo@2566
|
364 |
return -1; |
|
milo@2566
|
365 |
} |
|
milo@2566
|
366 |
|
|
milo@2566
|
367 |
new entity = TF2_GetResourceEntity(); |
|
milo@2566
|
368 |
|
|
milo@2566
|
369 |
if (entity == -1) |
|
milo@2566
|
370 |
{ |
|
milo@2566
|
371 |
return -1; |
|
milo@2566
|
372 |
} |
|
milo@2566
|
373 |
|
|
milo@2566
|
374 |
return GetEntData(entity, offset + (client*4)); |
|
milo@2566
|
375 |
} |
|
milo@2566
|
376 |
|
|
milo@2566
|
377 |
/** |
|
milo@2566
|
378 |
* Sets client data in the resource entity |
|
milo@2566
|
379 |
* |
|
milo@2566
|
380 |
* Note: The game overwrites these values every frame, so changing them will have very little effect. |
|
milo@2566
|
381 |
* |
|
milo@2566
|
382 |
* @param client Player's index. |
|
milo@2566
|
383 |
* @param type ResourceType constant |
|
milo@2566
|
384 |
* @param value Value to set. |
|
milo@2566
|
385 |
* @return Value or -1 on failure. |
|
milo@2566
|
386 |
* @error Invalid client index, client not in game or failed to find resource entity. |
|
milo@2566
|
387 |
*/ |
|
milo@2566
|
388 |
stock bool:TF2_SetPlayerResourceData(client, TFResourceType:type, any:value) |
|
milo@2566
|
389 |
{ |
|
milo@2566
|
390 |
if (!IsClientConnected(client)) |
|
milo@2566
|
391 |
{ |
|
milo@2566
|
392 |
return false; |
|
milo@2566
|
393 |
} |
|
milo@2566
|
394 |
|
|
milo@2566
|
395 |
new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]); |
|
milo@2566
|
396 |
|
|
milo@2566
|
397 |
if (offset < 1) |
|
milo@2566
|
398 |
{ |
|
milo@2566
|
399 |
return false; |
|
milo@2566
|
400 |
} |
|
milo@2566
|
401 |
|
|
milo@2566
|
402 |
new entity = TF2_GetResourceEntity(); |
|
milo@2566
|
403 |
|
|
milo@2566
|
404 |
if (entity == -1) |
|
milo@2566
|
405 |
{ |
|
milo@2566
|
406 |
return false; |
|
milo@2566
|
407 |
} |
|
milo@2566
|
408 |
|
|
milo@2566
|
409 |
SetEntData(entity, offset + (client*4), value); |
|
milo@2566
|
410 |
|
|
milo@2566
|
411 |
return true; |
|
milo@2566
|
412 |
} |
|
milo@2566
|
413 |
|
|
milo@2566
|
414 |
/** |
|
milo@2566
|
415 |
* Removes all weapons from a client's weapon slot |
|
milo@2566
|
416 |
* |
|
milo@2566
|
417 |
* @param client Player's index. |
|
milo@2566
|
418 |
* @param slot Slot index (0-5) |
|
milo@2566
|
419 |
* @noreturn |
|
milo@2566
|
420 |
* @error Invalid client, invalid slot or lack of mod support |
|
milo@2566
|
421 |
*/ |
|
milo@2566
|
422 |
stock TF2_RemoveWeaponSlot(client, slot) |
|
milo@2566
|
423 |
{ |
|
milo@2566
|
424 |
new weaponIndex; |
|
milo@2566
|
425 |
while ((weaponIndex = GetPlayerWeaponSlot(client, slot)) != -1) |
|
milo@2566
|
426 |
{ |
|
milo@2566
|
427 |
RemovePlayerItem(client, weaponIndex); |
|
milo@2566
|
428 |
RemoveEdict(weaponIndex); |
|
milo@2566
|
429 |
} |
|
milo@2566
|
430 |
} |
|
milo@2566
|
431 |
|
|
milo@2566
|
432 |
/** |
|
milo@2566
|
433 |
* Removes all weapons from a client |
|
milo@2566
|
434 |
* |
|
milo@2566
|
435 |
* @param client Player's index. |
|
milo@2566
|
436 |
* @noreturn |
|
milo@2566
|
437 |
*/ |
|
milo@2566
|
438 |
stock TF2_RemoveAllWeapons(client) |
|
milo@2566
|
439 |
{ |
|
milo@2566
|
440 |
for (new i = 0; i <= 5; i++) |
|
milo@2566
|
441 |
{ |
|
milo@2566
|
442 |
TF2_RemoveWeaponSlot(client, i); |
|
milo@2566
|
443 |
} |
|
milo@2566
|
444 |
} |
|
milo@2566
|
445 |
|
|
skamonkey@2943
|
446 |
/** |
|
skamonkey@2943
|
447 |
* Gets a player's condition bits |
|
skamonkey@2943
|
448 |
* |
|
skamonkey@2943
|
449 |
* @param client Player's index. |
|
skamonkey@2943
|
450 |
* @return Player's condition bits |
|
skamonkey@2943
|
451 |
*/ |
|
skamonkey@3308
|
452 |
#pragma deprecated Use TF2_IsPlayerInCondition instead. |
|
skamonkey@2943
|
453 |
stock TF2_GetPlayerConditionFlags(client) |
|
skamonkey@2943
|
454 |
{ |
|
skamonkey@3163
|
455 |
return GetEntProp(client, Prop_Send, "m_nPlayerCond")|GetEntProp(client, Prop_Send, "_condition_bits"); |
|
skamonkey@2943
|
456 |
} |
|
erik@3093
|
457 |
|
|
erik@3093
|
458 |
/** |
|
skamonkey@3308
|
459 |
* Check whether or not a condition is set on a player |
|
skamonkey@3308
|
460 |
* |
|
skamonkey@3308
|
461 |
* @param client Player's index. |
|
skamonkey@3308
|
462 |
* @return True if set, false otherwise |
|
skamonkey@3308
|
463 |
*/ |
|
skamonkey@3308
|
464 |
stock bool:TF2_IsPlayerInCondition(client, TFCond:cond) |
|
skamonkey@3308
|
465 |
{ |
|
skamonkey@3310
|
466 |
// Conditions are stored across two netprops now, one for each 32-bit segment. |
|
skamonkey@3308
|
467 |
if (_:cond < 32) |
|
skamonkey@3308
|
468 |
{ |
|
skamonkey@3310
|
469 |
new bit = 1 << _:cond; |
|
skamonkey@3308
|
470 |
if ((GetEntProp(client, Prop_Send, "m_nPlayerCond") & bit) == bit) |
|
skamonkey@3308
|
471 |
{ |
|
skamonkey@3308
|
472 |
return true; |
|
skamonkey@3308
|
473 |
} |
|
skamonkey@3308
|
474 |
|
|
skamonkey@3308
|
475 |
if ((GetEntProp(client, Prop_Send, "_condition_bits") & bit) == bit) |
|
skamonkey@3308
|
476 |
{ |
|
skamonkey@3308
|
477 |
return true; |
|
skamonkey@3308
|
478 |
} |
|
skamonkey@3308
|
479 |
} |
|
skamonkey@3715
|
480 |
else if (_:cond < 64) |
|
skamonkey@3308
|
481 |
{ |
|
skamonkey@3310
|
482 |
new bit = (1 << (_:cond - 32)); |
|
skamonkey@3310
|
483 |
if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx") & bit) == bit) |
|
skamonkey@3308
|
484 |
{ |
|
skamonkey@3308
|
485 |
return true; |
|
skamonkey@3308
|
486 |
} |
|
skamonkey@3308
|
487 |
} |
|
skamonkey@3715
|
488 |
else |
|
skamonkey@3715
|
489 |
{ |
|
skamonkey@3715
|
490 |
new bit = (1 << (_:cond - 64)); |
|
skamonkey@3715
|
491 |
if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx2") & bit) == bit) |
|
skamonkey@3715
|
492 |
{ |
|
skamonkey@3715
|
493 |
return true; |
|
skamonkey@3715
|
494 |
} |
|
skamonkey@3715
|
495 |
} |
|
skamonkey@3308
|
496 |
|
|
skamonkey@3308
|
497 |
return false; |
|
skamonkey@3308
|
498 |
} |
|
skamonkey@3308
|
499 |
|
|
skamonkey@3308
|
500 |
/** |
|
erik@3093
|
501 |
* Gets an entity's object type. |
|
erik@3093
|
502 |
* |
|
erik@3093
|
503 |
* @param entity Entity index. |
|
erik@3093
|
504 |
* @return Current TFObjectType of entity. |
|
erik@3093
|
505 |
* @error Invalid entity index. |
|
erik@3093
|
506 |
*/ |
|
erik@3093
|
507 |
stock TFObjectType:TF2_GetObjectType(entity) |
|
erik@3093
|
508 |
{ |
|
erik@3093
|
509 |
new offset = GetEntSendPropOffs(entity, "m_iObjectType"); |
|
erik@3093
|
510 |
|
|
erik@3093
|
511 |
if (offset <= 0) |
|
erik@3093
|
512 |
{ |
|
erik@3093
|
513 |
ThrowError("Entity index %d is not an object", entity); |
|
erik@3093
|
514 |
} |
|
erik@3093
|
515 |
|
|
erik@3093
|
516 |
return TFObjectType:GetEntData(entity, offset); |
|
erik@3093
|
517 |
} |
|
erik@3093
|
518 |
|
|
erik@3093
|
519 |
/** |
|
erik@3093
|
520 |
* Gets an entity's object mode. |
|
erik@3093
|
521 |
* |
|
erik@3093
|
522 |
* @param entity Entity index. |
|
erik@3093
|
523 |
* @return Current TFObjectMode of entity. |
|
erik@3093
|
524 |
* @error Invalid entity index. |
|
erik@3093
|
525 |
*/ |
|
erik@3093
|
526 |
stock TFObjectMode:TF2_GetObjectMode(entity) |
|
erik@3093
|
527 |
{ |
|
erik@3093
|
528 |
new offset = GetEntSendPropOffs(entity, "m_iObjectMode"); |
|
erik@3093
|
529 |
|
|
erik@3093
|
530 |
if (offset <= 0) |
|
erik@3093
|
531 |
{ |
|
erik@3093
|
532 |
ThrowError("Entity index %d is not an object", entity); |
|
erik@3093
|
533 |
} |
|
erik@3093
|
534 |
|
|
erik@3093
|
535 |
return TFObjectMode:GetEntData(entity, offset); |
|
erik@3093
|
536 |
} |