Advertisement
Guest User

bone_attach_c

a guest
Aug 2nd, 2015
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.54 KB | None | 0 0
  1. function sendReadyMessage()
  2.     triggerServerEvent("boneAttach_requestAttachmentData",root)
  3. end
  4. addEventHandler("onClientResourceStart",resourceRoot,sendReadyMessage)
  5.  
  6. function getAttachmentData(ped,bone,x,y,z,rx,ry,rz)
  7.     for element,att_ped in pairs(ped) do
  8.         setElementCollisionsEnabled(element,false)
  9.         attached_ped[element] = att_ped
  10.         attached_bone[element] = bone[element]
  11.         attached_x[element] = x[element]
  12.         attached_y[element] = y[element]
  13.         attached_z[element] = z[element]
  14.         attached_rx[element] = rx[element]
  15.         attached_ry[element] = ry[element]
  16.         attached_rz[element] = rz[element]
  17.     end
  18. end
  19. addEvent("boneAttach_sendAttachmentData",true)
  20. addEventHandler("boneAttach_sendAttachmentData",root,getAttachmentData)
  21.  
  22. function initAttach()
  23.     addEvent("boneAttach_attach",true)
  24.     addEvent("boneAttach_detach",true)
  25.     addEventHandler("boneAttach_attach",root,attachElementToBone)
  26.     addEventHandler("boneAttach_detach",root,detachElementFromBone)
  27. end
  28. addEventHandler("onClientResourceStart",resourceRoot,initAttach)
  29.  
  30. bone_0,bone_t,bone_f = {},{},{}
  31. bone_0[1],bone_t[1],bone_f[1] = 5,nil,6 --head
  32. bone_0[2],bone_t[2],bone_f[2] = 4,5,8 --neck
  33. bone_0[3],bone_t[3],bone_f[3] = 3,nil,32 --spine
  34. bone_0[4],bone_t[4],bone_f[4] = 1,2,3 --pelvis
  35. bone_0[5],bone_t[5],bone_f[5] = 4,32,5 --left clavicle
  36. bone_0[6],bone_t[6],bone_f[6] = 4,22,5 --right clavicle
  37. bone_0[7],bone_t[7],bone_f[7] = 32,33,34 --left shoulder
  38. bone_0[8],bone_t[8],bone_f[8] = 22,23,24 --right shoulder
  39. bone_0[9],bone_t[9],bone_f[9] = 33,34,32 --left elbow
  40. bone_0[10],bone_t[10],bone_f[10] = 23,24,22 --right elbow
  41. bone_0[11],bone_t[11],bone_f[11] = 34,35,36 --left hand
  42. bone_0[12],bone_t[12],bone_f[12] = 24,25,26 --right hand
  43. bone_0[13],bone_t[13],bone_f[13] = 41,42,43 --left hip
  44. bone_0[14],bone_t[14],bone_f[14] = 51,52,53 --right hip
  45. bone_0[15],bone_t[15],bone_f[15] = 42,43,44 --left knee
  46. bone_0[16],bone_t[16],bone_f[16] = 52,53,54 --right knee
  47. bone_0[17],bone_t[17],bone_f[17] = 43,42,44 --left ankle
  48. bone_0[18],bone_t[18],bone_f[18] = 53,52,54 --right angle
  49. bone_0[19],bone_t[19],bone_f[19] = 44,43,42 --left foot
  50. bone_0[20],bone_t[20],bone_f[20] = 54,53,52 --right foot
  51.  
  52. function putAttachedElementsOnBones()
  53.     for element,ped in pairs(attached_ped) do
  54.         if not isElement(element) then
  55.             clearAttachmentData(element)
  56.         elseif isElementStreamedIn(ped) then
  57.             local bone = attached_bone[element]
  58.             local x,y,z = getPedBonePosition(ped,bone_0[bone])
  59.             local xx,xy,xz,yx,yy,yz,zx,zy,zz = getBoneMatrix(ped,bone)
  60.             local offx,offy,offz = attached_x[element],attached_y[element],attached_z[element]
  61.             local offrx,offry,offrz = attached_rx[element],attached_ry[element],attached_rz[element]
  62.             local objx = x+offx*xx+offy*yx+offz*zx
  63.             local objy = y+offx*xy+offy*yy+offz*zy
  64.             local objz = z+offx*xz+offy*yz+offz*zz
  65.             local rxx,rxy,rxz,ryx,ryy,ryz,rzx,rzy,rzz = getMatrixFromEulerAngles(offrx,offry,offrz)
  66.            
  67.             local txx = rxx*xx+rxy*yx+rxz*zx
  68.             local txy = rxx*xy+rxy*yy+rxz*zy
  69.             local txz = rxx*xz+rxy*yz+rxz*zz
  70.             local tyx = ryx*xx+ryy*yx+ryz*zx
  71.             local tyy = ryx*xy+ryy*yy+ryz*zy
  72.             local tyz = ryx*xz+ryy*yz+ryz*zz
  73.             local tzx = rzx*xx+rzy*yx+rzz*zx
  74.             local tzy = rzx*xy+rzy*yy+rzz*zy
  75.             local tzz = rzx*xz+rzy*yz+rzz*zz
  76.             offrx,offry,offrz = getEulerAnglesFromMatrix(txx,txy,txz,tyx,tyy,tyz,tzx,tzy,tzz)
  77.            
  78.             setElementPosition(element,objx,objy,objz)
  79.             setElementRotation(element,offrx,offry,offrz,"ZXY")
  80.         else
  81.             setElementPosition(element,getElementPosition(ped))
  82.         end
  83.     end
  84. end
  85. addEventHandler("onClientPreRender",root,putAttachedElementsOnBones)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement