function EFFECT:Init(data)
    local wpn = data:GetEntity()

    if !IsValid(wpn) then self:Remove() return end

    if wpn:GetOwner() == LocalPlayer() and wpn:GetValue("ScopeHideWeapon") and wpn:IsInScope() then
        self:Remove()
        return
    end

    local muzzle = TacRP.MuzzleEffects[data:GetFlags() or 1] or "muzzleflash_pistol"
    if wpn.GetValue then
        muzzle = wpn:GetValue("MuzzleEffect")
    end

    local att = data:GetAttachment() or 1

    local wm = false

    if (LocalPlayer():ShouldDrawLocalPlayer() or wpn.Owner != LocalPlayer()) then
        wm = true
        att = data:GetHitBox()
    end

    local parent = wpn

    if !wm then
        parent = LocalPlayer():GetViewModel()
    end

    if wpn.GetMuzzleDevice then
        parent = wpn:GetMuzzleDevice(wm)
    else
        parent = self
    end

    -- if !IsValid(parent) then return end

    if muzzle then
        if !istable(muzzle) then
            muzzle = {muzzle}
        end

        for _, muzzleeffect in ipairs(muzzle) do
            local pcf = CreateParticleSystem(muz or parent, muzzleeffect, PATTACH_POINT_FOLLOW, att)

            if IsValid(pcf) then
                pcf:StartEmission()

                if (muz or parent) != vm and !wm then
                    pcf:SetShouldDraw(false)
                    table.insert(wpn.MuzzPCFs, pcf)
                end
            end
        end
    end
end

function EFFECT:Think()
    return false
end

function EFFECT:Render()
    return false
end
