Garry's Mod Wiki

Revision Difference

Entity:ManipulateBoneAngles#546319

<function name="ManipulateBoneAngles" parent="Entity" type="classfunc"> <description> Sets custom bone angles. ⤶ <note>The repeated use of bone manipulation in multiplayer games is highly discouraged due to the huge produced network traffic.</note>⤶ ⤶ <bug issue="5148">When used repeatedly serverside, this method is strongly discouraged due to the huge network traffic produced.</bug>⤶ </description> <realm>Shared</realm> <args> <arg name="boneID" type="number">Index of the bone you want to manipulate</arg> <arg name="ang" type="Angle">Angle to apply. The angle is relative to the original bone angle, not relative to the world or the entity.</arg> </args> </function> <example> <description> This example shows the network usage impact of repeatedly using bone manipulation serverside. To see the difference, type in client's console: **net_graph 3**⤶ The rotation is not smooth when using <page>Entity:SetNWFloat</page>() because it does not update the value on every frame. To see the difference, type in client's console: `net_graph 3`.⤶ The rotation is not smooth when using <page>Entity:SetNWFloat</page> because it does not update the value on every frame. </description> <code> local server_only = true -- Change the value! if server_only then if SERVER then hook.Add( "Think", "bone_manipulation_test", function() for _,ent in ipairs( ents.FindByModel( "models/buggy.mdl" ) ) do ent:ManipulateBoneAngles( 28, Angle( 0,0,RealTime()*180 ) ) for _, ent in ipairs( ents.FindByModel( "models/buggy.mdl" ) ) do ent:ManipulateBoneAngles( 28, Angle( 0, 0, RealTime() * 180 ) ) end end ) else hook.Add( "Think", "bone_manipulation_test", function() end )⤶ hook.Remove( "Think", "bone_manipulation_test" ) end else if SERVER then hook.Add( "Think", "bone_manipulation_test", function() for _,ent in ipairs( ents.FindByModel( "models/buggy.mdl" ) ) do ent:SetNWFloat( "bone_manipulation_test", RealTime()*180 ) -- Entity:SetNW....() do not broadcast new values instantly⤶ for _, ent in ipairs( ents.FindByModel( "models/buggy.mdl" ) ) do -- Entity:SetNW....() do not broadcast new values instantly.⤶ ent:SetNWFloat( "bone_manipulation_test", RealTime() * 180 )⤶ end end ) else hook.Add( "Think", "bone_manipulation_test", function() for _,ent in ipairs( ents.GetAll() ) do if ent:GetModel() == "models/buggy.mdl" then⤶ ent:ManipulateBoneAngles( 28, Angle( 0,0,ent:GetNWFloat( "bone_manipulation_test" ) ) )⤶ end⤶ for _, ent in ipairs( ents.FindByModel( "models/buggy.mdl" ) ) do ent:ManipulateBoneAngles( 28, Angle( 0, 0, ent:GetNWFloat( "bone_manipulation_test" ) ) )⤶ end end ) end end </code> <output>Rotation of the ammo box of all HL2 buggies.</output> ⤶ </example></example>