2014-11-21 65 views
4

我想弄清楚如何讓每個蠕變與特定的內存或角色像收割機在一個變量......我似乎無法弄清楚。Screeps得到所有與特定內存(角色)creeg

我已經嘗試過:

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 2014-11-21 10:10:15

+0

產卵潛伏着已分配的角色,以便一個人死於另一個人。 – Axenth 2014-11-21 10:26:37

回答

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'。有什麼不對? – 2014-11-21 17:38:12

+1

好吧,我明白了,我錯過了這個'var _ = require('lodash');'在我的主人的乞討中。 – 2014-11-21 17:39:28

1

你可以做這樣的事情:

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

在這裏是要注意的事情索引不是一個屬性,欺騙性的id屬性是唯一的,因此不是你要找的。此代碼,而不是着眼於當前爬行的名稱,得到的最後一個字符,然後輪流到這一個數字,並將其與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

你爲什麼要這樣排序你的小兵?那種排序呢? – 2016-09-11 19:25:06

相關問題