1
0
mirror of https://github.com/Oarcinae/FactorioScenarioMultiplayerSpawn.git synced 2025-03-03 14:42:27 +02:00

Uranium Refining chunk and silo chunk should be working now. Shrank the radius of where you can place the silo.

This commit is contained in:
Oarcinae 2020-06-09 10:58:49 -04:00
parent fba5596c1a
commit 2de868850b
3 changed files with 175 additions and 8 deletions

View File

@ -100,8 +100,8 @@ local function CreateRocketSilo(surface, siloPosition, force)
-- Set tiles below the silo
tiles = {}
for dx = -10,10 do
for dy = -10,10 do
for dx = -6,5 do
for dy = -6,5 do
if (game.active_mods["oarc-restricted-build"]) then
table.insert(tiles, {name = global.ocfg.locked_build_area_tile,
position = {siloPosition.x+dx, siloPosition.y+dy}})
@ -176,7 +176,7 @@ function BuildSiloAttempt(event)
local epos = event.created_entity.position
for k,v in pairs(global.siloPosition) do
if (getDistance(epos, v) < 5) then
if (getDistance(epos, v) <= 1) then
if (event.created_entity.name ~= "entity-ghost") then
SendBroadcastMsg("Rocket silo has been built!")
end

View File

@ -27,6 +27,7 @@ FURNACE_RECIPES = {
CHEMPLANT_ENERGY_PER_CRAFT_SECOND = 210000 * POWER_USAGE_SCALING_FACTOR
REFINERY_ENERGY_PER_CRAFT_SECOND = 420000 * POWER_USAGE_SCALING_FACTOR
ASSEMBLER3_ENERGY_PER_CRAFT_SECOND = (375000 / 1.25) * POWER_USAGE_SCALING_FACTOR
CENTRIFUGE_ENERGY_PER_CRAFT_SECOND = 350000 * POWER_USAGE_SCALING_FACTOR
ENEMY_WORM_TURRETS =
{
@ -48,7 +49,7 @@ NEUTRAL_FORCE_RECIPES =
-- Oil Stuff
["advanced-oil-processing"] = true,
["basic-oil-processing"] = true,
-- ["coal-liquefaction"] = true,
-- ["coal-liquefaction"] = true, -- Too difficult/costly to implement
["heavy-oil-cracking"] = true,
["light-oil-cracking"] = true,
@ -103,6 +104,11 @@ NEUTRAL_FORCE_RECIPES =
["stone-wall"] = true,
["empty-barrel"] = true,
-- Nuclear
["uranium-processing"] = true,
-- ["kovarex-enrichment-process"] = true,
-- ["nuclear-fuel-reprocessing"] = true,
-- ["pipe"] = true,
-- ["pipe-to-ground"] = true,
}
@ -135,6 +141,7 @@ function MagicFactoriesInit()
global.magic_chemplants = {}
global.magic_refineries = {}
global.magic_assemblers = {}
global.magic_centrifuges = {}
MagicFactoryChunkGenerator()
@ -315,7 +322,7 @@ function SpawnAssemblyChunk(chunk_pos)
center_pos = GetCenterTilePosFromChunkPos(chunk_pos)
-- 4 Assemblers
SpawnMagicAssembler({x=center_pos.x-11,y=center_pos.y-11})
({x=center_pos.x-11,y=center_pos.y-11})
SpawnMagicAssembler({x=center_pos.x,y=center_pos.y-11})
SpawnMagicAssembler({x=center_pos.x+11,y=center_pos.y-11})
SpawnMagicAssembler({x=center_pos.x-11,y=center_pos.y+11})
@ -325,6 +332,49 @@ function SpawnAssemblyChunk(chunk_pos)
SpecialChunkHelperText(center_pos)
end
function SpawnCentrifugeChunk(chunk_pos)
center_pos = GetCenterTilePosFromChunkPos(chunk_pos)
-- 1 Centrifuge (MORE THAN ENOUGH!)
SpawnMagicCentrifuge({x=center_pos.x,y=center_pos.y})
SpecialChunkHelperText({x=center_pos.x,y=center_pos.y+3})
end
function SpawnSiloChunk(chunk_pos)
center_pos = GetCenterTilePosFromChunkPos(chunk_pos)
table.insert(global.siloPosition, center_pos)
RenderPermanentGroundText(game.surfaces[GAME_SURFACE_NAME].index,
{x=center_pos.x-3.25,y=center_pos.y+6},
1,
"You can build a silo here!",
{0.7,0.4,0.3,0.8})
-- Set tiles below the silo
tiles = {}
for dx = -6,5 do
for dy = -6,5 do
if (game.active_mods["oarc-restricted-build"]) then
table.insert(tiles, {name = global.ocfg.locked_build_area_tile,
position = {center_pos.x+dx, center_pos.y+dy}})
else
if ((dx % 2 == 0) or (dx % 2 == 0)) then
table.insert(tiles, {name = "concrete",
position = {center_pos.x+dx, center_pos.y+dy}})
else
table.insert(tiles, {name = "hazard-concrete-left",
position = {center_pos.x+dx, center_pos.y+dy}})
end
end
end
end
game.surfaces[GAME_SURFACE_NAME].set_tiles(tiles, true)
end
function SpawnMagicBuilding(entity_name, position)
local direction = defines.direction.north
if (entity_name == "oil-refinery") then
@ -357,6 +407,11 @@ function SpawnMagicAssembler(pos)
table.insert(global.magic_assemblers, SpawnMagicBuilding("assembling-machine-3", pos))
end
function SpawnMagicCentrifuge(pos)
table.insert(global.magic_centrifuges, SpawnMagicBuilding("centrifuge", pos))
end
function MagicFactoriesOnTick()
global.magic_factory_energy_history[game.tick % 60] = 0
@ -364,6 +419,7 @@ function MagicFactoriesOnTick()
MagicChemplantOnTick()
MagicRefineryOnTick()
MagicAssemblerOnTick()
MagicCentrifugeOnTick()
end
function MagicFurnaceOnTick()
@ -721,6 +777,95 @@ function MagicAssemblerOnTick()
global.magic_factory_energy_history[game.tick % 60] = global.magic_factory_energy_history[game.tick % 60] + energy_used
end
function MagicCentrifugeOnTick()
if not global.magic_centrifuges then return end
local energy_used = 0
local energy_share = global.shared_energy_stored/global.magic_building_total_count
for idx,centrifuge in pairs(global.magic_centrifuges) do
if (centrifuge == nil) or (not centrifuge.valid) then
global.magic_centrifuges[idx] = nil
log("Magic centrifuge removed?")
goto continue
end
recipe = centrifuge.get_recipe()
if (not recipe) then
goto continue -- No recipe means do nothing.
end
local energy_cost = recipe.energy * CENTRIFUGE_ENERGY_PER_CRAFT_SECOND
if (energy_share < energy_cost) then goto continue end -- Not enough energy!
local input_inv = centrifuge.get_inventory(defines.inventory.assembling_machine_input)
local input_items = input_inv.get_contents()
for _,v in ipairs(recipe.ingredients) do
if (not input_items[v.name] or (input_items[v.name] < v.amount)) then
goto continue -- Not enough ingredients
end
end
local output_inv = centrifuge.get_inventory(defines.inventory.assembling_machine_output)
local output_item, output_count
-- 10 uranium ore IN
-- .993 uranium-238 and .007 uranium-235 OUT
if (recipe.name == "uranium-processing") then
local rand_chance = math.random()
output_count = 1
if (rand_chance <= .007) then
output_item = "uranium-235"
else
output_item = "uranium-238"
end
-- Check if we can insert at least 1 of BOTH.
if not output_inv.can_insert({name="uranium-235", amount=output_count}) then
goto continue
end
if not output_inv.can_insert({name= "uranium-238", amount=output_count}) then
goto continue
end
output_inv.insert({name=output_item, count=output_count})
if (centrifuge.last_user) then
centrifuge.last_user.force.item_production_statistics.on_flow(output_item, output_count)
end
for _,v in ipairs(recipe.ingredients) do
if (input_items[v.name]) then
input_inv.remove({name=v.name, count=v.amount})
if (centrifuge.last_user) then
centrifuge.last_user.force.item_production_statistics.on_flow(v.name, -v.amount)
end
end
end
else
goto continue -- Unsupported!
end
centrifuge.products_finished = centrifuge.products_finished + 1
-- Track energy usage
energy_used = energy_used + energy_cost
::continue::
end
-- Subtract energy
global.shared_energy_stored = global.shared_energy_stored - energy_used
if (not global.magic_factory_energy_history) then global.magic_factory_energy_history = {} end
global.magic_factory_energy_history[game.tick % 60] = global.magic_factory_energy_history[game.tick % 60] + energy_used
end
COIN_MULTIPLIER = 2
COIN_GENERATION_CHANCES = {

View File

@ -52,16 +52,34 @@ OARC_STORE_MAP_FEATURES =
special_chunks = {
["electric-furnace"] = {
initial_cost = 1000,
limit = 1,
additional_cost = 1000,
multiplier_cost = 2,
limit = 3,
text="Build a special furnace chunk here. Contains 4 furnaces that run at very high speeds. [color=red]Requires energy from the shared storage. Modules have no effect![/color]"},
["oil-refinery"] = {
initial_cost = 1000,
limit = 1,
additional_cost = 1000,
multiplier_cost = 2,
limit = 3,
text="Build a special oil refinery chunk here. Contains 2 refineries and some chemical plants that run at very high speeds. [color=red]Requires energy from the shared storage. Modules have no effect![/color]"},
["assembling-machine-3"] = {
initial_cost = 1000,
additional_cost = 1000,
multiplier_cost = 2,
limit = 3,
text="Build a special assembly machine chunk here. Contains 6 assembling machines that run at very high speeds. [color=red]Requires energy from the shared storage. Modules have no effect![/color]"},
["centrifuge"] = {
initial_cost = 1000,
-- additional_cost = 1000,
-- multiplier_cost = 2,
limit = 1,
text="Build a special assembly machine chunk here. Contains 4 assembling machines that run at very high speeds. [color=red]Requires energy from the shared storage. Modules have no effect![/color]"},
text="Build a special centrifuge chunk here. Contains 1 centrifuge that runs at very high speeds. [color=red]Requires energy from the shared storage. Modules have no effect![/color]"},
["rocket-silo"] = {
initial_cost = 1000,
additional_cost = 0,
multiplier_cost = 2,
-- limit = 2,
text="Convert this special chunk into a rocket launch pad. This allows you to build a rocket silo here!"},
-- ["rocket-silo"] = {cost = 1000, text="Build a special rocket silo chunk here."}, TODO...
},
@ -220,6 +238,10 @@ function OarcMapFeatureStoreButton(event)
result = RequestSpawnSpecialChunk(player, SpawnOilRefineryChunk, button.name)
elseif (button.name == "assembling-machine-3") then
result = RequestSpawnSpecialChunk(player, SpawnAssemblyChunk, button.name)
elseif (button.name == "centrifuge") then
result = RequestSpawnSpecialChunk(player, SpawnAssemblyChunk, button.name)
elseif (button.name == "rocket-silo") then
result = RequestSpawnSpecialChunk(player, SpawnSiloChunk, button.name)
elseif (button.name == "assembling-machine-1") then
SendPlayerToSpawn(player)
result = true