mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-15 21:03:46 +03:00
111 lines
2.5 KiB
Lua
111 lines
2.5 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/
|
|
--]]
|
|
|
|
if SAM_LOADED then return end
|
|
|
|
local sam, netstream = sam, sam.netstream
|
|
|
|
local globals
|
|
|
|
if SERVER then
|
|
globals = {}
|
|
local order = {}
|
|
|
|
local get_order_key = function(key)
|
|
for i = 1, #order do
|
|
if order[i] == key then
|
|
return i
|
|
end
|
|
end
|
|
end
|
|
|
|
function sam.set_global(key, value, force)
|
|
if force or globals[key] ~= value then
|
|
globals[key] = value
|
|
|
|
if value ~= nil then
|
|
if not get_order_key(key) then
|
|
table.insert(order, key)
|
|
end
|
|
else
|
|
local i = get_order_key(key)
|
|
if i then
|
|
table.remove(order, i)
|
|
end
|
|
end
|
|
|
|
netstream.Start(nil, "SetGlobal", key, value)
|
|
end
|
|
end
|
|
|
|
hook.Add("OnEntityCreated", "SAM.Globals", function(ent)
|
|
if ent:IsPlayer() and ent:IsValid() then
|
|
local delay = FrameTime() * 5
|
|
local first = true
|
|
for _, key in ipairs(order) do
|
|
if (key == "Ranks") then
|
|
for rank, value in pairs(globals[key]) do
|
|
timer.Simple(delay, function() netstream.Start(ent, "SendRank", rank, value) end)
|
|
delay = delay + FrameTime() * 2
|
|
end
|
|
timer.Simple(delay, function() netstream.Start(ent, "SendRank", "Last") end)
|
|
delay = delay + FrameTime() * 5
|
|
else
|
|
if (first) then
|
|
timer.Simple(delay, function() netstream.Start(ent, "SendGlobals", {[key] = globals[key]}, {key}) end)
|
|
first = false
|
|
else
|
|
timer.Simple(delay, function() netstream.Start(ent, "SetGlobal", key, globals[key]) end)
|
|
end
|
|
delay = delay + FrameTime() * 5
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
if CLIENT then
|
|
function sam.set_global(key, value)
|
|
if globals then
|
|
globals[key] = value
|
|
hook.Call("SAM.ChangedGlobalVar", nil, key, value)
|
|
end
|
|
end
|
|
netstream.Hook("SetGlobal", sam.set_global)
|
|
|
|
netstream.Hook("SendGlobals", function(vars, order)
|
|
globals = vars
|
|
|
|
for _, key in ipairs(order) do
|
|
hook.Call("SAM.ChangedGlobalVar", nil, key, vars[key])
|
|
end
|
|
end)
|
|
|
|
netstream.Hook("SendRank", function(rank, value)
|
|
if (rank ~= "Last" and value) then
|
|
globals = globals or {}
|
|
globals["Ranks"] = globals["Ranks"] or {}
|
|
globals["Ranks"][rank] = value
|
|
elseif (rank == "Last") then
|
|
hook.Call("SAM.ChangedGlobalVar", nil, "Ranks", globals["Ranks"])
|
|
end
|
|
end)
|
|
end
|
|
|
|
function sam.get_global(key, default)
|
|
if globals then
|
|
local value = globals[key]
|
|
if value ~= nil then
|
|
return value
|
|
end
|
|
end
|
|
|
|
return default
|
|
end |