amxmodx/plugins/include/engine.inc

283 lines
11 KiB
PHP
Raw Normal View History

/* Engine functions
2004-02-15 02:29:51 +00:00
*
* by the AMX Mod X Development Team
* thanks to Vexd and mahnsawce
2004-02-15 02:29:51 +00:00
*
* This file is provided as is (no warranties).
*/
#if defined _engine_included
#endinput
#endif
#define _engine_included
2004-02-15 02:29:51 +00:00
#include <engine_const>
2005-07-15 19:05:31 +00:00
#pragma library engine
2004-09-07 09:26:20 +00:00
native traceresult(type,{Float,Sql,Result,_}:...);
2004-06-26 04:48:32 +00:00
2004-06-25 22:50:43 +00:00
/* Registers a client impulse to a function. Function is passed the ID of the user. */
native register_impulse(impulse, function[]);
/* Registers a touch action to a function by classnames. Use * to specify any classname. */
native register_touch(Toucher[], Touched[], function[]);
/* Registers a think action to a function by classname. */
native register_think(Classname[], function[]);
2005-07-30 01:52:50 +00:00
/* Lets you directly hook a message in the engine!
2004-02-15 02:29:51 +00:00
* You can overwrite the message before anything happens and either let the message continue
* or fully block it. Here is how it works:
* If you hook a message, the message is stored but not sent. You have the opportunity to
* not only execute code, but to get/set the contents of the message, before you choose to
* either block it or let it go on its way. The hooked function will be passed a msg_id, msg_dest, and entity index. */
2004-02-15 02:29:51 +00:00
native register_message(iMsgId, szFunction[]);
2005-07-30 01:52:50 +00:00
/* The get/set _msg commands will fail if used outside a hooked message scope.
* They should never be used unless inside a registered message function.
2004-02-15 02:29:51 +00:00
* There are eight different ways of sending a message, five are ints, two are floats, and one is string.
2004-03-14 08:23:42 +00:00
* These are denoted by iArgType. argn is the number
2005-07-30 01:52:50 +00:00
* of the argument. Exceeding the bounds of 1 to get_msg_args() is a bad idea.
* As of AMX Mod X 1.5, the middle parameter of set_* no longer does anything.
* You cannot change the message argument type (as this would crash the mod anyway)
*/
2004-02-15 02:29:51 +00:00
/* Gets number of arguments that were passed to this message */
2004-03-04 08:27:51 +00:00
native get_msg_args();
2004-02-15 02:29:51 +00:00
/* Gets the argument type of argument argn */
2004-03-04 08:27:51 +00:00
native get_msg_argtype(argn);
2004-02-15 02:29:51 +00:00
/* Gets the value of argn. */
2004-03-04 08:27:51 +00:00
native get_msg_arg_int(argn);
native Float:get_msg_arg_float(argn);
native get_msg_arg_string(argn, szReturn[], iLength);
2004-02-15 02:29:51 +00:00
/* sets the value of argn. */
2004-03-04 08:27:51 +00:00
native set_msg_arg_int(argn, argtype, iValue);
native set_msg_arg_float(argn, argtype, Float:fValue);
native set_msg_arg_string(argn, szString[]);
2004-02-15 02:29:51 +00:00
/* Gets the origin of a message */
native get_msg_origin(Float:_Origin[3]);
/* NOTE: In old engine versions, this was not the case. Values are now WINDOWS values.
* You must pass with the windows offset (e.g. if 230 on windows, pass 230 no matter what)
* The module will automatically add +5 for Linux.
*/
2004-02-15 02:29:51 +00:00
/* Precaches any file. */
native precache_generic(szFile[]);
2004-03-14 08:23:42 +00:00
/* Precaches an event. */
2004-09-07 09:26:20 +00:00
native precache_event(type, Name[], {Float,Sql,Result,_}:...);
2004-03-14 08:23:42 +00:00
2004-07-30 14:17:28 +00:00
/* set/get a user's speak flags */
native set_speak(iIndex, iSpeakFlags)
native get_speak(iIndex)
2004-07-30 14:17:28 +00:00
/* Drops an entity to the floor (work?) */
2004-03-14 08:23:42 +00:00
native drop_to_floor(entity)
/* Get whole buffer containing keys and their data. */
native get_info_keybuffer(id, buffer[], length);
/* Use an entity with another entity. "used" could be a hostage, "user" a player. */
native force_use(pPlayer, pEntity);
/* Get globals from server. */
native Float:get_global_float(variable);
native get_global_int(variable);
native get_global_string(variable, string[], maxlen);
native get_global_vector(variable, Float:vector[3]);
native get_global_edict(variable);
/* Set entity bounds. */
native entity_set_size(index, Float:mins[3], Float:maxs[3]);
2004-03-14 08:23:42 +00:00
/* Get decal index */
native get_decal_index(const szDecalName[]);
/* Returns the distance between two entities. */
native Float:entity_range(ida,idb);
2004-02-15 02:29:51 +00:00
/* Sets/gets things in an entities Entvars Struct. */
native entity_get_int(iIndex, iKey);
native entity_set_int(iIndex, iKey, iVal);
native Float:entity_get_float(iIndex, iKey);
native entity_set_float(iIndex, iKey, Float:iVal);
native entity_get_vector(iIndex, iKey, Float:vRetVector[3]);
native entity_set_vector(iIndex, iKey, Float:vNewVector[3]);
native entity_get_edict(iIndex, iKey);
native entity_set_edict(iIndex, iKey, iNewIndex);
native entity_get_string(iIndex, iKey, szReturn[], iRetLen);
native entity_set_string(iIndex, iKey, const szNewVal[]);
2004-02-15 02:29:51 +00:00
native entity_get_byte(iIndex, iKey);
native entity_set_byte(iIndex, iKey, iVal);
/* Creates an entity, will return the index of the created entity. ClassName must be valid. */
native create_entity(szClassname[]);
/* Finds an entity in the world, will return 0 if nothing is found */
native find_ent_by_class(iIndex, szClass[]);
2004-03-24 05:01:33 +00:00
//optionally you can set a jghg2 type
// 1: target, 2:targetname, 0:classname (default)
native find_ent_by_owner(iIndex, szClass[], iOwner, iJghgType=0);
2004-02-15 02:29:51 +00:00
native find_ent_by_target(iIndex, szClass[]);
native find_ent_by_tname(iIndex, szClass[]);
native find_ent_by_model(iIndex, szClass[], szModel[]);
2004-03-24 05:01:33 +00:00
native find_ent_in_sphere(start_from_ent, Float:origin[3], Float:radius);
2004-02-15 02:29:51 +00:00
2004-03-04 08:27:51 +00:00
//this will CBaseEntity::Think() or something from the entity
native call_think(entity)
/* Mirrors CBaseEntity->TakeDamage() - Forces an entity to take damage.
Potential for crash. If you have problems with this, I suggest using fakedamage(). */
2004-08-23 12:35:21 +00:00
native take_damage(idVictim,idInflictor,idAttacker,Float:takedmgdamage,damagetype);
2004-02-15 02:29:51 +00:00
/* Is entity valid? */
native is_valid_ent(iIndex);
/* Proper origin setting, keeps updated with Half-Life engine. */
native entity_set_origin(iIndex, Float:fNewOrigin[3]);
/* Sets the model of an Entity. */
native entity_set_model(iIndex, const szModel[]);
2004-02-15 02:29:51 +00:00
/* Remove an entity from the world. */
native remove_entity(iIndex);
/* Return current number of entities in the map */
native entity_count();
/* Simulate two entities colliding/touching. */
native fake_touch(iToucher, iTouched);
2004-06-25 22:50:43 +00:00
/* 2 formats.
Format: DispatchKeyValue("KeyName","Value") - sets keyvalues for the entity specified in the keyvalue() forward.
Format: DispatchKeyValue(index,"KeyName","Value") - Sets keyvalue for entity not specified in keyvalue() forward. */
native DispatchKeyValue(...);
native get_keyvalue(entity, szKey[], value[], maxLength);
native copy_keyvalue(szClassName[],sizea,szKeyName[],sizeb,szValue[],sizec);
2004-02-15 02:29:51 +00:00
/* Runs the GameDLL's DispatchSpawn for an entity, I think it's used with DispatchKeyValue. */
native DispatchSpawn(iIndex);
/* Hurts/Kills players in a sphere, like an explosion, Multiplier determines damage. */
2004-08-23 12:35:21 +00:00
native radius_damage(Float:fExplodeAt[3], iDamageMultiplier, iRadiusMultiplier);
2004-02-15 02:29:51 +00:00
/* Gives you a velocity in the direction a player is looking, iVelocity is the multiplier. */
2004-08-23 12:35:21 +00:00
native velocity_by_aim(iIndex, iVelocity, Float:vRetValue[3]);
2004-02-15 02:29:51 +00:00
/* Will return the contents of a point (inside map? in sky? outside map? etc.). */
2004-08-23 12:35:21 +00:00
native point_contents(Float:fCheckAt[3]);
2004-02-15 02:29:51 +00:00
/* Trace a line from Start(X, Y, Z) to End(X, Y, Z), will return the point hit in vReturn[3]
* and an entity index if an entity is hit. */
native trace_line(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]);
/* Traces a hull. */
native trace_hull(Float:origin[3],hull,ignoredent=0,ignoremonsters=0);
2004-02-15 02:29:51 +00:00
/* Traces a line, and returns the normal to the plane hit in vReturn.
* Returns 0 if theres no normal. */
native trace_normal(iIgnoreEnt, Float:fStart[3], Float:fEnd[3], Float:vReturn[3]);
/* Changes a Vector to an Angle vector. */
native vector_to_angle(Float:fVector[3], Float:vReturn[3]);
native angle_vector(Float:vector[3],FRU,Float:ret[3])
2004-02-15 02:29:51 +00:00
/* Gets the length of a vector (float[3]). */
native Float:vector_length(Float:vVector[3]);
/* Gets the distance between 2 vectors (float[3]). */
native Float:vector_distance(Float:vVector[3], Float:vVector2[3]);
/* Gets the ID of a grenade. */
native get_grenade_id(id, model[], len, grenadeid = 0);
/* Gets gpGlobals->time from Half-Life */
native Float:halflife_time();
/* Sets map lighting, #OFF to disable. */
native set_lights(const Lighting[]);
2004-07-30 14:17:28 +00:00
/* Sets/Gets what engine messages are blocked. */
2004-02-15 02:29:51 +00:00
native set_msg_block(iMessage, iMessageFlags);
native get_msg_block(iMessage);
/* Sets Player's View to entity iTargetIndex. */
native attach_view(iIndex, iTargetIndex);
/* Sets Player's View Mode. */
native set_view(iIndex, ViewType);
/* Direct copy of PLAYBACK_EVENT_FULL from Metamod/HLSDK. If you don't know how that works, you probably shouldn't be using it. */
native playback_event(flags,invoker,eventindex,Float:delay,Float:origin[3],Float:angles[3],Float:fparam1,Float:fparam2,iparam1,iparam2,bparam1,bparam2);
/* Gets parameters sent from CmdStart.
Note that you will receive modified values if any other plugin have
changed them. */
2004-09-07 09:26:20 +00:00
native get_usercmd(type,{Float,Sql,Result,_}:...);
/* Sets the parameters sent from CmdStart.
Note that your changes will be seen by any other plugin doing get_usercmd() */
2004-09-07 09:26:20 +00:00
native set_usercmd(type,{Float,Sql,Result,_}:...);
/* Converts a string offset into a real string. Some of the forwards in fakemeta
uses string offsets. (FM_CreateNamedEntity) */
2005-08-01 05:14:55 +00:00
native eng_get_string(_string, _returnString[], _len);
/* FORWARDS
**********/
2004-02-15 02:29:51 +00:00
/* Called when 2 entities touch. */
forward pfn_touch(ptr, ptd);
/* Called once every server frame. May cause lag. */
forward server_frame();
/* Called when a client types kill in console. */
forward client_kill(id);
/* Forward for PreThink()/PostThink() on a player. */
forward client_PreThink(id);
2004-03-04 20:25:27 +00:00
forward client_PostThink(id);
2004-04-16 04:57:38 +00:00
/* Forward for impulses. */
forward client_impulse(id, impulse);
/* Called when an entity "thinks" (DispatchThink) */
forward pfn_think(entid);
/* Called when an event is played */
2004-09-28 07:29:48 +00:00
forward pfn_playbackevent(flags, entid, eventid, Float:delay, Float:Origin[3], Float:Angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2, bparam2);
/* Called when an entity gets a keyvalue set on it from the engine (ie: map load) Use copy_keyvalue to get the keyvalue information */
forward pfn_keyvalue(entid);
/* Called when an entity is spawned */
forward pfn_spawn(entid);
2004-03-24 05:01:33 +00:00
//from jghg2
/* As above, but returns number of ents stored in entlist. Use to find a specific type of entity classname (specify in _lookforclassname) around a
2004-03-24 05:01:33 +00:00
* certain entity specified in aroundent. All matching ents are stored in entlist. Specify max amount of entities to find in maxents.
* If aroundent is 0 its origin is not used, but origin in 6th parameter. Ie, do not specify 6th parameter (origin) if you specified an entity
* in aroundent.
*/
native find_sphere_class(aroundent, _lookforclassname[], Float:radius, entlist[], maxents, Float:origin[3] = {0.0, 0.0, 0.0});
2005-07-15 20:29:59 +00:00
//SDK function - checks if an origin is in an entity's view cone
native is_in_viewcone(entity, Float:origin[3]);
2005-08-01 18:56:03 +00:00
//SDK function - checks if an entity is visible to an entity
native is_visible(entity, target);
2005-07-15 20:29:59 +00:00
2005-07-29 19:37:07 +00:00
//Added at twistedeuphoria's request, see funcwiki for details
native trace_forward(Float:start[3], Float:angle, Float:give, ignoreEnt, &Float:hitX, &Float:hitY, &Float:shortestDistance, &Float:shortestDistLow, &Float:shortestDistHigh);
#include <engine_stocks>