Files
VnUtest/garrysmod/addons/swbombs/lua/entities/sw_flare_v3.lua
2026-03-31 10:27:04 +03:00

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