添加然后访问控制器上的内存

adding then accessing memory on controller

if (this.controller && !this.controller.memory) this.controller.memory = { containerid: null, linkid: null };

稍后我有这个:

if (creep.room.controller.memory) {//do code}

出于某种原因,当我尝试从 creep 访问它时它失败了(我遇到了 else 条件)我错过了什么?

控制器在 Creeps 等属性中没有内存 shorthand。

像 Screeps 中的大多数东西一样,StructureController 没有内存。 See Screeps Docs

您必须将 Creeps、Rooms、Spawns 记录到内存中,以及所有其他内容! Screeps 对象,如 Creeps、Spawns 等...不会在它们自己的属性中存储内存,而是存储在内存对象中。

不要像您尝试的那样向对象添加内存!这是一个陷阱! 我建议你把Controller Memory写在他的Room Memory里。

Memory.rooms[controller.room.name]

我不知道你是如何访问你的控制器的。 如果您使用房间名称访问控制器:

// Your Room. Random example: "E12N36" 
let room = Game.rooms[room_name]
let controller = room.controller

// Add into the Room Memory your information about/for/with controller 
room.memory.controllerOfRilcon = {
   name: "Not",
   sure_name: "Sure",
   NumberOfPokeballs: "FullOfBits",
   Nanani: "Done",
   Nanana: "TryToThink"
}

您可以在文档中看到非常重要的一点内存是如何工作的Documentation-CreepMemory

Game.creeps[name].memory 只是一个 shorthand 用于访问对象 Memory.creeps[name] 。真正的记忆数据是Object Memory

对象中没有内存!