diff --git a/config/roles.lua b/config/roles.lua index e621747d..943e3709 100644 --- a/config/roles.lua +++ b/config/roles.lua @@ -100,7 +100,7 @@ Roles.new_role('Trainee','TrMod') :set_flag('is_admin') :set_flag('is_spectator') :set_flag('report-immune') -:set_parent('Donator') +:set_parent('Veteran') :allow{ 'command/admin-chat', 'command/teleport', @@ -110,28 +110,42 @@ Roles.new_role('Trainee','TrMod') 'command/give-warning', 'command/get-warnings', 'command/get-reports', + 'command/jail', + 'command/unjail', 'command/kick', 'command/ban', } --- Trusted Roles -Roles.new_role('Sponsor','Spon') +Roles.new_role('Board Member','Board') :set_permission_group('Trusted') :set_custom_color{r=247,g=246,b=54} :set_flag('is_spectator') :set_flag('report-immune') :set_flag('instance-respawn') -:set_parent('Pay to Win') +:set_parent('Sponsor') :allow{ + 'command/goto', + 'command/repair', } -Roles.new_role('Pay to Win','P2W') +Roles.new_role('Senior Backer','Backer') :set_permission_group('Trusted') :set_custom_color{r=238,g=172,b=44} :set_flag('is_spectator') :set_flag('report-immune') :set_flag('instance-respawn') -:set_parent('Donator') +:set_parent('Sponsor') +:allow{ +} + +Roles.new_role('Sponsor','Spon') +:set_permission_group('Trusted') +:set_custom_color{r=238,g=172,b=44} +:set_flag('is_spectator') +:set_flag('report-immune') +:set_flag('instance-respawn') +:set_parent('Supporter') :allow{ 'gui/rocket-info/toggle-active', 'gui/rocket-info/remote_launch', @@ -143,7 +157,7 @@ Roles.new_role('Pay to Win','P2W') 'fast-tree-decon', } -Roles.new_role('Donator','Don') +Roles.new_role('Supporter','Sup') :set_permission_group('Trusted') :set_custom_color{r=230,g=99,b=34} :set_flag('is_spectator') @@ -242,9 +256,10 @@ Roles.define_role_order{ 'Administrator', 'Moderator', 'Trainee', + 'Board Member', + 'Senior Backer', 'Sponsor', - 'Pay to Win', - 'Donator', + 'Supporter', 'Partner', 'Veteran', 'Member', @@ -254,44 +269,44 @@ Roles.define_role_order{ } Roles.override_player_roles{ - Cooldude2606={'Senior Administrator','Administrator','Moderator','Member'}, - arty714={'Senior Administrator','Administrator','Moderator','Member'}, - mark9064={'Administrator','Moderator','Member'}, - Drahc_pro={'Administrator','Moderator','Member'}, - aldldl={'Sponsor','Administrator','Moderator','Member'}, - LoicB={'Sponsor','Trainee','Member'}, - ookl={'Sponsor','Moderator','Member'}, - cydes={'Pay to Win','Moderator','Member'}, - darklich14={'Pay to Win','Moderator','Member'}, - porelos={'Pay to Win','Moderator','Member'}, - SilentLog={'Pay to Win','Moderator','Member'}, - UUBlueFire={'Pay to Win','Moderator','Member'}, - XenoCyber={'Pay to Win','Moderator','Member'}, - Chromaddict={'Donator','Moderator','Member'}, - eissturm={'Donator','Moderator','Member'}, - freek18={'Donator','Moderator','Member'}, - M74132={'Donator','Moderator','Member'}, - thadius856={'Donator','Moderator','Member'}, - ['7h3w1z4rd']={'Moderator','Member'}, - AssemblyStorm={'Moderator','Member'}, - bombershark={'Moderator','Member'}, - CmonMate497={'Moderator','Member'}, - facere={'Moderator','Member'}, - FlipHalfling90={'Moderator','Member'}, - Gizan={'Pay to Win','Moderator','Member'}, - Hobbitkicker={'Moderator','Member'}, - jessi_gaming={'Trainee','Member'}, - Koroto={'Moderator','Member'}, - mafisch3={'Moderator','Member'}, - maplesyrup01={'Moderator','Member'}, - NextIdea={'Moderator','Member'}, - Phoenix27833={'Moderator','Member'}, - Rezz={'Moderator','Member'}, - Ruuyji={'Moderator','Member'}, - samy115={'Moderator','Member'}, - scarbvis={'Moderator','Member'}, - Tcheko={'Moderator','Member'}, - WhomstThouAmMe={'Moderator','Member'}, - Windbomb={'Moderator','Member'}, - tovernaar123={'Member'}, + ["Cooldude2606"]={"Senior Administrator","Moderator","Senior Backer","Supporter"}, + ["arty714"]={"Senior Administrator","Senior Backer","Supporter"}, + ["Drahc_pro"]={"Administrator","Moderator","Veteran","Member"}, + ["mark9064"]={"Administrator","Moderator","Member"}, + ["aldldl"]={"Administrator","Moderator","Senior Backer","Sponsor","Supporter","Member"}, + + ["ookl"]={"Moderator","Senior Backer","Sponsor","Supporter","Partner","Member"}, + ["hamsterbryan"]={"Moderator","Senior Backer","Supporter","Member"}, + ["M74132"]={"Moderator","Senior Backer","Sponsor","Supporter","Member"}, + ["LoicB"]={"Moderator","Senior Backer","Supporter","Veteran","Member"}, + ["UUBlueFire"]={"Moderator","Senior Backer","Supporter","Member"}, + + ["thadius856"]={"Moderator","Supporter","Member"}, + ["XenoCyber"]={"Moderator","Supporter","Partner","Member"}, + ["cydes"]={"Moderator","Supporter","Member"}, + ["darklich14"]={"Moderator","Supporter","Member"}, + ["SilentLog"]={"Moderator","Supporter","Member"}, + ["freek18"]={"Moderator","Supporter","Member"}, + ["porelos"]={"Moderator","Supporter","Member"}, + + ["7h3w1z4rd"]={"Moderator","Member"}, + ["Windbomb"]={"Moderator","Member"}, + ["Phoenix27833"]={"Moderator","Member"}, + ["banakeg"]={"Moderator","Member"}, + ["maplesyrup01"]={"Moderator","Member"}, + ["FlipHalfling90"]={"Moderator","Member"}, + ["Ruuyji"]={"Moderator","Member"}, + ["Gizan"]={"Moderator"}, + ["samy115"]={"Moderator","Member"}, + ["Hobbitkicker"]={"Moderator","Member"}, + ["facere"]={"Moderator","Member"}, + ["whoami32"]={"Moderator","Member"}, + ["NextIdea"]={"Moderator","Member"}, + ["mafisch3"]={"Moderator","Member"}, + ["Tcheko"]={"Moderator","Member"}, + ["AssemblyStorm"]={"Moderator","Veteran","Member"}, + ["connormkii"]={"Moderator","Veteran","Member"}, + ["Koroto"]={"Moderator","Veteran","Member"}, + ["scarbvis"]={"Moderator","Member"}, + ["CmonMate497"]={"Moderator","Member"} } diff --git a/expcore/roles.lua b/expcore/roles.lua index a9d68404..1163d84b 100644 --- a/expcore/roles.lua +++ b/expcore/roles.lua @@ -318,29 +318,34 @@ end -- @tparam LuaPlayer player the player that will be assigned the roles -- @tparam table roles table a of roles that the player will be given, can be one role and can be role names -- @tparam[opt=] string by_player_name the name of the player that will be shown in the log +-- @tparam[opt=false] boolean skip_checks when true there will be no checks are done for if the player is valid -- @tparam[opt=false] boolean silent when true there will be no game message printed -function Roles.assign_player(player,roles,by_player_name,silent) - player = Game.get_player_from_any(player) - if not player then return end +function Roles.assign_player(player,roles,by_player_name,skip_checks,silent) + local valid_player = Game.get_player_from_any(player) + if not skip_checks and not valid_player then return end if type(roles) ~= 'table' or roles.name then roles = {roles} end for _,role in pairs(roles) do role = Roles.get_role_from_any(role) if role then - role:add_player(player,false,true) + role:add_player(valid_player or player, valid_player == nil, true) end end - emit_player_roles_updated(player,'assign',roles,by_player_name,silent) + if valid_player then + emit_player_roles_updated(valid_player, 'assign', roles, by_player_name, silent) + end end --- Removes a player from the given role(s) with an option to pass a by player name used in the log -- @tparam LuaPlayer player the player that will have the roles removed -- @tparam table roles table a of roles to be removed from the player, can be one role and can be role names -- @tparam[opt=] string by_player_name the name of the player that will be shown in the logs +-- @tparam[opt=false] boolean skip_checks when true there will be no checks are done for if the player is valid -- @tparam[opt=false] boolean silent when true there will be no game message printed -function Roles.unassign_player(player,roles,by_player_name,silent) - player = Game.get_player_from_any(player) +function Roles.unassign_player(player,roles,by_player_name,skip_checks,silent) + local valid_player = Game.get_player_from_any(player) + if not skip_checks and not valid_player then return end if not player then return end if type(roles) ~= 'table' or roles.name then roles = {roles} @@ -348,10 +353,12 @@ function Roles.unassign_player(player,roles,by_player_name,silent) for _,role in pairs(roles) do role = Roles.get_role_from_any(role) if role then - role:remove_player(player,false,true) + role:remove_player(valid_player or player, valid_player == nil, true) end end - emit_player_roles_updated(player,'unassign',roles,by_player_name,silent) + if valid_player then + emit_player_roles_updated(valid_player, 'unassign', roles, by_player_name, silent) + end end --- Overrides all player roles with the given table of roles, useful to mass set roles on game start @@ -419,16 +426,28 @@ end function Roles.define_role_order(order) -- Clears and then rebuilds the order table Roles.config.order = {} + local done = {} for _,role in ipairs(order) do if type(role) == 'table' and role.name then + done[role.name] = true table.insert(Roles.config.order,role.name) else + done[role] = true table.insert(Roles.config.order,role) end end + -- Check no roles were missed + for role_name,_ in pairs(Role.config.roles) do + if not done[role_name] then + error('Role missing '..role_name..' from role order, all defined roles must be included.',2) + end + end -- Re-links roles to they parents as this is called at the end of the config - for index,role in pairs(Roles.config.order) do - role = Roles.config.roles[role] + for index,role_name in pairs(Roles.config.order) do + local role = Roles.config.roles[role_name] + if not role then + error('Role with name '..role_name..' has not beed defined, either define it or remove it from the order list.',2) + end role.index = index local parent = Roles.config.roles[role.parent] if parent then diff --git a/modules/gui/readme.lua b/modules/gui/readme.lua index 0992b52d..18c094af 100644 --- a/modules/gui/readme.lua +++ b/modules/gui/readme.lua @@ -205,20 +205,22 @@ Gui.element(function(_,parent) -- Find which players will go where local done = {} local groups = { - Administrator = { _title={'readme.backers-management'}, _width=230 }, - Sponsor = { _title={'readme.backers-board'}, _width=145 }, -- change role to board - Donator = { _title={'readme.backers-backers'}, _width=196 }, -- change to backer - Moderator = { _title={'readme.backers-staff'}, _width=235 }, - Active = { _title={'readme.backers-active'}, _width=235 }, + { _roles={'Senior Administrator','Administrator'}, _title={'readme.backers-management'}, _width=230 }, + { _roles={'Board Member','Senior Backer'}, _title={'readme.backers-board'}, _width=145 }, -- change role to board + { _roles={'Sponsor','Supporter'}, _title={'readme.backers-backers'}, _width=196 }, -- change to backer + { _roles={'Moderator','Trainee'}, _title={'readme.backers-staff'}, _width=235 }, + { _roles={}, _title={'readme.backers-active'}, _width=235 }, } -- Fill by player roles for player_name, player_roles in pairs(Roles.config.players) do - for role_name, players in pairs(groups) do - if table.contains(player_roles, role_name) then - done[player_name] = true - table.insert(players,player_name) - break + for _, players in ipairs(groups) do + for _, role_name in pairs(players._roles) do + if table.contains(player_roles, role_name) then + done[player_name] = true + table.insert(players,player_name) + break + end end end end @@ -235,7 +237,7 @@ Gui.element(function(_,parent) -- Add the different tables local scroll_pane = title_table_scroll(container) - for _, players in pairs(groups) do + for _, players in ipairs(groups) do local table = title_table(scroll_pane, players._width, players._title, 4) for _,player_name in ipairs(players) do Gui.centered_label(table, 140, player_name)