add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,232 @@
local chestvec = Vector(0,0,32)
local thoraxvec = Vector(0,0,48)
local eyevec = Vector(0,0,64)
local mantlevec = Vector(0,0,16)
local vault1vec = Vector(0,0,24)
local vpunch1 = Angle(0,0,-1)
local vpunch2 = Angle(-1,0,0)
//DT vars
local meta = FindMetaTable("Player")
function meta:GetMantle()
return self:GetDTInt(13)
end
function meta:SetMantle(value)
return self:SetDTInt(13, value)
end
function meta:GetMantleLerp()
return self:GetDTFloat(13)
end
function meta:SetMantleLerp(value)
return self:SetDTFloat(13, value)
end
function meta:GetMantleStartPos()
return self:GetDTVector(13)
end
function meta:SetMantleStartPos(value)
return self:SetDTVector(13, value)
end
function meta:GetMantleEndPos()
return self:GetDTVector(14)
end
function meta:SetMantleEndPos(value)
return self:SetDTVector(14, value)
end
local pkweps = { --these already have their own climbing
["parkourmod"] = true,
["m_sprinting"] = true
}
local function PlayVaultAnim(ply, legs)
if game.SinglePlayer() and SERVER then
ply:SendLua('if VManip then VManip:PlayAnim("vault") end')
if legs then
ply:SendLua('if VMLegs then VMLegs:PlayAnim("test") end')
end
return
end
if CLIENT and VManip then
VManip:PlayAnim("vault")
if legs then
VMLegs:PlayAnim("test")
end
end
end
local function Vault1(ply, mv, ang, t, h)
t.start = mv:GetOrigin() + eyevec + ang:Forward()* 50
t.endpos = t.start - (chestvec)
t.filter = ply
t.mask = MASK_PLAYERSOLID
t = util.TraceLine(t)
if (t.Entity and t.Entity.IsNPC) and (t.Entity:IsNPC() or t.Entity:IsPlayer()) then
return false
end
if t.Hit and t.Fraction > 0.5 then
local tsafety = {}
tsafety.start = t.StartPos - ang:Forward() * 50
tsafety.endpos = t.StartPos
tsafety.filter = ply
tsafety.mask = MASK_PLAYERSOLID
tsafety = util.TraceLine(tsafety)
if tsafety.Hit then return false end
h.start = t.HitPos + mantlevec
h.endpos = h.start
h.filter = ply
h.mask = MASK_PLAYERSOLID
h.mins, h.maxs = ply:GetCollisionBounds()
local hulltr = util.TraceHull(h)
if !hulltr.Hit then
if t.HitNormal.x != 0 then t.HitPos.z = t.HitPos.z + 12 end
ply:SetMantleStartPos(mv:GetOrigin())
ply:SetMantleEndPos(t.HitPos + mantlevec)
ply:SetMantleLerp(0)
ply:SetMantle(1)
PlayVaultAnim(ply)
ply:ViewPunch(vpunch1)
if SERVER then ply:PlayStepSound(1) end
return true
end
end
return false
end
local function Vault2(ply, mv, ang, t, h)
t.start = mv:GetOrigin() + chestvec
t.endpos = t.start + ang:Forward() * 20
t.filter = ply
t.mask = MASK_PLAYERSOLID
local vaultpos = t.endpos + ang:Forward() * 50
t = util.TraceLine(t)
if (t.Entity and t.Entity.IsNPC) and (t.Entity:IsNPC() or t.Entity:IsPlayer()) then
return false
end
if t.Hit and t.Fraction > 0.5 then
local tsafety = {}
tsafety.start = mv:GetOrigin() + eyevec
tsafety.endpos = tsafety.start + ang:Forward() * 50
tsafety.filter = ply
tsafety.mask = MASK_PLAYERSOLID
tsafety = util.TraceLine(tsafety)
if tsafety.Hit then return false end
local tsafety = {}
tsafety.start = mv:GetOrigin() + eyevec + ang:Forward() * 50
tsafety.endpos = tsafety.start - thoraxvec
tsafety.filter = ply
tsafety.mask = MASK_PLAYERSOLID
tsafety = util.TraceLine(tsafety)
if tsafety.Hit then return false end
h.start = t.StartPos + ang:Forward() * 50
h.endpos = h.start
h.filter = ply
h.mask = MASK_PLAYERSOLID
h.mins, h.maxs = ply:GetCollisionBounds()
local hulltr = util.TraceHull(h)
if !hulltr.Hit then
ply:SetMantleStartPos(mv:GetOrigin())
ply:SetMantleEndPos(vaultpos)
ply:SetMantleLerp(0)
ply:SetMantle(2)
PlayVaultAnim(ply, true)
ply:ViewPunch(vpunch2)
if SERVER then ply:EmitSound("vmanip/goprone_0"..math.random(1,3)..".wav") end
return true
end
end
return false
end
hook.Add("SetupMove", "vmanip_vault", function(ply, mv, cmd)
if ply.MantleDisabled then
return
end
if !ply:Alive() then
if ply:GetMantle() != 0 then
ply:SetMantle(0)
end
return
end
if ply:GetMantle() == 0 then
local mvtype = ply:GetMoveType()
if (ply:OnGround() or mv:GetVelocity().z < -600 or mvtype == MOVETYPE_NOCLIP or mvtype == MOVETYPE_LADDER) then
return
end
end
local activewep = ply:GetActiveWeapon()
if IsValid(activewep) and activewep.GetClass then
if pkweps[activewep:GetClass()] then
return
end
end
ply.mantletr = ply.mantletr or {}
ply.mantlehull = ply.mantlehull or {}
local t = ply.mantletr
local h = ply.mantlehull
if ply:GetMantle() == 0 and !ply:OnGround() and mv:KeyDown(IN_FORWARD) and !mv:KeyDown(IN_DUCK) and !ply:Crouching() then
local ang = mv:GetAngles()
ang.x = 0 ang.z = 0
if !Vault1(ply, mv, ang, t, h) then
Vault2(ply, mv, ang, t, h)
end
end
if ply:GetMantle() != 0 then
mv:SetButtons(0)
mv:SetMaxClientSpeed(0)
mv:SetSideSpeed(0) mv:SetUpSpeed(0) mv:SetForwardSpeed(0)
mv:SetVelocity(vector_origin)
ply:SetMoveType(MOVETYPE_NOCLIP)
local mantletype = ply:GetMantle()
local mlerp = ply:GetMantleLerp()
local FT = FrameTime()
local TargetTick = (1/FT)/66.66
local mlerpend = ((mantletype == 1 and 0.8) or 0.75)
local mlerprate = ((mantletype == 1 and 0.075) or 0.1)/TargetTick
ply:SetMantleLerp(Lerp(mlerprate, mlerp, 1))
local mvec = LerpVector(ply:GetMantleLerp(), ply:GetMantleStartPos(), ply:GetMantleEndPos())
mv:SetOrigin(mvec)
if mlerp >= mlerpend or mvec:DistToSqr(ply:GetMantleEndPos()) < 280 then
if ply:GetMantle() == 2 then
local ang = mv:GetAngles()
ang.x = 0 ang.z = 0
mv:SetVelocity(ang:Forward() * 200)
end
ply:SetMantle(0)
ply:SetMoveType(MOVETYPE_WALK)
if SERVER and !ply:IsInWorld() then
mv:SetOrigin(ply:GetMantleStartPos())
end
h.start = mv:GetOrigin()
h.endpos = h.start
h.filter = ply
h.mask = MASK_PLAYERSOLID
h.mins, h.maxs = ply:GetCollisionBounds()
local hulltr = util.TraceHull(h)
if hulltr.Hit then
mv:SetOrigin(ply:GetMantleEndPos())
end
end
end
end)