GetPedHitBone
Jump to navigation
Jump to search
This function gets the approximate number of the bone where the ped is hit
Syntax
int getPedHitBone( ped thePed, float hitX, float hitY, float hitZ )
Required Arguments
- thePed: the ped whose bone you want to get.
- hitX, hitY, hitZ: float world coordinates representing a hit point.
Returns
An int with the approximate bone where the ped take damage, does not work properly serverside
Code
Click to collapse [-]
Function sourcefunction getPedHitBone(thePed, hitX, hitY, hitZ)
assert(isElement(thePed) and (getElementType(thePed) == "ped" or getElementType(thePed) == "player"), "Bad argument @ 'getPedHitBone' [Expected ped/player at argument 1, got " .. tostring(thePed) .. "]")
assert(tonumber(hitX), "Bad argument @ 'getPedHitBone' [Expected vector3 at argument 2, got " .. tostring(hitX) .. "]")
assert(tonumber(hitY), "Bad argument @ 'getPedHitBone' [Expected vector3 at argument 3, got " .. tostring(hitY) .. "]")
assert(tonumber(hitZ), "Bad argument @ 'getPedHitBone' [Expected vector3 at argument 4, got " .. tostring(hitZ) .. "]")
local nowDistance
local boneIDs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 51, 52, 53, 54}
for _,bone in pairs(boneIDs) do
local boneX, boneY, boneZ = getPedBonePosition(thePed, bone)
local distance = getDistanceBetweenPoints3D(hitX, hitY, hitZ, boneX, boneY, boneZ)
if nowDistance and (distance < nowDistance) then
nowDistance, hitBone = distance, bone
elseif not nowDistance then
nowDistance, hitBone = distance, bone
end
end
return hitBone
end
Example
Click to collapse [-]
Clientfunction getPedHitBone(thePed, hitX, hitY, hitZ)
assert(isElement(thePed) and (getElementType(thePed) == "ped" or getElementType(thePed) == "player"), "Bad argument @ 'getPedHitBone' [Expected ped/player at argument 1, got " .. tostring(thePed) .. "]")
assert(tonumber(hitX), "Bad argument @ 'getPedHitBone' [Expected vector3 at argument 2, got " .. tostring(hitX) .. "]")
assert(tonumber(hitY), "Bad argument @ 'getPedHitBone' [Expected vector3 at argument 3, got " .. tostring(hitY) .. "]")
assert(tonumber(hitZ), "Bad argument @ 'getPedHitBone' [Expected vector3 at argument 4, got " .. tostring(hitZ) .. "]")
local nowDistance
local boneIDs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 51, 52, 53, 54}
for _,bone in pairs(boneIDs) do
local boneX, boneY, boneZ = getPedBonePosition(thePed, bone)
local distance = getDistanceBetweenPoints3D(hitX, hitY, hitZ, boneX, boneY, boneZ)
if nowDistance and (distance < nowDistance) then
nowDistance, hitBone = distance, bone
elseif not nowDistance then
nowDistance, hitBone = distance, bone
end
end
return hitBone
end
addEventHandler( "onClientPlayerWeaponFire", root, function(weapon, ammo, ammoInClip, hitX, hitY, hitZ, hitElement, startX, startY, startZ)
if isElement(hitElement) then
outputChatBox("You hit bone "..getPedHitBone(hitElement, hitX, hitY, hitZ) )
end
end)