Files
wnsrc/lua/stormfox2/lib/sh_permission.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

165 lines
4.2 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/
--]]
StormFox2.Permission = {}
hook.Add("stormfox2.postlib", "stormfox2.privileges", function()
if not CAMI then return end
CAMI.RegisterPrivilege{
Name = "StormFox Settings",
MinAccess = "superadmin"
}
-- Permission to edit StormFox weather and time
CAMI.RegisterPrivilege{
Name = "StormFox WeatherEdit",
MinAccess = "admin"
}
end)
local SF_SERVEREDIT = 0
local SF_WEATHEREDIT= 1
if SERVER then
util.AddNetworkString("StormFox2.menu")
-- "Fake" settings
local commands = {
["cvslist"] = function( var )
StormFox2.Setting.SetCVS( tostring( var ) )
end
}
net.Receive("StormFox2.menu", function(len, ply)
local req = net.ReadBool()
if ply:IsListenServerHost() or game.SinglePlayer() then
net.Start("StormFox2.menu")
net.WriteBool(req)
net.Send( ply )
return
end
CAMI.PlayerHasAccess(ply,req and "StormFox Settings" or "StormFox WeatherEdit",function(b)
if not b then return end
net.Start("StormFox2.menu")
net.WriteBool(req)
net.Send( ply )
end)
end)
local function NoAccess(ply, msg)
if not ply then
MsgC( Color(155,155,255),"[StormFox2] ", color_white, msg )
MsgN()
return
end
net.Start( StormFox2.Net.Permission )
net.WriteString(msg)
net.Send(ply)
end
local function plyRequestSetting(ply, convar, var)
if not CAMI then return end
-- Check if its a stormfox setting
local obj = StormFox2.Setting.GetObject( convar ) or commands[ convar ]
if not obj then
if ply then
NoAccess(ply, "Invalid setting: " .. tostring(convar))
end
return false, "Not SF"
end
-- If singleplayer/host
if game.SinglePlayer() or ply:IsListenServerHost() then
if type(obj) == "function" then
obj( var )
else
obj:SetValue( var )
end
return
end
-- Check CAMI
CAMI.PlayerHasAccess(ply,"StormFox Settings",function(b)
if not b then
NoAccess(ply, "You don't have access to edit the settings!")
return
end
if type(obj) == "function" then
obj( var )
else
obj:SetValue( var )
end
end)
end
local function plyRequestEdit( ply, tID, var)
if not CAMI then return end
-- If singleplayer/host
if game.SinglePlayer() or ply:IsListenServerHost() then
return StormFox2.Menu.SetWeatherData(ply, tID, var)
end
-- Check CAMI
CAMI.PlayerHasAccess(ply,"StormFox WeatherEdit",function(b)
if not b then
NoAccess(ply, "You don't have access to edit the weather!")
return
end
StormFox2.Menu.SetWeatherData(ply, tID, var)
end)
end
net.Receive( StormFox2.Net.Permission, function(len, ply)
local t = net.ReadUInt(1)
if t == SF_SERVEREDIT then
plyRequestSetting(ply, net.ReadString(), net.ReadType())
elseif t == SF_WEATHEREDIT then
plyRequestEdit(ply, net.ReadUInt(4), net.ReadType())
end
end)
---Asks CAMI if the user has access to said permission. Will call and return onSuccess if they do.
---@param ply Player
---@param sPermission string
---@param onSuccess function
---@param ... any
---@return any|nil
---@server
function StormFox2.Permission.EditAccess(ply, sPermission, onSuccess, ...)
if not ply or ply:IsListenServerHost() then -- Console or host
return onSuccess(ply, ... )
end
local a = {...}
CAMI.PlayerHasAccess(ply,sPermission,function(b)
if not b then
NoAccess(ply, "You don't have access to edit the weather.")
return
end
onSuccess(ply, unpack(a) )
end)
end
else
net.Receive(StormFox2.Net.Permission, function(len)
local str = net.ReadString()
chat.AddText(Color(155,155,255),"[StormFox2] ", color_white, str)
end)
net.Receive("StormFox2.menu", function(len)
local n = net.ReadBool()
if n then
StormFox2.Menu._OpenSV()
else
StormFox2.Menu._OpenController()
end
end)
---Asks the server to change a setting.
---@param convar string
---@param var any
---@client
function StormFox2.Permission.RequestSetting( convar, var )
net.Start(StormFox2.Net.Permission)
net.WriteUInt(SF_SERVEREDIT, 1)
net.WriteString( convar )
net.WriteType(var)
net.SendToServer()
end
end