Wake of Gods Forum | Форум Во Имя Богов

Full Version: Ошибки, баги и недочёты WoG 3.58f
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
XEPOMAHT, появилась же настройка в ini файле, которая отключаем сообщение с логом. Я в сборке отменил показ сообщения и сделал запуск стороннего сообщения, которое позволяет отправить отчёт сразу на GitHub
(04.12.2025 00:06)daemon_n Wrote: [ -> ]появилась же настройка в ini файле, которая отключаем сообщение с логом.

И какая из них? По-умолчанию там всё выключено:

Code:
[Era]
CpuTargetLevel=50
Debug=0
Debug.AbortOnError=0
Debug.DumpSavegameSections=0
Debug.DumpVirtualFileSystem=0
Debug.Everything=0
Debug.LogDestination=File
Debug.LogVirtualFileSystem=0
Debug.TrackErm=0
Debug.TrackErm.DumpCommands=0
Debug.TrackErm.IgnoreEmptyTriggers=0
Debug.TrackErm.IgnoreRealTimeTimers=0
Debug.TrackErm.MaxRecords=10000
ErmLegacySupport=0
Debug.CaptureScreenshotOnCrash=1
Debug.ExternalCrashHandlerPath=
Debug.ShowMessageOnCrash=1
Папка Era
exeption context
Code:
Unknown exception.
EIP: Kernelbase.165004. Code: E06D7363

> Registers
EAX: 02D36848 (int: 47409224, pint: 0xE06D7363, str: "csmа\x01")
ECX: 00000003 (int: 3)
EDX: 00000000 (int: 0)
EBX: 02D36BA8 (int: 47410088, pint: 0x00000002)
ESP: 02D36848 (int: 47409224, pint: 0xE06D7363, str: "csmа\x01")
EBP: 02D368A0 (int: 47409312, pint: 0x02D368E0 = 47409376)
ESI: H3era hd.00645D80 (int: 6577536, pint: 0xFFFFFFFF, str: "яяяя\x00")
EDI: 02D368E0 (int: 47409376, pint: 0x02D36930 = 47409456)

> Callstack
H3era hd.00617B3B
H3era hd.0060B154
H3era hd.00485927
H3era hd.004D7D17
H3era hd.004BD0BD
H3era hd.004BF1EC
Era.128B6 (PatchApi.CALL_THIS + 62 in PatchApi.pas on line 836)
Era.12979 (PatchApi.Call + 85 in PatchApi.pas on line 894 offset 14)
Era.7CAD9 (Triggers.Hook_LoadSavegame + 137 in Triggers.pas on line 711 offset 55)
H3era hd.0058C62E
H3era hd.0058C538
0569DC76
0569DC03
H3era hd.005869D6
Xxl.1625
H3era hd.0058847D
Xxl.1122
0569E93F
056A6B1F
056A77F1
056AAC21
H3era hd.005FFACB
H3era hd.00584F0C
056A7665
0568BB25
0568BAAD
056A7468
0A0A84AF
_hd3_.178AD
05680108
Kernel32.15D49
Ntdll.6D6DB
Ntdll.6D661

> Stack
02D36834: 00000000 (int: 0)
02D36838: 00000000 (int: 0)
02D3683C: 00000000 (int: 0)
02D36840: Kernelbase.165004 (int: 1988710404, pint: 0x54244C8B = 1411665035)
02D36844: 02D36848 (int: 47409224, pint: 0xE06D7363, str: "csmа\x01")
02D36848*: E06D7363 (int: -529697949)
02D3684C: 00000001 (int: 1)
02D36850: 00000000 (int: 0)
02D36854: Kernelbase.165004 (int: 1988710404, pint: 0x54244C8B = 1411665035)
02D36858: 00000003 (int: 3)
02D3685C: 19930520 (int: 429065504, pint: 0xF8D9E7F7, str: "чзЩшщулРРФРРя\x1F")
02D36860: 02D368F4 (int: 47409396, pint: 0x006455AC = 6575532)
02D36864: H3era hd.0065A180 (int: 6660480, pint: 0x00000000)
02D36868: Era.307A (System.@GetMem + 10 in EventLib.pas on line 22 offset 8314) (int: 101134458, pint: 0x0274C085 = 41205893)
02D3686C: Era.74C45 (Memory.NewMemAlloc + 29 in Memory.pas on line 257) (int: 101600325, pint: 0x5B5EC68B = 1532937867)
02D36870: 02D368F4 (int: 47409396, pint: 0x006455AC = 6575532)
02D36874: 02D368F4 (int: 47409396, pint: 0x006455AC = 6575532)
02D36878: 02D368E4 (int: 47409380, pint: 0x0060B154 = 6336852)
02D3687C: 02D368F4 (int: 47409396, pint: 0x006455AC = 6575532)
02D36880: 05680073 (int: 90701939, pint: 0x648B6158 = 1686856024)
02D36884: 02FD6718 (int: 50161432, pint: 0x79663898 = 2036742296)
02D36888: 02D368D0 (int: 47409360, pint: 0x00000003)
02D3688C: 02D368F4 (int: 47409396, pint: 0x006455AC = 6575532)
02D36890: 02D368E4 (int: 47409380, pint: 0x0060B154 = 6336852)
02D36894: 02D368A8 (int: 47409320, pint: 0xE06D7363, str: "csmа\x01")
02D36898: 02D368F4 (int: 47409396, pint: 0x006455AC = 6575532)
02D3689C: E178FEC3 (int: -512164157)
02D368A0: 02D368E0 (int: 47409376, pint: 0x02D36930 = 47409456)
02D368A4: H3era hd.00617B3B (int: 6388539, pint: 0xC2C95E5F)
02D368A8: E06D7363 (int: -529697949)
02D368AC: 00000001 (int: 1)
02D368B0: 00000003 (int: 3)
02D368B4: 02D368D4 (int: 47409364, pint: 0x19930520 = 429065504)
02D368B8: 02D37594 (int: 47412628, pint: 0x0063DAC0 = 6544064)
02D368BC: H3era hd.006455B8 (int: 6575544, pint: 0x69727473 = 1769108595, str: "string too long\x00")
02D368C0: E06D7363 (int: -529697949)
02D368C4: 00000001 (int: 1)
02D368C8: 00000000 (int: 0)
02D368CC: 00000000 (int: 0)
02D368D0: 00000003 (int: 3)
(04.12.2025 13:34)Lorrein Wrote: [ -> ]exeption context

Похоже, что у какого-то героя в игре сохранённая кастомная биография превышает лимит строки в 512 символов, в итоге игра не может создать такую длинную переменную и падает. Либо игра пытается прочитать биографию у героя, у которого на самом деле её нет. Либо игра пытается читать героев, которых на самом деле в сохранении нет (к примеру, ERA+ старый содовский формат сохранений не поддерживает).
(04.12.2025 18:39)XEPOMAHT Wrote: [ -> ]Похоже, что у какого-то героя в игре сохранённая кастомная биография превышает лимит строки в 512 символов, в итоге игра не может создать такую длинную переменную и падает. Либо игра пытается прочитать биографию у героя, у которого на самом деле её нет. Либо игра пстается читать героев, которых на самом деле в сохранении нет (к примеру, ERA+ старый содовский формат сохранений не поддерживает).

может ли быть проблема в героях кампании(у меня включена опция чтоб они появлялись в тавернах)? И если да, могу ли я им ктото биографию сократить?
(04.12.2025 19:28)Lorrein Wrote: [ -> ]может ли быть проблема в героях кампании(у меня включена опция чтоб они появлялись в тавернах)? И если да, могу ли я им ктото биографию сократить?

нет, если биографии стандартные, то разницы никакой нет. А если модами устанавливаются новые и при этом игра не может корректно записать их в сохранение (т.е. к примеру, строка под биографию создана Дельфой или ERM-ом, а игра использует СИ-шный формат строковой переменной, несовместимый с остальными, то начнутся утечки памяти - игра не сможет копировать строку перед записью в сейв, да и просто выгрузить биографию из памяти тоже не сможет), то и прочитать подобную биографию без вылета так же не получится при переполнении 512 байт.
Затестил еще пару штук -
Сохранение стандартного шаблона формата XXL с героем кампании на размере G - загрузилось
А конкретно мой шаблон - сохранки не работают от слова совсем... хотя по параметрам запуска обе карты настраивал одинаково ... скорее всего проблема в шаблоне видимо ... куда мле лучше обратится по поводу приколов с шаблонами?
настало время обернуть sprintf ф-цией sprintf_s
daemon_n, вызываю пояснительную пригаду!
Berserker, в игре при работе с текстом (в данном случае с h3_TextBuffer at 0x00697428) используется ф-ция "sprintf", которая не проверяет размер этого буфера, что позволяет туда залить текст сверх лимита.
Ниже код из IDA (at 0x06179DE)
Code:
int sprintf(char *str, const char *format, ...)


ф-ция "sprintf_s" принимает вторым аргументом размер буфера, передаваемого первым аргументом (код с сайта Microsoft):
Code:
int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   ...
)

тупое, (вряд ли производительное), но рабочее решение:
обернуть "sprintf" и проверять адрес буфера. Если это h3_TextBuffer (buffer == 0x697428), то вызываем "sprintf_s". Хотя точно не уверен, можно ли VA спокойно обернуть.

Ну или ещё тупее:
просто заменить на "sprintf_s", но это может ограничить максимальную длину текста в некоторых полях и внешних вызовах с собственным буфером, что есть оооооооочень плохо.
Все, нашел проблему - я упирался в предел в 256 шахт на карту, генератор шаблона мог генерить больше чем 256 шахт, но сохранения видимо не поддерживают больше чем 256 шахт всех типов
daemon_n, а, точно, классический выход за границы буфера. Да, универсального решения нет, но геройскую функцию можно перехватить, если h3_TextBuffer используется в подавляющем числе случаев.

Lorrein, да, 0..255 влезает в 1 байт, выше уже нет.
(06.12.2025 01:16)Berserker Wrote: [ -> ]Lorrein, да, 0..255 влезает в 1 байт, выше уже нет.

Да я почему то думал что оно каждый тип шахты по отдельности считает ... ну да ладно, разобрался и черт с ним

upd. спасибо кстати за подсказку, XEPOMAHT, по факту начал искать в чем оверкап после вашей подсказки
Не запускается era (да и вообще ни один мод), видимо у меня та же беда что и у nazartyagun. Что имеется из диагностики:
  • Система Windows 11 Pro, 24H2, build 26100.7171
  • Ошибок нет (втч в event viewer винды)
  • Антивирус только стандартный виндовый, он никакие dll не сожрал (сказал бы), да и отключение не помогает
  • DEP отключен
  • Запуск от админа и различные совместимости не помогают
  • Юзер, путь к игре и тп не содержат кириллицы
При всем при этом обычные герои (heroes3.exe и HD) вполне себе отлично запускаются и работают.
Что интересно, пытался давеча в maw мод старенькой mm6 поиграть - но та же самая беда, разрабы, увы, помочь не смогли; хотя возможно это просто совпадение.
Reference URL's