mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
164 lines
4.7 KiB
Lua
164 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
-- Copyright © 2022-2072, Nak, https://steamcommunity.com/id/Nak2/
|
||
|
|
-- All Rights Reserved. Not allowed to be reuploaded.
|
||
|
|
|
||
|
|
AddCSLuaFile()
|
||
|
|
-- Make sure to use the newest version of NikNaks.
|
||
|
|
local version = 0.36
|
||
|
|
if NikNaks and NikNaks.Version > version then return end
|
||
|
|
|
||
|
|
local file_Find, MsgC, unpack, rawget = file.Find, MsgC, unpack, rawget
|
||
|
|
|
||
|
|
NikNaks = {}
|
||
|
|
NikNaks.net = {}
|
||
|
|
NikNaks.Version = version
|
||
|
|
NikNaks.Authors = "Nak"
|
||
|
|
MsgN("Loading NikNaks: " .. NikNaks.Version)
|
||
|
|
NikNaks.__metatables = {}
|
||
|
|
|
||
|
|
do
|
||
|
|
---A simply Msg function for NikNaks
|
||
|
|
function NikNaks.Msg( ... )
|
||
|
|
local a = {...}
|
||
|
|
if #a < 1 then return end
|
||
|
|
MsgC(NikNaks.REALM_COLOR,"[NN] ", unpack(a), "\n")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
---Auto includes, runs and AddCSLuaFile files using their prefix.
|
||
|
|
function NikNaks.AutoInclude( str )
|
||
|
|
local path = str
|
||
|
|
if string.find(str,"/") then
|
||
|
|
path = string.GetFileFromFilename(str)
|
||
|
|
end
|
||
|
|
local _type
|
||
|
|
if path ~= "shared.lua" then
|
||
|
|
_type = string.sub(path,0,3)
|
||
|
|
else
|
||
|
|
_type = "sh_"
|
||
|
|
end
|
||
|
|
if SERVER then
|
||
|
|
if _type == "cl_" or _type == "sh_" then
|
||
|
|
AddCSLuaFile(str)
|
||
|
|
end
|
||
|
|
if _type ~= "cl_" then
|
||
|
|
return include(str)
|
||
|
|
end
|
||
|
|
elseif _type ~= "sv_" then
|
||
|
|
return pcall(include, str)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
---Autp includes, runs and AddCSLuaFile a folder by the files prefix.
|
||
|
|
function NikNaks.AutoIncludeFolder( str )
|
||
|
|
for _,fil in ipairs(file_Find(str .. "/*.lua","LUA")) do
|
||
|
|
NikNaks.AutoInclude(str .. "/" .. fil)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- A simple scope-script
|
||
|
|
do
|
||
|
|
local g = _G
|
||
|
|
local envs = {}
|
||
|
|
local env = {}
|
||
|
|
local getfenv, setfenv, source = getfenv, setfenv, jit.util.funcinfo( NikNaks.AutoInclude )["source"]
|
||
|
|
local NikNaks = NikNaks
|
||
|
|
local function createEnv( tab, source )
|
||
|
|
local t = {}
|
||
|
|
setmetatable(t, { __index = function(k, v)
|
||
|
|
return rawget(NikNaks, v) or tab[v]
|
||
|
|
end,
|
||
|
|
__newindex = function( t, k, v)
|
||
|
|
rawset( _G, k, v )
|
||
|
|
end})
|
||
|
|
envs[ tab ] = t
|
||
|
|
return t
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Patches any tables with names that share _G
|
||
|
|
--NikNaks._source = source:lower():match("addons/(.-)/")
|
||
|
|
NikNaks._source = "niknak"
|
||
|
|
local function using()
|
||
|
|
local _env = getfenv( 2 )
|
||
|
|
if _env ~= _GEnv then -- Make sure it isn't our env
|
||
|
|
-- Create new env and apply it
|
||
|
|
setfenv(2, envs[_env] or createEnv( _env, NikNaks._source ))
|
||
|
|
else
|
||
|
|
-- Ignore for now.
|
||
|
|
-- error("Can't apply enviroment to self")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
setmetatable(NikNaks,{
|
||
|
|
__call = function( _, ...) return using( ... ) end
|
||
|
|
})
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[
|
||
|
|
For safty reasons, we're won't use AutoInclude or AutoIncludeFolder. These should be hardcoded.
|
||
|
|
]]
|
||
|
|
|
||
|
|
--- @class BSPObject
|
||
|
|
local meta = {}
|
||
|
|
meta.__index = meta
|
||
|
|
meta.__tostring = function( self ) return string.format( "BSP Map [ %s ]", self._mapfile ) end
|
||
|
|
meta.MetaName = "BSP"
|
||
|
|
NikNaks.__metatables["BSP"] = meta
|
||
|
|
NikNaks._Source = "niknak"
|
||
|
|
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_enums.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_util_extended.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_file_extended.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_timedelta.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_datetime.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_color_extended.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_model_extended.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bitbuffer.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_module.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_entities.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_faces.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_leafs.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_brushes.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_pvspas.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_bsp_staticprops.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_pathfind_module.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/modules/sh_ain_module.lua")
|
||
|
|
|
||
|
|
NikNaks.AutoInclude("niknaks/framework/sh_localbsp.lua")
|
||
|
|
NikNaks.AutoInclude("niknaks/framework/sh_epath.lua")
|
||
|
|
|
||
|
|
-- Patch table to ref _G
|
||
|
|
do
|
||
|
|
local g = _G
|
||
|
|
for key, val in pairs( NikNaks ) do
|
||
|
|
if not istable( val ) then continue end
|
||
|
|
if not _G[key] then continue end
|
||
|
|
--if not NikNaks._source:find("niknak") then continue end
|
||
|
|
setmetatable(val, { __index = function(k, v)
|
||
|
|
return rawget(k, v) or g[key][v]
|
||
|
|
end})
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Post Init. This is a safety option, as using traces and other functions before InitPostEntity can cause crash.
|
||
|
|
if _NIKNAKS_POSTENTITY then
|
||
|
|
NikNaks.PostInit = true
|
||
|
|
timer.Simple(1, NikNaks._LoadPathOptions )
|
||
|
|
else
|
||
|
|
hook.Add("NikNaks._LoadPathOptions", "wait", function()
|
||
|
|
NikNaks.PostInit = true
|
||
|
|
NikNaks._LoadPathOptions()
|
||
|
|
hook.Remove("NikNaks._LoadPathOptions", "wait")
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
-- return NikNaks -- Doesn't work for require :C
|