如何在相邻房间领取控制器?
How to claim a controller in an adjacent room?
使用带有一个或多个 CLAIM body 部件的 creep 来声明控制器时遇到问题。
我正在使用此功能获取房间中最近的控制器:
getNearestController: function(creep)
{
return creep.room.find(FIND_STRUCTURES, {
filter: function(structure) {
return (structure.structureType == STRUCTURE_CONTROLLER);
}
});
}
效果很好,我可以访问 object 并查看它的坐标是否正确。
然而,当我 运行 每次 tick 时(虽然 creep 就在它旁边)控制器所有者仍然是 "None" 并且我没有看到任何事情发生,creep 没有采取任何行动。
if(creep.claimController(nearestController)<0)
{
creep.moveTo(nearestController);
}
很确定上面对 claimController 的调用是不正确的,但不确定我遗漏了什么。
我在这里看不出任何问题,所以我认为问题出在您的全局控制级别上。
为了申请新房间,您的 GCL 至少需要比您已经拥有的房间数高 1。如果您是新玩家,您的 GCL 可能仍处于 1 级。这意味着您只能拥有一个房间。您可以查看您的游戏资料,了解您在下一关的进度。
http://support.screeps.com/hc/en-us/articles/203086021-Global-control
我也经历过同样的事情。问题似乎是您 claimController return 出现了某种错误(很可能是 ERR_GCL_NOT_ENOUGH)。确保检查 creep 动作的 return 代码。这是我的示例,如果它不在范围内,我将移至控制器。如果 creep 在范围内,它会尝试占领它。如果它在 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);
}
使用带有一个或多个 CLAIM body 部件的 creep 来声明控制器时遇到问题。
我正在使用此功能获取房间中最近的控制器:
getNearestController: function(creep)
{
return creep.room.find(FIND_STRUCTURES, {
filter: function(structure) {
return (structure.structureType == STRUCTURE_CONTROLLER);
}
});
}
效果很好,我可以访问 object 并查看它的坐标是否正确。
然而,当我 运行 每次 tick 时(虽然 creep 就在它旁边)控制器所有者仍然是 "None" 并且我没有看到任何事情发生,creep 没有采取任何行动。
if(creep.claimController(nearestController)<0)
{
creep.moveTo(nearestController);
}
很确定上面对 claimController 的调用是不正确的,但不确定我遗漏了什么。
我在这里看不出任何问题,所以我认为问题出在您的全局控制级别上。
为了申请新房间,您的 GCL 至少需要比您已经拥有的房间数高 1。如果您是新玩家,您的 GCL 可能仍处于 1 级。这意味着您只能拥有一个房间。您可以查看您的游戏资料,了解您在下一关的进度。
http://support.screeps.com/hc/en-us/articles/203086021-Global-control
我也经历过同样的事情。问题似乎是您 claimController return 出现了某种错误(很可能是 ERR_GCL_NOT_ENOUGH)。确保检查 creep 动作的 return 代码。这是我的示例,如果它不在范围内,我将移至控制器。如果 creep 在范围内,它会尝试占领它。如果它在 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);
}