/* ########################################### # Mine energy and do all fundamental jobs # ###########################################*/ module.exports = { do: function(creep){ creep.memory.home = "Central" //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); if(source != undefined && creep.room.name == source.room.name){ var container = creep.pos.findClosestByPath(FIND_STRUCTURES, { filter:(s) => ( s.structureType == STRUCTURE_CONTAINER && s.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY))}); if(container == null) { var source = Game.getObjectById(creep.memory.source_id); result = creep.harvest(source); if (result == ERR_NOT_IN_RANGE){ creep.moveTo(source); } } else { var result = creep.withdraw(container, RESOURCE_ENERGY); if (result == ERR_NOT_IN_RANGE){ creep.moveTo(container); } } if (creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){ creep.memory.harvesting = false; creep.memory.target = null; } } else { creep.moveTo(source); } } else { if(creep.memory.target == null){ switch(creep.memory.counter%3){ case 0: // building 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 1: // 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-creep.store.getUsedCapacity(RESOURCE_ENERGY)*3/4}); if(creep.memory.target != null) creep.memory.target = creep.memory.target.id; else creep.memory.counter += 1; break; case 2: var home = Game.spawns[creep.memory.home]; if(creep.room.name == home.room.name){ creep.memory.target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES,{ filter:(s) => ( s.structureType == STRUCTURE_SPAWN || s.structureType == STRUCTURE_EXTENSION || s.structureType == STRUCTURE_STORAGE ) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0}); if(creep.memory.target != null) creep.memory.target = creep.memory.target.id; else creep.memory.counter += 1; } else { creep.moveTo(home); } break; } } var target = Game.getObjectById(creep.memory.target); var response = OK; switch(creep.memory.counter%3){ case 0: // building response = creep.build(target); if(target != null && target.progress == target.progressTotal) creep.memory.target = null; break; case 1: response = creep.repair(target); if(target != null && target.hits == target.hitsMax) creep.memory.target = null; break; case 2: response = creep.transfer(target, RESOURCE_ENERGY); if(target != null && target.store.getFreeCapacity(RESOURCE_ENERGY) == 0) 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; } } } };