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

168 lines
6.6 KiB
Lua
Raw Normal View History

2021-03-24 20:14:12 +02:00
--luacheck: ignore
2021-03-24 17:46:00 +02:00
local Immersive_cargo_wagons = require 'modules.immersive_cargo_wagons.main'
2019-10-28 18:38:36 +02:00
local Public = {}
2020-04-26 18:07:27 +02:00
local market_offers = {
2021-03-24 17:46:00 +02:00
{price = {{'coin', 4}}, offer = {type = 'give-item', item = 'raw-fish'}},
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'wood', count = 50}},
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'iron-ore', count = 50}},
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'copper-ore', count = 50}},
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'stone', count = 50}},
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'coal', count = 50}},
{price = {{'coin', 20}}, offer = {type = 'give-item', item = 'uranium-ore', count = 50}},
{price = {{'coin', 8}}, offer = {type = 'give-item', item = 'crude-oil-barrel', count = 1}},
{price = {{'explosives', 5}, {'steel-plate', 1}, {'coin', 1}}, offer = {type = 'give-item', item = 'land-mine', count = 1}}
2020-04-26 18:07:27 +02:00
}
2019-10-28 18:38:36 +02:00
function Public.locomotive_spawn(surface, position)
2021-03-24 17:46:00 +02:00
for y = -6, 6, 2 do
surface.create_entity({name = 'straight-rail', position = {position.x, position.y + y}, force = 'player', direction = 0})
end
global.locomotive = surface.create_entity({name = 'locomotive', position = {position.x, position.y + -3}, force = 'player'})
global.locomotive.get_inventory(defines.inventory.fuel).insert({name = 'wood', count = 100})
global.locomotive_cargo = surface.create_entity({name = 'cargo-wagon', position = {position.x, position.y + 3}, force = 'player'})
global.locomotive_cargo.get_inventory(defines.inventory.cargo_wagon).insert({name = 'raw-fish', count = 1})
rendering.draw_light(
{
sprite = 'utility/light_medium',
scale = 5.5,
intensity = 1,
minimum_darkness = 0,
oriented = true,
color = {255, 255, 255},
target = global.locomotive,
surface = surface,
visible = true,
only_in_alt_mode = false
}
)
rendering.draw_light(
{
sprite = 'utility/light_medium',
scale = 5.5,
intensity = 1,
minimum_darkness = 0,
oriented = true,
color = {255, 255, 255},
target = global.locomotive_cargo,
surface = surface,
visible = true,
only_in_alt_mode = false
}
)
global.locomotive.color = {0, 255, 0}
global.locomotive_cargo.minable = false
global.locomotive.minable = false
for y = -1, 0, 0.05 do
local scale = math.random(50, 100) * 0.01
rendering.draw_sprite(
{
sprite = 'item/raw-fish',
orientation = math.random(0, 100) * 0.01,
x_scale = scale,
y_scale = scale,
tint = {math.random(75, 255), math.random(75, 255), math.random(75, 255)},
render_layer = 'selection-box',
target = global.locomotive_cargo,
target_offset = {-0.7 + math.random(0, 140) * 0.01, y},
surface = surface
}
)
end
local wagon = Immersive_cargo_wagons.register_wagon(global.locomotive)
wagon.entity_count = 999
local wagon = Immersive_cargo_wagons.register_wagon(global.locomotive_cargo)
wagon.entity_count = 999
local surface = wagon.surface
local center_position = {
x = wagon.area.left_top.x + (wagon.area.right_bottom.x - wagon.area.left_top.x) * 0.5,
y = wagon.area.left_top.y + (wagon.area.right_bottom.y - wagon.area.left_top.y) * 0.5
}
local position = surface.find_non_colliding_position('market', center_position, 128, 0.5)
local market = surface.create_entity({name = 'market', position = position, force = 'neutral', create_build_effect_smoke = false})
market.minable = false
market.destructible = false
for _, offer in pairs(market_offers) do
market.add_market_item(offer)
end
local position = surface.find_non_colliding_position('market', center_position, 128, 0.5)
local e = surface.create_entity({name = 'big-biter', position = position, force = 'player', create_build_effect_smoke = false})
e.ai_settings.allow_destroy_when_commands_fail = false
e.ai_settings.allow_try_return_to_spawner = false
for x = center_position.x - 5, center_position.x + 5, 1 do
for y = center_position.y - 5, center_position.y + 5, 1 do
if math.random(1, 2) == 1 then
surface.spill_item_stack({x + math.random(0, 9) * 0.1, y + math.random(0, 9) * 0.1}, {name = 'raw-fish', count = 1}, false)
end
surface.set_tiles({{name = 'blue-refined-concrete', position = {x, y}}}, true)
end
end
for x = center_position.x - 3, center_position.x + 3, 1 do
for y = center_position.y - 3, center_position.y + 3, 1 do
if math.random(1, 2) == 1 then
surface.spill_item_stack({x + math.random(0, 9) * 0.1, y + math.random(0, 9) * 0.1}, {name = 'raw-fish', count = 1}, false)
end
surface.set_tiles({{name = 'cyan-refined-concrete', position = {x, y}}}, true)
end
end
2019-10-06 18:16:32 +02:00
end
2019-11-14 18:54:28 +02:00
function Public.fish_tag()
2021-03-24 17:46:00 +02:00
if not global.locomotive_cargo then
return
end
if not global.locomotive_cargo.valid then
return
end
if not global.locomotive_cargo.surface then
return
end
if not global.locomotive_cargo.surface.valid then
return
end
if global.locomotive_tag then
if global.locomotive_tag.valid then
if global.locomotive_tag.position.x == global.locomotive_cargo.position.x and global.locomotive_tag.position.y == global.locomotive_cargo.position.y then
return
end
global.locomotive_tag.destroy()
end
end
global.locomotive_tag =
global.locomotive_cargo.force.add_chart_tag(
global.locomotive_cargo.surface,
{
icon = {type = 'item', name = 'raw-fish'},
position = global.locomotive_cargo.position,
text = ' '
}
)
2019-10-10 21:33:54 +02:00
end
2019-11-20 20:26:34 +02:00
2019-11-14 18:54:28 +02:00
function Public.set_player_spawn_and_refill_fish()
2021-03-24 17:46:00 +02:00
if not global.locomotive_cargo then
return
end
if not global.locomotive_cargo.valid then
return
end
local position = global.locomotive_cargo.surface.find_non_colliding_position('stone-furnace', global.locomotive_cargo.position, 16, 2)
if position then
game.forces.player.set_spawn_position({x = position.x, y = position.y}, global.locomotive_cargo.surface)
end
return true
2019-10-22 08:29:30 +02:00
end
2019-10-18 07:01:14 +02:00
2020-04-08 20:28:02 +02:00
return Public