你如何使用transferEnergy(creep)定位房间控制器

时间:2015-08-09 07:56:11

标签: javascript screeps

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

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分: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);
            }
        }
    }
};

还按范围添加了对最近源的检查。这将返回最接近当前位置的来源。