mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
100 lines
2.6 KiB
Lua
100 lines
2.6 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
ArcCW.CSModels = {} -- [entid] = { Weapon = NULL, WModels = {}, VModels = {} }
|
|
ArcCW.CSModelPile = {} -- { {Model = NULL, Weapon = NULL} }
|
|
ArcCW.FlashlightPile = {} -- { {Weapon = NULL, ProjectedTexture = NULL}}
|
|
ArcCW.ReferenceModel = NULL
|
|
|
|
local function ArcCW_CollectGarbage()
|
|
local removed, removedents = 0, {}
|
|
|
|
for i, k in pairs(ArcCW.CSModels) do
|
|
if !IsValid(k.Weapon) then
|
|
removed = removed + 1
|
|
|
|
table.insert(removedents, i)
|
|
|
|
if k.WModels then for _, m in pairs(k.WModels) do SafeRemoveEntity(m.Model) end end
|
|
if k.VModels then for _, m in pairs(k.VModels) do SafeRemoveEntity(m.Model) end end
|
|
end
|
|
end
|
|
|
|
for _, i in pairs(removedents) do ArcCW.CSModels[i] = nil end
|
|
|
|
local newpile = {}
|
|
|
|
for _, k in pairs(ArcCW.CSModelPile) do
|
|
if IsValid(k.Weapon) then
|
|
table.insert(newpile, k)
|
|
|
|
continue
|
|
end
|
|
|
|
SafeRemoveEntity(k.Model)
|
|
|
|
removed = removed + 1
|
|
end
|
|
|
|
ArcCW.CSModelPile = newpile
|
|
|
|
if GetConVar("developer"):GetBool() and removed > 0 then
|
|
print("Removed " .. tostring(removed) .. " CSModels")
|
|
end
|
|
end
|
|
|
|
hook.Add("PostCleanupMap", "ArcCW_CleanGarbage", function()
|
|
ArcCW_CollectGarbage()
|
|
end)
|
|
|
|
timer.Create("ArcCW CSModel Garbage Collector", 5, 0, ArcCW_CollectGarbage)
|
|
|
|
hook.Add("PostDrawEffects", "ArcCW_CleanFlashlights", function()
|
|
local newflashlightpile = {}
|
|
|
|
for _, k in pairs(ArcCW.FlashlightPile) do
|
|
if IsValid(k.Weapon) and k.Weapon == LocalPlayer():GetActiveWeapon() then
|
|
table.insert(newflashlightpile, k)
|
|
|
|
continue
|
|
end
|
|
|
|
if k.ProjectedTexture and k.ProjectedTexture:IsValid() then
|
|
k.ProjectedTexture:Remove()
|
|
end
|
|
end
|
|
|
|
ArcCW.FlashlightPile = newflashlightpile
|
|
|
|
local wpn = LocalPlayer():GetActiveWeapon()
|
|
|
|
if !wpn then return end
|
|
if !IsValid(wpn) then return end
|
|
if !wpn.ArcCW then return end
|
|
|
|
if GetViewEntity() == LocalPlayer() then return end
|
|
|
|
wpn:KillFlashlightsVM()
|
|
end)
|
|
|
|
concommand.Add("arccw_dev_loadallattmodels", function()
|
|
local e = ClientsideModel("models/weapons/v_pistol.mdl")
|
|
print("created subject", e)
|
|
|
|
for i, v in pairs(ArcCW.AttachmentTable) do
|
|
if v.Model then
|
|
print("\t- " .. v.Model)
|
|
e:SetModel(v.Model)
|
|
end
|
|
end
|
|
|
|
print("removed subject", e)
|
|
e:Remove()
|
|
end) |