From 4a4ff3787c5e07b8f2427f32b56423e8f1aed2c6 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Sun, 4 Nov 2018 15:03:26 +0000 Subject: [PATCH] Better Sync Functions --- modules/ExpGamingCore/Role/config.lua | 6 ++- modules/ExpGamingCore/Role/control.lua | 6 ++- .../src/ranking.lua => Role/src/sync.lua} | 53 +++++++++++-------- modules/ExpGamingCore/Sync/control.lua | 11 ++-- 4 files changed, 45 insertions(+), 31 deletions(-) rename modules/ExpGamingCore/{Sync/src/ranking.lua => Role/src/sync.lua} (50%) diff --git a/modules/ExpGamingCore/Role/config.lua b/modules/ExpGamingCore/Role/config.lua index c5b4bcab..e0840c24 100644 --- a/modules/ExpGamingCore/Role/config.lua +++ b/modules/ExpGamingCore/Role/config.lua @@ -262,5 +262,9 @@ Role.order = { } Role.set_preassign{ - cooldude2606={'Root','Developer','Administrator','Moderator'} + ["cooldude2606"]={"Developer","Admin","Mod"}, + ["aldldl"]={"Sponsor","Admin","Donator","Sponsor","Member","Mod"}, + ["arty714"]={"Admin","Community Manager","Member","Mod"}, + ["drahc_pro"]={"Admin","Member","Mod"}, + ["mark9064"]={"Admin","Member","Mod"} } \ No newline at end of file diff --git a/modules/ExpGamingCore/Role/control.lua b/modules/ExpGamingCore/Role/control.lua index 5098dd9e..23c7b391 100644 --- a/modules/ExpGamingCore/Role/control.lua +++ b/modules/ExpGamingCore/Role/control.lua @@ -10,6 +10,7 @@ local Game = require('FactorioStdLib.Game@^0.8.0') -- Local Varibles local role_change_event_id = script.generate_event_name('on_role_change') +local RoleGlobal -- Module Define local module_verbose = false @@ -29,6 +30,7 @@ local Role = { on_init=function(self) if loaded_modules['ExpGamingCore.Server@^4.0.0'] then require('ExpGamingCore.Server@^4.0.0').add_module_to_interface('Role','ExpGamingCore.Role') end if loaded_modules['ExpGamingCore.Command@^4.0.0'] then require(module_path..'/src/commands',{self=self}) end + if loaded_modules['ExpGamingCore.Sync@^4.0.0'] then require(module_path..'/src/sync',{self=self,RoleGlobal=RoleGlobal}) end end, on_post=function(self) -- loads the roles in config @@ -62,7 +64,7 @@ local global = global{ players={}, roles={} } - +RoleGlobal = global -- Function Define --- Used to set default roles for players who join @@ -488,7 +490,7 @@ script.on_event(role_change_event_id,function(event) end end) -script.on_event(defines.events.on_player_joined_game,function(event) +script.on_event(defines.events.on_player_created,function(event) local player = Game.get_player(event) local highest = Role.get_highest(player) or Role.meta.default Group.assign(player,highest.group) diff --git a/modules/ExpGamingCore/Sync/src/ranking.lua b/modules/ExpGamingCore/Role/src/sync.lua similarity index 50% rename from modules/ExpGamingCore/Sync/src/ranking.lua rename to modules/ExpGamingCore/Role/src/sync.lua index 92ba6a81..88c79058 100644 --- a/modules/ExpGamingCore/Sync/src/ranking.lua +++ b/modules/ExpGamingCore/Role/src/sync.lua @@ -1,28 +1,38 @@ ---- Allows syncing with an outside server and info panle. --- @submodule ExpGamingCore.Sync --- @alias Sync --- @author Cooldude2606 --- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE - ---- This file will be loaded when ExpGamingCore.Role is present --- @function _comment - +local Role = self +local RoleGlobal = RoleGlobal +local Sync = require('ExpGamingCore.Sync@^4.0.0') local Game = require('FactorioStdLib.Game@^0.8.0') local Color = require('FactorioStdLib.Color@^0.8.0') -local Role = require('ExpGamingCore.Role@^4.0.0') ---- 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,...} +-- just to hard reset the role sync function Sync.set_roles(...) Role.set_preassign(...) end ---- Used to get the number of players in each rank and currently online --- @usage Sync.count_roles() --- @treturn table contains the ranks and the players in that rank -function Sync.count_roles() +-- used to assign the role if the player is online, or add to the the preassign +function Sync.assign_role(player_name,role_name,by_player_name) + if not game then return end + local preassign = RoleGlobal.preassign + local player_roles = preassign[player_name] + if not player_roles then preassign[player_name] = {role_name} return end + if not table.includes(player_roles,role_name) then table.insert(player_roles,role_name) end + if Game.get_player(player_name) then Role.assign(player_name,role_name,by_player_name) end +end + +-- used to unassign the role if the player is online, or removes the preassign +function Sync.unassign_role(player_name,role_name,by_player_name) + if not game then return end + local preassign = RoleGlobal.preassign + local player_roles = preassign[player_name] + if not player_roles then preassign[player_name] = {} return end + local index = table.index(player_roles,role_name) + table.remove(player_roles,index) + if Game.get_player(player_name) then Role.unassign(player_name,role_name,by_player_name) end +end + +Sync.add_update('roles',function() if not game then return {'Offline'} end - local _roles = {} + local _rtn = {} for name,role in pairs(Role.roles) do local players = role:get_players() local _players = {} @@ -30,10 +40,10 @@ function Sync.count_roles() local online = role:get_players(true) local _online = {} for k,player in pairs(online) do _online[k] = player.name end - _roles[role.name] = {players=_players,online=_online,n_players=#_players,n_online=#_online} + _rtn[role.name] = {players=_players,online=_online,n_players=#_players,n_online=#_online} end - return _roles -end + return _rtn +end) -- Adds a caption to the info gui that shows the rank given to the player if Sync.add_to_gui then @@ -49,8 +59,7 @@ script.on_event('on_role_change',function(event) local role = Role.get(event.role_name) local player = Game.get_player(event) 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 + if role.is_jail and RoleGlobal.last_change[1] ~= player.index then Sync.emit_embeded{ title='Player Jail', color=Color.to_hex(defines.textcolor.med), diff --git a/modules/ExpGamingCore/Sync/control.lua b/modules/ExpGamingCore/Sync/control.lua index df46880c..686be6e5 100644 --- a/modules/ExpGamingCore/Sync/control.lua +++ b/modules/ExpGamingCore/Sync/control.lua @@ -177,12 +177,12 @@ function Sync.count_afk_times(time) return rtn end ---- 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 +--- Used to get the number of players in each rank and currently online -- @usage Sync.count_roles() -- @treturn table contains the ranks and the players in that rank function Sync.count_roles() if not game then return {'Offline'} end - local _roles = {admin={online={},players={}},user={online={},players={}}} + local _rtn = {admin={online={},players={}},user={online={},players={}}} for index,player in pairs(game.players) do if player.admin then table.insert(_roles.admin.players,player.name) @@ -192,9 +192,9 @@ function Sync.count_roles() if player.connected then table.insert(_roles.user.online,player.name) end end end - _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 + _rtn.admin.n_players,_roles.admin.n_online=#_rtn.admin.players,#_rtn.admin.online + _rtn.user.n_players,_roles.user.n_online=#_rtn.user.players,#_rtn.user.online + return _rtn end --- Used to get a list of every player name with the option to limit to only online players @@ -310,7 +310,6 @@ script.on_event('on_rocket_launched',Sync.emit_update) function Sync:on_init() if loaded_modules['ExpGamingCore.Gui@^4.0.0'] then verbose('ExpGamingCore.Gui is installed; Loading gui src') require(module_path..'/src/gui',{Sync=Sync,module_path=module_path}) end - if loaded_modules['ExpGamingCore.Role@^4.0.0'] then verbose('ExpGamingCore.Role is installed; Loading role src') require(module_path..'/src/ranking',{Sync=Sync}) end if loaded_modules['ExpGamingCore.Server@^4.0.0'] then require('ExpGamingCore.Server@^4.0.0').add_module_to_interface('Sync','ExpGamingCore.Sync') end end