From fbaa411073df9d6f6bb9e622445fd3400c84120f Mon Sep 17 00:00:00 2001 From: Gerkiz Date: Sun, 23 May 2021 17:03:52 +0200 Subject: [PATCH] refactor and changes --- comfy_panel/bottom_frame.lua | 33 +++--- comfy_panel/config.lua | 47 ++++++++ comfy_panel/poll.lua | 13 ++- commands/misc.lua | 11 +- locale/en/rpg.cfg | 2 +- maps/mountain_fortress_v2/main.lua | 4 +- maps/mountain_fortress_v3/functions.lua | 56 +++------- maps/mountain_fortress_v3/locomotive.lua | 26 +++++ maps/mountain_fortress_v3/main.lua | 18 ++-- maps/mountain_fortress_v3/table.lua | 6 +- modules/autostash.lua | 66 +++++++++--- modules/burden.lua | 5 +- modules/hunger.lua | 9 +- modules/rpg.lua | 44 ++++---- modules/rpg/functions.lua | 12 +-- modules/rpg/gui.lua | 70 +++++------- modules/rpg/main.lua | 12 +-- modules/rpg/settings.lua | 11 +- modules/show_inventory.lua | 14 +++ modules/thirst.lua | 7 +- modules/wave_defense/main.lua | 11 +- player_modifiers.lua | 130 +++++++++++++++++++---- terrain_layouts/caves.lua | 3 +- utils/gui.lua | 29 +++-- 24 files changed, 403 insertions(+), 236 deletions(-) diff --git a/comfy_panel/bottom_frame.lua b/comfy_panel/bottom_frame.lua index 37fffd9c..a518f688 100644 --- a/comfy_panel/bottom_frame.lua +++ b/comfy_panel/bottom_frame.lua @@ -56,14 +56,15 @@ function Public.set(key, value) end end -Event.on_init( - function() - this.players = {} - end -) - function Public.reset() - this.players = {} + local players = game.players + for i = 1, #players do + local player = players[i] + if not player.connected then + this.players[player.index] = nil + this.bottom_quickbar_button[player.index] = nil + end + end end ----! Gui Functions ! ---- @@ -73,8 +74,8 @@ local function destroy_frame(player) local frame = gui.screen[bottom_guis_frame] if frame and frame.valid then frame.destroy() - this.bottom_quickbar_button[player.index] = nil end + this.bottom_quickbar_button[player.index] = nil end local function create_frame(player, rebuild) @@ -149,18 +150,10 @@ local function set_location(player) y = (resolution.height - (96 * scale)) } else - local experimental = get_game_version() - if experimental then - frame.location = { - x = (resolution.width / 2) - ((54 + 445) * scale), - y = (resolution.height - (96 * scale)) - } - else - frame.location = { - x = (resolution.width / 2) - ((54 + 258) * scale), - y = (resolution.height - (96 * scale)) - } - end + frame.location = { + x = (resolution.width / 2) - ((54 + 445) * scale), + y = (resolution.height - (96 * scale)) + } end end diff --git a/comfy_panel/config.lua b/comfy_panel/config.lua index d37d7cf3..91450e96 100644 --- a/comfy_panel/config.lua +++ b/comfy_panel/config.lua @@ -5,8 +5,10 @@ local SessionData = require 'utils.datastore.session_data' local Utils = require 'utils.core' local Tabs = require 'comfy_panel.main' local SpamProtection = require 'utils.spam_protection' +local BottomFrame = require 'comfy_panel.bottom_frame' local Token = require 'utils.token' local Global = require 'utils.global' +local Gui = require 'utils.gui' local module_name = 'Config' @@ -120,6 +122,20 @@ local functions = { game.players[event.player_index].spectator = false end end, + ['comfy_panel_bottom_right_frame'] = function(event) + local player = game.get_player(event.player_index) + if event.element.switch_state == 'left' then + local bottom_frame = BottomFrame.get_player_data(player) + if not bottom_frame then + return + end + bottom_frame.bottom_left = true + BottomFrame.set_location(player) + else + BottomFrame.get_player_data(player, true) + BottomFrame.set_location(player) + end + end, ['comfy_panel_auto_hotbar_switch'] = function(event) if event.element.switch_state == 'left' then global.auto_hotbar_enabled[event.player_index] = true @@ -166,6 +182,13 @@ local functions = { global.bb_settings.only_admins_vote = false game.print('Admin-only difficulty voting has been disabled!') end + end, + ['disable_cleaning'] = function(event) + if event.element.switch_state == 'left' then + Gui.set_disable_clear_invalid_data(true) + else + Gui.set_disable_clear_invalid_data(false) + end end } @@ -371,6 +394,22 @@ local function build_config_gui(data) scroll_pane.add({type = 'line'}) end + if BottomFrame.is_custom_buttons_enabled() then + switch_state = 'right' + local bottom_frame = BottomFrame.get('players') + if bottom_frame[player.index] then + switch_state = 'left' + end + add_switch( + scroll_pane, + switch_state, + 'comfy_panel_bottom_right_frame', + 'Button Location', + 'Toggle to select if you want the bottom button on the right side or the left side.' + ) + scroll_pane.add({type = 'line'}) + end + if admin then label = scroll_pane.add({type = 'label', caption = 'Admin Settings'}) label.style.font = 'default-bold' @@ -391,6 +430,14 @@ local function build_config_gui(data) scroll_pane.add({type = 'line'}) + switch_state = 'right' + if Gui.get_disable_clear_invalid_data() then + switch_state = 'left' + end + add_switch(scroll_pane, switch_state, 'disable_cleaning', 'Gui Data Cleaning', 'Toggles the Gui data cleaning.') + + scroll_pane.add({type = 'line'}) + switch_state = 'right' if this.gui_config.spaghett.enabled then switch_state = 'left' diff --git a/comfy_panel/poll.lua b/comfy_panel/poll.lua index aacc70d0..25b95ad7 100644 --- a/comfy_panel/poll.lua +++ b/comfy_panel/poll.lua @@ -775,7 +775,7 @@ local function tick() if not polls.running then return end - for _, p in pairs(game.connected_players) do + for _, p in pairs(game.players) do local frame = p.gui.left[main_frame_name] if frame and frame.valid then local data = Gui.get_data(frame) @@ -790,6 +790,17 @@ local function tick() end end end + local player_index = p.index + local tbl = player_create_poll_data[player_index] + if tbl then + for k, element in pairs(tbl) do + if type(element) == 'table' then + if not element.valid then + player_create_poll_data[player_index] = nil + end + end + end + end end end diff --git a/commands/misc.lua b/commands/misc.lua index aa623b24..76b06212 100644 --- a/commands/misc.lua +++ b/commands/misc.lua @@ -275,15 +275,14 @@ commands.add_command( end local item = game.item_prototypes local i = 0 - local p_modifer = Modifiers.get_table() for _k, _v in pairs(item) do i = i + 1 if _k and _v.type ~= 'mining-tool' then - p_modifer[player.index].character_inventory_slots_bonus['creative'] = tonumber(i) - p_modifer[player.index].character_mining_speed_modifier['creative'] = 50 - p_modifer[player.index].character_health_bonus['creative'] = 2000 - p_modifer[player.index].character_crafting_speed_modifier['creative'] = 50 - v.character_inventory_slots_bonus = p_modifer[player.index].character_inventory_slots_bonus['creative'] + Modifiers.update_single_modifier(player, 'character_inventory_slots_bonus', 'creative', tonumber(i)) + Modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'creative', 50) + Modifiers.update_single_modifier(player, 'character_health_bonus', 'creative', 2000) + Modifiers.update_single_modifier(player, 'character_crafting_speed_modifier', 'creative', 50) + v.character_inventory_slots_bonus = Modifiers.get_single_modifier(player, 'character_inventory_slots_bonus', 'creative') v.insert {name = _k, count = _v.stack_size} v.print('[CREATIVE] Inserted all base items.', Color.success) Modifiers.update_player_modifiers(player) diff --git a/locale/en/rpg.cfg b/locale/en/rpg.cfg index e16c6ddf..6af2b69d 100644 --- a/locale/en/rpg.cfg +++ b/locale/en/rpg.cfg @@ -35,7 +35,7 @@ dexterity_name=DEXTERITY dexterity_tooltip=Increases running and crafting speed. vitality_name=VITALITY vitality_tooltip=Increases health.\nIncreases melee life on-hit. -points_to_dist=POINTS TO\nDISTRIBUTE +points_to_dist=POINTS LEFT life_name=LIFE life_tooltip=Your current health life_increase=Current life. Increase it by adding vitality. diff --git a/maps/mountain_fortress_v2/main.lua b/maps/mountain_fortress_v2/main.lua index f9f719f8..0779744a 100644 --- a/maps/mountain_fortress_v2/main.lua +++ b/maps/mountain_fortress_v2/main.lua @@ -4,7 +4,6 @@ global.offline_loot = true local darkness = false -require 'player_modifiers' require 'functions.soft_reset' require 'functions.basic_markets' @@ -442,7 +441,6 @@ local function on_research_finished(event) end local function on_player_joined_game(event) - local player_modifiers = Modifier.get_table() local player = game.players[event.player_index] set_difficulty() @@ -467,7 +465,7 @@ local function on_player_joined_game(event) end end - player_modifiers[player.index].character_mining_speed_modifier['mountain_fortress'] = 0.5 + Modifier.update_single_modifier(player, 'character_mining_speed_modifier', 'mountain_fortress', 0.5) Modifier.update_player_modifiers(player) local tile = surface.get_tile(player.position) diff --git a/maps/mountain_fortress_v3/functions.lua b/maps/mountain_fortress_v3/functions.lua index 992b4a0f..75c6ca0c 100644 --- a/maps/mountain_fortress_v3/functions.lua +++ b/maps/mountain_fortress_v3/functions.lua @@ -21,7 +21,13 @@ local this = { surface_cleared = false } -local starting_items = {['pistol'] = 1, ['firearm-magazine'] = 16, ['rail'] = 16, ['wood'] = 16, ['explosives'] = 32} +local starting_items = { + ['pistol'] = 1, + ['firearm-magazine'] = 16, + ['rail'] = 16, + ['wood'] = 16, + ['explosives'] = 32 +} Global.register( this, @@ -59,21 +65,6 @@ local artillery_target_entities = { 'spidertron' } -function Public.get_player_data(player, remove_user_data) - local players = WPT.get('players') - if remove_user_data then - if players[player.index] then - players[player.index] = nil - end - end - if not players[player.index] then - players[player.index] = {} - end - return players[player.index] -end - -local get_player_data = Public.get_player_data - local function debug_str(msg) local debug = WPT.get('debug') if not debug then @@ -1132,6 +1123,7 @@ end function Public.on_player_joined_game(event) local active_surface_index = WPT.get('active_surface_index') + local players = WPT.get('players') local player = game.players[event.player_index] local surface = game.surfaces[active_surface_index] @@ -1139,15 +1131,15 @@ function Public.on_player_joined_game(event) ICW_Func.is_minimap_valid(player, surface) - local player_data = get_player_data(player) - - if not player_data.first_join then + if player.online_time < 1 then + if not players[player.index] then + players[player.index] = {} + end local message = ({'main.greeting', player.name}) Alert.alert_player(player, 15, message) for item, amount in pairs(starting_items) do player.insert({name = item, count = amount}) end - player_data.first_join = true end local top = player.gui.top @@ -1213,26 +1205,6 @@ function Public.on_pre_player_left_game(event) end end -function Public.on_player_respawned(event) - local player = game.get_player(event.player_index) - if not (player and player.valid) then - return - end - local player_data = get_player_data(player) - if player_data.died then - player_data.died = nil - end -end - -function Public.on_player_died(event) - local player = game.get_player(event.player_index) - if not (player and player.valid) then - return - end - local player_data = get_player_data(player) - player_data.died = true -end - function Public.on_player_changed_position(event) local active_surface_index = WPT.get('active_surface_index') if not active_surface_index then @@ -1363,16 +1335,12 @@ end local on_player_joined_game = Public.on_player_joined_game local on_player_left_game = Public.on_player_left_game -local on_player_respawned = Public.on_player_respawned -local on_player_died = Public.on_player_died local on_research_finished = Public.on_research_finished local on_player_changed_position = Public.on_player_changed_position local on_pre_player_left_game = Public.on_pre_player_left_game Event.add(defines.events.on_player_joined_game, on_player_joined_game) Event.add(defines.events.on_player_left_game, on_player_left_game) -Event.add(defines.events.on_player_respawned, on_player_respawned) -Event.add(defines.events.on_player_died, on_player_died) Event.add(defines.events.on_research_finished, on_research_finished) Event.add(defines.events.on_player_changed_position, on_player_changed_position) Event.add(defines.events.on_pre_player_left_game, on_pre_player_left_game) diff --git a/maps/mountain_fortress_v3/locomotive.lua b/maps/mountain_fortress_v3/locomotive.lua index 37be09e6..61c77a6e 100644 --- a/maps/mountain_fortress_v3/locomotive.lua +++ b/maps/mountain_fortress_v3/locomotive.lua @@ -619,6 +619,10 @@ local function redraw_market_items(gui, player, search_text) return end local players = WPT.get('players') + if not players then + return + end + local trusted = Session.get_trusted_table() if gui and gui.valid then @@ -781,6 +785,9 @@ end local function slider_changed(event) local player = game.players[event.player_index] local players = WPT.get('players') + if not players then + return + end local slider_value slider_value = players @@ -821,6 +828,10 @@ local function text_changed(event) end local players = WPT.get('players') + if not players then + return + end + local player = game.players[event.player_index] local data = players[player.index].data @@ -886,6 +897,9 @@ local function gui_opened(event) local player_item_count = inventory.get_item_count('coin') local players = WPT.get('players') + if not players then + return + end if not players[player.index].data then players[player.index].data = {} @@ -983,6 +997,9 @@ end local function gui_click(event) local players = WPT.get('players') + if not players then + return + end local element = event.element local player = game.players[event.player_index] @@ -1316,6 +1333,9 @@ end local function gui_closed(event) local player = game.players[event.player_index] local players = WPT.get('players') + if not players then + return + end local type = event.gui_type @@ -1330,6 +1350,9 @@ end local function on_player_changed_position(event) local players = WPT.get('players') + if not players then + return + end local player = game.players[event.player_index] if not players[player.index] then return @@ -1868,6 +1891,9 @@ function Public.refresh_gui() local screen = gui.screen local player_data = WPT.get('players') + if not players then + return + end local data = player_data[player.index].data if screen and data and data.frame then diff --git a/maps/mountain_fortress_v3/main.lua b/maps/mountain_fortress_v3/main.lua index 84e9bf1c..a9d0ff84 100644 --- a/maps/mountain_fortress_v3/main.lua +++ b/maps/mountain_fortress_v3/main.lua @@ -31,6 +31,7 @@ local Difficulty = require 'modules.difficulty_vote_by_amount' local Task = require 'utils.task' local Token = require 'utils.token' local Alert = require 'utils.alert' +-- local BottomFrame = require 'comfy_panel.bottom_frame' local AntiGrief = require 'antigrief' local Misc = require 'commands.misc' local Modifiers = require 'player_modifiers' @@ -131,8 +132,11 @@ function Public.reset_map() Autostash.insert_into_furnace(true) Autostash.insert_into_wagon(true) + Autostash.bottom_button(false) BuriedEnemies.reset() - + --[[ BottomFrame.reset() + BottomFrame.activate_custom_buttons(true) + BottomFrame.bottom_right(true) ]] Poll.reset() ICW.reset() IC.reset() @@ -277,15 +281,9 @@ end local is_player_valid = function() local players = game.connected_players for _, player in pairs(players) do - if player.connected and not player.character or not player.character.valid then - if not player.admin then - local player_data = Functions.get_player_data(player) - if player_data.died then - return - end - player.set_controller {type = defines.controllers.god} - player.create_character() - end + if player.connected and player.controller_type == 2 then + player.set_controller {type = defines.controllers.god} + player.create_character() end end end diff --git a/maps/mountain_fortress_v3/table.lua b/maps/mountain_fortress_v3/table.lua index 580257a4..a85e67ce 100644 --- a/maps/mountain_fortress_v3/table.lua +++ b/maps/mountain_fortress_v3/table.lua @@ -201,10 +201,8 @@ function Public.reset_table() } this.market_announce = game.tick + 1200 this.check_heavy_damage = true - - --!reset player tables - for _, player in pairs(this.players) do - player.died = false + for k, _ in pairs(this.players) do + this.players[k] = {} end end diff --git a/modules/autostash.lua b/modules/autostash.lua index 6aab11bd..d1374765 100644 --- a/modules/autostash.lua +++ b/modules/autostash.lua @@ -3,6 +3,7 @@ local Global = require 'utils.global' local Event = require 'utils.event' +local BottomFrame = require 'comfy_panel.bottom_frame' local floor = math.floor local print_color = {r = 120, g = 255, b = 0} @@ -11,6 +12,7 @@ local this = { whitelist = {}, insert_into_furnace = false, insert_into_wagon = false, + bottom_button = false, small_radius = 2 } @@ -537,23 +539,38 @@ local function create_gui_button(player) else tooltip = 'Sort your inventory into nearby chests.\nLMB: Everything, excluding quickbar items.\nRMB: Only ores to nearby chests, excluding quickbar items.' end - local b = - player.gui.top.add( - { - type = 'sprite-button', - sprite = 'item/wooden-chest', - name = 'auto_stash', - tooltip = tooltip - } - ) - b.style.font_color = {r = 0.11, g = 0.8, b = 0.44} - b.style.font = 'heading-1' - b.style.minimal_height = 40 - b.style.maximal_width = 40 - b.style.minimal_width = 38 - b.style.maximal_height = 38 - b.style.padding = 1 - b.style.margin = 0 + if this.bottom_button then + local data = BottomFrame.get('bottom_quickbar_button') + -- save it for later use + data.tooltip = tooltip + data.sprite = 'item/wooden-chest' + + if data[player.index] then + local f = data[player.index] + if f.frame and f.frame.valid then + f.frame.sprite = 'item/wooden-chest' + f.frame.tooltip = tooltip + end + end + else + local b = + player.gui.top.add( + { + type = 'sprite-button', + sprite = 'item/wooden-chest', + name = 'auto_stash', + tooltip = tooltip + } + ) + b.style.font_color = {r = 0.11, g = 0.8, b = 0.44} + b.style.font = 'heading-1' + b.style.minimal_height = 40 + b.style.maximal_width = 40 + b.style.minimal_width = 38 + b.style.maximal_height = 38 + b.style.padding = 1 + b.style.margin = 0 + end end local function do_whitelist() @@ -596,6 +613,13 @@ local function on_gui_click(event) end local player = game.players[event.player_index] local name = 'auto_stash' + if this.bottom_button then + local data = BottomFrame.get('bottom_quickbar_button') + if data[player.index] then + data = data[player.index] + name = data.name + end + end if event.element.name == name then auto_stash(player, event) @@ -618,6 +642,14 @@ function Public.insert_into_wagon(value) end end +function Public.bottom_button(value) + if value then + this.bottom_button = value + else + this.bottom_button = false + end +end + Event.on_configuration_changed(do_whitelist) Event.on_init(do_whitelist) diff --git a/modules/burden.lua b/modules/burden.lua index 5927b84f..60dd38a0 100644 --- a/modules/burden.lua +++ b/modules/burden.lua @@ -40,14 +40,13 @@ local function compute_fullness(player) end local function check_burden(event) - local player_modifiers = Modifier.get_table() local player = game.players[event.player_index] if not validate_player(player) then return end local fullness = compute_fullness(player) - player_modifiers[player.index].character_running_speed_modifier['randomness'] = 0.3 - fullness - player_modifiers[player.index].character_mining_speed_modifier['randomess'] = 0.3 - fullness + Modifier.update_single_modifier(player, 'character_running_speed_modifier', 'randomness', 0.3 - fullness) + Modifier.update_single_modifier(player, 'character_mining_speed_modifier', 'randomness', 0.3 - fullness) Modifier.update_player_modifiers(player) if fullness >= 0.9 and fullness <= 0.901 then player.print('Maybe you should drop some of that inventory to lessen the burden.', Color.red) diff --git a/modules/hunger.lua b/modules/hunger.lua index 425e85fa..4c7113ad 100644 --- a/modules/hunger.lua +++ b/modules/hunger.lua @@ -1,7 +1,5 @@ -- hunger module by mewmew -- -require 'player_modifiers' - local P = require 'player_modifiers' local starve_messages = {' ran out of foodstamps.', ' starved.', ' should not have skipped breakfast today.'} @@ -101,7 +99,6 @@ local function update_hunger_gui(player) end local function hunger_update(player, food_value) - local player_modifiers = P.get_table() if not player.character then return end @@ -147,11 +144,11 @@ local function hunger_update(player, food_value) end if player_hunger_buff[global.player_hunger[player.name]] < 0 then - player_modifiers[player.index].character_running_speed_modifier['hunger'] = player_hunger_buff[global.player_hunger[player.name]] * 0.75 + P.update_single_modifier(player, 'character_running_speed_modifier', 'hunger', player_hunger_buff[global.player_hunger[player.name]] * 0.75) else - player_modifiers[player.index].character_running_speed_modifier['hunger'] = player_hunger_buff[global.player_hunger[player.name]] * 0.15 + P.update_single_modifier(player, 'character_running_speed_modifier', 'hunger', player_hunger_buff[global.player_hunger[player.name]] * 0.15) end - player_modifiers[player.index].character_mining_speed_modifier['hunger'] = player_hunger_buff[global.player_hunger[player.name]] + P.update_single_modifier(player, 'character_mining_speed_modifier', 'hunger', player_hunger_buff[global.player_hunger[player.name]]) P.update_player_modifiers(player) update_hunger_gui(player) diff --git a/modules/rpg.lua b/modules/rpg.lua index 240ead54..054fd734 100644 --- a/modules/rpg.lua +++ b/modules/rpg.lua @@ -13,8 +13,6 @@ VITALITY > character_health_bonus Modified by Gerkiz *-* ]] -require 'player_modifiers' - local math_random = math.random local math_sqrt = math.sqrt local math_floor = math.floor @@ -145,7 +143,7 @@ local function update_char_button(player) if not player.gui.top.rpg then draw_gui_char_button(player) end - if rpg_t[player.index].points_to_distribute > 0 then + if rpg_t[player.index].points_left > 0 then player.gui.top.rpg.style.font_color = {245, 0, 0} else player.gui.top.rpg.style.font_color = {175, 175, 175} @@ -155,24 +153,22 @@ end local function update_player_stats(player) local player_modifiers = P.get_table() local strength = rpg_t[player.index].strength - 10 - player_modifiers[player.index].character_inventory_slots_bonus['rpg'] = math.round(strength * 0.2, 3) - player_modifiers[player.index].character_mining_speed_modifier['rpg'] = math.round(strength * 0.008, 3) + P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 3)) + P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', math.round(strength * 0.008, 3)) local magic = rpg_t[player.index].magic - 10 local v = magic * 0.15 - player_modifiers[player.index].character_build_distance_bonus['rpg'] = math.round(v, 3) - player_modifiers[player.index].character_item_drop_distance_bonus['rpg'] = math.round(v, 3) - player_modifiers[player.index].character_reach_distance_bonus['rpg'] = math.round(v, 3) - player_modifiers[player.index].character_loot_pickup_distance_bonus['rpg'] = math.round(v * 0.5, 3) - player_modifiers[player.index].character_item_pickup_distance_bonus['rpg'] = math.round(v * 0.25, 3) - player_modifiers[player.index].character_resource_reach_distance_bonus['rpg'] = math.round(v * 0.15, 3) + P.update_single_modifier(player, 'character_build_distance_bonus', 'rpg', math.round(v, 3)) + P.update_single_modifier(player, 'character_item_drop_distance_bonus', 'rpg', math.round(v, 3)) + P.update_single_modifier(player, 'character_reach_distance_bonus', 'rpg', math.round(v, 3)) + P.update_single_modifier(player, 'character_loot_pickup_distance_bonus', 'rpg', math.round(v * 0.5, 3)) + P.update_single_modifier(player, 'character_item_pickup_distance_bonus', 'rpg', math.round(v * 0.25, 3)) + P.update_single_modifier(player, 'character_resource_reach_distance_bonus', 'rpg', math.round(v * 0.15, 3)) local dexterity = rpg_t[player.index].dexterity - 10 - player_modifiers[player.index].character_running_speed_modifier['rpg'] = math.round(dexterity * 0.002, 3) - player_modifiers[player.index].character_crafting_speed_modifier['rpg'] = math.round(dexterity * 0.015, 3) - - player_modifiers[player.index].character_health_bonus['rpg'] = math.round((rpg_t[player.index].vitality - 10) * 6, 3) - + P.update_single_modifier(player, 'character_running_speed_modifier', 'rpg', math.round(dexterity * 0.002, 3)) + P.update_single_modifier(player, 'character_crafting_speed_modifier', 'rpg', math.round(dexterity * 0.015, 3)) + P.update_single_modifier(player, 'character_health_bonus', 'rpg', math.round((rpg_t[player.index].vitality - 10) * 6, 3)) P.update_player_modifiers(player) end @@ -222,7 +218,7 @@ end local function add_gui_increase_stat(element, name, player, width) local sprite = 'virtual-signal/signal-red' local symbol = '✚' - if rpg_t[player.index].points_to_distribute <= 0 then + if rpg_t[player.index].points_left <= 0 then sprite = 'virtual-signal/signal-black' end local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite}) @@ -335,7 +331,7 @@ local function draw_gui(player, forced) add_gui_increase_stat(tt, 'vitality', player) add_gui_description(tt, 'POINTS TO\nDISTRIBUTE', w1) - local e = add_gui_stat(tt, rpg_t[player.index].points_to_distribute, w2) + local e = add_gui_stat(tt, rpg_t[player.index].points_left, w2) e.style.font_color = {200, 0, 0} add_gui_description(tt, ' ', w2) @@ -500,7 +496,7 @@ local function level_up(player) return end draw_level_text(player) - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute + distribute_points_gain + rpg_t[player.index].points_left = rpg_t[player.index].points_left + distribute_points_gain update_char_button(player) table.shuffle_table(rpg_frame_icons) if player.gui.left.rpg then @@ -552,7 +548,7 @@ function Public.rpg_reset_player(player) magic = 10, dexterity = 10, vitality = 10, - points_to_distribute = 0, + points_left = 0, last_floaty_text = visuals_delay, xp_since_last_floaty_text = 0, rotated_entity_delay = 0, @@ -616,11 +612,11 @@ local function on_gui_click(event) if event.button == defines.mouse_button_type.right then for a = 1, 5, 1 do - if rpg_t[player.index].points_to_distribute <= 0 then + if rpg_t[player.index].points_left <= 0 then draw_gui(player, true) return end - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - 1 + rpg_t[player.index].points_left = rpg_t[player.index].points_left - 1 rpg_t[player.index][index] = rpg_t[player.index][index] + 1 update_player_stats(player) end @@ -628,11 +624,11 @@ local function on_gui_click(event) return end - if rpg_t[player.index].points_to_distribute <= 0 then + if rpg_t[player.index].points_left <= 0 then draw_gui(player, true) return end - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - 1 + rpg_t[player.index].points_left = rpg_t[player.index].points_left - 1 rpg_t[player.index][index] = rpg_t[player.index][index] + 1 update_player_stats(player) draw_gui(player, true) diff --git a/modules/rpg/functions.lua b/modules/rpg/functions.lua index 271a2c6c..1f8bb2c8 100644 --- a/modules/rpg/functions.lua +++ b/modules/rpg/functions.lua @@ -117,12 +117,12 @@ local function level_up(player) return end RPG_GUI.draw_level_text(player) - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute + distribute_points_gain + rpg_t[player.index].points_left = rpg_t[player.index].points_left + distribute_points_gain if rpg_t[player.index].allocate_index ~= 1 then local node = rpg_t[player.index].allocate_index local index = names[node]:lower() rpg_t[player.index][index] = rpg_t[player.index][index] + distribute_points_gain - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - distribute_points_gain + rpg_t[player.index].points_left = rpg_t[player.index].points_left - distribute_points_gain if not rpg_t[player.index].reset then rpg_t[player.index].total = rpg_t[player.index].total + distribute_points_gain end @@ -517,7 +517,7 @@ function Public.rpg_reset_player(player, one_time_reset) total = 0 end local old_level = rpg_t[player.index].level - local old_points_to_distribute = rpg_t[player.index].points_to_distribute + local old_points_to_distribute = rpg_t[player.index].points_left local old_xp = rpg_t[player.index].xp rpg_t[player.index] = { level = 1, @@ -539,7 +539,7 @@ function Public.rpg_reset_player(player, one_time_reset) enable_entity_spawn = false, health_bar = rpg_t[player.index].health_bar, mana_bar = rpg_t[player.index].mana_bar, - points_to_distribute = 0, + points_left = 0, last_floaty_text = visuals_delay, xp_since_last_floaty_text = 0, reset = true, @@ -551,7 +551,7 @@ function Public.rpg_reset_player(player, one_time_reset) stone_path = false, one_punch = false } - rpg_t[player.index].points_to_distribute = old_points_to_distribute + total + rpg_t[player.index].points_left = old_points_to_distribute + total rpg_t[player.index].xp = old_xp rpg_t[player.index].level = old_level else @@ -573,7 +573,7 @@ function Public.rpg_reset_player(player, one_time_reset) flame_boots = false, explosive_bullets = false, enable_entity_spawn = false, - points_to_distribute = 0, + points_left = 0, last_floaty_text = visuals_delay, xp_since_last_floaty_text = 0, reset = false, diff --git a/modules/rpg/gui.lua b/modules/rpg/gui.lua index 965cc576..51b100a3 100644 --- a/modules/rpg/gui.lua +++ b/modules/rpg/gui.lua @@ -48,7 +48,7 @@ function Public.update_char_button(player) if not player.gui.top[draw_main_frame_name] then Public.draw_gui_char_button(player) end - if rpg_t[player.index].points_to_distribute > 0 then + if rpg_t[player.index].points_left > 0 then player.gui.top[draw_main_frame_name].style.font_color = {245, 0, 0} else player.gui.top[draw_main_frame_name].style.font_color = {175, 175, 175} @@ -119,7 +119,7 @@ local function add_gui_increase_stat(element, name, player) local rpg_t = RPG.get('rpg_t') local sprite = 'virtual-signal/signal-red' local symbol = '✚' - if rpg_t[player.index].points_to_distribute <= 0 then + if rpg_t[player.index].points_left <= 0 then sprite = 'virtual-signal/signal-black' end local e = element.add({type = 'sprite-button', name = name, caption = symbol, sprite = sprite}) @@ -275,7 +275,7 @@ local function draw_main_frame(player, location) add_gui_increase_stat(left_bottom_table, 'vitality', player) add_gui_description(left_bottom_table, ({'rpg_gui.points_to_dist'}), w1) - add_gui_stat(left_bottom_table, rpg_t[player.index].points_to_distribute, w2, nil, nil, {200, 0, 0}) + add_gui_stat(left_bottom_table, rpg_t[player.index].points_left, w2, nil, nil, {200, 0, 0}) add_gui_description(left_bottom_table, ' ', w2) add_gui_description(left_bottom_table, ' ', 40) @@ -476,20 +476,19 @@ end function Public.update_player_stats(player) local rpg_extra = RPG.get('rpg_extra') local rpg_t = RPG.get('rpg_t') - local player_modifiers = P.get_table() local strength = rpg_t[player.index].strength - 10 - player_modifiers[player.index].character_inventory_slots_bonus['rpg'] = math.round(strength * 0.2, 3) - player_modifiers[player.index].character_mining_speed_modifier['rpg'] = math.round(strength * 0.007, 3) - player_modifiers[player.index].character_maximum_following_robot_count_bonus['rpg'] = math.round(strength / 2 * 0.03, 3) + P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', math.round(strength * 0.2, 3)) + P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', math.round(strength * 0.007, 3)) + P.update_single_modifier(player, 'character_maximum_following_robot_count_bonus', 'rpg', math.round(strength / 2 * 0.03, 3)) local magic = rpg_t[player.index].magicka - 10 local v = magic * 0.22 - player_modifiers[player.index].character_build_distance_bonus['rpg'] = math.min(60, math.round(v * 0.25, 3)) - player_modifiers[player.index].character_item_drop_distance_bonus['rpg'] = math.min(60, math.round(v * 0.25, 3)) - player_modifiers[player.index].character_reach_distance_bonus['rpg'] = math.min(60, math.round(v * 0.25, 3)) - player_modifiers[player.index].character_loot_pickup_distance_bonus['rpg'] = math.min(20, math.round(v * 0.22, 3)) - player_modifiers[player.index].character_item_pickup_distance_bonus['rpg'] = math.min(20, math.round(v * 0.25, 3)) - player_modifiers[player.index].character_resource_reach_distance_bonus['rpg'] = math.min(20, math.round(v * 0.15, 3)) + P.update_single_modifier(player, 'character_build_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3))) + P.update_single_modifier(player, 'character_item_drop_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3))) + P.update_single_modifier(player, 'character_reach_distance_bonus', 'rpg', math.min(60, math.round(v * 0.25, 3))) + P.update_single_modifier(player, 'character_loot_pickup_distance_bonus', 'rpg', math.min(20, math.round(v * 0.22, 3))) + P.update_single_modifier(player, 'character_item_pickup_distance_bonus', 'rpg', math.min(20, math.round(v * 0.25, 3))) + P.update_single_modifier(player, 'character_resource_reach_distance_bonus', 'rpg', math.min(20, math.round(v * 0.15, 3))) if rpg_t[player.index].mana_max >= rpg_extra.mana_limit then rpg_t[player.index].mana_max = rpg_extra.mana_limit else @@ -497,11 +496,9 @@ function Public.update_player_stats(player) end local dexterity = rpg_t[player.index].dexterity - 10 - player_modifiers[player.index].character_running_speed_modifier['rpg'] = math.round(dexterity * 0.0015, 3) - player_modifiers[player.index].character_crafting_speed_modifier['rpg'] = math.round(dexterity * 0.015, 3) - - player_modifiers[player.index].character_health_bonus['rpg'] = math.round((rpg_t[player.index].vitality - 10) * 6, 3) - + P.update_single_modifier(player, 'character_running_speed_modifier', 'rpg', math.round(dexterity * 0.0015, 3)) + P.update_single_modifier(player, 'character_crafting_speed_modifier', 'rpg', math.round(dexterity * 0.015, 3)) + P.update_single_modifier(player, 'character_health_bonus', 'rpg', math.round((rpg_t[player.index].vitality - 10) * 6, 3)) P.update_player_modifiers(player) end @@ -559,7 +556,6 @@ Gui.on_click( local screen = player.gui.screen local frame = screen[settings_frame_name] - local player_modifiers = P.get_table() local data = Gui.get_data(event.element) local health_bar_gui_input = data.health_bar_gui_input local reset_gui_input = data.reset_gui_input @@ -624,39 +620,31 @@ Gui.on_click( end if movement_speed_gui_input and movement_speed_gui_input.valid then - if not player_modifiers.disabled_modifier[player.index] then - player_modifiers.disabled_modifier[player.index] = {} - end if not movement_speed_gui_input.state then - player_modifiers.disabled_modifier[player.index].character_running_speed_modifier = true + P.disable_single_modifier(player, 'character_running_speed_modifier', true) P.update_player_modifiers(player) elseif movement_speed_gui_input.state then - player_modifiers.disabled_modifier[player.index].character_running_speed_modifier = false + P.disable_single_modifier(player, 'character_running_speed_modifier', false) P.update_player_modifiers(player) end end if magic_pickup_gui_input and magic_pickup_gui_input.valid then - if not player_modifiers.disabled_modifier[player.index] then - player_modifiers.disabled_modifier[player.index] = {} - end if not magic_pickup_gui_input.state then - player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = true - player_modifiers.disabled_modifier[player.index].character_build_distance_bonus = true - player_modifiers.disabled_modifier[player.index].character_item_drop_distance_bonus = true - player_modifiers.disabled_modifier[player.index].character_reach_distance_bonus = true - player_modifiers.disabled_modifier[player.index].character_loot_pickup_distance_bonus = true - player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = true - player_modifiers.disabled_modifier[player.index].character_resource_reach_distance_bonus = true + P.disable_single_modifier(player, 'character_item_pickup_distance_bonus', true) + P.disable_single_modifier(player, 'character_build_distance_bonus', true) + P.disable_single_modifier(player, 'character_item_drop_distance_bonus', true) + P.disable_single_modifier(player, 'character_reach_distance_bonus', true) + P.disable_single_modifier(player, 'character_loot_pickup_distance_bonus', true) + P.disable_single_modifier(player, 'character_resource_reach_distance_bonus', true) P.update_player_modifiers(player) elseif magic_pickup_gui_input.state then - player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = false - player_modifiers.disabled_modifier[player.index].character_build_distance_bonus = false - player_modifiers.disabled_modifier[player.index].character_item_drop_distance_bonus = false - player_modifiers.disabled_modifier[player.index].character_reach_distance_bonus = false - player_modifiers.disabled_modifier[player.index].character_loot_pickup_distance_bonus = false - player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus = false - player_modifiers.disabled_modifier[player.index].character_resource_reach_distance_bonus = false + P.disable_single_modifier(player, 'character_item_pickup_distance_bonus', false) + P.disable_single_modifier(player, 'character_build_distance_bonus', false) + P.disable_single_modifier(player, 'character_item_drop_distance_bonus', false) + P.disable_single_modifier(player, 'character_reach_distance_bonus', false) + P.disable_single_modifier(player, 'character_loot_pickup_distance_bonus', false) + P.disable_single_modifier(player, 'character_resource_reach_distance_bonus', false) P.update_player_modifiers(player) end end diff --git a/modules/rpg/main.lua b/modules/rpg/main.lua index 09baa9a3..e02e0813 100644 --- a/modules/rpg/main.lua +++ b/modules/rpg/main.lua @@ -78,11 +78,11 @@ local function on_gui_click(event) end if shift then - local count = rpg_t.points_to_distribute + local count = rpg_t.points_left if not count then return end - rpg_t.points_to_distribute = 0 + rpg_t.points_left = 0 rpg_t[index] = rpg_t[index] + count if not rpg_t.reset then rpg_t.total = rpg_t.total + count @@ -91,11 +91,11 @@ local function on_gui_click(event) RPG_GUI.update_player_stats(player) elseif event.button == defines.mouse_button_type.right then for _ = 1, points_per_level, 1 do - if rpg_t.points_to_distribute <= 0 then + if rpg_t.points_left <= 0 then RPG_GUI.toggle(player, true) return end - rpg_t.points_to_distribute = rpg_t.points_to_distribute - 1 + rpg_t.points_left = rpg_t.points_left - 1 rpg_t[index] = rpg_t[index] + 1 if not rpg_t.reset then rpg_t.total = rpg_t.total + 1 @@ -106,11 +106,11 @@ local function on_gui_click(event) return end - if rpg_t.points_to_distribute <= 0 then + if rpg_t.points_left <= 0 then RPG_GUI.toggle(player, true) return end - rpg_t.points_to_distribute = rpg_t.points_to_distribute - 1 + rpg_t.points_left = rpg_t.points_left - 1 rpg_t[index] = rpg_t[index] + 1 if not rpg_t.reset then rpg_t.total = rpg_t.total + 1 diff --git a/modules/rpg/settings.lua b/modules/rpg/settings.lua index dea87b3f..89c6a79e 100644 --- a/modules/rpg/settings.lua +++ b/modules/rpg/settings.lua @@ -129,7 +129,6 @@ function Public.spell_gui_settings(player) end function Public.extra_settings(player) - local player_modifiers = P.get_table() local rpg_extra = RPG.get('rpg_extra') local rpg_t = RPG.get('rpg_t') local trusted = Session.get_trusted_table() @@ -263,8 +262,9 @@ function Public.extra_settings(player) magic_pickup_input_style.height = 35 magic_pickup_input_style.vertical_align = 'center' local reach_mod - if player_modifiers.disabled_modifier[player.index] and player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus then - reach_mod = not player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus + local character_item_pickup_distance_bonus = P.get_single_disabled_modifier(player, 'character_item_pickup_distance_bonus') + if character_item_pickup_distance_bonus then + reach_mod = false else reach_mod = true end @@ -290,8 +290,9 @@ function Public.extra_settings(player) movement_speed_input_style.height = 35 movement_speed_input_style.vertical_align = 'center' local speed_mod - if player_modifiers.disabled_modifier[player.index] and player_modifiers.disabled_modifier[player.index].character_running_speed_modifier then - speed_mod = not player_modifiers.disabled_modifier[player.index].character_running_speed_modifier + local character_running_speed_modifier = P.get_single_disabled_modifier(player, 'character_running_speed_modifier') + if character_running_speed_modifier then + speed_mod = false else speed_mod = true end diff --git a/modules/show_inventory.lua b/modules/show_inventory.lua index 6614e8f9..b7d39e17 100644 --- a/modules/show_inventory.lua +++ b/modules/show_inventory.lua @@ -311,6 +311,9 @@ end local function on_gui_click(event) local player = game.players[event.player_index] + if not this.data[player.index] then + return + end local element = event.element @@ -371,6 +374,9 @@ local function on_gui_click(event) end local function gui_closed(event) local player = game.players[event.player_index] + if not this.data[player.index] then + return + end local type = event.gui_type @@ -385,6 +391,10 @@ end local function on_pre_player_left_game(event) local player = game.players[event.player_index] + if not this.data[player.index] then + return + end + close_player_inventory(player) end @@ -394,6 +404,10 @@ local function update_gui(event) return end + if not this.data[player.index] then + return + end + local sourcePlayer = watching_inventory(player) local success, tab = last_tab(player) diff --git a/modules/thirst.lua b/modules/thirst.lua index 92002647..ad979493 100644 --- a/modules/thirst.lua +++ b/modules/thirst.lua @@ -14,10 +14,9 @@ local function update_player_modifiers(player) end local m = ((global.hydration[player.index] - 100) * 0.01) + 0.2 - local modifiers = Player_modifiers.get_table() - modifiers[player.index].character_mining_speed_modifier['thirst'] = m - modifiers[player.index].character_running_speed_modifier['thirst'] = m - modifiers[player.index].character_crafting_speed_modifier['thirst'] = m + Player_modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'thirst', m) + Player_modifiers.update_single_modifier(player, 'character_running_speed_modifier', 'thirst', m) + Player_modifiers.update_single_modifier(player, 'character_crafting_speed_modifier', 'thirst', m) Player_modifiers.update_player_modifiers(player) end diff --git a/modules/wave_defense/main.lua b/modules/wave_defense/main.lua index 3ea63e8d..4eff145c 100644 --- a/modules/wave_defense/main.lua +++ b/modules/wave_defense/main.lua @@ -369,7 +369,7 @@ local function set_enemy_evolution() local threat = WD.get('threat') local evolution_factor = wave_number * 0.001 local biter_h_boost = 1 - --local damage_increase = 0 + local enemy = game.forces.enemy if evolution_factor > 1 then evolution_factor = 1 @@ -383,12 +383,13 @@ local function set_enemy_evolution() if biter_h_boost <= 1 then biter_h_boost = 1 end - --damage_increase = math_round(damage_increase + threat * 0.0000025, 3) BiterHealthBooster.set('biter_health_boost', biter_h_boost) - --game.forces.enemy.set_ammo_damage_modifier("melee", damage_increase) - --game.forces.enemy.set_ammo_damage_modifier("biological", damage_increase) - game.forces.enemy.evolution_factor = evolution_factor + if enemy.evolution_factor == 1 and evolution_factor == 1 then + return + end + + enemy.evolution_factor = evolution_factor end local function can_units_spawn() diff --git a/player_modifiers.lua b/player_modifiers.lua index 66901e4a..b5602f24 100644 --- a/player_modifiers.lua +++ b/player_modifiers.lua @@ -4,6 +4,7 @@ local Global = require 'utils.global' local this = { + modifiers = {}, disabled_modifier = {} } @@ -21,28 +22,28 @@ function Public.get_table() end local modifiers = { - 'character_build_distance_bonus', - 'character_crafting_speed_modifier', - 'character_health_bonus', - 'character_inventory_slots_bonus', - 'character_item_drop_distance_bonus', - 'character_item_pickup_distance_bonus', - 'character_loot_pickup_distance_bonus', - 'character_mining_speed_modifier', - 'character_reach_distance_bonus', - 'character_resource_reach_distance_bonus', - 'character_maximum_following_robot_count_bonus', - 'character_running_speed_modifier' + [1] = 'character_build_distance_bonus', + [2] = 'character_crafting_speed_modifier', + [3] = 'character_health_bonus', + [4] = 'character_inventory_slots_bonus', + [5] = 'character_item_drop_distance_bonus', + [6] = 'character_item_pickup_distance_bonus', + [7] = 'character_loot_pickup_distance_bonus', + [8] = 'character_mining_speed_modifier', + [9] = 'character_reach_distance_bonus', + [10] = 'character_resource_reach_distance_bonus', + [11] = 'character_maximum_following_robot_count_bonus', + [12] = 'character_running_speed_modifier' } function Public.update_player_modifiers(player) - for _, modifier in pairs(modifiers) do + for k, modifier in pairs(modifiers) do local sum_value = 0 - for _, value in pairs(this[player.index][modifier]) do + for _, value in pairs(this.modifiers[player.index][k]) do sum_value = sum_value + value end if player.character then - if this.disabled_modifier[player.index] and this.disabled_modifier[player.index][modifier] then + if this.disabled_modifier[player.index] and this.disabled_modifier[player.index][k] then player[modifier] = 0 else player[modifier] = sum_value @@ -51,14 +52,99 @@ function Public.update_player_modifiers(player) end end +function Public.update_single_modifier(player, modifier, category, value) + if not this.modifiers[player.index] then + return + end + if not modifier then + return + end + for k, _ in pairs(this.modifiers[player.index]) do + if modifiers[k] == modifier and this.modifiers[player.index][k] then + if category then + if not this.modifiers[player.index][k][category] then + this.modifiers[player.index][k][category] = {} + end + this.modifiers[player.index][k][category] = value + else + this.modifiers[player.index][k] = value + end + end + end +end + +function Public.disable_single_modifier(player, modifier, value) + if not this.disabled_modifier[player.index] then + return + end + if not modifier then + return + end + for k, _ in pairs(modifiers) do + if modifiers[k] == modifier then + if value then + this.disabled_modifier[player.index][k] = value + else + this.disabled_modifier[player.index][k] = nil + end + end + end +end + +function Public.get_single_modifier(player, modifier, category) + if not this.modifiers[player.index] then + return + end + if not modifier then + return + end + for k, _ in pairs(this.modifiers[player.index]) do + if modifiers[k] == modifier then + if category then + if this.modifiers[player.index][k] and this.modifiers[player.index][k][category] then + return this.modifiers[player.index][k][category] + end + else + if this.modifiers[player.index][k] then + return this.modifiers[player.index][k] + end + end + return false + end + end + return false +end + +function Public.get_single_disabled_modifier(player, modifier, category) + if not this.disabled_modifier[player.index] then + return + end + if not modifier then + return + end + for k, _ in pairs(this.disabled_modifier[player.index]) do + if modifiers[k] == modifier then + if category then + if this.disabled_modifier[player.index][k] and this.disabled_modifier[player.index][k][category] then + return this.disabled_modifier[player.index][k][category] + end + else + if this.disabled_modifier[player.index][k] then + return this.disabled_modifier[player.index][k] + end + end + return false + end + end + return false +end + function Public.reset_player_modifiers(player) if player and player.valid then - this[player.index] = {} - if this.disabled_modifier[player.index] then - this.disabled_modifier[player.index] = {} - end - for _, modifier in pairs(modifiers) do - this[player.index][modifier] = {} + this.modifiers[player.index] = {} + this.disabled_modifier[player.index] = {} + for k, _ in pairs(modifiers) do + this.modifiers[player.index][k] = {} end Public.update_player_modifiers(player) end @@ -66,7 +152,7 @@ end local function on_player_joined_game(event) local player = game.get_player(event.player_index) - if this[player.index] then + if this.modifiers[player.index] then Public.update_player_modifiers(player) return end diff --git a/terrain_layouts/caves.lua b/terrain_layouts/caves.lua index 4121875c..3e9bff25 100644 --- a/terrain_layouts/caves.lua +++ b/terrain_layouts/caves.lua @@ -117,8 +117,7 @@ end local function on_player_joined_game(event) local player = game.players[event.player_index] - local modifiers = Player_modifiers.get_table() - modifiers[player.index].character_mining_speed_modifier['caves'] = 3 + Player_modifiers.update_single_modifier(player, 'character_mining_speed_modifier', 'caves', 3) Player_modifiers.update_player_modifiers(player) end diff --git a/utils/gui.lua b/utils/gui.lua index 09cdda1f..4c6b7435 100644 --- a/utils/gui.lua +++ b/utils/gui.lua @@ -10,13 +10,15 @@ local Gui = {} local data = {} local element_map = {} +local settings = {} Gui.token = Global.register( - {data = data, element_map = element_map}, + {data = data, element_map = element_map, settings = settings}, function(tbl) data = tbl.data element_map = tbl.element_map + settings = tbl.settings end ) @@ -115,13 +117,16 @@ function Gui.clear(element) element.clear() end ---[[ - local function clear_invalid_data() - for _, player in pairs(game.connected_players) do +local function clear_invalid_data() + if settings.disable_clear_invalid_data then + return + end + + for _, player in pairs(game.players) do local player_index = player.index local values = data[player_index] if values then - for _, element in next, values do + for k, element in next, values do if type(element) == 'table' then for key, obj in next, element do if type(obj) == 'table' and obj.valid ~= nil then @@ -130,13 +135,15 @@ end end end end + if type(element) == 'userdata' and not element.valid then + values[k] = nil + end end end end end end Event.on_nth_tick(300, clear_invalid_data) -]] local function handler_factory(event_id) local handlers @@ -195,6 +202,16 @@ local function custom_raise(handlers, element, player) handler({element = element, player = player}) end +-- Disabled the handler so it does not clean then data table of invalid data. +function Gui.set_disable_clear_invalid_data(value) + settings.disable_clear_invalid_data = value or false +end + +-- Gets state if the cleaner handler is active or false +function Gui.get_disable_clear_invalid_data() + return settings.disable_clear_invalid_data +end + -- Register a handler for the on_gui_checked_state_changed event for LuaGuiElements with element_name. -- Can only have one handler per element name. -- Guarantees that the element and the player are valid when calling the handler.