Files
wnsrc/lua/includes/modules/cleanup.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

252 lines
4.7 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/
--]]
module( "cleanup", package.seeall )
local cleanup_types = {}
local function IsType( type )
for key, val in pairs( cleanup_types ) do
if ( val == type ) then return true end
end
return false
end
function Register( type )
if ( type == "all" ) then return end
for key, val in pairs( cleanup_types ) do
if val == type then return end
end
table.insert( cleanup_types, type )
end
function GetTable()
return cleanup_types
end
if ( SERVER ) then
local cleanup_list = {}
function GetList()
return cleanup_list
end
local function Save( save )
saverestore.WriteTable( cleanup_list, save )
end
local function Restore( restore )
cleanup_list = saverestore.ReadTable( restore )
end
saverestore.AddSaveHook( "CleanupTable", Save )
saverestore.AddRestoreHook( "CleanupTable", Restore )
function Add( pl, type, ent )
if ( !ent ) then return end
if ( !IsType( type ) ) then return end
local id = pl:UniqueID()
cleanup_list[ id ] = cleanup_list[ id ] or {}
cleanup_list[ id ][ type ] = cleanup_list[ id ][ type ] or {}
if ( !IsValid( ent ) ) then return end
table.insert( cleanup_list[ id ][ type ], ent )
end
function ReplaceEntity( from, to )
local ActionTaken = false
for _, PlayerTable in pairs( cleanup_list ) do
for _, TypeTable in pairs( PlayerTable ) do
for key, ent in pairs( TypeTable ) do
if ( ent == from ) then
TypeTable[ key ] = to
ActionTaken = true
end
end
end
end
return ActionTaken
end
function CC_Cleanup( pl, command, args )
if ( !IsValid( pl ) ) then return end
local id = pl:UniqueID()
if ( !cleanup_list[ id ] ) then return end
if ( !args[ 1 ] ) then
local count = 0
for key, val in pairs( cleanup_list[ id ] ) do
for _, ent in pairs( val ) do
if ( IsValid( ent ) ) then ent:Remove() end
count = count + 1
end
table.Empty( val )
end
-- Send tooltip command to client
if ( count > 0 ) then
pl:SendLua( "hook.Run('OnCleanup','all')" )
end
return
end
if ( !IsType( args[1] ) ) then return end
if ( !cleanup_list[id][ args[1] ] ) then return end
for key, ent in pairs( cleanup_list[id][ args[1] ] ) do
if ( IsValid( ent ) ) then ent:Remove() end
end
table.Empty( cleanup_list[id][ args[1] ] )
-- Send tooltip command to client
pl:SendLua( string.format( "hook.Run('OnCleanup',%q)", args[1] ) )
end
function CC_AdminCleanup( pl, command, args )
if ( IsValid( pl ) && !pl:IsAdmin() ) then return end
if ( !args[ 1 ] ) then
for key, ply in pairs( cleanup_list ) do
for _, type in pairs( ply ) do
for __, ent in pairs( type ) do
if ( IsValid( ent ) ) then ent:Remove() end
end
table.Empty( type )
end
end
game.CleanUpMap( false, nil, function()
-- Send tooltip command to client
if ( IsValid( pl ) ) then pl:SendLua( "hook.Run('OnCleanup','all')" ) end
end )
return
end
if ( !IsType( args[ 1 ] ) ) then return end
for key, ply in pairs( cleanup_list ) do
if ( ply[ args[ 1 ] ] != nil ) then
for id, ent in pairs( ply[ args[ 1 ] ] ) do
if ( IsValid( ent ) ) then ent:Remove() end
end
table.Empty( ply[ args[ 1 ] ] )
end
end
-- Send tooltip command to client
if ( IsValid( pl ) ) then pl:SendLua( string.format( "hook.Run('OnCleanup',%q)", args[1] ) ) end
end
concommand.Add( "gmod_cleanup", CC_Cleanup, nil, "", { FCVAR_DONTRECORD } )
concommand.Add( "gmod_admin_cleanup", CC_AdminCleanup, nil, "", { FCVAR_DONTRECORD } )
else
function UpdateUI()
local cleanup_types_s = {}
for id, val in pairs( cleanup_types ) do
cleanup_types_s[ language.GetPhrase( "Cleanup_" .. val ) ] = val
end
local Panel = controlpanel.Get( "User_Cleanup" )
if ( IsValid( Panel ) ) then
Panel:Clear()
Panel:AddControl( "Header", { Description = "#spawnmenu.utilities.cleanup.help" } )
Panel:Button( "#CleanupAll", "gmod_cleanup" )
for key, val in SortedPairs( cleanup_types_s ) do
Panel:Button( key, "gmod_cleanup", val )
end
end
local AdminPanel = controlpanel.Get( "Admin_Cleanup" )
if ( IsValid( AdminPanel ) ) then
AdminPanel:Clear()
AdminPanel:AddControl( "Header", { Description = "#spawnmenu.utilities.cleanup.help" } )
AdminPanel:Button( "#CleanupAll", "gmod_admin_cleanup" )
for key, val in SortedPairs( cleanup_types_s ) do
AdminPanel:Button( key, "gmod_admin_cleanup", val )
end
end
end
hook.Add( "PostReloadToolsMenu", "BuildCleanupUI", UpdateUI )
end