From 1e3f0ff81106c87881f394f6f47968c590d548a6 Mon Sep 17 00:00:00 2001 From: Gerkiz Date: Tue, 7 Jun 2022 17:39:44 +0200 Subject: [PATCH] fix bugs --- modules/autostash.lua | 26 +++++----- utils/commands/where.lua | 18 +++---- utils/datastore/jail_data.lua | 39 +++++--------- utils/gui/player_list.lua | 96 ++++++++++++++++++++++------------- 4 files changed, 98 insertions(+), 81 deletions(-) diff --git a/modules/autostash.lua b/modules/autostash.lua index 69f320de..d110fe56 100644 --- a/modules/autostash.lua +++ b/modules/autostash.lua @@ -58,11 +58,11 @@ local function prepare_floaty_text(list, surface, position, name, count) end local function chest_is_valid(chest) - if this.dungeons_initial_level ~= nil then - -- transport chests always are valid targets - if chest.name == 'blue-chest' or chest.name == 'red-chest' then - return true - end + if this.dungeons_initial_level ~= nil then + -- transport chests always are valid targets + if chest.name == 'blue-chest' or chest.name == 'red-chest' then + return true + end end for _, e in pairs( chest.surface.find_entities_filtered( @@ -514,20 +514,20 @@ local function auto_stash(player, event) furnaceList[name] = (furnaceList[name] or 0) + inventory[i].count end end - elseif shift and this.insert_into_wagon then - if button == defines.mouse_button_type.right then + elseif shift and this.insert_into_wagon then -- insert into wagon + if button == defines.mouse_button_type.right then -- insert all ores into wagon if is_resource then full_insert = {full = insert_into_wagon(inventory[i], chests, name, floaty_text_list), name = name} end end - if button == defines.mouse_button_type.left then + if button == defines.mouse_button_type.left then -- insert all filtered into wagon full_insert = {full = insert_into_wagon_filtered(inventory[i], chests, name, floaty_text_list), name = name} end - elseif button == defines.mouse_button_type.right then + elseif button == defines.mouse_button_type.right then -- only ores to nearby chests if is_resource then full_insert = {full = insert_item_into_chest(inventory[i], chests, filtered_chests, name, floaty_text_list, full_insert), name = name} end - elseif button == defines.mouse_button_type.left then + elseif button == defines.mouse_button_type.left then -- all items to nearby chests full_insert = {full = insert_item_into_chest(inventory[i], chests, filtered_chests, name, floaty_text_list, full_insert), name = name} end if not full_insert.success then @@ -573,7 +573,7 @@ local function create_gui_button(player) data.tooltip = tooltip data.sprite = 'item/wooden-chest' - if data[player.index] then + if data and data[player.index] then local f = data[player.index] if f.frame and f.frame.valid then f.frame.sprite = 'item/wooden-chest' @@ -652,7 +652,7 @@ local function on_gui_click(event) local name = 'auto_stash' if this.bottom_button then local data = BottomFrame.get('bottom_quickbar_button') - if data[player.index] then + if data and data[player.index] then data = data[player.index] name = data.name end @@ -692,7 +692,7 @@ function Public.bottom_button(value) end function Public.set_dungeons_initial_level(value) - this.dungeons_initial_level = value + this.dungeons_initial_level = value end Event.on_configuration_changed(do_whitelist) diff --git a/utils/commands/where.lua b/utils/commands/where.lua index 2577715b..3bff328f 100644 --- a/utils/commands/where.lua +++ b/utils/commands/where.lua @@ -128,12 +128,12 @@ commands.add_command( return end - local target_player = game.get_player(cmd.parameter) + local target = game.get_player(cmd.parameter) - if validate_player(target_player) then + if validate_player(target) then local player_data = create_player_data(player) - player_data.target_player = target_player - create_mini_camera_gui(player, target_player) + player_data.target = target + create_mini_camera_gui(player, target) else remove_player_data(player) player.print('[Where] Please type a name of a player who is connected.', Color.warning) @@ -146,12 +146,12 @@ commands.add_command( local function on_nth_tick() for p, data in pairs(this.players) do - if data and data.target_player and data.target_player.valid then - local target_player = data.target_player + if data and data.target and data.target.valid then + local target = data.target local camera_frame = data.camera_frame local player = game.get_player(p) - if not (validate_player(player) and validate_player(target_player)) then + if not (validate_player(player) or validate_player(target)) then remove_player_data(player) goto continue end @@ -161,8 +161,8 @@ local function on_nth_tick() goto continue end - camera_frame.position = target_player.position - camera_frame.surface_index = target_player.surface.index + camera_frame.position = target.position + camera_frame.surface_index = target.surface.index ::continue:: end diff --git a/utils/datastore/jail_data.lua b/utils/datastore/jail_data.lua index 6a97452f..5cd90d20 100644 --- a/utils/datastore/jail_data.lua +++ b/utils/datastore/jail_data.lua @@ -78,9 +78,11 @@ end local function add_revoked(name, admin, reason) if name then + local date = Server.get_current_date_with_time() + if not revoked_permissions[name] then revoked_permissions[name] = true - set_data(revoked_permissions_set, name, {revoked = true, actor = admin, reason = reason}) + set_data(revoked_permissions_set, name, {revoked = true, actor = admin, reason = reason, date = date}) return true else return false @@ -429,10 +431,7 @@ local function vote_to_jail(player, griefer, msg) votejail[griefer][player.name] = true votejail[griefer].index = votejail[griefer].index + 1 Utils.print_to(player, 'You have voted to jail player ' .. griefer .. '.') - if - votejail[griefer].index >= settings.votejail_count or - (votejail[griefer].index == #game.connected_players - 1 and #game.connected_players > votejail[griefer].index) - then + if votejail[griefer].index >= settings.votejail_count or (votejail[griefer].index == #game.connected_players - 1 and #game.connected_players > votejail[griefer].index) then Public.try_ul_data(griefer, true, votejail[griefer].actor, msg) end else @@ -460,10 +459,7 @@ local function vote_to_free(player, griefer) votefree[griefer].index = votefree[griefer].index + 1 Utils.print_to(player, 'You have voted to free player ' .. griefer .. '.') - if - votefree[griefer].index >= settings.votejail_count or - (votefree[griefer].index == #game.connected_players - 1 and #game.connected_players > votefree[griefer].index) - then + if votefree[griefer].index >= settings.votejail_count or (votefree[griefer].index == #game.connected_players - 1 and #game.connected_players > votefree[griefer].index) then Public.try_ul_data(griefer, false, votefree[griefer].actor) votejail[griefer] = nil votefree[griefer] = nil @@ -496,6 +492,8 @@ local function jail(player, griefer, msg, raised) local gulag = get_gulag_permission_group() gulag.add_player(griefer) + local date = Server.get_current_date_with_time() + local message = griefer .. ' has been jailed by ' .. player .. '. Cause: ' .. msg if to_jail_player.character and to_jail_player.character.valid and to_jail_player.character.driving then @@ -504,7 +502,7 @@ local function jail(player, griefer, msg, raised) jailed[griefer] = {jailed = true, actor = player, reason = msg} if not raised then - set_data(jailed_data_set, griefer, {jailed = true, actor = player, reason = msg}) + set_data(jailed_data_set, griefer, {jailed = true, actor = player, reason = msg, date = date}) end Utils.print_to(nil, message) @@ -700,12 +698,11 @@ Server.on_data_set_changed( end local v = data.value + local k = data.key if v and v.actor then - if v.jailed then - jail(v.actor, data.key, v.reason, true) - elseif not v.jailed then - free('script', data.key) - end + jail(v.actor, data.key, v.reason, true) + elseif k then + free('script', data.key) end end ) @@ -725,7 +722,6 @@ commands.add_command( 'jail', 'Sends the player to gulag! Valid arguments are:\n/jail ', function() - return end ) @@ -733,7 +729,6 @@ commands.add_command( 'free', 'Brings back the player from gulag.', function() - return end ) @@ -883,10 +878,7 @@ Event.add( if trusted and playtime >= settings.playtime_for_vote and playtime < settings.playtime_for_instant_jail and not player.admin then if cmd == 'jail' then if not terms_tbl[player.name] then - Utils.warning( - player, - 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!' - ) + Utils.warning(player, 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!') Utils.warning(player, "Jailing someone because they're afk or other stupid reasons is NOT valid!") Utils.warning(player, 'Run this command again to if you really want to do this!') for i = 1, 4 do @@ -909,10 +901,7 @@ Event.add( if player.admin or playtime >= settings.playtime_for_instant_jail then if cmd == 'jail' then if not terms_tbl[player.name] then - Utils.warning( - player, - 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!' - ) + Utils.warning(player, 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!') Utils.warning(player, 'Run this command again to if you really want to do this!') for i = 1, 4 do Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name}) diff --git a/utils/gui/player_list.lua b/utils/gui/player_list.lua index 39d57f0e..e666fc09 100644 --- a/utils/gui/player_list.lua +++ b/utils/gui/player_list.lua @@ -26,6 +26,8 @@ local Token = require 'utils.token' local Public = {} local module_name = Gui.uid_name() +local locate_player_frame_name = Gui.uid_name() +local poke_player_frame_name = Gui.uid_name() local this = { player_list = { @@ -660,14 +662,21 @@ local function player_list_show(data) return end - local name_label = + local name_flow = player_list_panel_table.add { + type = 'flow' + } + + local name_label = + name_flow.add { type = 'label', - name = p.index, + name = locate_player_frame_name, caption = caption, tooltip = tooltip } + Gui.set_data(name_label, p.index) + local p_color = game.players[player_list[i].player_index] name_label.style.font = 'default' name_label.style.font_color = { @@ -716,20 +725,21 @@ local function player_list_show(data) current_label.style.font = 'heading-3' -- Poke - local flow = player_list_panel_table.add {type = 'flow', name = 'button_flow_' .. i, direction = 'horizontal'} - flow.add {type = 'label', name = 'button_spacer_' .. i, caption = ''} - local button = flow.add {type = 'button', name = 'poke_player_' .. player_list[i].name, caption = player_list[i].pokes} - button.style.font = 'default' - button.tooltip = 'Poke ' .. player_list[i].name .. ' with a random message!' + local poke_flow = player_list_panel_table.add {type = 'flow', name = 'button_flow_' .. i, direction = 'horizontal'} + poke_flow.add {type = 'label', name = 'button_spacer_' .. i, caption = ''} + local poke_button = poke_flow.add {type = 'button', name = poke_player_frame_name, caption = player_list[i].pokes} + Gui.set_data(poke_button, p.index) + poke_button.style.font = 'default' + poke_button.tooltip = 'Poke ' .. player_list[i].name .. ' with a random message!' label.style.font_color = {r = 0.83, g = 0.83, b = 0.83} - button.style.minimal_height = 30 - button.style.minimal_width = 30 - button.style.maximal_height = 30 - button.style.maximal_width = 30 - button.style.top_padding = 0 - button.style.left_padding = 0 - button.style.right_padding = 0 - button.style.bottom_padding = 0 + poke_button.style.minimal_height = 30 + poke_button.style.minimal_width = 30 + poke_button.style.maximal_height = 30 + poke_button.style.maximal_width = 30 + poke_button.style.top_padding = 0 + poke_button.style.left_padding = 0 + poke_button.style.right_padding = 0 + poke_button.style.bottom_padding = 0 end end @@ -851,49 +861,67 @@ local function on_gui_click(event) actions[name]() return end +end + +Gui.on_click( + locate_player_frame_name, + function(event) + local player = event.player + local element = event.element + + local data = Gui.get_data(element) + if not data then + return + end - if not element.valid then - return - end - --Locate other players - local index = tonumber(element.name) - if index and game.get_player(index) and index == game.get_player(index).index then local is_spamming = SpamProtection.is_spamming(player, nil, 'PlayerList Locate Player') if is_spamming then return end - local target = game.get_player(index) + + local target = game.get_player(data) if not target or not target.valid then + Gui.set_data(element, nil) return end + Gui.set_data(element, nil) Where.create_mini_camera_gui(player, target) end - --Poke other players - if string.sub(element.name, 1, 11) == 'poke_player' then - local is_spamming = SpamProtection.is_spamming(player, nil, 'PlayerList Poke Player') - if is_spamming then +) + +Gui.on_click( + poke_player_frame_name, + function(event) + local player = event.player + local element = event.element + + local data = Gui.get_data(element) + if not data then return end - local poked_player = string.sub(element.name, 13, string.len(element.name)) - if player.name == poked_player then + local target = game.get_player(data) + + if player.index == target.index then + Gui.set_data(element, nil) return end - if this.player_list.last_poke_tick[element.player_index] + 300 < game.tick then + + if this.player_list.last_poke_tick[player.index] + 300 < game.tick then local str = '>> ' str = str .. player.name str = str .. ' has poked ' - str = str .. poked_player + str = str .. target.name str = str .. ' with ' local z = math.random(1, #pokemessages) str = str .. pokemessages[z] str = str .. ' <<' game.print(str) - this.player_list.last_poke_tick[element.player_index] = game.tick - local p = game.players[poked_player] - this.player_list.pokes[p.index] = this.player_list.pokes[p.index] + 1 + this.player_list.last_poke_tick[player.index] = game.tick + this.player_list.pokes[target.index] = this.player_list.pokes[target.index] + 1 + Gui.set_data(element, nil) end end -end +) local function refresh() for _, player in pairs(game.connected_players) do