2

正是标题所说的。我尝试了很多不同的方法,但是“creep.transferEnergy(Game.controller);” 是唯一没有返回错误的。

4

2 回答 2

3

我很确定 transferEnergy() 不适用于控制器,这是我发现的用于升级过程简单自动化的代码。

if(creep.carry.energy < creep.carryCapacity) {
    var sources = creep.room.find(FIND_SOURCES);
    creep.moveTo(sources[0]);
    creep.harvest(sources[0]);
} 
else {
    creep.moveTo(creep.room.controller);
    creep.upgradeController(creep.room.controller)
}
于 2015-08-09T12:34:14.643 回答
0

我遇到了真正的麻烦。提供的答案确实可以满足您的要求,但是...每个游戏时间都会检查小兵当前携带的能量水平是否小于小兵可以保持的当前容量。

所以,升级一次后,第一次检定,让小兵寻找能量。您的来源可能在很远的地方。我们要做的是耗尽当前存储的能量,然后在空的时候寻找能量。

    if(creep.memory.upgrader && creep.carry.energy == 0) {
        creep.memory.upgrader = false;
    }
    if(!creep.memory.upgrader && creep.carry.energy == creep.carryCapacity) {
        creep.memory.upgrader = true;
    }

    if(creep.memory.upgrader) {
        if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
            creep.moveTo(creep.room.controller);
        }
    } else {
            var source = creep.pos.findClosestByRange(FIND_SOURCES);
            if(creep.harvest(source) == ERR_NOT_IN_RANGE) {
                creep.moveTo(source);
            }
        }
    }
};

还通过 Range 添加了对最近源的检查。这会将最近的来源返回到小兵当前位置。

于 2016-06-21T19:54:51.410 回答