Initial commit
This commit is contained in:
45
gamemodes/terrortown/gamemode/entity.lua
Normal file
45
gamemodes/terrortown/gamemode/entity.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
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
|
||||
Reference in New Issue
Block a user