mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
85 lines
2.9 KiB
Lua
85 lines
2.9 KiB
Lua
|
|
--[[
|
||
|
|
| This file was obtained through the combined efforts
|
||
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
||
|
|
|
|
||
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
||
|
|
|
|
||
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
AddCSLuaFile()
|
||
|
|
|
||
|
|
ENT.Base = "arccw_uc_40mm_he"
|
||
|
|
ENT.PrintName = "40mm HE Dual Purpose Grenade"
|
||
|
|
|
||
|
|
ENT.GrenadeDamage = false
|
||
|
|
ENT.GrenadeRadius = 300
|
||
|
|
ENT.ExplosionEffect = false
|
||
|
|
ENT.Scorch = false
|
||
|
|
|
||
|
|
function ENT:DoDetonation()
|
||
|
|
local dir = self.GrenadeDir or self:GetVelocity():GetNormalized()
|
||
|
|
local attacker = IsValid(self:GetOwner()) and self:GetOwner() or self
|
||
|
|
local damage = self.GrenadeDamage or self.Damage or 0
|
||
|
|
local blastpos = self:GetPos()
|
||
|
|
local tr = util.TraceLine({
|
||
|
|
start = self:GetPos(),
|
||
|
|
endpos = self:GetPos() + dir * 64,
|
||
|
|
filter = self
|
||
|
|
})
|
||
|
|
if IsValid(tr.Entity) then
|
||
|
|
-- do impact damage
|
||
|
|
local dmg = DamageInfo()
|
||
|
|
dmg:SetAttacker(attacker)
|
||
|
|
dmg:SetInflictor(self)
|
||
|
|
dmg:SetDamage(damage * 10)
|
||
|
|
dmg:SetDamageForce(dir * 3000)
|
||
|
|
dmg:SetDamagePosition(tr.HitPos)
|
||
|
|
tr.Entity:TakeDamageInfo(dmg)
|
||
|
|
end
|
||
|
|
-- attempt to penetrate entity/world and place explosion behind
|
||
|
|
local tr2 = util.TraceLine({
|
||
|
|
start = tr.HitPos + dir * 69,
|
||
|
|
endpos = tr.HitPos,
|
||
|
|
filter = self,
|
||
|
|
})
|
||
|
|
|
||
|
|
if tr2.Hit and !tr2.StartSolid then
|
||
|
|
-- Produce a weaker blast on the pre-penetration side
|
||
|
|
util.BlastDamage(self, attacker, blastpos, self.GrenadeRadius, damage * 0.5)
|
||
|
|
|
||
|
|
blastpos = tr2.HitPos + dir * 16
|
||
|
|
self:EmitSound("physics/concrete/concrete_break2.wav", 100, 110)
|
||
|
|
local effectdata = EffectData()
|
||
|
|
effectdata:SetOrigin(self:GetPos())
|
||
|
|
effectdata:SetMagnitude(2)
|
||
|
|
effectdata:SetScale(1)
|
||
|
|
effectdata:SetRadius(2)
|
||
|
|
effectdata:SetNormal(-dir)
|
||
|
|
util.Effect("Sparks", effectdata)
|
||
|
|
effectdata:SetOrigin(blastpos)
|
||
|
|
effectdata:SetNormal(dir)
|
||
|
|
util.Effect("Sparks", effectdata)
|
||
|
|
end
|
||
|
|
|
||
|
|
local effectdata = EffectData()
|
||
|
|
effectdata:SetOrigin(blastpos)
|
||
|
|
|
||
|
|
if self:WaterLevel() >= 1 then
|
||
|
|
util.Effect("WaterSurfaceExplosion", effectdata)
|
||
|
|
self:EmitSound("weapons/underwater_explode3.wav", 125, 100, 1, CHAN_AUTO)
|
||
|
|
else
|
||
|
|
self:EmitSound(self.ExplosionSounds[math.random(1,#self.ExplosionSounds)], 125, 100, 1, CHAN_AUTO)
|
||
|
|
ParticleEffect("explosion_grenade_fas2", self:GetPos(), tr.HitNormal:Angle())
|
||
|
|
if tr2.Hit and !tr2.StartSolid then
|
||
|
|
ParticleEffect("explosion_he_m79_fas2", tr2.StartPos, tr.HitNormal:Angle() * -1)
|
||
|
|
end
|
||
|
|
if self.DebrisSounds then
|
||
|
|
self:EmitSound(self.DebrisSounds[math.random(1,#self.DebrisSounds)], 85, 100, 1, CHAN_AUTO)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
util.ScreenShake(self:GetPos(),25,4,.75,self.GrenadeRadius * 4)
|
||
|
|
util.BlastDamage(self, attacker, blastpos, self.GrenadeRadius, damage)
|
||
|
|
end
|