mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2024-12-26 22:56:43 +02:00
238 lines
7.4 KiB
Lua
238 lines
7.4 KiB
Lua
local Constants = require 'maps.cave_miner_v2.constants'
|
|
local Event = require 'utils.event'
|
|
local Explosives = require "modules.explosives_2"
|
|
local Autostash = require "modules.autostash"
|
|
local Functions = require 'maps.cave_miner_v2.functions'
|
|
local Global = require 'utils.global'
|
|
local Market = require 'maps.cave_miner_v2.market'
|
|
local Server = require 'utils.server'
|
|
local Terrain = require 'maps.cave_miner_v2.terrain'
|
|
local Map_info = require "modules.map_info"
|
|
|
|
require "modules.satellite_score"
|
|
require "modules.hunger"
|
|
require 'modules.no_deconstruction_of_neutral_entities'
|
|
require "modules.rocks_broken_paint_tiles"
|
|
require "modules.rocks_heal_over_time"
|
|
require "modules.rocks_yield_ore_veins"
|
|
|
|
local math_floor = math.floor
|
|
|
|
local cave_miner = {}
|
|
Global.register(
|
|
cave_miner,
|
|
function(tbl)
|
|
cave_miner = tbl
|
|
end
|
|
)
|
|
|
|
local function on_player_joined_game(event)
|
|
--print mining chances
|
|
--for k, v in pairs(table.get_random_weighted_chances(Functions.mining_events)) do game.print(Functions.mining_events[k][3] .. " | " .. math.round(v, 4) .. " | 1 in " .. math_floor(1 / v)) end
|
|
|
|
local player = game.players[event.player_index]
|
|
|
|
Functions.create_top_gui(player)
|
|
Functions.update_top_gui(cave_miner)
|
|
|
|
local tick = game.ticks_played
|
|
if tick == 0 then
|
|
if player.character and player.character.valid then
|
|
player.character.destroy()
|
|
return
|
|
end
|
|
end
|
|
|
|
if player.online_time > 0 then return end
|
|
for name, count in pairs(Constants.starting_items) do
|
|
player.insert({name = name, count = count})
|
|
end
|
|
end
|
|
|
|
local function on_player_changed_position(event)
|
|
local player = game.players[event.player_index]
|
|
if not player.character then return end
|
|
if not player.character.valid then return end
|
|
Functions.reveal(cave_miner, game.surfaces.nauvis, game.surfaces.cave_miner_source, {x = math_floor(player.position.x), y = math_floor(player.position.y)}, 11)
|
|
end
|
|
|
|
local function on_chunk_generated(event)
|
|
local surface = event.surface
|
|
if surface.index == 1 then
|
|
Terrain.out_of_map(event)
|
|
return
|
|
end
|
|
if surface.name == "cave_miner_source" then
|
|
Terrain.generate_cave(event)
|
|
return
|
|
end
|
|
end
|
|
|
|
local function on_market_item_purchased(event)
|
|
Market.offer_bought(event, cave_miner)
|
|
end
|
|
|
|
local function on_player_mined_entity(event)
|
|
local entity = event.entity
|
|
if not entity then return end
|
|
if not entity.valid then return end
|
|
local surface = entity.surface
|
|
local position = entity.position
|
|
if entity.type == "simple-entity" then
|
|
cave_miner.rocks_broken = cave_miner.rocks_broken + 1
|
|
local f = table.get_random_weighted(Functions.mining_events)
|
|
f(cave_miner, entity, event.player_index)
|
|
end
|
|
end
|
|
|
|
local function on_entity_died(event)
|
|
local entity = event.entity
|
|
if not entity then return end
|
|
if not entity.valid then return end
|
|
if Functions.on_entity_died[entity.type] then
|
|
Functions.on_entity_died[entity.type](cave_miner, entity)
|
|
end
|
|
end
|
|
|
|
local function on_entity_spawned(event)
|
|
local spawner = event.spawner
|
|
local unit = event.entity
|
|
local surface = spawner.surface
|
|
Functions.spawn_random_biter(surface, unit.position, 1)
|
|
unit.destroy()
|
|
end
|
|
|
|
local function init(cave_miner)
|
|
local tick = game.ticks_played
|
|
if tick % 60 ~= 0 then return end
|
|
Terrain.roll_source_surface()
|
|
|
|
local surface = game.surfaces.nauvis
|
|
surface.min_brightness = 0.08
|
|
surface.brightness_visual_weights = {0.92, 0.92, 0.92}
|
|
surface.daytime = 0.43
|
|
surface.freeze_daytime = true
|
|
surface.solar_power_multiplier = 3
|
|
|
|
cave_miner.last_reroll_player_name = ""
|
|
cave_miner.reveal_queue = {}
|
|
cave_miner.darkness = {}
|
|
cave_miner.rocks_broken = 0
|
|
cave_miner.pickaxe_tier = 1
|
|
|
|
local force = game.forces.player
|
|
Functions.set_mining_speed(cave_miner, force)
|
|
force.technologies["steel-axe"].enabled = false
|
|
force.technologies["landfill"].enabled = false
|
|
force.technologies["spidertron"].enabled = false
|
|
force.technologies["artillery"].enabled = false
|
|
force.technologies["artillery-shell-range-1"].enabled = false
|
|
force.technologies["artillery-shell-speed-1"].enabled = false
|
|
force.character_inventory_slots_bonus = 0
|
|
|
|
cave_miner.gamestate = "spawn_players"
|
|
end
|
|
|
|
local function spawn_players(cave_miner)
|
|
local tick = game.ticks_played
|
|
if tick % 60 ~= 0 then return end
|
|
Functions.reveal(cave_miner, game.surfaces.nauvis, game.surfaces.cave_miner_source, {x = 0, y = 0}, 8)
|
|
Market.spawn(cave_miner)
|
|
for _, player in pairs(game.connected_players) do
|
|
Functions.spawn_player(player)
|
|
end
|
|
cave_miner.gamestate = "game_in_progress"
|
|
end
|
|
|
|
local game_tasks = {
|
|
[15] = Functions.update_top_gui,
|
|
[30] = function()
|
|
local reveal = cave_miner.reveal_queue[1]
|
|
if not reveal then return end
|
|
local brush_size = 3
|
|
if Constants.reveal_chain_brush_sizes[reveal[1]] then brush_size = Constants.reveal_chain_brush_sizes[reveal[1]] end
|
|
Functions.reveal(
|
|
cave_miner,
|
|
game.surfaces.nauvis,
|
|
game.surfaces.cave_miner_source,
|
|
{x = reveal[2], y = reveal[3]},
|
|
brush_size
|
|
)
|
|
table.remove(cave_miner.reveal_queue, 1)
|
|
end,
|
|
[45] = Functions.darkness,
|
|
}
|
|
|
|
local function game_in_progress(cave_miner)
|
|
local tick = game.ticks_played % 60
|
|
if not game_tasks[tick] then return end
|
|
game_tasks[tick](cave_miner)
|
|
end
|
|
|
|
local gamestates = {
|
|
["init"] = init,
|
|
["spawn_players"] = spawn_players,
|
|
["game_in_progress"] = game_in_progress,
|
|
}
|
|
|
|
local function on_tick()
|
|
gamestates[cave_miner.gamestate](cave_miner)
|
|
end
|
|
|
|
local function on_init()
|
|
cave_miner.reset_counter = 0
|
|
cave_miner.gamestate = "init"
|
|
cave_miner.mining_speed_bonus = 100
|
|
cave_miner.pickaxe_tier = 1
|
|
cave_miner.rocks_broken = 0
|
|
cave_miner.reveal_queue = {}
|
|
cave_miner.buildings_raffle = {}
|
|
|
|
local types = {"furnace", "assembling-machine", "reactor", "artillery-turret", "boiler", "beacon", "generator", "storage-tank", "roboport"}
|
|
for _, e in pairs(game.entity_prototypes) do
|
|
for _, t in pairs(types) do
|
|
if e.type == t then
|
|
table.insert(cave_miner.buildings_raffle, e.name)
|
|
end
|
|
end
|
|
end
|
|
|
|
global.rocks_yield_ore_maximum_amount = 256
|
|
global.rocks_yield_ore_base_amount = 16
|
|
global.rocks_yield_ore_distance_modifier = 0.0064
|
|
|
|
Explosives.set_destructible_tile("out-of-map", 5000)
|
|
Explosives.set_destructible_tile("water", 2000)
|
|
Explosives.set_destructible_tile("water-green", 2000)
|
|
Explosives.set_destructible_tile("deepwater-green", 2500)
|
|
Explosives.set_destructible_tile("deepwater", 2500)
|
|
Explosives.set_destructible_tile("water-shallow", 1500)
|
|
Explosives.set_destructible_tile("water-mud", 1500)
|
|
|
|
game.map_settings.enemy_evolution.destroy_factor = 0
|
|
game.map_settings.enemy_evolution.pollution_factor = 0
|
|
game.map_settings.enemy_evolution.time_factor = 0
|
|
|
|
global.rocks_yield_ore_veins.amount_modifier = 0.20
|
|
global.rocks_yield_ore_veins.chance = 1024
|
|
|
|
local T = Map_info.Pop_info()
|
|
T.localised_category = "cave_miner"
|
|
T.main_caption_color = {r = 200, g = 100, b = 0}
|
|
T.sub_caption_color = {r = 0, g = 175, b = 175}
|
|
|
|
Autostash.insert_into_furnace(true)
|
|
Autostash.insert_into_wagon(true)
|
|
end
|
|
|
|
Event.on_init(on_init)
|
|
Event.add(defines.events.on_tick, on_tick)
|
|
Event.add(defines.events.on_chunk_generated, on_chunk_generated)
|
|
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
|
|
Event.add(defines.events.on_player_changed_position, on_player_changed_position)
|
|
Event.add(defines.events.on_market_item_purchased, on_market_item_purchased)
|
|
Event.add(defines.events.on_player_mined_entity, on_player_mined_entity)
|
|
Event.add(defines.events.on_entity_spawned, on_entity_spawned)
|
|
Event.add(defines.events.on_entity_died, on_entity_died)
|
|
|
|
require "maps.cave_miner_v2.rocks_yield_ore" |