mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
164
lua/stormfox2/lib/sh_permission.lua
Normal file
164
lua/stormfox2/lib/sh_permission.lua
Normal file
@@ -0,0 +1,164 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
Reference in New Issue
Block a user