/* ########################################### # Mine energy and do all fundamental jobs # ###########################################*/ module.exports = { do: function(creep){ //memory setup if(creep.memory.harvesting == undefined) creep.memory.harvesting = true; if(creep.memory.counter == undefined) creep.memory.counter = 0; if(creep.memory.target == undefined) creep.memory.target = null; if (creep.memory.harvesting){ var source = Game.getObjectById(creep.memory.source_id); var result = creep.harvest(source); if (result == ERR_NOT_IN_RANGE){ creep.moveTo(source); } if (result == ERR_NOT_ENOUGH_RESOURCES || creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){ creep.memory.harvesting = false; creep.memory.target = null; } } else { if(creep.memory.target == null){ switch(creep.memory.counter%10){ case 0: // upgrading creep.memory.target = creep.room.controller.id; break; case 1: // suppling case 2: case 3: case 4: creep.memory.target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES,{ filter:(s) => ( s.structureType == STRUCTURE_SPAWN || s.structureType == STRUCTURE_EXTENSION ) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0}); if(creep.memory.target != null) creep.memory.target = creep.memory.target.id; else creep.memory.counter += 1; break; case 5: case 6: case 7: case 8: creep.memory.target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES); if(creep.memory.target != null) creep.memory.target = creep.memory.target.id; else creep.memory.counter += 1; break; case 9: // repairing (no walls or ramparts) creep.memory.target = creep.pos.findClosestByRange(FIND_STRUCTURES,{ filter:(s) => ( s.structureType != STRUCTURE_WALL && s.structureType != STRUCTURE_RAMPART) && s.hits < s.hitsMax}); if(creep.memory.target != null) creep.memory.target = creep.memory.target.id; else creep.memory.counter += 1; break; } } var target = Game.getObjectById(creep.memory.target); var response = OK; switch(creep.memory.counter%10){ case 0: response = creep.transfer(target, RESOURCE_ENERGY); break; case 1: case 2: case 3: case 4: response = creep.transfer(target, RESOURCE_ENERGY); if(target != null && target.store.getFreeCapacity(RESOURCE_ENERGY) == 0) creep.memory.target = null; break; case 5: case 6: case 7: case 8: response = creep.build(target); if(target != null && target.progress == target.progressTotal) creep.memory.target = null; break; case 9: response = creep.repair(target); if(target != null && target.hits == target.hitsMax) creep.memory.target = null; break; } if(response == ERR_NOT_IN_RANGE){ creep.moveTo(target); } else if(response == ERR_FULL || response == ERR_INVALID_TARGET){ creep.memory.target = null; } if (creep.store.getUsedCapacity(RESOURCE_ENERGY) == 0){ creep.memory.harvesting = true; creep.memory.target = null; creep.memory.counter += 1; } } } };