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

Принятый ответ

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
18
5 лет назад
Отредактирован Vlod
0
Ок, а если после записи проверять чтением успех. В случае неудачи - повторить попытку. Также можно увеличить таймаут между записями, если он есть.

Или у тебя определенные ключи не работают?
0
21
5 лет назад
Отредактирован biridius
0
Vlod, вроде того. причем нет какого-то принципа почему ключ не подходит, дело не в длине.
задержка перед загрузкой с диска для проверки у меня была 3 секунды.
Одни ключи сохраняются, а другие нет.
Как пример, пара "гуль" + "талант1" работает, а "скелет лучник" + "2" не работает.
либо "настройки" + "язык" не работает, а "настройки" + "смещение текста" работает, хотя ключ длиннее.
При чем проблема именно в сохранении данных на диске, в сам кеш в озу все сохраняется и выгружается нормально
0
9
5 лет назад
Отредактирован Koladik
0
biridius, в таких делах еще б надо версию в вопросе писать в 1.31 изменения по части кэша произошли.
0
24
5 лет назад
0
biridius, я очень надеюсь, что вы не пользуетесь кирилицей в ключах и это просто пример в комментарии выше.
0
21
5 лет назад
0
prog, да, просто пример.
версия 1.26.
0
23
5 лет назад
0
Сколько карт? Ключи точно проверили на 10 раз, что они верные? Можно скриншот сохранения/загрузки, на всякий случай.
В свое время мне говорили, что кэш бывает не записывает данные в цикле, данные теряются.
Так же, если карт несколько, нужно сохранять из карты в карту все имеющиеся данные. Например, если вы сохранили "А" в карте "1", не загружаете его в карте "2", но загружаете в карте "3", то данные тоже могут потеряться.
У меня в моем проекте 5 полноценных карт и система сохранения/загрузки через кэш работает идеально. Логические вот точно знаю, что иногда пропадают, поэтому перешел полностью на целочисленные.
0
21
5 лет назад
Отредактирован biridius
0
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
0
26
5 лет назад
0
Как-то сталкивались с переполнением кэша, лечили созданием нового пользователя.
2
32
5 лет назад
2
Я бы при старте вычищал кешь перед загрузкой, то он имеет багу - создаваться не пустым.
Так же процесс сохранение ресуросемкий, не стоит делать в циклах и так далее.
      string talentkey = ConvertTalentNumberToKey(n) //
        string creakey = ConvertCreatureToKey(i) //
Вот это всеще не советую юзать, у меня ломалось взятие имени абилки, поэтому прямо вбивайте в код ключи, никогда не пытайтесь читать строковые ключи откуда-либо, начинаются непонятные баги (вероятно упущение со строками, в JASM машине).
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.