2016-11-28 5 views
0

Я пытаюсь сохранить идентификаторы ссылок в отдельной памяти комнаты, но кажется, что память сбрасывает каждый тик. Если я бегу:screeps room memory, кажется, сбрасывает каждый галочку

Game.rooms.W45N28.memory.sourceLink = id 

в командной строке, а затем немедленно вызвать Game.rooms.W45N28.memory.sourceLink, он возвращает неопределенное значение. Однако, если добавить

Game.rooms.W45N28.memory.sourceLink = id 

к основной, а затем вызвать Game.rooms.W45N28.memory.sourceLink в командной строке, он правильно возвращает идентификатор. Но если я удалю его из main, он вернется к возврату undefined. Я не могу найти нигде в своих сценариях, где он сбросит память комнаты.
Есть ли определенный способ добавить вещи в память, и я делаю это неправильно?

+0

фиксированное форматирование для улучшения удобочитаемости – Dave2e

ответ

0

Уверены ли вы, что вы случайно не сбросили память в комнате или не установили поле sourceLink в undefined случайно? Если вы установите поле в объекте Memory на undefined, вы фактически будете делать то же самое, что и delete Memory.<path>.

Объект Память живой каждый тик, поэтому я сомневаюсь, что это ошибка в игре, потому что почти каждый полагается на свойство memory объекта Room.

+0

Я уверен, что я не так, и даже в этом случае я попытался переехать в другую ветку с абсолютно отсутствием кода вообще, только основной, который был пуст, и он по-прежнему сбрасывает все я установил его. Я также попытался помещать комнаты. W45N28 в список наблюдения за памятью и сделать поле sourceLink вручную, но как только я перезагружу его, он вернется к неопределенности.это происходит со всеми моими комнатами, кстати, не только W45N28, но и комнатами - это единственное, что происходит, память всех остальных отлично работает – user2985816

0

Как уже писал Инструментарий, он должен работать, и память комнат должна храниться. Может быть, вы попытаетесь сохранить данные о живых объектах, как указано в 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). Таким образом, у вас есть все фундаментальное в одном месте и не нужно искать всю базовую память везде.

И как вы можете видеть, я обновляю свою память один раз, и так будет. Поэтому он должен работать и на вас! Как я уже сказал, возможно, вы пытаетесь сохранить что-то, что нельзя хранить.

+0

Я только пытаюсь сохранить идентификатор объекта в виде строки, которую я могу сделать в другом память объекта, поэтому я должен иметь возможность хранить его, но каждый раз, когда я делаю это, он мгновенно возвращается к неопределенному, даже если у меня нет абсолютно никакого кода, работающего – user2985816

+0

Мне нравится идея модуля настроек. Но зачем хранить его в памяти? Просто войдите в настройки напрямую. –

 Смежные вопросы

  • Нет связанных вопросов^_^