1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-03 13:12:11 +02:00

new modules

This commit is contained in:
MewMew 2018-12-31 03:47:53 +01:00
parent 9d26b8dfce
commit dc23ffa2ba
3 changed files with 196 additions and 16 deletions

View File

@ -0,0 +1,74 @@
-- enemy units yield coins -- by mewmew
local event = require 'utils.event'
local insert = table.insert
local coin_yield = {
["small-biter"] = 1,
["medium-biter"] = 2,
["big-biter"] = 3,
["behemoth-biter"] = 5,
["small-spitter"] = 1,
["medium-spitter"] = 2,
["big-spitter"] = 3,
["behemoth-spitter"] = 5,
["spitter-spawner"] = 32,
["biter-spawner"] = 32,
["small-worm-turret"] = 8,
["medium-worm-turret"] = 16,
["big-worm-turret"] = 24
}
local entities_that_earn_coins = {
["artillery-turret"] = true,
["gun-turret"] = true,
["laser-turret"] = true,
["flamethrower-turret"] = true
}
local function on_entity_died(event)
if event.entity.force.name ~= "enemy" then return end
if not coin_yield[event.entity.name] then return end
local players_to_reward = {}
local reward_has_been_given = false
if event.cause then
if event.cause.valid then
if event.cause.name == "player" then
insert(players_to_reward, event.cause)
reward_has_been_given = true
end
if event.cause.type == "car" then
player = event.cause.get_driver()
passenger = event.cause.get_passenger()
if player then insert(players_to_reward, player.player) end
if passenger then insert(players_to_reward, passenger.player) end
reward_has_been_given = true
end
if event.cause.type == "locomotive" then
train_passengers = event.cause.train.passengers
if train_passengers then
for _, passenger in pairs(train_passengers) do
insert(players_to_reward, passenger)
end
reward_has_been_given = true
end
end
for _, player in pairs(players_to_reward) do
player.insert({name = "coin", count = coin_yield[event.entity.name]})
end
end
if entities_that_earn_coins[event.cause.name] then
event.entity.surface.spill_item_stack(event.cause.position,{name = "coin", count = coin_yield[event.entity.name]}, true)
reward_has_been_given = true
end
end
if reward_has_been_given == false then
event.entity.surface.spill_item_stack(event.entity.position,{name = "coin", count = coin_yield[event.entity.name]}, true)
end
end
event.add(defines.events.on_entity_died, on_entity_died)

View File

@ -0,0 +1,32 @@
-- spawners release biters on death -- by mewmew
local event = require 'utils.event'
local math_random = math.random
local biter_building_inhabitants = {
[1] = {{"small-biter",8,16}},
[2] = {{"small-biter",12,24}},
[3] = {{"small-biter",8,16},{"medium-biter",1,2}},
[4] = {{"small-biter",4,8},{"medium-biter",4,8}},
[5] = {{"small-biter",3,5},{"medium-biter",8,12}},
[6] = {{"small-biter",3,5},{"medium-biter",5,7},{"big-biter",1,2}},
[7] = {{"medium-biter",6,8},{"big-biter",3,5}},
[8] = {{"medium-biter",2,4},{"big-biter",6,8}},
[9] = {{"medium-biter",2,3},{"big-biter",7,9}},
[10] = {{"big-biter",4,8},{"behemoth-biter",3,4}}
}
local function on_entity_died(event)
if event.entity.type == "unit-spawner" then
local e = math.ceil(game.forces.enemy.evolution_factor*10, 0)
for _, t in pairs (biter_building_inhabitants[e]) do
for x = 1, math_random(t[2],t[3]), 1 do
local p = event.entity.surface.find_non_colliding_position(t[1] , event.entity.position, 6, 1)
if p then event.entity.surface.create_entity {name=t[1], position=p} end
end
end
return
end
end
event.add(defines.events.on_entity_died, on_entity_died)

View File

@ -8,6 +8,8 @@ local simplex_noise = require 'utils.simplex_noise'
local simplex_noise = simplex_noise.d2
require "maps.modules.splice"
require "maps.modules.explosive_biters"
require "maps.modules.biters_yield_coins"
require "maps.modules.spawners_contain_biters"
local spawn_turret_amount = 8
@ -52,12 +54,46 @@ local function send_attack_group(surface)
local unit_group = surface.create_unit_group({position=pos, force="enemy"})
for i = 1, global.night_count * 4, 1 do
local group_size = 4 + (global.night_count * 4)
if group_size > 250 then group_size = 250 end
for i = 1, group_size, 1 do
if not biters[i] then break end
unit_group.add_member(biters[i])
end
unit_group.set_command({type = defines.command.attack_area, destination = {0,0}, radius = 32, distraction = defines.distraction.by_anything})
if global.rocket_silo.valid then
unit_group.set_command({
type = defines.command.compound,
structure_type = defines.compound_command.return_last,
commands = {
{
type = defines.command.attack_area,
destination = {x = 0, y = 0},
radius = 48,
distraction=defines.distraction.by_anything
},
{
type = defines.command.attack,
target = global.rocket_silo,
distraction = defines.distraction.by_enemy
}
}
})
else
unit_group.set_command({
type = defines.command.compound,
structure_type = defines.compound_command.return_last,
commands = {
{
type = defines.command.attack_area,
destination = {x = 0, y = 0},
radius = 48,
distraction=defines.distraction.by_anything
}
}
})
end
end
local function set_daytime_modifiers(surface)
@ -77,7 +113,9 @@ local function set_nighttime_modifiers(surface)
global.splice_modifier = 1
else
global.night_count = global.night_count + 1
global.splice_modifier = global.splice_modifier + 0.33
--if game.forces["enemy"].evolution_factor > 0.75 then
global.splice_modifier = global.splice_modifier + 0.25
--end
end
for _, player in pairs(game.connected_players) do
@ -152,17 +190,17 @@ local function generate_spawn_area(surface)
local ore_positions = {{x = -16, y = -16},{x = 16, y = -16},{x = -16, y = 16},{x = 16, y = 16}}
ore_positions = shuffle(ore_positions)
map_functions.draw_smoothed_out_ore_circle(ore_positions[1], "copper-ore", surface, 15, 2500)
map_functions.draw_smoothed_out_ore_circle(ore_positions[2], "iron-ore", surface, 15, 2500)
map_functions.draw_smoothed_out_ore_circle(ore_positions[3], "coal", surface, 15, 1500)
map_functions.draw_smoothed_out_ore_circle(ore_positions[4], "stone", surface, 15, 1500)
map_functions.draw_oil_circle({x = 0, y = 0}, "crude-oil", surface, 8, 200000)
map_functions.draw_smoothed_out_ore_circle(ore_positions[1], "copper-ore", surface, 18, 2500)
map_functions.draw_smoothed_out_ore_circle(ore_positions[2], "iron-ore", surface, 18, 2500)
map_functions.draw_smoothed_out_ore_circle(ore_positions[3], "coal", surface, 18, 2500)
map_functions.draw_smoothed_out_ore_circle(ore_positions[4], "stone", surface, 18, 2500)
local lake_size = 14
local lake_distance = fort_size - (lake_size + fort_wall_width)
local lake_positioons = {{x = lake_distance * -1, y = lake_distance * -1},{x = lake_distance, y = lake_distance * -1},{x = lake_distance, y = lake_distance},{x = lake_distance * -1, y = lake_distance}}
lake_positioons = shuffle(lake_positioons)
map_functions.draw_noise_tile_circle(lake_positioons[1], "water", surface, lake_size)
local lake_positions = {{x = lake_distance * -1, y = lake_distance * -1},{x = lake_distance, y = lake_distance * -1},{x = lake_distance, y = lake_distance},{x = lake_distance * -1, y = lake_distance}}
lake_positions = shuffle(lake_positions)
map_functions.draw_noise_tile_circle(lake_positions[1], "water", surface, lake_size)
map_functions.draw_oil_circle(lake_positions[2], "crude-oil", surface, 8, 200000)
turrets = shuffle(turrets)
local x = spawn_turret_amount
@ -177,6 +215,12 @@ local function generate_spawn_area(surface)
if x == 0 then break end
end
end
global.rocket_silo = surface.create_entity({name = "rocket-silo", position = {0, 0}, force = "player"})
global.rocket_silo.minable = false
local radius = 256
game.forces.player.chart(surface, {{x = -1 * radius, y = -1 * radius}, {x = radius, y = radius}})
end
local function on_chunk_generated(event)
@ -194,6 +238,16 @@ local function on_chunk_generated(event)
end
end
local function on_entity_damaged(event)
if not event.cause then return end
if event.entity.valid then
if event.entity == global.rocket_silo then
if event.cause.force.name == "enemy" then return end
event.entity.health = event.entity.health + event.final_damage_amount
end
end
end
local function on_tick(event)
if game.tick % 600 ~= 0 then return end
local surface = game.surfaces["nightfall"]
@ -205,6 +259,26 @@ local function on_tick(event)
else
set_daytime_modifiers(surface)
end
if global.rocket_silo then
if global.rocket_silo.valid then return end
end
if game.tick < 3600 then return end
if not global.game_restart_timer then
global.game_restart_timer = 7200
else
if global.game_restart_timer < 0 then return end
global.game_restart_timer = global.game_restart_timer - 600
end
if global.game_restart_timer % 1800 == 0 then
if global.game_restart_timer > 0 then game.print("Map will restart in " .. global.game_restart_timer / 60 .. " seconds!", { r=0.22, g=0.88, b=0.22}) end
if global.game_restart_timer == 0 then
game.print("Map is restarting!", { r=0.22, g=0.88, b=0.22})
game.write_file("commandPipe", ":loadscenario --force", false, 0)
end
end
end
local function on_player_joined_game(event)
@ -214,7 +288,7 @@ local function on_player_joined_game(event)
local map_gen_settings = {}
map_gen_settings.water = "small"
map_gen_settings.starting_area = "small"
map_gen_settings.cliff_settings = {cliff_elevation_interval = 5, cliff_elevation_0 = 5}
map_gen_settings.cliff_settings = {cliff_elevation_interval = 35, cliff_elevation_0 = 35}
map_gen_settings.autoplace_controls = {
["coal"] = {frequency = "high", size = "very-big", richness = "normal"},
["stone"] = {frequency = "high", size = "very-big", richness = "normal"},
@ -234,12 +308,11 @@ local function on_player_joined_game(event)
local radius = 512
game.forces.player.chart(surface, {{x = -1 * radius, y = -1 * radius}, {x = radius, y = radius}})
----game.map_settings.enemy_evolution.destroy_factor = 0
--game.map_settings.enemy_evolution.destroy_factor = 0
--game.map_settings.enemy_evolution.time_factor = 0
--game.map_settings.enemy_evolution.pollution_factor = 0
game.forces.player.set_ammo_damage_modifier("shotgun-shell", 1)
--game.forces.player.set_turret_attack_modifier("flamethrower-turret", -0.5)
global.fish_defense_init_done = true
end
@ -255,16 +328,17 @@ local function on_player_joined_game(event)
local surface = game.surfaces["nightfall"]
if player.online_time < 2 and surface.is_chunk_generated({0,0}) then
player.teleport(surface.find_non_colliding_position("player", {0, 0}, 50, 1), "nightfall")
player.teleport(surface.find_non_colliding_position("player", {0, 8}, 50, 1), "nightfall")
else
if player.online_time < 2 then
player.teleport({0, 0}, "nightfall")
player.teleport({0, 8}, "nightfall")
end
end
create_time_gui(player)
end
event.add(defines.events.on_entity_damaged, on_entity_damaged)
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)