2016-11-15 2 views
2

私は、自分のrole.builders.jsファイルを少し変えて、creepsが最初にエバリーを持っているかどうかを確認し、エネルギーを蓄えていなければそれを取得します。産卵する。ここに私が持っているものがあります:Screeps Builderがエネルギーを集めない

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); \t if(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]); 
} 

あなたのビルダーが1つの特定のspawnを使用したい場合は、また、そのためにそのIDを使用することができます。

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

しかし、とにかくあなたのコードで気づいたことがもう一つあります!現時点でNOのエネルギーがある場合、建設業者に鉱山に行くように指示します。

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

これで問題がある限り、あなたは、合計で300のエネルギーを下回っているとして、あなたの卵はすべての単一の目盛り1つのエネルギーを生成するので、ほとんど常に、そこにいくつかのエネルギーがあるでしょう!だから、あなたの建設業者はたいていダニののために収穫に行くでしょう、そして、今そこに少なくとも1つのエネルギーがあるので、スポーンからそれをフェッチするために回り回るでしょう。
次の問題は、新しいクリープを作ることができない問題にぶつかります。なぜなら、ビルダーは常に、あなたが生まれる前にすべてのエネルギーを取り出すからです!

は、両方の問題を補うため、このような何かをしようとするには、次の

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

はあなたの平均的なクリープよりも高い金額にsecureEnergyを設定します(生成されたことをあなたの最も重要なハーベスタゾッが必要よりも少なくとも高いを必要としています!)。例えば、基本[WORK,CARRY,MOVE]クリープは250エネルギーを必要とし、あなたの建築者は50エネルギーを運ぶことができるので、スポーンに少なくとも300 secureEnergyがあるときには、あなたのビルダーが50エネルギーを引き戻すだけです。それにもかかわらず、あなたはいつも新しいクリープを生み出すことができます。あなたには意味がありますか?

私はあなたに少し助けてくれることを願っています...そしてスクリープで楽しんでください! ;)

関連する問題