const common = require('common') module.exports = { name: 'filler', prio: 4, getCount: colonyRoom => { if (colonyRoom.memory.spawnContainers.length === 0) { return 0 } if (colonyRoom.controller.level < 5) { return 1 } return 2 }, minRcl: 2, bodies: [ [CARRY, CARRY, MOVE], [CARRY, CARRY, MOVE, CARRY, CARRY, MOVE], [CARRY, CARRY, MOVE, CARRY, CARRY, MOVE, CARRY, CARRY, MOVE], [CARRY, CARRY, MOVE, CARRY, CARRY, MOVE, CARRY, CARRY, MOVE, CARRY, CARRY, MOVE], ], tick (creep) { if (creep.store.getFreeCapacity(RESOURCE_ENERGY) === 0) { creep.memory.loading = false } else if (creep.store[RESOURCE_ENERGY] < 50) { creep.memory.loading = true } if (creep.memory.loading) { let target = creep.pos.findClosestByPath(FIND_STRUCTURES, { filter: s => { return (s.structureType === STRUCTURE_STORAGE || s.structureType === STRUCTURE_CONTAINER) && s.store[RESOURCE_ENERGY] > Math.min(creep.store.getFreeCapacity(RESOURCE_ENERGY), 100) } }) if (target) { if (creep.withdraw(target, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE) { creep.moveTo(target, {visualizePathStyle: {stroke: '#f7e180'}}) } } else { // creep.moveTo(creep.pos.findClosestByRange(FIND_FLAGS, {filter: flag => flag.name.startsWith('idle')}), {visualizePathStyle: {stroke: '#ff0000'}}); if (creep.store[RESOURCE_ENERGY] > 0) { creep.memory.loading = false } return 'idle' } } else { let target = creep.pos.findClosestByPath(FIND_STRUCTURES, { filter: s => ( s.structureType === STRUCTURE_EXTENSION || s.structureType === STRUCTURE_SPAWN ) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0 }) if (!target && creep.room.storage && creep.room.storage.store[RESOURCE_ENERGY] > 1e5) { target = Game.getObjectById(creep.room.memory.storageLink) if (target && target.store.getFreeCapacity(RESOURCE_ENERGY) === 0 && creep.pos.getRangeTo(target) === 1) { target = undefined } } if (target) { if (creep.transfer(target, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE) { creep.moveTo(target, {visualizePathStyle: {stroke: '#00ff0f'}}); } } else { // creep.moveTo(creep.pos.findClosestByRange(FIND_FLAGS, {filter: flag => flag.name.startsWith('idle')}), {visualizePathStyle: {stroke: '#ff0000'}}); if (creep.store.getFreeCapacity(RESOURCE_ENERGY) > 0) { creep.memory.loading = true } return 'idle' } } } };