diff --git a/config/action_buttons.lua b/config/action_buttons.lua index dd5d65ea..71ec2ee2 100644 --- a/config/action_buttons.lua +++ b/config/action_buttons.lua @@ -33,7 +33,7 @@ local function auth_lower_role(player,action_player_name) end -- gets the action player and a coloured name for the action to be used on -local function get_action_player(player) +local function get_action_player_name(player) local action_player_name = Store.get_child(action_player_store,player.name) local action_player = Game.get_player_from_any(action_player_name) local action_player_name_color = format_chat_player_name(action_player) @@ -57,7 +57,7 @@ Gui.new_button() :set_tooltip{'player-list.goto-player'} :set_style('tool_button',tool_button_style) :on_click(function(player,element) - local action_player_name = get_action_player(player) + local action_player_name = get_action_player_name(player) local action_player = Game.get_player_from_any(action_player_name) if not player.character or not action_player.character then player.print({'expcore-commands.reject-player-alive'},Colors.orange_red) @@ -73,7 +73,7 @@ Gui.new_button() :set_tooltip{'player-list.bring-player'} :set_style('tool_button',tool_button_style) :on_click(function(player,element) - local action_player_name = get_action_player(player) + local action_player_name = get_action_player_name(player) local action_player = Game.get_player_from_any(action_player_name) if not player.character or not action_player.character then player.print({'expcore-commands.reject-player-alive'},Colors.orange_red) @@ -89,7 +89,7 @@ Gui.new_button() :set_tooltip{'player-list.kill-player'} :set_style('tool_button',tool_button_style) :on_click(function(player,element) - local action_player_name = get_action_player(player) + local action_player_name = get_action_player_name(player) local action_player = Game.get_player_from_any(action_player_name) if action_player.character then action_player.character.die() @@ -105,8 +105,8 @@ Gui.new_button() :set_tooltip{'player-list.report-player'} :set_style('tool_button',tool_button_style) :on_click(function(player,element) - local action_player = get_action_player(player) - if Reports.player_is_reported_by(action_player,player.name) then + local action_player_name = get_action_player_name(player) + if Reports.player_is_reported_by(action_player_name,player.name) then player.print({'expcom-report.already-reported'},Colors.orange_red) else Store.set_child(action_name_store,player.name,'command/report') @@ -114,11 +114,11 @@ Gui.new_button() end) local function report_player_callback(player,reason) - local action_player,action_player_name_color = get_action_player(player) + local action_player_name,action_player_name_color = get_action_player_name(player) local by_player_name_color = format_chat_player_name(player) game.print{'expcom-report.non-admin',action_player_name_color,reason} Roles.print_to_roles_higher('Trainee',{'expcom-report.admin',action_player_name_color,by_player_name_color,reason}) - Reports.report_player(action_player,reason,player.name) + Reports.report_player(action_player_name,reason,player.name) end -- gives the action player a warning, requires a reason @@ -132,10 +132,10 @@ Gui.new_button() end) local function warn_player_callback(player,reason) - local action_player,action_player_name_color = get_action_player(player) + local action_player_name,action_player_name_color = get_action_player_name(player) local by_player_name_color = format_chat_player_name(player) game.print{'expcom-warnings.received',action_player_name_color,by_player_name_color,reason} - Warnings.add_warnings(action_player,player.name) + Warnings.add_warnings(action_player_name,player.name) end -- jails the action player, requires a reason @@ -145,8 +145,8 @@ Gui.new_button() :set_tooltip{'player-list.jail-player'} :set_style('tool_button',tool_button_style) :on_click(function(player,element) - local action_player,action_player_name_color = get_action_player(player) - if Roles.player_has_role(action_player,'Jail') then + local action_player_name,action_player_name_color = get_action_player_name(player) + if Roles.player_has_role(action_player_name,'Jail') then player.print({'expcom-jail.already-jailed',action_player_name_color},Colors.orange_red) else Store.set_child(action_name_store,player.name,'command/jail') @@ -154,10 +154,10 @@ Gui.new_button() end) local function jail_player_callback(player,reason) - local action_player,action_player_name_color = get_action_player(player) + local action_player_name,action_player_name_color = get_action_player_name(player) local by_player_name_color = format_chat_player_name(player) game.print{'expcom-jail.give',action_player_name_color,by_player_name_color,reason} - Jail.jail_player(action_player,player.name) + Jail.jail_player(action_player_name,player.name) end -- temp bans the action player, requires a reason @@ -167,8 +167,8 @@ Gui.new_button() :set_tooltip{'player-list.temp-ban-player'} :set_style('tool_button',tool_button_style) :on_click(function(player,element) - local action_player,action_player_name_color = get_action_player(player) - if Roles.player_has_role(action_player,'Jail') then + local action_player_name,action_player_name_color = get_action_player_name(player) + if Roles.player_has_role(action_player_name,'Jail') then player.print({'expcom-jail.already-banned',action_player_name_color},Colors.orange_red) else Store.set_child(action_name_store,player.name,'command/temp-ban') @@ -176,7 +176,7 @@ Gui.new_button() end) local function temp_ban_player_callback(player,reason) - local action_player,action_player_name_color = get_action_player(player) + local action_player,action_player_name_color = get_action_player_name(player) local by_player_name_color = format_chat_player_name(player) game.print{'expcom-jail.temp-ban',action_player_name_color,by_player_name_color,reason} Jail.temp_ban_player(action_player,player.name,reason) @@ -193,7 +193,7 @@ Gui.new_button() end) local function kick_player_callback(player,reason) - local action_player = get_action_player(player) + local action_player = get_action_player_name(player) game.kick_player(action_player,reason) end @@ -208,32 +208,32 @@ Gui.new_button() end) local function ban_player_callback(player,reason) - local action_player = get_action_player(player) + local action_player = get_action_player_name(player) game.ban_player(action_player,reason) end return { ['command/teleport'] = { - auth=function(player,action_player_name) - return player.name ~= action_player_name + auth=function(player,action_player) + return player.name ~= action_player.name end, -- cant teleport to your self goto_player, bring_player }, ['command/kill'] = { - auth=function(player,action_player_name) - if player.name == action_player_name then + auth=function(player,action_player) + if player.name == action_player.name then return true elseif Roles.player_allowed(player,'command/kill/always') then - return auth_lower_role(player,action_player_name) + return auth_lower_role(player,action_player) end end, -- player must be lower role, or your self kill_player }, ['command/report'] = { - auth=function(player,action_player_name) + auth=function(player,action_player) if not Roles.player_allowed(player,'command/give-warning') then - return not Roles.player_has_flag(action_player_name,'report-immune') + return not Roles.player_has_flag(action_player,'report-immune') end end, -- can report any player that isnt immune and you arnt able to give warnings reason_callback=report_player_callback, diff --git a/modules/gui/player-list.lua b/modules/gui/player-list.lua index c10fab2f..73fa7671 100644 --- a/modules/gui/player-list.lua +++ b/modules/gui/player-list.lua @@ -194,17 +194,23 @@ local player_list_name local function update_action_bar(player) local frame = Gui.classes.left_frames.get_frame(player_list_name,player) local element = frame.container.action_bar - local action_player = Store.get_child(action_player_store,player.name) + local action_player_name = Store.get_child(action_player_store,player.name) - if not action_player then + if not action_player_name then element.visible = false else - element.visible = true - for action_name,buttons in pairs(config) do - if buttons.auth and not buttons.auth(player,action_player) then - element[action_name].visible = false - elseif Roles.player_allowed(player,action_name) then - element[action_name].visible = true + local action_player = Game.get_player_from_any(action_player_name) + if not action_player.connected then + element.visible = false + Store.set(action_player_store,player.name) -- clears store if player is offline + else + element.visible = true + for action_name,buttons in pairs(config) do + if buttons.auth and not buttons.auth(player,action_player) then + element[action_name].visible = false + elseif Roles.player_allowed(player,action_name) then + element[action_name].visible = true + end end end end @@ -318,7 +324,16 @@ Store.register(action_name_store,function(value,category) local player = Game.get_player_from_any(category) local frame = Gui.classes.left_frames.get_frame(player_list_name,player) local element = frame.container.reason_bar - element.visible = value ~= nil + if value then + local action_player = Game.get_player_from_any(value) + if action_player.connected then + element.visible = true + else + Store.set_child(action_name_store,category) -- clears store if player is offline + end + else + element.visible = false + end end) --- Many events which trigger the gui to be re drawn, it will also update the times every 30 seconds