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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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 машине).
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.