174 lines
4.5 KiB
Lua
174 lines
4.5 KiB
Lua
AddCSLuaFile()
|
|
ENT.Type = "anim"
|
|
ENT.SWBombV3 = true
|
|
ENT.Author = "Shermann Wolf"
|
|
ENT.Contact = "shermannwolf@gmail.com"
|
|
ENT.PrintName = "Flare"
|
|
ENT.Purpose = ""
|
|
ENT.Instructions = ""
|
|
ENT.Spawnable = false
|
|
ENT.AdminSpawnable = false
|
|
ENT.Model = "models/sw/shared/flare.mdl"
|
|
|
|
function ENT:Initialize()
|
|
self:SetModel( self.Model)
|
|
self:PhysicsInit( SOLID_VPHYSICS )
|
|
self:SetMoveType( MOVETYPE_VPHYSICS )
|
|
self:SetSolid( SOLID_VPHYSICS )
|
|
self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
|
|
local pObj = self:GetPhysicsObject()
|
|
pObj:SetMass( 1 )
|
|
pObj:EnableGravity( true )
|
|
pObj:EnableMotion( true )
|
|
pObj:EnableDrag( true )
|
|
pObj:SetDragCoefficient(0)
|
|
pObj:Wake()
|
|
timer.Simple(3,function()
|
|
if IsValid(self) then
|
|
self:Remove()
|
|
end
|
|
end)
|
|
end
|
|
function ENT:Think()
|
|
for k,v in pairs( ents.FindInSphere( self:GetPos(), math.random(1500,2000) ) ) do
|
|
if( IsValid( v ) && IsValid( v.Target ) ) && !string.EndsWith(tostring(v.Target), "gtav_cm_flare]") then
|
|
local tr = util.TraceLine( {
|
|
start = self:GetPos(),
|
|
endpos = v:GetPos(),
|
|
} )
|
|
if tr.Hit and tr.Entity == v then
|
|
v.Target = self
|
|
if IsFirstTimePredicted() then
|
|
timer.Simple(2,function()
|
|
if IsValid(v) then
|
|
v:Detonate()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
if ( IsValid(v) ) and v.IsRocket and (v.JDAM or v.GuidanceActive) then
|
|
local tr = util.TraceLine( {
|
|
start = self:GetPos(),
|
|
endpos = v:GetPos(),
|
|
} )
|
|
if tr.Hit and tr.Entity == v then
|
|
self:SetNWEntity("TarRocket",v)
|
|
v.target = (self)
|
|
if v.lg == true then
|
|
v.lg = false
|
|
v.target = (self)
|
|
end
|
|
if v.LaserGuided == true then
|
|
v.LaserGuided = false
|
|
v.target = (self)
|
|
end
|
|
end
|
|
end
|
|
if ( IsValid(v) ) and v:GetClass() == "lunasflightschool_missile" and IsValid(v:GetLockOn()) then
|
|
local tr = util.TraceLine( {
|
|
start = self:GetPos(),
|
|
endpos = v:GetPos(),
|
|
} )
|
|
if tr.Hit and tr.Entity == v then
|
|
v:SetLockOn( self )
|
|
if IsFirstTimePredicted() then
|
|
timer.Simple(4,function()
|
|
if IsValid(v) then
|
|
v:Detonate()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
if ( IsValid(v) ) and v:GetClass() == "lvs_missile" and IsValid(v:GetNWTarget()) then
|
|
local tr = util.TraceLine( {
|
|
start = self:GetPos(),
|
|
endpos = v:GetPos(),
|
|
} )
|
|
if tr.Hit and tr.Entity == v then
|
|
v:SetNWTarget( self )
|
|
end
|
|
end
|
|
if ( IsValid(v) ) and v:GetClass() == "dronesrewrite_rocketbig" then
|
|
local tr = util.TraceLine( {
|
|
start = self:GetPos(),
|
|
endpos = v:GetPos(),
|
|
} )
|
|
if tr.Hit and tr.Entity == v then
|
|
v.Enemy = self
|
|
if IsFirstTimePredicted() then
|
|
timer.Simple(1,function()
|
|
if IsValid(v) then
|
|
v:Boom()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
if ( IsValid(v) ) and v:GetClass() == "rpg_missile" then
|
|
local tr = util.TraceLine( {
|
|
start = self:GetPos(),
|
|
endpos = v:GetPos(),
|
|
} )
|
|
if tr.Hit and tr.Entity == v then
|
|
local d = DamageInfo()
|
|
d:SetDamage( 100 )
|
|
d:SetAttacker(self)
|
|
d:SetDamageType( DMG_MISSILEDEFENSE )
|
|
v:TakeDamageInfo( d )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if CLIENT then
|
|
local emitter = ParticleEmitter(Vector(0, 0, 0))
|
|
function ENT:Initialize()
|
|
self.lifetime = RealTime()
|
|
self.cooltime = CurTime()
|
|
end
|
|
function ENT:Draw()
|
|
self:DrawModel()
|
|
end
|
|
function ENT:Think()
|
|
local dist = 0
|
|
if (self.cooltime < CurTime()) then
|
|
local smoke = emitter:Add("effects/smoke_a", self:GetPos() + self:GetForward()*-dist)
|
|
smoke:SetVelocity(self:GetForward()*-10)
|
|
smoke:SetDieTime(math.Rand(1,3.5))
|
|
smoke:SetStartAlpha(150)
|
|
smoke:SetEndAlpha(0)
|
|
smoke:SetStartSize(90)
|
|
smoke:SetEndSize(30)
|
|
smoke:SetRoll(math.Rand(180,480))
|
|
smoke:SetRollDelta(math.Rand(-4,2))
|
|
smoke:SetGravity( Vector( 0, math.random(1,90), math.random(151,355) ) )
|
|
smoke:SetColor( 135,135, 135 )
|
|
smoke:SetAirResistance(50)
|
|
local fire = emitter:Add("effects/yellowflare", self:GetPos() + self:GetForward()*-dist)
|
|
fire:SetVelocity(self:GetForward()*-10)
|
|
fire:SetDieTime(math.Rand(.25,.35))
|
|
fire:SetStartAlpha(250)
|
|
fire:SetEndAlpha(250)
|
|
fire:SetStartSize(150)
|
|
fire:SetEndSize(50)
|
|
fire:SetAirResistance(150)
|
|
fire:SetRoll(math.Rand(180,480))
|
|
fire:SetRollDelta(math.Rand(-3,3))
|
|
fire:SetColor(220,150,0)
|
|
self.cooltime = CurTime() + .0001
|
|
end
|
|
end
|
|
end
|
|
function ENT:OnRemove()
|
|
if IsValid(self:GetNWEntity("TarRocket")) then
|
|
self:GetNWEntity("TarRocket").JDAM = false
|
|
self:GetNWEntity("TarRocket").GuidanceActive = false
|
|
end
|
|
end
|
|
function ENT:PhysicsUpdate()
|
|
end
|
|
function ENT:PhysicsCollide()
|
|
end
|