mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
Added main File
This commit is contained in:
164
expcore/permission_groups.lua
Normal file
164
expcore/permission_groups.lua
Normal file
@@ -0,0 +1,164 @@
|
||||
local Game = require 'utils.game'
|
||||
local Event = require 'utils.event'
|
||||
|
||||
local Permissions_Groups = {
|
||||
groups={}, -- store for the different groups that are created
|
||||
_prototype={} -- stores functions that are used on group instances
|
||||
}
|
||||
|
||||
function Permissions_Groups.new_group(name)
|
||||
local group = setmetatable({
|
||||
name=name,
|
||||
actions={},
|
||||
allow_all_actions=true
|
||||
},{
|
||||
__index= Permissions_Groups._prototype
|
||||
})
|
||||
Permissions_Groups.groups[name] = group
|
||||
return group
|
||||
end
|
||||
|
||||
function Permissions_Groups.get_group_by_name(name)
|
||||
return Permissions_Groups.groups[name]
|
||||
end
|
||||
|
||||
function Permissions_Groups.get_group_from_player(player)
|
||||
player = Game.get_player_from_any(player)
|
||||
local group = player.permission_group
|
||||
if group then
|
||||
return Permissions_Groups.groups[group.name]
|
||||
end
|
||||
end
|
||||
|
||||
function Permissions_Groups.reload_permissions()
|
||||
for _,group in pairs(Permissions_Groups.groups) do
|
||||
group:create()
|
||||
end
|
||||
end
|
||||
|
||||
function Permissions_Groups.lockdown_permissions(exempt)
|
||||
if type(exempt) ~= 'table' then
|
||||
exempt = {exempt}
|
||||
end
|
||||
for _,group in pairs(exempt) do
|
||||
if type(group) == 'string' then
|
||||
exempt[group:lower()] = true
|
||||
elseif type(group) == 'table' then
|
||||
exempt[group.name:lower()] = true
|
||||
end
|
||||
end
|
||||
for _,group in pairs(game.permissions.groups) do
|
||||
if not exempt(group.name:lower()) then
|
||||
for _,action in pairs(defines.input_action) do
|
||||
group.set_allows_action(action,false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Permissions_Groups.set_player_group(player,group)
|
||||
player = Game.get_player_from_any(player)
|
||||
local group = Permissions_Groups.get_group_by_name(group)
|
||||
group:add_player(player)
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:set_action(action,state)
|
||||
self.actions[action] = state
|
||||
return self
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:allow(actions)
|
||||
if type(actions) ~= 'table' then
|
||||
actions = {actions}
|
||||
end
|
||||
for _,action in pairs(actions) do
|
||||
self:set_action(action,true)
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:disallow(actions)
|
||||
if type(actions) ~= 'table' then
|
||||
actions = {actions}
|
||||
end
|
||||
for _,action in pairs(actions) do
|
||||
self:set_action(action,false)
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:allow_all()
|
||||
self.allow_all_actions = true
|
||||
return self
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:disallow_all()
|
||||
self.allow_all_actions = false
|
||||
return self
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:is_allowed(action)
|
||||
local state = self.actions[action]
|
||||
if state == nil then
|
||||
state = self.allow_all_actions
|
||||
end
|
||||
return state
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:get_raw()
|
||||
return game.permissions.get_group(self.name)
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:create()
|
||||
local group = self:get_raw()
|
||||
if not group then
|
||||
group = game.permissions.create_group(self.name)
|
||||
end
|
||||
for _,action in pairs(defines.input_action) do
|
||||
group.set_allows_action(action,self:is_allowed(action))
|
||||
end
|
||||
return group
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:add_player(player)
|
||||
player = Game.get_player_from_any(player)
|
||||
local group = self:get_raw()
|
||||
group.add_player(player)
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:remove_player(player)
|
||||
player = Game.get_player_from_any(player)
|
||||
local group = self:get_raw()
|
||||
group.remove_player(player)
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:get_players(online)
|
||||
local players = {}
|
||||
local group = self:get_raw()
|
||||
if group then
|
||||
if online == nil then
|
||||
return group.players
|
||||
else
|
||||
for _,player in pairs(group.players) do
|
||||
if player.connected == online then
|
||||
table.insert(player,player)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return players
|
||||
end
|
||||
|
||||
function Permissions_Groups._prototype:print(message)
|
||||
local players = self:get_players(true)
|
||||
for _,player in pairs(players) do
|
||||
player.print(message)
|
||||
end
|
||||
return #players
|
||||
end
|
||||
|
||||
Event.on_init(function()
|
||||
Permissions_Groups.reload_permissions()
|
||||
end)
|
||||
|
||||
return Permissions_Groups
|
||||
Reference in New Issue
Block a user