2016-11-15 30 views
2

我已經改變了一下我的role.builders.js文件,讓我的小兵先檢查一下,看看菌種是否有能力,如果它沒有收穫能量來建立,否則從產卵。這裏是我有什麼:Screeps Builders Not Gathering Energy

var roleBuilder = { 

    /** @param {Creep} creep **/ 
    run: function(creep) { 

     if(creep.memory.building && creep.carry.energy == 0) { 
      creep.memory.building = false; 
      creep.say('harvesting'); 
     } 
     if(!creep.memory.building && creep.carry.energy == creep.carryCapacity) { 
      creep.memory.building = true; 
      creep.say('building'); 
     } 

     if(creep.memory.building) { 
      var targets = creep.room.find(FIND_CONSTRUCTION_SITES); 
      if(targets.length) { 
       if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) { 
        creep.moveTo(targets[0]); 
       } 
      } 
     } 
     else 
     { 
      if(!Game.spawns['MySpawn'].energy) 
      { 
       var sources = creep.room.find(FIND_SOURCES); 
       if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) 
       { 
        creep.moveTo(sources[0]); 
       } 
      } 
      else 
      { 
       if(creep.withdraw(Game.spawns['MySpawn'],RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) 
       { 
        creep.moveTo(Game.spawns['MySpawn']); 
       } 
      } 
     } 
    } 
}; 

module.exports = roleBuilder; 

關於我失蹤的任何建議?儘管它表示他們正在移動到產卵,但建造者被凍結在原地。

+1

好的,所以我發現我的修復: '\t var spns = creep.room.find(FIND_MY_SPAWNS);如果(creep.withdraw(spns [0],RESOURCE_ENERGY)== ERR_NOT_IN_RANGE) \t { \t creep.moveTo(spns [0]); \t} \t別的 \t { \t creep.withdraw(的SPN [0],RESOURCE_ENERGY); \t}' – user1971240

回答

2

就像你已經注意到的,如果你使用預設變量,這樣的東西效果會更好。
爲了完整起見,我會重新發布您的解決方案。但你並不需要else部分:

var spns = creep.room.find(FIND_MY_SPAWNS); 
if(creep.withdraw(spns[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { 
    creep.moveTo(spns[0]); 
} 

如果你希望你的建設者只使用一個特定的產卵,你也可以用它的ID爲:

var spwn = Game.getObjectById("42ef9e3288f108fe6e60ef23"); 
if(creep.withdraw(spwn, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { 
    creep.moveTo(spwn); 
} 

但不管怎麼說,還有一件事我在你的代碼中注意到了!你告訴你的建設者去採礦,如果目前有能量在產卵。

if(!Game.spawns['MySpawn'].energy) { ... } 

這樣做的問題是,有幾乎總是會有一些能量在那裏,因爲只要你是低於300能源在總,您的產卵產生1個能量的每一個滴答!所以你的建造者最多隻能收穫,一次打,然後轉身從產卵中取回 - 因爲現在至少有一種能量。
接下來的問題是,你會遇到一個問題,你不能建立新的小兵,因爲你的建造者總是會獲得所有的能量,然後才能產生新的能量!

爲了彌補這兩個問題,嘗試這樣的:

var spwn = Game.getObjectById("42ef9e3288f108fe6e60ef23"); 
var secureEnergy = 300; 
if(spwn.energy > secureEnergy) { ... } 

設置secureEnergy到一個更高的金額比一般的蠕變需要催生(至少比你的最重要的收穫毛骨悚然需要更高的!)。例如,一個基本的[WORK,CARRY,MOVE]蠕變需要250點能量,而你的建造者可以攜帶50點能量,所以你可能希望你的建造者只在至少有300 secureEnergy的產卵時撤回它的50點能量。儘管如此,你總是可以產生新的蠕變。這對你有意義嗎?

我希望我可以幫助你有點...並在Screeps樂趣! ;)