Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local CSSLegsVar = CreateClientConVar( "CSS_Legs", 1, true, false )
- function LegsLandingPunch( )
- local PL = LocalPlayer()
- if not PL.LastZVelocity then
- PL.LastZVelocity = 0
- end
- if not PL:OnGround() and PL:GetVelocity().z < 0 then
- PL.LastZVelocity = PL:GetVelocity().z
- end
- if not PL:OnGround() and not PL.Jumping then
- PL.Jumping = true
- elseif PL:OnGround() and PL.Jumping and PL.LastZVelocity <= -100 then
- if PL.VaultView and CurTime() <= PL.VaultView then
- PL:VaultViewSet( 0, 0, 0, 0, 0, 0, "VaultOver_Reset" )
- end
- PL.Jumping = false
- PL:VaultViewSet( PL.LastZVelocity*-0.06, 0, 0, PL.LastZVelocity* 0.045, 0, 30, "LandingStart" )
- PL:VaultViewSet( 0, 0, 0, 0, 0.1, 5, "LandingReset" )
- PL.LastZVelocity = 0
- end
- if PL.VaultView and CurTime() <= PL.VaultView then
- PL.LastZVelocity = -150
- end
- end
- hook.Add("Think","LegsLAndingPunchHook",LegsLandingPunch)
- function LegsNoCroucher( ply, bind, pressed )
- if pressed and ply.Leaning then
- if bind == "+forward" then
- if ply.Lean1 == -1 then
- ply.Lean1 = 0
- ply.LeanPos_Z = 0
- elseif ply.Lean1 == 0 then
- ply.Lean1 = 1
- ply.LeanPos_Z = 21
- end
- end
- if bind == "+moveleft" then
- if ply.Lean2 == 1 then
- ply.Lean2 = 0
- ply.LeanPos = 0
- elseif ply.Lean2 == 0 then
- ply.Lean2 = -1
- ply.LeanPos = -30
- end
- end
- if bind == "+moveright" then
- if ply.Lean2 == -1 then
- ply.Lean2 = 0
- ply.LeanPos = 0
- elseif ply.Lean2 == 0 then
- ply.Lean2 = 1
- ply.LeanPos = 30
- end
- end
- if bind == "+back" then
- if ply.Lean1 == 1 then
- ply.Lean1 = 0
- ply.LeanPos_Z = 0
- elseif ply.Lean1 == 0 then
- ply.Lean1 = -1
- ply.LeanPos_Z = -21
- end
- end
- return true
- end
- local self = ply
- local Sprint = self:KeyDown(131072)
- local Vel = self:GetVelocity():Length()
- local Direction = self:GetVelocity():Normalize()
- local OnGround = self:OnGround()
- local OnlyRunningForward = (self:KeyDown(8) and not self:KeyDown(16) and not self:KeyDown(512) and not self:KeyDown(1024))
- if Sprint and Vel >= 170 and OnGround and OnlyRunningForward and bind == "+duck" then
- self.VaultView_Yaw = self:EyeAngles().y
- self.Sliding = true
- end
- if bind == "+duck" and ((ply:GetMoveType() == MOVETYPE_FLY) or (ply:GetMoveType() == MOVETYPE_FLYGRAVITY) or ply.Vaulting and CurTime() <= ply.Vaulting) then
- return true
- end
- end
- hook.Add("PlayerBindPress","LegsNoCroucherHook",LegsNoCroucher)
- function CreateLegs()
- local self = LocalPlayer()
- if self.CSSLegs and IsValid(self.CSSLegs) then return end
- self.CSSLegs = ClientsideModel( "models/player/t_phoenix_flora.mdl" )
- local Pos = self:GetPos() - Angle(0,self:EyeAngles().y,0):Forward()*12
- self.CSSLegs.Mode = 1
- self.CSSLegs.ZVector = 0
- self.CSSLegs:SetPos( Pos )
- self.CSSLegs:SetAngles( Angle(0,self:EyeAngles().y,0) )
- self.CSSLegs:Spawn()
- self.CSSLegs.AutomaticFrameAdvance = true
- self.CSSLegs:SetNoDraw(true)
- self.CSSLegs:SetSequence( self.CSSLegs:LookupSequence("Idle_Lower") )
- self.CSSLegs:SetCycle(0)
- -- self.CSSLegs:SetModelScale(Vector(0.9,0.9,0.9))
- local LEGS = self.CSSLegs
- function LEGS:BuildBonePositions(NumBones,NumPhysBones)
- local bonetable = { "ValveBiped.Bip01_R_Finger0", "ValveBiped.Bip01_R_Finger01", "ValveBiped.Bip01_R_Finger02", "ValveBiped.Bip01_R_Finger1", "ValveBiped.Bip01_R_Finger11", "ValveBiped.Bip01_R_Finger12", "ValveBiped.Bip01_R_Finger2", "ValveBiped.Bip01_R_Finger21", "ValveBiped.Bip01_R_Finger22", "ValveBiped.Bip01_L_Finger0", "ValveBiped.Bip01_L_Finger01", "ValveBiped.Bip01_L_Finger02", "ValveBiped.Bip01_L_Finger1", "ValveBiped.Bip01_L_Finger11", "ValveBiped.Bip01_L_Finger12", "ValveBiped.Bip01_L_Finger2", "ValveBiped.Bip01_L_Finger21", "ValveBiped.Bip01_L_Finger22", "ValveBiped.Bip01_R_Ulna", "ValveBiped.Bip01_L_Ulna", "ValveBiped.Bip01_L_Wrist", "ValveBiped.Bip01_R_Wrist", "ValveBiped.Bip01_L_Clavicle", "ValveBiped.Bip01_R_Clavicle", "ValveBiped.Bip01_Head1", "ValveBiped.Bip01_Neck1", "ValveBiped.Bip01_L_UpperArm", "ValveBiped.Bip01_L_Forearm", "ValveBiped.Bip01_L_Hand", "ValveBiped.Bip01_R_UpperArm", "ValveBiped.Bip01_R_Forearm", "ValveBiped.Bip01_R_Hand", "ValveBiped.Bip01_Spine4" }
- local bonetable2 = { "ValveBiped.Bip01_Spine2" }
- for _, bonez in pairs( bonetable ) do
- local bone = self:LookupBone(bonez)
- local matrix = self:GetBoneMatrix(bone)
- matrix:Scale(Vector(0,0,0))
- self:SetBoneMatrix(bone,matrix)
- end
- for _, bonez2 in pairs( bonetable2 ) do
- local bone = self:LookupBone(bonez2)
- local matrix = self:GetBoneMatrix(bone)
- matrix:Scale(Vector(0.7,0.7,0.7))
- self:SetBoneMatrix(bone,matrix)
- end
- end
- end
- function RemoveLegs()
- local self = LocalPlayer()
- if self.CSSLegs and IsValid(self.CSSLegs) then
- self.CSSLegs:Remove()
- end
- end
- function LeanOn( ply )
- ply.Lean1 = 0
- ply.Lean2 = 0
- ply.Leaning = true
- end
- concommand.Add("+lean",LeanOn)
- function LeanOff( ply )
- ply.Leaning = false
- ply.Lean1 = 0
- ply.Lean2 = 0
- ply.LeanPos = 0
- ply.LeanPos_Z = 0
- end
- concommand.Add("-lean",LeanOff)
- function _R.Player:VaultViewSet( pitch, yaw, roll, height, time, speed, name )
- timer.Create( name, time, 1, function()
- self.VaultTarget_Speed = speed
- self.VaultTarget_P_Blender2 = (0.01*speed)
- self.VaultTarget_Y_Blender2 = (0.01*speed)
- self.VaultTarget_R_Blender2 = (0.01*speed)
- self.VaultPos_Z_Blender2 = (0.01*speed)
- self.VaultTarget_P = pitch
- self.VaultTarget_Y = yaw
- self.VaultTarget_R = roll
- self.VaultPos_Z = height
- end)
- end
- function VaultViewLimit( cm )
- local ply = LocalPlayer()
- if (ply.VaultViewDone or ply.VaultUpViewDone or ply.Sliding) and ply.VaultView_Yaw then
- local YAW = ply.VaultView_Yaw
- local MYYAW = ply:EyeAngles().y
- local THEANG = ply:EyeAngles()
- if math.AngleDifference( YAW, MYYAW ) >= 90 then
- cm:SetViewAngles( Angle(THEANG.p,YAW - 90,THEANG.r) )
- elseif math.AngleDifference( YAW, MYYAW ) <= -90 then
- cm:SetViewAngles( Angle(THEANG.p,YAW + 90,THEANG.r) )
- end
- end
- end
- hook.Add("CreateMove","VaultViewLimitHook",VaultViewLimit)
- function VaultViewCalc( ply, pos, angles, fov )
- if ply.VaultView and CurTime() < ply.VaultView and not ply.VaultViewDone then
- ply:SetHull( Vector(-16,-16,70), Vector(16,16,72) )
- ply:SetHullDuck( Vector(-16,-16,70), Vector(16,16,72) )
- ply.VaultView_Yaw = ply:EyeAngles().y
- ply.VaultViewDone = true
- ply:VaultViewSet( 20, -10, 25, 0, 0, 7, "VaultOver_Start" )
- ply:VaultViewSet( 20, -10, 25, 10, 0.1, 7, "VaultOver_Mid" )
- ply:VaultViewSet( -10, -5, 0, 25, 0.2, 10, "VaultOver_End" )
- elseif ((ply.VaultView and CurTime() >= ply.VaultView) or not ply.VaultView) and ply.VaultViewDone then
- ply:SetHull( Vector(-16,-16,0), Vector(16,16,72) )
- ply:SetHullDuck( Vector(-16,-16,0), Vector(16,16,36) )
- ply.VaultViewDone = false
- ply:VaultViewSet( 0, 0, 0, 0, 0, 5, "VaultOver_Reset" )
- end
- if ply.VaultUpView and CurTime() < ply.VaultUpView and not ply.VaultUpViewDone then
- ply:SetHull( Vector(-16,-16,70), Vector(16,16,72) )
- ply:SetHullDuck( Vector(-16,-16,70), Vector(16,16,72) )
- ply.VaultView_Yaw = ply:EyeAngles().y
- ply.VaultUpViewDone = true
- ply:VaultViewSet( 30, -10, 0, -20, 0, 5, "VaultOnto_Start" )
- ply:VaultViewSet( 30, -10, 0, 20, 0.1, 5, "VaultOnto_Mid" )
- ply:VaultViewSet( 0, -5, 0, 10, 0.3, 5, "VaultOnto_End" )
- elseif ((ply.VaultUpView and CurTime() >= ply.VaultUpView) or not ply.VaultUpView) and ply.VaultUpViewDone then
- ply:SetHull( Vector(-16,-16,0), Vector(16,16,72) )
- ply:SetHullDuck( Vector(-16,-16,0), Vector(16,16,36) )
- ply.VaultUpViewDone = false
- ply:VaultViewSet( 0, 0, 0, 0, 0, 5, "VaultOnto_Reset" )
- end
- if not ply.VaultTarget_Speed then ply.VaultTarget_Speed = 5 end
- if not ply.VaultTarget_P then ply.VaultTarget_P = 0 end
- if not ply.VaultTarget_Y then ply.VaultTarget_Y = 0 end
- if not ply.VaultTarget_R then ply.VaultTarget_R = 0 end
- if not ply.VaultPos_Z then ply.VaultPos_Z = 0 end
- if not ply.LeanPos then ply.LeanPos = 0 end
- if not ply.LeanPos_Z then ply.LeanPos_Z = 0 end
- if not ply.VaultTarget_P_Blender then ply.VaultTarget_P_Blender = ply.VaultTarget_P end
- if not ply.VaultTarget_Y_Blender then ply.VaultTarget_Y_Blender = ply.VaultTarget_Y end
- if not ply.VaultTarget_R_Blender then ply.VaultTarget_R_Blender = ply.VaultTarget_R end
- if not ply.VaultPos_Z_Blender then ply.VaultPos_Z_Blender = ply.VaultPos_Z end
- if not ply.LeanPos_Blender then ply.LeanPos_Blender = ply.LeanPos end
- if not ply.LeanPos_Blender_Z then ply.LeanPos_Blender_Z = ply.LeanPos_Z end
- if not ply.VaultTarget_P_Blender2 then ply.VaultTarget_P_Blender2 = 1 end
- if not ply.VaultTarget_Y_Blender2 then ply.VaultTarget_Y_Blender2 = 1 end
- if not ply.VaultTarget_R_Blender2 then ply.VaultTarget_R_Blender2 = 1 end
- if not ply.VaultPos_Z_Blender2 then ply.VaultPos_Z_Blender2 = 1 end
- if not ply.LeanPos_Blender2 then ply.LeanPos_Blender2 = 1 end
- if not ply.LeanPos_Blender2_Z then ply.LeanPos_Blender2_Z = 1 end
- local SPEEDBASE1 = ply.VaultTarget_Speed*ply.VaultTarget_P_Blender2
- local SPEEDBASE2 = ply.VaultTarget_Speed*ply.VaultTarget_Y_Blender2
- local SPEEDBASE3 = ply.VaultTarget_Speed*ply.VaultTarget_R_Blender2
- local SPEEDBASE4 = ply.VaultTarget_Speed*ply.VaultPos_Z_Blender2
- if ply.VaultTarget_P_Blender < ply.VaultTarget_P then
- ply.VaultTarget_P_Blender2 = math.Clamp( ply.VaultTarget_P_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultTarget_P - ply.VaultTarget_P_Blender, 0.01, 500 )*(SPEEDBASE1)
- ply.VaultTarget_P_Blender = math.Clamp( ply.VaultTarget_P_Blender + FrameTime()*SPEED, -89, ply.VaultTarget_P )
- elseif ply.VaultTarget_P_Blender > ply.VaultTarget_P then
- ply.VaultTarget_P_Blender2 = math.Clamp( ply.VaultTarget_P_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultTarget_P_Blender - ply.VaultTarget_P, 0.01, 500 )*(SPEEDBASE1)
- ply.VaultTarget_P_Blender = math.Clamp( ply.VaultTarget_P_Blender - FrameTime()*SPEED, ply.VaultTarget_P, 89 )
- end
- if ply.VaultTarget_Y_Blender < ply.VaultTarget_Y then
- ply.VaultTarget_Y_Blender2 = math.Clamp( ply.VaultTarget_Y_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultTarget_Y - ply.VaultTarget_Y_Blender, 0.01, 500 )*(SPEEDBASE2)
- ply.VaultTarget_Y_Blender = math.Clamp( ply.VaultTarget_Y_Blender + FrameTime()*SPEED, -89, ply.VaultTarget_Y )
- elseif ply.VaultTarget_Y_Blender > ply.VaultTarget_Y then
- ply.VaultTarget_Y_Blender2 = math.Clamp( ply.VaultTarget_Y_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultTarget_Y_Blender - ply.VaultTarget_Y, 0.01, 500 )*(SPEEDBASE2)
- ply.VaultTarget_Y_Blender = math.Clamp( ply.VaultTarget_Y_Blender - FrameTime()*SPEED, ply.VaultTarget_Y, 89 )
- end
- if ply.VaultTarget_R_Blender < ply.VaultTarget_R then
- ply.VaultTarget_R_Blender2 = math.Clamp( ply.VaultTarget_R_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultTarget_R - ply.VaultTarget_R_Blender, 0.01, 500 )*(SPEEDBASE3)
- ply.VaultTarget_R_Blender = math.Clamp( ply.VaultTarget_R_Blender + FrameTime()*SPEED, -89, ply.VaultTarget_R )
- elseif ply.VaultTarget_R_Blender > ply.VaultTarget_R then
- ply.VaultTarget_R_Blender2 = math.Clamp( ply.VaultTarget_R_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultTarget_R_Blender - ply.VaultTarget_R, 0.01, 500 )*(SPEEDBASE3)
- ply.VaultTarget_R_Blender = math.Clamp( ply.VaultTarget_R_Blender - FrameTime()*SPEED, ply.VaultTarget_R, 89 )
- end
- if ply.VaultPos_Z_Blender < ply.VaultPos_Z then
- ply.VaultPos_Z_Blender2 = math.Clamp( ply.VaultPos_Z_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultPos_Z - ply.VaultPos_Z_Blender, 0.01, 500 )*(SPEEDBASE4)
- ply.VaultPos_Z_Blender = math.Clamp( ply.VaultPos_Z_Blender + FrameTime()*SPEED, -89, ply.VaultPos_Z )
- elseif ply.VaultPos_Z_Blender > ply.VaultPos_Z then
- ply.VaultPos_Z_Blender2 = math.Clamp( ply.VaultPos_Z_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.VaultPos_Z_Blender - ply.VaultPos_Z, 0.01, 500 )*(SPEEDBASE4)
- ply.VaultPos_Z_Blender = math.Clamp( ply.VaultPos_Z_Blender - FrameTime()*SPEED, ply.VaultPos_Z, 89 )
- end
- if ply.LeanPos_Blender < ply.LeanPos then
- ply.LeanPos_Blender2 = math.Clamp( ply.LeanPos_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.LeanPos - ply.LeanPos_Blender, 0.01, 500 )*(5*ply.LeanPos_Blender2)
- ply.LeanPos_Blender = math.Clamp( ply.LeanPos_Blender + FrameTime()*SPEED, -100, ply.LeanPos )
- elseif ply.LeanPos_Blender > ply.LeanPos then
- ply.LeanPos_Blender2 = math.Clamp( ply.LeanPos_Blender2 + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.LeanPos_Blender - ply.LeanPos, 0.01, 500 )*(5*ply.LeanPos_Blender2)
- ply.LeanPos_Blender = math.Clamp( ply.LeanPos_Blender - FrameTime()*SPEED, ply.LeanPos, 100 )
- end
- if ply.LeanPos_Blender_Z < ply.LeanPos_Z then
- ply.LeanPos_Blender2_Z = math.Clamp( ply.LeanPos_Blender2_Z + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.LeanPos_Z - ply.LeanPos_Blender_Z, 0.01, 500 )*(5*ply.LeanPos_Blender2_Z)
- ply.LeanPos_Blender_Z = math.Clamp( ply.LeanPos_Blender_Z + FrameTime()*SPEED, -100, ply.LeanPos_Z )
- elseif ply.LeanPos_Blender_Z > ply.LeanPos_Z then
- ply.LeanPos_Blender2_Z = math.Clamp( ply.LeanPos_Blender2_Z + FrameTime()*8, 0.01, 1 )
- local SPEED = math.Clamp( ply.LeanPos_Blender_Z - ply.LeanPos_Z, 0.01, 500 )*(5*ply.LeanPos_Blender2_Z)
- ply.LeanPos_Blender_Z = math.Clamp( ply.LeanPos_Blender_Z - FrameTime()*SPEED, ply.LeanPos_Z, 100 )
- end
- if ply.VaultTarget_P_Blender != 0 then
- angles.p = angles.p + ply.VaultTarget_P_Blender
- end
- if ply.VaultTarget_Y_Blender != 0 then
- angles.y = angles.y + ply.VaultTarget_Y_Blender
- end
- if ply.VaultTarget_R_Blender != 0 then
- angles.r = angles.r + ply.VaultTarget_R_Blender
- end
- if ply.VaultPos_Z_Blender != 0 then
- pos.z = pos.z + ply.VaultPos_Z_Blender
- end
- if ply.LeanPos_Blender != 0 then
- local MUL = ply.LeanPos_Blender
- pos.x = pos.x + (ply:EyeAngles():Right()*MUL).x
- pos.y = pos.y + (ply:EyeAngles():Right()*MUL).y
- if MUL < 0 then
- pos.z = pos.z - (MUL*-0.25)
- else
- pos.z = pos.z - (MUL*0.25)
- end
- angles.r = angles.r + MUL
- local TR = {}
- TR.start = ply:EyePos() + Vector((ply:EyeAngles():Right()*MUL).x,(ply:EyeAngles():Right()*MUL).y,0)
- TR.endpos = TR.start + (ply:EyeAngles():Right()*(MUL*1.5))
- TR.mask = MASK_PLAYERSOLID
- TR.filter = ply
- local Trace = util.TraceLine(TR)
- if Trace.Hit and ply.Leaning then
- local POS1 = Trace.HitPos
- local POS2 = ply:EyePos()
- POS1.z = 0
- POS2.z = 0
- if ply.Lean2 == 1 then
- ply.LeanPos = math.Clamp(POS1:Distance(POS2)*0.5,0,25)
- else
- ply.LeanPos = math.Clamp(POS1:Distance(POS2)*-0.5,-25,0)
- end
- end
- end
- if ply.LeanPos_Blender_Z != 0 then
- local MUL = ply.LeanPos_Blender_Z
- pos.z = pos.z + MUL
- local TR = {}
- TR.start = ply:EyePos() + Vector(0,0,MUL)
- TR.endpos = TR.start + Vector(0,0,MUL)
- TR.mask = MASK_PLAYERSOLID
- TR.filter = ply
- local Trace = util.TraceLine(TR)
- if Trace.Hit and ply.Leaning then
- local POS1 = Trace.HitPos
- local POS2 = ply:EyePos()
- if ply.Lean1 == 1 then
- ply.LeanPos_Z = math.Clamp(POS1:Distance(POS2)*0.5,0,15)
- else
- ply.LeanPos_Z = math.Clamp(POS1:Distance(POS2)*-0.5,-15,0)
- end
- end
- end
- end
- hook.Add("CalcView","VaultViewCalcHook",VaultViewCalc)
- function CSSSliding(um)
- local PL = um:ReadEntity()
- local BOOL = um:ReadBool()
- PL.VaultView_Yaw = PL:EyeAngles().y
- PL.Sliding = BOOL
- end
- usermessage.Hook("CSS_Sliding",CSSSliding)
- function ResetLegs()
- RemoveLegs()
- end
- concommand.Add("ResetLegs",ResetLegs)
- function _R.Player:Walking()
- if self:GetMoveType() == MOVETYPE_WALK or self:GetMoveType() == MOVETYPE_LADDER or self:GetMoveType() == MOVETYPE_FLY or self:GetMoveType() == MOVETYPE_FLYGRAVITY then
- return true
- else
- return false
- end
- end
- function CSSCreationFuncs()
- local self = LocalPlayer()
- if not self:Alive() or self:Health() <= 0 or self:InVehicle() or not self:Walking() or not CSSLegsVar:GetBool() then
- RemoveLegs()
- else
- CreateLegs()
- end
- if self.CSSLegs and IsValid(self.CSSLegs) and self.CSSLegs.Mode == 1 then
- local LEGS = self.CSSLegs
- local Param_X = 0
- local Param_Y = 0
- if self:KeyDown(8) then
- Param_X = 1
- LastParam_X = 1
- elseif self:KeyDown(16) then
- Param_X = -1
- LastParam_X = -1
- else
- Param_X = 0
- LastParam_X = 0
- end
- if self:KeyDown(512) then
- Param_Y = -1
- LastParam_Y = -1
- elseif self:KeyDown(1024) then
- Param_Y = 1
- LastParam_Y = 1
- else
- Param_Y = 0
- LastParam_Y = 0
- end
- if not LEGS.BLEND_X then LEGS.BLEND_X = Param_X end
- if not LEGS.BLEND_Y then LEGS.BLEND_Y = Param_Y end
- if LEGS.BLEND_X < Param_X then
- local SPEED = math.Clamp(Param_X - LEGS.BLEND_X,0.02,500)*5
- LEGS.BLEND_X = math.Clamp( LEGS.BLEND_X + FrameTime()*SPEED, -1, Param_X )
- elseif LEGS.BLEND_X > Param_X then
- local SPEED = math.Clamp(LEGS.BLEND_X - Param_X,0.01,500)*6
- LEGS.BLEND_X = math.Clamp( LEGS.BLEND_X - FrameTime()*SPEED, Param_X, 1 )
- end
- if LEGS.BLEND_Y < Param_Y then
- local SPEED = math.Clamp(Param_Y - LEGS.BLEND_Y,0.02,500)*5
- LEGS.BLEND_Y = math.Clamp( LEGS.BLEND_Y + FrameTime()*SPEED, -1, Param_Y )
- elseif LEGS.BLEND_Y > Param_Y then
- local SPEED = math.Clamp(LEGS.BLEND_Y - Param_Y,0.01,500)*6
- LEGS.BLEND_Y = math.Clamp( LEGS.BLEND_Y - FrameTime()*SPEED, Param_Y, 1 )
- end
- LEGS:SetPoseParameter( "move_x", ( LEGS.BLEND_X ) )
- LEGS:SetPoseParameter( "move_y", ( LEGS.BLEND_Y ) )
- if self:OnGround() and self:GetMoveType() == MOVETYPE_WALK and not self.Sliding and LEGS.CancelTypeMoves then
- LEGS.CancelTypeMoves = false
- end
- if self:GetMoveType() == MOVETYPE_FLY and not LEGS.CancelTypeMoves then
- LEGS.Mode = 2
- LEGS.CancelTypeMoves = true
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Crouch = false
- LEGS.Jump = true
- LEGS:SetSequence("t_mantle")
- LEGS:SetPlaybackRate(1.2)
- LEGS:SetCycle(0)
- LEGS.AnimEnd = CurTime() + 1
- self.VaultView = CurTime() + 0.6
- self.Vaulting = CurTime() + 0.8
- return
- elseif self:GetMoveType() == MOVETYPE_WALK and self.Sliding and not LEGS.CancelTypeMoves and self:KeyDown(4) then
- self:VaultViewSet( 10, 0, 0, 0, 0, 8, "Slide_Start" )
- self:VaultViewSet( 0, 0, 0, 0, 0.2, 8, "Slide_Reset" )
- LEGS.Mode = 2
- LEGS.CancelTypeMoves = true
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Crouch = false
- LEGS.Jump = true
- LEGS:SetSequence("t_slide")
- LEGS:SetPlaybackRate(0.9)
- LEGS:SetCycle(0)
- LEGS.AnimEnd2 = CurTime() + LEGS:SequenceDuration()
- return
- elseif self:GetMoveType() == MOVETYPE_FLYGRAVITY and not LEGS.CancelTypeMoves then
- LEGS.Mode = 2
- LEGS.CancelTypeMoves = true
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Crouch = false
- LEGS.Jump = false
- LEGS:SetSequence("t_vaultup")
- LEGS:SetPlaybackRate(1.25)
- LEGS:SetCycle(0)
- LEGS.AnimEnd3 = CurTime() + LEGS:SequenceDuration()
- self.VaultUpView = CurTime() + 0.6
- return
- end
- if not LEGS.Jump and not LEGS.Crouch and not self:OnGround() then
- LEGS.Jump = true
- LEGS:SetSequence("Jump")
- LEGS:SetPlaybackRate(0.8)
- LEGS:SetCycle(0)
- end
- if LEGS.Jump and self:OnGround() then
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Jump = false
- if not LEGS.Crouch then
- if self:GetVelocity():Length() > 10 and self:GetVelocity():Length() < 170 then
- LEGS:SetSequence("walk_lower")
- LEGS:SetPlaybackRate(1)
- elseif self:GetVelocity():Length() >= 170 then
- LEGS:SetSequence("Run_lower")
- LEGS:SetPlaybackRate(1)
- else
- LEGS:SetSequence("Idle_lower")
- LEGS:SetPlaybackRate(1)
- end
- LEGS:SetCycle(0)
- end
- end
- if LEGS.Jump and LEGS.ZVector and LEGS.ZVector > -7.5 then
- LEGS.ZVector = math.Clamp(LEGS.ZVector - FrameTime()*50,-7.5,0)
- elseif not LEGS.Jump and LEGS.ZVector and LEGS.ZVector < 0 then
- LEGS.ZVector = math.Clamp(LEGS.ZVector + FrameTime()*50,-7.5,0)
- end
- if LEGS.Jump then return end
- if not LEGS.Crouch and self:KeyDown(4) then
- LEGS.Crouch = true
- -- LEGS:SetModelScale(Vector(0.9,0.9,0.5))
- if self:GetVelocity():Length() > 10 then
- LEGS:SetSequence("Crouch_walk_lower")
- else
- LEGS:SetSequence("Crouch_Idle_Lower")
- end
- LEGS:SetPlaybackRate(1)
- LEGS:SetCycle(0)
- end
- if LEGS.Crouch and not self:KeyDown(4) then
- LEGS.Crouch = false
- -- LEGS:SetModelScale(Vector(0.9,0.9,0.9))
- if self:GetVelocity():Length() > 10 and self:GetVelocity():Length() < 170 then
- LEGS:SetSequence("walk_lower")
- LEGS:SetPlaybackRate(1)
- elseif self:GetVelocity():Length() >= 170 then
- LEGS:SetSequence("Run_lower")
- LEGS:SetPlaybackRate(1)
- else
- LEGS:SetSequence("Idle_lower")
- LEGS:SetPlaybackRate(1)
- end
- LEGS:SetCycle(0)
- end
- if not LEGS.Moving and self:GetVelocity():Length() > 10 and self:GetVelocity():Length() < 170 then
- LEGS.Moving = true
- if LEGS.Crouch then
- LEGS:SetSequence("Crouch_walk_lower")
- else
- LEGS:SetSequence("walk_lower")
- end
- LEGS:SetPlaybackRate(1)
- LEGS:SetCycle(0)
- elseif LEGS.Running and LEGS.Moving and self:GetVelocity():Length() < 170 and self:GetVelocity():Length() > 10 then
- LEGS.Moving = true
- LEGS.Running = false
- if LEGS.Crouch then
- LEGS:SetSequence("Crouch_walk_lower")
- else
- LEGS:SetSequence("walk_lower")
- end
- LEGS:SetPlaybackRate(1)
- LEGS:SetCycle(0)
- elseif LEGS.Moving and self:GetVelocity():Length() <= 10 then
- LEGS.Moving = false
- LEGS.Running = false
- if LEGS.Crouch then
- LEGS:SetSequence("Crouch_Idle_lower")
- else
- LEGS:SetSequence("Idle_lower")
- end
- LEGS:SetPlaybackRate(1)
- LEGS:SetCycle(0)
- end
- if LEGS.Moving and not LEGS.Running and not LEGS.Crouch and self:GetVelocity():Length() >= 170 then
- LEGS.Running = true
- if LEGS.Crouch then
- LEGS:SetSequence("Crouch_walk_lower")
- LEGS:SetPlaybackRate(1)
- else
- LEGS:SetSequence("Run_lower")
- LEGS:SetPlaybackRate(1)
- end
- LEGS:SetCycle(0)
- end
- if LEGS.Moving and LEGS.Running and self:GetVelocity():Length() > 10 and self:GetVelocity():Length() < 170 then
- LEGS.Running = false
- if LEGS.Crouch then
- LEGS:SetSequence("Crouch_walk_lower")
- else
- LEGS:SetSequence("Run_lower")
- end
- LEGS:SetPlaybackRate(1.3)
- LEGS:SetCycle(0)
- end
- if LEGS.Running and self:KeyDown(131072) then
- LEGS:SetPlaybackRate(1.3)
- elseif LEGS.Running and not self:KeyDown(131072) then
- LEGS:SetPlaybackRate(1)
- end
- end
- if self.CSSLegs and IsValid(self.CSSLegs) and self.CSSLegs.Mode == 2 then
- local LEGS = self.CSSLegs
- local Param_X = 0
- local Param_Y = 0
- if self:KeyDown(8) then
- Param_X = 1
- LastParam_X = 1
- elseif self:KeyDown(16) then
- Param_X = -1
- LastParam_X = -1
- else
- Param_X = 0
- LastParam_X = 0
- end
- if self:KeyDown(512) then
- Param_Y = -1
- LastParam_Y = -1
- elseif self:KeyDown(1024) then
- Param_Y = 1
- LastParam_Y = 1
- else
- Param_Y = 0
- LastParam_Y = 0
- end
- if not LEGS.BLEND_X then LEGS.BLEND_X = Param_X end
- if not LEGS.BLEND_Y then LEGS.BLEND_Y = Param_Y end
- if LEGS.BLEND_X < Param_X then
- local SPEED = math.Clamp(Param_X - LEGS.BLEND_X,0.02,500)*5
- LEGS.BLEND_X = math.Clamp( LEGS.BLEND_X + FrameTime()*SPEED, -1, Param_X )
- elseif LEGS.BLEND_X > Param_X then
- local SPEED = math.Clamp(LEGS.BLEND_X - Param_X,0.01,500)*6
- LEGS.BLEND_X = math.Clamp( LEGS.BLEND_X - FrameTime()*SPEED, Param_X, 1 )
- end
- if LEGS.BLEND_Y < Param_Y then
- local SPEED = math.Clamp(Param_Y - LEGS.BLEND_Y,0.02,500)*5
- LEGS.BLEND_Y = math.Clamp( LEGS.BLEND_Y + FrameTime()*SPEED, -1, Param_Y )
- elseif LEGS.BLEND_Y > Param_Y then
- local SPEED = math.Clamp(LEGS.BLEND_Y - Param_Y,0.01,500)*6
- LEGS.BLEND_Y = math.Clamp( LEGS.BLEND_Y - FrameTime()*SPEED, Param_Y, 1 )
- end
- LEGS:SetPoseParameter( "move_x", ( LEGS.BLEND_X ) )
- LEGS:SetPoseParameter( "move_y", ( LEGS.BLEND_Y ) )
- if LEGS.AnimEnd then
- RunConsoleCommand("-duck")
- end
- if LEGS.AnimEnd3 then
- RunConsoleCommand("-duck")
- end
- if LEGS.AnimEnd and CurTime() >= LEGS.AnimEnd then
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Crouch = false
- LEGS.Jump = true
- LEGS.Mode = 1
- LEGS:SetSequence("Jump")
- LEGS:SetPlaybackRate(0)
- LEGS:SetCycle(0)
- LEGS.AnimEnd = nil
- end
- local TR = {}
- TR.start = self:GetPos()
- TR.endpos = self:GetPos()
- TR.mask = MASK_PLAYERSOLID
- TR.filter = self
- TR.mins = Vector(-16.6,-16.6,5)
- TR.maxs = Vector(16.6,16.6,35)
- local Trace = util.TraceHull(TR)
- if LEGS.AnimEnd2 and (CurTime() >= LEGS.AnimEnd2 or not self:KeyDown(4) or not self:OnGround() or Trace.Hit) then
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Crouch = true
- LEGS.Jump = false
- LEGS.Mode = 1
- if self:GetVelocity():Length() >= 10 then
- LEGS:SetSequence("Crouch_walk_lower")
- else
- LEGS:SetSequence("Crouch_Idle_lower")
- end
- LEGS:SetPlaybackRate(1)
- LEGS:SetCycle(0)
- LEGS.AnimEnd2 = nil
- self.Sliding = false
- end
- if LEGS.AnimEnd3 and CurTime() >= LEGS.AnimEnd3 then
- LEGS.Moving = false
- LEGS.Running = false
- LEGS.Crouch = false
- LEGS.Jump = true
- LEGS.Mode = 1
- LEGS:SetSequence("Idle_lower")
- LEGS:SetPlaybackRate(1)
- LEGS:SetCycle(0)
- LEGS.AnimEnd3 = nil
- end
- end
- end
- hook.Add("Think","CSSCreationFuncsHook",CSSCreationFuncs)
- function _R.Player:Moving()
- if self:KeyDown(8) or self:KeyDown(16) or self:KeyDown(512) or self:KeyDown(1024) then
- return true
- else
- return false
- end
- end
- function CSSLegsThink()
- local self = LocalPlayer()
- local Pos = self:EyePos()
- local Ang = self:EyeAngles() + Angle(self:GetPunchAngle().p,self:GetPunchAngle().y,self:GetPunchAngle().r)
- local FOV = 100
- cam.Start3D( Pos, Ang, FOV )
- local LastAng = self:EyeAngles().y
- if not EyeAng2 then EyeAng2 = LastAng end
- if not EyeAng2_F then EyeAng2_F = EyeAng2 end
- if self.CSSLegs and IsValid(self.CSSLegs) then
- if (math.AngleDifference( LastAng, EyeAng2 ) > 80) then EyeAng2 = LastAng - 80 end
- if (math.AngleDifference( LastAng, EyeAng2 ) < -80) then EyeAng2 = LastAng + 80 end
- if (self:GetVelocity():Length() >= 10) and self.CSSLegs.Mode == 1 and self:Moving() then
- EyeAng2 = LastAng
- EyeAng2_F = LastAng
- end
- -- if EyeAng2_F < EyeAng2 then
- -- EyeAng2_F = math.Clamp(EyeAng2_F + FrameTime()*800,-360,EyeAng2)
- -- elseif EyeAng2_F > EyeAng2 then
- -- EyeAng2_F = math.Clamp(EyeAng2_F - FrameTime()*800,EyeAng2,360)
- -- end
- local Pos = self:GetPos() - Angle(0,self:EyeAngles().y,0):Forward()*(5.5 + self:EyeAngles().p*0.2) - self:GetRight()*1
- self.CSSLegs:SetPos( Pos + Vector(0,0,self.CSSLegs.ZVector+0.5 or 0.5) )
- self.CSSLegs:SetAngles( Angle(0,EyeAng2,0) )
- self.CSSLegs:FrameAdvance( FrameTime() )
- if self.CSSLegs.Mode == 1 and (self:KeyDown(4) and self:EyeAngles().p >= 30) or (not self:KeyDown(4) and self:EyeAngles().p >= 35) then
- self.CSSLegs:DrawModel()
- elseif self.CSSLegs.Mode == 2 then
- if (self.Sliding and self:EyeAngles().p < -10) then return end
- self.CSSLegs:DrawModel()
- end
- end
- cam.End3D()
- end
- hook.Add("RenderScreenspaceEffects","CSSLegsThinkHook",CSSLegsThink)
- function SlideFoot( ply, pos, foot, sound, volume, rf )
- if not SinglePlayer() then
- if ply.Sliding then
- return true
- end
- end
- end
- hook.Add("PlayerFootstep","SlideFootHook",SlideFoot)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement