85 lines
2.8 KiB
Lua
85 lines
2.8 KiB
Lua
AddCSLuaFile()
|
|
|
|
ENT.Base = "tacrp_proj_base"
|
|
ENT.PrintName = "40mm 3GL"
|
|
ENT.Spawnable = false
|
|
|
|
ENT.Model = "models/weapons/tacint/grenade_40mm.mdl"
|
|
|
|
ENT.IsRocket = false // projectile has a booster and will not drop.
|
|
|
|
ENT.InstantFuse = false // projectile is armed immediately after firing.
|
|
ENT.RemoteFuse = false // allow this projectile to be triggered by remote detonator.
|
|
ENT.ImpactFuse = true // projectile explodes on impact.
|
|
|
|
ENT.ExplodeOnDamage = false // projectile explodes when it takes damage.
|
|
ENT.ExplodeUnderwater = true
|
|
|
|
ENT.Delay = 0
|
|
|
|
ENT.ExplodeSounds = {
|
|
"^TacRP/weapons/grenade/40mm_explode-1.wav",
|
|
"^TacRP/weapons/grenade/40mm_explode-2.wav",
|
|
"^TacRP/weapons/grenade/40mm_explode-3.wav",
|
|
}
|
|
|
|
ENT.AudioLoop = "TacRP/weapons/rpg7/rocket_flight-1.wav"
|
|
|
|
ENT.SmokeTrail = true
|
|
|
|
local smokeimages = {"particle/smokesprites_0001", "particle/smokesprites_0002", "particle/smokesprites_0003", "particle/smokesprites_0004", "particle/smokesprites_0005", "particle/smokesprites_0006", "particle/smokesprites_0007", "particle/smokesprites_0008", "particle/smokesprites_0009", "particle/smokesprites_0010", "particle/smokesprites_0011", "particle/smokesprites_0012", "particle/smokesprites_0013", "particle/smokesprites_0014", "particle/smokesprites_0015", "particle/smokesprites_0016"}
|
|
local function GetSmokeImage()
|
|
return smokeimages[math.random(#smokeimages)]
|
|
end
|
|
|
|
function ENT:Detonate(ent)
|
|
local attacker = self.Attacker or self:GetOwner() or self
|
|
local mult = TacRP.ConVars["mult_damage_explosive"]:GetFloat() * (self.NPCDamage and 0.5 or 1)
|
|
local dmg = 55
|
|
|
|
util.BlastDamage(self, attacker, self:GetPos(), 200, dmg * mult)
|
|
self:ImpactTraceAttack(ent, dmg * mult, 50)
|
|
|
|
local fx = EffectData()
|
|
fx:SetOrigin(self:GetPos())
|
|
|
|
if self:WaterLevel() > 0 then
|
|
util.Effect("WaterSurfaceExplosion", fx)
|
|
else
|
|
util.Effect("helicoptermegabomb", fx)
|
|
end
|
|
|
|
self:EmitSound(table.Random(self.ExplodeSounds), 100, math.Rand(103, 110))
|
|
|
|
self:Remove()
|
|
end
|
|
|
|
function ENT:DoSmokeTrail()
|
|
if CLIENT and self.SmokeTrail then
|
|
local emitter = ParticleEmitter(self:GetPos())
|
|
|
|
local smoke = emitter:Add(GetSmokeImage(), self:GetPos())
|
|
|
|
smoke:SetStartAlpha(50)
|
|
smoke:SetEndAlpha(0)
|
|
|
|
smoke:SetStartSize(10)
|
|
smoke:SetEndSize(math.Rand(20, 40))
|
|
|
|
smoke:SetRoll(math.Rand(-180, 180))
|
|
smoke:SetRollDelta(math.Rand(-1, 1))
|
|
|
|
smoke:SetPos(self:GetPos())
|
|
smoke:SetVelocity(-self:GetAngles():Forward() * 400 + (VectorRand() * 10))
|
|
|
|
smoke:SetColor(200, 200, 200)
|
|
smoke:SetLighting(true)
|
|
|
|
smoke:SetDieTime(math.Rand(0.5, 1))
|
|
|
|
smoke:SetGravity(Vector(0, 0, 0))
|
|
|
|
emitter:Finish()
|
|
end
|
|
end
|