(06.12.2020 18:42)Berserker Wrote: [ -> ]igrik, ты смотрел debug? На тех же местах вылет с тем же рандомом и с той же порчей структуры. Полагаю, администратор китайского форума yunings играл с более старой версией. Или wog native dialogs более старая. Ибо вылет Панды вызывался при активации сперва диалога wog native dialogs.
Да, я хорошо посмотрел дебаг.
Вот где ты тут в стеке увидел вызов "wog native dialogs"?
Code:
Failed to read data at 4B.
EIP: H3era hd.0076C762. Code: C0000005
> Registers
EAX: FFFFFFFF (int: -1)
ECX: FFFFFFFF (int: -1)
EDC: 00000000 (int: 0)
EBX: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
ESP: 02D39A78 (int: 47422072, pint: 0x0000003F = 63)
EBP: 02D39ACC (int: 47422156, pint: 0x02D39AE8 = 47422184)
ESI: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
EDI: 0000003F (int: 63)
> Callstack
H3era hd.0076B3A5
H3era hd.0076B47A
H3era hd.004DA9BB
H3era hd.004ACA16
H3era hd.0042FE72
H3era hd.004302EA
H3era hd.00526EB5
H3era hd.00526A56
H3era hd.00526484
H3era hd.00408B3D
0F8202DA
0F820267
10A700F0
Era.27C86 (PatchApi.CALL_THIS + 62 in PatchApi.pas on line 791)
Era.27D49 (PatchApi.Call + 85 in PatchApi.pas on line 849 offset 14)
Era.32D69 (Triggers.Hook_MainGameLoop + 69 in Triggers.pas on line 319)
06F310A9
0F82158E
0F821518
_hd3_.D6A9
02E50067
Kernel32.16359
Ntdll.68944
Ntdll.68914
> Stack
02D39A64: H3era hd.0076C728 (int: 7784232, pint: 0x8310C483)
02D39A68: FFFFFFFF (int: -1)
02D39A6C: 00000000 (int: 0)
02D39A70: 00000000 (int: 0)
02D39A74: 00000000 (int: 0)
02D39A78*: 0000003F (int: 63)
02D39A7C: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
02D39A80: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
02D39A84: 00000000 (int: 0)
02D39A88: 000609FA (int: 395770)
02D39A8C: 00000000 (int: 0)
02D39A90: 00000000 (int: 0)
02D39A94: 00000000 (int: 0)
02D39A98: 00000000 (int: 0)
02D39A9C: 00000000 (int: 0)
02D39AA0: 00000000 (int: 0)
02D39AA4: 00000000 (int: 0)
02D39AA8: 00000000 (int: 0)
02D39AAC: 00000002 (int: 2)
02D39AB0: 00000000 (int: 0)
02D39AB4: 00000000 (int: 0)
02D39AB8: 00000000 (int: 0)
02D39ABC: 00000000 (int: 0)
02D39AC0: 00000000 (int: 0)
02D39AC4: 00000000 (int: 0)
02D39AC8: 00000000 (int: 0)
02D39ACC: 02D39AE8 (int: 47422184, pint: 0x02D39B1C = 47422236)
02D39AD0: H3era hd.0076B3A5 (int: 7779237, pint: 0x8B04C483)
02D39AD4: 00000000 (int: 0)
02D39AD8: 0000003F (int: 63)
02D39ADC: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
02D39AE0: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
02D39AE4: H3era hd.02862C50 (int: 42347600, pint: 0x00000001)
02D39AE8: 02D39B1C (int: 47422236, pint: 0x02D39D5C = 47422812)
02D39AEC: H3era hd.0076B47A (int: 7779450, pint: 0x081C3D83 = 136068483)
02D39AF0: 0000003F (int: 63)
02D39AF4: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
02D39AF8: 02D39B1C (int: 47422236, pint: 0x02D39D5C = 47422812)
02D39AFC: 02D39B10 (int: 47422224, pint: 0x0000003F = 63)
02D39B00: 11DC442C (int: 299648044, pint: 0x009B00A9 = 10158249)
К тому же WND никогда не портил структуру.
И когда была порча структур (от плагина сохранения BattleSave), вылетало в другом месте (жаль адрес не сохранился), а в "erm memory dump.txt" всегда показывало, что виновен скрип новых боевых полей.
BattleReplay вообще уже месяц как не трогает сохранения, а ошибка в нём была только в том, что нельзя было увидеть окно повышения уровня (очень быстро оно закрывалось).
Это в точности вылет из сейва Панды. Я тебе его уже кидал с последовательностью действий. Перепроверил ещё раз с генерацией вылета. Благо, сейв сохранился. Ты сказал тогда, что карта уже битая из-за плагина и бесполезно что-либо менять.
Вот сейв Панды:
https://dropmefiles.com/9uHEt
Открываем окно героя. Выбираем нового оруженосца.
Заходим в окно города и выходим.
Пробуем поднять Знамя Войны у города основным героем. Вылет ровно в том же месте.
Хотя, кажется, это были не твои плагины. Смотри:
Quote:if(NPCinBattleStr[0]==0) goto No_NPC; // и не было
if(*(int *)&NPCinBattleStr[0][0x4C]!=0){ // остался жив
Мусорный указатель на стэк командира в бою? Хотя боя не была, идёт подъём артефакта или посещение объекта.
int PlaceNPCAtBattleStart2(Byte *bm,int Side,int Placed)
NPCinBattleStr[Side]=0; этот код сработает только при бое, а если мы только загрузили игру и стартовали сохранение?
Проблема в том, что
// NPC
{0x4DA9B6,0,DP(NPC_AddExpo)}, //
Этот вызов происходит не только после боя, но и после посещения любого объекта. А ВоГ считает, что после боя и использует мусор в глобальной переменной NPCinBattleStr из прошлых боёв для проверки командира. Я прав?
Archer30, seems, that I've found the source of bug. Will be fixed.
(06.12.2020 20:18)Archer30 Wrote: [ -> ]Hi, here I upload the plugin yunings used in his game, might help with the diagnosis
WoG Native Dialog+Game Bug Fixes+Battle Replay used
Attention! I checked the given archive. I don’t know where these files were taken from, but the checksums of the plugins "game bug fixes extended.dll" and "wog native dialogs.era" do not match those that are in the
igrik, and mine assembly! It is possible that these plugins were corrupted when they were loaded, or the files were modified by someone. With plugin "BattleReplay.dll" everything is fine, checksums match.
Panda, older version doesn't mean they aren't from igrik.
Edit: Thanks all, I will pass yunings the latest plugins.
(06.12.2020 20:11)Berserker Wrote: [ -> ]Открываем окно героя. Выбираем нового оруженосца.
Заходим в окно города и выходим.
Пробуем поднять Знамя Войны у города основным героем. Вылет ровно в том же месте.
Я исправлял этот вылет. У тебя может устаревшая WND?
(06.12.2020 20:11)Berserker Wrote: [ -> ]Этот вызов происходит не только после боя, но и после посещения любого объекта. А ВоГ считает, что после боя и использует мусор в глобальной переменной NPCinBattleStr из прошлых боёв для проверки командира. Я прав?
Да, там мусор в Воге.
Но вылетало по другой причине (в окне героя я использовал структуру артефакта _Art_{id, mod}. А вог использует только int id арта. Моя ошибка при переписывании части функции, хотя по исходникам Вога я это не разобрал, а разобрал только в Олли). Но это уже исправлено (см.выше ссылка)
Archer30, please recheck the same savegame with the newest battlereplay and wog native dialog plugins.
Archer30, I also now checked the files from the installation Era 3.2.0, as well as the three previous versions of these plugins igrik - there is no coincidence, from which I conclude that either these plugins are too old, or they are damaged or changed.
Berserker, igrik, вылета при заходе в город со времен исправления WoG Native Dialog не было.
Panda, вылет у yunings, судя по логу, при посещении Оазиса, то есть крайне напоминает старый вылет от старой wog native dialogs + мутный код Вога.
Скорее всего, источник плавающего бага с мёртвым командиром найден.
Berserker, bug report for today is about artifacts
The right-click info of artifacts from #146 - #160 is not available if these artifacts are unequipped.
Archer30, is it WoG 3.58 behavior? Seems like they have no static description in txt files and dynamical description is used in commander's screen only.
Berserker, that's wrong. At least in ERA 3.0.4, right-clicking on commander artifact still pops up the info. Note that in the latest ERA, #156 - #160 normal WoG artifacts lose their right clicks too.
Berserker, это HD мод, и его новый функционал разбора артефактов в рюкзаке героя. Все артефакты с номерами 146 и выше не имеют ПКМ в окне героя, в окне встречи героев. Может быть где и ещё. Нужно отписаться Бараторчу.
Berserker, хотел полчаса покатать в героев, но не тут то было, при создании/старте рандомной карты получил вылет. После позапускал рандомки еще примерно 10 раз, вылета не было. Но учитывая, что данного вылета я не припомню с версии Эра 3.0.4, то возможно это не единичный случай. Глянь, может чем и поможет этот дебаг.
Дебаг:
https://yadi.sk/d/OqMw36XQqcaHTQ
PS: на более подробные тесты времени к сожалению нет. Про баг с артефактами знал давно, но я сейчас в такой глубокой пятой точке, что в голове ничего не держится, совсем забыл про это. Простите.