1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2024-12-12 10:04:40 +02:00
RedMew/features/lazy_bastard.lua
2019-01-19 14:17:23 +01:00

158 lines
5.0 KiB
Lua

local Event = require 'utils.event'
local Game = require 'utils.game'
local Command = require 'utils.command'
local Task = require 'utils.task'
local Token = require 'utils.token'
local Retailer = require 'features.retailer'
local round = math.round
local insert = table.insert
local remove = table.remove
local clean_energy_interface = Token.register(function (params)
local entity = params.entity
if not entity or not entity.valid then
-- already removed o.O
return
end
entity.destroy()
end)
if global.config.market.enabled then
local new_items = {
{
name = 'welcome-package',
name_label = 'Lazy bastard welcome package',
type = Retailer.item_types.item_package,
description = 'Contains some goodies to get started',
sprite = 'achievement/lazy-bastard',
stack_limit = 1,
player_limit = 1,
price = 0,
items = {
{name = 'solar-panel', count = 1},
{name = 'roboport', count = 1},
{name = 'coin', count = 30},
{name = 'small-electric-pole', count = 5},
{name = 'construction-robot', count = 2},
},
},
{price = 5, name = 'construction-robot'},
{price = 15, name = 'logistic-robot'},
{price = 50, name = 'roboport'},
{price = 5, name = 'logistic-chest-passive-provider'},
{price = 5, name = 'logistic-chest-active-provider'},
{price = 5, name = 'logistic-chest-buffer'},
{price = 5, name = 'logistic-chest-requester'},
{price = 5, name = 'logistic-chest-storage'},
}
local market_items = require 'resources.market_items'
for i = #market_items, 1, -1 do
local name = market_items[i].name
-- cleanup items we don't need, construction bot has to be replaced for convenience
if name == 'temporary-mining-speed-bonus' or name == 'construction-robot' or name == 'steel-axe' then
remove(market_items, i)
end
end
for i = 1, #new_items do
insert(market_items, i, new_items[i])
end
end
-- disable pickaxes from the start
Event.on_init(function ()
local recipes = game.forces.player.recipes
recipes['iron-axe'].enabled = false
recipes['steel-axe'].enabled = false
end)
-- ensure the recipes are disabled all the time
Event.add(defines.events.on_research_finished, function (event)
local recipes = event.research.force.recipes
recipes['iron-axe'].enabled = false
recipes['steel-axe'].enabled = false
end)
-- players cannot build anything, just place ghosts
Event.add(defines.events.on_built_entity, function(event)
local entity = event.created_entity
if not entity or not entity.valid then
return
end
local name = entity.name
if name == 'entity-ghost' then
return
end
-- replace the entity by a ghost
local direction = entity.direction
local position = entity.position
local surface = entity.surface
local force = entity.force
-- not every item has a ghost, this is the easiest way to prevent errors and stop replacement
pcall(function()
surface.create_entity({
name = 'entity-ghost',
inner_name = name,
direction = direction,
position = position,
force = force,
});
entity.destroy()
-- attempt to give the item back to the player
local player = Game.get_player_by_index(event.player_index)
if not player or not player.valid then
return
end
player.insert(event.stack)
end)
end)
Command.add('lazy-bastard-bootstrap', {
description = 'Puts down the minimum requirements to get started',
admin_only = true,
}, function(_, player)
local surface = player.surface
local force = player.force
local pos = player.position
pos.y = round(pos.y - 4)
pos.x = round(pos.x)
local bot_count = 3
local create_entity = surface.create_entity
local templates = {
{name = 'medium-electric-pole', force = force, position = {x = pos.x - 2, y = pos.y - 1}},
{name = 'roboport', force = force, position = {x = pos.x, y = pos.y}},
{name = 'logistic-chest-storage', force = force, position = {x = pos.x + 1, y = pos.y + 1}},
{name = 'logistic-chest-storage', force = force, position = {x = pos.x - 2, y = pos.y + 1}},
}
for i = 1, #templates do
local entity = create_entity(templates[i])
entity.minable = false
entity.destructible = false
end
for _ = 1, bot_count do
create_entity({name = 'construction-robot', force = force, position = pos})
end
local power_source = create_entity({name = 'hidden-electric-energy-interface', position = pos})
power_source.electric_buffer_size = 30000
power_source.power_production = 30000
power_source.destructible = false
power_source.minable = false
-- in 7 minutes, remove the power source
Task.set_timeout(420, clean_energy_interface, {entity = power_source})
end)