Вылетает варкрафт (1.26) при загрузке сохраненной игры из за HashTable:
Not enough memory resources are avalible to process this command
Object: GamehashTableIntegerReg
(.?AUGameHashTableIntegerReg@@)


Да, у меня тяжелая генерация, но хеш она не юзает.
А памяти для загрузки hashtable почему то не хватает.

Зато реплеи работают.

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

Кажется разобрался:
Как ни странно хеш оказался ни при чем.
Проблема была в слишком длинной строке на ~900 русских символов которую я использовал для описания квеста.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
25
4 года назад
Отредактирован Jack-of-shadow
0
Проверил сохранение, сделанное сразу после старта (без генерации и "начала игры" ), вылазит аналогичная ошибка.
0
26
4 года назад
0
Это универсальное описание ошибки, когда варик не может конкретно описать причину. Либо смотри код всех интеджеров в хэше, так как где-то может быть опечатка, либо отключением и включением компонентов находи дефектный. А также стоит поискать информацию о сейвах и хэше, может быть решение уже находили.

Вот в этих проектах похожие ошибки, кстати: xgm.guru/p/wc3/tomm xgm.guru/p/d2outatime
1
25
4 года назад
1
Кажется разобрался:
Как ни странно хеш оказался ни при чем.
Проблема была в слишком длинной строке на ~900 русских символов которую я использовал для описания квеста.
Принятый ответ
0
32
4 года назад
0
Jack-of-shadow, кстати тоже замечал такое, делал огромное описание, ошибку не получал, но просто карта переставала грузиться на середине загрузки, 5 дней искал проблему, отключая триггеры по 1
0
26
4 года назад
0
По идее это может быть связано с каким-то хэшем, ведь количество символов в строке интеджер и ошибка указывает на интеджер.
0
25
4 года назад
Отредактирован Jack-of-shadow
0
Bergi_Bear:
Да, с длинными строками известная проблема, я ее обошел путем сложения. Но тут проблема именно при загрузке сохраненной игры.

Вроде все пофиксил, даже освещение и фейд фильтр, но столкнулся похоже с нерешаемой проблемой(


Видимо всетаки придется свою систему сохранений писать, не через загрузку, а через новую игру.

Тест карта


Хотя нет решение есть, это записывать все действия с рельефом и потом повторять их при загрузке через LoadGameEvent. Но в моем случае этих действий слишком много, наверно упрусь в лимиты. Буду пробовать.
Загруженные файлы
0
17
4 года назад
Отредактирован Vlod
0
Jack-of-shadow, а восстанавливать рельеф из карты высот?
Даже подтягивая из файла, все равно придется с ней работать
0
25
4 года назад
Отредактирован Jack-of-shadow
0
Vlod:
Jack-of-shadow, а восстанавливать рельеф из карты высот?
Попробую щас через массивы если индексов не хватит, то через хеш.
типо того
globals
 int TerrainDeformC   = 0
 float array TerrainDeformX
 float array TerrainDeformY
 float array TerrainDeformD
 float array TerrainDeformZ
 
endglobals

void TerrainDeformCraterJ (float x, float y, float d, float z){
 TerrainDeformC++
 TerrainDeformX[TerrainDeformC] = x
 TerrainDeformY[TerrainDeformC] = y
 TerrainDeformD[TerrainDeformC] = d
 TerrainDeformZ[TerrainDeformC] = z
 TerrainDeformCrater(x, y, d, z, 1, true)
}

//LoadTerrain
void LoadTerrainDeform (){
 Msg(StrY("LoadTerrain: ")+I2S(TerrainDeformC))
 for_c(TerrainDeformC)
  TerrainDeformCrater(TerrainDeformX[c], TerrainDeformY[c], TerrainDeformD[c], TerrainDeformZ[c], 1, true)
 end_c
}
0
37
4 года назад
0
В vJass есть большие массивы, главное, поток не порвать, но всегда можно перейти на lua)
0
28
4 года назад
0
ScorpioT1000, на самом деле уже нет, максимальный размер массива в vJass совпадает с максимальным размером массива с версии 1.29.
0
16
4 года назад
0
дай краш лог (не дамп)
0
25
4 года назад
Отредактирован Jack-of-shadow
0
DracoL1ch:
дай краш лог (не дамп)
Лог
Пример карта
Загруженные файлы
0
16
4 года назад
0
ничего интересного, аргумент передается супер-большой, который должен быть индексом (?) массива
0
25
4 года назад
Отредактирован Jack-of-shadow
0
ScorpioT1000:
В vJass есть большие массивы, главное, поток не порвать, но всегда можно перейти на lua)
Уже пофиксил тем там всего 1500-3000 вызовов TerrainDeformCrater было, так что массива вполне хватило.

А вот SetTerrainType у меня было 32 к вызовов. Так как я их на этапе генерации использую их как разметку, для быстрой проверки местности. Тут пришлось слегка пожертвовать визуалом при загрузке сохранения (ужал до 7 к) . После загрузки сохранения она немного отличается, но это незаметно.
1
24
4 года назад
1
Если карта рандомно генерится - почему не запоминать зерно рандома и не рескручивать рандом из него заново для генерации карты после загрузки? Тогда останется запоминать только изменения которые произошли после генерации, в результате действий игрока.
0
25
4 года назад
Отредактирован Jack-of-shadow
0
prog:
Да я это планирую сделать в дальнейшем, но пока просто исправлял баг обычных сохранений.
0
37
4 года назад
0
Можешь заполнять сначала по чанкам, потом уже детальнее)
1
25
4 года назад
Отредактирован Jack-of-shadow
1
Щас еще обнаружил, что инвентарь куда то пропал. Даже если после загрузки герою дать способность 'AInv' то инвентарь всеравно не появляется.

Починил, оказалось инвентарь пропадал из-за того что герой имел обе способности:
'Aien' (Носильщик) и 'Aher' (Предметы - Герой).

Карта пример

Столько проблем уже с загрузкой нашел, что хоть статью пиши.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.