GetPedHitBone: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 66: | Line 66: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</section> | </section> | ||
'''Author:''' Rick | |||
Latest revision as of 23:30, 7 May 2022
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, hitBone
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, hitBone
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)
Author: Rick