From 54987bd8f1e12df17ecdd622b17627ac80703036 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Sat, 30 May 2020 23:12:00 +0100 Subject: [PATCH] Updated Player List --- config/gui/player_list_actions.lua | 27 +++-- modules/commands/interface.lua | 1 - modules/gui/debug/expcore_store_view.lua | 128 ----------------------- modules/gui/debug/main_view.lua | 1 - modules/gui/player-list.lua | 68 ++++++------ 5 files changed, 44 insertions(+), 181 deletions(-) delete mode 100644 modules/gui/debug/expcore_store_view.lua diff --git a/config/gui/player_list_actions.lua b/config/gui/player_list_actions.lua index 1bd19bbf..611cd0f0 100644 --- a/config/gui/player_list_actions.lua +++ b/config/gui/player_list_actions.lua @@ -7,7 +7,6 @@ local Gui = require 'expcore.gui' --- @dep expcore.gui local Roles = require 'expcore.roles' --- @dep expcore.roles -local Store = require 'expcore.store' --- @dep expcore.store local Game = require 'utils.game' --- @dep utils.game local Reports = require 'modules.control.reports' --- @dep modules.control.reports local Warnings = require 'modules.control.warnings' --- @dep modules.control.warnings @@ -15,11 +14,9 @@ local Jail = require 'modules.control.jail' --- @dep modules.control.jail local Colors = require 'utils.color_presets' --- @dep utils.color_presets local format_chat_player_name = _C.format_chat_player_name --- @dep expcore.common -local selected_player_store = '' -local selected_action_store = '' -local function set_store_uids(player,action) - selected_player_store = player - selected_action_store = action +local SelectedPlayer, SelectedAction +local function set_datastores(player, action) + SelectedPlayer, SelectedAction = player, action end -- auth that will only allow when on player's of lower roles @@ -33,13 +30,13 @@ end -- gets the action player and a coloured name for the action to be used on local function get_action_player_name(player) - local selected_player_name = Store.get(selected_player_store,player) + local selected_player_name = SelectedPlayer:get(player) local selected_player = Game.get_player_from_any(selected_player_name) local selected_player_color = format_chat_player_name(selected_player) return selected_player_name, selected_player_color end --- telports one player to another +-- teleports one player to another local function teleport(from_player,to_player) local surface = to_player.surface local position = surface.find_non_colliding_position('character',to_player.position,32,1) @@ -109,7 +106,7 @@ local report_player = new_button('utility/spawn_flag',{'player-list.report-playe if Reports.is_reported(selected_player_name,player.name) then player.print({'expcom-report.already-reported'},Colors.orange_red) else - Store.set(selected_action_store,player,'command/report') + SelectedAction:set(player, 'command/report') end end) @@ -125,7 +122,7 @@ end -- @element warn_player local warn_player = new_button('utility/spawn_flag',{'player-list.warn-player'}) :on_click(function(player) - Store.set(selected_action_store,player,'command/give-warning') + SelectedAction:set(player, 'command/give-warning') end) local function warn_player_callback(player,reason) @@ -143,7 +140,7 @@ local jail_player = new_button('utility/multiplayer_waiting_icon',{'player-list. if Jail.is_jailed(selected_player_name) then player.print({'expcom-jail.already-jailed', selected_player_color},Colors.orange_red) else - Store.set(selected_action_store,player,'command/jail') + SelectedAction:set(player, 'command/jail') end end) @@ -162,7 +159,7 @@ local temp_ban_player = new_button('utility/warning_white',{'player-list.temp-ba if Jail.is_jailed(selected_player_name) then player.print({'expcom-jail.already-banned', selected_player_color},Colors.orange_red) else - Store.set(selected_action_store,player,'command/temp-ban') + SelectedAction:set(player, 'command/temp-ban') end end) @@ -177,7 +174,7 @@ end -- @element kick_player local kick_player = new_button('utility/warning_icon',{'player-list.kick-player'}) :on_click(function(player) - Store.set(selected_action_store,player,'command/kick') + SelectedAction:set(player, 'command/kick') end) local function kick_player_callback(player,reason) @@ -189,7 +186,7 @@ end -- @element ban_player local ban_player = new_button('utility/danger_icon',{'player-list.ban-player'}) :on_click(function(player) - Store.set(selected_action_store,player,'command/ban') + SelectedAction:set(player, 'command/ban') end) local function ban_player_callback(player,reason) @@ -198,7 +195,7 @@ local function ban_player_callback(player,reason) end return { - set_store_uids = set_store_uids, + set_datastores = set_datastores, buttons = { ['command/teleport'] = { auth=function(player,selected_player) diff --git a/modules/commands/interface.lua b/modules/commands/interface.lua index c6291970..9b73be17 100644 --- a/modules/commands/interface.lua +++ b/modules/commands/interface.lua @@ -15,7 +15,6 @@ local interface_modules = { ['output']=Common.player_return, ['Group']='expcore.permission_groups', ['Roles']='expcore.roles', - ['Store']='expcore.store', ['Gui']='expcore.gui', ['Async']='expcore.async', ['Datastore']='expcore.datastore' diff --git a/modules/gui/debug/expcore_store_view.lua b/modules/gui/debug/expcore_store_view.lua deleted file mode 100644 index 36ab8027..00000000 --- a/modules/gui/debug/expcore_store_view.lua +++ /dev/null @@ -1,128 +0,0 @@ -local Gui = require 'utils.gui' --- @dep utils.gui -local Store = require 'expcore.store' --- @dep utils.global -local Color = require 'utils.color_presets' --- @dep utils.color_presets -local Model = require 'modules.gui.debug.model' --- @dep modules.gui.debug.model - -local dump = Model.dump -local dump_text = Model.dump_text -local concat = table.concat - -local Public = {} - -local header_name = Gui.uid_name() -local left_panel_name = Gui.uid_name() -local right_panel_name = Gui.uid_name() -local input_text_box_name = Gui.uid_name() -local refresh_name = Gui.uid_name() - -Public.name = 'Store' - -function Public.show(container) - local main_flow = container.add {type = 'flow', direction = 'horizontal'} - - local left_panel = main_flow.add {type = 'scroll-pane', name = left_panel_name} - local left_panel_style = left_panel.style - left_panel_style.width = 300 - - for store_id, file_path in pairs(Store.file_paths) do - local header = left_panel.add({type = 'flow'}).add {type = 'label', name = header_name, caption = store_id..' - '..file_path} - Gui.set_data(header, store_id) - end - - local right_flow = main_flow.add {type = 'flow', direction = 'vertical'} - - local right_top_flow = right_flow.add {type = 'flow', direction = 'horizontal'} - - local input_text_box = right_top_flow.add {type = 'text-box', name = input_text_box_name} - local input_text_box_style = input_text_box.style - input_text_box_style.horizontally_stretchable = true - input_text_box_style.height = 32 - input_text_box_style.maximal_width = 1000 - - local refresh_button = - right_top_flow.add {type = 'sprite-button', name = refresh_name, sprite = 'utility/reset', tooltip = 'refresh'} - local refresh_button_style = refresh_button.style - refresh_button_style.width = 32 - refresh_button_style.height = 32 - - local right_panel = right_flow.add {type = 'text-box', name = right_panel_name} - right_panel.read_only = true - right_panel.selectable = true - - local right_panel_style = right_panel.style - right_panel_style.vertically_stretchable = true - right_panel_style.horizontally_stretchable = true - right_panel_style.maximal_width = 1000 - right_panel_style.maximal_height = 1000 - - local data = { - right_panel = right_panel, - input_text_box = input_text_box, - selected_header = nil - } - - Gui.set_data(input_text_box, data) - Gui.set_data(left_panel, data) - Gui.set_data(refresh_button, data) -end - -Gui.on_click( - header_name, - function(event) - local element = event.element - local store_id = Gui.get_data(element) - - local left_panel = element.parent.parent - local data = Gui.get_data(left_panel) - local right_panel = data.right_panel - local selected_header = data.selected_header - local input_text_box = data.input_text_box - - if selected_header then - selected_header.style.font_color = Color.white - end - - element.style.font_color = Color.orange - data.selected_header = element - - input_text_box.text = concat {'global.data_store[', store_id, ']'} - input_text_box.style.font_color = Color.black - - local content = dump(Store.get(store_id)) or 'nil' - right_panel.text = content - end -) - -local function update_dump(text_input, data, player) - local suc, ouput = dump_text(text_input.text, player) - if not suc then - text_input.style.font_color = Color.red - else - text_input.style.font_color = Color.black - data.right_panel.text = ouput - end -end - -Gui.on_text_changed( - input_text_box_name, - function(event) - local element = event.element - local data = Gui.get_data(element) - - update_dump(element, data, event.player) - end -) - -Gui.on_click( - refresh_name, - function(event) - local element = event.element - local data = Gui.get_data(element) - - local input_text_box = data.input_text_box - - update_dump(input_text_box, data, event.player) - end -) - -return Public diff --git a/modules/gui/debug/main_view.lua b/modules/gui/debug/main_view.lua index bdc93f43..6fef9c16 100644 --- a/modules/gui/debug/main_view.lua +++ b/modules/gui/debug/main_view.lua @@ -6,7 +6,6 @@ local Public = {} local pages = { require 'modules.gui.debug.redmew_global_view', require 'modules.gui.debug.expcore_datastore_view', - require 'modules.gui.debug.expcore_store_view', require 'modules.gui.debug.expcore_gui_view', require 'modules.gui.debug.global_view', require 'modules.gui.debug.package_view', diff --git a/modules/gui/player-list.lua b/modules/gui/player-list.lua index 497c6793..83c37431 100644 --- a/modules/gui/player-list.lua +++ b/modules/gui/player-list.lua @@ -7,25 +7,21 @@ -- luacheck:ignore 211/Colors local Gui = require 'expcore.gui' --- @dep expcore.gui local Roles = require 'expcore.roles' --- @dep expcore.roles -local Store = require 'expcore.store' --- @dep expcore.store +local Datastore = require 'expcore.datastore' --- @dep expcore.datastore local Game = require 'utils.game' --- @dep utils.game local Event = require 'utils.event' --- @dep utils.event local config = require 'config.gui.player_list_actions' --- @dep config.gui.player_list_actions local Colors = require 'utils.color_presets' --- @dep utils.color_presets local format_time = _C.format_time --- @dep expcore.common --- Stores the name of the player a player has selected -local selected_player_store = Store.register(function(player) - return player.name -end) - --- Stores the current action that a player wants to do -local selected_action_store = Store.register(function(player) - return player.name -end) +--- Stores all data for the warp gui +local PlayerListData = Datastore.connect('PlayerListData') +PlayerListData:set_serializer(Datastore.name_serializer) +local SelectedPlayer = PlayerListData:combine('SelectedPlayer') +local SelectedAction = PlayerListData:combine('SelectedAction') -- Set the config to use these stores -config.set_store_uids(selected_player_store, selected_action_store) +config.set_datastores(SelectedPlayer, SelectedAction) --- Button used to open the action bar -- @element open_action_bar @@ -43,11 +39,11 @@ Gui.element{ } :on_click(function(player, element, _) local selected_player_name = element.parent.name - local old_selected_player_name = Store.get(selected_player_store, player) + local old_selected_player_name = SelectedPlayer:get(player) if selected_player_name == old_selected_player_name then - Store.clear(selected_player_store, player) + SelectedPlayer:remove(player) else - Store.set(selected_player_store, player, selected_player_name) + SelectedPlayer:set(player, selected_player_name) end end) @@ -62,8 +58,8 @@ Gui.element{ } :style(Gui.sprite_style(30, -1, { top_margin = -1, right_margin = -1 })) :on_click(function(player, _) - Store.clear(selected_player_store, player) - Store.clear(selected_action_store, player) + SelectedPlayer:remove(player) + SelectedAction:remove(player) end) --- Button used to confirm a reason @@ -78,11 +74,11 @@ Gui.element{ :style(Gui.sprite_style(30, -1, { left_margin = -2, right_margin = -1 })) :on_click(function(player, element) local reason = element.parent.entry.text or 'Non Given' - local action_name = Store.get(selected_action_store, player) + local action_name = SelectedAction:get(player) local reason_callback = config.buttons[action_name].reason_callback reason_callback(player, reason) - Store.clear(selected_player_store, player) - Store.clear(selected_action_store, player) + SelectedPlayer:remove(player) + SelectedAction:remove(player) element.parent.entry.text = '' end) @@ -126,12 +122,12 @@ end) event.player.zoom_to_world(position, 1.75) else -- RMB will toggle the settings - local old_selected_player_name = Store.get(selected_player_store, player) + local old_selected_player_name = SelectedPlayer:get(player) if selected_player_name == old_selected_player_name then - Store.clear(selected_player_store, player) - Store.clear(selected_action_store, player) + SelectedPlayer:remove(player) + SelectedAction:remove(player) else - Store.set(selected_player_store, player, selected_player_name) + SelectedPlayer:set(player, selected_player_name) end end end) @@ -174,7 +170,7 @@ end) --- Updates the visible state of the action bar buttons local function update_action_bar(element) local player = Gui.get_player_from_element(element) - local selected_player_name = Store.get(selected_player_store, player) + local selected_player_name = SelectedPlayer:get(player) if not selected_player_name then -- Hide the action bar when no player is selected @@ -185,8 +181,8 @@ local function update_action_bar(element) if not selected_player.connected then -- If the player is offline then reest stores element.visible = false - Store.clear(selected_player_store, player) - Store.clear(selected_action_store, player) + SelectedPlayer:remove(player) + SelectedAction:remove(player) else -- Otherwise check what actions the player is allowed to use @@ -367,10 +363,10 @@ Event.add(defines.events.on_player_left_game, function(event) local scroll_table = frame.container.scroll.table remove_player_base(scroll_table, remove_player) - local selected_player_name = Store.get(selected_player_store, player) + local selected_player_name = SelectedPlayer:get(player) if selected_player_name == remove_player.name then - Store.clear(selected_player_store, player) - Store.clear(selected_action_store, player) + SelectedPlayer:remove(player) + SelectedAction:remove(player) end end end) @@ -393,7 +389,7 @@ Event.add(Roles.events.on_role_assigned, redraw_player_list) Event.add(Roles.events.on_role_unassigned, redraw_player_list) --- When the action player is changed the action bar will update -Store.watch(selected_player_store, function(value, player_name) +SelectedPlayer:on_update(function(player_name, selected_player) local player = Game.get_player_from_any(player_name) local frame = Gui.get_left_element(player, player_list_container) local scroll_table = frame.container.scroll.table @@ -401,7 +397,7 @@ Store.watch(selected_player_store, function(value, player_name) for _, next_player in pairs(game.connected_players) do local element = scroll_table[next_player.name][open_action_bar.name] local style = 'frame_button' - if next_player.name == value then + if next_player.name == selected_player then style = 'tool_button' end element.style = style @@ -413,20 +409,20 @@ Store.watch(selected_player_store, function(value, player_name) end) --- When the action name is changed the reason input will update -Store.watch(selected_action_store, function(value, player_name) +SelectedAction:on_update(function(player_name, selected_action) local player = Game.get_player_from_any(player_name) local frame = Gui.get_left_element(player, player_list_container) local element = frame.container.reason_bar - if value then + if selected_action then -- if there is a new value then check the player is still online - local selected_player_name = Store.get(selected_player_store, player_name) + local selected_player_name = SelectedPlayer:get(player_name) local selected_player = Game.get_player_from_any(selected_player_name) if selected_player.connected then element.visible = true else -- Clear if the player is offline - Store.clear(selected_player_store, player_name) - Store.clear(selected_action_store, player_name) + SelectedPlayer:remove(player) + SelectedAction:remove(player) end else