diff --git a/maps/mountain_fortress_v3/functions.lua b/maps/mountain_fortress_v3/functions.lua index 08942a3b..091afa77 100644 --- a/maps/mountain_fortress_v3/functions.lua +++ b/maps/mountain_fortress_v3/functions.lua @@ -903,6 +903,8 @@ function Public.set_difficulty() amount = difficulty.highest -- lowered from 20 to 10 end + local wave = WD.get('wave_number') + local threat_check = nil if check_if_threat_below_zero then @@ -910,26 +912,27 @@ function Public.set_difficulty() end if Diff.index == 1 then - if player_count < 10 then + if wave < 1000 then wave_defense_table.wave_interval = 4500 else wave_defense_table.wave_interval = 3600 - player_count * 60 end - if wave_defense_table.wave_interval < 2200 or threat_check then - wave_defense_table.wave_interval = 2200 + + if wave_defense_table.wave_interval < 2000 or threat_check then + wave_defense_table.wave_interval = 2000 end elseif Diff.index == 2 then - if player_count < 10 then + if wave < 1000 then wave_defense_table.wave_interval = 3000 else wave_defense_table.wave_interval = 2600 - player_count * 60 end - if wave_defense_table.wave_interval < 1900 or threat_check then - wave_defense_table.wave_interval = 1900 + if wave_defense_table.wave_interval < 1800 or threat_check then + wave_defense_table.wave_interval = 1800 end elseif Diff.index == 3 then - if player_count < 10 then - wave_defense_table.wave_interval = 2000 + if wave < 1000 then + wave_defense_table.wave_interval = 3000 else wave_defense_table.wave_interval = 1600 - player_count * 60 end diff --git a/maps/mountain_fortress_v3/main.lua b/maps/mountain_fortress_v3/main.lua index 2c5e5221..c8d4a55d 100644 --- a/maps/mountain_fortress_v3/main.lua +++ b/maps/mountain_fortress_v3/main.lua @@ -273,6 +273,7 @@ function Public.reset_map() end game.forces.player.set_spawn_position({-27, 25}, surface) + game.speed = 1 Task.set_queue_speed(16) diff --git a/maps/mountain_fortress_v3/terrain.lua b/maps/mountain_fortress_v3/terrain.lua index 27624651..f7d7dc10 100644 --- a/maps/mountain_fortress_v3/terrain.lua +++ b/maps/mountain_fortress_v3/terrain.lua @@ -158,12 +158,15 @@ local function is_position_near(area, table_to_check) end local function place_wagon(data, adjusted_zones) + local x_min = (-zone_settings.zone_width / 2) + 10 + local x_max = (zone_settings.zone_width / 2) - 10 - local x_min = -zone_settings.zone_width / 2 - local x_max = zone_settings.zone_width / 2 - - if data.x < x_min then return end - if data.x > x_max then return end + if data.x < x_min then + return + end + if data.x > x_max then + return + end local placed_trains_in_zone = Public.get('placed_trains_in_zone') if not placed_trains_in_zone.randomized then diff --git a/modules/fjei/functions.lua b/modules/fjei/functions.lua index e5c03adc..535b3c4d 100644 --- a/modules/fjei/functions.lua +++ b/modules/fjei/functions.lua @@ -183,6 +183,20 @@ local function add_recipe_to_whitelist(item_whitelist, recipe) for key, ingredient in pairs(recipe.ingredients) do item_whitelist[ingredient.name] = true end + + --Adding "place_result" in case the inventory item can turn into a differently named entity after placement on the map. + for key, product in pairs(recipe.products) do + local p = game.item_prototypes[product.name] + if p and p.place_result then + item_whitelist[p.place_result.name] = true + end + end + for key, ingredient in pairs(recipe.ingredients) do + local p = game.item_prototypes[ingredient.name] + if p and p.place_result then + item_whitelist[p.place_result.name] = true + end + end end function Public.add_research_to_whitelist(force, effects) diff --git a/modules/fjei/gui.lua b/modules/fjei/gui.lua index a6cfc96f..4b407a7a 100644 --- a/modules/fjei/gui.lua +++ b/modules/fjei/gui.lua @@ -726,6 +726,7 @@ function Public.draw_top_toggle_button(player) button_flow.style.maximal_height = 38 button_flow.style.minimal_width = 40 button_flow.style.padding = -2 + button_flow.style.font_color = {222, 222, 222} end function Public.open_recipe(element, player, button) diff --git a/modules/fjei/main.lua b/modules/fjei/main.lua index 5351f354..f61163c9 100644 --- a/modules/fjei/main.lua +++ b/modules/fjei/main.lua @@ -138,6 +138,10 @@ local function on_string_translated(event) end localised_string = localised_string[1] + if not localised_string then + return + end + localised_string = string.match(localised_string, '[^.]*$') Functions.set_translated_data(player, result, localised_string) diff --git a/modules/rpg/spells.lua b/modules/rpg/spells.lua index 2d33a216..ae0ebed4 100644 --- a/modules/rpg/spells.lua +++ b/modules/rpg/spells.lua @@ -606,6 +606,30 @@ spells[#spells + 1] = { return create_projectiles(data) end } +if _DEBUG then + spells[#spells + 1] = { + name = 'Kewl Nade', + entityName = 'cluster-grenade', + target = true, + amount = 20, + damage = true, + aoe = true, + force = 'player', + level = 1, + type = 'item', + mana_cost = -1, + cooldown = 0, + enabled = true, + log_spell = false, + sprite = 'recipe/cluster-grenade', + tooltip = 'Spawns a cluster nade where the mouse cursor is at', + callback = function(data) + local player = data.player + player.insert({name = 'raw-fish'}) + return create_projectiles(data) + end + } +end spells[#spells + 1] = { name = {'item-name.cluster-grenade'}, entityName = 'cluster-grenade', diff --git a/modules/wave_defense/pause_waves.lua b/modules/wave_defense/pause_waves.lua index f1d6aceb..af34eb30 100644 --- a/modules/wave_defense/pause_waves.lua +++ b/modules/wave_defense/pause_waves.lua @@ -149,8 +149,9 @@ function Public.toggle_pause_wave_without_votes() end Public.set('pause_waves', {index = 0}) + local pause_wave_in_ticks = Public.get('pause_wave_in_ticks') pause_waves_state(true) - Task.set_timeout_in_ticks(18000, pause_waves_state_token, false) -- 5 minutes + Task.set_timeout_in_ticks(pause_wave_in_ticks, pause_waves_state_token, false) -- 5 minutes end Gui.on_click( diff --git a/modules/wave_defense/table.lua b/modules/wave_defense/table.lua index 6cb94704..eea6deb7 100644 --- a/modules/wave_defense/table.lua +++ b/modules/wave_defense/table.lua @@ -54,6 +54,7 @@ function Public.reset_wave_defense() this.log_wave_to_discord = true this.paused = false this.pause_without_votes = true + this.pause_wave_in_ticks = 18000 -- 5 minutes this.game_lost = false this.get_random_close_spawner_attempts = 5 this.group_size = 2 @@ -377,6 +378,12 @@ function Public.set_tick_to_spawn_unit_groups(int) this.tick_to_spawn_unit_groups = int or 200 end +--- Sets the pause length in ticks. +-- @param in ticks +function Public.set_pause_wave_in_ticks(int) + this.pause_wave_in_ticks = int or 18000 +end + --- Pauses the wave defense module -- @param null function Public.pause(boolean) diff --git a/utils/gui/config.lua b/utils/gui/config.lua index 8403a79c..0ae48490 100644 --- a/utils/gui/config.lua +++ b/utils/gui/config.lua @@ -200,7 +200,7 @@ local functions = { ['vacant_toggle'] = function(event) local vacant = is_loaded('modules.clear_vacant_players') if not vacant then - log("Error: toggle related to clear_vacant_players was activated, but the module does not seem to be loaded.") + log('Error: toggle related to clear_vacant_players was activated, but the module does not seem to be loaded.') return end @@ -844,11 +844,11 @@ local function on_gui_switch_state_changed(event) pirates_functions[event.element.name](event) return elseif is_loaded('utils.gui.poll') then - local is_spamming = SpamProtection.is_spamming(player, nil, 'Config Poll Elem') - if is_spamming then - return - end if poll_function[event.element.name] then + local is_spamming = SpamProtection.is_spamming(player, nil, 'Config Poll Elem') + if is_spamming then + return + end poll_function[event.element.name](event) return end diff --git a/utils/spam_protection.lua b/utils/spam_protection.lua index 6119388e..eb45c845 100644 --- a/utils/spam_protection.lua +++ b/utils/spam_protection.lua @@ -22,14 +22,14 @@ local function debug_text(str) if not this.debug_text then return end - print(main_text .. str) + log(main_text .. str) end local function debug_spam(str) if not this.debug_spam then return end - print(main_text .. str) + log(main_text .. str) end function Public.reset_spam_table() @@ -64,6 +64,10 @@ function Public.is_spamming(player, value_to_compare, text) return false -- game is paused - shoo end + if this.debug_spam then + log(serpent.block(debug.traceback())) + end + local tick = game.tick local value = value_to_compare or this.default_tick if this.prevent_spam[player.index] then @@ -105,6 +109,9 @@ Event.add( defines.events.on_player_joined_game, function(event) local player = game.get_player(event.player_index) + if not player then + return + end if not this.prevent_spam[player.index] then this.prevent_spam[player.index] = game.tick