Change angle of bones.

Hi,
i have an turret with an x axis and an z axis.
I would like to change the angle of the z angle.

I already tried ent:SetBonePosition() but its not being called…
ragdoll:AddCallback(“BuildBonePositions”, function() print(“called”) end) ~ result non (tried it server and clientside)
ent.BuildBonePositions = function( self, NumBones, NumPhysBones ) ~ Same

What could i do wrong? Are there any other ways of doing it?

Post the full code you tried. You should be using AddCallback with BuildBonePositions clientside

Entity:ManipulateBoneAngles



-- Example
player.GetByID(1):ManipulateBoneAngles( 6, Angle(0,45,0) ) -- Turns the first players head 45 degrees downwards.


code_gs BuildBonePositions got deleted on wiki.garrysmod.com 0_o (yesterday it was there)
Seem´s like it got removed, would explain why it didnt worked anyway.

Thiefdroid Thanks :3 Dont know why i didnt found it >.<

[editline]27th July 2017[/editline]

hm, doesnt work on my model :<
Could someone bring this to work? >.<
Or is it impossible? cry

I used this



concommand.Add( "manipulateang", function( ply, cmd, args )
	local target=ply:GetEyeTrace().Entity
	local bones = target:GetPhysicsObjectCount()
	print("Target:")
	print(target)
	for bone = 1, bones-1 do 
	target:ManipulateBoneAngles( bone, Angle(0,20,-45) )
	print("manipulated "..bone)
	end
end )


It finds 2 bones on my model.

No, it didn’t: https://wiki.garrysmod.com/page/Entity_Callbacks

Post your code, I can’t help without seeing what you tried.



if SERVER then
  util.AddNetworkString("change_bone")
  ent = FindMetaTable("Entity")
  function ent:SetBonePos(bone,vec,ang)
    net.Start("change_bone")
    net.WriteEntity(self)
    net.WriteString(bone)
    if vec and !(vec==Vector(0,0,0)) then net.WriteVector(vec) end
    if ang and !(ang==Angle(0,0,0)) then net.WriteAngle(ang) end
    local filter = RecipientFilter()
    filter:AddAllPlayers()
    net.Send(filter)
  end
end
if CLIENT then
  net.Receive( "change_bone", function(len)
  local ent = net.ReadEntity()
  local bone = ent:LookupBone(net.ReadString())
  local ov,oa = ent:GetBonePosition(bone)
  local vec = net.ReadVector() or ov
  local ang = net.ReadAngle() or oa
  print("overwrite")
  print("bone:"..bone)
  ent.BuildBonePositions = function( self, NumBones, NumPhysBones )
  print("Build Bone")
end

ent:AddCallback("BuildBonePositions",function()
print("Build Bone")
end)
end)
end




concommand.Add( "justatest", function( ply, cmd, args )
	local target=ply:GetEyeTrace().Entity
	target:SetBonePos("z_axis") 
end )


What it prints out:
overwrite
bone:1

That’s not how you should be doing it – don’t set the bone position serverside. Instead, have a specific callback function that adds itself in an OnEntityCreated hook clientside for your specific entity.

[editline]27th July 2017[/editline]

Also, in the future, you don’t have to use a RecipientFilter anymore for networking.

Could you give me a little example please?
I dont really know what you mean.
I thought doing addcallback on client is enough 0_o

Is your turret a custom entity?

No, should I make ohne of it?

I think you should – depends on the application really, but it will make targeting the callback much more specific.

Mh ok, but how can i make an sent ragdoll?
Gonna make the night threw if i figure it out.
So when i got it how can i do the buildbone callback
the right way ? :s:
Does a ent even need to be an ragdoll for manipulating it Bons?

Found some interesting functions :slight_smile:

Working now.
Thx for the help ^^