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,201 @@
AddCSLuaFile()
ENT.Type = "anim"
ENT.DoNotDuplicate = true
function ENT:SetupDataTables()
self:NetworkVar( "Entity",0, "Base" )
end
if SERVER then
function ENT:AddToGibList( ent )
if not istable( self._GibList ) then self._GibList = {} end
table.insert( self._GibList, ent )
end
function ENT:GetGibList()
return self._GibList or {}
end
function ENT:SpawnGib( LeftOrRight )
local base = self:GetBase()
local options = {
[LVS.WHEELTYPE_LEFT] = "left",
[LVS.WHEELTYPE_RIGHT] = "right"
}
local side = options[ LeftOrRight ]
if not side or not IsValid( base ) or not istable( base.TrackGibs ) or not base.TrackGibs[ side ] then return end
local vel = self:GetVelocity()
for _, data in pairs( base.TrackGibs[ side ] ) do
local IsRagdoll = util.IsValidRagdoll( data.mdl )
local class = IsRagdoll and "prop_ragdoll" or "prop_physics"
local ent = ents.Create( class )
if not IsValid( ent ) then continue end
ent:SetModel( data.mdl )
ent:SetPos( self:LocalToWorld( data.pos ) )
ent:SetAngles( self:LocalToWorldAngles( data.ang ) )
ent:Spawn()
ent:Activate()
ent:SetCollisionGroup( COLLISION_GROUP_DEBRIS )
ent:EmitSound("lvs/tracks_break"..math.random(1,3)..".wav")
if IsRagdoll then
for i = 1, (ent:GetPhysicsObjectCount() - 1) do
local bone = ent:GetPhysicsObjectNum( i )
if not IsValid( bone ) then continue end
bone:AddVelocity( vel )
end
else
local PhysObj = ent:GetPhysicsObject()
if IsValid( PhysObj ) then
PhysObj:AddVelocity( vel )
end
end
self:DeleteOnRemove( ent )
self:AddToGibList( ent )
timer.Simple( 59.5, function()
if not IsValid( ent ) then return end
ent:SetRenderMode( RENDERMODE_TRANSCOLOR )
ent:SetRenderFX( kRenderFxFadeFast )
end )
timer.Simple( 60, function()
if not IsValid( ent ) then return end
ent:Remove()
end )
end
end
function ENT:ClearGib()
local Gibs = self:GetGibList()
for _, ent in pairs( Gibs ) do
if not IsValid( ent ) then continue end
ent:Remove()
end
table.Empty( Gibs )
end
function ENT:Initialize()
self:SetUseType( SIMPLE_USE )
self:PhysicsInit( SOLID_VPHYSICS )
self:AddEFlags( EFL_NO_PHYSCANNON_INTERACTION )
-- this is so vj npcs can still see us
self:AddEFlags( EFL_DONTBLOCKLOS )
self:SetCollisionGroup( COLLISION_GROUP_WORLD )
self:DrawShadow( false )
self:SetMaterial( "models/wireframe" )
local PhysObj = self:GetPhysicsObject()
if not IsValid( PhysObj ) then return end
PhysObj:SetMass( 1 )
PhysObj:EnableDrag( false )
PhysObj:EnableGravity( false )
PhysObj:EnableMotion( true )
PhysObj:SetMaterial( "friction_00" )
end
function ENT:Think()
return false
end
function ENT:OnTakeDamage( dmginfo )
local base = self:GetBase()
if not IsValid( base ) then return end
local Force = dmginfo:GetDamageForce()
local fLength = Force:Length()
-- translate force value to armor penetration value is Force * 0.1
-- mm to inch is * 0.0393701
-- so correct value is * 0.00393701
local pLength = fLength * 0.00393701
local startpos = dmginfo:GetDamagePosition()
local endpos = startpos + Force:GetNormalized() * pLength
local trace = util.TraceLine( {
start = startpos,
endpos = endpos,
whitelist = true,
ignoreworld = true,
filter = base,
} )
if trace.Hit then
dmginfo:SetDamagePosition( trace.HitPos )
else
dmginfo:SetDamageType( dmginfo:GetDamageType() + DMG_PREVENT_PHYSICS_FORCE )
end
base:OnTakeDamage( dmginfo )
end
function ENT:PhysicsCollide( data, physobj )
local HitEntity = data.HitEntity
local HitObject = data.HitObject
if not IsValid( HitEntity ) or not IsValid( HitObject ) then return end
physobj:SetVelocityInstantaneous( data.OurOldVelocity )
if HitObject:IsMotionEnabled() and (HitEntity:GetClass() == "prop_ragdoll" or HitEntity:GetCollisionGroup() == COLLISION_GROUP_WEAPON) then
HitObject:SetVelocityInstantaneous( data.OurOldVelocity * 2 )
end
end
function ENT:Use( ply )
if (ply._lvsNextUse or 0) > CurTime() then return end
local base = self:GetBase()
if not IsValid( base ) then return end
base:Use( ply )
end
function ENT:OnRemove()
self:ClearGib()
end
return
end
function ENT:Draw()
if not LVS.DeveloperEnabled then return end
self:DrawModel()
end
function ENT:Think()
end
function ENT:OnRemove()
end