1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-05 13:15:03 +02:00
This commit is contained in:
MewMew 2019-07-23 17:14:17 +02:00
parent 3c07a9f547
commit 92a5e5f666

View File

@ -5,21 +5,45 @@ local math_random = math.random
require 'utils.table'
local search_radius = 6
local explosions = {"explosion", "explosion", "explosion", "medium-explosion", "uranium-cannon-explosion"}
local explosions = {"explosion", "explosion", "explosion", "explosion", "explosion", "explosion", "medium-explosion", "uranium-cannon-explosion", "uranium-cannon-explosion"}
local default_limit = 2
local entity_limits = {
["transport-belt"] = 7,
["transport-belt"] = search_radius * 2 + 1,
["pipe"] = search_radius * 2 + 2,
["pipe-to-ground"] = 2,
["heat-pipe"] = search_radius * 2,
["inserter"] = 3,
["underground-belt"] = 3,
["electric-pole"] = 2,
["assembling-machine"] = 2
["electric-pole"] = 3,
["generator"] = 1,
["assembling-machine"] = 4,
["accumulator"] = 4,
["container"] = search_radius * 2,
["furnace"] = 4,
["mining-drill"] = 1
}
local ignore_list = {
["curved-rail"] = true,
["straight-rail"] = true,
["rail-signal"] = true,
["rail-chain-signal"] = true,
["car"] = true,
["cargo-wagon"] = true,
["locomotive"] = true,
["land-mine"] = true,
["entity-ghost"] = true,
["character"] = true,
["gate"] = true,
["wall"] = true
}
local function error_message()
local errors = {"spaghett", "not found", "cat", "error", "not enough", "pylons", "out of", "limit reached", "void",
"balance", "operation", "alert", "not responding", "angry", "sad", "not working", "can not compute", "unstable location", "invalid",
"gearwheel", "malfunction", "unknown", "can not", "wrong", "dog", "ocelot", "failure", "division by", "zero", "bathwater", "faulty", "conveyor", "too many"
"gearwheel", "malfunctioning", "unknown", "can not", "wrong", "dog", "ocelot", "failure", "division by", "zero", "bathwater", "faulty", "conveyor", "too many",
"ravioli", "pasta", "overflow", "major"
}
table.shuffle_table(errors)
local message = table.concat({errors[1], " ", errors[2], " ", errors[3], "!"})
@ -28,8 +52,8 @@ end
local function count_same_entities(entity)
local same_entity_count = 0
for _, e in pairs(entity.surface.find_entities_filtered({name = entity.name, area = {{entity.position.x - search_radius, entity.position.y - search_radius},{entity.position.x + search_radius, entity.position.y + search_radius}}})) do
if entity.name == e.name and entity.direction == e.direction then
for _, e in pairs(entity.surface.find_entities_filtered({type = entity.type, area = {{entity.position.x - search_radius, entity.position.y - search_radius},{entity.position.x + search_radius, entity.position.y + search_radius}}})) do
if entity.type == e.type and entity.direction == e.direction then
same_entity_count = same_entity_count + 1
end
end
@ -37,20 +61,27 @@ local function count_same_entities(entity)
end
local function spaghett(surface, entity, inventory, player)
if ignore_list[entity.type] then return end
local limit = entity_limits[entity.type]
if not limit then limit = 2 end
if count_same_entities(entity) > limit then
inventory.insert({name = entity.name, count = 1})
surface.create_entity({name = explosions[math_random(1, #explosions)], position = entity.position})
entity.die("player")
if player then
if not global.last_spaghett_error then global.last_spaghett_error = {} end
if not global.last_spaghett_error[player.index] then global.last_spaghett_error[player.index] = 0 end
if game.tick - global.last_spaghett_error[player.index] > 180 then
game.print(error_message(), {r = math.random(200, 255), g = math.random(150, 200), b = math.random(150, 200)})
if game.tick - global.last_spaghett_error[player.index] > 30 then
local gb = math.random(0, 150)
surface.create_entity({
name = "flying-text",
position = entity.position,
text = error_message(),
color = {r = math.random(200, 255), g = math.random(0, 125), b = math.random(0, 125)}
})
global.last_spaghett_error[player.index] = game.tick
end
end
entity.die("player")
end
end
@ -66,6 +97,35 @@ local function on_robot_built_entity(event)
spaghett(event.robot.surface, event.created_entity, event.robot.get_inventory(defines.inventory.robot_cargo))
end
function on_player_created(event)
local force = game.players[event.player_index].force
force.technologies["logistic-system"].enabled = false
force.technologies["construction-robotics"].enabled = false
force.technologies["logistic-robotics"].enabled = false
force.technologies["robotics"].enabled = false
force.technologies["personal-roboport-equipment"].enabled = false
force.technologies["personal-roboport-mk2-equipment"].enabled = false
force.technologies["character-logistic-trash-slots-1"].enabled = false
force.technologies["character-logistic-trash-slots-2"].enabled = false
force.technologies["auto-character-logistic-trash-slots"].enabled = false
force.technologies["worker-robots-storage-1"].enabled = false
force.technologies["worker-robots-storage-2"].enabled = false
force.technologies["worker-robots-storage-3"].enabled = false
force.technologies["character-logistic-slots-1"].enabled = false
force.technologies["character-logistic-slots-2"].enabled = false
force.technologies["character-logistic-slots-3"].enabled = false
force.technologies["character-logistic-slots-4"].enabled = false
force.technologies["character-logistic-slots-5"].enabled = false
force.technologies["character-logistic-slots-6"].enabled = false
force.technologies["worker-robots-speed-1"].enabled = false
force.technologies["worker-robots-speed-2"].enabled = false
force.technologies["worker-robots-speed-3"].enabled = false
force.technologies["worker-robots-speed-4"].enabled = false
force.technologies["worker-robots-speed-5"].enabled = false
force.technologies["worker-robots-speed-6"].enabled = false
end
event.add(defines.events.on_player_created, on_player_created)
event.add(defines.events.on_robot_built_entity, on_robot_built_entity)
event.add(defines.events.on_built_entity, on_built_entity)
event.add(defines.events.on_player_rotated_entity, on_player_rotated_entity)