var get_source = function(creep) { var sources = creep.room.find(FIND_SOURCES); var minSource = null; var minSourceCount = null; for(let source of sources) { var amount_at_source = Memory.rooms[creep.room.name].sources[source.id] - Memory.rooms[creep.room.name].sources_spots[source.id]; if (minSourceCount == null || amount_at_source < minSourceCount) { minSourceCount = amount_at_source; minSource = source; } } Memory.rooms[creep.room.name].sources[minSource.id] += 1; creep.memory.source_id = minSource.id; return minSource; } var release_source = function(creep) { if(creep.memory.source_id) { if(Memory.rooms[creep.room.name].sources[creep.memory.source_id] > 0){ Memory.rooms[creep.room.name].sources[creep.memory.source_id] -= 1; } delete creep.memory.source_id; } } var roundRobinHarvester = { get_source: get_source, release_source: release_source } module.exports = roundRobinHarvester;