add sborka
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
AddCSLuaFile()
|
||||
|
||||
ENT.Type = "anim"
|
||||
|
||||
ENT.Spawnable = false
|
||||
ENT.AdminSpawnable = false
|
||||
ENT.DoNotDuplicate = true
|
||||
|
||||
ENT._LVS = true
|
||||
|
||||
function ENT:SetupDataTables()
|
||||
self:NetworkVar( "Entity",0, "Base" )
|
||||
self:NetworkVar( "Float",1, "HP" )
|
||||
self:NetworkVar( "Float",2, "MaxHP" )
|
||||
|
||||
self:NetworkVar( "Bool",0, "Destroyed" )
|
||||
|
||||
if SERVER then
|
||||
self:SetMaxHP( 100 )
|
||||
self:SetHP( 100 )
|
||||
end
|
||||
end
|
||||
|
||||
if SERVER then
|
||||
function ENT:Initialize()
|
||||
self:SetMoveType( MOVETYPE_NONE )
|
||||
self:SetSolid( SOLID_NONE )
|
||||
self:DrawShadow( false )
|
||||
debugoverlay.Cross( self:GetPos(), 50, 5, Color( 0, 255, 255 ) )
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
local T = CurTime()
|
||||
local vehicle = self:GetBase()
|
||||
|
||||
if not self:GetDestroyed() or not IsValid( vehicle ) or not vehicle:GetEngineActive() then self:NextThink( T + 1 ) return true end
|
||||
|
||||
local PhysObj = vehicle:GetPhysicsObject()
|
||||
|
||||
local Pos = self:GetPos()
|
||||
local Len = vehicle:WorldToLocal( Pos ):Length()
|
||||
|
||||
PhysObj:ApplyForceOffset( -vehicle:GetVelocity() * (PhysObj:GetMass() / Len) * FrameTime() * 50, Pos )
|
||||
|
||||
self:NextThink( T )
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT:OnTakeDamage( dmginfo )
|
||||
if self:GetDestroyed() then return end
|
||||
|
||||
local Damage = dmginfo:GetDamage()
|
||||
|
||||
if Damage <= 0 then return end
|
||||
|
||||
local CurHealth = self:GetHP()
|
||||
|
||||
local NewHealth = math.Clamp( CurHealth - Damage, 0, self:GetMaxHP() )
|
||||
|
||||
self:SetHP( NewHealth )
|
||||
|
||||
if NewHealth <= 0 then
|
||||
self:SetDestroyed( true )
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:UpdateTransmitState()
|
||||
return TRANSMIT_ALWAYS
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
function ENT:Initialize()
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
local vehicle = self:GetBase()
|
||||
|
||||
if not IsValid( vehicle ) then return end
|
||||
|
||||
self:DamageFX( vehicle )
|
||||
end
|
||||
|
||||
function ENT:OnRemove()
|
||||
end
|
||||
|
||||
function ENT:Draw()
|
||||
end
|
||||
|
||||
function ENT:DrawTranslucent()
|
||||
end
|
||||
|
||||
function ENT:DamageFX( vehicle )
|
||||
local T = CurTime()
|
||||
local HP = vehicle:GetHP()
|
||||
local MaxHP = vehicle:GetMaxHP()
|
||||
|
||||
if HP <= 0 then return end
|
||||
|
||||
if (self.nextDFX or 0) > T then return end
|
||||
|
||||
self.nextDFX = T + 0.05
|
||||
|
||||
local Destroyed = self:GetDestroyed()
|
||||
|
||||
if Destroyed or HP < MaxHP * 0.5 then
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( self:GetPos() )
|
||||
effectdata:SetEntity( vehicle )
|
||||
util.Effect( "lvs_engine_blacksmoke", effectdata )
|
||||
end
|
||||
|
||||
if not Destroyed then return end
|
||||
|
||||
if HP < MaxHP * 0.5 then
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( self:GetPos() )
|
||||
effectdata:SetNormal( -self:GetForward() )
|
||||
effectdata:SetMagnitude( 2 )
|
||||
effectdata:SetEntity( vehicle )
|
||||
util.Effect( "lvs_exhaust_fire", effectdata )
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user