1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00

Merge pull request #241 from ComfyFactory/changes

Changes
This commit is contained in:
Gerkiz 2022-04-07 16:19:02 +02:00 committed by GitHub
commit 5c0723d8a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 264 additions and 288 deletions

View File

@ -1,7 +1,7 @@
[mountain_fortress_v3]
map_info_main_caption=M O U N T A I N F O R T R E S S V3
map_info_sub_caption= ~~ diggy diggy choo choo ~~
map_info_text=[color=red]READ THIS!\nIf there are any code bugs or desyncs. Please report asap to @Gerkiz!\nIf there are any game breaking bugs then this map might be shutdown to hot-fix the issue.[/color]\n\nThe biters have caught the scent of fish in the cargo wagon.\nGuide the choo into the mountain and protect it as long as possible!\nThis however will not be an easy task,\nsince their strength and numbers increase over time.\n\nIn additon, the southern grounds collapse over time.\n\nDelve deep for greater treasures, but also face increased dangers.\nMining productivity research will overhaul your mining equipment, increasing the size of your backpack.\n\nAs you dig, you will encounter impassable dark chasms or rivers.\nArtillery will try to shoot you down! Dig fast, dig north!\n\nSome explosives may cause rocks to fall down the mountain, filling the void, creating new ways.\nAll they need is a container and a well aimed shot.\n\nEnter the cargo wagon to reveal the wagon surface!\n\nRandom buildings that generate resources can be found throughout the world.\n\nPlacing steel-chests near cargo-wagons enables you to quickly move content.\n\nStaying inside the locomotive aura prevents biters from spawning when mining entities.\n\nRPG GUI is disabled inside the locomotive.\nDisconnecting wagons is disabled.\nYou can't cancel crafting when standing inside the locomotive aura.\n\nDon't try to run north with your Spidertron if the train is not near you.\nYou have been warned.\n\nMining drills have great mining-bonus which also is increased after each research, use them when you can!\n\nThe mystical chest in the locomotive offers some rewards.\nOne must feed the chest to receive such rewards.\n\nGood luck on your journey!
map_info_text=[color=red]READ THIS!\nIf there are any code bugs or desyncs. Please report asap to @Gerkiz!\nIf there are any game breaking bugs then this map might be shutdown to hot-fix the issue.[/color]\n\nThe biters have caught the scent of fish in the cargo wagon.\nGuide the choo into the mountain and protect it as long as possible!\nThis however will not be an easy task,\nsince their strength and numbers increase over time.\n\nIn additon, the southern grounds collapse over time.\n\nDelve deep for greater treasures, but also face increased dangers.\nMining productivity research will overhaul your mining equipment, increasing the size of your backpack.\n\nAs you dig, you will encounter impassable dark chasms or rivers.\nArtillery will try to shoot you down! Dig fast, dig north!\n\nSome explosives may cause rocks to fall down the mountain, filling the void, creating new ways.\nAll they need is a container and a well aimed shot.\n\nEnter the cargo wagon to reveal the wagon surface!\n\nRandom buildings that generate resources can be found throughout the world.\n\nPlacing steel-chests near cargo-wagons enables you to quickly move content.\n\nStaying inside the locomotive aura prevents biters from spawning when mining entities.\n\nRadars do not generate new areas.\n\nRPG GUI is disabled inside the locomotive.\n\nDisconnecting wagons is disabled.\nYou can't cancel crafting when standing inside the locomotive aura.\n\nDon't try to run north with your Spidertron if the train is not near you.\nYou have been warned.\n\nMining drills have great mining-bonus which also is increased after each research, use them when you can!\n\nThe mystical chest in the locomotive offers some rewards.\nOne must feed the chest to receive such rewards.\n\nGood luck on your journey!
[breached_wall]
collapse_start=[color=blue]Mapkeeper:[/color]\nWarning, Collapse has begun!

View File

@ -125,8 +125,12 @@ end
local compare_player_pos = function(player)
local p = player.position
local index = player.index
local zone = floor((abs(p.y / zone_settings.zone_depth)) % zone_settings.size) + 1
local adjusted_zones = WPT.get('adjusted_zones')
if not adjusted_zones.size then
return
end
local zone = floor((abs(p.y / zone_settings.zone_depth)) % adjusted_zones.size) + 1
if adjusted_zones.scrap[zone] then
RPG.set_value_to_player(index, 'scrap_zone', true)

View File

@ -13,6 +13,7 @@ local Difficulty = require 'modules.difficulty_vote_by_amount'
local ICW_Func = require 'maps.mountain_fortress_v3.icw.functions'
local math2d = require 'math2d'
local Misc = require 'utils.commands.misc'
local Core = require 'utils.core'
local zone_settings = WPT.zone_settings
local this = {
@ -159,7 +160,7 @@ local function do_magic_crafters()
local index = magic_crafters.index
for i = 1, magic_crafters_per_tick do
for _ = 1, magic_crafters_per_tick do
if index > limit then
index = 1
end
@ -211,7 +212,7 @@ local function do_magic_fluid_crafters()
local index = magic_fluid_crafters.index
for i = 1, magic_fluid_crafters_per_tick do
for _ = 1, magic_fluid_crafters_per_tick do
if index > limit then
index = 1
end
@ -430,7 +431,7 @@ Public.disable_minable_and_ICW_callback =
function(entity)
if entity and entity.valid then
entity.minable = false
ICW.register_wagon(entity, true)
ICW.register_wagon(entity)
end
end
)
@ -791,12 +792,13 @@ local function calc_players()
return #players
end
local total = 0
for i = 1, #players do
local player = players[i]
if player.afk_time < 36000 then
total = total + 1
Core.iter_connected_players(
function(player)
if player.afk_time < 36000 then
total = total + 1
end
end
end
)
if total <= 0 then
total = #players
end

View File

@ -85,7 +85,7 @@ local function validate_player(player)
return true
end
local function property_boost(data)
local function give_passive_xp(data)
local xp_floating_text_color = {r = 188, g = 201, b = 63}
local visuals_delay = 1800
local loco_surface = WPT.get('loco_surface')
@ -430,7 +430,7 @@ function Public.boost_players_around_train()
locomotive_surface = locomotive_surface,
rpg = rpg
}
property_boost(data)
give_passive_xp(data)
end
function Public.is_around_train(entity)

View File

@ -553,6 +553,7 @@ local function redraw_market_items(gui, player, search_text)
frame.add(
{
type = 'sprite-button',
---@diagnostic disable-next-line: ambiguity-1
sprite = data.sprite or 'item/' .. item,
number = item_count,
name = item,
@ -611,6 +612,7 @@ local function redraw_market_items(gui, player, search_text)
frame.add(
{
type = 'sprite-button',
---@diagnostic disable-next-line: ambiguity-1
sprite = data.sprite or 'item/' .. item,
number = item_count,
name = item,

View File

@ -72,6 +72,7 @@ local set_loco_tiles =
local p = {}
---@diagnostic disable-next-line: count-down-loop
for x = position.x - 5, 1, 3 do
for y = 1, position.y + 5, 2 do
if random(1, 4) == 1 then

View File

@ -313,7 +313,8 @@ end
local is_player_valid = function()
local players = game.connected_players
for _, player in pairs(players) do
for i = 1, #players do
local player = players[i]
if player.connected and player.controller_type == 2 then
player.set_controller {type = defines.controllers.god}
player.create_character()
@ -467,9 +468,11 @@ end
local on_tick = function()
local update_gui = Gui_mf.update_gui
local tick = game.tick
local players = game.connected_players
if tick % 40 == 0 then
for _, player in pairs(game.connected_players) do
for i = 1, #players do
local player = players[i]
update_gui(player)
end
lock_locomotive_positions()
@ -537,5 +540,24 @@ end
Event.on_nth_tick(10, on_tick)
Event.on_init(on_init)
Event.add(WPT.events.reset_map, Public.reset_map)
Event.add(
defines.events.on_sector_scanned,
function(event)
local radar = event.radar
if not radar or not radar.valid then
return
end
local radars_reveal_new_chunks = WPT.get('radars_reveal_new_chunks')
if radars_reveal_new_chunks then
return
end
local pos = event.chunk_position
radar.force.cancel_charting(radar.surface.index)
radar.force.unchart_chunk(pos, radar.surface.index)
end
)
return Public

View File

@ -177,7 +177,7 @@ local function create_particles(surface, name, position, amount, cause_position)
d2 = (cause_position.y - position.y) * 0.025
end
for i = 1, amount, 1 do
for _ = 1, amount, 1 do
local m = random(4, 10)
local m2 = m * 0.005

View File

@ -1,7 +1,6 @@
local Color = require 'utils.color_presets'
local Event = require 'utils.event'
local WPT = require 'maps.mountain_fortress_v3.table'
local WD = require 'modules.wave_defense.table'
local RPG = require 'modules.rpg.main'
local Alert = require 'utils.alert'
local Task = require 'utils.task'
@ -265,17 +264,6 @@ local function roll_item_stacks(remaining_budget, max_slots, blacklist)
return item_stack_set, item_stack_set_worth
end
local pause_wd_token =
Token.register(
function()
WD.pause(false)
local mc_rewards = WPT.get('mc_rewards')
mc_rewards.temp_boosts.wave_defense = nil
local message = ({'locomotive.wd_resumed'})
Alert.alert_all_players(15, message, nil, 'achievement/tech-maniac')
end
)
local restore_mining_speed_token =
Token.register(
function()
@ -379,19 +367,6 @@ local mc_random_rewards = {
end),
512
},
{
name = 'Inventory Bonus',
color = {r = 0.00, g = 0.00, b = 0.25},
tooltip = 'Selecting this will grant the team permanent inventory bonus!',
func = (function(player)
local force = game.forces.player
force.character_inventory_slots_bonus = force.character_inventory_slots_bonus + 1
local message = ({'locomotive.inventory_bonus', player.name})
Alert.alert_all_players(15, message, nil, 'achievement/tech-maniac')
return true
end),
512
},
{
name = 'Heal Locomotive',
color = {r = 0.00, g = 0.00, b = 0.25},
@ -404,26 +379,6 @@ local mc_random_rewards = {
return true
end),
256
},
{
name = 'Wave Defense',
str = 'wave_defense',
color = {r = 0.35, g = 0.00, b = 0.00},
tooltip = 'Selecting this will pause the wave defense for 5 minutes. Ideal if you want to take a break!',
func = (function(player)
local mc_rewards = WPT.get('mc_rewards')
if mc_rewards.temp_boosts.wave_defense then
return false, '[Rewards] Wave Defense break is already applied. Please choose another reward.'
end
mc_rewards.temp_boosts.wave_defense = true
WD.pause(true)
Task.set_timeout_in_ticks(18000, pause_wd_token)
local message = ({'locomotive.wd_paused', player.name})
Alert.alert_all_players(15, message, nil, 'achievement/tech-maniac')
return true
end),
64
}
}

View File

@ -19,8 +19,7 @@ Global.register(
Public.zone_settings = {
zone_depth = 704,
zone_width = 510,
size = nil
zone_width = 510
}
Public.pickaxe_upgrades = {
@ -230,9 +229,12 @@ function Public.reset_table()
}
this.adjusted_zones = {
scrap = {},
forest = {}
forest = {},
size = nil,
shuffled_zones = nil
}
this.alert_zone_1 = false -- alert the players
this.radars_reveal_new_chunks = false -- allows for the player to explore the map instead
for k, _ in pairs(this.players) do
this.players[k] = {}
@ -270,10 +272,6 @@ function Public.remove(key, sub_key)
end
end
local on_init = function()
Public.reset_table()
end
Event.on_init(on_init)
Event.on_init(Public.reset_table)
return Public

View File

@ -144,7 +144,7 @@ local function is_position_near(area, table_to_check)
end
for i = 1, #table_to_check do
if inside(table_to_check[i], area) then
if inside(table_to_check[i]) then
status = true
end
end
@ -152,7 +152,7 @@ local function is_position_near(area, table_to_check)
return status
end
local function place_wagon(data)
local function place_wagon(data, adjusted_zones)
local placed_trains_in_zone = WPT.get('placed_trains_in_zone')
if not placed_trains_in_zone.randomized then
placed_trains_in_zone.limit = random(1, 2)
@ -164,11 +164,11 @@ local function place_wagon(data)
data.new_zone = 1
end
if data.new_zone == zone_settings.size then
if data.new_zone == adjusted_zones.size then
data.new_zone = 1
end
if data.current_zone == zone_settings.size then
if data.current_zone == adjusted_zones.size then
local new_zone = placed_trains_in_zone.zones[data.new_zone]
if new_zone then
new_zone.placed = 0
@ -215,6 +215,7 @@ local function place_wagon(data)
local location
local direction
local r1 = random(2, 4) * 2
local r2 = random(2, 4) * 2
@ -226,7 +227,7 @@ local function place_wagon(data)
direction = 2
end
for k, tile in pairs(location) do
for _, tile in pairs(location) do
tiles[#tiles + 1] = {name = 'nuclear-ground', position = tile.position}
if tile.position.y % 1 == 0 and tile.position.x % 1 == 0 then
entities[#entities + 1] = {
@ -458,7 +459,7 @@ local function wall(p, data)
end
end
local function generate_zone_14(x, y, data)
local function zone_14(x, y, data, _, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -510,7 +511,7 @@ local function generate_zone_14(x, y, data)
if small_caves > -0.41 and small_caves < 0.41 then
if noise_cave_ponds > 0.35 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -538,7 +539,7 @@ local function generate_zone_14(x, y, data)
tiles[#tiles + 1] = {name = 'water-shallow', position = p}
end
local function generate_zone_13(x, y, data)
local function zone_13(x, y, data, _, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -590,7 +591,7 @@ local function generate_zone_13(x, y, data)
if small_caves > -0.40 and small_caves < 0.40 then
if noise_cave_ponds > 0.35 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -618,7 +619,7 @@ local function generate_zone_13(x, y, data)
tiles[#tiles + 1] = {name = 'water-shallow', position = p}
end
local function generate_zone_12(x, y, data, void_or_lab)
local function zone_12(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -653,7 +654,7 @@ local function generate_zone_12(x, y, data, void_or_lab)
end
if noise_1 < -0.72 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -704,7 +705,7 @@ local function generate_zone_12(x, y, data, void_or_lab)
tiles[#tiles + 1] = {name = 'tutorial-grid', position = p}
end
local function generate_zone_11(x, y, data)
local function zone_11(x, y, data, _, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -767,7 +768,7 @@ local function generate_zone_11(x, y, data)
}
end
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -800,7 +801,7 @@ local function generate_zone_11(x, y, data)
end
end
local function generate_zone_10(x, y, data)
local function zone_10(x, y, data, _, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -844,7 +845,7 @@ local function generate_zone_10(x, y, data)
return
end
if abs(scrapyard) > 0.25 and abs(scrapyard) < 0.40 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -914,7 +915,7 @@ local function generate_zone_10(x, y, data)
tiles[#tiles + 1] = {name = 'grass-2', position = p}
end
local function generate_zone_9(x, y, data)
local function zone_9(x, y, data, _, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -949,7 +950,7 @@ local function generate_zone_9(x, y, data)
end
if maze_noise > 0 and maze_noise < 0.45 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -987,7 +988,7 @@ local function generate_zone_9(x, y, data)
end
--SCRAPYARD
local function process_zone_scrap_2(x, y, data, void_or_lab)
local function zone_scrap_2(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1033,7 +1034,7 @@ local function process_zone_scrap_2(x, y, data, void_or_lab)
return
end
if scrapyard_modified < -0.28 or scrapyard_modified > 0.28 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1116,7 +1117,7 @@ local function process_zone_scrap_2(x, y, data, void_or_lab)
end
--SCRAPYARD
local function process_zone_scrap_1(x, y, data, void_or_lab)
local function zone_scrap_1(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1162,7 +1163,7 @@ local function process_zone_scrap_1(x, y, data, void_or_lab)
return
end
if scrapyard < -0.28 or scrapyard > 0.28 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1244,7 +1245,7 @@ local function process_zone_scrap_1(x, y, data, void_or_lab)
end
end
local function generate_zone_7(x, y, data, void_or_lab)
local function zone_7(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1304,7 +1305,7 @@ local function generate_zone_7(x, y, data, void_or_lab)
if cave_rivers_4 > -0.20 and cave_rivers_4 < 0.20 then
tiles[#tiles + 1] = {name = 'grass-' .. floor(cave_rivers_4 * 32) % 3 + 1, position = p}
if cave_rivers_4 > -0.10 and cave_rivers_4 < 0.10 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1361,7 +1362,7 @@ local function generate_zone_7(x, y, data, void_or_lab)
end
end
local function generate_zone_forest_2(x, y, data, void_or_lab)
local function zone_forest_2(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1418,7 +1419,7 @@ local function generate_zone_forest_2(x, y, data, void_or_lab)
end
local noise_forest_location = get_perlin('forest_location', p, seed)
if cave_rivers > -0.1 and cave_rivers < 0.1 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1497,7 +1498,7 @@ local function generate_zone_forest_2(x, y, data, void_or_lab)
end
end
local function generate_zone_5(x, y, data, void_or_lab)
local function zone_5(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1561,7 +1562,7 @@ local function generate_zone_5(x, y, data, void_or_lab)
if small_caves > -0.40 and small_caves < 0.40 then
if noise_cave_ponds > 0.35 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1589,7 +1590,7 @@ local function generate_zone_5(x, y, data, void_or_lab)
tiles[#tiles + 1] = {name = void_or_lab, position = p}
end
local function generate_zone_4(x, y, data, void_or_lab)
local function zone_4(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1632,7 +1633,7 @@ local function generate_zone_4(x, y, data, void_or_lab)
note = true
}
end
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1720,7 +1721,7 @@ local function generate_zone_4(x, y, data, void_or_lab)
tiles[#tiles + 1] = {name = void_or_lab, position = p}
end
local function generate_zone_3(x, y, data, void_or_lab)
local function zone_3(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -1857,7 +1858,7 @@ local function generate_zone_3(x, y, data, void_or_lab)
--Main Rock Terrain
local no_rocks_2 = get_perlin('no_rocks_2', p, seed + 75000)
if no_rocks_2 > 0.80 or no_rocks_2 < -0.80 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -1886,7 +1887,7 @@ local function generate_zone_3(x, y, data, void_or_lab)
end
end
local function generate_zone_2(x, y, data, void_or_lab)
local function zone_2(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local tiles = data.tiles
@ -2005,7 +2006,7 @@ local function generate_zone_2(x, y, data, void_or_lab)
--Main Rock Terrain
local no_rocks_2 = get_perlin('no_rocks_2', p, seed + 75000)
if no_rocks_2 > 0.80 or no_rocks_2 < -0.80 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -2030,7 +2031,7 @@ local function generate_zone_2(x, y, data, void_or_lab)
tiles[#tiles + 1] = {name = void_or_lab, position = p}
end
local function generate_zone_forest_1(x, y, data, void_or_lab)
local function zone_forest_1(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local buildings = data.buildings
@ -2149,7 +2150,7 @@ local function generate_zone_forest_1(x, y, data, void_or_lab)
--Main Rock Terrain
local no_rocks_2 = get_perlin('no_rocks_2', p, seed + 5000)
if no_rocks_2 > 0.64 or no_rocks_2 < -0.64 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -2214,7 +2215,7 @@ local function generate_zone_forest_1(x, y, data, void_or_lab)
end
end
local function generate_zone_1(x, y, data, void_or_lab)
local function zone_1(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local buildings = data.buildings
@ -2331,7 +2332,7 @@ local function generate_zone_1(x, y, data, void_or_lab)
--Main Rock Terrain
local no_rocks_2 = get_perlin('no_rocks_2', p, seed + 75000)
if no_rocks_2 > 0.66 or no_rocks_2 < -0.66 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -2378,7 +2379,7 @@ local function generate_zone_1(x, y, data, void_or_lab)
end
end
local function starting_zone(x, y, data, void_or_lab)
local function starting_zone(x, y, data, void_or_lab, adjusted_zones)
local p = {x = x, y = y}
local seed = data.seed
local buildings = data.buildings
@ -2492,7 +2493,7 @@ local function starting_zone(x, y, data, void_or_lab)
--Main Rock Terrain
if no_rocks_2 > 0.334 and no_rocks_2 < 0.544 then
local success = place_wagon(data)
local success = place_wagon(data, adjusted_zones)
if success then
return
end
@ -2517,78 +2518,27 @@ local function starting_zone(x, y, data, void_or_lab)
end
local zones = {
generate_zone_1,
generate_zone_forest_1,
generate_zone_3,
generate_zone_5,
generate_zone_11,
generate_zone_forest_2,
process_zone_scrap_1,
process_zone_scrap_2,
generate_zone_9,
generate_zone_4,
process_zone_scrap_1,
generate_zone_2,
generate_zone_3,
process_zone_scrap_2,
generate_zone_3,
generate_zone_forest_2,
generate_zone_4,
generate_zone_forest_1,
generate_zone_forest_2,
generate_zone_2,
generate_zone_4,
process_zone_scrap_2,
generate_zone_5,
generate_zone_1,
generate_zone_forest_2,
generate_zone_7,
process_zone_scrap_1,
generate_zone_9,
generate_zone_10,
generate_zone_11,
generate_zone_12,
generate_zone_forest_2,
process_zone_scrap_2,
process_zone_scrap_1,
generate_zone_11,
generate_zone_12,
process_zone_scrap_1,
generate_zone_13,
generate_zone_14,
process_zone_scrap_1,
generate_zone_forest_1,
generate_zone_14,
process_zone_scrap_2
['zone_1'] = zone_1,
['zone_2'] = zone_2,
['zone_3'] = zone_3,
['zone_4'] = zone_4,
['zone_5'] = zone_5,
['zone_forest_1'] = zone_forest_1,
['zone_forest_2'] = zone_forest_2,
['zone_scrap_1'] = zone_scrap_1,
['zone_scrap_2'] = zone_scrap_2,
['zone_7'] = zone_7,
['zone_9'] = zone_9,
['zone_10'] = zone_10,
['zone_11'] = zone_11,
['zone_12'] = zone_12,
['zone_13'] = zone_13,
['zone_14'] = zone_14
}
--[[ local zones_non_raffled = {
generate_zone_1,
generate_zone_2,
generate_zone_3,
generate_zone_4,
generate_zone_5,
generate_zone_forest_1,
generate_zone_forest_2,
process_zone_scrap_1,
process_zone_scrap_2,
generate_zone_7,
generate_zone_9,
generate_zone_11,
generate_zone_10,
generate_zone_11,
generate_zone_12,
generate_zone_13,
generate_zone_14
} ]]
zone_settings.size = #zones
local function shuffle_terrains(new_zone)
local adjusted_zones = WPT.get('adjusted_zones')
local function shuffle_terrains(adjusted_zones, new_zone)
if not adjusted_zones.shuffled_terrains then
shuffle(zones)
shuffle(adjusted_zones.shuffled_zones)
adjusted_zones.shuffled_terrains = new_zone
end
@ -2605,25 +2555,43 @@ local function is_out_of_map(p)
return true
end
local function process_bits(p, data)
local function init_terrain(adjusted_zones)
if adjusted_zones.init_terrain then
return
end
local count = 1
local shuffled_zones = {}
for zone_name, _ in pairs(zones) do
shuffled_zones[count] = zone_name
count = count + 1
end
adjusted_zones.size = count
adjusted_zones.shuffled_zones = shuffled_zones
adjusted_zones.init_terrain = true
end
local function process_bits(p, data, adjusted_zones)
local left_top_y = data.area.left_top.y
local index = floor((abs(left_top_y / zone_settings.zone_depth)) % zone_settings.size) + 1
shuffle_terrains(index)
local index = floor((abs(left_top_y / zone_settings.zone_depth)) % adjusted_zones.size) + 1
shuffle_terrains(adjusted_zones, index)
local generate_zone
if left_top_y >= -zone_settings.zone_depth then
generate_zone = starting_zone
else
generate_zone = zones[index]
generate_zone = zones[adjusted_zones.shuffled_zones[index]]
if not generate_zone then
generate_zone = zones[zone_settings.size]
generate_zone = zones[adjusted_zones.shuffled_zones[adjusted_zones.size]]
end
end
data.current_zone = index
local adjusted_zones = WPT.get('adjusted_zones')
if data.forest_zone and not adjusted_zones.forest[index] then
adjusted_zones.forest[index] = true
end
@ -2637,7 +2605,7 @@ local function process_bits(p, data)
local x = p.x
local y = p.y
generate_zone(x, y, data, void_or_tile)
generate_zone(x, y, data, void_or_tile, adjusted_zones)
end
local function border_chunk(p, data)
@ -2729,6 +2697,9 @@ function Public.heavy_functions(data)
local p = data.position
local get_tile = surface.get_tile(p)
local adjusted_zones = WPT.get('adjusted_zones')
init_terrain(adjusted_zones)
local map_name = 'mountain_fortress_v3'
if string.sub(surface.name, 0, #map_name) ~= map_name then
@ -2749,7 +2720,7 @@ function Public.heavy_functions(data)
end
if top_y < 0 then
return process_bits(p, data)
return process_bits(p, data, adjusted_zones)
end
if top_y > 120 then

View File

@ -333,7 +333,7 @@ Gui.on_click(
end
local player = event.player
if not player or not player.valid or not player.character then
if not player or not player.valid then
return
end
@ -373,13 +373,14 @@ Gui.on_click(
return
end
local player = event.player
if not player or not player.valid or not player.character then
if not player or not player.valid then
return
end
if game.tick > this.difficulty_poll_closing_timeout then
clear_main_frame(player)
return
end
local screen = player.gui.center
if screen[main_frame_name] and screen[main_frame_name].valid then
clear_main_frame(player)
@ -397,7 +398,7 @@ Gui.on_click(
return
end
local player = event.player
if not player or not player.valid or not player.character then
if not player or not player.valid then
return
end
clear_main_frame(player)

View File

@ -519,7 +519,7 @@ function Public.update_player_stats(player)
local rpg_extra = Public.get('rpg_extra')
local rpg_t = Public.get_value_from_player(player.index)
local strength = rpg_t.strength - 10
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', round(strength * 0.1, 3))
P.update_single_modifier(player, 'character_inventory_slots_bonus', 'rpg', round(strength * 0.2, 3))
P.update_single_modifier(player, 'character_mining_speed_modifier', 'rpg', round(strength * 0.006, 3))
P.update_single_modifier(player, 'character_maximum_following_robot_count_bonus', 'rpg', round(strength / 2 * 0.03, 3))

View File

@ -88,7 +88,7 @@ end
-- Removes the first 100 entries of a table
local function overflow(t)
for _=1,100,1 do
for _ = 1, 100, 1 do
table.remove(t, 1)
end
end
@ -352,12 +352,7 @@ local function on_player_used_capsule(event)
local prefix = '[Capsule]'
msg = format(player.name .. ' damaged: %s with: %s', get_entities(name, entities), name)
local ban_msg =
format(
'Damaged: %s with: %s. This action was performed automatically. Visit getcomfy.eu/discord for forgiveness',
get_entities(name, entities),
name
)
local ban_msg = format('Damaged: %s with: %s. This action was performed automatically. Visit getcomfy.eu/discord for forgiveness', get_entities(name, entities), name)
do_action(player, prefix, msg, ban_msg, true)
else
@ -736,13 +731,7 @@ local function on_player_cancelled_crafting(event)
player.character.die('player')
Utils.action_warning(
'[Crafting]',
player.name ..
' canceled their craft of item ' ..
event.recipe.name ..
' of total count ' .. crafting_queue_item_count .. ' in raw items (' .. crafted_items .. ' slots) but had no inventory left.'
)
Utils.action_warning('[Crafting]', player.name .. ' canceled their craft of item ' .. event.recipe.name .. ' of total count ' .. crafting_queue_item_count .. ' in raw items (' .. crafted_items .. ' slots) but had no inventory left.')
end
if not this.cancel_crafting_history then
@ -865,9 +854,9 @@ local function on_permission_string_imported(event)
end
--- This is used for the RPG module, when casting capsules.
---@param player <LuaPlayer>
---@param position <EventPosition>
---@param msg <string>
---@param player userdata
---@param position table
---@param msg string
function Public.insert_into_capsule_history(player, position, msg)
if not this.capsule_history then
this.capsule_history = {}
@ -901,8 +890,8 @@ function Public.reset_tables()
end
--- Add entity type to the whitelist so it gets logged.
---@param key <string>
---@param value <string>
---@param key string
---@param value string
function Public.whitelist_types(key, value)
if key and value then
this.whitelist_types[key] = value
@ -912,35 +901,35 @@ function Public.whitelist_types(key, value)
end
--- If the event should also check trusted players.
---@param value <string>
---@param value string
function Public.do_not_check_trusted(value)
this.do_not_check_trusted = value or false
return this.do_not_check_trusted
end
--- If ANY actions should be performed when a player misbehaves.
---@param value <string>
---@param value string
function Public.enable_capsule_warning(value)
this.enable_capsule_warning = value or false
return this.enable_capsule_warning
end
--- If ANY actions should be performed when a player misbehaves.
---@param value <string>
---@param value string
function Public.enable_capsule_cursor_warning(value)
this.enable_capsule_cursor_warning = value or false
return this.enable_capsule_cursor_warning
end
--- If the script should jail a person instead of kicking them
---@param value <string>
---@param value string
function Public.enable_jail(value)
this.enable_jail = value or false
return this.enable_jail
end
--- Defines what the threshold for amount of explosives in chest should be - logged or not.
---@param value <string>
---@param value string
function Public.explosive_threshold(value)
if value then
this.explosive_threshold = value
@ -950,7 +939,7 @@ function Public.explosive_threshold(value)
end
--- Defines what the threshold for amount of times before the script should take action.
---@param value <string>
---@param value string
function Public.damage_entity_threshold(value)
if value then
this.damage_entity_threshold = value

View File

@ -103,6 +103,16 @@ function Public.get_actor()
return '<server>'
end
--- Iterates over all connected players
---@param callback function
function Public.iter_connected_players(callback)
local players = game.connected_players
for i = 1, #players do
local player = players[i]
callback(player)
end
end
function Public.cast_bool(var)
if var then
return true

View File

@ -477,7 +477,7 @@ function Event.remove_removable_nth_tick_function(tick, name)
local handlers = on_nth_tick_event_handlers[tick]
local f = function_nth_tick_table[name]
for k, v in pairs(function_nth_tick_table[name]) do
for _, v in pairs(function_nth_tick_table[name]) do
local t = v.tick
if t == tick then
f = v.handler

View File

@ -298,6 +298,7 @@ local function custom_handler_factory(handlers)
end
--luacheck: ignore custom_raise
---@diagnostic disable-next-line: unused-function, unused-local
local function custom_raise(handlers, element, player)
local handler = handlers[element.name]
if not handler then
@ -355,8 +356,8 @@ function Public.get_parent_frame(player)
end
--- This adds the given gui to the top gui.
---@param player <userdata>
---@param frame <object>
---@param player userdata
---@param frame userdata
function Public.add_mod_button(player, frame)
if Public.get_button_flow(player)[frame.name] and Public.get_button_flow(player)[frame.name].valid then
return
@ -365,7 +366,7 @@ function Public.add_mod_button(player, frame)
Public.get_button_flow(player).add(frame)
end
---@param state <bool>
---@param state boolean
--- If we should use the new mod gui or not
function Public.set_mod_gui_top_frame(state)
settings.mod_gui_top_frame = state or false
@ -377,7 +378,7 @@ function Public.get_mod_gui_top_frame()
end
--- This adds the given gui to the main gui.
---@param tbl
---@param tbl table
function Public.add_tab_to_gui(tbl)
if not tbl then
return
@ -411,7 +412,7 @@ function Public.screen_to_bypass(elem)
end
--- Fetches the main gui tabs. You are forbidden to write as this is local.
---@param key
---@param key string
function Public.get(key)
if key then
return main_gui_tabs[key]

View File

@ -30,8 +30,8 @@ local function build_group_gui(data)
local group_name_width = 150
local description_width = 240
local members_width = 90
local member_columns = 3
local actions_width = 80
local member_columns = 2
local actions_width = 130
local total_height = frame.style.minimal_height - 60
frame.clear()
@ -46,11 +46,12 @@ local function build_group_gui(data)
for _, h in pairs(headings) do
local l = t.add({type = 'label', caption = h[1]})
l.style.font_color = {r = 0.98, g = 0.66, b = 0.22}
l.style.font = 'default-listbox'
l.style.font = 'heading-2'
l.style.top_padding = 6
l.style.minimal_height = 40
l.style.minimal_width = h[2]
l.style.maximal_width = h[2]
l.style.horizontal_align = 'center'
end
local scroll_pane =
@ -76,11 +77,12 @@ local function build_group_gui(data)
for _, group in pairs(this.tag_groups) do
if (group.name and group.founder and group.description) then
local l = t.add({type = 'label', caption = group.name})
l.style.font = 'default-bold'
l.style.top_padding = 16
l.style.bottom_padding = 16
l.style.minimal_width = group_name_width
l.style.maximal_width = group_name_width
l.style.font = 'heading-3'
l.style.horizontal_align = 'center'
local color
if game.players[group.founder] and game.players[group.founder].color then
color = game.players[group.founder].color
@ -97,11 +99,17 @@ local function build_group_gui(data)
l.style.maximal_width = description_width
l.style.font_color = {r = 0.90, g = 0.90, b = 0.90}
l.style.single_line = false
l.style.font = 'heading-3'
l.style.horizontal_align = 'center'
local tt = t.add({type = 'table', column_count = member_columns})
local tt = t.add({type = 'table', column_count = 2})
local flow = tt.add({type = 'flow'})
flow.style.left_padding = 65
local ttt = tt.add({type = 'table', column_count = member_columns})
ttt.style.minimal_width = members_width * 2 - 25
for _, p in pairs(game.connected_players) do
if group.name == this.player_group[p.name] then
l = tt.add({type = 'label', caption = p.name})
l = ttt.add({type = 'label', caption = p.name})
color = {
r = p.color.r * 0.6 + 0.4,
g = p.color.g * 0.6 + 0.4,
@ -109,8 +117,10 @@ local function build_group_gui(data)
a = 1
}
l.style.font_color = color
--l.style.minimal_width = members_width
l.style.maximal_width = members_width * 2
l.style.maximal_width = members_width * 2 - 60
l.style.single_line = false
l.style.font = 'heading-3'
l.style.horizontal_align = 'center'
end
end
@ -153,10 +163,12 @@ end
local build_group_gui_token = Token.register(build_group_gui)
local function refresh_gui()
for _, p in pairs(game.connected_players) do
local frame = Gui.get_player_active_frame(p)
local players = game.connected_players
for i = 1, #players do
local player = players[i]
local frame = Gui.get_player_active_frame(player)
if frame then
if frame.name == module_name then
if frame.frame2 and frame.frame2.valid then
local new_group_name = frame.frame2.group_table.new_group_name.text
local new_group_description = frame.frame2.group_table.new_group_description.text
@ -168,10 +180,10 @@ local function refresh_gui()
new_group_description = ''
end
local data = {player = p, frame = frame}
local data = {player = player, frame = frame}
build_group_gui(data)
frame = Gui.get_player_active_frame(p)
frame = Gui.get_player_active_frame(player)
frame.frame2.group_table.new_group_name.text = new_group_name
frame.frame2.group_table.new_group_description.text = new_group_description
end

View File

@ -576,7 +576,7 @@ local function player_list_show(data)
name = 'player_list_panel_header_' .. k,
caption = v
}
header_label.style.font = 'default-bold'
header_label.style.font = 'heading-2'
header_label.style.font_color = {r = 0.98, g = 0.66, b = 0.22}
end
@ -677,6 +677,7 @@ local function player_list_show(data)
}
name_label.style.minimal_width = column_widths['name_label']
name_label.style.maximal_width = column_widths['name_label']
name_label.style.font = 'heading-3'
-- RPG level
if this.rpg_enabled then
@ -689,6 +690,7 @@ local function player_list_show(data)
}
rpg_level_label.style.minimal_width = column_widths['rpg_level_label']
rpg_level_label.style.maximal_width = column_widths['rpg_level_label']
rpg_level_label.style.font = 'heading-3'
end
-- Total time
@ -700,6 +702,7 @@ local function player_list_show(data)
}
total_label.style.minimal_width = column_widths['total_label']
total_label.style.maximal_width = column_widths['total_label']
total_label.style.font = 'heading-3'
-- Current time
local current_label =
@ -710,6 +713,7 @@ local function player_list_show(data)
}
current_label.style.minimal_width = column_widths['current_label']
current_label.style.maximal_width = column_widths['current_label']
current_label.style.font = 'heading-3'
-- Poke
local flow = player_list_panel_table.add {type = 'flow', name = 'button_flow_' .. i, direction = 'horizontal'}

View File

@ -127,22 +127,22 @@ local function add_global_stats(frame, player)
local t = frame.add {type = 'table', column_count = 5}
local l = t.add {type = 'label', caption = 'Rockets launched: '}
l.style.font = 'default-game'
l.style.font = 'heading-2'
l.style.font_color = {r = 175, g = 75, b = 255}
l.style.minimal_width = 140
local rocketsLaunched_label = t.add {type = 'label', caption = format_number(player.force.rockets_launched, true)}
rocketsLaunched_label.style.font = 'default-listbox'
rocketsLaunched_label.style.font = 'heading-3'
rocketsLaunched_label.style.font_color = {r = 0.9, g = 0.9, b = 0.9}
rocketsLaunched_label.style.minimal_width = 123
local bugs_dead_label = t.add {type = 'label', caption = 'Dead bugs: '}
bugs_dead_label.style.font = 'default-game'
bugs_dead_label.style.font = 'heading-2'
bugs_dead_label.style.font_color = {r = 0.90, g = 0.3, b = 0.3}
bugs_dead_label.style.minimal_width = 100
local killcount_label = t.add {type = 'label', caption = format_number(tonumber(get_total_biter_killcount(player.force)), true)}
killcount_label.style.font = 'default-listbox'
killcount_label.style.font = 'heading-3'
killcount_label.style.font_color = {r = 0.9, g = 0.9, b = 0.9}
killcount_label.style.minimal_width = 145
end
@ -191,10 +191,10 @@ local function show_score(data)
caption = cap,
name = header.name
}
label.style.font = 'default-listbox'
label.style.font = 'heading-2'
label.style.font_color = {r = 0.98, g = 0.66, b = 0.22} -- yellow
label.style.minimal_width = 150
label.style.horizontal_align = 'right'
label.style.horizontal_align = 'center'
end
-- Score list
@ -243,10 +243,10 @@ local function show_score(data)
caption = column.caption,
color = column.color or default_color
}
label.style.font = 'default'
label.style.font = 'heading-3'
label.style.minimal_width = 150
label.style.maximal_width = 150
label.style.horizontal_align = 'right'
label.style.horizontal_align = 'center'
end -- foreach column
end -- foreach entry
end

View File

@ -66,42 +66,44 @@ local function draw_main_frame(player)
}
else
for _, i in ipairs(instances) do
viewer_table.add {
type = 'label',
caption = i.name,
tooltip = i.connected .. '\nVersion: ' .. i.version,
style = 'caption_label'
}
local flow = viewer_table.add {type = 'flow'}
flow.style.horizontal_align = 'right'
flow.style.horizontally_stretchable = true
local empty_flow = viewer_table.add {type = 'flow'}
local button =
empty_flow.add {
type = 'button',
caption = 'Connect',
tooltip = 'Click to connect to this server.\n' .. i.connected .. '\nVersion: ' .. i.version,
name = instance_id_name
}
Gui.set_data(button, i.id)
apply_button_style(button)
if string.len(i.name) > 1 then
viewer_table.add {
type = 'label',
caption = i.name,
tooltip = i.connected .. '\nVersion: ' .. i.version,
style = 'caption_label'
}
local flow = viewer_table.add {type = 'flow'}
flow.style.horizontal_align = 'right'
flow.style.horizontally_stretchable = true
local empty_flow = viewer_table.add {type = 'flow'}
local button =
empty_flow.add {
type = 'button',
caption = 'Connect',
tooltip = 'Click to connect to this server.\n' .. i.connected .. '\nVersion: ' .. i.version,
name = instance_id_name
}
Gui.set_data(button, i.id)
apply_button_style(button)
if i.id == instance.id then
button.enabled = false
button.tooltip = 'You are here'
elseif i.status == 'unknown' then
button.enabled = i.game_port ~= nil
button.style.font_color = {r = 0.65}
button.style.hovered_font_color = {r = 0.65}
button.style.clicked_font_color = {r = 0.65}
button.style.disabled_font_color = {r = 0.75, g = 0.1, b = 0.1}
button.tooltip = 'Unknown status for this server'
elseif i.status ~= 'running' then
button.enabled = false
button.tooltip = 'This server is offline'
elseif i.version ~= instance.version then
button.enabled = false
button.tooltip = "We're on version: " .. instance.version .. '\nDestination server is on version: ' .. i.version
if i.id == instance.id then
button.enabled = false
button.tooltip = 'You are here'
elseif i.status == 'unknown' then
button.enabled = i.game_port ~= nil
button.style.font_color = {r = 0.65}
button.style.hovered_font_color = {r = 0.65}
button.style.clicked_font_color = {r = 0.65}
button.style.disabled_font_color = {r = 0.75, g = 0.1, b = 0.1}
button.tooltip = 'Unknown status for this server'
elseif i.status ~= 'running' then
button.enabled = false
button.tooltip = 'This server is offline'
elseif i.version ~= instance.version then
button.enabled = false
button.tooltip = "We're on version: " .. instance.version .. '\nDestination server is on version: ' .. i.version
end
end
end
end

View File

@ -8,7 +8,8 @@ local round = math.round
local this = {
modifiers = {},
disabled_modifier = {}
disabled_modifier = {},
rpg_inventory_slot_limit = 320 -- huge inventory lags the server, this fixes it
}
Global.register(
@ -74,7 +75,7 @@ function Public.update_player_modifiers(player)
if disabled_modifiers and disabled_modifiers[k] then
player[modifier] = 0
else
player[modifier] = round(sum_value, 8)
player[modifier] = round(sum_value, 4)
end
end
end
@ -92,9 +93,13 @@ function Public.update_single_modifier(player, modifier, category, value)
if modifiers[k] == modifier and player_modifiers[k] then
if category then
if not player_modifiers[k][category] then
player_modifiers[k][category] = {}
player_modifiers[k][category] = 0
end
player_modifiers[k][category] = value
if category == 'rpg' and modifiers[k] == 'character_inventory_slots_bonus' and player_modifiers[k][category] >= this.rpg_inventory_slot_limit then
player_modifiers[k][category] = this.rpg_inventory_slot_limit - player.force.character_inventory_slots_bonus
end
else
player_modifiers[k] = value
end

View File

@ -286,11 +286,6 @@ for i = 0, 511 do
perm[i + 1] = p[bit32_band(i, 255) + 1]
end
-- special case of dot with 3 inputs
local function dot2(g, x, y)
return x * g[1] + y * g[2]
end
local F2 = 0.5 * (math.sqrt(3.0) - 1.0)
local G2 = (3.0 - math.sqrt(3.0)) / 6.0
@ -317,6 +312,7 @@ function Simplex.d2(xin, yin, seed)
i1 = 0
j1 = 1
end
-- upper triangle, YX order: (0,0)->(0,1)->(1,1)
-- A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and
-- a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where
@ -339,7 +335,7 @@ function Simplex.d2(xin, yin, seed)
n0 = 0.0
else
t0 = t0 * t0
n0 = t0 * t0 * dot2(grad3[gi0 + 1], x0, y0) -- (x,y) of grad3 used for 2D gradient
n0 = t0 * t0 * (x0 * grad3[gi0 + 1][1] + y0 * grad3[gi0 + 1][2]) -- (x,y) of grad3 used for 2D gradient
end
local t1 = 0.5 - x1 * x1 - y1 * y1
@ -347,7 +343,7 @@ function Simplex.d2(xin, yin, seed)
n1 = 0.0
else
t1 = t1 * t1
n1 = t1 * t1 * dot2(grad3[gi1 + 1], x1, y1)
n1 = t1 * t1 * (x1 * grad3[gi1 + 1][1] + y1 * grad3[gi1 + 1][2])
end
local t2 = 0.5 - x2 * x2 - y2 * y2
@ -355,7 +351,7 @@ function Simplex.d2(xin, yin, seed)
n2 = 0.0
else
t2 = t2 * t2
n2 = t2 * t2 * dot2(grad3[gi2 + 1], x2, y2)
n2 = t2 * t2 * (x2 * grad3[gi2 + 1][1] + y2 * grad3[gi2 + 1][2])
end
-- Add contributions from each corner to get the final noise value.

View File

@ -1,3 +1,4 @@
---@diagnostic disable: undefined-field
--luacheck: globals table
local Stats = require 'utils.stats'
local random = math.random