1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-07 13:31:40 +02:00

biter_battles > rainbow ore

This commit is contained in:
MewMew 2019-03-15 01:39:49 +01:00
parent 0643a54c63
commit 7cc7ba2d60
5 changed files with 112 additions and 39 deletions

View File

@ -495,9 +495,9 @@ local function on_player_joined_game(event)
}
game.create_surface("surface", map_gen_settings)
game.map_settings.enemy_evolution.time_factor = 0.000005
game.map_settings.enemy_evolution.destroy_factor = 0.004
game.map_settings.enemy_evolution.pollution_factor = 0.000025
game.map_settings.enemy_evolution.time_factor = 0.000004
game.map_settings.enemy_evolution.destroy_factor = 0.0035
game.map_settings.enemy_evolution.pollution_factor = 0.000005
game.map_settings.enemy_expansion.enabled = true
game.map_settings.enemy_expansion.min_expansion_cooldown = 18000
game.map_settings.enemy_expansion.max_expansion_cooldown = 72000
@ -538,6 +538,8 @@ local function on_player_joined_game(event)
game.forces[name].set_turret_attack_modifier("flamethrower-turret", -0.5)
--game.forces[name].set_ammo_damage_modifier("artillery-shell", -0.95)
game.forces[name].set_ammo_damage_modifier("shotgun-shell", 0.5)
game.forces[name].research_queue_enabled = true
end
game.forces["spectator"].technologies["toolbelt"].researched=true

View File

@ -11,10 +11,10 @@ local function init_surface()
map_gen_settings.starting_area = "5"
map_gen_settings.cliff_settings = {cliff_elevation_interval = 12, cliff_elevation_0 = 32}
map_gen_settings.autoplace_controls = {
["coal"] = {frequency = "4", size = "1", richness = "1"},
["stone"] = {frequency = "4", size = "1", richness = "1"},
["copper-ore"] = {frequency = "4", size = "1", richness = "1"},
["iron-ore"] = {frequency = "4", size = "1", richness = "1"},
["coal"] = {frequency = "3", size = "1", richness = "1"},
["stone"] = {frequency = "3", size = "1", richness = "1"},
["copper-ore"] = {frequency = "3", size = "1", richness = "1"},
["iron-ore"] = {frequency = "3", size = "1", richness = "1"},
["uranium-ore"] = {frequency = "2", size = "1", richness = "1"},
["crude-oil"] = {frequency = "3", size = "1", richness = "1"},
["trees"] = {frequency = "2", size = "1", richness = "1"},
@ -72,12 +72,27 @@ local function init_forces(surface)
local f = game.forces["player"]
f.set_spawn_position({0,0},surface)
local p = game.permissions.create_group("spectator")
for action_name, _ in pairs(defines.input_action) do
p.set_allows_action(defines.input_action[action_name], false)
end
p.set_allows_action(defines.input_action.write_to_console, true)
p.set_allows_action(defines.input_action.gui_click, true)
p.set_allows_action(defines.input_action.gui_selection_state_changed, true)
p.set_allows_action(defines.input_action.start_walking, true)
p.set_allows_action(defines.input_action.open_kills_gui, true)
p.set_allows_action(defines.input_action.open_character_gui, true)
p.set_allows_action(defines.input_action.edit_permission_group, true)
p.set_allows_action(defines.input_action.toggle_show_entity_info, true)
global.spectator_rejoin_delay = {}
for _, force in pairs(game.forces) do
game.forces[force.name].technologies["artillery"].enabled = false
game.forces[force.name].technologies["artillery-shell-range-1"].enabled = false
game.forces[force.name].technologies["artillery-shell-speed-1"].enabled = false
game.forces[force.name].technologies["atomic-bomb"].enabled = false
game.forces[force.name].set_ammo_damage_modifier("shotgun-shell", 1)
game.forces[force.name].research_queue_enabled = true
end
global.game_lobby_active = true
@ -99,9 +114,10 @@ local function on_player_joined_game(event)
player.teleport({0,0}, surface)
end
player.character.destructible = false
game.permissions.get_group("spectator").add_player(player.name)
end
--player.character.destroy()
player.character.destroy()
end
event.add(defines.events.on_player_joined_game, on_player_joined_game)

View File

@ -1,4 +1,5 @@
local event = require 'utils.event'
local math_random = math.random
local particles = {"coal-particle", "copper-ore-particle", "iron-ore-particle", "stone-particle"}
local function create_fireworks_rocket(surface, position)
@ -178,9 +179,10 @@ local function on_entity_died(event)
if event.entity == global.rocket_silo.south or event.entity == global.rocket_silo.north then
for _, player in pairs(game.connected_players) do
player.play_sound{path="utility/game_won", volume_modifier=1}
end
show_mvps(player)
fireworks(surface)
if player.gui.left["bb_main_gui"] then player.gui.left["bb_main_gui"].destroy() end
show_mvps(player)
end
fireworks(event.entity.surface)
end
end

View File

@ -224,44 +224,61 @@ local function refresh_gui()
end
local function join_team(player, force_name)
if not global.chosen_team then global.chosen_team = {} end
local surface = player.surface
if global.chosen_team[player.name] then
local p = surface.find_non_colliding_position("player", game.forces[global.chosen_team[player.name]].get_spawn_position(surface), 3, 1)
local enemy_team = "south"
if force_name == "south" then enemy_team = "north" end
if #game.forces[force_name].connected_players > #game.forces[enemy_team].connected_players then
player.print("Team " .. force_name .. " has too many players currently.", {r=0.98, g=0.66, b=0.22})
return
end
if global.chosen_team[player.name] then
if game.tick - global.spectator_rejoin_delay[player.name] < 1800 then
player.print(
"Not ready to return to your team yet. Please wait " .. 30-(math.ceil((game.tick - global.spectator_rejoin_delay[player.name])/60)) .. " seconds.",
{r=0.98, g=0.66, b=0.22}
)
return
end
local p = surface.find_non_colliding_position("player", game.forces[force_name].get_spawn_position(surface), 8, 0.5)
player.teleport(p, surface)
player.force = game.forces[force_name]
local p = game.permissions.get_group("Default")
local p = game.permissions.get_group("Default")
p.add_player(player.name)
game.print("Team " .. player.force.name .. " player " .. player.name .. " is no longer spectating.", {r=0.98, g=0.66, b=0.22})
return
end
local enemy_team = "south"
if force_name == "south" then enemy_team = "north" end
if #game.forces[force_name].connected_players > #game.forces[enemy_team].connected_players then
player.print("Team " .. force_name .. " has too many players currently.", {r=0.98, g=0.66, b=0.22})
else
player.teleport(surface.find_non_colliding_position("player", game.forces[force_name].get_spawn_position(surface), 3, 1))
player.force = game.forces[force_name]
game.print(player.name .. " has joined team " .. player.force.name .. "!", {r=0.98, g=0.66, b=0.22})
local i = player.get_inventory(defines.inventory.player_main)
player.insert {name = 'pistol', count = 1}
player.insert {name = 'raw-fish', count = 3}
player.insert {name = 'firearm-magazine', count = 16}
player.insert {name = 'iron-gear-wheel', count = 4}
player.insert {name = 'iron-plate', count = 8}
global.chosen_team[player.name] = force_name
end
player.teleport(surface.find_non_colliding_position("player", game.forces[force_name].get_spawn_position(surface), 3, 1))
player.force = game.forces[force_name]
game.print(player.name .. " has joined team " .. player.force.name .. "!", {r=0.98, g=0.66, b=0.22})
local i = player.get_inventory(defines.inventory.player_main)
i.clear()
player.insert {name = 'pistol', count = 1}
player.insert {name = 'raw-fish', count = 3}
player.insert {name = 'firearm-magazine', count = 16}
player.insert {name = 'iron-gear-wheel', count = 4}
player.insert {name = 'iron-plate', count = 8}
global.chosen_team[player.name] = force_name
end
local function spectate(player)
player.teleport(player.surface.find_non_colliding_position("player", {0,0}, 2, 1))
player.force = game.forces.spectator
game.print(player.name .. " is spectating.", { r=0.98, g=0.66, b=0.22})
local permission_group = game.permissions.get_group("spectator")
permission_group.add_player(player.name)
global.spectator_rejoin_delay[player.name] = game.tick
create_main_gui(player)
end
local function join_gui_click(name, player)
local team = {
["join_north_button"] = "north",
["join_south_button"] = "south"
}
}
if global.game_lobby_active then
if player.admin then
join_team(player, team[name])
@ -293,19 +310,33 @@ local function on_gui_click(event)
--if food_names[name] then feed_the_biters(player, name) return end
if name == "bb_leave_spectate" then join_team(player, global.chosen_team[player.name]) end
if name == "bb_spectate" then
if player.position.y < 100 and player.position.y > -100 and player.position.x < 100 and player.position.x > -100 then
--join_team(player, "spectator")
if player.position.y ^ 2 + player.position.x ^ 2 < 12000 then
spectate(player)
else
player.print("You are too far away from spawn to spectate.",{ r=0.98, g=0.66, b=0.22})
end
end
return
end
if name == "bb_hide_players" then
global.bb_view_players[player.name] = false
create_main_gui(player)
end
if name == "bb_view_players" then
global.bb_view_players[player.name] = true
create_main_gui(player)
end
end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
if not global.bb_view_players then global.bb_view_players = {} end
if not global.chosen_team then global.chosen_team = {} end
global.bb_view_players[player.name] = false
create_sprite_button(player)

View File

@ -4,6 +4,7 @@ local math_random = math.random
local simplex_noise = require 'utils.simplex_noise'.d2
local create_tile_chain = require "functions.create_tile_chain"
local spawn_circle_size = 28
local ores = {"copper-ore", "iron-ore", "stone", "coal"}
local function get_noise(name, pos)
local seed = game.surfaces[1].map_gen_settings.seed
@ -81,6 +82,26 @@ local function generate_river(event)
end
end
local function generate_rainbow_ore(event)
local surface = event.surface
local left_top_x = event.area.left_top.x
local left_top_y = event.area.left_top.y
for x = 0, 31, 1 do
for y = 0, 31, 1 do
local pos = {x = left_top_x + x, y = left_top_y + y}
if surface.can_place_entity({name = "iron-ore", position = pos}) then
local noise = get_noise(1, pos)
if noise > 0.83 then
local amount = math_random(1500, 2000) + math.sqrt(pos.x ^ 2 + pos.y ^ 2) * noise * 4
local i = math.ceil(math.abs(noise * 25)) % 4
if i == 0 then i = 4 end
surface.create_entity({name = ores[i], position = pos, amount = amount})
end
end
end
end
end
local function on_chunk_generated(event)
if event.area.left_top.y >= 0 then return end
local surface = event.surface
@ -94,9 +115,10 @@ local function on_chunk_generated(event)
generate_river(event)
generate_circle_spawn(event)
generate_silos(event)
generate_rainbow_ore(event)
if event.area.left_top.y == -160 and event.area.left_top.x == -160 then
for _, e in pairs(surface.find_entities_filtered({area = {{-8,-8},{8,8}}})) do
for _, e in pairs(surface.find_entities_filtered({area = {{-10,-10},{10,10}}})) do
if e.name ~= "player" then e.destroy() end
end
end