我试图弄清楚如何通过变量中的特定记忆或角色来获取每一个蠕变......我似乎无法弄明白。
我已经尝试过:
module.exports = function(){
for(var i in Game.creeps){
if(i.memory == 'Harvester'){
var Harvesters = Game.creeps[i];
if(Harvesters.index < 3){
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE],'Harvester'+ Harvesters.length, 'Harvester');
}
}
}
}
但这显然不会起作用......
答案 0 :(得分:7)
您可以使用harvester
角色来创建另一个数组:
var harvesters = [];
for(var i in Game.creeps) {
if(Game.creeps[i].memory== 'harvester') {
harvesters.push(Game.creeps[i]);
}
if(harvesters.length < 3){
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE], null, 'Harvester');
}
或者使用lodash:
var harvesters = _.filter(Game.creeps, {memory: 'harvester'});
if(_.size(harvesters) < 3){
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE], null, 'Harvester');
}
答案 1 :(得分:1)
您可以这样做:
if(Number(Harvesters.name.slice(-1)) < 3)
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE],'Harvester'+ Harvesters.length, 'Harvester');
这里要注意的是索引不是属性,欺骗性的id属性是唯一的,因此不是你要找的东西。此代码会查看当前creep的名称并获取最后一个字符,然后将其转换为数字,并将其与3进行比较。
你分配给内存的方式很好。如果你真的想要,你可以在那里做一个对象,但这对你现在如何设置似乎没有必要。它看起来像这样:
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE],'Harvester'+ Harvesters.length, {role: 'Harvester'});
您必须确保将memory
支票更改为memory.role
。
重读并且我认为我所做的并不是你所要求的。如果我理解正确,这应该更好(虽然不漂亮)
module.exports = function() {
var totalHarv = 0;
for(var q in Game.creeps)
if (Game.creeps[q].memory == 'Harvester')
totalHarv++;
for(var i in Game.creeps) {
if(Game.creeps[i].memory == 'Harvester') {
while(totalHarv < 3) {
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE], 'Harvester'+ totalHarv, 'Harvester');
totalHarv++;
}
}
}
}
如果它找到了一个Harvester,它会循环遍历creeps并增加一个计数器,然后当你尝试生成和填充时,它可以检查是否有足够的它们并在必要时添加更多。 / p>
答案 2 :(得分:0)
room.find和position.findNearest方法都采用可选参数,其中一个是过滤器。我用它来查找所有类型。
首先,我确保为每个生成的蠕变分配一个类型:
var new_creep = spawn.createCreep(creepTypes[requirement.Type].Spec);
Memory.creeps[new_creep].Type = requirement.Type;
然后我可以使用过滤器:
function gatherHarvesters(creep) {
var harvesters = creep.room.find(Game.MY_CREEPS, { "filter": selectHarvesters });
_.sortBy(harvesters, function(harvester) {
return (harvester.energy * harvester.energy) - creep.room.findPath(creep.pos, harvester.pos).length;
});
return harvesters;
}
function selectHarvesters(creep) {
return creep.memory.Type == "Harvester";
}