diff --git a/comfy_panel/config.lua b/comfy_panel/config.lua index dab26b3c..d37d7cf3 100644 --- a/comfy_panel/config.lua +++ b/comfy_panel/config.lua @@ -5,7 +5,6 @@ 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' @@ -121,20 +120,6 @@ 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 @@ -386,22 +371,6 @@ 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' diff --git a/commands/misc.lua b/commands/misc.lua index 175c9a7c..aa623b24 100644 --- a/commands/misc.lua +++ b/commands/misc.lua @@ -7,9 +7,7 @@ local Global = require 'utils.global' local this = { players = {}, - activate_custom_buttons = false, - bottom_right = false, - bottom_quickbar_button = {} + activate_custom_buttons = false } Global.register( diff --git a/functions/loot_raffle.lua b/functions/loot_raffle.lua index 873d9ec8..bd3242d9 100644 --- a/functions/loot_raffle.lua +++ b/functions/loot_raffle.lua @@ -167,7 +167,7 @@ local item_worths = { ['explosive-cannon-shell'] = 16, ['uranium-cannon-shell'] = 64, ['explosive-uranium-cannon-shell'] = 64, - ['artillery-shell'] = 128, + ['artillery-shell'] = 512, ['rocket'] = 6, ['explosive-rocket'] = 8, ['atomic-bomb'] = 8192, @@ -203,7 +203,7 @@ local item_worths = { ['gun-turret'] = 64, ['laser-turret'] = 1024, ['flamethrower-turret'] = 2048, - ['artillery-turret'] = 1024, + ['artillery-turret'] = 9216, ['radar'] = 32, ['rocket-silo'] = 65536 } diff --git a/locale/en/mtn_fortress_v3.cfg b/locale/en/mtn_fortress_v3.cfg index 251c640c..567c61e6 100644 --- a/locale/en/mtn_fortress_v3.cfg +++ b/locale/en/mtn_fortress_v3.cfg @@ -73,6 +73,8 @@ change_returned=Shopkeeper has returned your change, for which you are infinitel notify_full_inventory_1=Your inventory is full. Try to stash your loot somewhere first. notify_full_inventory_2=Your inventory is full. Join the warrior club today! Pump that STR stat some more! new_items_at_market=New items have been unlocked at the locomotive market! +discharge_unlocked=Discharge defense has now been unlocked at the market! +artillery_unlocked=Artillery has now been unlocked at the market! [main_market] diff --git a/maps/mountain_fortress_v3/basic_markets.lua b/maps/mountain_fortress_v3/basic_markets.lua index a58605ae..5bfd8371 100644 --- a/maps/mountain_fortress_v3/basic_markets.lua +++ b/maps/mountain_fortress_v3/basic_markets.lua @@ -36,7 +36,7 @@ market.ammo = { ['explosive-cannon-shell'] = {value = 12, rarity = 5}, ['uranium-cannon-shell'] = {value = 16, rarity = 7}, ['explosive-uranium-cannon-shell'] = {value = 20, rarity = 8}, - ['artillery-shell'] = {value = 64, rarity = 7}, + ['artillery-shell'] = {value = 1024, rarity = 7}, ['rocket'] = {value = 45, rarity = 7}, ['explosive-rocket'] = {value = 50, rarity = 7}, ['atomic-bomb'] = {value = 11000, rarity = 10}, @@ -52,8 +52,8 @@ market.caspules = { ['defender-capsule'] = {value = 18, rarity = 1}, ['distractor-capsule'] = {value = 68, rarity = 5}, ['destroyer-capsule'] = {value = 74, rarity = 7}, - ['discharge-defense-remote'] = {value = 2000, rarity = 8}, - ['artillery-targeting-remote'] = {value = 32, rarity = 7}, + ['discharge-defense-remote'] = {value = 9216, rarity = 8}, + ['artillery-targeting-remote'] = {value = 1024, rarity = 7}, ['raw-fish'] = {value = 6, rarity = 1} } @@ -73,7 +73,7 @@ market.equipment = { ['battery-equipment'] = {value = 160, rarity = 2}, ['battery-mk2-equipment'] = {value = 2000, rarity = 8}, ['personal-laser-defense-equipment'] = {value = 2500, rarity = 7}, - ['discharge-defense-equipment'] = {value = 8000, rarity = 7}, + ['discharge-defense-equipment'] = {value = 15000, rarity = 7}, ['belt-immunity-equipment'] = {value = 200, rarity = 1}, ['exoskeleton-equipment'] = {value = 800, rarity = 3}, ['personal-roboport-equipment'] = {value = 500, rarity = 3}, @@ -88,7 +88,7 @@ market.defense = { ['gun-turret'] = {value = 64, rarity = 1}, ['laser-turret'] = {value = 1024, rarity = 6}, ['flamethrower-turret'] = {value = 2048, rarity = 6}, - ['artillery-turret'] = {value = 8192, rarity = 8}, + ['artillery-turret'] = {value = 9216, rarity = 8}, ['rocket-silo'] = {value = 64000, rarity = 10} } @@ -141,7 +141,7 @@ market.vehicles = { ['locomotive'] = {value = 400, rarity = 4}, ['cargo-wagon'] = {value = 200, rarity = 4}, ['fluid-wagon'] = {value = 300, rarity = 5}, - ['artillery-wagon'] = {value = 8192, rarity = 8}, + ['artillery-wagon'] = {value = 9216, rarity = 8}, ['car'] = {value = 80, rarity = 1}, ['tank'] = {value = 1800, rarity = 5} } diff --git a/maps/mountain_fortress_v3/biter_pets.lua b/maps/mountain_fortress_v3/biter_pets.lua deleted file mode 100644 index bde36d32..00000000 --- a/maps/mountain_fortress_v3/biter_pets.lua +++ /dev/null @@ -1,200 +0,0 @@ -local Event = require 'utils.event' -local WPT = require 'maps.mountain_fortress_v3.table' - -local nom_msg = {'munch', 'munch', 'yum'} - -local Public = {} -local random = math.random -local floor = math.floor - -local function feed_floaty_text(unit) - unit.surface.create_entity( - { - name = 'flying-text', - position = unit.position, - text = nom_msg[random(1, #nom_msg)], - color = {random(50, 100), 0, 255} - } - ) -end - -local function floaty_hearts(entity, c) - local position = {x = entity.position.x - 0.75, y = entity.position.y - 1} - local b = 1.35 - for _ = 1, c, 1 do - local p = { - (position.x + 0.4) + (b * -1 + random(0, b * 20) * 0.1), - position.y + (b * -1 + random(0, b * 20) * 0.1) - } - entity.surface.create_entity({name = 'flying-text', position = p, text = '♥', color = {random(150, 255), 0, 255}}) - end -end - -local function tame_unit_effects(player, entity) - floaty_hearts(entity, 7) - - rendering.draw_text { - text = '~' .. player.name .. "'s pet~", - surface = player.surface, - target = entity, - target_offset = {0, -2.6}, - color = { - r = player.color.r * 0.6 + 0.25, - g = player.color.g * 0.6 + 0.25, - b = player.color.b * 0.6 + 0.25, - a = 1 - }, - scale = 1.05, - font = 'default-large-semibold', - alignment = 'center', - scale_with_zoom = false - } -end - -local function find_unit(player, entity) - local units = - player.surface.find_entities_filtered( - { - type = 'unit', - area = {{entity.position.x - 1, entity.position.y - 1}, {entity.position.x + 1, entity.position.y + 1}}, - limit = 1 - } - ) - return units[1] -end - -local function feed_pet(unit) - if unit.prototype.max_health == unit.health then - return - end - unit.health = unit.health + 8 + floor(unit.prototype.max_health * 0.05) - feed_floaty_text(unit) - floaty_hearts(unit, random(1, 2)) - return true -end - -local function is_valid_player(player, unit) - if not player.character then - return - end - if not player.character.valid then - return - end - if player.surface.index ~= unit.surface.index then - return - end - return true -end - -function Public.biter_pets_tame_unit(player, unit, forced) - local biter_pets = WPT.get('biter_pets') - - if biter_pets[player.index] then - return false - end - - if not forced then - if random(1, floor(unit.prototype.max_health * 0.01) + 1) ~= 1 then - feed_floaty_text(unit) - return true - end - end - if unit.force.index == player.force.index then - return false - end - unit.ai_settings.allow_destroy_when_commands_fail = false - unit.ai_settings.allow_try_return_to_spawner = false - unit.force = player.force - unit.set_command({type = defines.command.wander, distraction = defines.distraction.by_enemy}) - biter_pets[player.index] = {last_command = 0, entity = unit} - tame_unit_effects(player, unit) - return true -end - -function Public.tame_unit_for_closest_player(unit) - local valid_players = {} - for _, player in pairs(game.connected_players) do - if is_valid_player(player, unit) then - table.insert(valid_players, player) - end - end - - local nearest_player = valid_players[1] - if not nearest_player then - return - end - - Public.biter_pets_tame_unit(nearest_player, unit, true) -end - -local function command_unit(entity, player) - if entity.surface ~= player.surface then - return - end - local square_distance = (player.position.x - entity.position.x) ^ 2 + (player.position.y - entity.position.y) ^ 2 - - --Pet will follow, if the player is between a distance of 8 to 160 tiles away from it. - if square_distance < 64 or square_distance > 25600 then - entity.set_command({type = defines.command.wander, distraction = defines.distraction.by_enemy}) - else - entity.set_command( - { - type = defines.command.go_to_location, - destination_entity = player.character, - radius = 4, - distraction = defines.distraction.by_damage - } - ) - end -end - -local function on_player_changed_position(event) - local biter_pets = WPT.get('biter_pets') - - if random(1, 100) ~= 1 then - return - end - local player = game.players[event.player_index] - if not biter_pets[player.index] then - return - end - if not biter_pets[player.index].entity then - biter_pets[player.index] = nil - return - end - if not biter_pets[player.index].entity.valid then - biter_pets[player.index] = nil - return - end - if not player.character then - return - end - if biter_pets[player.index].last_command + 600 > game.tick then - return - end - biter_pets[player.index].last_command = game.tick - command_unit(biter_pets[player.index].entity, player) -end - -local function on_player_dropped_item(event) - local player = game.players[event.player_index] - if event.entity.stack.name ~= 'raw-fish' then - return - end - local unit = find_unit(player, event.entity) - if not unit then - return - end - if Public.biter_pets_tame_unit(player, unit, false) then - event.entity.destroy() - return - end - if unit.force.index == player.force.index then - feed_pet(unit) - end -end - -Event.add(defines.events.on_player_dropped_item, on_player_dropped_item) -Event.add(defines.events.on_player_changed_position, on_player_changed_position) - -return Public diff --git a/maps/mountain_fortress_v3/breached_wall.lua b/maps/mountain_fortress_v3/breached_wall.lua index f60878d3..9e8cc45d 100644 --- a/maps/mountain_fortress_v3/breached_wall.lua +++ b/maps/mountain_fortress_v3/breached_wall.lua @@ -13,6 +13,7 @@ local raise_event = script.raise_event local floor = math.floor local abs = math.abs local random = math.random +local sub = string.sub local sqrt = math.sqrt local level_depth = WPT.level_depth @@ -147,13 +148,13 @@ local function distance(player) local p = player.position - local s = WPT.get('validate_spider') - if s[index] then - local e = s[index] + local validate_spider = WPT.get('validate_spider') + if validate_spider[index] then + local e = validate_spider[index] if not (e and e.valid) then - s[index] = nil + validate_spider[index] = nil end - compare_player_and_train(player, s[index]) + compare_player_and_train(player, validate_spider[index]) end compare_player_pos(player) @@ -170,13 +171,15 @@ local function distance(player) local max_times = location >= max if max_times then if breach_max_times then + local placed_trains_in_zone = WPT.get('placed_trains_in_zone') + local biters = WPT.get('biters') rpg_extra.breached_walls = rpg_extra.breached_walls + 1 rpg_extra.reward_new_players = bonus_xp_on_join * rpg_extra.breached_walls - WPT.set().breached_wall = breached_wall + 1 - WPT.set().placed_trains_in_zone.placed = 0 - WPT.set().biters.amount = 0 - WPT.set().placed_trains_in_zone.randomized = false - WPT.set().placed_trains_in_zone.positions = {} + WPT.set('breached_wall', breached_wall + 1) + placed_trains_in_zone.placed = 0 + biters.amount = 0 + placed_trains_in_zone.randomized = false + placed_trains_in_zone.positions = {} raise_event(Balance.events.breached_wall, {}) if WPT.get('breached_wall') == WPT.get('spidertron_unlocked_at_zone') then local main_market_items = WPT.get('main_market_items') @@ -223,9 +226,13 @@ end local function on_player_changed_position(event) local player = game.get_player(event.player_index) + local surface_name = player.surface.name local map_name = 'mountain_fortress_v3' + if random(1, 3) ~= 1 then + return + end - if string.sub(player.surface.name, 0, #map_name) ~= map_name then + if sub(surface_name, 0, #map_name) ~= map_name then return end diff --git a/maps/mountain_fortress_v3/buried_enemies.lua b/maps/mountain_fortress_v3/buried_enemies.lua index dac7d511..7b15e214 100644 --- a/maps/mountain_fortress_v3/buried_enemies.lua +++ b/maps/mountain_fortress_v3/buried_enemies.lua @@ -59,6 +59,37 @@ local function create_particles(data) end end +local function trigger_health() + local wave_number = WD.get('wave_number') + local d = Diff.get() + local m = 0.0015 + if d.difficulty_vote_index then + if not d.strength_modifier then + m = m * 1.05 + else + m = m * d.strength_modifier + end + end + + local boosted_health = 1.25 + + if wave_number <= 10 then + wave_number = 10 + end + + boosted_health = boosted_health * (wave_number * 0.02) + + local sum = boosted_health * 5 + + sum = sum + m + + if sum >= 100 then + sum = 100 + end + + return sum +end + local function spawn_biters(data) local surface = data.surface if not (surface and surface.valid) then @@ -66,9 +97,8 @@ local function spawn_biters(data) end local position = data.position local h = floor(abs(position.y)) - local wave_number = WD.get('wave_number') + local max_biters = WPT.get('biters') - local d = Diff.get() if max_biters.amount >= max_biters.limit then return @@ -81,35 +111,6 @@ local function spawn_biters(data) end end - local function trigger_health() - local m = 0.0015 - if d.difficulty_vote_index then - if not d.strength_modifier then - m = m * 1.05 - else - m = m * d.strength_modifier - end - end - - local boosted_health = 1.25 - - if wave_number <= 10 then - wave_number = 10 - end - - boosted_health = boosted_health * (wave_number * 0.02) - - local sum = boosted_health * 5 - - sum = sum + m - - if sum >= 100 then - sum = 100 - end - - return sum - end - BiterRolls.wave_defense_set_unit_raffle(h * 0.20) local unit @@ -123,7 +124,9 @@ local function spawn_biters(data) if random(1, 45) == 1 then local sum = trigger_health() - max_biters.amount = max_biters.amount + 1 + BiterHealthBooster.add_unit(unit, sum) + elseif random(1, 64) == 1 then + local sum = trigger_health() BiterHealthBooster.add_boss_unit(unit, sum, 0.38) end end @@ -141,8 +144,16 @@ local function spawn_worms(data) end local position = data.position BiterRolls.wave_defense_set_worm_raffle(sqrt(position.x ^ 2 + position.y ^ 2) * 0.20) - surface.create_entity({name = BiterRolls.wave_defense_roll_worm_name(), position = position}) + local unit = surface.create_entity({name = BiterRolls.wave_defense_roll_worm_name(), position = position}) max_biters.amount = max_biters.amount + 1 + + if random(1, 45) == 1 then + local sum = trigger_health() + BiterHealthBooster.add_unit(unit, sum) + elseif random(1, 64) == 1 then + local sum = trigger_health() + BiterHealthBooster.add_boss_unit(unit, sum, 0.38) + end end function Public.buried_biter(surface, position) diff --git a/maps/mountain_fortress_v3/entities.lua b/maps/mountain_fortress_v3/entities.lua index e7324865..d8f456a9 100644 --- a/maps/mountain_fortress_v3/entities.lua +++ b/maps/mountain_fortress_v3/entities.lua @@ -2,10 +2,8 @@ require 'modules.rocks_broken_paint_tiles' local Event = require 'utils.event' local Server = require 'utils.server' -local BiterRolls = require 'modules.wave_defense.biter_rolls' local BuriedEnemies = require 'maps.mountain_fortress_v3.buried_enemies' local Loot = require 'maps.mountain_fortress_v3.loot' -local Pets = require 'maps.mountain_fortress_v3.biter_pets' local RPG_Settings = require 'modules.rpg.table' local Functions = require 'modules.rpg.functions' local Callbacks = require 'maps.mountain_fortress_v3.functions' @@ -33,7 +31,6 @@ local Public = {} local random = math.random local floor = math.floor local abs = math.abs -local sqrt = math.sqrt local round = math.round -- Use these settings for live @@ -123,18 +120,6 @@ local reset_game = end ) -local function exists() - local carriages = WPT.get('carriages') - local t = {} - for i = 1, #carriages do - local e = carriages[i] - if (e and e.valid) then - t[e.unit_number] = true - end - end - return t -end - local function get_random_weighted(weighted_table, item_index, weight_index) local total_weight = 0 item_index = item_index or 1 @@ -330,11 +315,11 @@ local function protect_entities(event) return false end - local units = exists() + local carriages_numbers = WPT.get('carriages_numbers') if is_protected(entity) then if (event.cause and event.cause.valid) then if event.cause.force.index == 2 then - if units and units[entity.unit_number] then + if carriages_numbers and carriages_numbers[entity.unit_number] then set_train_final_health(dmg, false) return else @@ -344,7 +329,7 @@ local function protect_entities(event) end elseif not (event.cause and event.cause.valid) then if event.force and event.force.index == 2 then - if units and units[entity.unit_number] then + if carriages_numbers and carriages_numbers[entity.unit_number] then set_train_final_health(dmg, false) return else @@ -358,23 +343,6 @@ local function protect_entities(event) end end -local function hidden_biter_pet(player, entity) - if random(1, 1024) ~= 1 then - return - end - - local pos = entity.position - - BiterRolls.wave_defense_set_unit_raffle(sqrt(pos.x ^ 2 + pos.y ^ 2) * 0.25) - local unit - if random(1, 3) == 1 then - unit = entity.surface.create_entity({name = BiterRolls.wave_defense_roll_spitter_name(), position = pos}) - else - unit = entity.surface.create_entity({name = BiterRolls.wave_defense_roll_biter_name(), position = pos}) - end - Pets.biter_pets_tame_unit(game.players[player.index], unit, true) -end - local function hidden_treasure(player, entity) local rpg = RPG_Settings.get('rpg_t') local magic = rpg[player.index].magicka @@ -642,15 +610,6 @@ local mining_events = { 16, 'Treasure_Tier_7' }, - { - function(entity, index) - local player = game.get_player(index) - Public.unstuck_player(index) - hidden_biter_pet(player, entity) - end, - 256, - 'Pet' - }, { function(entity, index) if Locomotive.is_around_train(entity) then @@ -943,9 +902,9 @@ local function on_player_repaired_entity(event) return end local entity = event.entity - local units = exists() + local carriages_numbers = WPT.get('carriages_numbers') - if units[entity.unit_number] then + if carriages_numbers[entity.unit_number] then local player = game.players[event.player_index] local repair_speed = Functions.get_magicka(player) if repair_speed <= 0 then diff --git a/maps/mountain_fortress_v3/functions.lua b/maps/mountain_fortress_v3/functions.lua index 77f14a31..992b4a0f 100644 --- a/maps/mountain_fortress_v3/functions.lua +++ b/maps/mountain_fortress_v3/functions.lua @@ -10,7 +10,7 @@ local Collapse = require 'modules.collapse' local Difficulty = require 'modules.difficulty_vote_by_amount' local ICW_Func = require 'maps.mountain_fortress_v3.icw.functions' local math2d = require 'math2d' -local BottomFrame = require 'comfy_panel.bottom_frame' +local Misc = require 'commands.misc' local this = { power_sources = {index = 1}, @@ -710,6 +710,7 @@ function Public.remove_offline_players() offline_players[i] = nil break end + local pos = game.forces.player.get_spawn_position(surface) local e = surface.create_entity( @@ -1179,7 +1180,7 @@ function Public.on_player_left_game() end function Public.is_creativity_mode_on() - local creative_enabled = BottomFrame.get('creative_enabled') + local creative_enabled = Misc.get('creative_enabled') if creative_enabled then WD.set('next_wave', 1000) Collapse.start_now(true) @@ -1188,9 +1189,9 @@ function Public.is_creativity_mode_on() end function Public.disable_creative() - local creative_enabled = BottomFrame.get('creative_enabled') + local creative_enabled = Misc.get('creative_enabled') if creative_enabled then - BottomFrame.set('creative_enabled', false) + Misc.set('creative_enabled', false) end end @@ -1248,9 +1249,9 @@ function Public.on_player_changed_position(event) local surface = game.surfaces[active_surface_index] local p = {x = player.position.x, y = player.position.y} - local get_tile = surface.get_tile(p) local config_tile = WPT.get('void_or_tile') if config_tile == 'lab-dark-2' then + local get_tile = surface.get_tile(p) if get_tile.valid and get_tile.name == 'lab-dark-2' then if random(1, 2) == 1 then if random(1, 2) == 1 then @@ -1292,6 +1293,8 @@ local disable_recipes = function(force) force.recipes['locomotive'].enabled = false force.recipes['pistol'].enabled = false force.recipes['spidertron-remote'].enabled = false + force.recipes['discharge-defense-equipment'].enabled = false + force.recipes['discharge-defense-remote'].enabled = false end function Public.disable_tech() @@ -1305,8 +1308,6 @@ function Public.disable_tech() force.technologies['artillery-shell-range-1'].researched = false force.technologies['artillery-shell-speed-1'].enabled = false force.technologies['artillery-shell-speed-1'].researched = false - force.technologies['artillery'].enabled = false - force.technologies['artillery'].researched = false force.technologies['optics'].researched = true force.technologies['railway'].researched = true force.technologies['land-mine'].enabled = false diff --git a/maps/mountain_fortress_v3/ic/main.lua b/maps/mountain_fortress_v3/ic/main.lua index 7fe06baa..463b52f3 100644 --- a/maps/mountain_fortress_v3/ic/main.lua +++ b/maps/mountain_fortress_v3/ic/main.lua @@ -86,7 +86,7 @@ end local function on_tick() local tick = game.tick - if tick % 10 == 1 then + if tick % 20 == 1 then Functions.item_transfer() end diff --git a/maps/mountain_fortress_v3/icw/functions.lua b/maps/mountain_fortress_v3/icw/functions.lua index 1acb190f..3808397f 100644 --- a/maps/mountain_fortress_v3/icw/functions.lua +++ b/maps/mountain_fortress_v3/icw/functions.lua @@ -471,6 +471,10 @@ function Public.kill_wagon(icw, entity) return end local wagon = icw.wagons[entity.unit_number] + if not wagon then + return + end + local surface = wagon.surface kick_players_from_surface(wagon) kick_players_out_of_vehicles(wagon) diff --git a/maps/mountain_fortress_v3/locomotive.lua b/maps/mountain_fortress_v3/locomotive.lua index 33c51843..37be09e6 100644 --- a/maps/mountain_fortress_v3/locomotive.lua +++ b/maps/mountain_fortress_v3/locomotive.lua @@ -1,5 +1,4 @@ local Event = require 'utils.event' ---local Power = require 'maps.mountain_fortress_v3.power' local Market = require 'maps.mountain_fortress_v3.basic_markets' local Generate = require 'maps.mountain_fortress_v3.generate' local ICW = require 'maps.mountain_fortress_v3.icw.main' @@ -456,6 +455,25 @@ local function refill_fish() locomotive_cargo.get_inventory(defines.inventory.cargo_wagon).insert({name = 'raw-fish', count = random(2, 5)}) end +local function set_carriages() + local locomotive = WPT.get('locomotive') + if not locomotive or not locomotive.valid then + return + end + + local carriages = locomotive.train.carriages + local t = {} + for i = 1, #carriages do + local e = carriages[i] + if (e and e.valid) then + t[e.unit_number] = true + end + end + + WPT.set('carriages_numbers', t) + WPT.set('carriages', locomotive.train.carriages) +end + local function set_locomotive_health() local locomotive_health = WPT.get('locomotive_health') local locomotive_max_health = WPT.get('locomotive_max_health') @@ -467,7 +485,6 @@ local function set_locomotive_health() WPT.set('locomotive_health', locomotive_max_health) end rendering.set_text(WPT.get('health_text'), 'HP: ' .. round(locomotive_health) .. ' / ' .. round(locomotive_max_health)) - WPT.set('carriages', locomotive.train.carriages) local carriages = WPT.get('carriages') if carriages then for i = 1, #carriages do @@ -1692,17 +1709,33 @@ local function place_market() end end -local function on_research_finished() - local market_announce = WPT.get('market_announce') - if market_announce > game.tick then +local function on_research_finished(event) + local research = event.research + if not research then return end + local name = research.name + + if name == 'discharge-defense-equipment' then + local message = ({'locomotive.discharge_unlocked'}) + Alert.alert_all_players(15, message, nil, 'achievement/tech-maniac', 0.1) + end + if name == 'artillery' then + local message = ({'locomotive.artillery_unlocked'}) + Alert.alert_all_players(15, message, nil, 'achievement/tech-maniac', 0.1) + end + local locomotive = WPT.get('locomotive') if not locomotive or not locomotive.valid then return end + local market_announce = WPT.get('market_announce') + if market_announce > game.tick then + return + end + local breached_wall = WPT.get('breached_wall') add_random_loot_to_main_market(breached_wall) local message = ({'locomotive.new_items_at_market'}) @@ -2227,6 +2260,45 @@ function Public.get_items() upgrade = false, static = false } + + if game.forces.player.technologies['discharge-defense-equipment'].researched then + main_market_items['discharge-defense-equipment'] = { + stack = 1, + value = 'coin', + price = 9216, + tooltip = ({'equipment-name.discharge-defense-equipment'}), + upgrade = false, + static = false + } + main_market_items['discharge-defense-remote'] = { + stack = 1, + value = 'coin', + price = 1024, + tooltip = ({'item-name.discharge-defense-remote'}), + upgrade = false, + static = false + } + end + + if game.forces.player.technologies['artillery'].researched then + main_market_items['artillery-turret'] = { + stack = 1, + value = 'coin', + price = 9216, + tooltip = ({'item-name.artillery-turret'}), + upgrade = false, + static = false + } + main_market_items['artillery-shell'] = { + stack = 1, + value = 'coin', + price = 1024, + tooltip = ({'item-name.artillery-shell'}), + upgrade = false, + static = false + } + end + main_market_items['wood'] = { stack = 50, value = 'coin', @@ -2477,5 +2549,6 @@ Event.add(defines.events.on_robot_mined_entity, on_player_and_robot_mined_entity Event.add(defines.events.on_console_chat, on_console_chat) Event.add(defines.events.on_player_changed_surface, on_player_changed_surface) Event.add(defines.events.on_player_driving_changed_state, on_player_driving_changed_state) +Event.add(defines.events.on_train_created, set_carriages) return Public diff --git a/maps/mountain_fortress_v3/main.lua b/maps/mountain_fortress_v3/main.lua index 3c4449e3..84e9bf1c 100644 --- a/maps/mountain_fortress_v3/main.lua +++ b/maps/mountain_fortress_v3/main.lua @@ -32,7 +32,6 @@ local Task = require 'utils.task' local Token = require 'utils.token' local Alert = require 'utils.alert' local AntiGrief = require 'antigrief' -local BottomFrame = require 'comfy_panel.bottom_frame' local Misc = require 'commands.misc' local Modifiers = require 'player_modifiers' local BiterHealthBooster = require 'modules.biter_health_booster_v2' @@ -132,11 +131,7 @@ function Public.reset_map() Autostash.insert_into_furnace(true) Autostash.insert_into_wagon(true) - Autostash.bottom_button(true) BuriedEnemies.reset() - BottomFrame.reset() - BottomFrame.activate_custom_buttons(true) - BottomFrame.bottom_right(true) Poll.reset() ICW.reset() @@ -152,7 +147,7 @@ function Public.reset_map() RPG_Settings.enable_wave_defense(true) RPG_Settings.enable_mana(true) RPG_Settings.enable_flame_boots(true) - RPG_Settings.personal_tax_rate(0.3) + RPG_Settings.personal_tax_rate(0.4) RPG_Settings.enable_stone_path(true) RPG_Settings.enable_one_punch(true) RPG_Settings.enable_one_punch_globally(false) @@ -179,6 +174,7 @@ function Public.reset_map() game.forces.player.set_spawn_position({-27, 25}, surface) game.forces.player.manual_mining_speed_modifier = 0 + game.forces.player.set_ammo_damage_modifier('artillery-shell', -0.95) BiterHealthBooster.set_active_surface(tostring(surface.name)) BiterHealthBooster.acid_nova(true) @@ -399,15 +395,10 @@ end local compare_collapse_and_train = function() local collapse_pos = Collapse.get_position() local locomotive = WPT.get('locomotive') - local carriages = WPT.get('carriages') if not (locomotive and locomotive.valid) then return end - if not carriages then - WPT.set().carriages = locomotive.train.carriages - end - local c_y = collapse_pos.y local t_y = locomotive.position.y diff --git a/maps/mountain_fortress_v3/table.lua b/maps/mountain_fortress_v3/table.lua index ccf4f16e..580257a4 100644 --- a/maps/mountain_fortress_v3/table.lua +++ b/maps/mountain_fortress_v3/table.lua @@ -90,7 +90,6 @@ function Public.reset_table() this.game_saved = false -- @end this.icw_locomotive = nil - this.debug = false this.game_lost = false this.fullness_enabled = true this.locomotive_health = 10000 @@ -103,7 +102,6 @@ function Public.reset_table() } this.force_chunk = false this.train_upgrades = 0 - this.biter_pets = {} this.flamethrower_damage = {} this.mined_scrap = 0 this.biters_killed = 0 diff --git a/maps/mountain_fortress_v3/terrain.lua b/maps/mountain_fortress_v3/terrain.lua index 071e7a43..de3c07fa 100644 --- a/maps/mountain_fortress_v3/terrain.lua +++ b/maps/mountain_fortress_v3/terrain.lua @@ -261,15 +261,15 @@ local function wall(data) local seed = data.seed local p = {x = x + data.top_x, y = y + data.top_y} - local small_caves = get_perlin('small_caves', p, seed + 300000) - local cave_ponds = get_perlin('cave_rivers', p, seed + 150000) + local small_caves = get_perlin('small_caves', p, seed + 204000) + local cave_ponds = get_perlin('cave_rivers', p, seed + 120400) if y > 9 + cave_ponds * 6 and y < 23 + small_caves * 6 then if small_caves > 0.02 or cave_ponds > 0.02 then if small_caves > 0.005 then tiles[#tiles + 1] = {name = 'water', position = p} else tiles[#tiles + 1] = {name = 'water-shallow', position = p} - if random(1, 32) == 1 then + if random(1, 26) == 1 then entities[#entities + 1] = { name = 'land-mine', position = p, @@ -285,7 +285,7 @@ local function wall(data) if random(1, 5) ~= 1 then entities[#entities + 1] = {name = rock_raffle[random(1, #rock_raffle)], position = p} - if random(1, 32) == 1 then + if random(1, 26) == 1 then entities[#entities + 1] = { name = 'land-mine', position = p, @@ -383,7 +383,7 @@ local function wall(data) spawn_turret(entities, p, 4) elseif random(1, 2) == 1 then spawn_turret(entities, p, 5) - elseif random(1, 8) == 1 then + elseif random(1, 12) == 1 then spawn_turret(entities, p, enable_arties) end end diff --git a/maps/mountain_fortress_v3/traps.lua b/maps/mountain_fortress_v3/traps.lua index 74ac3caf..7a21bd85 100644 --- a/maps/mountain_fortress_v3/traps.lua +++ b/maps/mountain_fortress_v3/traps.lua @@ -3,7 +3,7 @@ local WPT = require 'maps.mountain_fortress_v3.table' local random = math.random -local tick_tacks = {'*tick*', '*tick*', '*tack*', '*tak*', '*tik*', '*tok*', 'OOF'} +local tick_tacks = {'*tick*', '*tick*', '*tack*', '*tak*', '*tik*', '*tok*', '( ͡° ͜ʖ ͡°)'} local kaboom_weights = { {name = 'grenade', chance = 7}, diff --git a/modules/autostash.lua b/modules/autostash.lua index 15e3cb5e..6aab11bd 100644 --- a/modules/autostash.lua +++ b/modules/autostash.lua @@ -3,7 +3,6 @@ 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} @@ -12,7 +11,6 @@ local this = { whitelist = {}, insert_into_furnace = false, insert_into_wagon = false, - bottom_button = false, small_radius = 2 } @@ -539,38 +537,23 @@ 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 - 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 - data = data[player.index] - if data.frame and data.frame.valid then - data.frame.sprite = 'item/wooden-chest' - data.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 + 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 local function do_whitelist() @@ -613,13 +596,6 @@ 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) @@ -642,14 +618,6 @@ 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/rpg/main.lua b/modules/rpg/main.lua index 1308ca16..09baa9a3 100644 --- a/modules/rpg/main.lua +++ b/modules/rpg/main.lua @@ -67,10 +67,10 @@ local function on_gui_click(event) return end - local rpg_t = RPG.get('rpg_t') + local rpg_t = RPG.get_value_from_player(player.index) local index = element.name - if not rpg_t[player.index][index] then + if not rpg_t[index] then return end if not player.character then @@ -78,27 +78,27 @@ local function on_gui_click(event) end if shift then - local count = rpg_t[player.index].points_to_distribute + local count = rpg_t.points_to_distribute if not count then return end - rpg_t[player.index].points_to_distribute = 0 - rpg_t[player.index][index] = rpg_t[player.index][index] + count - if not rpg_t[player.index].reset then - rpg_t[player.index].total = rpg_t[player.index].total + count + rpg_t.points_to_distribute = 0 + rpg_t[index] = rpg_t[index] + count + if not rpg_t.reset then + rpg_t.total = rpg_t.total + count end RPG_GUI.toggle(player, true) 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[player.index].points_to_distribute <= 0 then + if rpg_t.points_to_distribute <= 0 then RPG_GUI.toggle(player, true) return end - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - 1 - rpg_t[player.index][index] = rpg_t[player.index][index] + 1 - if not rpg_t[player.index].reset then - rpg_t[player.index].total = rpg_t[player.index].total + 1 + rpg_t.points_to_distribute = rpg_t.points_to_distribute - 1 + rpg_t[index] = rpg_t[index] + 1 + if not rpg_t.reset then + rpg_t.total = rpg_t.total + 1 end RPG_GUI.update_player_stats(player) end @@ -106,14 +106,14 @@ local function on_gui_click(event) return end - if rpg_t[player.index].points_to_distribute <= 0 then + if rpg_t.points_to_distribute <= 0 then RPG_GUI.toggle(player, true) return end - rpg_t[player.index].points_to_distribute = rpg_t[player.index].points_to_distribute - 1 - rpg_t[player.index][index] = rpg_t[player.index][index] + 1 - if not rpg_t[player.index].reset then - rpg_t[player.index].total = rpg_t[player.index].total + 1 + rpg_t.points_to_distribute = rpg_t.points_to_distribute - 1 + rpg_t[index] = rpg_t[index] + 1 + if not rpg_t.reset then + rpg_t.total = rpg_t.total + 1 end RPG_GUI.update_player_stats(player) RPG_GUI.toggle(player, true) @@ -338,7 +338,7 @@ local function regen_mana_player(players) local player = players[i] local mana_per_tick = Functions.get_mana_modifier(player) local rpg_extra = RPG.get('rpg_extra') - local rpg_t = RPG.get('rpg_t') + local rpg_t = RPG.get_value_from_player(player.index) if mana_per_tick <= 0.1 then mana_per_tick = rpg_extra.mana_per_tick end @@ -349,17 +349,17 @@ local function regen_mana_player(players) if player and player.valid and not player.in_combat then if player.character and player.character.valid then - if rpg_t[player.index].mana < 0 then - rpg_t[player.index].mana = 0 + if rpg_t.mana < 0 then + rpg_t.mana = 0 end - if rpg_t[player.index].mana >= rpg_t[player.index].mana_max then + if rpg_t.mana >= rpg_t.mana_max then goto continue end - rpg_t[player.index].mana = rpg_t[player.index].mana + mana_per_tick - if rpg_t[player.index].mana >= rpg_t[player.index].mana_max then - rpg_t[player.index].mana = rpg_t[player.index].mana_max + rpg_t.mana = rpg_t.mana + mana_per_tick + if rpg_t.mana >= rpg_t.mana_max then + rpg_t.mana = rpg_t.mana_max end - rpg_t[player.index].mana = (math.round(rpg_t[player.index].mana * 10) / 10) + rpg_t.mana = (math.round(rpg_t.mana * 10) / 10) end end @@ -370,6 +370,11 @@ local function regen_mana_player(players) end local function give_player_flameboots(player) + local rpg_t = RPG.get_value_from_player(player.index) + if not rpg_t.flame_boots then + return + end + if not player.character then return end @@ -377,39 +382,33 @@ local function give_player_flameboots(player) return end - local rpg_t = RPG.get('rpg_t') - - if not rpg_t[player.index].mana then + if not rpg_t.mana then return end - if not rpg_t[player.index].flame_boots then - return - end - - if rpg_t[player.index].mana <= 0 then + if rpg_t.mana <= 0 then player.print(({'rpg_main.flame_boots_worn_out'}), {r = 0.22, g = 0.77, b = 0.44}) - rpg_t[player.index].flame_boots = false + rpg_t.flame_boots = false return end - if rpg_t[player.index].mana % 500 == 0 then - player.print(({'rpg_main.flame_mana_remaining', rpg_t[player.index].mana}), {r = 0.22, g = 0.77, b = 0.44}) + if rpg_t.mana % 500 == 0 then + player.print(({'rpg_main.flame_mana_remaining', rpg_t.mana}), {r = 0.22, g = 0.77, b = 0.44}) end local p = player.position player.surface.create_entity({name = 'fire-flame', position = p}) - rpg_t[player.index].mana = rpg_t[player.index].mana - 5 - if rpg_t[player.index].mana <= 0 then - rpg_t[player.index].mana = 0 + rpg_t.mana = rpg_t.mana - 5 + if rpg_t.mana <= 0 then + rpg_t.mana = 0 end if player.gui.screen[main_frame_name] then local f = player.gui.screen[main_frame_name] local data = Gui.get_data(f) if data.mana and data.mana.valid then - data.mana.caption = rpg_t[player.index].mana + data.mana.caption = rpg_t.mana end end end @@ -590,11 +589,11 @@ local function on_entity_damaged(event) end local enable_one_punch = RPG.get('rpg_extra').enable_one_punch - local rpg_t = RPG.get('rpg_t') + local rpg_t = RPG.get_value_from_player(cause.player.index) --Cause a one punch. if enable_one_punch then - if rpg_t[cause.player.index].one_punch then + if rpg_t.one_punch then if math.random(0, 999) < Functions.get_one_punch_chance(cause.player) * 10 then one_punch(cause, entity, damage) if entity.valid then @@ -713,11 +712,11 @@ local function on_player_rotated_entity(event) return end - local rpg_t = RPG.get('rpg_t') - if rpg_t[player.index].rotated_entity_delay > game.tick then + local rpg_t = RPG.get_value_from_player(player.index) + if rpg_t.rotated_entity_delay > game.tick then return end - rpg_t[player.index].rotated_entity_delay = game.tick + 20 + rpg_t.rotated_entity_delay = game.tick + 20 Functions.gain_xp(player, 0.20) end @@ -793,12 +792,12 @@ local function on_pre_player_mined_item(event) return end - local rpg_t = RPG.get('rpg_t') - if rpg_t[player.index].last_mined_entity_position.x == event.entity.position.x and rpg_t[player.index].last_mined_entity_position.y == event.entity.position.y then + local rpg_t = RPG.get_value_from_player(player.index) + if rpg_t.last_mined_entity_position.x == event.entity.position.x and rpg_t.last_mined_entity_position.y == event.entity.position.y then return end - rpg_t[player.index].last_mined_entity_position.x = entity.position.x - rpg_t[player.index].last_mined_entity_position.y = entity.position.y + rpg_t.last_mined_entity_position.x = entity.position.x + rpg_t.last_mined_entity_position.y = entity.position.y local distance_multiplier = math.floor(math.sqrt(entity.position.x ^ 2 + entity.position.y ^ 2)) * 0.0005 + 1 @@ -813,7 +812,7 @@ local function on_pre_player_mined_item(event) local f = player.gui.screen[main_frame_name] local data = Gui.get_data(f) if data.exp_gui and data.exp_gui.valid then - data.exp_gui.caption = math.floor(rpg_t[player.index].xp) + data.exp_gui.caption = math.floor(rpg_t.xp) end end @@ -856,8 +855,8 @@ end local function on_player_respawned(event) local player = game.players[event.player_index] - local rpg_t = RPG.get('rpg_t') - if not rpg_t[player.index] then + local rpg_t = RPG.get_value_from_player(player.index) + if not rpg_t then Functions.rpg_reset_player(player) return end @@ -869,9 +868,9 @@ end local function on_player_joined_game(event) local player = game.players[event.player_index] - local rpg_t = RPG.get('rpg_t') + local rpg_t = RPG.get_value_from_player(player.index) local rpg_extra = RPG.get('rpg_extra') - if not rpg_t[player.index] then + if not rpg_t then Functions.rpg_reset_player(player) if rpg_extra.reward_new_players > 10 then Functions.gain_xp(player, rpg_extra.reward_new_players) @@ -1019,27 +1018,27 @@ local function on_player_used_capsule(event) return end - local rpg_t = RPG.get('rpg_t') + local rpg_t = RPG.get_value_from_player(player.index) - if not rpg_t[player.index].enable_entity_spawn then + if not rpg_t.enable_entity_spawn then return end local p = player.print - if rpg_t[player.index].last_spawned >= game.tick then + if rpg_t.last_spawned >= game.tick then return p(({'rpg_main.mana_casting_too_fast', player.name}), Color.warning) end - local mana = rpg_t[player.index].mana + local mana = rpg_t.mana local surface = player.surface - local object = conjure_items[rpg_t[player.index].dropdown_select_index] + local object = conjure_items[rpg_t.dropdown_select_index] if not object then return end - if rpg_t[player.index].level < object.level then + if rpg_t.level < object.level then return p(({'rpg_main.low_level'}), Color.fail) end @@ -1094,14 +1093,14 @@ local function on_player_used_capsule(event) if object.obj_to_create == 'suicidal_comfylatron' then Functions.suicidal_comfylatron(position, surface) p(({'rpg_main.suicidal_comfylatron', 'Suicidal Comfylatron'}), Color.success) - rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost + rpg_t.mana = rpg_t.mana - object.mana_cost elseif object.obj_to_create == 'warp-gate' then player.teleport(surface.find_non_colliding_position('character', game.forces.player.get_spawn_position(surface), 3, 0, 5), surface) - rpg_t[player.index].mana = 0 + rpg_t.mana = 0 Functions.damage_player_over_time(player, math.random(8, 16)) player.play_sound {path = 'utility/armor_insert', volume_modifier = 1} p(({'rpg_main.warped_ok'}), Color.info) - rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost + rpg_t.mana = rpg_t.mana - object.mana_cost elseif projectile_types[obj_name] then -- projectiles for i = 1, object.amount do local damage_area = { @@ -1116,16 +1115,16 @@ local function on_player_used_capsule(event) end end p(({'rpg_main.object_spawned', obj_name}), Color.success) - rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost + rpg_t.mana = rpg_t.mana - object.mana_cost else if object.target then -- rockets and such surface.create_entity({name = obj_name, position = position, force = force, target = target_pos, speed = 1}) p(({'rpg_main.object_spawned', obj_name}), Color.success) - rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost + rpg_t.mana = rpg_t.mana - object.mana_cost elseif object.obj_to_create == 'fish' then -- spawn in some fish player.insert({name = 'raw-fish', count = object.amount}) p(({'rpg_main.object_spawned', 'raw-fish'}), Color.success) - rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost + rpg_t.mana = rpg_t.mana - object.mana_cost elseif surface.can_place_entity {name = obj_name, position = position} then if object.biter then local e = surface.create_entity({name = obj_name, position = position, force = force}) @@ -1134,7 +1133,7 @@ local function on_player_used_capsule(event) surface.create_entity({name = obj_name, position = position, force = force}) end p(({'rpg_main.object_spawned', obj_name}), Color.success) - rpg_t[player.index].mana = rpg_t[player.index].mana - object.mana_cost + rpg_t.mana = rpg_t.mana - object.mana_cost else p(({'rpg_main.out_of_reach'}), Color.fail) return @@ -1143,7 +1142,7 @@ local function on_player_used_capsule(event) local msg = player.name .. ' casted ' .. object.obj_to_create .. '. ' - rpg_t[player.index].last_spawned = game.tick + object.tick + rpg_t.last_spawned = game.tick + object.tick Functions.update_mana(player) local reward_xp = object.mana_cost * 0.085 diff --git a/modules/wave_defense/buried_enemies.lua b/modules/wave_defense/buried_enemies.lua index 68ac6fbb..b8058b12 100644 --- a/modules/wave_defense/buried_enemies.lua +++ b/modules/wave_defense/buried_enemies.lua @@ -96,16 +96,41 @@ local function spawn_biters(data) unit = surface.create_entity({name = BiterRolls.wave_defense_roll_biter_name(), position = position}) end - if random(1, 64) == 1 then + if random(1, 45) == 1 then + BiterHealthBooster.add_unit(unit, boosted_health) + elseif random(1, 64) == 1 then BiterHealthBooster.add_boss_unit(unit, boosted_health, 0.38) end end local function spawn_worms(data) + local wave_number = WD.get('wave_number') + local d = Diff.get() + local m = 0.0015 + if d.difficulty_vote_index then + if not d.strength_modifier then + m = m * 1.05 + else + m = m * d.strength_modifier + end + end + + local boosted_health = 1 + (wave_number * (m * 2)) + + if wave_number >= 100 then + boosted_health = boosted_health * 2 + end + local surface = data.surface local position = data.position BiterRolls.wave_defense_set_worm_raffle(sqrt(position.x ^ 2 + position.y ^ 2) * 0.20) - surface.create_entity({name = BiterRolls.wave_defense_roll_worm_name(), position = position}) + local unit = surface.create_entity({name = BiterRolls.wave_defense_roll_worm_name(), position = position}) + + if random(1, 45) == 1 then + BiterHealthBooster.add_unit(unit, boosted_health) + elseif random(1, 64) == 1 then + BiterHealthBooster.add_boss_unit(unit, boosted_health, 0.38) + end end function Public.buried_biter(surface, position, max) diff --git a/utils/server.lua b/utils/server.lua index 1ecc328b..bc166ce8 100644 --- a/utils/server.lua +++ b/utils/server.lua @@ -966,15 +966,30 @@ Event.add( end ) +local leave_reason_map = { + [defines.disconnect_reason.quit] = '', + [defines.disconnect_reason.dropped] = ' (Dropped)', + [defines.disconnect_reason.reconnect] = ' (Reconnect)', + [defines.disconnect_reason.wrong_input] = ' (Wrong input)', + [defines.disconnect_reason.desync_limit_reached] = ' (Desync limit reached)', + [defines.disconnect_reason.cannot_keep_up] = ' (Cannot keep up)', + [defines.disconnect_reason.afk] = ' (AFK)', + [defines.disconnect_reason.kicked] = ' (Kicked)', + [defines.disconnect_reason.kicked_and_deleted] = ' (Kicked)', + [defines.disconnect_reason.banned] = ' (Banned)', + [defines.disconnect_reason.switching_servers] = ' (Switching servers)' +} + Event.add( defines.events.on_player_left_game, function(event) - local player = Game.get_player_by_index(event.player_index) - if not player or not player.valid then + local player = game.get_player(event.player_index) + if not player then return end - raw_print(player_leave_tag .. player.name) + local reason = leave_reason_map[event.reason] or '' + raw_print(player_leave_tag .. player.name .. reason) end )