View Single Post
ot_207
Veteran Member
Join Date: Jan 2008
Location: Romania The Love Country
Old 10-16-2009 , 08:24   Re: [INFO] Fakemeta & Ham detailed function descriptions and examples
Reply With Quote #103

Fakemeta function:
PHP Code:
EngFunc_GetBonePosition 
Description:
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.

Code:
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"
This image shows the locations of the bones, they are marked through blue points. The red point is the player origin.

[IMG]http://img507.**************/img507/7762/playerskeleton.jpg[/IMG]


Usage:
PHP Code:
// 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_GetBonePositionENTITYBONE_NUMBERFloat:bone_origin[3], Float:bone_angles[3]) 
Useful Stocks:
These stocks are made for CS/CZ you need to port them to other mods.

This gets the hitgroup of the bone.
PHP Code:
#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 (
<= 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

This gets the closest bone to the gunshot [Use this in FM_TraceLine and Ham_TraceAttack
PHP Code:
#define DISTANCE_CLEAR_HIT        2.0

stock find_closest_bone_to_gunshot(victimFloat:endtrace[3])
{
    new 
Float:angles[3], Float:origin[3], Float:dist 9999999.99Float:curorigin[3], bone_nr
    
for (new i=1;i<=54;i++)
    {
        
// Get the bone position
        
engfunc(EngFunc_GetBonePositionvictimicuroriginangles)
        
// Calculate the distance vector
        
xs_vec_sub(curoriginendtraceangles)
        
        
// 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

__________________
My approved plug-ins | Good for newbies! | Problems?

Back, will come around when I have time.
ot_207 is offline