plugins/include/entity_prop_stocks.inc
author Scott Ehlert <ds@alliedmods.net>
Fri Nov 14 09:18:30 2008 -0600 (2008-11-14)
changeset 2400 76b7b4575e21
parent 2289 44045ead61cd
child 2583 d3b2571c378b
permissions -rw-r--r--
Added preliminary support for Left 4 Dead; some things may not yet work.
ferret99gt@1800
     1
/**
ferret99gt@1800
     2
 * vim: set ts=4 :
ferret99gt@1800
     3
 * =============================================================================
ds@1947
     4
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
ferret99gt@1800
     5
 * =============================================================================
ferret99gt@1800
     6
 *
ferret99gt@1800
     7
 * This file is part of the SourceMod/SourcePawn SDK.
ferret99gt@1800
     8
 *
ferret99gt@1800
     9
 * This program is free software; you can redistribute it and/or modify it under
ferret99gt@1800
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
ferret99gt@1800
    11
 * Free Software Foundation.
ferret99gt@1800
    12
 * 
ferret99gt@1800
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
ferret99gt@1800
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ferret99gt@1800
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ferret99gt@1800
    16
 * details.
ferret99gt@1800
    17
 *
ferret99gt@1800
    18
 * You should have received a copy of the GNU General Public License along with
ferret99gt@1800
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ferret99gt@1800
    20
 *
ferret99gt@1800
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
ferret99gt@1800
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ferret99gt@1800
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ferret99gt@1800
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
ferret99gt@1800
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ferret99gt@1800
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
ferret99gt@1800
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ferret99gt@1800
    28
 * or <http://www.sourcemod.net/license.php>.
ferret99gt@1800
    29
 *
ferret99gt@1800
    30
 * Version: $Id$
ferret99gt@1800
    31
 */
ferret99gt@1800
    32
 
ferret99gt@1800
    33
#if defined _entity_prop_stocks_included
ferret99gt@1800
    34
 #endinput
ferret99gt@1800
    35
#endif
ferret99gt@1800
    36
#define _entity_prop_stocks_included
ferret99gt@1800
    37
dvander@1837
    38
enum MoveType
ferret99gt@1800
    39
{
dvander@1837
    40
	MOVETYPE_NONE = 0,			/**< never moves */
dvander@1837
    41
	MOVETYPE_ISOMETRIC,			/**< For players */
dvander@1837
    42
	MOVETYPE_WALK,				/**< Player only - moving on the ground */
dvander@1837
    43
	MOVETYPE_STEP,				/**< gravity, special edge handling -- monsters use this */
dvander@1837
    44
	MOVETYPE_FLY,				/**< No gravity, but still collides with stuff */
dvander@1837
    45
	MOVETYPE_FLYGRAVITY,		/**< flies through the air + is affected by gravity */
dvander@1837
    46
	MOVETYPE_VPHYSICS,			/**< uses VPHYSICS for simulation */
dvander@1837
    47
	MOVETYPE_PUSH,				/**< no clip to world, push and crush */
dvander@1837
    48
	MOVETYPE_NOCLIP,			/**< No gravity, no collisions, still do velocity/avelocity */
dvander@1837
    49
	MOVETYPE_LADDER,			/**< Used by players only when going onto a ladder */
dvander@1837
    50
	MOVETYPE_OBSERVER,			/**< Observer movement, depends on player's observer mode */
dvander@1837
    51
	MOVETYPE_CUSTOM,			/**< Allows the entity to describe its own physics */
dvander@1837
    52
};
dvander@1837
    53
dvander@1837
    54
enum RenderMode
dvander@1837
    55
{	
dvander@1837
    56
	RENDER_NORMAL,			/**< src */
dvander@1837
    57
	RENDER_TRANSCOLOR,		/**< c*a+dest*(1-a) */
dvander@1837
    58
	RENDER_TRANSTEXTURE,	/**< src*a+dest*(1-a) */
dvander@1837
    59
	RENDER_GLOW,			/**< src*a+dest -- No Z buffer checks -- Fixed size in screen space */
dvander@1837
    60
	RENDER_TRANSALPHA,		/**< src*srca+dest*(1-srca) */
dvander@1837
    61
	RENDER_TRANSADD,		/**< src*a+dest */
dvander@1837
    62
	RENDER_ENVIRONMENTAL,	/**< not drawn, used for environmental effects */
dvander@1837
    63
	RENDER_TRANSADDFRAMEBLEND, /**< use a fractional frame value to blend between animation frames */
dvander@1837
    64
	RENDER_TRANSALPHAADD,	/**< src + dest*(1-a) */
dvander@1837
    65
	RENDER_WORLDGLOW,		/**< Same as kRenderGlow but not fixed size in screen space */
dvander@1837
    66
	RENDER_NONE,			/**< Don't render. */
dvander@1837
    67
};
dvander@1837
    68
dvander@1837
    69
enum RenderFx
dvander@1837
    70
{	
dvander@1837
    71
	RENDERFX_NONE = 0, 
dvander@1837
    72
	RENDERFX_PULSE_SLOW, 
dvander@1837
    73
	RENDERFX_PULSE_FAST, 
dvander@1837
    74
	RENDERFX_PULSE_SLOW_WIDE, 
dvander@1837
    75
	RENDERFX_PULSE_FAST_WIDE, 
dvander@1837
    76
	RENDERFX_FADE_SLOW, 
dvander@1837
    77
	RENDERFX_FADE_FAST, 
dvander@1837
    78
	RENDERFX_SOLID_SLOW, 
dvander@1837
    79
	RENDERFX_SOLID_FAST, 	   
dvander@1837
    80
	RENDERFX_STROBE_SLOW, 
dvander@1837
    81
	RENDERFX_STROBE_FAST, 
dvander@1837
    82
	RENDERFX_STROBE_FASTER, 
dvander@1837
    83
	RENDERFX_FLICKER_SLOW, 
dvander@1837
    84
	RENDERFX_FLICKER_FAST,
dvander@1837
    85
	RENDERFX_NO_DISSIPATION,
dvander@1837
    86
	RENDERFX_DISTORT,			/**< Distort/scale/translate flicker */
dvander@1837
    87
	RENDERFX_HOLOGRAM,			/**< kRenderFxDistort + distance fade */
dvander@1837
    88
	RENDERFX_EXPLODE,			/**< Scale up really big! */
dvander@1837
    89
	RENDERFX_GLOWSHELL,			/**< Glowing Shell */
dvander@1837
    90
	RENDERFX_CLAMP_MIN_SCALE,	/**< Keep this sprite from getting very small (SPRITES only!) */
dvander@1837
    91
	RENDERFX_ENV_RAIN,			/**< for environmental rendermode, make rain */
dvander@1837
    92
	RENDERFX_ENV_SNOW,			/**<  "        "            "    , make snow */
dvander@1837
    93
	RENDERFX_SPOTLIGHT,			/**< TEST CODE for experimental spotlight */
dvander@1837
    94
	RENDERFX_RAGDOLL,			/**< HACKHACK: TEST CODE for signalling death of a ragdoll character */
dvander@1837
    95
	RENDERFX_PULSE_FAST_WIDER,
dvander@1837
    96
	RENDERFX_MAX
ferret99gt@1800
    97
};
ferret99gt@1800
    98
ferret99gt@1845
    99
// These defines are for client button presses.
pred@1826
   100
#define IN_ATTACK		(1 << 0)
pred@1826
   101
#define IN_JUMP			(1 << 1)
pred@1826
   102
#define IN_DUCK			(1 << 2)
pred@1826
   103
#define IN_FORWARD		(1 << 3)
pred@1826
   104
#define IN_BACK			(1 << 4)
pred@1826
   105
#define IN_USE			(1 << 5)
pred@1826
   106
#define IN_CANCEL		(1 << 6)
pred@1826
   107
#define IN_LEFT			(1 << 7)
pred@1826
   108
#define IN_RIGHT		(1 << 8)
pred@1826
   109
#define IN_MOVELEFT		(1 << 9)
ferret99gt@1845
   110
#define IN_MOVERIGHT		(1 << 10)
pred@1826
   111
#define IN_ATTACK2		(1 << 11)
pred@1826
   112
#define IN_RUN			(1 << 12)
pred@1826
   113
#define IN_RELOAD		(1 << 13)
pred@1826
   114
#define IN_ALT1			(1 << 14)
pred@1826
   115
#define IN_ALT2			(1 << 15)
ferret99gt@1845
   116
#define IN_SCORE		(1 << 16)   	// Used by client.dll for when scoreboard is held down
pred@1826
   117
#define IN_SPEED		(1 << 17)	// Player is holding the speed key
pred@1826
   118
#define IN_WALK			(1 << 18)	// Player holding walk key
pred@1826
   119
#define IN_ZOOM			(1 << 19)	// Zoom key for HUD zoom
pred@1826
   120
#define IN_WEAPON1		(1 << 20)	// weapon defines these bits
pred@1826
   121
#define IN_WEAPON2		(1 << 21)	// weapon defines these bits
pred@1826
   122
#define IN_BULLRUSH		(1 << 22)
pred@1826
   123
#define IN_GRENADE1		(1 << 23)	// grenade 1
pred@1826
   124
#define IN_GRENADE2		(1 << 24)	// grenade 2
pred@1826
   125
ferret99gt@1845
   126
// CBaseEntity::m_fFlags
ferret99gt@1845
   127
// PLAYER SPECIFIC FLAGS FIRST BECAUSE WE USE ONLY A FEW BITS OF NETWORK PRECISION
ferret99gt@1845
   128
#define	FL_ONGROUND			(1 << 0)	// At rest / on the ground
ferret99gt@1845
   129
#define FL_DUCKING			(1 << 1)	// Player flag -- Player is fully crouched
ferret99gt@1845
   130
#define	FL_WATERJUMP			(1 << 2)	// player jumping out of water
ferret99gt@1845
   131
#define FL_ONTRAIN			(1 << 3)	// Player is _controlling_ a train, so movement commands should be ignored on client during prediction.
ferret99gt@1845
   132
#define FL_INRAIN			(1 << 4)	// Indicates the entity is standing in rain
ferret99gt@1845
   133
#define FL_FROZEN			(1 << 5)	// Player is frozen for 3rd person camera
ferret99gt@1845
   134
#define FL_ATCONTROLS			(1 << 6)	// Player can't move, but keeps key inputs for controlling another entity
ferret99gt@1845
   135
#define	FL_CLIENT			(1 << 7)	// Is a player
ferret99gt@1845
   136
#define FL_FAKECLIENT			(1 << 8)	// Fake client, simulated server side; don't send network messages to them
ferret99gt@1845
   137
// NOTE if you move things up, make sure to change this value
ferret99gt@1845
   138
#define PLAYER_FLAG_BITS		9
ferret99gt@1845
   139
// NON-PLAYER SPECIFIC (i.e., not used by GameMovement or the client .dll ) -- Can still be applied to players, though
ferret99gt@1845
   140
#define	FL_INWATER			(1 << 9)	// In water
ferret99gt@1845
   141
#define	FL_FLY				(1 << 10)	// Changes the SV_Movestep() behavior to not need to be on ground
ferret99gt@1845
   142
#define	FL_SWIM				(1 << 11)	// Changes the SV_Movestep() behavior to not need to be on ground (but stay in water)
ferret99gt@1845
   143
#define	FL_CONVEYOR			(1 << 12)
ferret99gt@1845
   144
#define	FL_NPC				(1 << 13)
ferret99gt@1845
   145
#define	FL_GODMODE			(1 << 14)
ferret99gt@1845
   146
#define	FL_NOTARGET			(1 << 15)
ferret99gt@1845
   147
#define	FL_AIMTARGET			(1 << 16)	// set if the crosshair needs to aim onto the entity
ferret99gt@1845
   148
#define	FL_PARTIALGROUND		(1 << 17)	// not all corners are valid
ferret99gt@1845
   149
#define FL_STATICPROP			(1 << 18)	// Eetsa static prop!		
ferret99gt@1845
   150
#define FL_GRAPHED			(1 << 19)	// worldgraph has this ent listed as something that blocks a connection
ferret99gt@1845
   151
#define FL_GRENADE			(1 << 20)
ferret99gt@1845
   152
#define FL_STEPMOVEMENT			(1 << 21)	// Changes the SV_Movestep() behavior to not do any processing
ferret99gt@1845
   153
#define FL_DONTTOUCH			(1 << 22)	// Doesn't generate touch functions, generates Untouch() for anything it was touching when this flag was set
ferret99gt@1845
   154
#define FL_BASEVELOCITY			(1 << 23)	// Base velocity has been applied this frame (used to convert base velocity into momentum)
ferret99gt@1845
   155
#define FL_WORLDBRUSH			(1 << 24)	// Not moveable/removeable brush entity (really part of the world, but represented as an entity for transparency or something)
ferret99gt@1845
   156
#define FL_OBJECT			(1 << 25)	// Terrible name. This is an object that NPCs should see. Missiles, for example.
ferret99gt@1845
   157
#define FL_KILLME			(1 << 26)	// This entity is marked for death -- will be freed by game DLL
ferret99gt@1845
   158
#define FL_ONFIRE			(1 << 27)	// You know...
ferret99gt@1845
   159
#define FL_DISSOLVING			(1 << 28)	// We're dissolving!
ferret99gt@1845
   160
#define FL_TRANSRAGDOLL			(1 << 29)	// In the process of turning into a client side ragdoll.
ferret99gt@1845
   161
#define FL_UNBLOCKABLE_BY_PLAYER	(1 << 30)	// pusher that can't be blocked by the player
ferret99gt@1845
   162
// END m_fFlags #defines
ferret99gt@1845
   163
ferret99gt@1845
   164
/**
ferret99gt@1845
   165
 * Get an entity's flags.
ferret99gt@1845
   166
 *
ferret99gt@1845
   167
 * @param entity	Entity index.
ferret99gt@1845
   168
 * @return			Entity's flags, see m_fFlag defines above
ferret99gt@1845
   169
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1845
   170
 */
ferret99gt@1845
   171
stock GetEntityFlags(entity)
ferret99gt@1845
   172
{
ferret99gt@1845
   173
	return GetEntProp(entity, Prop_Data, "m_fFlags");
ferret99gt@1845
   174
}
ferret99gt@1845
   175
ferret99gt@1800
   176
/**
ferret99gt@1820
   177
 * Gets an entity's movetype.
ferret99gt@1820
   178
 *
dvander@1834
   179
 * @param entity	Entity index.
dvander@1834
   180
 * @return			Movetype, see enum above.
dvander@1834
   181
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1820
   182
 */
dvander@1837
   183
stock MoveType:GetEntityMoveType(entity)
ferret99gt@1820
   184
{
dvander@1834
   185
	new offset = GetEntSendPropOffs(entity, "movetype");
dvander@1837
   186
	return MoveType:GetEntData(entity, offset, 1);
ferret99gt@1820
   187
}
ferret99gt@1820
   188
ferret99gt@1820
   189
/**
ferret99gt@1820
   190
 * Sets an entity's movetype.
ferret99gt@1800
   191
 *
dvander@1834
   192
 * @param entity	Entity index.
dvander@1834
   193
 * @param mt		Movetype, see enum above.
ferret99gt@1800
   194
 * @noreturn
dvander@1834
   195
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1800
   196
 */
dvander@1837
   197
stock SetEntityMoveType(entity, MoveType:mt)
ferret99gt@1800
   198
{
dvander@1834
   199
	new offset = GetEntSendPropOffs(entity, "movetype");
dvander@1834
   200
	SetEntData(entity, offset, mt, 1, true);
ferret99gt@1800
   201
}
ferret99gt@1800
   202
ferret99gt@1800
   203
/**
dvander@1837
   204
 * Gets an entity's render mode.
dvander@1837
   205
 *
dvander@1837
   206
 * @param entity	Entity index.
dvander@1837
   207
 * @return			RenderMode value.
dvander@1837
   208
 * @error			Invalid entity index, or lack of mod compliance.
dvander@1837
   209
 */
dvander@1837
   210
stock RenderMode:GetEntityRenderMode(entity)
dvander@1837
   211
{
dvander@1837
   212
	return RenderMode:GetEntProp(entity, Prop_Send, "m_nRenderMode", 1);
dvander@1837
   213
}
dvander@1837
   214
dvander@1837
   215
/**
dvander@1837
   216
 * Sets an entity's render mode.
dvander@1837
   217
 *
dvander@1837
   218
 * @param entity	Entity index.
dvander@1837
   219
 * @param mode		RenderMode value.
dvander@1837
   220
 * @noreturn
dvander@1837
   221
 * @error			Invalid entity index, or lack of mod compliance.
dvander@1837
   222
 */
dvander@1837
   223
stock SetEntityRenderMode(entity, RenderMode:mode)
dvander@1837
   224
{
dvander@1837
   225
	SetEntProp(entity, Prop_Send, "m_nRenderMode", mode, 1);
dvander@1837
   226
}
dvander@1837
   227
dvander@1837
   228
/**
dvander@1837
   229
 * Gets an entity's render Fx.
dvander@1837
   230
 *
dvander@1837
   231
 * @param entity	Entity index.
dvander@1837
   232
 * @return			RenderFx value.
dvander@1837
   233
 * @error			Invalid entity index, or lack of mod compliance.
dvander@1837
   234
 */
dvander@1837
   235
stock RenderFx:GetEntityRenderFx(entity)
dvander@1837
   236
{
dvander@1837
   237
	return RenderFx:GetEntProp(entity, Prop_Send, "m_nRenderFX", 1);
dvander@1837
   238
}
dvander@1837
   239
dvander@1837
   240
/**
dvander@1837
   241
 * Sets an entity's render Fx.
dvander@1837
   242
 *
dvander@1837
   243
 * @param entity	Entity index.
dvander@1837
   244
 * @param fx		RenderFx value.
dvander@1837
   245
 * @noreturn
dvander@1837
   246
 * @error			Invalid entity index, or lack of mod compliance.
dvander@1837
   247
 */
dvander@1837
   248
stock SetEntityRenderFx(entity, RenderFx:fx)
dvander@1837
   249
{
dvander@1837
   250
	SetEntProp(entity, Prop_Send, "m_nRenderFX", fx, 1);
dvander@1837
   251
}
dvander@1837
   252
dvander@1837
   253
/**
ferret99gt@1800
   254
 * Sets an entity's color.
ferret99gt@1800
   255
 *
dvander@1834
   256
 * @param entity	Entity index
ferret99gt@1800
   257
 * @param r 		Amount of red (0-255)
ferret99gt@1800
   258
 * @param g 		Amount of green (0-255)
ferret99gt@1800
   259
 * @param b 		Amount of blue (0-255)
ferret99gt@1800
   260
 * @param a 		Amount of alpha (0-255)
ferret99gt@1800
   261
 * @noreturn
dvander@1834
   262
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1800
   263
 */
dvander@1834
   264
stock SetEntityRenderColor(entity, r=255, g=255, b=255, a=255)
ferret99gt@1800
   265
{
dvander@1834
   266
	new offset = GetEntSendPropOffs(entity, "m_clrRender");
dvander@1834
   267
	SetEntData(entity, offset, r, 1, true);
dvander@1834
   268
	SetEntData(entity, offset + 1, g, 1, true);
dvander@1834
   269
	SetEntData(entity, offset + 2, b, 1, true);
dvander@1834
   270
	SetEntData(entity, offset + 3, a, 1, true);
ferret99gt@1820
   271
}
ferret99gt@1820
   272
dvander@1837
   273
/* GuessSDKVersion */
dvander@1837
   274
ferret99gt@1820
   275
/**
ferret99gt@1820
   276
 * Gets an entity's gravity.
ferret99gt@1820
   277
 *
dvander@1834
   278
 * @param entity 	Entity index.
dvander@1834
   279
 * @return			Entity's m_flGravity value.
dvander@1834
   280
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1820
   281
 */
dvander@1834
   282
stock Float:GetEntityGravity(entity)
ferret99gt@1820
   283
{
dvander@1834
   284
	return GetEntPropFloat(entity, Prop_Data, "m_flGravity");
ferret99gt@1820
   285
}
ferret99gt@1820
   286
ferret99gt@1820
   287
/**
ferret99gt@1820
   288
 * Sets an entity's gravity.
ferret99gt@1820
   289
 *
dvander@1834
   290
 * @param entity	Entity index.
ferret99gt@1845
   291
 * @param amount	Gravity to set (default = 1.0, half = 0.5, double = 2.0).
ferret99gt@1820
   292
 * @noreturn
dvander@1834
   293
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1820
   294
 */
dvander@1834
   295
stock SetEntityGravity(entity, Float:amount)
ferret99gt@1820
   296
{
dvander@1834
   297
	SetEntPropFloat(entity, Prop_Data, "m_flGravity", amount);
ferret99gt@1820
   298
}
ferret99gt@1820
   299
ferret99gt@1820
   300
/**
ferret99gt@1820
   301
 * Sets an entity's health
ferret99gt@1820
   302
 *
dvander@1834
   303
 * @param entity	Entity index.
dvander@1834
   304
 * @param amount	Health amount.
ferret99gt@1820
   305
 * @noreturn
dvander@1834
   306
 * @error			Invalid entity index, or lack of mod compliance.
ferret99gt@1820
   307
 */
dvander@1834
   308
stock SetEntityHealth(entity, amount)
ferret99gt@1820
   309
{
dvander@1834
   310
	SetEntProp(entity, Prop_Send, "m_iHealth", amount);
pred@1826
   311
}
pred@1826
   312
pred@1826
   313
/**
pred@1826
   314
 * Get's a users current pressed buttons
pred@1826
   315
 *
pred@1826
   316
 * @param client	Client index
pred@1826
   317
 * @return			Bitsum of buttons
dvander@1834
   318
 * @error			Invalid client index, client not in game, 
dvander@1834
   319
 *					or lack of mod compliance.
pred@1826
   320
 */
pred@1826
   321
stock GetClientButtons(client)
pred@1826
   322
{
dvander@1834
   323
	return GetEntProp(client, Prop_Data, "m_nButtons");
dvander@1834
   324
}