83 lines
2.2 KiB
Lua
83 lines
2.2 KiB
Lua
AddCSLuaFile("cl_init.lua")
|
|
AddCSLuaFile("shared.lua")
|
|
|
|
include("shared.lua")
|
|
|
|
ENT.smokeSound = nil
|
|
|
|
function ENT:Initialize()
|
|
self:SetModel("models/dav0r/hoverball.mdl")
|
|
--[[self:PhysicsInit(SOLID_VPHYSICS)
|
|
self:GetPhysicsObject():EnableMotion(false)
|
|
self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)]]
|
|
self:AddFlags(FL_GRENADE)
|
|
self:AddFlags(FL_ONFIRE)
|
|
|
|
local repFil = RecipientFilter()
|
|
repFil:AddAllPlayers()
|
|
|
|
self.smokeSound = CreateSound(self, "MW19_Crossbow.GasOn", repFil)
|
|
self.smokeSound:Play()
|
|
|
|
self:EmitSound("MW19_Crossbow.GasExplode")
|
|
|
|
ParticleEffectAttach("arrow_gas_dust", PATTACH_ABSORIGIN_FOLLOW, self, 0)
|
|
ParticleEffect("arrow_gas_explode", self:GetPos(), self:GetAngles(), self, 0)
|
|
|
|
self:SetParent(NULL) --detaching from whatever we nailed on
|
|
sound.EmitHint(SOUND_DANGER, self:GetPos(), self.GasRadius * 2, self.LifeTime, nil) --make shit run away (nil owner so even rebels run)
|
|
end
|
|
|
|
local function doesEntityBreathe(ent)
|
|
return ent:GetBloodColor() != BLOOD_COLOR_MECH && ent:GetBloodColor() != DONT_BLEED
|
|
end
|
|
|
|
function ENT:Think()
|
|
if (CurTime() > self:GetCreationTime() + (self.LifeTime - 2)) then
|
|
self:StopGas()
|
|
end
|
|
|
|
if (CurTime() - self:GetCreationTime() > self.LifeTime) then
|
|
self:Remove()
|
|
return
|
|
end
|
|
|
|
for _, e in pairs(ents.FindInSphere(self:GetPos(), self.GasRadius)) do
|
|
if (e:IsPlayer() || e:IsNPC() || e:IsNextBot()) then
|
|
if (!doesEntityBreathe(e) || !e:IsLineOfSightClear(self:GetPos())) then
|
|
continue
|
|
end
|
|
|
|
local dmgInfo = DamageInfo()
|
|
dmgInfo:SetAttacker(self:GetOwner())
|
|
dmgInfo:SetDamage(8)
|
|
dmgInfo:SetDamageType(DMG_NERVEGAS)
|
|
dmgInfo:SetInflictor(self)
|
|
e:TakeDamageInfo(dmgInfo)
|
|
end
|
|
end
|
|
|
|
self:NextThink(CurTime() + 0.25)
|
|
return true
|
|
end
|
|
|
|
function ENT:OnRemove()
|
|
self:StopGas()
|
|
end
|
|
|
|
ENT.bStoppedGas = false
|
|
|
|
function ENT:StopGas()
|
|
if (self.bStoppedGas) then
|
|
return
|
|
end
|
|
|
|
self.bStoppedGas = true
|
|
|
|
if (self.smokeSound != nil) then
|
|
self.smokeSound:Stop()
|
|
end
|
|
|
|
self:StopParticles()
|
|
sound.Play("MW19_Crossbow.GasOff", self:GetPos())
|
|
end |