plugins/include/tf2_stocks.inc
author Erik Minekus <erik@minekus.com>
Thu Aug 01 09:26:34 2013 -0400 (2013-08-01)
changeset 3967 ceafb87d38a7
parent 3816 31650bb3c7e8
child 4036 646b27d3d64a
permissions -rw-r--r--
Numerous code documentation fixups (bug 5720, r=psychonic).
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
 */
skamonkey@3816
   353
#pragma deprecated Use GetPlayerResourceEntity and GetEntProp instead
milo@2566
   354
stock TF2_GetPlayerResourceData(client, TFResourceType:type)
milo@2566
   355
{
milo@2566
   356
	if (!IsClientConnected(client))
milo@2566
   357
	{
milo@2566
   358
		return -1;	
milo@2566
   359
	}
milo@2566
   360
	
milo@2566
   361
	new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]);
milo@2566
   362
		
milo@2566
   363
	if (offset < 1)
milo@2566
   364
	{
milo@2566
   365
		return -1;	
milo@2566
   366
	}
milo@2566
   367
				
milo@2566
   368
	new entity = TF2_GetResourceEntity();
milo@2566
   369
	
milo@2566
   370
	if (entity == -1)
milo@2566
   371
	{
milo@2566
   372
		return -1;
milo@2566
   373
	}
milo@2566
   374
	
milo@2566
   375
	return GetEntData(entity, offset + (client*4));
milo@2566
   376
}
milo@2566
   377
milo@2566
   378
/**
milo@2566
   379
 * Sets client data in the resource entity
milo@2566
   380
 *
milo@2566
   381
 * Note: The game overwrites these values every frame, so changing them will have very little effect.
milo@2566
   382
 *
milo@2566
   383
 * @param client		Player's index.
milo@2566
   384
 * @param type			ResourceType constant
milo@2566
   385
 * @param value			Value to set.
milo@2566
   386
 * @return				Value or -1 on failure.
milo@2566
   387
 * @error				Invalid client index, client not in game or failed to find resource entity.
milo@2566
   388
 */
skamonkey@3816
   389
#pragma deprecated Use GetPlayerResourceEntity and SetEntProp instead
milo@2566
   390
stock bool:TF2_SetPlayerResourceData(client, TFResourceType:type, any:value)
milo@2566
   391
{
milo@2566
   392
	if (!IsClientConnected(client))
milo@2566
   393
	{
milo@2566
   394
		return false;	
milo@2566
   395
	}
milo@2566
   396
	
milo@2566
   397
	new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]);
milo@2566
   398
						
milo@2566
   399
	if (offset < 1)
milo@2566
   400
	{
milo@2566
   401
		return false;	
milo@2566
   402
	}
milo@2566
   403
				
milo@2566
   404
	new entity = TF2_GetResourceEntity();
milo@2566
   405
	
milo@2566
   406
	if (entity == -1)
milo@2566
   407
	{
milo@2566
   408
		return false;	
milo@2566
   409
	}
milo@2566
   410
	
milo@2566
   411
	SetEntData(entity, offset + (client*4), value);
milo@2566
   412
	
milo@2566
   413
	return true;	
milo@2566
   414
}
milo@2566
   415
milo@2566
   416
/**
milo@2566
   417
 * Removes all weapons from a client's weapon slot
milo@2566
   418
 *
milo@2566
   419
 * @param client		Player's index.
milo@2566
   420
 * @param slot			Slot index (0-5)
milo@2566
   421
 * @noreturn
milo@2566
   422
 * @error				Invalid client, invalid slot or lack of mod support
milo@2566
   423
 */
milo@2566
   424
stock TF2_RemoveWeaponSlot(client, slot)
milo@2566
   425
{
milo@2566
   426
	new weaponIndex;
milo@2566
   427
	while ((weaponIndex = GetPlayerWeaponSlot(client, slot)) != -1)
milo@2566
   428
	{
milo@2566
   429
		RemovePlayerItem(client, weaponIndex);
milo@2566
   430
		RemoveEdict(weaponIndex);
milo@2566
   431
	}
milo@2566
   432
}
milo@2566
   433
milo@2566
   434
/**
milo@2566
   435
 * Removes all weapons from a client
milo@2566
   436
 *
milo@2566
   437
 * @param client		Player's index.
milo@2566
   438
 * @noreturn
milo@2566
   439
 */
milo@2566
   440
stock TF2_RemoveAllWeapons(client)
milo@2566
   441
{
milo@2566
   442
	for (new i = 0; i <= 5; i++)
milo@2566
   443
	{
milo@2566
   444
		TF2_RemoveWeaponSlot(client, i);
milo@2566
   445
	}
milo@2566
   446
}
milo@2566
   447
skamonkey@2943
   448
/**
skamonkey@2943
   449
 * Gets a player's condition bits
skamonkey@2943
   450
 *
skamonkey@2943
   451
 * @param client		Player's index.
skamonkey@2943
   452
 * @return				Player's condition bits
skamonkey@2943
   453
 */
skamonkey@3308
   454
#pragma deprecated Use TF2_IsPlayerInCondition instead.
skamonkey@2943
   455
stock TF2_GetPlayerConditionFlags(client)
skamonkey@2943
   456
{
skamonkey@3163
   457
	return GetEntProp(client, Prop_Send, "m_nPlayerCond")|GetEntProp(client, Prop_Send, "_condition_bits");
skamonkey@2943
   458
}
erik@3093
   459
erik@3093
   460
/**
skamonkey@3308
   461
 * Check whether or not a condition is set on a player
skamonkey@3308
   462
 *
skamonkey@3308
   463
 * @param client		Player's index.
erik@3967
   464
 * @param cond			TFCond constant
skamonkey@3308
   465
 * @return				True if set, false otherwise
skamonkey@3308
   466
 */
skamonkey@3308
   467
stock bool:TF2_IsPlayerInCondition(client, TFCond:cond)
skamonkey@3308
   468
{
skamonkey@3310
   469
	// Conditions are stored across two netprops now, one for each 32-bit segment.
skamonkey@3308
   470
	if (_:cond < 32)
skamonkey@3308
   471
	{
skamonkey@3310
   472
		new bit = 1 << _:cond;
skamonkey@3308
   473
		if ((GetEntProp(client, Prop_Send, "m_nPlayerCond") & bit) == bit)
skamonkey@3308
   474
		{
skamonkey@3308
   475
			return true;
skamonkey@3308
   476
		}
skamonkey@3308
   477
		
skamonkey@3308
   478
		if ((GetEntProp(client, Prop_Send, "_condition_bits") & bit) == bit)
skamonkey@3308
   479
		{
skamonkey@3308
   480
			return true;
skamonkey@3308
   481
		}
skamonkey@3308
   482
	}
skamonkey@3715
   483
	else if (_:cond < 64)
skamonkey@3308
   484
	{
skamonkey@3310
   485
		new bit = (1 << (_:cond - 32));
skamonkey@3310
   486
		if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx") & bit) == bit)
skamonkey@3308
   487
		{
skamonkey@3308
   488
			return true;
skamonkey@3308
   489
		}
skamonkey@3308
   490
	}
skamonkey@3715
   491
	else
skamonkey@3715
   492
	{
skamonkey@3715
   493
		new bit = (1 << (_:cond - 64));
skamonkey@3715
   494
		if ((GetEntProp(client, Prop_Send, "m_nPlayerCondEx2") & bit) == bit)
skamonkey@3715
   495
		{
skamonkey@3715
   496
			return true;
skamonkey@3715
   497
		}
skamonkey@3715
   498
	}
skamonkey@3308
   499
	
skamonkey@3308
   500
	return false;
skamonkey@3308
   501
}
skamonkey@3308
   502
skamonkey@3308
   503
/**
erik@3093
   504
 * Gets an entity's object type.
erik@3093
   505
 *
erik@3093
   506
 * @param entity		Entity index.
erik@3093
   507
 * @return				Current TFObjectType of entity.
erik@3093
   508
 * @error				Invalid entity index.
erik@3093
   509
 */
erik@3093
   510
stock TFObjectType:TF2_GetObjectType(entity)
erik@3093
   511
{
erik@3093
   512
	new offset = GetEntSendPropOffs(entity, "m_iObjectType");
erik@3093
   513
	
erik@3093
   514
	if (offset <= 0)
erik@3093
   515
	{
erik@3093
   516
		ThrowError("Entity index %d is not an object", entity);
erik@3093
   517
	}
erik@3093
   518
	
erik@3093
   519
	return TFObjectType:GetEntData(entity, offset);
erik@3093
   520
}
erik@3093
   521
erik@3093
   522
/**
erik@3093
   523
 * Gets an entity's object mode.
erik@3093
   524
 *
erik@3093
   525
 * @param entity		Entity index.
erik@3093
   526
 * @return				Current TFObjectMode of entity.
erik@3093
   527
 * @error				Invalid entity index.
erik@3093
   528
 */
erik@3093
   529
stock TFObjectMode:TF2_GetObjectMode(entity)
erik@3093
   530
{
erik@3093
   531
	new offset = GetEntSendPropOffs(entity, "m_iObjectMode");
erik@3093
   532
	
erik@3093
   533
	if (offset <= 0)
erik@3093
   534
	{
erik@3093
   535
		ThrowError("Entity index %d is not an object", entity);
erik@3093
   536
	}
erik@3093
   537
	
erik@3093
   538
	return TFObjectMode:GetEntData(entity, offset);
erik@3093
   539
}