ferret99gt@1800: /** ferret99gt@1800: * vim: set ts=4 : ferret99gt@1800: * ============================================================================= ds@1947: * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. ferret99gt@1800: * ============================================================================= ferret99gt@1800: * ferret99gt@1800: * This file is part of the SourceMod/SourcePawn SDK. ferret99gt@1800: * ferret99gt@1800: * This program is free software; you can redistribute it and/or modify it under ferret99gt@1800: * the terms of the GNU General Public License, version 3.0, as published by the ferret99gt@1800: * Free Software Foundation. ferret99gt@1800: * ferret99gt@1800: * This program is distributed in the hope that it will be useful, but WITHOUT ferret99gt@1800: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ferret99gt@1800: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more ferret99gt@1800: * details. ferret99gt@1800: * ferret99gt@1800: * You should have received a copy of the GNU General Public License along with ferret99gt@1800: * this program. If not, see . ferret99gt@1800: * ferret99gt@1800: * As a special exception, AlliedModders LLC gives you permission to link the ferret99gt@1800: * code of this program (as well as its derivative works) to "Half-Life 2," the ferret99gt@1800: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software ferret99gt@1800: * by the Valve Corporation. You must obey the GNU General Public License in ferret99gt@1800: * all respects for all other code used. Additionally, AlliedModders LLC grants ferret99gt@1800: * this exception to all derivative works. AlliedModders LLC defines further ferret99gt@1800: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), ferret99gt@1800: * or . ferret99gt@1800: * ferret99gt@1800: * Version: $Id$ ferret99gt@1800: */ ferret99gt@1800: ferret99gt@1800: #if defined _entity_prop_stocks_included ferret99gt@1800: #endinput ferret99gt@1800: #endif ferret99gt@1800: #define _entity_prop_stocks_included ferret99gt@1800: dvander@1837: enum MoveType ferret99gt@1800: { dvander@1837: MOVETYPE_NONE = 0, /**< never moves */ dvander@1837: MOVETYPE_ISOMETRIC, /**< For players */ dvander@1837: MOVETYPE_WALK, /**< Player only - moving on the ground */ dvander@1837: MOVETYPE_STEP, /**< gravity, special edge handling -- monsters use this */ dvander@1837: MOVETYPE_FLY, /**< No gravity, but still collides with stuff */ dvander@1837: MOVETYPE_FLYGRAVITY, /**< flies through the air + is affected by gravity */ dvander@1837: MOVETYPE_VPHYSICS, /**< uses VPHYSICS for simulation */ dvander@1837: MOVETYPE_PUSH, /**< no clip to world, push and crush */ dvander@1837: MOVETYPE_NOCLIP, /**< No gravity, no collisions, still do velocity/avelocity */ dvander@1837: MOVETYPE_LADDER, /**< Used by players only when going onto a ladder */ dvander@1837: MOVETYPE_OBSERVER, /**< Observer movement, depends on player's observer mode */ dvander@1837: MOVETYPE_CUSTOM, /**< Allows the entity to describe its own physics */ dvander@1837: }; dvander@1837: dvander@1837: enum RenderMode dvander@1837: { dvander@1837: RENDER_NORMAL, /**< src */ dvander@1837: RENDER_TRANSCOLOR, /**< c*a+dest*(1-a) */ dvander@1837: RENDER_TRANSTEXTURE, /**< src*a+dest*(1-a) */ dvander@1837: RENDER_GLOW, /**< src*a+dest -- No Z buffer checks -- Fixed size in screen space */ dvander@1837: RENDER_TRANSALPHA, /**< src*srca+dest*(1-srca) */ dvander@1837: RENDER_TRANSADD, /**< src*a+dest */ dvander@1837: RENDER_ENVIRONMENTAL, /**< not drawn, used for environmental effects */ dvander@1837: RENDER_TRANSADDFRAMEBLEND, /**< use a fractional frame value to blend between animation frames */ dvander@1837: RENDER_TRANSALPHAADD, /**< src + dest*(1-a) */ dvander@1837: RENDER_WORLDGLOW, /**< Same as kRenderGlow but not fixed size in screen space */ dvander@1837: RENDER_NONE, /**< Don't render. */ dvander@1837: }; dvander@1837: dvander@1837: enum RenderFx dvander@1837: { dvander@1837: RENDERFX_NONE = 0, dvander@1837: RENDERFX_PULSE_SLOW, dvander@1837: RENDERFX_PULSE_FAST, dvander@1837: RENDERFX_PULSE_SLOW_WIDE, dvander@1837: RENDERFX_PULSE_FAST_WIDE, dvander@1837: RENDERFX_FADE_SLOW, dvander@1837: RENDERFX_FADE_FAST, dvander@1837: RENDERFX_SOLID_SLOW, dvander@1837: RENDERFX_SOLID_FAST, dvander@1837: RENDERFX_STROBE_SLOW, dvander@1837: RENDERFX_STROBE_FAST, dvander@1837: RENDERFX_STROBE_FASTER, dvander@1837: RENDERFX_FLICKER_SLOW, dvander@1837: RENDERFX_FLICKER_FAST, dvander@1837: RENDERFX_NO_DISSIPATION, dvander@1837: RENDERFX_DISTORT, /**< Distort/scale/translate flicker */ dvander@1837: RENDERFX_HOLOGRAM, /**< kRenderFxDistort + distance fade */ dvander@1837: RENDERFX_EXPLODE, /**< Scale up really big! */ dvander@1837: RENDERFX_GLOWSHELL, /**< Glowing Shell */ dvander@1837: RENDERFX_CLAMP_MIN_SCALE, /**< Keep this sprite from getting very small (SPRITES only!) */ dvander@1837: RENDERFX_ENV_RAIN, /**< for environmental rendermode, make rain */ dvander@1837: RENDERFX_ENV_SNOW, /**< " " " , make snow */ dvander@1837: RENDERFX_SPOTLIGHT, /**< TEST CODE for experimental spotlight */ dvander@1837: RENDERFX_RAGDOLL, /**< HACKHACK: TEST CODE for signalling death of a ragdoll character */ dvander@1837: RENDERFX_PULSE_FAST_WIDER, dvander@1837: RENDERFX_MAX ferret99gt@1800: }; ferret99gt@1800: ferret99gt@1845: // These defines are for client button presses. pred@1826: #define IN_ATTACK (1 << 0) pred@1826: #define IN_JUMP (1 << 1) pred@1826: #define IN_DUCK (1 << 2) pred@1826: #define IN_FORWARD (1 << 3) pred@1826: #define IN_BACK (1 << 4) pred@1826: #define IN_USE (1 << 5) pred@1826: #define IN_CANCEL (1 << 6) pred@1826: #define IN_LEFT (1 << 7) pred@1826: #define IN_RIGHT (1 << 8) pred@1826: #define IN_MOVELEFT (1 << 9) ferret99gt@1845: #define IN_MOVERIGHT (1 << 10) pred@1826: #define IN_ATTACK2 (1 << 11) pred@1826: #define IN_RUN (1 << 12) pred@1826: #define IN_RELOAD (1 << 13) pred@1826: #define IN_ALT1 (1 << 14) pred@1826: #define IN_ALT2 (1 << 15) ferret99gt@1845: #define IN_SCORE (1 << 16) // Used by client.dll for when scoreboard is held down pred@1826: #define IN_SPEED (1 << 17) // Player is holding the speed key pred@1826: #define IN_WALK (1 << 18) // Player holding walk key pred@1826: #define IN_ZOOM (1 << 19) // Zoom key for HUD zoom pred@1826: #define IN_WEAPON1 (1 << 20) // weapon defines these bits pred@1826: #define IN_WEAPON2 (1 << 21) // weapon defines these bits pred@1826: #define IN_BULLRUSH (1 << 22) pred@1826: #define IN_GRENADE1 (1 << 23) // grenade 1 pred@1826: #define IN_GRENADE2 (1 << 24) // grenade 2 pred@1826: ferret99gt@1845: // CBaseEntity::m_fFlags ferret99gt@1845: // PLAYER SPECIFIC FLAGS FIRST BECAUSE WE USE ONLY A FEW BITS OF NETWORK PRECISION ferret99gt@1845: #define FL_ONGROUND (1 << 0) // At rest / on the ground ferret99gt@1845: #define FL_DUCKING (1 << 1) // Player flag -- Player is fully crouched ferret99gt@1845: #define FL_WATERJUMP (1 << 2) // player jumping out of water ferret99gt@1845: #define FL_ONTRAIN (1 << 3) // Player is _controlling_ a train, so movement commands should be ignored on client during prediction. ferret99gt@1845: #define FL_INRAIN (1 << 4) // Indicates the entity is standing in rain ferret99gt@1845: #define FL_FROZEN (1 << 5) // Player is frozen for 3rd person camera ferret99gt@1845: #define FL_ATCONTROLS (1 << 6) // Player can't move, but keeps key inputs for controlling another entity ferret99gt@1845: #define FL_CLIENT (1 << 7) // Is a player ferret99gt@1845: #define FL_FAKECLIENT (1 << 8) // Fake client, simulated server side; don't send network messages to them ferret99gt@1845: // NOTE if you move things up, make sure to change this value ferret99gt@1845: #define PLAYER_FLAG_BITS 9 ferret99gt@1845: // NON-PLAYER SPECIFIC (i.e., not used by GameMovement or the client .dll ) -- Can still be applied to players, though ferret99gt@1845: #define FL_INWATER (1 << 9) // In water ferret99gt@1845: #define FL_FLY (1 << 10) // Changes the SV_Movestep() behavior to not need to be on ground ferret99gt@1845: #define FL_SWIM (1 << 11) // Changes the SV_Movestep() behavior to not need to be on ground (but stay in water) ferret99gt@1845: #define FL_CONVEYOR (1 << 12) ferret99gt@1845: #define FL_NPC (1 << 13) ferret99gt@1845: #define FL_GODMODE (1 << 14) ferret99gt@1845: #define FL_NOTARGET (1 << 15) ferret99gt@1845: #define FL_AIMTARGET (1 << 16) // set if the crosshair needs to aim onto the entity ferret99gt@1845: #define FL_PARTIALGROUND (1 << 17) // not all corners are valid ferret99gt@1845: #define FL_STATICPROP (1 << 18) // Eetsa static prop! ferret99gt@1845: #define FL_GRAPHED (1 << 19) // worldgraph has this ent listed as something that blocks a connection ferret99gt@1845: #define FL_GRENADE (1 << 20) ferret99gt@1845: #define FL_STEPMOVEMENT (1 << 21) // Changes the SV_Movestep() behavior to not do any processing ferret99gt@1845: #define FL_DONTTOUCH (1 << 22) // Doesn't generate touch functions, generates Untouch() for anything it was touching when this flag was set ferret99gt@1845: #define FL_BASEVELOCITY (1 << 23) // Base velocity has been applied this frame (used to convert base velocity into momentum) ferret99gt@1845: #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: #define FL_OBJECT (1 << 25) // Terrible name. This is an object that NPCs should see. Missiles, for example. ferret99gt@1845: #define FL_KILLME (1 << 26) // This entity is marked for death -- will be freed by game DLL ferret99gt@1845: #define FL_ONFIRE (1 << 27) // You know... ferret99gt@1845: #define FL_DISSOLVING (1 << 28) // We're dissolving! ferret99gt@1845: #define FL_TRANSRAGDOLL (1 << 29) // In the process of turning into a client side ragdoll. ferret99gt@1845: #define FL_UNBLOCKABLE_BY_PLAYER (1 << 30) // pusher that can't be blocked by the player ferret99gt@1845: // END m_fFlags #defines ferret99gt@1845: ferret99gt@1845: /** ferret99gt@1845: * Get an entity's flags. ferret99gt@1845: * ferret99gt@1845: * @param entity Entity index. ferret99gt@1845: * @return Entity's flags, see m_fFlag defines above ferret99gt@1845: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1845: */ ferret99gt@1845: stock GetEntityFlags(entity) ferret99gt@1845: { ferret99gt@1845: return GetEntProp(entity, Prop_Data, "m_fFlags"); ferret99gt@1845: } ferret99gt@1845: ferret99gt@1800: /** ferret99gt@1820: * Gets an entity's movetype. ferret99gt@1820: * dvander@1834: * @param entity Entity index. dvander@1834: * @return Movetype, see enum above. dvander@1834: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1820: */ dvander@1837: stock MoveType:GetEntityMoveType(entity) ferret99gt@1820: { dvander@1834: new offset = GetEntSendPropOffs(entity, "movetype"); dvander@1837: return MoveType:GetEntData(entity, offset, 1); ferret99gt@1820: } ferret99gt@1820: ferret99gt@1820: /** ferret99gt@1820: * Sets an entity's movetype. ferret99gt@1800: * dvander@1834: * @param entity Entity index. dvander@1834: * @param mt Movetype, see enum above. ferret99gt@1800: * @noreturn dvander@1834: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1800: */ dvander@1837: stock SetEntityMoveType(entity, MoveType:mt) ferret99gt@1800: { dvander@1834: new offset = GetEntSendPropOffs(entity, "movetype"); dvander@1834: SetEntData(entity, offset, mt, 1, true); ferret99gt@1800: } ferret99gt@1800: ferret99gt@1800: /** dvander@1837: * Gets an entity's render mode. dvander@1837: * dvander@1837: * @param entity Entity index. dvander@1837: * @return RenderMode value. dvander@1837: * @error Invalid entity index, or lack of mod compliance. dvander@1837: */ dvander@1837: stock RenderMode:GetEntityRenderMode(entity) dvander@1837: { dvander@1837: return RenderMode:GetEntProp(entity, Prop_Send, "m_nRenderMode", 1); dvander@1837: } dvander@1837: dvander@1837: /** dvander@1837: * Sets an entity's render mode. dvander@1837: * dvander@1837: * @param entity Entity index. dvander@1837: * @param mode RenderMode value. dvander@1837: * @noreturn dvander@1837: * @error Invalid entity index, or lack of mod compliance. dvander@1837: */ dvander@1837: stock SetEntityRenderMode(entity, RenderMode:mode) dvander@1837: { dvander@1837: SetEntProp(entity, Prop_Send, "m_nRenderMode", mode, 1); dvander@1837: } dvander@1837: dvander@1837: /** dvander@1837: * Gets an entity's render Fx. dvander@1837: * dvander@1837: * @param entity Entity index. dvander@1837: * @return RenderFx value. dvander@1837: * @error Invalid entity index, or lack of mod compliance. dvander@1837: */ dvander@1837: stock RenderFx:GetEntityRenderFx(entity) dvander@1837: { dvander@1837: return RenderFx:GetEntProp(entity, Prop_Send, "m_nRenderFX", 1); dvander@1837: } dvander@1837: dvander@1837: /** dvander@1837: * Sets an entity's render Fx. dvander@1837: * dvander@1837: * @param entity Entity index. dvander@1837: * @param fx RenderFx value. dvander@1837: * @noreturn dvander@1837: * @error Invalid entity index, or lack of mod compliance. dvander@1837: */ dvander@1837: stock SetEntityRenderFx(entity, RenderFx:fx) dvander@1837: { dvander@1837: SetEntProp(entity, Prop_Send, "m_nRenderFX", fx, 1); dvander@1837: } dvander@1837: dvander@1837: /** ferret99gt@1800: * Sets an entity's color. ferret99gt@1800: * dvander@1834: * @param entity Entity index ferret99gt@1800: * @param r Amount of red (0-255) ferret99gt@1800: * @param g Amount of green (0-255) ferret99gt@1800: * @param b Amount of blue (0-255) ferret99gt@1800: * @param a Amount of alpha (0-255) ferret99gt@1800: * @noreturn dvander@1834: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1800: */ dvander@1834: stock SetEntityRenderColor(entity, r=255, g=255, b=255, a=255) ferret99gt@1800: { dvander@1834: new offset = GetEntSendPropOffs(entity, "m_clrRender"); dvander@1834: SetEntData(entity, offset, r, 1, true); dvander@1834: SetEntData(entity, offset + 1, g, 1, true); dvander@1834: SetEntData(entity, offset + 2, b, 1, true); dvander@1834: SetEntData(entity, offset + 3, a, 1, true); ferret99gt@1820: } ferret99gt@1820: dvander@1837: /* GuessSDKVersion */ dvander@1837: ferret99gt@1820: /** ferret99gt@1820: * Gets an entity's gravity. ferret99gt@1820: * dvander@1834: * @param entity Entity index. dvander@1834: * @return Entity's m_flGravity value. dvander@1834: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1820: */ dvander@1834: stock Float:GetEntityGravity(entity) ferret99gt@1820: { dvander@1834: return GetEntPropFloat(entity, Prop_Data, "m_flGravity"); ferret99gt@1820: } ferret99gt@1820: ferret99gt@1820: /** ferret99gt@1820: * Sets an entity's gravity. ferret99gt@1820: * dvander@1834: * @param entity Entity index. ferret99gt@1845: * @param amount Gravity to set (default = 1.0, half = 0.5, double = 2.0). ferret99gt@1820: * @noreturn dvander@1834: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1820: */ dvander@1834: stock SetEntityGravity(entity, Float:amount) ferret99gt@1820: { dvander@1834: SetEntPropFloat(entity, Prop_Data, "m_flGravity", amount); ferret99gt@1820: } ferret99gt@1820: ferret99gt@1820: /** ferret99gt@1820: * Sets an entity's health ferret99gt@1820: * dvander@1834: * @param entity Entity index. dvander@1834: * @param amount Health amount. ferret99gt@1820: * @noreturn dvander@1834: * @error Invalid entity index, or lack of mod compliance. ferret99gt@1820: */ dvander@1834: stock SetEntityHealth(entity, amount) ferret99gt@1820: { dvander@1834: SetEntProp(entity, Prop_Send, "m_iHealth", amount); pred@1826: } pred@1826: pred@1826: /** pred@1826: * Get's a users current pressed buttons pred@1826: * pred@1826: * @param client Client index pred@1826: * @return Bitsum of buttons dvander@1834: * @error Invalid client index, client not in game, dvander@1834: * or lack of mod compliance. pred@1826: */ pred@1826: stock GetClientButtons(client) pred@1826: { dvander@1834: return GetEntProp(client, Prop_Data, "m_nButtons"); dvander@1834: }