[INFO] Fakemeta & Ham detailed function descriptions and examples
- Archive-Poster
- Posts: 1067
- Gender:

[INFO] Fakemeta & Ham detailed function descriptions and examples
Point Functions
EngFunc_PointContents
EngFunc_GetBonePosition
Messaging Functions
EngFunc_MessageBegin
Entity Search Functions
EngFunc_FindEntityInSphere
EngFunc_EntitiesInPVS
EngFunc_FindEntityByString
EngFunc_FindClientInPVS
Trace Functions
EngFunc_TraceLine
EngFunc_TraceTexture, DLLFunc_PM_FindTextureType
EngFunc_TraceModel
EngFunc_TraceToss
Model/Decal/Texture Functions
EngFunc_SetModel
EngFunc_ModelIndex
EngFunc_ModelFrames
EngFunc_DecalIndex
EngFunc_AnimationAutomove
Entity/Global Functions
EngFunc_NumberOfEntities
EngFunc_SetSize
EngFunc_SetOrigin
EngFunc_MoveToOrigin
Visibility Functions
EngFunc_CheckVisibility
Other Functions
EngFunc_PrecacheModel
EngFunc_PrecacheSound
EngFunc_AlertMessage
HamSandWich Functions
Ham_TraceAttack
Ham_TakeDamage
- Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_PointContents This function checks an origin and gives us information of its whearabouts.
The constants that this function returns are these:
Code: Select all
#define CONTENTS_EMPTY -1
#define CONTENTS_SOLID -2
#define CONTENTS_WATER -3
#define CONTENTS_SLIME -4
#define CONTENTS_LAVA -5
#define CONTENTS_SKY -6
#define CONTENTS_ORIGIN -7 // Removed at csg time
#define CONTENTS_CLIP -8 // Changed to contents_solid
#define CONTENTS_CURRENT_0 -9
#define CONTENTS_CURRENT_90 -10
#define CONTENTS_CURRENT_180 -11
#define CONTENTS_CURRENT_270 -12
#define CONTENTS_CURRENT_UP -13
#define CONTENTS_CURRENT_DOWN -14
#define CONTENTS_TRANSLUCENT -15
#define CONTENTS_LADDER -16
#define CONTENT_FLYFIELD -17
#define CONTENT_GRAVITY_FLYFIELD -18
#define CONTENT_FOG -19Code: Select all
static Float:origin[3]
static result
result = engfunc(EngFunc_PointContents, origin)
// if for example result is CONTENTS_SKY
// then the origin that we see is in the sky we can for example use this to see where a player is aming if he is aiming at sky this will be the result! - Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_GetBonePositionDescription:
The function allows to get the bone positions of an entity. This is best used on getting specific player origin points.
These are the bones that a player has.
Usage:Bone 1 Name: "Bip01"
Bone 2 Name: "Bip01 Pelvis"
Bone 3 Name: "Bip01 Spine"
Bone 4 Name: "Bip01 Spine1"
Bone 5 Name: "Bip01 Spine2"
Bone 6 Name: "Bip01 Spine3"
Bone 7 Name: "Bip01 Neck"
Bone 8 Name: "Bip01 Head"
Bone 9 Name: "Bone01"
Bone 10 Name: "Bip01 L Clavicle"
Bone 11 Name: "Bip01 L UpperArm"
Bone 12 Name: "Bip01 L Forearm"
Bone 13 Name: "Bip01 L Hand"
Bone 14 Name: "Bip01 L Finger0"
Bone 15 Name: "Bip01 L Finger01"
Bone 16 Name: "Bip01 L Finger1"
Bone 17 Name: "Bip01 L Finger11"
Bone 18 Name: "-- L knuckle"
Bone 19 Name: "-- L Forearm twist"
Bone 20 Name: "-- L wrist"
Bone 21 Name: "-- L Elbow"
Bone 22 Name: "-- L bicep twist"
Bone 23 Name: "-- L shoulder outside"
Bone 24 Name: "-- L Shoulder inside"
Bone 25 Name: "Bip01 R Clavicle"
Bone 26 Name: "Bip01 R UpperArm"
Bone 27 Name: "Bip01 R Forearm"
Bone 28 Name: "Bip01 R Hand"
Bone 29 Name: "Bip01 R Finger0"
Bone 30 Name: "Bip01 R Finger01"
Bone 31 Name: "Bip01 R Finger1"
Bone 32 Name: "Bip01 R Finger11"
Bone 33 Name: "-- R knuckle"
Bone 34 Name: "-- R wrist"
Bone 35 Name: "-- R forearm twist"
Bone 36 Name: "-- R Elbow"
Bone 37 Name: "-- R bicep twist"
Bone 38 Name: "-- R Shoulder inside"
Bone 39 Name: "-- R shoulder outside"
Bone 40 Name: "-- Neck smooth"
Bone 41 Name: "-- R Butt"
Bone 42 Name: "-- L butt"
Bone 43 Name: "Bip01 L Thigh"
Bone 44 Name: "Bip01 L Calf"
Bone 45 Name: "Bip01 L Foot"
Bone 46 Name: "Bip01 L Toe0"
Bone 47 Name: "-- L ankle"
Bone 48 Name: "-- L Knee"
Bone 49 Name: "Bip01 R Thigh"
Bone 50 Name: "Bip01 R Calf"
Bone 51 Name: "Bip01 R Foot"
Bone 52 Name: "Bip01 R Toe0"
Bone 53 Name: "-- R Ankle"
Bone 54 Name: "-- R Knee"
Bone 55 Name: "Bomb"
Code: Select all
// ENTITY is the player entity id
// BONE_NUMBER you have to choose from the list above
// bone_origin[3] is the vector where we save the bone origin
// bone_angles[3] the vector that holds the angles of the bone.
engfunc(EngFunc_GetBonePosition, ENTITY, BONE_NUMBER, Float:bone_origin[3], Float:bone_angles[3]) These stocks are made for CS/CZ you need to port them to other mods.
Code: Select all
This gets the hitgroup of the bone.
#define BONE_HIT_HEAD 8
#define BONE_HIT_CHEST 6
#define BONE_HIT_STOMACH 4
#define BONE_HIT_LEFTARM 24
#define BONE_HIT_RIGHTARM 39
#define BONE_HIT_LEFTLEG 48
#define BONE_HIT_RIGHTLEG 54
#define HEAD_NECK 40
#define BONE_L_BUTT 41
#define BONE_R_BUTT 42
stock get_bone_hitgroup(number)
{
switch (number)
{
case HEAD_NECK:
{
return HIT_HEAD
}
case BONE_L_BUTT:
{
return HIT_LEFTLEG
}
case BONE_R_BUTT:
{
return HIT_RIGHTLEG
}
}
if (1 <= number <= BONE_HIT_STOMACH)
return HIT_STOMACH
if (BONE_HIT_STOMACH < number <= BONE_HIT_CHEST)
return HIT_CHEST
if (BONE_HIT_CHEST < number <= BONE_HIT_HEAD)
return HIT_HEAD
if (BONE_HIT_HEAD < number <= BONE_HIT_LEFTARM)
return HIT_LEFTARM
if (BONE_HIT_LEFTARM < number <= BONE_HIT_RIGHTARM)
return HIT_RIGHTARM
if (BONE_HIT_RIGHTARM < number <= BONE_HIT_LEFTLEG)
return HIT_LEFTLEG
if (BONE_HIT_LEFTLEG < number <= BONE_HIT_RIGHTLEG)
return HIT_RIGHTLEG
return HIT_GENERIC
} Code: Select all
#define DISTANCE_CLEAR_HIT 2.0
stock find_closest_bone_to_gunshot(victim, Float:endtrace[3])
{
new Float:angles[3], Float:origin[3], Float:dist = 9999999.99, Float:curorigin[3], bone_nr
for (new i=1;i<=54;i++)
{
// Get the bone position
engfunc(EngFunc_GetBonePosition, victim, i, curorigin, angles)
// Calculate the distance vector
xs_vec_sub(curorigin, endtrace, angles)
// If this is smaller than the last small distance remember the value!
if (xs_vec_len(angles) <= dist)
{
origin = curorigin
dist = xs_vec_len(angles)
bone_nr = i
}
// If distance is smaller than CLEARHIT! Break (We accept the last value!)
if (dist <= DISTANCE_CLEAR_HIT)
{
break
}
}
// Return the bone
return bone_nr
} - Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_MessageBeginThis function is used to generate client messages.
Usage:
engfunc(EngFunc_MessageBegin,dest,msg_type,or igin[3]={0,0,0},player=0)
Code: Select all
static Float:origin[3] // Origin should be a Float
pev(id, pev_origin, origin) // Get user origin
engfunc(EngFunc_MessageBegin,MSG_BROADCAST,SVC_TEMPENTITY,origin,0) // Create message Code: Select all
//With MSG_ONE_UNRELIABLE
engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,SVC_TEMPENTITY,_,id) // Create messageCode: Select all
//With MSG_ALL
engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,SVC_TEMPENTITY,_,id) // Create messagedest can be :
Code: Select all
#define MSG_BROADCAST 0 // Unreliable to all, There is not id
#define MSG_ONE 1 // Reliable to one (msg_entity)
#define MSG_ALL 2 // Reliable to all, There is not origin
#define MSG_INIT 3 // Write to the init string
#define MSG_PVS 4 // Ents in PVS of org
#define MSG_PAS 5 // Ents in PAS of org
#define MSG_PVS_R 6 // Reliable to PVS
#define MSG_PAS_R 7 // Reliable to PAS
#define MSG_ONE_UNRELIABLE 8 // Send to one client, but don't put in reliable stream, put in unreliable datagram (could be dropped), There is not origin
#define MSG_SPEC 9 // Sends to all spectator proxies- Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_FindEntityInSphere Find entities within a radius. The function returnes the next entity id after the start entity!
If we use
Code: Select all
engfunc(EngFunc_FindEntityInSphere, -1, origin, radius) Code: Select all
engfunc(EngFunc_FindEntityInSphere, 20, origin, radius) Code: Select all
engfunc(EngFunc_FindEntityInSphere, 100, origin, radius)The function in the situation above will return 0, meaning that it didn't find an entity with an id grater than 100!
Usage:
Code: Select all
engfunc(EngFunc_FindEntityInSphere, ent_to_start, origin, radius)- Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_EntitiesInPVS This function checks entities that are in the PVS of an entity.
It can be used on all entities except worldspawn!
What is PVS?
PVS means potentially visible set, this means that the entities that we have in this list can be seen.
PVS does not hold just the entities that we see!
By knowing this we can get to the conclusion that PVS has the role of limiting data transfer for better internet connection/lower amount of data transfer!
So in small words I want to say something like this:
How does it work?Entity that is in PVS => Can be seen => Data Transfer about that entity
Entity that it is not in PVS => Can not be seen => No data transfer => Save bandwidth
Well let's say that every room of the map is a cube.
We find ourselves in a room and that also means that we are in the cube of that room.
We can see the entities in the next rooms because the cubes of that room touch with the cube of the room we are in.
How do I use this function?
Well this function doesn't work like EngFunc_FindEntityInSphere so the HL engine has another method of providing the information.
At first this function returns a start entity and after that we can find the next entity using pev_chain/EV_ENT_chain. And so on, untill pev_chain is NULL.
Example Usage:
Code: Select all
public whatisonPVS(id)
{
static next, chain
static class[32]
next = engfunc(EngFunc_EntitiesInPVS, id)
while(next)
{
pev(next, pev_classname, class, charsmax(class))
chain = pev(next, pev_chain)
server_print("Found entity in player (%i) PVS: ent(%i) class(%s)", id, next, class)
if(!chain)
break
next = chain
}
} - Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_FindEntityByStringReturns the first entity found that matches the search criteria.
You can use any of string type attributes of entities:
Code: Select all
classname Type of entity
globalname This is the name of the global variable that can be used to control the state of the entity
model The model of the entity
target Entity that this entity is handling
targetname The name given to this entity that another entity searches for to handle it
netname Player or NPC name
message Seems to be used mainly to store sound (string). It happens to store others things, depending the need of the entity
noise Noise variables do different things for different ents.
noise1 This is the move sound for doors.
noise2 This is the stop sound for doors.
noise3 This is for blocking game_player_equip and player_weaponstripCode: Select all
iEnt = engfunc( EngFunc_FindEntityByString, iStartEnt, sAttribute, sText );iStartEnt = Start search on this entity (ex: 0 = worldspawn)
sAttribute = Name of attribute over which we need to search (ex: classname)
sText = Text string that we are searching for (ex: func_breakable)
Return
iEnt = Index of the first entity that matches the search
- Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_FindClientInPVSReturn the next "player" entity in someone PVS using a global loop.
Usage :
Code: Select all
iEnt2 = engfunc(EngFunc_FindClientInPVS, iEnt);iEnt = Source entity. Seek someone within of iEnt PVS
Unlike EngFunc_EntitiesInPVS, it does not return a series of chained entities.
It works like a global loop of entities.
No matter which source entity you use, this function maintains the last index used and returns the next entity in source entity PVS.
This function must be called severals times to find every entity in PVS and also can return the source entity but it can't be called twice inside the same function because it will return the same entity.
Notes :
It seems you can call this function once between some forward (maybe UpdateClientData, Think, AddToFullPack or some other).
It's not clear the main purpose of this function because you can get similar results with FindEntitiesInPVS.
CheckVisibility and FindEntitiesInPVS are better functions to use.
- Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_TraceLineDescription:
This function traces between 2 origins and gives us information about it.
The constants that we can use in flags:
Code: Select all
#define DONT_IGNORE_MONSTERS 0
#define IGNORE_MONSTERS 1
#define IGNORE_MISSILE 2
#define IGNORE_GLASS 0x100 Ex: IGNORE_MISSILE | IGNORE_MONSTERS | IGNORE_GLASS - This makes the traceline ignore missiles, monsters (players) and glass.
Code: Select all
engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, 0, tr) Code: Select all
engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, 0, tr) Code: Select all
// Description: This creates a trace handle!
// It is important to use because we don't want our plugins to mess with eachothers info!
new ptr = create_tr2() Code: Select all
// Description: This creates a trace handle!
// It is important to use because we don't want our plugins to mess with each others info!
free_tr2(ptr) Code: Select all
// Description: Gets/Sets information from/in the trace_handle
[g|s]et_tr2(trace_handle, CONSTANT, number_if_needed!) Code: Select all
enum TraceResult
{
TR_AllSolid, // int
TR_StartSolid, // int
TR_InOpen, // int
TR_InWater, // int
TR_flFraction, // float
TR_vecEndPos, // float array[3]
TR_flPlaneDist, // float
TR_vecPlaneNormal, // float array[3]
TR_pHit, // int (edict_t*)
TR_iHitgroup, // int
};Code: Select all
new allsolid = get_tr2(trace, TR_AllSolid)
new startsolid = get_tr2(trace, TR_StartSolid)
// TR_StartSolid is a boolean that says whether you were "inside" something
// (usually the world) when the trace started (point A)
// TR_AllSolid tells you if you ever got out of the "inside" or not.
new inopen = get_tr2(trace, TR_InOpen)
// TR_InOpen means that the start point is in Open
// That means in the world and not in an ent or something
new hit = get_tr2(trace, TR_pHit)
// What was hit by the traceline. It will either be a player index,
// entity index, 0 (part of map), or -1 (didn't hit anything;
// doesn't happen with player tracelines).
new hitgroup = get_tr2(trace, TR_iHitgroup)
// If the traceline hit another player, returns will be HIT_HEAD,
// HIT_CHEST, HIT_LEFTLEG... etc. If the traceline hit part of the
// map, this returns HIT_GENERIC.
new Float:fraction
get_tr2(trace, TR_flFraction, fraction)
// Returns a number between 0.0 and 1.0, indicating how far the
// traceline traveled start to end before it hit something. Depending
// on what conditions were passed to this traceline forward function,
// it could either be a wall or another entity.
new Float:end_origin[3]
get_tr2(trace, TR_vecEndPos, end_origin)
// The official end of the traceline. Not necesarily the same as the
// second argument passed to this traceline forward function.
new Float:normal[3]
get_tr2(trace, TR_vecPlaneNormal, normal)
// Returns a 1 unit long vector normal to the spot that it hit. Note
// that "normal" has a special connotation here. It doesn't mean "regular." Code: Select all
stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
{
// Create the trace handle! It is best to create it!
new ptr = create_tr2()
// The main traceline function!
// This function ignores GLASS, MISSILE and MONSTERS!
// Here is an example of how you should combine all the flags!
engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS | IGNORE_MONSTERS | IGNORE_MISSILE, ignore_ent, ptr)
// We are interested in the fraction parameter
new fraction
get_tr2(ptr, TR_flFraction, fraction)
// Free the trace handle (don't forget to do this!)
free_tr2(ptr)
// If = 1.0 then it didn't hit anything!
return (fraction != 1.0)
} - Archive-Poster
- Posts: 1067
- Gender:

Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Code: Select all
EngFunc_TraceTexture, DLLFunc_PM_FindTextureTypeDescription:
The TraceTexture function detects the texture of an entity from a direction
The FindTextureType function allows to get the type of the material of the texture.
Parameters:
engfunc(EngFunc_TraceTexture, ent, Float:start[3], Float:end[3], texture_name, len)
- ent is the entity that we want to get the texture
- start is the point from where the trace starts
- end is the point where the trace ends
- texture_name - here we save the texture name
- len - the texture_name string length
@Return
Nothing!
dllfunc(DLLFunc_PM_FindTextureType, texture_name)
- texture_name is the name of the texture that we have gotten with TraceTexture
@Return
It returns the material of the texture.
Constants:
The first function does not have any constants but if the name of the texture begins with '{' the texture is semi-transparent!
The letter constants are returned by the second function. "DLLFunc_PM_FindTextureType"
Code: Select all
/*
C : concrete
D : dirt
G : grate
M : metal
N : snow
P : computer
S : slosh
T : tile
V : ventilation
W : wood
Y : glass
*/
new const material_array[] =
{
'C', 'D', 'G', 'M', 'N', 'P', 'S', 'T', 'V', 'W', 'Y'
} Code: Select all
new texture_name[64], texture_type
engfunc(EngFunc_TraceTexture, 0, start, end, texture_name, charsmax(texture_name))
texture_type = dllfunc(DLLFunc_PM_FindTextureType, texture_name) - Improper use of these functions may crash the server!!!
- To avoid crashing the server use the TraceTexture:
-on any entities (even worldspawn) except players
-use this function only when there is at least one player connected
-the distance between the two points must be big! [> 2000.0]
Who is online
Users browsing this forum: No registered users and 0 guests