diff --git a/FactorioSoftmodManager.lua b/FactorioSoftmodManager.lua index 1657bde6..e48b16c8 100644 --- a/FactorioSoftmodManager.lua +++ b/FactorioSoftmodManager.lua @@ -6,6 +6,9 @@ local moduleIndex = require("/modules/index") local Manager = {} +-- this is a constant that is used to represent the server +SERVER = setmetatable({index=0,name='',online_time=0,afk_time=0,print=print},{__index=function(tbl,key) if type(game.player[key]) == 'function' then return function() end else return nil end end}) + --- Setup for metatable of the Manager to force read only nature -- @usage Manager() -- runs Manager.loadModdules() -- @usage Manager[name] -- returns module by that name diff --git a/locale/en/ExpGamingPlayer.playerList.cfg b/locale/en/ExpGamingPlayer.playerList.cfg index a385d119..d2c2e345 100644 --- a/locale/en/ExpGamingPlayer.playerList.cfg +++ b/locale/en/ExpGamingPlayer.playerList.cfg @@ -1,4 +1,4 @@ -[player-list] +[ExpGamingPlayer-playerList] tooltip=Toggle player list, right click player for more info format-nil=__1__ - __2__ format=__1__ - __2__ - __3__ diff --git a/modules/DeconControl/control.lua b/modules/DeconControl/control.lua index 56260ec0..b7929b15 100644 --- a/modules/DeconControl/control.lua +++ b/modules/DeconControl/control.lua @@ -1,4 +1,4 @@ ---- Allows control over decon rights, if ExpGamingCore.Ranking is not installed it will allow admins to instant remove trees and thats it. +--- Allows control over decon rights, if ExpGamingCore.Role is not installed it will allow admins to instant remove trees and thats it. -- @module DeconControl@4.0.0 -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE @@ -7,13 +7,13 @@ -- Module Require local Game = require('FactorioStdLib.Game@^0.8.0') local Server = require('ExpGamingCore.Server@^4.0.0') -local Ranking -- ExpGamingCore.Ranking@^4.0.0 +local Role -- ExpGamingCore.Role@^4.0.0 -- Module Define local module_verbose = false local ThisModule = { on_init=function() - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then Ranking = require('ExpGamingCore.Ranking@^4.0.0') end + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then Role = require('ExpGamingCore.Role@^4.0.0') end end } @@ -35,13 +35,12 @@ Event.register(-1,function(event) if not chache then local player = Game.get_player(event) if not player then return end - if not Ranking then + if not Role then if player.admin then self.data.chache[event.player_index] = {'tree-decon',false} else self.data.chache[event.player_index] = {'decon',false} end else - local rank = Ranking.get_rank(player) - if rank:allowed('tree-decon') then self.data.chache[event.player_index] = {'tree-decon',false} - elseif not rank:allowed('decon') then self.data.chache[event.player_index] = {'no-decon',false} + if Role.allowed(player,'tree-decon') then self.data.chache[event.player_index] = {'tree-decon',false} + elseif not Role.allowed(player,'decon') then self.data.chache[event.player_index] = {'no-decon',false} else self.data.chache[event.player_index] = {'decon',false} end end chache = self.data.chache[event.player_index] @@ -58,8 +57,7 @@ Event.register(-1,function(event) chache[2] = true local player = Game.get_player(event) player_return({'tree-decon.player-print'},defines.textcolor.crit,player) - local rank = Ranking.get_group('Admin').lowest - Ranking.print(rank,{'tree-decon.rank-print',player.name},defines.textcolor.info) + Role.print(Role.meta.groups.Admin.lowest,{'tree-decon.rank-print',player.name},defines.textcolor.info) if Admin then Admin.give_warning(player,'','Trying To Decon The Base') end end self.data.clear = game.tick + 10 diff --git a/modules/ExpGamingAdmin/AdminLib/control.lua b/modules/ExpGamingAdmin/AdminLib/control.lua index 176c51eb..57e75a03 100644 --- a/modules/ExpGamingAdmin/AdminLib/control.lua +++ b/modules/ExpGamingAdmin/AdminLib/control.lua @@ -6,14 +6,14 @@ -- Module Require local Game = require('FactorioStdLib.Game@^0.8.0') -local Ranking -- ExpGamingCore.Ranking@^4.0.0 +local Role -- ExpGamingCore.Role@^4.0.0 local Sync -- ExpGamingCore.Sync@^4.0.0 -- Module Define local module_verbose = false local Admin = { on_init=function() - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then Ranking = require('ExpGamingCore.Ranking@^4.0.0') end + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then Role = require('ExpGamingCore.Role@^4.0.0') end if loaded_modules['ExpGamingCore.Sync@^4.0.0'] then Sync = require('ExpGamingCore.Sync@^4.0.0') end if loaded_modules['ExpGamingCore.Server@^4.0.0'] then require('ExpGamingCore.Server@^4.0.0').add_module_to_interface('Admin','ExpGamingAdmin.AdminLib') end end, @@ -41,9 +41,8 @@ end function Admin.allowed(player) local player = Game.get_player(player) - if Ranking then - local lowest_admin_power = Ranking.get_group('Admin').lowest.power - return lowest_admin_power >= Ranking.get_rank(player).power + if Role then + return Role.allowed(player,'admin-commands') else return player.admin end end @@ -79,7 +78,7 @@ function Admin.clear_player(player,by_player) if Admin.is_banned(player,true) == true then Server.interface(game.unban_player,true,player,by_player) end if Admin.clear_warings then Admin.clear_warings(player,by_player,true) end if Admin.clear_reports then Admin.clear_reports(player,by_player,true) end - if Ranking.get_rank(player).group.name == 'Jail' then Server.interface(Ranking.revert,true,player,by_player) end + if Role.has_flag(player,'is_jail') then Server.interface(Role.revert,true,player,by_player,2) end if Sync then Sync.emit_embeded{ title='Player Clear', color=Color.to_hex(defines.textcolor.low), diff --git a/modules/ExpGamingAdmin/Commands/src/jail.lua b/modules/ExpGamingAdmin/Commands/src/jail.lua index 4b043257..4ca06ffd 100644 --- a/modules/ExpGamingAdmin/Commands/src/jail.lua +++ b/modules/ExpGamingAdmin/Commands/src/jail.lua @@ -1,5 +1,5 @@ local Admin = Admin -local Ranking = require('ExpGamingCore.Ranking') +local Role = require('ExpGamingCore.Role') --- Used to jail a player which stops them from moving -- @command jail @@ -11,8 +11,8 @@ commands.add_command('jail', 'Jails a player', { }, function(event,args) local player = args.player local reason = args.reason - if Ranking.get_rank(player):allowed('no-report') then player_return({'ExpGamingAdmin.cant-report',args.player}) return commands.error end - if Admin.is_banned(player) then player_return({'commands.cant-report-ban',args.player}) return commands.error end + if Role.allowed(player,'no-report') then player_return{'ExpGamingAdmin.cant-report',args.player} return commands.error end + if Admin.is_banned(player) then player_return{'commands.cant-report-ban',args.player} return commands.error end Admin.jail(player,event.player_index,reason) end) @@ -24,5 +24,5 @@ commands.add_command('unjail', 'Returns a player\'s old rank', { }, function(event,args) local player = args.player if Admin.is_banned(player) then player_return({'commands.cant-report-ban',args.player}) return commands.error end - Server.interface(Ranking.revert,true,player,event.player_index) + Server.interface(Role.revert,true,player,event.player_index,2) end) \ No newline at end of file diff --git a/modules/ExpGamingAdmin/Commands/src/reports.lua b/modules/ExpGamingAdmin/Commands/src/reports.lua index f1582c0d..f53b9939 100644 --- a/modules/ExpGamingAdmin/Commands/src/reports.lua +++ b/modules/ExpGamingAdmin/Commands/src/reports.lua @@ -1,5 +1,5 @@ local Admin = Admin -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') --- Reports a player -- @command report @@ -13,7 +13,7 @@ commands.add_command('report', 'Reports a player', { local player = args.player local reason = args.reason if Admin.is_banned(player) then player_return({'ExpGamingAdmin.cant-report-ban',args.player}) return commands.error end - if Ranking.get_rank(player):allowed('no-report') then player_return({'ExpGamingAdmin.cant-report',args.player}) return commands.error end + if Role.allowed(player,'no-report') then player_return({'ExpGamingAdmin.cant-report',args.player}) return commands.error end for _,report in pairs(global.addons.reports.reports) do if report[1] == _player.name then player_return({'ExpGamingAdmin.cant-report',args.player}) return commands.error end end for _,report in pairs(global.addons.reports.varified) do if report[1] == _player.name then player_return({'ExpGamingAdmin.cant-report',args.player}) return commands.error end end Admin.report(player,event.player_index,reason) diff --git a/modules/ExpGamingAdmin/Commands/src/warnings.lua b/modules/ExpGamingAdmin/Commands/src/warnings.lua index 321c790a..277301a8 100644 --- a/modules/ExpGamingAdmin/Commands/src/warnings.lua +++ b/modules/ExpGamingAdmin/Commands/src/warnings.lua @@ -1,5 +1,5 @@ local Admin = Admin -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') --- Gives a warning to a player -- @command warn @@ -11,8 +11,8 @@ commands.add_command('warn', 'Gives a player a warning', { }, function(event,args) local player = args.player local reason = args.reason - if Admin.is_banned(player) then player_return({'ExpGamingAdmin.cant-report-ban',args.player}) return commands.error end - if Ranking.get_rank(player):allowed('no-report') then player_return({'ExpGamingAdmin.cant-report',args.player}) return commands.error end + if Admin.is_banned(player) then player_return{'ExpGamingAdmin.cant-report-ban',args.player} return commands.error end + if Role.allowed(player,'no-report') then player_return{'ExpGamingAdmin.cant-report',args.player} return commands.error end Admin.give_warning(player,event.player_index,reason) end) diff --git a/modules/ExpGamingAdmin/Gui/control.lua b/modules/ExpGamingAdmin/Gui/control.lua index 912e49b3..435b04c8 100644 --- a/modules/ExpGamingAdmin/Gui/control.lua +++ b/modules/ExpGamingAdmin/Gui/control.lua @@ -7,7 +7,7 @@ -- Module Require local Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') local Gui = require('ExpGamingCore.Gui@^4.0.0') -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') local playerInfo -- ExpGamingPlayer@^4.0.0 @@ -89,9 +89,9 @@ local player_drop_down = Gui.inputs.add_drop_down('player-drop-down-admin-comman player_info_flow.clear() if selected == 'Select Player' then return else get_player_info(selected,player_info_flow,true) end - local rank = Ranking.get_rank(player) - local _rank = Ranking.get_rank(selected) - if rank.power >= _rank.power then element.parent.warning.caption = {'ExpGamingAdmin.warning'} + local role = Role.get_highest(player) + local _role = Role.get(selected) + if role.index >= _role.index then element.parent.warning.caption = {'ExpGamingAdmin.warning'} else element.parent.warning.caption = '' end end) @@ -118,12 +118,12 @@ local take_action = Gui.inputs.add{ caption={'ExpGamingAdmin.take-action'} }:on_event('click',function(event) local dropdowns = event.element.parent - local rank = Ranking.get_rank(event.player_index) + local role = Role.get_highest(event.player_index) local _action= dropdowns.parent.action.caption ~= 'Select Action' and dropdowns.parent.action.caption or nil local _player = Game.get_player(dropdowns.parent.player.caption) if not _player or not _action then dropdowns.warning.caption = {'ExpGamingAdmin.invalid'} return end - local _rank = Ranking.get_rank(_player) - if rank.power >= _rank.power then dropdowns.warning.caption = {'ExpGamingAdmin.rank-high'} return end + local _role = Role.get_highest(_player) + if role.index >= _role.index then dropdowns.warning.caption = {'ExpGamingAdmin.rank-high'} return end local _reason = dropdowns['reason-input-admin-commands'] and dropdowns['reason-input-admin-commands'].text if (_action == 'Jail' or _action == 'Kick' or _action == 'Ban' or _action == 'Temp Ban') and (_reason == 'Enter Reason' or string.len(_reason) < 20) then return end Admin.take_action(_action,_player,event.player_index,_reason) diff --git a/modules/ExpGamingAdmin/Jail/control.lua b/modules/ExpGamingAdmin/Jail/control.lua index 5792926d..58eedcc3 100644 --- a/modules/ExpGamingAdmin/Jail/control.lua +++ b/modules/ExpGamingAdmin/Jail/control.lua @@ -1,4 +1,4 @@ ---- Adds a jail function to the admin set, require ExpGamingRanking to work. +--- Adds a jail function to the admin set, require ExpGamingRole to work. -- @module ExpGamingAdmin.Jail@4.0.0 -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE @@ -8,7 +8,7 @@ local Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') local AdminGui = require('ExpGamingAdmin.Gui@^4.0.0') local Server = require('ExpGamingCore.Server@^4.0.0') -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') local Color -- FactorioStdLib.Color@^0.8.0 local Sync -- ExpGamingCore.Sync@^4.0.0 @@ -40,8 +40,9 @@ function Admin.jail(player,by_player,reason) ['Reason:']=reason } end if Admin.move_inventory then Admin.move_inventory(player) end - Ranking.meta.last_jail = player.name - Server.interface(Ranking.give_rank,true,player,'Jail',by_player_name) + Role.meta.last_jail = player.name + Server.interface(Role.unassign,true,player,Role.get(player),by_player_name) + Server.interface(Role.assign,true,player,'Jail',by_player_name) end Admin.add_action('Jail',Admin.jail) diff --git a/modules/ExpGamingAdmin/Reports/control.lua b/modules/ExpGamingAdmin/Reports/control.lua index 00f14bb0..3b71a37a 100644 --- a/modules/ExpGamingAdmin/Reports/control.lua +++ b/modules/ExpGamingAdmin/Reports/control.lua @@ -7,7 +7,7 @@ -- Module Require local Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') local Server = require('ExpGamingCore.Server@^4.0.0') -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') local Gui = require('ExpGamingCore.Gui@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') local Color = require('FactorioStdLib.Color@^0.8.0') @@ -40,13 +40,11 @@ local function valid_players(player,by_player) end local function report_message(player,by_player,reason) - local low_rank = Ranking.get_group('User').highest - local high_rank = Ranking.get_group('Admin').lowest local player, by_player_name = valid_players(player,by_player) if not player then return end if Admin.is_banned(player,true) == 'report' then return end - Ranking.print(low_rank,{'ExpGamingAdmin.low-print',player.name,reason},defines.textcolor.info,true) - Ranking.print(high_rank,{'ExpGamingAdmin.high-print',player.name,by_player_name,reason},defines.textcolor.med) + Role.print(Role.meta.groups.User.lowest,{'ExpGamingAdmin.low-print',player.name,reason},defines.textcolor.info,true) + Role.print(Role.meta.groups.Admin.lowest,{'ExpGamingAdmin.high-print',player.name,by_player_name,reason},defines.textcolor.med) if Sync then Sync.emit_embeded{ title='Player Report', color=Color.to_hex(defines.textcolor.med), @@ -61,7 +59,7 @@ local function cheak_reports(player) local player = Game.get_player(player) if not player then return end local reports = Admin.count_reports(player) - if reports >= reports_needed_for_jail and global.actions[player.name] ~= 'report-jail' and Ranking.get_rank(player).group.name ~= 'Jail' then + if reports >= reports_needed_for_jail and global.actions[player.name] ~= 'report-jail' and Role.get_highest(player).group.name ~= 'Jail' then global.actions[player.name] = actions.report Admin.jail(player,'','Too many user reports. Contact an Admin to be unjailed.') end @@ -86,9 +84,9 @@ end function Admin.report(player,by_player,reason) local player, by_player_name = valid_players(player,by_player) - if not player or Ranking.get_rank(player):allowed('no-report') then return end - if Admin.is_banned(by_player) or Ranking.get_group(by_player).name == 'Jail' then return end - if Ranking.get_rank(by_player):allowed('varified') then + if not player or Role.allowed(player,'no-report') then return end + if Admin.is_banned(by_player) or Role.has_flag(by_player,'is_jail') then return end + if Role.has_flag(by_player,'is_varified') then global.varified[player.name] = global.varified[player.name] or {} local reports = global.varified[player.name] for _,value in pairs(reports) do diff --git a/modules/ExpGamingAdmin/TempBan/control.lua b/modules/ExpGamingAdmin/TempBan/control.lua index 4d9f9bc5..bd0c087d 100644 --- a/modules/ExpGamingAdmin/TempBan/control.lua +++ b/modules/ExpGamingAdmin/TempBan/control.lua @@ -1,4 +1,4 @@ ---- Adds a temp ban function to the admin set, requires ExpGamingCore.Ranking to work. +--- Adds a temp ban function to the admin set, requires ExpGamingCore.Role to work. -- @module ExpGamingAdmin.KicTempBan@4.0.0 -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE @@ -7,7 +7,7 @@ -- Module Require local Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') local Server = require('ExpGamingCore.Server@^4.0.0') -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') local Color = require('FactorioStdLib.Color@^0.8.0') local Sync -- ExpGamingCore.Sync@^4.0.0 @@ -36,8 +36,9 @@ function Admin.temp_ban(player,by_player,reason) } end game.print({'ExpGamingAdmin.temp-ban',player.name,by_player_name,reason},defines.textcolor.info) if Admin.move_inventory then Admin.move_inventory(player) end - Ranking.meta.last_jail = player.name - Server.interface(Ranking.give_rank,true,player,'Jail',by_player_name) + Role.meta.last_jail = player.name + Server.interface(Role.unassign,true,player,Role.get(player),by_player_name) + Server.interface(Role.assign,true,player,'Jail',by_player_name) end Admin.add_action('Temp Ban',Admin.temp_ban) diff --git a/modules/ExpGamingAdmin/Warnings/control.lua b/modules/ExpGamingAdmin/Warnings/control.lua index df1d3af1..5514ad60 100644 --- a/modules/ExpGamingAdmin/Warnings/control.lua +++ b/modules/ExpGamingAdmin/Warnings/control.lua @@ -7,7 +7,7 @@ -- Module Require local Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') local Server = require('ExpGamingCore.Server@^4.0.0') -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') local Color = require('FactorioStdLib.Color@^0.8.0') local Sync -- ExpGamingCore.Sync@^4.0.0 @@ -45,11 +45,11 @@ local ThisModule = { end, on_post=function() local highest = nil - for _,rank in pairs(Ranking.ranks) do - local power = rank.power - if not highest and not rank:allowed('no-report') then highest = power-1 end + for _,role in pairs(Role.roles) do + local power = role.index + if not highest and not role.not_reportable then highest = power-1 end local _power = power; if highest then _power = power-highest end - if rank:allowed('no-report') then remove_warnings_time[power] = 0 + if role.not_reportable then remove_warnings_time[power] = 0 else remove_warnings_time[power] = min_time_to_remove_warning*_power end end end @@ -131,8 +131,8 @@ script.on_event(defines.events.on_tick,function(event) if (game.tick % min_time_to_remove_warning) == 0 then for name,warnings in pairs(global) do if warnings > 0 then - local rank = Ranking.get_rank(name) - local time_to_remove = remove_warnings_time[rank.power] + local role = Role.get(name) + local time_to_remove = remove_warnings_time[role.index] if (game.tick % time_to_remove) == 0 then global[name]=warnings-1 if global.warnings[name] > 5 then diff --git a/modules/ExpGamingBot/autoChat/control.lua b/modules/ExpGamingBot/autoChat/control.lua index be2f73f2..3f190077 100644 --- a/modules/ExpGamingBot/autoChat/control.lua +++ b/modules/ExpGamingBot/autoChat/control.lua @@ -6,7 +6,7 @@ -- Module Require local Game = require('FactorioStdLib.Game@^0.8.0') -local Ranking -- ExpGamingCore.Ranking@^4.0.0 +local Role -- ExpGamingCore.Role@^4.0.0 -- Local Varibles -- lots of these are jokes, but some have uses @@ -113,7 +113,7 @@ local commands = { local module_verbose = false local ThisModule = { on_init=function() - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then Ranking = require('ExpGamingCore.Ranking@^4.0.0') end + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then Role = require('ExpGamingCore.Role@^4.0.0') end end } @@ -122,7 +122,7 @@ script.on_event(defines.events.on_console_chat,function(event) local player = Game.get_player(event) if not player then return end local player_message = event.message:lower():gsub("%s+", "") - local allowed = Ranking and Ranking.get_rank(player):allowed('global-chat') or player.admin + local allowed = Role and Role.allowed(player,'global-chat') or player.admin for to_find,message in pairs(messages) do if player_message:match(command_syntax..to_find) then if allowed then @@ -131,7 +131,7 @@ script.on_event(defines.events.on_console_chat,function(event) else player_return({'ExpGamingBot-autoChat.rank-error'},nil,player) end elseif player_message:match(to_find) then if is_type(message,'function') then message=message(player) end - player_return({'ExpGamingBot-autoChat.message',message},nil,player) + if not allowed then player_return({'ExpGamingBot-autoChat.message',message},nil,player) end end end for to_find,message in pairs(commands) do diff --git a/modules/ExpGamingBot/autoMessage/control.lua b/modules/ExpGamingBot/autoMessage/control.lua index 598292bb..6fcdb6b7 100644 --- a/modules/ExpGamingBot/autoMessage/control.lua +++ b/modules/ExpGamingBot/autoMessage/control.lua @@ -7,7 +7,7 @@ -- Module Require local Server = require('ExpGamingCore.Server') local Game = require('FactorioStdLib.Game') -local Ranking -- ExpGamingCore.Ranking@4.0.0 +local Role -- ExpGamingCore.Role@4.0.0 local Sync -- ExpGamingCore.Sync@4.0.0 -- Local Varibles @@ -16,7 +16,7 @@ local Sync -- ExpGamingCore.Sync@4.0.0 local module_verbose = false local ThisModule = { on_init=function() - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then Ranking = require('ExpGamingCore.Ranking@^4.0.0') end + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then Role = require('ExpGamingCore.Role@^4.0.0') end if loaded_modules['ExpGamingCore.Sync@^4.0.0'] then Sync = require('ExpGamingCore.Sync@^4.0.0') end end, on_post=function() @@ -31,8 +31,8 @@ script.on_init(function(event) timeout=54000, -- 3240000 = 15 hours dont make the mistake i did, 54000 is 15 minutes reopen=true, data={ - high_rank= 'Owner', - low_rank= 'Regular', + high_role= 'Owner', + low_role= 'Regular', low={ {'ExpGamingBot-autoMessage.join-us'}, {'ExpGamingBot-autoMessage.discord'}, @@ -43,7 +43,7 @@ script.on_init(function(event) } }:on_event('timeout',function(self) local data = self.data - if not data.high_rank or not data.low_rank + if not data.high_role or not data.low_role or not data.low then self.reopen = false return end game.print{'ExpGamingBot-autoMessage.message',{'ExpGamingBot-autoMessage.players-online',#game.connected_players}} game.print{'ExpGamingBot-autoMessage.message',{'ExpGamingBot-autoMessage.map-time',tick_to_display_format(game.tick)}} @@ -52,10 +52,10 @@ script.on_init(function(event) local player = Game.get_player(event) if not player then return end local data = self.data - if not data.high_rank or not data.low_rank + if not data.high_role or not data.low_role or not data.low then self.reopen = false return end -- idk but this stoped working for no appent reason so i added more checks for nil values - if Ranking and Ranking.get_rank(player).power <= Ranking.get_rank(data.low_rank).power or player.admin then return end + if Role and Role.get_highest(player).index <= Role.get(data.low_role).index or player.admin then return end for _,message in pairs(data.low) do player_return({'ExpGamingBot-autoMessage.message',message},nil,player) end diff --git a/modules/ExpGamingCommands/bonus/control.lua b/modules/ExpGamingCommands/bonus/control.lua index a78624a0..3ef95ddc 100644 --- a/modules/ExpGamingCommands/bonus/control.lua +++ b/modules/ExpGamingCommands/bonus/control.lua @@ -37,7 +37,7 @@ script.on_event(defines.events.on_player_respawned,function(event) end end) --- overided by ExpGamingCore.Ranking if present +-- overided by ExpGamingCore.Role if present script.on_event(defines.events.on_pre_player_died,function(event) local player = Game.get_player(event) if player.admin then @@ -54,26 +54,26 @@ end) return { on_init= function(self) - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then - local Ranking = require('ExpGamingCore.Ranking@^4.0.0') + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then + local Role = require('ExpGamingCore.Role@^4.0.0') -- instant respawn script.on_event(defines.events.on_pre_player_died,function(event) local player = Game.get_player(event) - if Ranking.get_rank(player):allowed('bonus-respawn') then + if Role.allowed(player,'bonus-respawn') then player.ticks_to_respawn = 120 -- manually dispatch death event because it is not fired when ticks_to_respawn is set pre death - Event.dispatch{ + script.raise_event(defines.events.on_player_died,{ name=defines.events.on_player_died, tick=event.tick, player_index=event.player_index, cause = event.cause - } + }) end end) -- either clears or adds default when rank changed - script.on_event(defines.events.rank_change,function(event) + script.on_event(defines.events.role_change,function(event) local player = Game.get_player(event) - if event.new_rank:allowed('bonus') then + if Role.allowed(player,'bonus') then for _,setting in pairs(settings) do player[key] = setting*0.2 end global[player.index]=20 else diff --git a/modules/ExpGamingCommands/repair/control.lua b/modules/ExpGamingCommands/repair/control.lua index 6491cde2..b9ae122f 100644 --- a/modules/ExpGamingCommands/repair/control.lua +++ b/modules/ExpGamingCommands/repair/control.lua @@ -5,7 +5,7 @@ local Game = require('FactorioStdLib.Game@^0.8.0') -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') -- Set an item to true to disallow it from being repaired local disallow = { @@ -46,9 +46,9 @@ commands.add_command('repair', 'Repairs all destoryed and damaged entites in an }, function(event,args) local range = args.range local player = Game.get_player(event) - local rank = Ranking.get_rank(player) - local highest_admin_power = Ranking.get_group('Admin').highest.power-1 - local max_range = rank.power-highest_admin_power > 0 and const/(rank.power-highest_admin_power) or nil + local role = Role.get_highest(player) + local highest_admin_power = Role.meta.groups.Admin.highest-1 + local max_range = role.index-highest_admin_power > 0 and const/(role.index-highest_admin_power) or nil local center = player and player.position or {x=0,y=0} if not range or max_range and range > max_range then player_return({'commands.invalid-range',0,math.floor(max_range)}) return commands.error end local area = {{center.x-range,center.y-range},{center.x+range,center.y+range}} diff --git a/modules/ExpGamingCommands/tags/control.lua b/modules/ExpGamingCommands/tags/control.lua index f126c6ae..bc021e4a 100644 --- a/modules/ExpGamingCommands/tags/control.lua +++ b/modules/ExpGamingCommands/tags/control.lua @@ -4,14 +4,13 @@ -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE local Game = require('FactorioStdLib.Game@^0.8.0') -local Ranking -- ExpGamingCore.Ranking@^4.0.0 +local Role -- ExpGamingCore.Role@^4.0.0 -- Module Define local module_verbose = false local ThisModule = { on_init=function() - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then Ranking = require('ExpGamingCore.Ranking@^4.0.0') end - --code + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then Role = require('ExpGamingCore.Role@^4.0.0') end end } @@ -22,9 +21,9 @@ commands.add_command('tag', 'Give yourself a custom tag. Use "" to have more tha ['tag'] = {true,'string-len',20} }, function(event,args) local player = Game.get_player(event) - if Ranking then - local rank = Ranking.get_rank(player) - player.tag = rank.tag..' - '..args.tag + if Role then + local role = Role.get_highest(player) + player.tag = role.tag..' - '..args.tag else player.tag = args.tag end player_return('Your tag has been set. Use /tag-clear to remove your tag') end) @@ -36,10 +35,11 @@ commands.add_command('tag-clear', 'Removes a custom tag.', { ['player'] = {false,'player-rank'} }, function(event,args) local player = args.player or game.player - if Ranking then - local rank = Ranking.get_rank(player) - player.tag = rank.tag + if Role then + local role = Role.get_highest(player) + player.tag = role.tag else player.tag = '' end player_return('Your tag has been removed.') end) +return ThisModule \ No newline at end of file diff --git a/modules/ExpGamingCore/Command/control.lua b/modules/ExpGamingCore/Command/control.lua index 5e530192..aca87fff 100644 --- a/modules/ExpGamingCore/Command/control.lua +++ b/modules/ExpGamingCore/Command/control.lua @@ -50,9 +50,9 @@ setmetatable(commands,{ -- @field player converts the input into a valid player -- @field player_online converts the input to a player if the player is online -- @field player_alive converts the input to a player if the player is online and alive --- @field player_rank converts the input to a player if the player is a lower rank than the user or if the person is not admin and the user is --- @field player_rank-online converts the input to a player if the player is a lower rank than the user and online --- @field player_rank_alive converts the input to a player if the player is a lower rank than the user and online and alive +-- @field player_role converts the input to a player if the player is a lower rank than the user or if the person is not admin and the user is +-- @field player_role-online converts the input to a player if the player is a lower rank than the user and online +-- @field player_role_alive converts the input to a player if the player is a lower rank than the user and online and alive commands.validate = { ['boolean']=function(value,event) local value = value.lower() if value == 'true' or valule == 'yes' or value == 'y' or value == '1' then return true else return false end end, ['string']=function(value,event) return tostring(value) end, @@ -129,7 +129,7 @@ function commands.validate_args(event) if not arg and not data[1] then return commands.error('invalid-inputs') end if data[2] == 'string-inf' then rtn[name] = table.concat(words,' ',index) break end local valid = is_type(data[2],'function') and data[2] or commands.validate[data[2]] or error('Invalid type for command: "'..command.name..'/'..name..'"') - local temp_tbl = table.deep_copy(data) table.remove(temp_tbl,1) table.remove(temp_tbl,2) + local temp_tbl = table.deepcopy(data) table.remove(temp_tbl,1) table.remove(temp_tbl,1) local value, err = valid(arg,event,unpack(temp_tbl)) if value == commands.error then return value, err end rtn[name] = value diff --git a/modules/ExpGamingCore/Gui/control.lua b/modules/ExpGamingCore/Gui/control.lua index 49d16a86..12b815a4 100644 --- a/modules/ExpGamingCore/Gui/control.lua +++ b/modules/ExpGamingCore/Gui/control.lua @@ -177,11 +177,11 @@ function Gui:on_init() self.left:on_init(); self.left.on_init = nil self.toolbar:on_init(); self.toolbar.on_init = nil if loaded_modules['ExpGamingCore.Server'] then verbose('ExpGamingCore.Server is installed; Loading server src') require(module_path..'/src/server',{Gui=Gui}) end - if loaded_modules['ExpGamingCore.Ranking'] then - verbose('ExpGamingCore.Ranking is installed; Loading ranking src') - script.on_event('on_rank_change',function(event) - Gui.toolbar.on_rank_change(event) - Gui.center.on_rank_change(event) + if loaded_modules['ExpGamingCore.Role'] then + verbose('ExpGamingCore.Role is installed; Loading ranking src') + script.on_event('on_role_change',function(event) + Gui.toolbar.on_role_change(event) + Gui.center.on_role_change(event) end) end script.on_event('on_player_joined_game',function(event) diff --git a/modules/ExpGamingCore/Gui/src/center.lua b/modules/ExpGamingCore/Gui/src/center.lua index e87b3d53..2b0d1fa8 100644 --- a/modules/ExpGamingCore/Gui/src/center.lua +++ b/modules/ExpGamingCore/Gui/src/center.lua @@ -209,5 +209,5 @@ center._events = {[defines.events.on_gui_closed]=function(event) if event.element and event.element.valid then event.element.destroy() end end} -center.on_rank_change = center.clear +center.on_role_change = center.clear return center \ No newline at end of file diff --git a/modules/ExpGamingCore/Gui/src/left.lua b/modules/ExpGamingCore/Gui/src/left.lua index 6146e3f6..a7ae4499 100644 --- a/modules/ExpGamingCore/Gui/src/left.lua +++ b/modules/ExpGamingCore/Gui/src/left.lua @@ -9,7 +9,7 @@ local Game = require('FactorioStdLib.Game') local Color = require('FactorioStdLib.Color') -local Ranking -- this is optional and is hanndled by it being present, it is loaded on init +local Role -- this is optional and is hanndled by it being present, it is loaded on init local mod_gui = require("mod-gui") local Gui = Gui -- this is to force gui to remain in the ENV @@ -150,14 +150,14 @@ function left._left.toggle(event) if not success then error(err) elseif err == true then open = true elseif global.over_ride_left_can_open then - if is_type(Ranking,'table') and Ranking.meta.rank_count > 0 then - if Ranking.get_rank(player):allowed(_left.name) then open = true + if is_type(Role,'table') then + if Role.allowed(player,_left.name) then open = true else open = {gui.unauthorized} end else open = true end else open = err end else - if is_type(Ranking,'table') and Ranking.meta.rank_count > 0 then - if Ranking.get_rank(player):allowed(_left.name) then open = true + if is_type(Role,'table') then + if Role.allowed(player,_left.name) then open = true else open = {gui.unauthorized} end else open = true end end @@ -181,7 +181,7 @@ left.on_player_joined_game = function(event) end function left:on_init() - if loaded_modules['ExpGamingCore.Ranking'] then Ranking = require('ExpGamingCore.Ranking') end + if loaded_modules['ExpGamingCore.Role'] then Role = require('ExpGamingCore.Role') end end return left \ No newline at end of file diff --git a/modules/ExpGamingCore/Gui/src/toolbar.lua b/modules/ExpGamingCore/Gui/src/toolbar.lua index a79391fb..78831bc9 100644 --- a/modules/ExpGamingCore/Gui/src/toolbar.lua +++ b/modules/ExpGamingCore/Gui/src/toolbar.lua @@ -8,7 +8,7 @@ -- @function _comment local Game = require('FactorioStdLib.Game') -local Ranking -- this is optional and is hanndled by it being present, it is loaded on init +local Role -- this is optional and is hanndled by it being present, it is loaded on init local mod_gui = require("mod-gui") local Gui = Gui -- this is to force gui to remain in the ENV @@ -39,9 +39,8 @@ function toolbar.draw(player) toolbar_frame.clear() if not Gui.data.toolbar then return end for name,button in pairs(Gui.data.toolbar) do - if is_type(Ranking,'table') and Ranking.meta.rank_count > 0 then - local rank = Ranking.get_rank(player) - if rank:allowed(name) then + if is_type(Role,'table') then + if Role.allowed(player,name) then button:draw(toolbar_frame) end else button:draw(toolbar_frame) end @@ -49,9 +48,9 @@ function toolbar.draw(player) end function toolbar:on_init() - if loaded_modules['ExpGamingCore.Ranking'] then Ranking = require('ExpGamingCore.Ranking') end + if loaded_modules['ExpGamingCore.Role'] then Role = require('ExpGamingCore.Role') end end -toolbar.on_rank_change = toolbar.draw +toolbar.on_role_change = toolbar.draw toolbar.on_player_joined_game = toolbar.draw return toolbar \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/control.lua b/modules/ExpGamingCore/Ranking/control.lua deleted file mode 100644 index 82067209..00000000 --- a/modules/ExpGamingCore/Ranking/control.lua +++ /dev/null @@ -1,492 +0,0 @@ ---- A full ranking system for factorio. --- @module ExpGamingCore.Ranking --- @alias Ranking --- @author Cooldude2606 --- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE - -local Game = require('FactorioStdLib.Game') -local Color = require('FactorioStdLib.Color') - -local Ranking = {} -local module_verbose = false --true|false - ---- Global Table --- @table global --- @field old contains the previous rank a use had before a rank change --- @field preset contains the preset ranks that users will recive apon joining --- @field last_change contains the name of the player who last had there rank chagned -local global = global{old={},preset={},last_change=nil} - ---- Called when there is a rank change for a user --- @event on_rank_change --- @field name the rank id --- @field tick the tick which the event was raised on --- @field player_index the player whos rank was changed --- @field by_player_index the player who changed the rank, 0 means server --- @field new_rank the name of the rank that was given --- @field old_rank the name of the rank the player had -script.generate_event_name('on_rank_change') - ---- Outputs as a string all the ranks and the loaded order --- @usage Ranking.output_ranks(player) -- prints to player --- @tparam[opt=server] ?player_name|player_index|LuaPlayer player the player that the info will be printed to, nil will print to server --- @todo show inheritance of ranks -function Ranking.output_ranks(player) - local player = Game.get_player(player) or game.player or nil - local function output(rank) - local admin = 'No'; if rank.is_root then admin = 'Root' elseif rank.is_admin then admin = 'Yes' end - local rtn = string.format('%s) %q %s > Admin: %s Group: %q AFK: %s Time: %s', - rank.power,rank.name,rank.tag,admin,rank.group,tostring(rank.base_afk_time),tostring(rank.time)) - player_return(rtn,rank.colour,player) - end - local function recur(_rank) - for name,rank in pairs(_rank.children) do output(Ranking.ranks[rank]) end - for name,rank in pairs(_rank.children) do recur(Ranking.ranks[rank]) end - end - local root = Ranking.get_rank(Ranking.meta.root) - output(root) - recur(root) -end - ---- Contains the location of all the ranks, readonly during runtime --- @table Ranking.ranks -Ranking.ranks = setmetatable({},{ - __metatable=false, - __index=table.autokey, - __newindex=function(tbl,key,value) if game then error('Can not create new ranks during runtime',2) else rawset(tbl,key,value) end end, - __len=function(tbl) - local rtn = 0 - for name,rank in pairs(tbl) do - rtn=rtn+1 - end - return rtn - end -}) - ---- Contains the location of all the rank groups, readonly during runtime --- @table Ranking.ranks -Ranking.groups = setmetatable({},{ - __metatable=false, - __index=table.autokey, - __newindex=function(tbl,key,value) if game then error('Can not create new rank groups during runtime',2) else rawset(tbl,key,value) end end, - __len=function(tbl) - local rtn = 0 - for name,rank in pairs(tbl) do - rtn=rtn+1 - end - return rtn - end -}) - ---- Contains some meta data about the ranks --- @table Ranking.meta --- @field default this is the name of the default rank --- @field root this is the name of the root rank --- @field time_ranks a list of all ranks which have a time requirement --- @field time_highest the power of the highest rank that has a time requirement --- @field time_lowest the lowest amount of time required for a time rank -Ranking.meta = setmetatable({},{ - __metatable=false, - __call=function(tbl) - local count = 0 - rawset(tbl,'time_ranks',{}) - for name,rank in pairs(Ranking.ranks) do - count=count+1 - if not rawget(tbl,'default') and rank.is_default then rawset(tbl,'default',rank.name) end - if not rawget(tbl,'root') and rank.is_root then rawset(tbl,'root',rank.name) end - if rank.time then - table.insert(tbl.time_ranks,rank.name) - if not rawget(tbl,'time_highest') or rank.power < tbl.time_highest then if rank.power then rawset(tbl,'time_highest',rank.power) end end - if not rawget(tbl,'time_lowest') or rank.time < tbl.time_lowest then rawset(tbl,'time_lowest',rank.time) end - end - end - rawset(tbl,'rank_count',count) - if not rawget(tbl,'default') then error('No default rank') end - if not rawget(tbl,'root') then error('No root rank') end - end, - __index=function(tbl,key) - tbl() - return rawget(tbl,key) - end, - __newindex=function() error('Ranking metadata is read only',2) end -}) - ---- Used to set the prset ranks that will be given to players --- @usage Ranking._base_preset{name=rank_name,nameTwo=rank_name_two} -- sets player name to have rank rank_name on join --- @tparam table ranks table of player names with the player name as the key and rank name as the value -function Ranking._base_preset(ranks) - if not is_type(ranks,'table') then error('Ranking._base_preset was not given a table',2) end - global.preset = ranks -end - ---- Returns a rank object given a player or rank name --- @usage Ranking.get_rank(game.player) -- returns player's rank --- @usage Ranking.get_rank('admin') -- returns rank by the name of admin --- @tparam ?player|player_index|player_name|rank_name|Ranking._rank|'server'|'root' mixed what rank to get --- @treturn[1] table the rank that is linked to mixed --- @treturn[2] nil there was no rank found -function Ranking.get_rank(mixed) - if not mixed then return error('Ranking.get_rank recived no paramerters') end - local ranks = Ranking.ranks - local _return = false - if is_type(mixed,'table') then - -- is it a player, then get player rank; if it is a rank then return the rank - if mixed.index then _return = game.players[mixed.index] and ranks[mixed.permission_group.name] or nil - else _return = mixed.group and mixed or nil end - else - -- if it is a player name/index, then get player rank; if it is a rank name, get that rank; if it is server or root; return root rank; else nil - _return = game and game.players[mixed] and ranks[game.players[mixed].permission_group.name] - or table.autokey(ranks,mixed) and table.autokey(ranks,mixed) - or string.find(mixed,'server') and Ranking.get_rank(Ranking.meta.root) - or string.find(mixed,'root') and Ranking.get_rank(Ranking.meta.root) - or nil - end - return _return -end - ---- Returns the group object used to sort ranks given group name or rank --- @usage Ranking.get_group(game.player) -- returns player's rank group --- @usage Ranking.get_group('root') -- returns group by name of root --- @tparam ?player|player_index|player_name|rank_name|rank|'server'|'root'|group_name|group mixed what group to get --- @see Ranking.get_rank --- @treturn[1] table the group that is linked to mixed --- @treturn[2] nil there was no rank group found -function Ranking.get_group(mixed) - if not mixed then return error('Ranking.get_group recived no paramerters') end - local groups = Ranking.groups - local rank = Ranking.get_rank(mixed) - -- if it is a table see if it is a group, return the group; if it is a string, return group by that name; if there is a rank found, return the ranks group - return is_type(mixed,'table') and not mixed.__self and mixed.ranks and mixed - or is_type(mixed,'string') and table.autokey(groups,mixed) - or rank and rank.group - or nil -end - ---- Prints to all rank of greater/lower power of the rank given --- @usage Ranking.print('admin','We got a grifer') --- @todo change to use parent and child ranks rather than power --- @tparam ?Ranking._rank|pointerToRank rank_base the rank that acts as the cut off point (rank is always included) --- @param rtn what do you want to return to the players --- @tparam[opt=defines.color.white] defines.color colour the colour that will be used to print --- @tparam[opt=false] boolean below if true print to children rather than parents -function Ranking.print(rank_base,rtn,colour,below) - local colour = colour or defines.color.white - local rank_base = Ranking.get_rank(rank_base) - local ranks = Ranking._ranks() - if below then - for power,rank in pairs(ranks) do - if rank_base.power <= power then rank:print(rtn,colour,true) end - end - else - for power,rank in pairs(ranks) do - if rank_base.power >= power then rank:print(rtn,colour) end - end - end -end - ---- Gives a user a rank --- @usage Ranking.give_rank(1,'admin') --- @tparam ?LuaPlayer|pointerToPlayer player the player to give the rank to --- @tparam[opt=default] ?Ranking._rank|pointerToRank rank the rank to give to the player --- @tparam[opt='server'] ?LuaPlayer|pointerToPlayer by_player the player who is giving the rank --- @tparam[opt=game.tick] number tick the tick that the rank is being given on, used as pass though -function Ranking.give_rank(player,rank,by_player,tick) - local print_colour = defines.textcolor.info - local tick = tick or game.tick - local by_player_name = Game.get_player(by_player) and Game.get_player(by_player).name or game.player and game.player.name or is_type(by_player,'string') and by_player or 'server' - local rank = Ranking.get_rank(rank) or Ranking.get_rank(Ranking.meta.default) - local player = Game.get_player(player) or error('No player given to Ranking.give_rank',2) - local old_rank = Ranking.get_rank(player) or Ranking.get_rank(Ranking.meta.default) - local message = 'ranking.rank-down' - -- messaging - if old_rank.name == rank.name then return end - if rank.power < old_rank.power then message = 'ranking.rank-up' player.play_sound{path='utility/achievement_unlocked'} - else player.play_sound{path='utility/game_lost'} end - if player.online_time > 60 or by_player_name ~= 'server' then game.print({message,player.name,rank.name,by_player_name},print_colour) end - if rank.group ~= 'User' then player_return({'ranking.rank-given',rank.name},print_colour,player) end - if player.tag ~= old_rank.tag then player_return({'ranking.tag-reset'},print_colour,player) end - -- rank change - player.permission_group = game.permissions.get_group(rank.name) - player.tag = rank.tag - if old_rank.group ~= 'Jail' then global.old[player.index] = old_rank.name end - player.admin = rank.is_admin or false - player.spectator = rank.is_spectator or false - local by_player_index = by_player_name == 'server' and 0 or Game.get_player(by_player_name).index - script.raise_event(defines.events.on_rank_change,{ - name=defines.events.on_rank_change, - tick=tick, - player_index=player.index, - by_player_index=by_player_index, - new_rank=rank.name, - old_rank=old_rank.name - }) - -- logs to file if rank is chagned after first join - if player.online_time > 60 then - game.write_file('ranking-change.json', - table.json({ - tick=tick, - play_time=player.online_time, - player_name=player.name, - by_player_name=by_player_name, - new_rank=rank.name, - old_rank=old_rank.name - })..'\n' - , true, 0) - end -end - ---- Revert the last change to a players rank --- @usage Ranking.revert(1) -- reverts the rank of player with index 1 --- @tparam ?LuaPlayer|pointerToPlayer player the player to revert the rank of --- @param[opt=nil] by_player the player who is doing the revert -function Ranking.revert(player,by_player) - local player = Game.get_player(player) - Ranking.give_rank(player,global.old[player.index],by_player) -end - ---- Given that the player has a rank in the preset table it is given; also will attempt to promote players if a time requirement is met --- @usage Ranking.find_preset(1) -- attemps to find the preset for player with index 1 --- @tparam ?LuaPlayer|pointerToPlayer player the player to test for an auto rank --- @tparam[opt=nil] number tick the tick it happens on -function Ranking.find_preset(player,tick) - local presets = global.preset - local meta_data = Ranking.meta - local default = Ranking.get_rank(meta_data.default) - local player = Game.get_player(player) - local current_rank = Ranking.get_rank(player) or {power=-1,group='not jail'} - local ranks = {default} - -- users in rank group jail are ingroned - if current_rank.group == 'Jail' then return end - -- looks in preset table for player name - if presets[string.lower(player.name)] then - local rank = Ranking.get_rank(presets[string.lower(player.name)]) - table.insert(ranks,rank) - end - -- if the player mets check requirements then play time is checked - if current_rank.power > meta_data.time_highest and tick_to_min(player.online_time) > meta_data.time_lowest then - for _,rank_name in pairs(meta_data.time_ranks) do - local rank = Ranking.get_rank(rank_name) - if tick_to_min(player.online_time) > rank.time then - table.insert(ranks,rank) - end - end - end - -- if the new rank is closer to root then it is the new rank - local _rank = current_rank - for _,rank in pairs(ranks) do - if rank.power < _rank.power or _rank.power == -1 then _rank = rank end - end - -- this new rank is given to the player - if _rank.name == current_rank.name then return end - if _rank.name == default.name then - player.tag = _rank.tag - player.permission_group = game.permissions.get_group(_rank.name) - else - Ranking.give_rank(player,_rank,nil,tick) - end -end - ---- The class for the ranks --- @type Rank --- @alias Ranking._rank --- @field name the name that is given to the rank, must be unique --- @field short_hand the shorter way of displaying this rank, can be used by other modules --- @field tag the tag that player in this rank will be given --- @field colour the colour that modules should display this rank as in guis --- @field parent the name of the rank that permissions are inherited from, allow comes from children, disallow given to children --- @field base_afk_time a relative number that the rank should be given that other modules can use for relitive importance --- @field time the time that is requied for this rank to be given, can be nil for manal only --- @field allow a list of permissions that this rank is allowed --- @field disallow a list of acctions that is blocked by the ingame permission system --- @field is_default will be given to all players if no other rank is set for them --- @field is_admin will promote player to ingame admin if flag set (will auto demote if not set) --- @field is_spectator will auto set the spectator option for the player (will cleat option if not set) --- @field is_root rank is always allowed all action, when present in root group will become the root child that all ranks are indexed from -Ranking._rank = {} - ---- Is this rank allowed to open this gui or use this command etc. --- @usage rank:allowed('interface') -- does the rank have permision for 'interface' --- @tparam teh action to test for --- @treturn boolean is it allowed -function Ranking._rank:allowed(action) - return self.allow[action] or self.is_root or false -end - ---- Get all the players in this rank --- @usage rank:get_players() --- @tparam[opt=false] boolean online get only online players --- @treturn table a table of all players in this rank -function Ranking._rank:get_players(online) - local players = game.permissions.get_group(self.name).players - local _return = {} - if online then - for _,player in pairs(players) do if player.connected then table.insert(_return,player) end end - else _return = players end - return _return -end - ---- Print a message to all players of this rank --- @usage rank:print('foo') -- prints to all members of this rank --- @param rtn any value you want to return --- @tparam[opt=defines.color.white] define.color colour the colour that will be used to print --- @tparam[opt=false] boolean show_default weather to use the default rank name for the print, used as a pass though -function Ranking._rank:print(rtn,colour,show_default) - local colour = colour or defines.color.white - local default = Ranking.get_rank(Ranking.meta.default) - for _,player in pairs(self:get_players(true)) do - if self.name == default.name or show_default then player_return({'ranking.all-rank-print',rtn},colour,player) - else player_return({'ranking.rank-print',self.name,rtn},colour,player) end - end -end - ---- Allows for a clean way to edit rank objects --- @usage rank:edit('allow',{'interface'}) -- allows this rank to use 'interface' --- @tparam string key the key to edit, often allow or disallow --- @param value the new value to be set -function Ranking._rank:edit(key,value) - if game then return end - verbose('Edited Rank: '..self.group..'/'..self.name..'/'..key) - if key == 'disallow' then self.disallow = table.merge(self.disallow,value,true) - elseif key == 'allow' then self.allow = table.merge(self.allow,value) - else self[key] = value end -end - ---- The class for the rank groups, the way to allow modules to idex a group that is always present, ranks will always look to there group as a parent --- @type Group --- @alias Ranking._group --- @field name the name that is given to the rank group, must be unique --- @field parent the name of the group that permissions are inherited from --- @field allow a list of permissions that this rank is allowed --- @field disallow a list of acctions that is blocked by the ingame permission system -Ranking._group = {} - ---- Creates a new group --- @usage Ranking._group:create{name='root'} -- returns group with name root --- @tparam table obj the fields for this object --- @treturn Ranking._group returns the object to allow chaining -function Ranking._group:create(obj) - if game then return end - if not is_type(obj.name,'string') then error('Group creationg is invalid',2) end - verbose('Created Group: '..obj.name) - setmetatable(obj,{__index=Ranking._group}) - obj.ranks = {} - obj.allow = obj.allow or {} - obj.disallow = obj.disallow or {} - Ranking.groups[obj.name] = obj - return obj -end - ---- Creats a new rank with this group as its group --- @usage group:add_rank{name='root'} -- returns self --- @tparam table obj the fields for this object --- @treturn Ranking._group returns the object to allow chaining -function Ranking._group:add_rank(obj) - if game then return end - if not is_type(obj.name,'string') or - not is_type(obj.short_hand,'string') or - not is_type(obj.tag,'string') or - not is_type(obj.colour,'table') then error('Rank creation is invalid',2) end - verbose('Created Rank: '..obj.name) - setmetatable(obj,{__index=Ranking._rank}) - obj.group = self.name - obj.children = {} - obj.allow = obj.allow or {} - obj.disallow = obj.disallow or {} - table.insert(self.ranks,obj.name) - Ranking.ranks[obj.name] = obj - return self -end - ---- Allows for a clean way to edit rank group objects --- @usage group:edit('allow',{'interface'}) -- allows this rank to use 'interface' --- @tparam string key the key to edit, often allow or disallow --- @param value the new value to be set -function Ranking._group:edit(key,value) - if game then return end - verbose('Edited Group: '..self.name..'/'..key) - if key == 'disallow' then self.disallow = table.merge(self.disallow,value,true) - elseif key == 'allow' then self.allow = table.merge(self.allow,value) - else self[key] = value end -end - -script.on_event('on_player_joined_game',function(event) - Ranking.find_preset(event.player_index) -end) - -script.on_event('on_init',function(event) - for name,rank in pairs(Ranking.ranks) do - local perm = game.permissions.create_group(name) - for _,toRemove in pairs(rank.disallow) do - perm.set_allows_action(defines.input_action[toRemove],false) - end - end -end) - -script.on_event('on_tick',function(event) - if (((event.tick+10)/(3600*game.speed))+(15/2))% 15 == 0 then - -- this is the system to auto rank players - for _,player in pairs(game.connected_players) do - Ranking.find_preset(player,tick) - end - end -end) - -verbose('Loading rank core...') -require(module_path..'/src/core',{Ranking=Ranking}) -verbose('Loading rank configs...') -require(module_path..'/src/config',{Ranking=Ranking}) - -function Ranking:on_init() - if loaded_modules['ExpGamingCore.Server'] then verbose('ExpGamingCore.Server is installed; Loading server src') require(module_path..'/src/server',{Ranking=Ranking}) end - if loaded_modules['ExpGamingCore.Command'] then verbose('ExpGamingCore.Server is installed; Loading commands src') require(module_path..'/src/commands',{Ranking=Ranking}) end -end - -function Ranking:on_post() - -- other modules can creat ranks during init and this will then set up the meta data - -- sets up the power system, the lower the power the closer to root, root is 0 - -- there must be a rank with is_root flag set and one rank with is_default flag set, if multiple found then first found is used - local root = Ranking.get_rank(Ranking.meta.root) - root:edit('power',0) - -- asigning of children - verbose('Creating Rank Tree') - for name,rank in pairs(Ranking.ranks) do - if rank ~= root then - if not rank.parent then error('Rank has no parent: "'..name..'"') end - if not Ranking.ranks[rank.parent] then error('Invalid parent rank: "'..rank.parent..'"') end - table.insert(Ranking.ranks[rank.parent].children,name) - Ranking.ranks[rank.parent]:edit('allow',rank.allow) - rank:edit('disallow',Ranking.ranks[rank.parent].disallow) - end - end - -- asigning of powers - -- @todo need a better system for non liner rank trees - verbose('Assigning Rank Powers') - local power = 1 - local function set_powers(rank) - for _,name in pairs(rank.children) do - Ranking.ranks[name]:edit('power',power) - power=power+1 - end - for _,name in pairs(rank.children) do set_powers(Ranking.ranks[name]) end - end - set_powers(root) - -- asigning group meta data - verbose('Creating Rank-Group Relationship') - for name,group in pairs(Ranking.groups) do - if name ~= 'Root' then - if not group.parent then error('Group has no parent: "'..name..'"') end - if not Ranking.groups[group.parent] then error('Invalid parent rank: "'..group.parent..'"') end - Ranking.groups[group.parent]:edit('allow',group.allow) - group:edit('disallow',Ranking.groups[group.parent].disallow) - end - for _,name in pairs(group.ranks) do - local rank = Ranking.ranks[name] - rank:edit('disallow',group.disallow) - rank:edit('allow',group.allow) - if not group.highest or Ranking.ranks[group.highest].power > rank.power then group.highest = rank.name end - if not group.lowest or Ranking.ranks[group.highest].power < rank.power then group.lowest = rank.name end - end - end -end - -return Ranking \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/locale/de.cfg b/modules/ExpGamingCore/Ranking/locale/de.cfg deleted file mode 100644 index 8889c096..00000000 --- a/modules/ExpGamingCore/Ranking/locale/de.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[ranking] -all-rank-print=[Alle]: __1__ -rank-print=[__1__]: __2__ -rank-up=__1__ wurde befördert zu __2__ von __3__ -rank-down=__1__ wurde degradiert zu __2__ von __3__ -rank-given=Dir wurde der Rang __1__ zugeteilt! -tag-reset=Dein Spitzname wurde aufgrund eines Rangwechsels zurückgesetzt. \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/locale/en.cfg b/modules/ExpGamingCore/Ranking/locale/en.cfg deleted file mode 100644 index dc641783..00000000 --- a/modules/ExpGamingCore/Ranking/locale/en.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[ranking] -all-rank-print=[Everyone]: __1__ -rank-print=[__1__]: __2__ -rank-up=__1__ was promoted to __2__ by __3__ -rank-down=__1__ was demoted to __2__ by __3__ -rank-given=You have been given the __1__ Rank! -tag-reset=Your Tag was reset due to a Rank change \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/locale/fr.cfg b/modules/ExpGamingCore/Ranking/locale/fr.cfg deleted file mode 100644 index dc641783..00000000 --- a/modules/ExpGamingCore/Ranking/locale/fr.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[ranking] -all-rank-print=[Everyone]: __1__ -rank-print=[__1__]: __2__ -rank-up=__1__ was promoted to __2__ by __3__ -rank-down=__1__ was demoted to __2__ by __3__ -rank-given=You have been given the __1__ Rank! -tag-reset=Your Tag was reset due to a Rank change \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/locale/nl.cfg b/modules/ExpGamingCore/Ranking/locale/nl.cfg deleted file mode 100644 index 16e5c4f1..00000000 --- a/modules/ExpGamingCore/Ranking/locale/nl.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[ranking] -all-rank-print=[Everyone]: __1__ -rank-print=[__1__]: __2__ -rank-up=__1__ is gepromoot naar __2__ door __3__ -rank-down=__1__ is gedegradeerd naar __2__ door __3__ -rank-given=Je rank is veranderd naar __1__ -tag-reset=Je tag is gereset door een wijziging in je rank. \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/locale/sv-SE.cfg b/modules/ExpGamingCore/Ranking/locale/sv-SE.cfg deleted file mode 100644 index 8ee4d10a..00000000 --- a/modules/ExpGamingCore/Ranking/locale/sv-SE.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[ranking] -all-rank-print=[Everyone]: __1__ -rank-print=[__1__]: __2__ -rank-up=__1__ blev befordrad till __2__ av __3__ -rank-down=__1__ blev degraderad till __2__ av __3__ -rank-given=Du har fått __1__ Rang! -tag-reset=Din tag blev återställd på grund av rangförändrning. \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/softmod.json b/modules/ExpGamingCore/Ranking/softmod.json deleted file mode 100644 index e5f08c27..00000000 --- a/modules/ExpGamingCore/Ranking/softmod.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "Ranking", - "version": "4.0.0", - "type": "Submodule", - "description": "A full ranking system for factorio.", - "location": "https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Ranking_4.0.0.zip", - "keywords": [ - "Library", - "Lib", - "ExpGaming", - "Core", - "Ranking", - "Ranks", - "Permissions", - "Roles" - ], - "dependencies": { - "ExpGamingLib": "^4.0.0", - "FactorioStdLib.Color": "^0.8.0", - "FactorioStdLib.Table": "^0.8.0", - "FactorioStdLib.Game": "^0.8.0", - "ExpGamingCore.Server": "?^4.0.0" - }, - "collection": "ExpGamingCore_4.0.0" -} \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/src/commands.lua b/modules/ExpGamingCore/Ranking/src/commands.lua deleted file mode 100644 index 3ea544c7..00000000 --- a/modules/ExpGamingCore/Ranking/src/commands.lua +++ /dev/null @@ -1,28 +0,0 @@ -local Ranking = Ranking - -commands.add_validation('player-rank',function(value,event) - local player,err = commands.validate['player'](value) - return err and commands.error(err) - or Ranking.get_rank(player).power > Ranking.get_rank(event).power and player - or commands.error{'commands.error-player-rank'} -end) - -commands.add_validation('player-rank-online',function(value,event) - local player,err = commands.validate['player-online'](value) - if err then return commands.error(err) end - local player,err = commands.validate['player-rank'](player) - if err then return commands.error(err) end - return player -end) - -commands.add_validation('player-rank-alive',function(value,event) - local player,err = commands.validate['player-alive'](value) - if err then return commands.error(err) end - local player,err = commands.validate['player-rank'](player) - if err then return commands.error(err) end - return player -end) - -commands.add_middleware(function(player_name,command_name,event) - return Ranking.get_rank(player_name):allowed(command_name) -end) \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/src/config.lua b/modules/ExpGamingCore/Ranking/src/config.lua deleted file mode 100644 index fde68174..00000000 --- a/modules/ExpGamingCore/Ranking/src/config.lua +++ /dev/null @@ -1,112 +0,0 @@ ---[[ - How to use groups: -name The name that you can use to reference it. -disallow If present then all ranks in this group will have this added to their disallow. -allow If present then all ranks in this group will have this added to their allow. -highest Assigned by the script to show the highest rank in this group. -lowest Assigned by the script to show the lowest rank in this group. -How to add ranks: -Name What will be used in the scripts and is often the best choice for display in text. -short_hand What can be used when short on space but the rank still need to be displayed. -tag The tag the player will gain when moved to the rank, it can be nil. -time Used for auto-rank feature where you are moved to the rank after a certain play time in minutes. -colour The RGB value that can be used to emphasise GUI elements based on rank. -power Assigned by the script based on their index in ranks, you can insert new ranks between current ones. -group Assigned by the script to show the group this rank is in. -disallow A list containing input actions that the user can not perform. -allow A list of custom commands and effects that that rank can use, all defined in the scripts. - -For allow, add the allow as the key and the value as true -Example: test for 'server-interface' => allow['server-interface'] = true - -For disallow, add to the list the end part of the input action -Example: defines.input_action.drop_item -> 'drop_item' -http://lua-api.factorio.com/latest/defines.html#defines.input_action ---]] - -local groups = Ranking.groups -local ranks = Ranking.ranks - -groups['Root']:add_rank{ - name='Owner', - short_hand='Owner', - tag='[Owner]', - parent='Root', - time=nil, - colour={r=170,g=0,b=0}, - is_admin = true, - is_spectator=true, - base_afk_time=false -} -groups['Root']:add_rank{ - name='Community Manager', - short_hand='Com Mngr', - tag='[Com Mngr]', - parent='Root', - colour={r=150,g=68,b=161}, - is_admin = true, - is_spectator=true, - base_afk_time=false -} -groups['Root']:add_rank{ - name='Developer', - short_hand='Dev', - tag='[Dev]', - parent='Root', - colour={r=179,g=125,b=46}, - is_admin = true, - is_spectator=true, - base_afk_time=false -} - -ranks['Admin']:edit('parent','Developer') -groups['Admin']:add_rank{ - name='Mod', - short_hand='Mod', - tag='[Mod]', - parent='Admin', - colour={r=0,g=170,b=0}, - disallow={ - 'server_command' - }, - is_admin = true, - is_spectator=true, - base_afk_time=false -} - -groups['User']:add_rank{ - name='Donator', - short_hand='P2W', - tag='[P2W]', - parent='Mod', - colour={r=233,g=63,b=233}, - is_spectator=true, - base_afk_time=120 -} -groups['User']:add_rank{ - name='Veteran', - short_hand='Vet', - tag='[Veteran]', - parent='Donator', - time=600, - colour={r=140,g=120,b=200}, - base_afk_time=60 -} -ranks['Member']:edit('parent','Veteran') -groups['User']:add_rank{ - name='Regular', - short_hand='Reg', - tag='[Regular]', - parent='Member', - time=180, - colour={r=24,g=172,b=188}, - base_afk_time=30 -} -ranks['Guest']:edit('parent','Regular') - -Ranking._base_preset{ - ['badgamernl']='Owner', - ['arty714']='Community Manager', - ['cooldude2606']='Developer', - ['mark9064']='Admin' -} \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/src/core.lua b/modules/ExpGamingCore/Ranking/src/core.lua deleted file mode 100644 index 1e7ce466..00000000 --- a/modules/ExpGamingCore/Ranking/src/core.lua +++ /dev/null @@ -1,149 +0,0 @@ ---[[ - How to use groups: -name the name that you can use to refence it. -disallow if present then all ranks in this group will have this added to their disallow. -allow if present then all ranks in this group will have this added to their allow. -highest is asigned by the script to show the highest rank in this group. -lowest is asigned by the script to show the lowest rank in this group. -How to add ranks: -Name is what will be used in the scripts and is often the best choice for display in text. -short_hand is what can be used when short on space but the rank still need to be displayed. -tag is the tag the player will gain when moved to the rank, it can be nil. -time is used for auto-rank feature where you are moved to the rank after a certain play time in minutes. -colour is the RGB value that can be used to emphasise GUI elements based on rank. -power is asigned by the script based on their index in ranks, you can insert new ranks between current ones, lower is better -group is asigned by the script to show the group this rank is in -disallow is a list containing input actions that the user can not perform. -allow is a list of custom commands and effects that that rank can use, all defined in the sctips. - -For allow, add the allow as the key and the value as true -Example: test for 'server-interface' => allow['server-interface'] = true - -For disallow, add to the list the end part of the input action -Example: defines.input_action.drop_item -> 'drop_item' -http://lua-api.factorio.com/latest/defines.html#defines.input_action ---]] - --- If you wish to add more groups please use src/config or add during your own module --- If you wish to add to these rank groups use src/config or add during your own module --- But groups do not inherite from each other --- DO NOT REMOVE ANY OF THESE GROUPS!!! - -local root = Ranking._group:create{ - name='Root', - allow={ - ['interface'] = true - }, - disallow={} -} -local admin = Ranking._group:create{ - name='Admin', - parent='Root', - allow={}, - disallow={ - 'edit_permission_group', - 'delete_permission_group', - 'add_permission_group' - } -} -local user = Ranking._group:create{ - name='User', - parent='Admin', - allow={}, - disallow={} -} -local jail = Ranking._group:create{ - name='Jail', - parent='User', - allow={}, - disallow={ - 'open_character_gui', - 'begin_mining', - 'start_walking', - 'player_leave_game', - 'open_blueprint_library_gui', - 'build_item', - 'use_item', - 'select_item', - 'rotate_entity', - 'open_train_gui', - 'open_train_station_gui', - 'open_gui', - 'open_item', - 'deconstruct', - 'build_rail', - 'cancel_research', - 'start_research', - 'set_train_stopped', - 'select_gun', - 'open_technology_gui', - 'open_trains_gui', - 'edit_custom_tag', - 'craft', - 'setup_assembling_machine', - } -} - --- If you wish to add more ranks please use src/config or add during your own module --- If you wish to add to these rank use src/config or add during your own module -root:add_rank{ - name='Root', - short_hand='Root', - tag='[Root]', - colour={r=255,b=255,g=255}, - is_root=true, - is_admin=true, - is_spectator=true, - base_afk_time=false -} - -admin:add_rank{ - name='Admin', - short_hand='Admin', - tag='[Admin]', - parent='Root', - colour={r=233,g=63,b=233}, - is_admin=true, - is_spectator=true, - base_afk_time=false -} - -user:add_rank{ - name='Member', - short_hand='Mem', - tag='[Member]', - parent='Admin', - colour={r=24,g=172,b=188}, - disallow={ - 'set_auto_launch_rocket', - 'change_programmable_speaker_alert_parameters', - 'drop_item' - }, - base_afk_time=60 -} -user:add_rank{ - name='Guest', - short_hand='', - tag='', - parent='Member', - colour={r=255,g=159,b=27}, - is_default=true, - disallow={ - 'build_terrain', - 'remove_cables', - 'launch_rocket', - 'reset_assembling_machine', - 'cancel_research' - }, - base_afk_time=10 -} - -jail:add_rank{ - name='Jail', - short_hand='Jail', - tag='[Jail]', - parent='Guest', - colour={r=50,g=50,b=50}, - disallow={}, - base_afk_time=false -} \ No newline at end of file diff --git a/modules/ExpGamingCore/Ranking/src/server.lua b/modules/ExpGamingCore/Ranking/src/server.lua deleted file mode 100644 index ca50bf62..00000000 --- a/modules/ExpGamingCore/Ranking/src/server.lua +++ /dev/null @@ -1,51 +0,0 @@ ---- A full ranking system for factorio. --- @submodule ExpGamingCore.Ranking --- @alias Ranking --- @author Cooldude2606 --- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE - ---- This file will be loaded when ExpGamingCore.Server is present --- @function _comment - -local Game = require('FactorioStdLib.Game') -local Color = require('FactorioStdLib.Color') -local Server = require('ExpGamingCore.Server') -local Ranking = Ranking - ---- Print a message to all players of this rank --- @usage rank:print('foo') -- prints to all members of this rank --- @param rtn any value you want to return --- @tparam[opt=defines.color.white] define.color colour the colour that will be used to print --- @tparam[opt=false] boolean show_default weather to use the default rank name for the print, used as a pass though -function Ranking._rank:print(rtn,colour,show_default) - local colour = colour or defines.color.white - local default = Ranking.get_rank(Ranking.meta.default) - Server.new_thread{ - data={rank=self,rtn=rtn,default=default.name,all=show_default} - }:on_event('resolve',function(thread) - return thread.data.rank:get_players(true) - end):on_event('success',function(thread,players) - for _,player in pairs(players) do - if thread.data.rank.name == thread.data.default or thread.data.all then - player_return({'ranking.all-rank-print',thread.data.rtn},colour,player) - else - player_return({'ranking.rank-print',thread.data.rank.name,thread.data.rtn},colour,player) - end - end - end):queue() -end - -script.on_event('on_tick',function(event) - if (((event.tick+10)/(3600*game.speed))+(15/2))% 15 == 0 then - Server.new_thread{ - data={players=game.connected_players} - }:on_event('tick',function(thread) - if #thread.data.players == 0 then thread:close() return end - local player = table.remove(thread.data.players,1) - Ranking.find_preset(player,tick) - end):open() - end -end) - -Server.add_to_interface('rank',function() return Ranking.get_rank(game.player) end) -Server.add_module_to_interface('Ranking','ExpGamingCore.Ranking') \ No newline at end of file diff --git a/modules/ExpGamingCore/Role/config.lua b/modules/ExpGamingCore/Role/config.lua index 3ad720ce..89cf3533 100644 --- a/modules/ExpGamingCore/Role/config.lua +++ b/modules/ExpGamingCore/Role/config.lua @@ -1,10 +1,13 @@ Role.add_flag('is_default') -- this must be included in atleast one role Role.add_flag('is_root',function(player,state) player.character.destructible = not state end) -- not required but setting true will allow everythin for that role +Role.add_flag('is_antiroot',function(player,state) player.character.destructible = not state end) -- not required but setting true will disallow everythin for that role Role.add_flag('is_admin',function(player,state) player.admin = state end) -- highly recomented but not required Role.add_flag('is_spectator',function(player,state) player.spectator = state end) Role.add_flag('is_jail',function(player,state) player.character.active = not state end) Role.add_flag('is_donator') Role.add_flag('is_timed') +Role.add_flag('is_varified') +Role.add_flag('not_reportable') -- Root Role{ @@ -16,6 +19,7 @@ Role{ is_root=true, is_admin=true, is_spectator=true, + not_reportable=true, allow={} } Role{ @@ -53,6 +57,7 @@ Role{ colour={r=233,g=63,b=233}, is_admin=true, is_spectator=true, + not_reportable=true, allow={ ['game-settings']=true, ['always-warp']=true, @@ -67,6 +72,7 @@ Role{ colour={r=0,g=170,b=0}, is_admin=true, is_spectator=true, + not_reportable=true, allow={ ['set-home']=true, ['home']=true, @@ -82,6 +88,7 @@ Role{ group='Admin', colour={r=0,g=196,b=137}, is_spectator=true, + not_reportable=true, allow={ ['go-to']=true, ['bring']=true, @@ -153,6 +160,7 @@ Role{ group='HiMember', colour={r=140,g=120,b=200}, is_timed=true, + is_varified=true, time=600, -- 10 hours allow={ ['global-chat']=true, @@ -169,6 +177,7 @@ Role{ tag='[Member]', group='Member', colour={r=24,g=172,b=188}, + is_varified=true, allow={ ['edit-tasklist']=true, ['make-warp']=true, @@ -223,6 +232,7 @@ Role{ group='Jail', colour={r=50,g=50,b=50}, is_jail=true, + is_antiroot=true, allow={} } diff --git a/modules/ExpGamingCore/Role/control.lua b/modules/ExpGamingCore/Role/control.lua index eb6012da..b57dcd3f 100644 --- a/modules/ExpGamingCore/Role/control.lua +++ b/modules/ExpGamingCore/Role/control.lua @@ -1,7 +1,7 @@ --- Adds roles where a player can have more than one role -- @module ExpGamingCore.Role@4.0.0 -- @author Cooldude2606 --- @license https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Ranking_4.0.0.zip +-- @license https://github.com/explosivegaming/scenario/releases/download/v4.0-core/ExpGamingCore.Role_4.0.0.zip -- @alais Role -- Module Require @@ -18,7 +18,7 @@ local Role = { order={}, flags={}, actions={}, - meta={times={}}, + meta={times={},groups={}}, roles=setmetatable({},{ __index=table.autokey, __newindex=function(tbl,key,value) @@ -39,6 +39,9 @@ local Role = { if not role then error('Invalid role name in order listing: '..role_name) return end if role.is_default then self.meta.default = role end if role.is_timed then self.meta.times[role.name] = {index,role.time} end + if not self.meta.groups[role.group.name] then self.meta.groups[role.group.name] = {lowest=index,highest=index} end + if self.meta.groups[role.group.name].highest > index then self.meta.groups[role.group.name].highest = index end + if self.meta.groups[role.group.name].lowest < index then self.meta.groups[role.group.name].lowest = index end if previous then setmetatable(previous.allow,{__index=role.allow}) end role.index = index previous = role @@ -52,6 +55,7 @@ local Role = { local global = global{ change_chache_length=15, changes={}, + latest_change={}, preassign={}, players={}, roles={} @@ -118,14 +122,14 @@ function Role.assign(player,role,by_player,no_log) if is_type(role,'table') and not role.name then local ctn = 0 for _,_role in ipairs(role) do ctn=ctn+1 Role.assign(player,_role,by_player,true) end - if ctn > 0 then if not no_log then table.insert(global.changes[player.index],{'assign',role}) end return end + if ctn > 0 then if not no_log then table.insert(global.changes[player.index],{'assign',role}) global.latest_change = {player.index,'assign',role} end return end end local role = Role.get(role) if not role then error('Invalid role #2 given to Role.assign.',2) return end -- this acts as a way to provent the global table getting too full if not global.changes[player.index] then global.changes[player.index]={} end if #global.changes[player.index] > global.change_chache_length then table.remove(global.changes[player.index],1) end - if not no_log then table.insert(global.changes[player.index],{'assign',role.name}) end + if not no_log then table.insert(global.changes[player.index],{'assign',role.name}) global.latest_change = {player.index,'assign',role.name} end return role:add_player(player,by_player) end @@ -143,14 +147,14 @@ function Role.unassign(player,role,by_player,no_log) if is_type(role,'table') and not role.name then local ctn = 0 for _,_role in ipairs(role) do ctn=ctn+1 Role.unassign(player,_role,by_player,true) end - if ctn > 0 then if not no_log then table.insert(global.changes[player.index],{'unassign',role}) end return end + if ctn > 0 then if not no_log then table.insert(global.changes[player.index],{'unassign',role}) global.latest_change = {player.index,'unassign',role} end return end end local role = Role.get(role) if not role then error('Invalid role #2 given to Role.unassign.',2) return end if not global.changes[player.index] then global.changes[player.index]={} end -- this acts as a way to provent the global table getting too full if #global.changes[player.index] > global.change_chache_length then table.remove(global.changes[player.index],1) end - if not no_log then table.insert(global.changes[player.index],{'unassign',role.name}) end + if not no_log then table.insert(global.changes[player.index],{'unassign',role.name}) global.latest_change = {player.index,'unassign',role.name} end return role:remove_player(player,by_player) end @@ -306,6 +310,7 @@ end function Role._prototype:allowed(action) if not self_test(self,'role','allowed') then return end if not type_error(action,'string','Invalid argument #1 to role:allowed, action is not a string.') then return end + if self.is_antiroot then return false end return self.allow[action] or self.is_root or false -- still include is_root exception flag end @@ -379,8 +384,7 @@ function Role._prototype:add_player(player,by_player) if not self_test(self,'role','add_player') then return end local player = Game.get_player(player) if not player then error('Invalid player #1 given to role:add_player.',2) return end - local by_player = Game.get_player(by_player) - if not by_player then by_player = {name='',index=0} end + local by_player = Game.get_player(by_player) or SERVER if not global.roles[self.name] then global.roles[self.name] = {} end if not global.players[player.index] then global.players[player.index] = {} end local highest = Role.get_highest(player) or Role.meta.default @@ -405,7 +409,7 @@ function Role._prototype:remove_player(player,by_player) if not self_test(self,'role','add_player') then return end local player = Game.get_player(player) if not player then error('Invalid player #1 given to role:remove_player.',2) return end - local by_player = Game.get_player(by_player) or {name='',index=0} + local by_player = Game.get_player(by_player) or SERVER if not global.roles[self.name] then global.roles[self.name] = {} end if not global.players[player.index] then global.players[player.index] = {} end local highest = Role.get_highest(player) or Role.meta.default @@ -429,7 +433,7 @@ end script.on_event(role_change_event_id,function(event) -- varible init local player = Game.get_player(event) - local by_player = Game.get_player(event.by_player_index) or {name='',index=0} + local by_player = Game.get_player(event.by_player_index) or SERVER local role = Role.get(event.role_name) local highest = Role.get_highest(player) or {__faild=true,tag='',name='None'} -- gets the falgs the player currently has @@ -437,7 +441,10 @@ script.on_event(role_change_event_id,function(event) -- assign new tag and group of highest role if highest.__faild then Group.get(player):remove_player(player) else Group.assign(player,highest.group) end - if player.tag ~= highest.tag then player.tag = highest.tag player.print{'ExpGamingCore-Role.tag-reset'} end + local old_highest_tag = Role.get(event.old_highest).tag or '' + local start, _end = string.find(player.tag,old_highest_tag,1,true) + if start and old_highest_tag ~= highest.tag then player.tag = string.sub(player.tag,0,start-1)..highest.tag..string.sub(player.tag,_end+1) end + if not start then player.tag = highest.tag player_return({'ExpGamingCore-Role.tag-reset'},nil,player) end -- play a sound to the player if event.effect == 'assign' and not role.is_jail then player.play_sound{path='utility/achievement_unlocked'} else player.play_sound{path='utility/game_lost'} end @@ -454,6 +461,7 @@ script.on_event(role_change_event_id,function(event) by_player_name=by_player.name, role_name=role.name, highest_role_name=highest.name, + old_highest=event.highest, effect=event.effect })..'\n' , true, 0) diff --git a/modules/ExpGamingCore/Sync/control.lua b/modules/ExpGamingCore/Sync/control.lua index f60bddd2..92939063 100644 --- a/modules/ExpGamingCore/Sync/control.lua +++ b/modules/ExpGamingCore/Sync/control.lua @@ -177,24 +177,24 @@ function Sync.count_afk_times(time) return rtn end ---- Used to get the number of players in each rank and currently online; if ExpGamingCore/Ranking is present then it will give more than admin and user --- @usage Sync.count_ranks() +--- Used to get the number of players in each rank and currently online; if ExpGamingCore/Role is present then it will give more than admin and user +-- @usage Sync.count_roles() -- @treturn table contains the ranks and the players in that rank -function Sync.count_ranks() +function Sync.count_roles() if not game then return {'Offline'} end - local _ranks = {admin={online={},players={}},user={online={},players={}}} + local _roles = {admin={online={},players={}},user={online={},players={}}} for index,player in pairs(game.players) do if player.admin then - table.insert(_ranks.admin.players,player.name) - if player.connected then table.insert(_ranks.admin.online,player.name) end + table.insert(_roles.admin.players,player.name) + if player.connected then table.insert(_roles.admin.online,player.name) end else - table.insert(_ranks.user.players,player.name) - if player.connected then table.insert(_ranks.user.online,player.name) end + table.insert(_roles.user.players,player.name) + if player.connected then table.insert(_roles.user.online,player.name) end end end - _ranks.admin.n_players,_ranks.admin.n_online=#_ranks.admin.players,#_ranks.admin.online - _ranks.user.n_players,_ranks.user.n_online=#_ranks.user.players,#_ranks.user.online - return _ranks + _roles.admin.n_players,_roles.admin.n_online=#_roles.admin.players,#_roles.admin.online + _roles.user.n_players,_roles.user.n_online=#_roles.user.players,#_roles.user.online + return _roles end --- Used to get a list of every player name with the option to limit to only online players @@ -255,7 +255,7 @@ function Sync.update() afk_players=Sync.count_afk_times(), times=Sync.count_player_times() } - info.ranks = Sync.count_ranks() + info.ranks = Sync.count_roles() info.rockets = game.forces['player'].get_item_launched('satellite') for key,callback in pairs(Sync_updates) do info[key] = callback() end return info @@ -310,7 +310,7 @@ script.on_event('on_rocket_launched',Sync.emit_update) function Sync:on_init() if loaded_modules['ExpGamingCore.Gui'] then verbose('ExpGamingCore.Gui is installed; Loading gui src') require(module_path..'/src/gui',{Sync=Sync}) end - if loaded_modules['ExpGamingCore.Ranking'] then verbose('ExpGamingCore.Ranking is installed; Loading ranking src') require(module_path..'/src/ranking',{Sync=Sync}) end + if loaded_modules['ExpGamingCore.Role'] then verbose('ExpGamingCore.Role is installed; Loading role src') require(module_path..'/src/ranking',{Sync=Sync}) end if loaded_modules['ExpGamingCore.Server'] then require('ExpGamingCore.Server').add_module_to_interface('Sync','ExpGamingCore.Sync') end end diff --git a/modules/ExpGamingCore/Sync/src/ranking.lua b/modules/ExpGamingCore/Sync/src/ranking.lua index a125e04a..626de0a1 100644 --- a/modules/ExpGamingCore/Sync/src/ranking.lua +++ b/modules/ExpGamingCore/Sync/src/ranking.lua @@ -4,55 +4,55 @@ -- @author Cooldude2606 -- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE ---- This file will be loaded when ExpGamingCore.Ranking is present +--- This file will be loaded when ExpGamingCore.Role is present -- @function _comment local Game = require('FactorioStdLib.Game') local Color = require('FactorioStdLib.Color') -local Ranking = require('ExpGamingCore.Ranking') +local Role = require('ExpGamingCore.Role') ---- Used as a redirect to Ranking._base_preset that will set the rank given to a player apon joining --- @usage Sync.set_ranks{player_name=rank_name,...} -function Sync.set_ranks(...) - Ranking._base_preset(...) +--- Used as a redirect to Role._base_preset that will set the rank given to a player apon joining +-- @usage Sync.set_roles{player_name=rank_name,...} +function Sync.set_roles(...) + Role._base_preset(...) end --- Used to get the number of players in each rank and currently online --- @usage Sync.count_ranks() +-- @usage Sync.count_roles() -- @treturn table contains the ranks and the players in that rank -function Sync.count_ranks() +function Sync.count_roles() if not game then return {'Offline'} end - local _ranks = {} - for name,rank in pairs(Ranking.ranks) do - local players = rank:get_players() + local _roles = {} + for name,role in pairs(Role.roles) do + local players = role:get_players() for k,player in pairs(players) do players[k] = player.name end - local online = rank:get_players(true) + local online = role:get_players(true) for k,player in pairs(online) do online[k] = player.name end - _ranks[rank.name] = {players=players,online=online,n_players=#players,n_online=#online} + _roles[role.name] = {players=players,online=online,n_players=#players,n_online=#online} end - return _ranks + return _roles end -- Adds a caption to the info gui that shows the rank given to the player if Sync.add_to_gui then Sync.add_to_gui(function(player,frame) - return 'You have been assigned the rank \''..Ranking.get_rank(player).name..'\'' + return 'You have been assigned the rank \''..Role.get_highest(player).name..'\'' end) end -- adds a discord emit for rank chaning -script.on_event('on_rank_change',function(event) - local rank = Ranking.get_rank(event.new_rank) +script.on_event('on_role_change',function(event) + local role = Role.get(event.role_name) local player = Game.get_player(event) - local by_player_name = Game.get_player(event.by_player_index) or '' - local global = global.Ranking - if rank.group.name == 'Jail' and global.last_change ~= player.name then + local by_player = Game.get_player(event.by_player_index) or SERVER + local global = global['ExpGamingCore.Role^4.0.0'] + if role.is_jail == 'Jail' and global.last_change[1] ~= player.index then Sync.emit_embeded{ title='Player Jail', color=Color.to_hex(defines.textcolor.med), description='There was a player jailed.', ['Player:']='<>'..player.name, - ['By:']='<>'..by_player_name, + ['By:']='<>'..by_player.name, ['Reason:']='No Reason' } end diff --git a/modules/ExpGamingInfo/to convert/tasklist.lua b/modules/ExpGamingInfo/to convert/tasklist.lua index f4cb2262..756e5868 100644 --- a/modules/ExpGamingInfo/to convert/tasklist.lua +++ b/modules/ExpGamingInfo/to convert/tasklist.lua @@ -132,8 +132,8 @@ Gui.left.add{ } local data = _global() local player = Game.get_player(frame.player_index) - local rank = Ranking.get_rank(player) - if rank:allowed('edit-tasklist') then + local allowed = Role.allowed(player,'edit-tasklist') + if allowed then if not data._edit[player.index] then data._edit[player.index] = table.deepcopy(data._base) end end for i,task in pairs(_tasks(player)) do @@ -156,7 +156,7 @@ Gui.left.add{ type='flow', direction='horizontal' } - if rank:allowed('edit-tasklist') then + if allowed then _edit(button_flow) if data._edit[player.index]._editing[i] then local element = remove:draw(button_flow) @@ -168,7 +168,7 @@ Gui.left.add{ end end end - if rank:allowed('edit-tasklist') then + if allowed then local flow = title.add{ name=#_tasks(player), type='flow', @@ -182,11 +182,10 @@ Gui.left.add{ element.style.height = 20 element.style.width = 20 end - if #_tasks(player) == 0 and not rank:allowed('edit-tasklist') then frame.style.visible = false end + if #_tasks(player) == 0 and not role:allowed('edit-tasklist') then frame.style.visible = false end end, can_open=function(player) - local rank = Ranking.get_rank(player) - if rank:allowed('edit-tasklist') or #_global().tasks > 0 then return true + if Role.allowed(player,'edit-tasklist') or #_global().tasks > 0 then return true else return {'tasklist.none'} end end, open_on_join=true diff --git a/modules/ExpGamingPlayer/afkKick/control.lua b/modules/ExpGamingPlayer/afkKick/control.lua index d54ae51b..5dd2907d 100644 --- a/modules/ExpGamingPlayer/afkKick/control.lua +++ b/modules/ExpGamingPlayer/afkKick/control.lua @@ -5,17 +5,17 @@ local Game = require('FactorioStdLib.Game') local Gui = require('ExpGamingCore.Gui') -local Ranking -- hanndled on load +local Role -- hanndled on load local Sync -- hanndled on load function get_allowed_afk_time(player) - local rank - if Ranking then rank = Ranking.get_rank(player) - else if player.admin then return else rank = {base_afk_time=15} end end + local role + if Role then role = Role.get_highest(player) + else if player.admin then return else rank = Role.meta.default end end local count = #game.connected_players - local base = rank.base_afk_time or false + local base = role.index or false if not base then return false end - return (base/5)*count + return (10/base)*count end script.on_event(defines.events.on_tick,function(event) @@ -31,7 +31,7 @@ end) return { get_allowed_afk_time=get_allowed_afk_time, on_init=function(self) - if loaded_modules['ExpGamingCore.Ranking'] then Ranking = require('ExpGamingCore.Ranking') end + if loaded_modules['ExpGamingCore.Role'] then Role = require('ExpGamingCore.Role') end if loaded_modules['ExpGamingCore.Sync'] then Sync = require('ExpGamingCore.Sync') end if loaded_modules['ExpGamingCore.Server'] then require(module_path..'/src/server',Sync) end end diff --git a/modules/ExpGamingPlayer/inventorySearch/control.lua b/modules/ExpGamingPlayer/inventorySearch/control.lua index 06a47128..e7b89d9e 100644 --- a/modules/ExpGamingPlayer/inventorySearch/control.lua +++ b/modules/ExpGamingPlayer/inventorySearch/control.lua @@ -7,7 +7,7 @@ -- Module Require local Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') -local Ranking -- ExpGamingCore.Ranking@^4.0.0 +local Role -- ExpGamingCore.Role@^4.0.0 -- Local Varibles -- removed from none admin ranks, no further action @@ -48,7 +48,7 @@ local _root_tree = {low_items=low_items,med_items=med_items,high_items=high_item local module_verbose = false local ThisModule = { on_init=function() - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then Ranking = require('ExpGamingCore.Ranking@^4.0.0') end + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then Role = require('ExpGamingCore.Role@^4.0.0') end end } @@ -62,7 +62,7 @@ end function ThisModule.search_player(player) for category,items in pairs(_root_tree) do - if not Ranking or category ~= 'low_items' and not Ranking.get_rank(player):allowed('admin-items') then + if not Role or category ~= 'low_items' and not Role.allowed(player,'admin-items') then for _,_inventory in pairs(inventorys) do local inventory = player.get_inventory(_inventory) if inventory then @@ -82,7 +82,7 @@ script.on_event(defines.events.on_tick,function(event) local players = game.connected_players if #players == 0 then return end local player = players[math.random(#players)] - if Ranking and Ranking.get_rank(player):allowed('all-items') then return end + if Role and Role.allowed(player,'all-items') then return end ThisModule.search_player(player) end end) diff --git a/modules/ExpGamingPlayer/playerInfo/control.lua b/modules/ExpGamingPlayer/playerInfo/control.lua index 7df1101d..ca475a0a 100644 --- a/modules/ExpGamingPlayer/playerInfo/control.lua +++ b/modules/ExpGamingPlayer/playerInfo/control.lua @@ -5,7 +5,8 @@ local Game = require('FactorioStdLib.Game') local Gui = require('ExpGamingCore.Gui') -local Ranking -- hanndled on load +local Role -- hanndled on load +local Group -- hanndled on load local function get_player_info(player,frame,add_cam) local player = Game.get_player(player) @@ -18,23 +19,26 @@ local function get_player_info(player,frame,add_cam) _player.color = player.color _player.admin = player.admin _player.online_time = player.online_time - if Ranking then - _player.rank = Ranking.get_rank(player).name - _player.group = Ranking.get_group(player).name + _player.group = player.permission_group.name + if Role then + _player.highest_role = Role.get_highest(player).name + local roles = {}; for _,role in pairs(Role.get(player)) do table.insert(roles,role.name) end + _player.roles = roles end if frame then local frame = frame.add{type='frame',direction='vertical',style='image_frame'} frame.style.width = 200 - if Ranking then frame.style.height = 275 + if Role then frame.style.height = 275 else frame.style.height = 260 end frame.add{type='label',caption={'player-info.name',_player.index,_player.name},style='caption_label'} local _online = {'player-info.no'}; if _player.online then _online = {'player-info.yes'} end frame.add{type='label',caption={'player-info.online',_online,tick_to_display_format(_player.online_time)}} local _admin = {'player-info.no'}; if _player.admin then _admin = {'player-info.yes'} end frame.add{type='label',caption={'player-info.admin',_admin}} - if Ranking then + if Role then frame.add{type='label',caption={'player-info.group',_player.group}} - frame.add{type='label',caption={'player-info.rank',_player.rank}} + frame.add{type='label',caption={'player-info.role',_player.highest_role}} + frame.add{type='label',caption={'player-info.roles',table.concat(_player.roles,', ')}} end if add_cam then Gui.cam_link{entity=player.character,frame=frame,width=200,height=150,zoom=0.5,respawn_open=true} @@ -46,7 +50,8 @@ end return setmetatable({ get_player_info=get_player_info, on_init=function(self) - if loaded_modules['ExpGamingCore.Ranking'] then Ranking = require('ExpGamingCore.Ranking') end + if loaded_modules['ExpGamingCore.Role'] then Role = require('ExpGamingCore.Role') end + if loaded_modules['ExpGamingCore.Group'] then Group = require('ExpGamingCore.Group') end end },{ __call=function(self,...) self.get_player_info(...) end diff --git a/modules/ExpGamingPlayer/playerList/control.lua b/modules/ExpGamingPlayer/playerList/control.lua index 5a06308d..342a9875 100644 --- a/modules/ExpGamingPlayer/playerList/control.lua +++ b/modules/ExpGamingPlayer/playerList/control.lua @@ -29,7 +29,7 @@ local module_verbose = false local ThisModule = { on_init=function(self) if loaded_modules['ExpGamingPlayer.playerInfo'] then playerInfo = require('ExpGamingPlayer.playerInfo') end - if loaded_modules['ExpGamingCore.Ranking@^4.0.0'] then getPlayers = require(module_path..'/src/ranking') end + if loaded_modules['ExpGamingCore.Role@^4.0.0'] then getPlayers = require(module_path..'/src/ranking') end if loaded_modules['ExpGamingAdmin.AdminLib@^4.0.0'] then Admin = require('ExpGamingAdmin.AdminLib@^4.0.0') end end } @@ -72,30 +72,34 @@ Gui.left.add{ } player_list.vertical_scroll_policy = 'auto' player_list.style.maximal_height=195 + local done = {} local players = getPlayers() -- list of [colour,shortHand,[playerOne,playerTwo]] for _,rank in pairs(players) do for _,player in pairs(rank[3]) do - local flow = player_list.add{type='flow'} - if rank[2] == '' then - flow.add{ - type='label', - name=player.name, - style='caption_label', - caption={'ExpGamingPlayer-playerList.format-nil',tick_to_display_format(player.online_time),player.name} - }.style.font_color = rank[1] - else - flow.add{ - type='label', - name=player.name, - style='caption_label', - caption={'ExpGamingPlayer-playerList.format',tick_to_display_format(player.online_time),player.name,rank[2]} - }.style.font_color = rank[1] - end - if Admin and Admin.report_btn then - if not rank[4] and player.index ~= frame.player_index then - local btn = Admin.report_btn:draw(flow) - btn.style.height = 20 - btn.style.width = 20 + if not done[player.index] then + done[player.index] = true + local flow = player_list.add{type='flow'} + if rank[2] == '' then + flow.add{ + type='label', + name=player.name, + style='caption_label', + caption={'ExpGamingPlayer-playerList.format-nil',tick_to_display_format(player.online_time),player.name} + }.style.font_color = rank[1] + else + flow.add{ + type='label', + name=player.name, + style='caption_label', + caption={'ExpGamingPlayer-playerList.format',tick_to_display_format(player.online_time),player.name,rank[2]} + }.style.font_color = rank[1] + end + if Admin and Admin.report_btn then + if not rank[4] and player.index ~= frame.player_index then + local btn = Admin.report_btn:draw(flow) + btn.style.height = 20 + btn.style.width = 20 + end end end end diff --git a/modules/ExpGamingPlayer/playerList/src/ranking.lua b/modules/ExpGamingPlayer/playerList/src/ranking.lua index 4f53e52c..5d957120 100644 --- a/modules/ExpGamingPlayer/playerList/src/ranking.lua +++ b/modules/ExpGamingPlayer/playerList/src/ranking.lua @@ -1,9 +1,10 @@ -local Ranking = require('ExpGamingCore.Ranking@^4.0.0') +local Role = require('ExpGamingCore.Role@^4.0.0') return function() local rtn = {} - for _,rank in pairs(Ranking.ranks) do - table.insert(rtn,{rank.colour,rank.short_hand,rank:get_players(true),rank:allowed('no-report')}) + for _,role_name in pairs(Role.order) do + local role = Role.get(role_name) + table.insert(rtn,{role.colour,role.short_hand,role:get_players(true),role.not_reportable}) end return rtn end \ No newline at end of file diff --git a/modules/ExpGamingPlayer/polls.lua b/modules/ExpGamingPlayer/polls.lua index 5e8561b7..4599dc86 100644 --- a/modules/ExpGamingPlayer/polls.lua +++ b/modules/ExpGamingPlayer/polls.lua @@ -240,7 +240,7 @@ Gui.popup.add{ local btn = next:draw(title) btn.style.width = 20 btn.style.height = 20 - if Ranking.get_rank(frame.player_index):allowed('create-poll') then + if Role.get_highest(frame.player_index):allowed('create-poll') then local btn = create_poll:draw(title) btn.style.width = 20 btn.style.height = 20 @@ -254,7 +254,7 @@ Gui.popup.add{ end, can_open=function(player) if #_polls().old > 0 then return true - elseif Ranking.get_rank(player):allowed('create-poll') then return true + elseif Role.allowed(player,'create-poll') then return true else return {'polls.no-poll'} end end } diff --git a/modules/GuiAnnouncements/announcements.lua b/modules/GuiAnnouncements/announcements.lua index 372a34e2..d46bf704 100644 --- a/modules/GuiAnnouncements/announcements.lua +++ b/modules/GuiAnnouncements/announcements.lua @@ -8,19 +8,19 @@ Discord: https://discord.gg/r6dC2uK ]] --Please Only Edit Below This Line----------------------------------------------------------- -local function _ranks(player) - local ranks = {'Select Rank'} - local _rank = Ranking.get_rank(player) - for _,rank in pairs(Ranking._ranks()) do - if rank.power >= _rank.power then - table.insert(ranks,rank.name) +local function _roles(player) + local roles = {'Select Rank'} + local _role = Role.get_highest(player) + for index,role_name in pairs(Role.order) do + if index >= _role.index then + table.insert(ranks,role_name) end end return ranks end -local rank_drop_down = Gui.inputs.add_drop_down('rank-drop-down-annoncements',_ranks,1,function(player,selected,items,element) - element.parent.rank.caption = selected +local role_drop_down = Gui.inputs.add_drop_down('rank-drop-down-annoncements',_roles,1,function(player,selected,items,element) + element.parent.role.caption = selected if selected == 'Select Rank' then element.parent['send-annoncement'].style.visible = false else element.parent['send-annoncement'].style.visible = true end end) @@ -30,18 +30,16 @@ local send_popup = Gui.inputs.add{ name='send-annoncement', caption='utility/export_slot' }:on_event('click',function(event) - local meta_data = Ranking.meta - local default = Ranking.get_rank(meta_data.default) local player = Game.get_player(event) - local rank = Ranking.get_rank(player) - local _rank = Ranking.get_rank(event.element.parent.rank.caption); if not _rank then return end - local sent_by = {'announcements.sent-by',player.name,rank.name} - local rank_name = _rank.name..'s'; if rank_name == default.name..'s' then rank_name = 'Everyone' end + local role = Role.get_highest(player) + local _role = Role.get(event.element.parent.role.caption); if not _role then return end + local sent_by = {'announcements.sent-by',player.name,role.name} + local role_name = _role.name..'s'; if rank_name == Role.meta.default.name..'s' then rank_name = 'Everyone' end local sent_to = {'announcements.sent-to',rank_name} local message = event.element.parent.parent.message.text - for power,__rank in pairs(Ranking._ranks()) do - if power <= _rank.power then - Gui.popup.open('announcements',{sent_by=sent_by,sent_to=sent_to,message=message},__rank:get_players(true)) + for index,_role_name in pairs(Role.order) do + if index <= _role.index then + Gui.popup.open('announcements',{sent_by=sent_by,sent_to=sent_to,message=message},Role.get(_role_name):get_players(true)) event.element.parent.parent.message.text = '' end end diff --git a/modules/RankChanger/rank-changer.lua b/modules/RankChanger/rank-changer.lua index 86c72a8b..84b38e52 100644 --- a/modules/RankChanger/rank-changer.lua +++ b/modules/RankChanger/rank-changer.lua @@ -42,40 +42,40 @@ local player_drop_down = Gui.inputs.add_drop_down('player-drop-down-rank-change' player_info_flow.clear() if selected == 'Select Player' then return else get_player_info(selected,player_info_flow,true) end - local rank = Ranking.get_rank(player) - local _rank = Ranking.get_rank(selected) - if rank.power >= _rank.power then element.parent.warning.caption = {'rank-changer.warning'} + local role = Role.get_highest(player) + local _role = Role.get(selected) + if role.index >= _role.index then element.parent.warning.caption = {'rank-changer.warning'} else element.parent.warning.caption = '' end end) -local function _ranks(player) - local ranks = {'Select Rank'} - local _rank = Ranking.get_rank(player) - for _,rank in pairs(Ranking._ranks()) do - if rank.power > _rank.power then - table.insert(ranks,rank.name) +local function _roles(player) + local roles = {'Select Rank'} + local _role = Role.get_highest(player) + for index,role_name in pairs(Role.order) do + if index > _role.index then + table.insert(ranks,role_name) end end return ranks end -local rank_drop_down = Gui.inputs.add_drop_down('rank-drop-down-rank-change',_ranks,1,function(player,selected,items,element) - element.parent.parent.rank.caption = selected +local role_drop_down = Gui.inputs.add_drop_down('rank-drop-down-rank-change',_roles,1,function(player,selected,items,element) + element.parent.parent.role.caption = selected end) -local set_rank = Gui.inputs.add{ +local set_role = Gui.inputs.add{ type='button', name='rank-change-set', caption={'rank-changer.set-rank'} }:on_event('click',function(event) local dropdowns = event.element.parent - local rank = Ranking.get_rank(event.player_index) - local _rank = Ranking.get_rank(dropdowns.parent.rank.caption) + local role = Role.get_highest(event.player_index) + local _role = Role.get(dropdowns.parent.role.caption) local _player = Game.get_player(dropdowns.parent.player.caption) - if not _player or not _rank then dropdowns.warning.caption = {'rank-changer.invalid'} return end - local __rank = Ranking.get_rank(_player) - if rank.power >= __rank.power then dropdowns.warning.caption = {'rank-changer.rank-high'} return end - Ranking.give_rank(_player,_rank,event) + if not _player or not _role then dropdowns.warning.caption = {'rank-changer.invalid'} return end + local __role = Role.get_highest(_player) + if role.index >= __role.index then dropdowns.warning.caption = {'rank-changer.rank-high'} return end + Role.assign(_player,_role,event) Gui.center.clear(event) end) @@ -117,7 +117,7 @@ Gui.center.add{ } label.style.single_line = false label.style.width = 200 - set_rank:draw(dropdowns) + set_role:draw(dropdowns) frame.add{ name='player', type='label', diff --git a/modules/WarpPoints/warp-system.lua b/modules/WarpPoints/warp-system.lua index d916153a..e56707b9 100644 --- a/modules/WarpPoints/warp-system.lua +++ b/modules/WarpPoints/warp-system.lua @@ -127,7 +127,7 @@ local go_to_warp = Gui.inputs.add{ if player.vehicle then player.vehicle.set_passenger(nil) end if player.vehicle then return end player.teleport(warp.surface.find_non_colliding_position('player',warp.position,32,1),warp.surface) - if not Ranking.get_rank(player):allowed('always-warp') then + if not Role.allowed(player,'always-warp') then event.element.parent.parent.parent.parent.style.visible = false _warps().cooldowns[event.player_index] = warp_limit end @@ -172,7 +172,7 @@ Gui.left.add{ local btn = go_to_warp:draw(_flow) btn.style.height = 20 btn.style.width = 20 - if Ranking.get_rank(player):allowed('make-warp') and name ~= 'Spawn' then + if Role.allowed(player,'make-warp') and name ~= 'Spawn' then local btn = remove_warp:draw(_flow) btn.style.height = 20 btn.style.width = 20 @@ -180,7 +180,7 @@ Gui.left.add{ end local cooldown = _warps().cooldowns[player.index] or 0 if cooldown > 0 then frame.style.visible = false return - elseif Ranking.get_rank(player):allowed('always-warp') then return + elseif Role.allowed(player,'always-warp') then return elseif player.surface.get_tile(player.position).name == warp_tile and player.surface.name == 'nauvis' then return @@ -189,7 +189,7 @@ Gui.left.add{ end, can_open=function(player) local cooldown = _warps().cooldowns[player.index] or 0 - if Ranking.get_rank(player):allowed('always-warp') then return true + if Role.allowed(player,'always-warp') then return true elseif player.surface.get_tile(player.position).name == warp_tile and player.surface.name == 'nauvis' then return true @@ -214,7 +214,7 @@ Event.register(defines.events.on_player_changed_position, function(event) local player = Game.get_player(event) local cooldown = _warps().cooldowns[player.index] or 0 local tile = player.surface.get_tile(player.position).name - if not Ranking.get_rank(player):allowed('always-warp') and cooldown == 0 then + if not Role.allowed(player,'always-warp') and cooldown == 0 then if tile == warp_tile and player.surface.name == 'nauvis' then mod_gui.get_frame_flow(player)['warp-list'].style.visible = true elseif player.position.x^2+player.position.y^2 < (warp_radius*spawn_warp_scale)^2 then diff --git a/modules/index.lua b/modules/index.lua index ffe4caf3..c8a71d85 100644 --- a/modules/index.lua +++ b/modules/index.lua @@ -13,8 +13,9 @@ return { ['ExpGamingLib@4.0.0']='./modules/ExpGamingLib', ['ExpGamingCore.Command@4.0.0']='./modules/ExpGamingCore/Command', ['ExpGamingCore.Server@4.0.0']='./modules/ExpGamingCore/Server', - ['ExpGamingCore.Ranking@^4.0.0']='./modules/ExpGamingCore/Ranking', - ['ExpGamingCore.Ranking@4.0.0']='./modules/ExpGamingCore/Ranking', + ['ExpGamingCore.Group@4.0.0']='./modules/ExpGamingCore/Group', + ['ExpGamingCore.Role@^4.0.0']='./modules/ExpGamingCore/Role', + ['ExpGamingCore.Role@4.0.0']='./modules/ExpGamingCore/Role', ['ExpGamingBot.autoChat@4.0.0']='./modules/ExpGamingBot/autoChat', ['ExpGamingCore.Server@^4.0.0']='./modules/ExpGamingCore/Server', ['ExpGamingCommands.tags@4.0.0']='./modules/ExpGamingCommands/tags', @@ -48,7 +49,5 @@ return { ['ExpGamingAdmin.Commands@4.0.0']='./modules/ExpGamingAdmin/Commands', ['ExpGamingAdmin.Ban@4.0.0']='./modules/ExpGamingAdmin/Ban', ['ChatPopup@4.0.0']='./modules/ChatPopup', - ['DamagePopup@4.0.0']='./modules/DamagePopup', - ['ExpGamingCore.Group@4.0.0']='./modules/ExpGamingCore/Group', - ['ExpGamingCore.Role@4.0.0']='./modules/ExpGamingCore/Role', + ['DamagePopup@4.0.0']='./modules/DamagePopup' } \ No newline at end of file