我正在尝试将链接ID存储在单个房间内存中,但似乎内存会重置每个刻度。如果我跑:
Game.rooms.W45N28.memory.sourceLink = id
在命令行中,然后立即调用Game.rooms.W45N28.memory.sourceLink
,它返回undefined。但是,如果我添加
Game.rooms.W45N28.memory.sourceLink = id
到main然后在命令行中调用Game.rooms.W45N28.memory.sourceLink
,它正确返回id。但是如果我然后从main中删除它,它会返回到返回undefined。我在脚本中找不到任何可以重置房间内存的地方
是否有某种方式应该将内容添加到内存中并且我做错了?
答案 0 :(得分:0)
您确定没有意外重置房间内存或意外将sourceLink字段设置为undefined
吗?如果您将Memory
对象中的字段设置为undefined
,则实际上与delete Memory.<path>
相同。
Memory对象在整个刻度中都是活着的,所以我怀疑这是游戏中的一个错误,因为几乎每个人都依赖于Room对象的memory
属性。
答案 1 :(得分:0)
就像Toolmaker已经写过的那样,它应该按照自己的方式运行,并且应该存储房间内存。也许您尝试存储Working with memory > Storing game objects中提到的实时对象数据? “Memory对象用于存储JSON数据,不能包含实时对象引用。”
当然我也使用房间内存,它像微风一样。我将此内存设置一次(请参阅下面的示例),它将永久保存。
我正在为我的所有房间设置使用特定模块'z.settings'等。然后,每当我需要改变一些基本的东西时,我会在'z.settings'中执行此操作并让它更新所有内容。这是概念:
-- MAIN
// Make this true to update all settings globaly! Should be made false again afterwards to save CPU.
if (1 == 2) {
var globalSettings = require('z.settings');
globalSettings.update();
};
-- MODULE 'z.settings'
var myRooms = [
{ name: 'W45N28', active: true,
someData: {
abc: 1,
def: 2,
ghi: 3,
},
creepJob: {
amount_Harvester: 3,
amount_Upgrader: 3,
body_Harvester: [WORK,WORK,WORK,CARRY,MOVE,MOVE,MOVE],
body_Upgrader: [WORK,WORK,WORK,WORK,CARRY,CARRY],
},
},
{ name: 'W45N29', active: false,
someData: {
zyx: 1,
wvu: 2,
tsr: 3,
},
creepJob: {
amount_Harvester: 5,
amount_Upgrader: 2,
body_Harvester: [WORK,CARRY,MOVE,MOVE],
body_Upgrader: [WORK,WORK,CARRY],
},
},
];
module.exports = {
update() {
// Loop through all myRooms and process all active ones.
for (i=0; i < myRooms.length; i++) {
if (myRooms[i].active) {
var room = Game.rooms[myRooms[i].name];
// Write the memory of the current room.
room.memory.someData = myRooms[i].someData;
room.memory.creepJob = myRooms[i].creepJob;
console.log('Updating settings for room ' + myRooms[i].name + '...')
};
};
console.log('--- All settings have been updated!')
},
};
正如您所看到的,您只需在主if
中设置true
,如(1 == 1)
一次即可更新所有内容,然后进行设置回到false
之类的(1 == 2)
。通过这种方式,您可以在一个地方拥有所有基本功能,而无需在任何地方搜索所有基本内存。
正如你所看到的,我更新了我的记忆一次,它会保持这种状态。所以它也适合你!就像我说的,也许你试图存储一些不应该存储的东西。