2014-11-21 3 views
4

Я пытаюсь понять, как получить каждую ползучесть с определенной памятью или ролью, например харвестер в переменной ... Кажется, я не понимаю, как это понять.Screeps получить все крипы с определенной памятью (роль)

Я уже пробовал:

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

сделать вы хотите назначить роли в памяти к уже существующим крипам или порождениям нереста с уже назначенными ролями? – dlkulp

+0

Spawn creeps с ролями, которые уже назначены так, что если кто-то умрет, другой появится. – Axenth

ответ

5

Вы можете создать еще один массив из ползет с 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'); 
} 
+0

Я пробовал использовать метод lodash, и я получил 'ReferenceError: _ не определен на

: 6: 18'. Любая идея, что не так? –

+1

Хорошо, я понял, мне не хватало этого 'var _ = require ('lodash');' при попрошайничестве моей основной. –

1

Вы можете сделать что-то вроде этого:

if(Number(Harvesters.name.slice(-1)) < 3) 
    Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE],'Harvester'+ Harvesters.length, 'Harvester'); 

вещь, чтобы отметить здесь, что index не является свойством, а свойство обманчивого идентификатора уникально и, следовательно, не то, что вы ищете. Этот код вместо этого смотрит на имя текущего ползучести и получает последний символ, затем превращает его в число и сравнивает его с 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++; 
      } 
     } 
    } 
} 

Это перебирает ползает и увеличивает счетчик, если он находит харвестер, а потом, когда вы пытаетесь икра и прочего, он может проверить чтобы убедиться, что их достаточно, и при необходимости добавьте больше.

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"; 
} 
+2

Почему вы так сортируете свои крипы? Что такое сортировка? –