ToolObj = {} include( 'ghostentity.lua' ) include( 'object.lua' ) if ( CLIENT ) then include( 'stool_cl.lua' ) end function ToolObj:Create() local o = {} setmetatable( o, self ) self.__index = self o.Mode = nil o.SWEP = nil o.Owner = nil o.ClientConVar = {} o.ServerConVar = {} o.Objects = {} o.Stage = 0 o.Message = "start" o.LastMessage = 0 o.AllowedCVar = 0 return o end function ToolObj:CreateConVars() local mode = self:GetMode() if ( CLIENT ) then for cvar, default in pairs( self.ClientConVar ) do CreateClientConVar( mode.."_"..cvar, default, true, true ) end return end // Note: I changed this from replicated because replicated convars don't work // when they're created via Lua. if ( SERVER ) then self.AllowedCVar = CreateConVar( "toolmode_allow_"..mode, 1, FCVAR_NOTIFY ) end end function ToolObj:GetServerInfo( property ) local mode = self:GetMode() return GetConVarString( mode.."_"..property ) end function ToolObj:GetClientInfo( property ) local mode = self:GetMode() return self:GetOwner():GetInfo( mode.."_"..property ) end function ToolObj:GetClientNumber( property, default ) default = default or 0 local mode = self:GetMode() return self:GetOwner():GetInfoNum( mode.."_"..property, default ) end function ToolObj:Allowed() if ( CLIENT ) then return true end return self.AllowedCVar:GetBool() end // Now for all the ToolObj redirects function ToolObj:GetMode() return self.Mode end function ToolObj:GetSWEP() return self.SWEP end function ToolObj:GetOwner() return self:GetSWEP().Owner or self.Owner end function ToolObj:GetWeapon() return self:GetSWEP().Weapon or self.Weapon end function ToolObj:LeftClick() return false end function ToolObj:RightClick() return false end function ToolObj:Reload() self:ClearObjects() end function ToolObj:Deploy() self:ReleaseGhostEntity() return end function ToolObj:Holster() self:ReleaseGhostEntity() return end function ToolObj:Think() self:ReleaseGhostEntity() end /*--------------------------------------------------------- Checks the objects before any action is taken This is to make sure that the entities haven't been removed ---------------------------------------------------------*/ function ToolObj:CheckObjects() for k, v in pairs( self.Objects ) do if ( !v.Ent:IsWorld() && !v.Ent:IsValid() ) then self:ClearObjects() end end end local toolmodes = file.FindInLua( SWEP.Folder.."/stools/*.lua" ) for key, val in pairs( toolmodes ) do local char1,char2,toolmode = string.find( val, "([%w_]*)\.lua" ) TOOL = ToolObj:Create() TOOL.Mode = toolmode AddCSLuaFile( "stools/"..val ) include( "stools/"..val ) TOOL:CreateConVars() SWEP.Tool[ toolmode ] = TOOL TOOL = nil end ToolObj = nil if ( CLIENT ) then // Keep the tool list handy local TOOLS_LIST = SWEP.Tool // Add the STOOLS to the tool menu local function AddSToolsToMenu() for ToolName, TOOL in pairs( TOOLS_LIST ) do if ( TOOL.AddToMenu != false ) then spawnmenu.AddToolMenuOption( TOOL.Tab or "Main", TOOL.Category or "New Category", ToolName, TOOL.Name or "#"..ToolName, TOOL.Command or "gmod_tool "..ToolName, TOOL.ConfigName or ToolName, TOOL.BuildCPanel ) end end end hook.Add( "PopulateToolMenu", "AddSToolsToMenu", AddSToolsToMenu ) end