Javascript 您如何使用transferEnergy(蠕变)瞄准房间控制器

Javascript 您如何使用transferEnergy(蠕变)瞄准房间控制器,javascript,screeps,Javascript,Screeps,正是标题所说的。 我尝试了很多不同的方法,但“爬行。转移能量(游戏。控制器);”是唯一一个没有返回错误的方法 我很确定transferEnergy()不适用于控制器,以下是我发现的用于简单自动化升级过程的代码 if(creep.carry.energy < creep.carryCapacity) { var sources = creep.room.find(FIND_SOURCES); creep.moveTo(sources[0]); creep.harves

正是标题所说的。
我尝试了很多不同的方法,但“爬行。转移能量(游戏。控制器);”是唯一一个没有返回错误的方法

我很确定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)
}
if(蠕动承载能力<蠕动承载能力){
var sources=screw.room.find(查找源);
移动到(源[0]);
蠕变。收获(来源[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);
            }
        }
    }
};
还添加了按范围检查最近震源的功能。这将使最近的震源返回爬行当前位置