You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
2.1 KiB
57 lines
2.1 KiB
let common = require('common')
|
|
let idling = 0
|
|
|
|
module.exports = {
|
|
idling,
|
|
tick (creep) {
|
|
let dropped = creep.pos.findInRange(FIND_DROPPED_RESOURCES, 1);
|
|
if (dropped.length > 0) {
|
|
creep.pickup(dropped[0])
|
|
}
|
|
|
|
let targetCreeps = creep.pos.findInRange(FIND_MY_CREEPS, 1, {
|
|
filter: tc => tc.store.getFreeCapacity(RESOURCE_ENERGY) && tc.memory.role !== 'harvester'
|
|
});
|
|
if (targetCreeps.length > 0) {
|
|
let tc = _.sortBy(targetCreeps, el => el.store.getFreeCapacity(RESOURCE_ENERGY))[targetCreeps.length - 1]
|
|
creep.transfer(tc, RESOURCE_ENERGY)
|
|
}
|
|
else {
|
|
let targets = creep.pos.findInRange(FIND_STRUCTURES, 1, {
|
|
filter: (structure) => structure.store
|
|
&& structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0
|
|
&& structure.structureType === STRUCTURE_EXTENSION
|
|
});
|
|
if (targets.length === 0) {
|
|
targets = creep.pos.findInRange(FIND_STRUCTURES, 1, {
|
|
filter: (structure) => structure.store && structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0
|
|
});
|
|
}
|
|
if (targets.length > 0) {
|
|
creep.transfer(_.min(targets, el => el.store[RESOURCE_ENERGY]), RESOURCE_ENERGY)
|
|
} else {
|
|
let targetCreeps = creep.pos.findInRange(FIND_MY_CREEPS, 1, {
|
|
filter: tc => tc.store.getFreeCapacity(RESOURCE_ENERGY)
|
|
});
|
|
if (targetCreeps.length > 0) {
|
|
let tc = targetCreeps[0]
|
|
creep.transfer(tc, RESOURCE_ENERGY, tc.memory.role === 'harvester' ? tc.store.getFreeCapacity(RESOURCE_ENERGY) * 0.5 : creep.store[RESOURCE_ENERGY])
|
|
} else {
|
|
let buildTargets = creep.pos.findInRange(FIND_MY_CONSTRUCTION_SITES, 1);
|
|
if (buildTargets.length > 0 && creep.build(buildTargets[0]) === OK) {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let target = Game.getObjectById(creep.memory.source)
|
|
let actionResult = creep.harvest(target)
|
|
if (actionResult === ERR_NOT_IN_RANGE) {
|
|
creep.moveTo(target, {visualizePathStyle: {stroke: '#ffaa00'}});
|
|
}
|
|
if (actionResult !== OK) {
|
|
return 'idle'
|
|
}
|
|
}
|
|
};
|
|
|