【问题标题】:How to claim a controller in an adjacent room?如何在相邻房间领取控制器?
【发布时间】:2017-07-16 06:32:58
【问题描述】:

在使用具有一个或多个 CLAIM 身体部位的cree 时认领控制器时遇到问题。

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

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

效果很好,我可以访问该对象并查看它的坐标是否正确。

但是,当我在每一次滴答声中运行它时(当小兵就在它旁边)时,控制器所有者仍然是“无”,我没有看到任何事情发生,小兵不采取任何行动。

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

很确定上述对 claimController 的调用不正确,但不确定我缺少什么。

【问题讨论】:

  • 我想我知道答案——我在隔壁房间里没有刷怪箱。从某人那里听说您需要在申请之前拥有一个。也许我仍然可以“保留”它?

标签: screeps


【解决方案1】:

我在这里看不出有什么问题,所以我认为问题出在您的全局控制级别。

要申请新房间,您的 GCL 至少比您已经拥有的房间数量高 1。如果您是新玩家,您的 GCL 可能仍处于 1 级。这意味着您只能拥有一个房间。您可以查看您的游戏资料,了解您的下一关进度。

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

【讨论】:

    【解决方案2】:

    我也经历过同样的事情。问题似乎是您 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);
      }
    

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多