aboutsummaryrefslogtreecommitdiff
path: root/gamemode/core/dataloader/sv_loadglobals.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/core/dataloader/sv_loadglobals.lua')
-rw-r--r--gamemode/core/dataloader/sv_loadglobals.lua70
1 files changed, 70 insertions, 0 deletions
diff --git a/gamemode/core/dataloader/sv_loadglobals.lua b/gamemode/core/dataloader/sv_loadglobals.lua
new file mode 100644
index 0000000..85bbc5f
--- /dev/null
+++ b/gamemode/core/dataloader/sv_loadglobals.lua
@@ -0,0 +1,70 @@
+print("Load globals called")
+
+local function ExecuteOnFolder(dir, recursive, func)
+ recursive = recursive ~= nil and recursive or false
+ local path = "data/artery/"
+ local fpath = table.concat({path,dir,"/*"})
+ local files, directories = file.Find(fpath,"GAME")
+ for k,v in pairs(files) do
+ local callpath = table.concat({path,dir,"/",v})
+ func(callpath)
+ end
+ if recursive then
+ for k,v in pairs(directories) do
+ local npath = table.concat({dir,"/",v})
+ ExecuteOnFolder(npath,true,func)
+ end
+ end
+end
+
+util.AddNetworkString("artery_loadfile")
+util.AddNetworkString("artery_requestcsfile")
+util.AddNetworkString("artery_respondfile")
+local toload = {}
+local function loadglobals()
+ ExecuteOnFolder("global",true,function(f)
+ local filetxt = file.Read(f,"GAME")
+ local filename = string.GetFileFromFilename(f)
+ if string.find(filename,"^cl_") then
+ toload[f] = filetxt
+ elseif string.find(filename,"^sv_") then
+ CompileString(filetxt,f)()
+ else
+ toload[f] = filetxt
+ CompileString(filetxt,f)()
+ end
+ end)
+end
+
+local function load_cs_files(ply)
+ for k,v in pairs(toload) do
+ net.Start("artery_loadfile")
+ net.WriteString(k)
+ local hash = util.CRC(v)
+ net.WriteUInt(tonumber(hash),32)
+ net.Send(ply)
+ end
+end
+
+hook.Add("PlayerInitialSpawn","artery_loadglobals",function(ply)
+ timer.Simple(1,function()
+ load_cs_files(ply)
+ end)
+end)
+
+net.Receive("artery_requestcsfile",function(ln,ply)
+ local which = net.ReadString()
+ net.Start("artery_respondfile")
+ net.WriteString(which)
+ net.WriteString(toload[which])
+ net.Send(ply)
+end)
+
+concommand.Add("artery_reloadglobals",function(ply,cmd,args)
+ if not ply:IsAdmin() then return end
+ loadglobals()
+ for k,v in pairs(player.GetAll()) do
+ load_cs_files(v)
+ end
+end)
+loadglobals()