Files
2026-03-15 14:54:49 +03:00

45 lines
1.2 KiB
Lua

local meta = FindMetaTable( "Entity" )
if not meta then return end
function meta:SetDamageOwner(ply)
self.dmg_owner = {ply = ply, t = CurTime()}
end
function meta:GetDamageOwner()
if self.dmg_owner then
return self.dmg_owner.ply, self.dmg_owner.t
end
end
function meta:IsExplosive()
local kv = self:GetKeyValues()["ExplodeDamage"]
return self:Health() > 0 and kv and kv > 0
end
-- Some sounds are important enough that they shouldn't be affected by CPASAttenuationFilter
function meta:BroadcastSound(snd, lvl, pitch, vol, channel, flags, dsp)
lvl = lvl or 75
local rf = RecipientFilter()
if lvl == 0 then
rf:AddAllPlayers()
else
-- Overriding the PAS filter means this will no longer check if players
-- are within audible range before sending them the sound message.
-- Instead, we reimplement this check in lua.
local pos = self:GetPos()
local attenuation = lvl > 50 and 20.0 / (lvl - 50) or 4.0
local maxAudible = math.min(2500, 2000 / attenuation)
for _, ply in player.Iterator() do
if (ply:EyePos() - pos):Length() > maxAudible then continue end
rf:AddPlayer(ply)
end
end
self:EmitSound(snd, lvl, pitch, vol, channel, flags, dsp, rf)
end