module.exports = { begin(creep){ if(!creep.memory.collecting) creep.memory.collecting = false; }, tick(creep){ if(creep.memory.collecting) { searchForLooseEnergy(creep); energyFullCheck(creep); } else { DepositEnergy(creep); energyEmptyCheck(creep); } } } function searchForLooseEnergy(creep){ if(!creep.memory.target) findLooseEnergyTarget(creep); const target = Game.getObjectById(creep.memory.target); if(!target) creep.memory.target = undefined; if(creep.pos.isNearTo(target)) { if(!target.store) creep.pickup(target); else creep.withdraw(target, RESOURCE_ENERGY); } else creep.moveTo(target); } function energyFullCheck(creep){ if(!creep.store.getFreeCapacity(RESOURCE_ENERGY)) { creep.memory.collecting = false; creep.memory.target = undefined; } } function DepositEnergy(creep){ if(!creep.memory.target) findDepositTarget(creep); if(!creep.memory.target) return; const target = Game.getObjectById(creep.memory.target); if(target.store.getFreeCapacity(RESOURCE_ENERGY)==0) { creep.memory.target = undefined; creep.memory.counter++; } if(creep.pos.isNearTo(target)) creep.transfer(target, RESOURCE_ENERGY); else creep.moveTo(target); } function energyEmptyCheck(creep){ if(!creep.store.getUsedCapacity(RESOURCE_ENERGY)) { creep.memory.collecting = true; creep.memory.target = undefined; } } function findLooseEnergyTarget(creep){ var target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES, { filter: (r)=>{ return r.resourceType == RESOURCE_ENERGY && r.amount > creep.store.getFreeCapacity(RESOURCE_ENERGY); }}); if(!target) target = creep.pos.findClosestByRange(FIND_RUINS, { filter: (r)=>{ return r.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY); }}); if(!target) target = creep.pos.findClosestByRange(FIND_TOMBSTONES, { filter: (t)=>{ return t.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY); }}); if(target) creep.memory.target = target.id; } function findDepositTarget(creep) { var target = creep.pos.findClosestByRange(FIND_STRUCTURES, { filter:(s)=> { return s.structureType == STRUCTURE_CONTAINER && s.store.getFreeCapacity(RESOURCE_ENERGY) > 1000; }}); if(!target) target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, { filter:(s)=> { return (s.structureType == STRUCTURE_SPAWN || s.structureType == STRUCTURE_EXTENSION) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0; }}); if(!target) target = creep.room.storage; if(target) creep.memory.target = target.id; }