ArcCW/lua/effects/arccw_muzzleeffect.lua
2023-09-02 13:01:15 -06:00

103 lines
2.6 KiB
Lua

function EFFECT:Init(data)
local pos = data:GetOrigin()
local wpn = data:GetEntity()
if !IsValid(wpn) then return end
local muzzle = wpn.MuzzleEffect
local overridemuzzle = wpn:GetBuff_Override("Override_MuzzleEffect")
local gmmuzzle = wpn:GetBuff_Override("Override_GMMuzzleEffect") or wpn.GMMuzzleEffect
muzzle = overridemuzzle or muzzle
if wpn.GetInUBGL and wpn:GetInUBGL() then
muzzle = wpn:GetBuff_Override("UBGL_MuzzleEffect") or muzzle
end
if ArcCW.ConVars["fastmuzzles"]:GetBool() then
muzzle = wpn.FastMuzzleEffect or "CS_MuzzleFlash"
gmmuzzle = true
if overridemuzzle then
muzzle = nil
end
muzzle = wpn:GetBuff_Override("Override_FastMuzzleEffect") or muzzle
end
local att = data:GetAttachment() or 1
local wm = false
local Owner = wpn:GetOwner()
if (LocalPlayer():ShouldDrawLocalPlayer() or Owner != LocalPlayer()) and !wpn.AlwaysWM then
wm = true
att = 1
end
if Owner != LocalPlayer() and !ArcCW.ConVars["muzzleeffects"]:GetBool() then
return
end
local mdl = wpn:GetMuzzleDevice(wm)
local parent = mdl
if !wm then
parent = LocalPlayer():GetViewModel()
end
if !IsValid(mdl) then return end
pos = (mdl:GetAttachment(att) or {}).Pos
ang = (mdl:GetAttachment(att) or {}).Ang
if gmmuzzle then
if muzzle then
if !pos then return end
local fx = EffectData()
fx:SetOrigin(pos)
fx:SetEntity(parent)
fx:SetAttachment(att)
fx:SetNormal((ang or Angle(0, 0, 0)):Forward())
fx:SetStart(pos)
fx:SetScale(1)
util.Effect(muzzle, fx)
end
else
if muzzle then
ParticleEffectAttach(muzzle, PATTACH_POINT_FOLLOW, mdl, att)
end
end
if !pos then return end
if !ArcCW.ConVars["fastmuzzles"]:GetBool() and !wpn.NoFlash
and !wpn:GetBuff_Override("Silencer")
and !wpn:GetBuff_Override("FlashHider") then
local light = DynamicLight(self:EntIndex())
local clr = wpn:GetBuff_Override("Override_MuzzleFlashColor", wpn.MuzzleFlashColor) or Color(244, 209, 66)
if (light) then
light.Pos = pos
light.r = clr.r
light.g = clr.g
light.b = clr.b
light.Brightness = 2
light.Decay = 2500
light.Size = Owner == LocalPlayer() and 256 or 128
light.DieTime = CurTime() + 0.1
end
end
end
function EFFECT:Think()
return false
end
function EFFECT:Render()
return false
end