GetPedBonePosition: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 51: Line 51:
This example renders name tags above a player's head bone.
This example renders name tags above a player's head bone.
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
addEventHandler("onClientRender",getRootElement(),
addEventHandler( "onClientRender",root,
   function()
   function( )
       local px, py, pz, tx, ty, tz, dist
       local px, py, pz, tx, ty, tz, dist
       px, py, pz = getCameraMatrix()
       px, py, pz = getCameraMatrix( )
       for k, v in ipairs(getElementsByType("player")) do
       for _, v in ipairs( getElementsByType 'player' ) do
         tx, ty, tz = getElementPosition(v)
         tx, ty, tz = getElementPosition( v )
         dist = math.sqrt((px - tx) ^ 2 + (py - ty) ^ 2 + (pz - tz) ^ 2)
         dist = math.sqrt( ( px - tx ) ^ 2 + ( py - ty ) ^ 2 + ( pz - tz ) ^ 2 )
         if dist < 30.0 then
         if dist < 30.0 then
             if isLineOfSightClear(px, py, pz, tx, ty, tz, true, false, false, true, false, false, getLocalPlayer()) then
             if isLineOfSightClear( px, py, pz, tx, ty, tz, true, false, false, true, false, false, false,localPlayer ) then
               local sx, sy, sz = getPedBonePosition(v, 5)
               local sx, sy, sz = getPedBonePosition( v, 5 )
               local x,y = getScreenFromWorldPosition(sx, sy, sz + 0.3)
               local x,y = getScreenFromWorldPosition( sx, sy, sz + 0.3 )
               if x then -- getScreenFromWorldPosition returns false if the point isn't on screen
               if x then -- getScreenFromWorldPosition returns false if the point isn't on screen
                  dxDrawText(getPlayerName(v), x, y, x, y, tocolor(150, 50, 0), 0.85 + (15 - dist) * 0.02, "bankgothic")
                dxDrawText(getPlayerName(v), x, y, x, y, tocolor(150, 50, 0), 0.85 + (15 - dist) * 0.02, "bankgothic")
               end
               end
             end
             end

Revision as of 11:14, 24 February 2012

Returns the 3D world coordinates of a specific bone of a given ped.

Syntax

float float float getPedBonePosition ( ped thePed, int bone )

Required Arguments

  • thePed: the ped you want to inspect.
  • bone: the number of the bone to get the position of.
Bone numbers
  • 1: BONE_PELVIS1
  • 2: BONE_PELVIS
  • 3: BONE_SPINE1
  • 4: BONE_UPPERTORSO
  • 5: BONE_NECK
  • 6: BONE_HEAD2
  • 7: BONE_HEAD1
  • 8: BONE_HEAD
  • 21: BONE_RIGHTUPPERTORSO
  • 22: BONE_RIGHTSHOULDER
  • 23: BONE_RIGHTELBOW
  • 24: BONE_RIGHTWRIST
  • 25: BONE_RIGHTHAND
  • 26: BONE_RIGHTTHUMB
  • 31: BONE_LEFTUPPERTORSO
  • 32: BONE_LEFTSHOULDER
  • 33: BONE_LEFTELBOW
  • 34: BONE_LEFTWRIST
  • 35: BONE_LEFTHAND
  • 36: BONE_LEFTTHUMB
  • 41: BONE_LEFTHIP
  • 42: BONE_LEFTKNEE
  • 43: BONE_LEFTANKLE
  • 44: BONE_LEFTFOOT
  • 51: BONE_RIGHTHIP
  • 52: BONE_RIGHTKNEE
  • 53: BONE_RIGHTANKLE
  • 54: BONE_RIGHTFOOT

Returns

Returns the x, y, z world position of the bone.

Example

This example renders name tags above a player's head bone.

addEventHandler( "onClientRender",root,
   function( )
      local px, py, pz, tx, ty, tz, dist
      px, py, pz = getCameraMatrix( )
      for _, v in ipairs( getElementsByType 'player' ) do
         tx, ty, tz = getElementPosition( v )
         dist = math.sqrt( ( px - tx ) ^ 2 + ( py - ty ) ^ 2 + ( pz - tz ) ^ 2 )
         if dist < 30.0 then
            if isLineOfSightClear( px, py, pz, tx, ty, tz, true, false, false, true, false, false, false,localPlayer ) then
               local sx, sy, sz = getPedBonePosition( v, 5 )
               local x,y = getScreenFromWorldPosition( sx, sy, sz + 0.3 )
               if x then -- getScreenFromWorldPosition returns false if the point isn't on screen
                dxDrawText(getPlayerName(v), x, y, x, y, tocolor(150, 50, 0), 0.85 + (15 - dist) * 0.02, "bankgothic")
               end
            end
         end
      end
   end
)

See Also