mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
165 lines
4.2 KiB
Lua
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
|
|
|