Files
wnsrc/lua/sam/config/sv_config.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

109 lines
2.0 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 = sam
local SQL = sam.SQL
local mp = sam.mp
local config = sam.config
local _config = {}
function config.sync()
sam.set_global("Config", _config, true)
end
local to_hex
do
local byte = string.byte
local gsub = string.gsub
local format = string.format
local hex = function(c)
return format("%02X", byte(c))
end
function to_hex(text)
return (gsub(text, ".", hex))
end
end
function config.set(key, value, force)
if not sam.isstring(key) then
error("invalid setting name")
end
if not mp.packers[sam.type(value)] then
error("not supported value type")
end
local old = _config[key]
if not force and value == old then return end
SQL.FQuery([[
REPLACE INTO
`sam_config`(
`key`,
`value`
)
VALUES
({1}, X{2})
]], {key, to_hex(mp.pack(value))})
_config[key] = value
config.sync()
sam.hook_call("SAM.UpdatedConfig", key, value, old)
end
function config.get(key, default)
local value = _config[key]
if value ~= nil then
return value
end
return default
end
config.sync()
hook.Add("SAM.DatabaseLoaded", "LoadConfig", function()
SQL.Query([[
SELECT
*
FROM
`sam_config`
]], function(sam_config)
for _, v in ipairs(sam_config) do
_config[v.key] = mp.unpack(v.value)
end
config.loaded = true
config.sync()
hook.Call("SAM.LoadedConfig", nil, _config)
end):wait()
end)
sam.netstream.Hook("Config.Set", function(ply, key, value)
config.set(key, value)
value = tostring(value)
if value == "" then
sam.player.send_message(nil, "{A} changed {S Blue} setting to: {S_2 Red}", {
A = ply, S = key, S_2 = "none"
})
else
sam.player.send_message(nil, "{A} changed {S Blue} setting to: {S_2}", {
A = ply, S = key, S_2 = value
})
end
end, function(ply)
return ply:HasPermission("manage_config")
end)