我修改了一点我的role.builders.js文件,让我的爬虫第一次检查,看看产卵是否有能量,如果它不去收获能量建设,否则从产卵。以下是我所拥有的:
var roleBuilder = {
/** @param {Creep} creep **/
run: function(creep) {
if(creep.memory.building && creep.carry.energy == 0) {
creep.memory.building = false;
creep.say('harvesting');
}
if(!creep.memory.building && creep.carry.energy == creep.carryCapacity) {
creep.memory.building = true;
creep.say('building');
}
if(creep.memory.building) {
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
if(targets.length) {
if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(targets[0]);
}
}
}
else
{
if(!Game.spawns['MySpawn'].energy)
{
var sources = creep.room.find(FIND_SOURCES);
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE)
{
creep.moveTo(sources[0]);
}
}
else
{
if(creep.withdraw(Game.spawns['MySpawn'],RESOURCE_ENERGY) == ERR_NOT_IN_RANGE)
{
creep.moveTo(Game.spawns['MySpawn']);
}
}
}
}
};
module.exports = roleBuilder;对我错过了什么有什么建议吗?建造者被冻结在原地,尽管他们说他们要转移到产卵处。
发布于 2016-11-23 10:40:15
正如您已经注意到的那样,如果您使用预置变量,这样的东西工作得更好。
为了完整起见,我将重新发布您的解决方案。但您不需要else部分:
var spns = creep.room.find(FIND_MY_SPAWNS);
if(creep.withdraw(spns[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(spns[0]);
}如果希望构建器只使用一个特定的派生程序,也可以使用它的ID:
var spwn = Game.getObjectById("42ef9e3288f108fe6e60ef23");
if(creep.withdraw(spwn, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(spwn);
}但是无论如何,我在你的代码中还注意到了一件事!你告诉你的建设者去采矿,如果目前有没有能源在产卵。
if(!Game.spawns['MySpawn'].energy) { ... }问题是,那里几乎总是有一些能量,因为只要你的能量总量低于300,你的卵子就会产生1股能量!因此,你的建设者最多会去收获one蜱,然后转过来从产卵物中提取它--因为现在那里至少有1种能量。
下一个问题是,您将遇到一个问题,您不能建立新的爬虫,因为您的建设者总是获取您的所有能量,一个可以产生!
为了弥补这两个问题,请尝试如下所示:
var spwn = Game.getObjectById("42ef9e3288f108fe6e60ef23");
var secureEnergy = 300;
if(spwn.energy > secureEnergy) { ... }将secureEnergy设置为高于您平均需要生成的蠕变量(至少比您最重要的收割机爬行器所需的还要高!)例如,一个基本的[WORK,CARRY,MOVE]爬行需要250个能量,而你的建造者可以携带50个能量,所以你可能想让你的建造者只提取它的50能量时,至少有300 secureEnergy在产卵。这样,你总能生出一个新的变态。这对你来说有意义吗?
我希望我能帮你一个bit...and玩得开心!)
https://stackoverflow.com/questions/40619635
复制相似问题