93 lines
4.7 KiB
JavaScript
93 lines
4.7 KiB
JavaScript
|
|
/* ###########################################
|
|
# 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;
|
|
}
|
|
}
|
|
}
|
|
}; |