【问题标题】:Can't spawn creep with memory无法产生有记忆的蠕变
【发布时间】:2018-06-24 09:21:51
【问题描述】:

首先,我对这个游戏完全陌生,但我从以前就知道 js。我遇到的问题是我在模拟器中玩耍的结果。

我正在尝试生成cree,我首先修改了example in the tutorial

Game.spawns['HQ'].spawnCreep(
  [WORK,CARRY,MOVE], 
  name,
  {memory: {role: r}});

但这只会产生一个内存为undefined的蠕变。

我也试过在调用spawnCreep后设置内存:

Game.creeps[name].memory = {
    role: r
};

但它会导致相同的“错误”。

我错过了什么?

更新1:

情况变得更糟...我决定放弃我的整个代码库,并用教程中的确切代码替换它。而且内存还是undefined...

var roleHarvester = require('role.harvester');
var roleUpgrader = require('role.upgrader');

module.exports.loop = function () {

    for(var name in Memory.creeps) {
        if(!Game.creeps[name]) {
            delete Memory.creeps[name];
            console.log('Clearing non-existing creep memory:', name);
        }
    }

    var harvesters = _.filter(Game.creeps, (creep) => creep.memory.role == 'harvester');
    console.log('Harvesters: ' + harvesters.length);

    if(harvesters.length < 2) {
        var newName = 'Harvester' + Game.time;
        if(Game.spawns['HQ'].spawnCreep([WORK,CARRY,MOVE], newName,
            {memory: {role: 'harvester'}}) === OK) {
            console.log('Spawning new harvester: ' + newName);
        };
    }

    if(Game.spawns['HQ'].spawning) {
        var spawningCreep = Game.creeps[Game.spawns['HQ'].spawning.name];
        Game.spawns['HQ'].room.visual.text(
            '????️' + spawningCreep.memory.role,
            Game.spawns['HQ'].pos.x + 1,
            Game.spawns['HQ'].pos.y,
            {align: 'left', opacity: 0.8});
    }

    for(var name in Game.creeps) {
        var creep = Game.creeps[name];
        if(creep.memory.role == 'harvester') {
            roleHarvester.run(creep);
        }
        if(creep.memory.role == 'upgrader') {
            roleUpgrader.run(creep);
        }
    }
}

更新2:
我决定在私人服务器上尝试相同的代码(也就是不像我以前那样在模拟中),现在代码可以正常工作了。这只留下一个结论,模拟有问题。

【问题讨论】:

  • 我在 sim 中运行了您的代码,输入了 namer 的值,但无法重现问题。内存设置正确。
  • 很想知道你是怎么过的。我有同样的问题,在朋友的私人服务器上工作,现在不是;在我自己的本地主机服务器上工作得很好,相同的代码......
  • @Aaron 从来没有像我想要的那样工作,所以几年前我就停止玩这个游戏了。
  • @Olian04 谢谢。我找到了原因并提供了完整的答案,以防它帮助其他人。

标签: screeps


【解决方案1】:

您是否尝试过确保Memory.creeps 存在?您可以通过在遇到此问题的服务器上的控制台中运行以下代码来创建密钥:

if (!Memory.creeps) Memory.creeps = {};

每当我遇到此问题时,这通常是解决方案 - 尽管我不知道为什么 Memory.creeps 在某些情况下有时会变成 undefined

【讨论】:

    【解决方案2】:

    尝试在 r 周围放置一个“'”,将其定义为字符串。据我所知,r 是undefined

    Game.spawns['HQ'].spawnCreep([WORK,CARRY,MOVE], 
                                 name,
                                 {memory: {role: 'r'}});
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,在朋友的私人服务器上工作,然后没有;在我自己的服务器上运行良好。

      查看内存,我发现我的新房间没有列在房间数组中,这让我找到了原因。

      长话短说,在其中一个旧房间里,我遇到了一个失控的队列,消耗了所有 2048KB 的内存。意味着任何新的内存操作都失败了。

      我在控制台中运行了以下各项,然后重新生成,现在运行良好...

      Memory.creeps = {};
      Memory.spawns = {};
      Memory.rooms = {};
      Memory.flags = {};
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        相关资源
        最近更新 更多