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

92 lines
2.7 KiB
Lua

AddCSLuaFile()
ENT.Base = "tacrp_proj_base"
ENT.PrintName = "C4"
ENT.Spawnable = false
ENT.Model = "models/weapons/tacint/c4_charge-1.mdl"
ENT.Sticky = true
ENT.IsRocket = false // projectile has a booster and will not drop.
ENT.InstantFuse = false // projectile is armed immediately after firing.
ENT.RemoteFuse = true // allow this projectile to be triggered by remote detonator.
ENT.ImpactFuse = false // projectile explodes on impact.
ENT.ExplodeOnDamage = false // projectile explodes when it takes damage.
ENT.ExplodeUnderwater = false
ENT.Defusable = true
ENT.DefuseOnDamage = true
ENT.ImpactDamage = 0
ENT.Delay = 0.5
ENT.PickupAmmo = "ti_c4"
ENT.ExplodeSounds = {
"TacRP/weapons/breaching_charge-1.wav"
}
function ENT:Detonate()
local attacker = self.Attacker or self:GetOwner() or self
local dmg = TacRP.ConVars["c4_damage"]:GetFloat()
local rad = TacRP.ConVars["c4_radius"]:GetFloat()
local p = self:GetPos() + self:GetForward() * 8
util.BlastDamage(self, attacker, p, rad / 2, dmg)
util.BlastDamage(self, attacker, p, rad, dmg)
local fx = EffectData()
fx:SetOrigin(p)
if self:WaterLevel() > 0 then
util.Effect("WaterSurfaceExplosion", fx)
else
util.Effect("Explosion", fx)
if rad >= 400 then
local count = 8
for i = 1, count do
local tr = util.TraceLine({
start = p,
endpos = p + Angle(0, i / count * 360, 0):Forward() * (rad - 200) * math.Rand(0.9, 1.1),
mask = MASK_SHOT,
filter = self,
})
fx:SetOrigin(tr.HitPos)
util.Effect("HelicopterMegaBomb", fx)
end
end
end
self:EmitSound(table.Random(self.ExplodeSounds), 125)
self:SetParent(NULL)
for _, door in pairs(ents.FindInSphere(self:GetPos(), 256)) do
if IsValid(door) and string.find(door:GetClass(), "door") and !door.TacRP_DoorBusted then
local vel = (door:GetPos() - self:GetPos()):GetNormalized() * 200000
for _, otherDoor in pairs(ents.FindInSphere(door:GetPos(), 72)) do
if door != otherDoor and otherDoor:GetClass() == door:GetClass() then
TacRP.DoorBust(otherDoor, vel, attacker)
break
end
end
TacRP.DoorBust(door, vel, attacker)
end
end
self:Remove()
end
function ENT:Stuck()
// you are already dead
if IsValid(self:GetParent()) and self:GetParent():IsPlayer() and !IsValid(self:GetParent().nadescream) then
self:GetParent().nadescream = self
self:GetParent():EmitSound("vo/npc/male01/ohno.wav")
end
end