Current time: 06.12.2025, 05:18 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Ошибки, баги и недочёты WoG 3.58f
» Собираем в эту тему всевозможные ошибки игры
Author Message
daemon_n Offline
Administrators

Posts: 4389
Post: #766

XEPOMAHT, появилась же настройка в ini файле, которая отключаем сообщение с логом. Я в сборке отменил показ сообщения и сделал запуск стороннего сообщения, которое позволяет отправить отчёт сразу на GitHub


Image: widget.png?style=banner2

Новейший Heroes Launcher
04.12.2025 00:06
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2497
Post: #767

(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
04.12.2025 00:49
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16814
Post: #768

Debug.CaptureScreenshotOnCrash=1
Debug.ExternalCrashHandlerPath=
Debug.ShowMessageOnCrash=1


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.12.2025 02:28
Find all posts by this user Quote this message in a reply
Lorrein Offline

Posts: 7
Post: #769

Папка 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
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2497
Post: #770

(04.12.2025 13:34)Lorrein Wrote:  exeption context

Похоже, что у какого-то героя в игре сохранённая кастомная биография превышает лимит строки в 512 символов, в итоге игра не может создать такую длинную переменную и падает. Либо игра пытается прочитать биографию у героя, у которого на самом деле её нет. Либо игра пытается читать героев, которых на самом деле в сохранении нет (к примеру, ERA+ старый содовский формат сохранений не поддерживает).
04.12.2025 18:39
Find all posts by this user Quote this message in a reply
Lorrein Offline

Posts: 7
Post: #771

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

может ли быть проблема в героях кампании(у меня включена опция чтоб они появлялись в тавернах)? И если да, могу ли я им ктото биографию сократить?
(This post was last modified: 04.12.2025 19:29 by Lorrein.)
04.12.2025 19:28
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2497
Post: #772

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

нет, если биографии стандартные, то разницы никакой нет. А если модами устанавливаются новые и при этом игра не может корректно записать их в сохранение (т.е. к примеру, строка под биографию создана Дельфой или ERM-ом, а игра использует СИ-шный формат строковой переменной, несовместимый с остальными, то начнутся утечки памяти - игра не сможет копировать строку перед записью в сейв, да и просто выгрузить биографию из памяти тоже не сможет), то и прочитать подобную биографию без вылета так же не получится при переполнении 512 байт.
04.12.2025 21:38
Find all posts by this user Quote this message in a reply
Lorrein Offline

Posts: 7
Post: #773

Затестил еще пару штук -
Сохранение стандартного шаблона формата XXL с героем кампании на размере G - загрузилось
А конкретно мой шаблон - сохранки не работают от слова совсем... хотя по параметрам запуска обе карты настраивал одинаково ... скорее всего проблема в шаблоне видимо ... куда мле лучше обратится по поводу приколов с шаблонами?
04.12.2025 22:15
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4389
Post: #774

настало время обернуть sprintf ф-цией sprintf_s


Image: widget.png?style=banner2

Новейший Heroes Launcher
04.12.2025 22:16
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16814
Post: #775

daemon_n, вызываю пояснительную пригаду!


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
Yesterday 03:12
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4389
Post: #776

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", но это может ограничить максимальную длину текста в некоторых полях и внешних вызовах с собственным буфером, что есть оооооооочень плохо.


Image: widget.png?style=banner2

Новейший Heroes Launcher
Yesterday 12:23
Visit this user's website Find all posts by this user Quote this message in a reply
Lorrein Offline

Posts: 7
Post: #777

Все, нашел проблему - я упирался в предел в 256 шахт на карту, генератор шаблона мог генерить больше чем 256 шахт, но сохранения видимо не поддерживают больше чем 256 шахт всех типов
(This post was last modified: Yesterday 18:11 by Lorrein.)
Yesterday 18:11
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16814
Post: #778

daemon_n, а, точно, классический выход за границы буфера. Да, универсального решения нет, но геройскую функцию можно перехватить, если h3_TextBuffer используется в подавляющем числе случаев.

Lorrein, да, 0..255 влезает в 1 байт, выше уже нет.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
Today 01:16
Find all posts by this user Quote this message in a reply
Lorrein Offline

Posts: 7
Post: #779

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

Да я почему то думал что оно каждый тип шахты по отдельности считает ... ну да ладно, разобрался и черт с ним
Today 03:40
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2025 MyBB Group