如何在相邻房间内申请控制器?

时间:2017-02-15 06:41:31

标签: screeps

使用带有一个或多个CLAIM身体部位的蠕变来声称控制器时出现问题。

我正在使用此功能获取房间内最近的控制器:

getNearestController: function(creep)
{
    return creep.room.find(FIND_STRUCTURES, {
    filter: function(structure) {
        return (structure.structureType == STRUCTURE_CONTROLLER);
    }
    });
}

哪种方法很好,我可以访问该对象并看到它的坐标是正确的。

但是,当我每次打勾时(当蠕变直接在它旁边)时,控制器所有者仍然是“#34;无”#34;我看不到任何事情发生,蠕动不采取任何行动。

if(creep.claimController(nearestController)<0)
{
    creep.moveTo(nearestController);            
}

非常肯定上面对claimController的调用是不正确的,但不确定我错过了什么。

2 个答案:

答案 0 :(得分:1)

我在这里看不出任何错误,所以我认为问题是你的全局控制水平。

要申领新房间,您需要的GCL比您已拥有的房间数量至少高1。如果你是一名新玩家,你的GCL可能仍然处于1级。这意味着你只能拥有一个房间。您可以查看自己的游戏资料,了解自己的进展情况。

http://support.screeps.com/hc/en-us/articles/203086021-Global-control

答案 1 :(得分:0)

我经历过同样的事情。问题似乎是你 claimController 返回某种错误(很可能是ERR_GCL_NOT_ENOUGH)。请务必查看您的小兵行动的返回代码。这是我的例子,如果它不在范围内,我将移动到控制器。如果蠕变在范围内,它会尝试声明它。如果它在ERR_GCL_NOT_ENOUGH上失败,它会尝试保留它。否则它会记录问题。

  // try to claim controller
  let r = creep.claimController(creep.room.controller);
  if (r === ERR_NOT_IN_RANGE) {
    // move towards the controller
    creep.moveTo(creep.room.controller);
  } else if (r === ERR_GCL_NOT_ENOUGH){
    creep.say('NO GCL->reserving');
    let re = creep.reserveController(creep.room.controller);
    if (re !== 0) {
      console.log('Claimer reserving error: ' + re);
      creep.moveTo(creep.room.controller);
    }
  } else if (r !== 0) {
    console.log('Claimer error: ' + r);
  }