From 11ff85ca74a3f4a6686516670e14fee8c2b4da0d Mon Sep 17 00:00:00 2001 From: TheAIBot Date: Tue, 23 Aug 2016 21:12:02 +0200 Subject: [PATCH] fixed desync --- clusterio_0.0.2/control.lua | 72 +++++++++++++++++++++++++++---------- clusterio_0.0.2/data.lua | 4 +-- 2 files changed, 55 insertions(+), 21 deletions(-) diff --git a/clusterio_0.0.2/control.lua b/clusterio_0.0.2/control.lua index 994ccf7a..22f10871 100644 --- a/clusterio_0.0.2/control.lua +++ b/clusterio_0.0.2/control.lua @@ -8,23 +8,39 @@ function OnBuiltEntity(event) local entity = event.created_entity --only add entities that are not ghosts if entity.type ~= "entity-ghost" then - if entity.name == INPUT_CHEST_NAME then - global.inputChests = global.inputChests or {} - --add the chests to a lists if these chests so they can be interated over - global.inputChests[HashPosition(entity.position)] = entity - elseif entity.name == OUTPUT_CHEST_NAME then - global.outputChests = global.outputChests or {} - --add the chests to a lists if these chests so they can be interated over - global.outputChests[HashPosition(entity.position)] = entity - elseif entity.name == INPUT_TANK_NAME then - global.inputTanks = global.inputTanks or {} - --add the chests to a lists if these chests so they can be interated over - global.inputTanks[HashPosition(entity.position)] = entity - elseif entity.name == OUTPUT_TANK_NAME then - global.outputTanks = global.outputTanks or {} - --add the chests to a lists if these chests so they can be interated over - global.outputTanks[HashPosition(entity.position)] = entity - end + + end +end + +function AddAllEntitiesOfName(name) + for k, surface in pairs(game.surfaces) do + AddEntities(surface.find_entities_filtered({["name"] = name})) + end +end + +function AddEntities(entities) + for k, entity in pairs(entities) do + AddEntity(entity) + end +end + +function AddEntity(entity) + if entity.name == INPUT_CHEST_NAME then + global.inputChests = global.inputChests or {} + --add the chests to a lists if these chests so they can be interated over + global.inputChests[HashPosition(entity.position)] = entity + elseif entity.name == OUTPUT_CHEST_NAME then + global.outputChests = global.outputChests or {} + --add the chests to a lists if these chests so they can be interated over + global.outputChests[HashPosition(entity.position)] = entity + elseif entity.name == INPUT_TANK_NAME then + global.inputTanks = global.inputTanks or {} + --add the chests to a lists if these chests so they can be interated over + global.inputTanks[HashPosition(entity.position)] = entity + elseif entity.name == OUTPUT_TANK_NAME then + global.outputTanks = global.outputTanks or {} + --add the chests to a lists if these chests so they can be interated over + global.outputTanks[HashPosition(entity.position)] = entity end end @@ -66,9 +82,8 @@ script.on_event(defines.events.on_preplayer_mined_item, function(event) end) - - script.on_event(defines.events.on_tick, function(event) + global.inputChests = global.inputChests or {} global.outputChests = global.outputChests or {} global.inputTanks = global.inputTanks or {} @@ -78,6 +93,23 @@ script.on_event(defines.events.on_tick, function(event) local todo = game.tick % UPATE_RATE + if global.previousPlayerCount == nil or global.previousPlayerCount ~= #game.players then + global.outputList = {} + global.inputList = {} + global.itemStorage = {} + + global.inputChests = {} + global.outputChests = {} + global.inputTanks = {} + global.outputTanks = {} + + AddAllEntitiesOfName(INPUT_CHEST_NAME) + AddAllEntitiesOfName(OUTPUT_CHEST_NAME) + AddAllEntitiesOfName(INPUT_TANK_NAME) + AddAllEntitiesOfName(OUTPUT_TANK_NAME) + print("reset") + end + if todo == 0 then HandleInputChests() elseif todo == 1 then @@ -91,6 +123,8 @@ script.on_event(defines.events.on_tick, function(event) elseif todo == 5 then ExportOutputList() end + + global.previousPlayerCount = global.previousPlayerCount or #game.players end) function HandleInputChests() diff --git a/clusterio_0.0.2/data.lua b/clusterio_0.0.2/data.lua index f63a603b..ee2163af 100644 --- a/clusterio_0.0.2/data.lua +++ b/clusterio_0.0.2/data.lua @@ -20,7 +20,7 @@ function MakeLogisticEntity(entity, name, pictureFilename, pictureTablePath, ico entity.icon = iconPath or entity.icon -- add the entity to a technology so it can be unlocked - local wasAddedToTech = AddEntityToTech("construction-robotics", name) + --local wasAddedToTech = AddEntityToTech("construction-robotics", name) data:extend( { @@ -34,7 +34,7 @@ function MakeLogisticEntity(entity, name, pictureFilename, pictureTablePath, ico --shouldn't be enabled to begin with. --but if the recipe isn't attached to a tech then it should --be enabled to begin with because otherwise the player can never use the item ingame - enabled = not wasAddedToTech, + enabled = true, ingredients = { {"steel-chest", 1},