mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
Upload
This commit is contained in:
346
lua/autorun/vj_controls.lua
Normal file
346
lua/autorun/vj_controls.lua
Normal file
@@ -0,0 +1,346 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
/*--------------------------------------------------
|
||||
=============== VJ Controls ===============
|
||||
*** Copyright (c) 2012-2023 by DrVrej, All rights reserved. ***
|
||||
No parts of this code or any of its contents may be reproduced, copied, modified or adapted,
|
||||
without the prior written consent of the author, unless otherwise indicated for stand-alone materials.
|
||||
--------------------------------------------------*/
|
||||
if (!file.Exists("autorun/vj_base_autorun.lua","LUA")) then return end
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
------ VJ Spawnmenu Controls ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
local killIconColor = Color(255, 80, 0, 255)
|
||||
|
||||
if !VJ then VJ = {} end -- If VJ isn't initialized, initialize it!
|
||||
|
||||
-- Variables ----------------------------------------------------------------------------------------------------
|
||||
if !VJ.Plugins then VJ.Plugins = {} end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Registers the addon to the VJ plugin list
|
||||
- name = Addon name
|
||||
- type = Type of addon | EX: NPC, Weapon, etc.
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddAddonProperty = function(name, type)
|
||||
table.insert(VJ.Plugins, {Name = name, Type = type})
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Registers spawn menu category information
|
||||
- name = Category name
|
||||
- options = Table that holds all possible options
|
||||
- Icon = Category icon
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddCategoryInfo = function(category, options)
|
||||
list.Set("VJBASE_CATEGORY_INFO", category, {
|
||||
icon = options.Icon or "icon16/monkey.png",
|
||||
})
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Adds an NPC to the spawn menu
|
||||
- name = NPC's name
|
||||
- class = NPC's class
|
||||
- category = The spawn menu category it should be in
|
||||
- adminOnly = Is this an admin only NPC?
|
||||
- customFunc(property) = Used to apply more options (Located in GMod's source code) | EX: OnCeiling, Offset, etc.
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddNPC = function(name, class, category, adminOnly, customFunc)
|
||||
local property = {Name = name, Class = class, Category = category, AdminOnly = adminOnly}
|
||||
if (customFunc) then customFunc(property) end
|
||||
list.Set("NPC", class, property)
|
||||
list.Set("VJBASE_SPAWNABLE_NPC", class, property)
|
||||
if CLIENT then
|
||||
language.Add(class, name)
|
||||
killicon.Add(class, "HUD/killicons/default", killIconColor)
|
||||
language.Add("#" .. class, name)
|
||||
killicon.Add("#" .. class, "HUD/killicons/default", killIconColor)
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Adds a human NPC to the spawn menu
|
||||
- name = NPC's name
|
||||
- class = NPC's class
|
||||
- weapons = Default weapon list for this NPC
|
||||
- category = The spawn menu category it should be in
|
||||
- adminOnly = Is this an admin only NPC?
|
||||
- customFunc(property) = Used to apply more options (Located in GMod's source code) | EX: OnCeiling, Offset, etc.
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddNPC_HUMAN = function(name, class, weapons, category, adminOnly, customFunc)
|
||||
local property = {Name = name, Class = class, Weapons = weapons, Category = category, AdminOnly = adminOnly}
|
||||
if (customFunc) then customFunc(property) end
|
||||
list.Set("NPC", class, property)
|
||||
list.Set("VJBASE_SPAWNABLE_NPC", class, property)
|
||||
if CLIENT then
|
||||
language.Add(class, name)
|
||||
killicon.Add(class, "HUD/killicons/default", killIconColor)
|
||||
language.Add("#" .. class, name)
|
||||
killicon.Add("#" .. class, "HUD/killicons/default", killIconColor)
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Adds a weapon to the NPC weapon override list
|
||||
- name = Weapon's name
|
||||
- class = Weapon's class
|
||||
- category = The category group it should be in
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddNPCWeapon = function(name, class, category)
|
||||
local property = {title = name, class = class, category = category or "VJ Base"}
|
||||
list.Add("NPCUsableWeapons", property)
|
||||
list.Add("VJBASE_SPAWNABLE_NPC_WEAPON", property)
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Adds a weapon to the weapon spawn list
|
||||
- name = Weapon's name
|
||||
- class = Weapon's class
|
||||
- adminOnly = Is this an admin only weapon?
|
||||
- category = The spawn menu category it should be in
|
||||
- customFunc(property) = Used to apply more options (Located in GMod's source code)
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddWeapon = function(name, class, adminOnly, category, customFunc)
|
||||
local property = {PrintName = name, ClassName = class, Category = category, AdminOnly = adminOnly, Spawnable = true}
|
||||
if (customFunc) then customFunc(property) end
|
||||
list.Set("Weapon", class, property)
|
||||
list.Set("VJBASE_SPAWNABLE_WEAPON", class, property)
|
||||
duplicator.Allow(class)
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Adds an entity to the weapon spawn list
|
||||
- name = Entity's name
|
||||
- class = Entity's class
|
||||
- author = Author's name
|
||||
- adminOnly = Is this an admin only entity?
|
||||
- offset = Spawn offset
|
||||
- dropToFloor = Should it drop to the floor on spawn?
|
||||
- category = The spawn menu category it should be in
|
||||
- customFunc(property) = Used to apply more options (Located in GMod's source code)
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddEntity = function(name, class, author, adminOnly, offset, dropToFloor, category, customFunc)
|
||||
local Ent = {PrintName = name, ClassName = class, Author = author, AdminOnly = adminOnly, NormalOffset = offset, DropToFloor = dropToFloor, Category = category, Spawnable = true}
|
||||
if (customFunc) then customFunc(Ent) end
|
||||
list.Set("SpawnableEntities", class, Ent)
|
||||
list.Set("VJBASE_SPAWNABLE_ENTITIES", class, Ent)
|
||||
duplicator.Allow(class)
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Adds and registers a particle file
|
||||
- fileName = Addon name | EX: "particles/explosion.pcf"
|
||||
- particleList = List of particles to precache from the given particle file
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddParticle = function(fileName, particleList)
|
||||
game.AddParticles(fileName)
|
||||
for _, name in ipairs(particleList) do
|
||||
PrecacheParticleSystem(name)
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Registers a ConVar
|
||||
- name = Convar name
|
||||
- defValue = Default value
|
||||
- flags = Convar's flags | Can be a bitflag or a table | Flag List: https://wiki.facepunch.com/gmod/Enums/FCVAR
|
||||
- helpText = Help text to display in the console
|
||||
- min = If set, the ConVar cannot be changed to a number lower than this value
|
||||
- max = If set, the ConVar cannot be changed to a number higher than this value
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddConVar = function(name, defValue, flags, helpText, min, max)
|
||||
if !ConVarExists(name) then
|
||||
CreateConVar(name, defValue, flags or FCVAR_NONE, helpText or "", min, max)
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--[[---------------------------------------------------------
|
||||
Registers a client ConVar
|
||||
- name = ConVar name
|
||||
- defValue = Default value
|
||||
- helpText = Help text to display in the console
|
||||
- min = If set, the ConVar cannot be changed to a number lower than this value
|
||||
- max = If set, the ConVar cannot be changed to a number higher than this value
|
||||
-----------------------------------------------------------]]
|
||||
VJ.AddClientConVar = function(name, defValue, helpText, min, max)
|
||||
if !ConVarExists(name) then
|
||||
CreateClientConVar(name, defValue, true, true, helpText or "", min, max)
|
||||
end
|
||||
end
|
||||
|
||||
/*
|
||||
if CLIENT then
|
||||
local gmod_npcweapon = CreateConVar("gmod_npcweapon","",{FCVAR_ARCHIVE})
|
||||
spawnmenu.AddContentType( "vjbase_npc", function( container, obj )
|
||||
if ( !obj.material ) then return end
|
||||
if ( !obj.nicename ) then return end
|
||||
if ( !obj.spawnname ) then return end
|
||||
if ( !obj.weapon ) then obj.weapon = { "" } end
|
||||
local icon = vgui.Create( "ContentIcon", container )
|
||||
icon:SetContentType( "vjbase_npc" )
|
||||
icon:SetSpawnName( obj.spawnname )
|
||||
icon:SetName( obj.nicename )
|
||||
icon:SetMaterial( obj.material )
|
||||
icon:SetAdminOnly( obj.admin )
|
||||
icon:SetNPCWeapon( obj.weapon )
|
||||
icon:SetColor(Color(244,164,96,255))
|
||||
icon.DoClick = function()
|
||||
local weapon = table.Random( obj.weapon )
|
||||
if ( gmod_npcweapon:GetString() != "" ) then weapon = gmod_npcweapon:GetString() end
|
||||
RunConsoleCommand( "vjbase_spawnnpc", obj.spawnname, weapon )
|
||||
surface.PlaySound( "ui/buttonclickrelease.wav" )
|
||||
end
|
||||
icon.OpenMenu = function( icon )
|
||||
local menu = DermaMenu()
|
||||
local weapon = table.Random( obj.weapon )
|
||||
if ( gmod_npcweapon:GetString() != "" ) then weapon = gmod_npcweapon:GetString() end
|
||||
menu:AddOption( "Copy to Clipboard", function() SetClipboardText( obj.spawnname ) end )
|
||||
menu:AddOption( "Spawn Using Toolgun", function() RunConsoleCommand( "gmod_tool", "creator" ) RunConsoleCommand( "creator_type", "2" ) RunConsoleCommand( "creator_name", obj.spawnname ) RunConsoleCommand( "creator_arg", weapon ) end )
|
||||
menu:AddSpacer()
|
||||
menu:AddOption( "Delete", function() icon:Remove() hook.Run( "SpawnlistContentChanged", icon ) end )
|
||||
menu:Open()
|
||||
end
|
||||
if (IsValid(container)) then
|
||||
container:Add(icon)
|
||||
end
|
||||
return icon
|
||||
end)
|
||||
-------------------------------------------------------------------------------------------------------------------------
|
||||
hook.Add("PopulateVJBaseWeapons","AddVJBaseSpawnMenu_weapon",function(pnlContent,tree,node)
|
||||
local weapontree = tree:AddNode("Weapons", "icon16/gun.png")
|
||||
local Weapons = list.Get("VJBASE_SPAWNABLE_WEAPON") -- Get a list of available Weapons
|
||||
local WeaponCatagory = {}
|
||||
for k, weapon in pairs( Weapons ) do
|
||||
if ( !weapon.Spawnable ) then continue end
|
||||
WeaponCatagory[ weapon.Category ] = WeaponCatagory[ weapon.Category ] or {}
|
||||
table.insert( WeaponCatagory[ weapon.Category ], weapon )
|
||||
end
|
||||
Weapons = nil
|
||||
for CategoryName, v in SortedPairs(WeaponCatagory) do -- Create an icon for each one and put them on the panel
|
||||
local node = weapontree:AddNode(CategoryName,"icon16/page_white_go.png") -- Add a node to the tree
|
||||
node.DoPopulate = function(self) -- When we click on the node - populate it using this function
|
||||
if ( self.PropPanel ) then return end -- If we've already populated it - forget it.
|
||||
self.PropPanel = vgui.Create("ContentContainer", pnlContent) -- Create the container panel
|
||||
self.PropPanel:SetVisible( false )
|
||||
self.PropPanel:SetTriggerSpawnlistChange( false )
|
||||
for k, ent in SortedPairsByMemberValue( v, "PrintName" ) do
|
||||
spawnmenu.CreateContentIcon( ent.ScriptedEntityType or "weapon", self.PropPanel,
|
||||
{
|
||||
nicename = ent.PrintName or ent.ClassName,
|
||||
spawnname = ent.ClassName,
|
||||
material = "entities/"..ent.ClassName..".png",
|
||||
admin = ent.AdminOnly
|
||||
})
|
||||
end
|
||||
end
|
||||
node.DoClick = function(self) -- If we click on the node populate it and switch to it.
|
||||
self:DoPopulate()
|
||||
pnlContent:SwitchPanel( self.PropPanel );
|
||||
end
|
||||
end
|
||||
//local FirstNode = tree:Root():GetChildNode(0) -- Select the first node
|
||||
//if ( IsValid( FirstNode ) ) then
|
||||
//FirstNode:InternalDoClick()
|
||||
//end
|
||||
weapontree:SetExpanded(true)
|
||||
end)
|
||||
-------------------------------------------------------------------------------------------------------------------------
|
||||
hook.Add("PopulateVJBaseEntities","AddVJBaseSpawnMenu_Entity",function(pnlContent,tree,node)
|
||||
local entitytree = tree:AddNode("Entities", "icon16/bricks.png")
|
||||
local EntitiesCategories = {}
|
||||
local EntitiesList = list.Get("VJBASE_SPAWNABLE_ENTITIES") -- Get a list of available Entities
|
||||
if (EntitiesList) then
|
||||
for k, v in pairs(EntitiesList) do
|
||||
v.SpawnName = k
|
||||
v.Category = v.Category or "Other"
|
||||
EntitiesCategories[ v.Category ] = EntitiesCategories[ v.Category ] or {}
|
||||
table.insert( EntitiesCategories[ v.Category ], v )
|
||||
end
|
||||
end
|
||||
for CategoryName, v in SortedPairs(EntitiesCategories) do -- Create an icon for each one and put them on the panel
|
||||
local node = entitytree:AddNode(CategoryName,"icon16/page_white_go.png") -- Add a node to the tree
|
||||
node.DoPopulate = function(self) -- When we click on the node - populate it using this function
|
||||
if ( self.PropPanel ) then return end -- If we've already populated it - forget it.
|
||||
self.PropPanel = vgui.Create("ContentContainer", pnlContent) -- Create the container panel
|
||||
self.PropPanel:SetVisible( false )
|
||||
self.PropPanel:SetTriggerSpawnlistChange( false )
|
||||
for k, ent in SortedPairsByMemberValue( v, "PrintName" ) do
|
||||
spawnmenu.CreateContentIcon( ent.ScriptedEntityType or "entity", self.PropPanel,
|
||||
{
|
||||
nicename = ent.PrintName or ent.ClassName,
|
||||
spawnname = ent.SpawnName,
|
||||
material = "entities/"..ent.SpawnName..".png",
|
||||
admin = ent.AdminOnly
|
||||
})
|
||||
end
|
||||
end
|
||||
node.DoClick = function(self) -- If we click on the node populate it and switch to it.
|
||||
self:DoPopulate()
|
||||
pnlContent:SwitchPanel( self.PropPanel );
|
||||
end
|
||||
end
|
||||
//local FirstNode = tree:Root():GetChildNode(0) -- Select the first node
|
||||
//if ( IsValid( FirstNode ) ) then
|
||||
//FirstNode:InternalDoClick()
|
||||
//end
|
||||
entitytree:SetExpanded(true)
|
||||
end)
|
||||
-------------------------------------------------------------------------------------------------------------------------
|
||||
hook.Add("PopulateVJBaseNPC","AddVJBaseSpawnMenu_NPC",function(pnlContent,tree,node)
|
||||
local npctree = tree:AddNode("NPCs", "icon16/monkey.png")
|
||||
local NPCList = list.Get("VJBASE_SPAWNABLE_NPC") -- Get a list of available NPCs
|
||||
local NPCCategories = {} -- Categorize them
|
||||
for k, v in pairs(NPCList) do
|
||||
local Category = v.Category or "Other"
|
||||
local Tab = NPCCategories[Category] or {}
|
||||
Tab[ k ] = v
|
||||
NPCCategories[Category] = Tab
|
||||
end
|
||||
for CategoryName, v in SortedPairs(NPCCategories) do -- Create an icon for each one and put them on the panel
|
||||
local node = npctree:AddNode(CategoryName,"icon16/page_white_go.png") -- Add a node to the tree
|
||||
node.DoPopulate = function(self) -- When we click on the node - populate it using this function
|
||||
if ( self.PropPanel ) then return end -- If we've already populated it - forget it.
|
||||
self.PropPanel = vgui.Create("ContentContainer", pnlContent) -- Create the container panel
|
||||
self.PropPanel:SetVisible( false )
|
||||
self.PropPanel:SetTriggerSpawnlistChange( false )
|
||||
for name, ent in SortedPairsByMemberValue( v, "Name" ) do
|
||||
spawnmenu.CreateContentIcon( "vjbase_npc", self.PropPanel,
|
||||
{
|
||||
nicename = ent.Name or name,
|
||||
spawnname = name,
|
||||
material = "entities/"..name..".png",
|
||||
weapon = ent.Weapons,
|
||||
admin = ent.AdminOnly
|
||||
})
|
||||
end
|
||||
end
|
||||
node.DoClick = function(self) -- If we click on the node populate it and switch to it.
|
||||
self:DoPopulate()
|
||||
pnlContent:SwitchPanel(self.PropPanel)
|
||||
end
|
||||
end
|
||||
//local FirstNode = tree:Root():GetChildNode(0) -- Select the first node
|
||||
//if (IsValid(FirstNode)) then
|
||||
//FirstNode:InternalDoClick()
|
||||
//end
|
||||
npctree:SetExpanded(true)
|
||||
end)
|
||||
-------------------------------------------------------------------------------------------------------------------------
|
||||
spawnmenu.AddCreationTab("VJ Base",function()
|
||||
local ctrl = vgui.Create("SpawnmenuContentPanel")
|
||||
ctrl:CallPopulateHook("PopulateVJBaseWeapons")
|
||||
ctrl:CallPopulateHook("PopulateVJBaseEntities")
|
||||
ctrl:CallPopulateHook("PopulateVJBaseNPC")
|
||||
return ctrl
|
||||
end, "icon16/plugin.png", 60 )
|
||||
*/
|
||||
Reference in New Issue
Block a user