Проблема: часть хэш-ключей в game cache не записывается на диск.
Т.е. во время игры все данные в кэше работают нормально.
Но когда я вызываю SaveGameCache чтобы все сохранить, то часть данных записывается нормально, а часть пропадает и в следующей игре этой части нету - GetStoredInteger возвращает 0 для части значений.
Есть какой-то алгоритм для выбора этих ключей?

Я бы при старте вычищал кешь перед загрузкой, то он имеет багу - создаваться не пустым.
Так же процесс сохранение ресуросемкий, не стоит делать в циклах и так далее.
      string talentkey = ConvertTalentNumberToKey(n) //
        string creakey = ConvertCreatureToKey(i) //
Вот это всеще не советую юзать, у меня ломалось взятие имени абилки, поэтому прямо вбивайте в код ключи, никогда не пытайтесь читать строковые ключи откуда-либо, начинаются непонятные баги (вероятно упущение со строками, в JASM машине).
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
22
Vlod, вроде того. причем нет какого-то принципа почему ключ не подходит, дело не в длине.
задержка перед загрузкой с диска для проверки у меня была 3 секунды.
Одни ключи сохраняются, а другие нет.
Как пример, пара "гуль" + "талант1" работает, а "скелет лучник" + "2" не работает.
либо "настройки" + "язык" не работает, а "настройки" + "смещение текста" работает, хотя ключ длиннее.
При чем проблема именно в сохранении данных на диске, в сам кеш в озу все сохраняется и выгружается нормально
11
biridius, в таких делах еще б надо версию в вопросе писать в 1.31 изменения по части кэша произошли.
24
biridius, я очень надеюсь, что вы не пользуетесь кирилицей в ключах и это просто пример в комментарии выше.
23
Сколько карт? Ключи точно проверили на 10 раз, что они верные? Можно скриншот сохранения/загрузки, на всякий случай.
В свое время мне говорили, что кэш бывает не записывает данные в цикле, данные теряются.
Так же, если карт несколько, нужно сохранять из карты в карту все имеющиеся данные. Например, если вы сохранили "А" в карте "1", не загружаете его в карте "2", но загружаете в карте "3", то данные тоже могут потеряться.
У меня в моем проекте 5 полноценных карт и система сохранения/загрузки через кэш работает идеально. Логические вот точно знаю, что иногда пропадают, поэтому перешел полностью на целочисленные.
22
Obelick, карта одна, система используется для сохранения талантов.
код для тестов
        string talentkey = ConvertTalentNumberToKey(n) //
        string creakey = ConvertCreatureToKey(i) //

        StoreInteger(udg_cache, creakey, talentkey, 1)
        BJDebugMsg("saved "+I2S(GetStoredInteger(udg_cache, creakey, talentkey)))
        SaveGameCache(udg_cache)

        TriggerSleepAction(3.)
        BJDebugMsg("3sec later, the value is "+I2S(GetStoredInteger(udg_cache, creakey, talentkey)))

        ReloadGameCachesFromDisk()
        TriggerSleepAction(3.)
        BJDebugMsg("3sec after reloading the cache "+I2S(GetStoredInteger(udg_cache, creakey, talentkey)))
для части ключей дает после перезагрузки с диска 1, а для части 0
перед перезагрузкой с диска всегда показывает 1
26
Как-то сталкивались с переполнением кэша, лечили созданием нового пользователя.
32
Я бы при старте вычищал кешь перед загрузкой, то он имеет багу - создаваться не пустым.
Так же процесс сохранение ресуросемкий, не стоит делать в циклах и так далее.
      string talentkey = ConvertTalentNumberToKey(n) //
        string creakey = ConvertCreatureToKey(i) //
Вот это всеще не советую юзать, у меня ломалось взятие имени абилки, поэтому прямо вбивайте в код ключи, никогда не пытайтесь читать строковые ключи откуда-либо, начинаются непонятные баги (вероятно упущение со строками, в JASM машине).
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.