2015-08-09 2 views

ответ

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) 
} 
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); 
      } 
     } 
    } 
}; 

Также добавлена ​​проверка ближайшего источника по диапазону. Это вернет ближайший источник в текущую позицию крипов.