Javascript 尖叫获得所有具有特定记忆的爬行(角色)

Javascript 尖叫获得所有具有特定记忆的爬行(角色),javascript,screeps,Javascript,Screeps,我想弄清楚如何让每一个怪物都有一个特定的记忆或角色,比如变量中的收割者。。。我似乎不明白 我已经试过了: module.exports = function(){ for(var i in Game.creeps){ if(i.memory == 'Harvester'){ var Harvesters = Game.creeps[i]; if(Harvesters.index < 3){

我想弄清楚如何让每一个怪物都有一个特定的记忆或角色,比如变量中的收割者。。。我似乎不明白

我已经试过了:

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');
            }
        }
    }
}
module.exports=函数(){
for(游戏中的var i.爬行){
如果(i.memory=='Harvester'){
var收割机=游戏。爬行[i];
if(收割机指数<3){
Game.spawns.Spawn1.createScrew([Game.WORK,Game.CARRY,Game.MOVE],'Harvester'+Harvester.length,'Harvester');
}
}
}
}

但这显然行不通…

您可以这样做:

if(Number(Harvesters.name.slice(-1)) < 3)
    Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE],'Harvester'+ Harvesters.length, 'Harvester');
Game.spawns.Spawn1.createCreep([Game.WORK, Game.CARRY, Game.MOVE],'Harvester'+ Harvesters.length, {role: 'Harvester'});
您必须确保将
内存
检查更改为
内存。角色

重读一遍,我想我所做的并不是你真正想要的。如果我理解正确的话,这应该会更好(虽然不漂亮)

module.exports=函数(){
var totalHarv=0;
for(游戏中的var q.爬行)
if(Game.crews[q].内存='Harvester')
totalHarv++;
for(游戏中的var i.爬行){
if(Game.crews[i].内存='Harvester'){
而(总HARV<3){
Game.spawns.Spawn1.createScrew([Game.WORK,Game.CARRY,Game.MOVE],'Harvester'+totalHarv,'Harvester');
totalHarv++;
}
}
}
}

这会在爬行中循环,如果它发现了一个收割者,它会增加一个计数器,然后当你稍后尝试产卵和填充时,它会检查是否有足够的爬行者,并在必要时添加更多。

你可以使用
收割者角色从爬行中创建另一个数组:

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');
}
var收获机=[];
for(游戏中的var i.爬行){
if(Game.crews[i].内存='harvester'){
收割机.推(游戏.爬行[i]);
}
if(收割机长度<3){
Game.spawns.Spawn1.createScrew([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');
}
var-harvesters=..filter(Game.crews,{memory:'harvesters'});
如果(尺寸(收割机)<3){
Game.spawns.Spawn1.createScrew([Game.WORK,Game.CARRY,Game.MOVE],null,'Harvester');
}

room.find和position.findNearest方法都采用可选参数,其中一个参数是filter。我使用它来查找特定类型的所有参数

首先,我确保为我生成的每个蠕变指定一个类型:

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

你想将内存中的角色分配给预先存在的爬虫还是用已经分配的角色来繁殖爬虫?用已经分配的角色来繁殖爬虫,这样,如果一个死亡,另一个就会繁殖。我尝试使用lodash方法,得到了一个
引用错误:u。在:6:18
没有定义。知道出了什么问题吗?好的,我发现了,我错过了它s
var\uxAE=require('lodash');
在我的main的恳求下。你为什么要这样整理你的爬行动物?这种排序做什么?
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";
}