add sborka
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
AddCSLuaFile()
|
||||
|
||||
ENT.Base = "tacrp_proj_p2a1_flare"
|
||||
ENT.PrintName = "P2A1 Parachute Flare"
|
||||
ENT.Spawnable = false
|
||||
|
||||
ENT.InstantFuse = true
|
||||
ENT.RemoteFuse = false
|
||||
ENT.ImpactFuse = false
|
||||
|
||||
ENT.ExplodeOnDamage = false // projectile explodes when it takes damage.
|
||||
ENT.ExplodeUnderwater = true
|
||||
|
||||
ENT.Delay = 2
|
||||
|
||||
ENT.Radius = 328
|
||||
|
||||
ENT.FlareColor = Color(255, 240, 240)
|
||||
|
||||
function ENT:Detonate(ent)
|
||||
local attacker = self.Attacker or self:GetOwner()
|
||||
|
||||
local fx = EffectData()
|
||||
fx:SetOrigin(self:GetPos())
|
||||
|
||||
if self:WaterLevel() > 0 then
|
||||
util.Effect("WaterSurfaceExplosion", fx)
|
||||
else
|
||||
self:EmitSound("tacint_extras/p2a1/confetti.wav", 80, 80)
|
||||
end
|
||||
|
||||
local cloud = ents.Create("tacrp_flare_cloud_para")
|
||||
|
||||
if !IsValid(cloud) then return end
|
||||
|
||||
cloud:SetPos(self:GetPos())
|
||||
cloud:SetAngles(self:GetAngles())
|
||||
cloud:SetOwner(attacker)
|
||||
timer.Simple(0, function()
|
||||
cloud:Spawn()
|
||||
if IsValid(self:GetParent()) then
|
||||
cloud:SetParent(self:GetParent())
|
||||
elseif self:GetMoveType() == MOVETYPE_NONE then
|
||||
cloud:SetMoveType(MOVETYPE_NONE)
|
||||
else
|
||||
cloud:GetPhysicsObject():SetVelocityInstantaneous(self:GetVelocity() * 1 + Vector(math.Rand(-64, 64), math.Rand(-64, 64), 256))
|
||||
end
|
||||
self:Remove()
|
||||
end)
|
||||
end
|
||||
|
||||
local mat = Material("effects/ar2_altfire1b")
|
||||
function ENT:Draw()
|
||||
if !self.Light and TacRP.ConVars["dynamiclight"]:GetBool() then
|
||||
self.Light = DynamicLight(self:EntIndex() + 1)
|
||||
if (self.Light) then
|
||||
self.Light.Pos = self:GetPos()
|
||||
self.Light.r = 255
|
||||
self.Light.g = 200
|
||||
self.Light.b = 100
|
||||
self.Light.Brightness = 0.5
|
||||
self.Light.Size = 728
|
||||
self.Light.DieTime = CurTime() + 2
|
||||
end
|
||||
elseif self.Light then
|
||||
self.Light.Pos = self:GetPos()
|
||||
end
|
||||
|
||||
render.SetMaterial(mat)
|
||||
render.DrawSprite(self:GetPos(), math.Rand(self.FlareSizeMin, self.FlareSizeMax), math.Rand(self.FlareSizeMin, self.FlareSizeMax), self.FlareColor)
|
||||
end
|
||||
|
||||
function ENT:DoSmokeTrail()
|
||||
if CLIENT and self.SmokeTrail and !(self:GetOwner() == LocalPlayer() and (self.SpawnTime + 0.1) > CurTime()) then
|
||||
local emitter = ParticleEmitter(self:GetPos())
|
||||
|
||||
local smoke = emitter:Add("particles/smokey", self:GetPos())
|
||||
|
||||
smoke:SetStartAlpha(30)
|
||||
smoke:SetEndAlpha(0)
|
||||
|
||||
smoke:SetStartSize(4)
|
||||
smoke:SetEndSize(math.Rand(30, 40))
|
||||
|
||||
smoke:SetRoll(math.Rand(-180, 180))
|
||||
smoke:SetRollDelta(math.Rand(-1, 1))
|
||||
|
||||
smoke:SetPos(self:GetPos())
|
||||
smoke:SetVelocity(VectorRand() * 4)
|
||||
|
||||
smoke:SetColor(255, 50, 25)
|
||||
smoke:SetLighting(false)
|
||||
smoke:SetDieTime(math.Rand(3.5, 4.5))
|
||||
smoke:SetGravity(Vector(0, 0, -7))
|
||||
smoke:SetNextThink( CurTime() + FrameTime() )
|
||||
smoke:SetThinkFunction( function(pa)
|
||||
if !pa then return end
|
||||
local col1 = Color(255, 200, 150)
|
||||
local col2 = Color(255, 255, 225)
|
||||
|
||||
local col3 = col1
|
||||
local d = pa:GetLifeTime() / pa:GetDieTime()
|
||||
col3.r = Lerp(d, col1.r, col2.r)
|
||||
col3.g = Lerp(d, col1.g, col2.g)
|
||||
col3.b = Lerp(d, col1.b, col2.b)
|
||||
|
||||
pa:SetColor(col3.r, col3.g, col3.b)
|
||||
pa:SetNextThink( CurTime() + FrameTime() )
|
||||
end )
|
||||
|
||||
emitter:Finish()
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user