Garry's Mod Wiki

Revision Difference

GM:SetupMove#526631

<function name="SetupMove" parent="GM" type="hook"> <ishook>yes</ishook> <description> SetupMove is called before the engine process movements. This allows us to override the players movement. See <page>Game Movement</page> for an explanation on the move system. </description> <realm>Shared</realm> <predicted>Yes</predicted> <args> <arg name="ply" type="Player">The player whose movement we are about to process</arg> <arg name="mv" type="CMoveData">The move data to override/use</arg> <arg name="cmd" type="CUserCmd">The command data</arg> </args> </function> <example> <description>Make drowning even more entertaining:</description> <code> hook.Add( "SetupMove", "Drowning:HandleWaterInLungs", function( ply, mv, cmd ) if ( ply:WaterLevel() >= 2 ) then mv:SetUpSpeed( -100 ) cmd:SetUpMove( -100 ) end end ) </code> </example> <example> <description>Disable the player's ability to jump by removing a key from CMoveData:</description> <code> local CMoveData = FindMetaTable("CMoveData") function CMoveData:RemoveKeys(keys) -- Using bitwise operations to clear the key bits. local newbuttons = bit.band(self:GetButtons(), bit.bnot(keys)) self:SetButtons(newbuttons) end hook.Add("SetupMove", "Disable Jumping", function(ply, mvd, cmd) if mvd:KeyDown(IN_JUMP) then mvd:RemoveKey(IN_JUMP) mvd:RemoveKeys(IN_JUMP) end end) </code> </example>