У сильванских кентавров постоянный бонус как от заклинания "Радость". Не знаю, надо ли так, но раньше такого не было.
Reinc, сильваны вроде всегда были радостными, как минотавры.
igrik, заметил, что по ссылке обновлена сборка. Что нового/правленого? Готов тестить

вылетает после битвы с компами.
ЯД
(06.09.2018 17:22)daemon_n Wrote: [ -> ]вылетает после битвы с компами. ЯД
Я с твоими сейвами так и не смог добиться вылетов. Ни на одном из сейвов.
Зато увидел, что опция 3 героя неотключаема, и решается только перезагрузкой. Исправлено (вот
fix)
Berserker, (не знаю, когда ты увидишь это сообщение... но) обнаружил я достаточно большую проблему в ERA 2.7.5 (и твой инсталятор тоже с твоими дефолтными настройками (более ранние версии 2.6x- 2.7x не проверял)) при игре с HD четвертой и пятой версий.
В 2.46 проверил, такого бага нет.
Суть: когда включен твик
<UI.Ext.AdvMgr> = 1 , 1 , 1 при нападении на монстра вплотную, игра начинает неправильно получать координату x/y/
Z (v998/v999/
v1000) и ее параметр всегда равен 1 (т.е. подземелье).
Из-за этого возникают многие критические баги и вылеты. Отсюда и были огрехи на скрипт сохранения перед битвой. Что делать - не знаю, куда копать - не знаю. Но это полная "О","Ж","А" и "П"
Я бы мог подумать на HD-мод, но опять же, в ERA 2.46 такого бага нет.

Как ты можешь увидеть:
2 монстра уже убиты вплотную. И слева снизу видно их координаты и типы почвы
По первому верхнему (на 2 часа) координаты правильные. По второму монстру (на 3 часа) координата Z=1, по следующему третьему монтру (на которого щас наведено) (на 4 часа) тоже будет неправильная координата Z=1
Ведб координата всегда должна равняться Z=0 и отсюда тип почвы должн быть =2 (трава). А в подземке как раз на этой точке песок (почва =1)
igrik, спасибо за фикс -- сам забыл сказать, но заметил. Насчет вылетов -- не могу понять пока, почему и как оно происходит. Насчет <UI.Ext.AdvMgr> = 1 , 1 , 1, так понимаю, что лучше временно переключить на 0? поскольку все вылеты, исключая конфликт модов, были связаны с боями.
(07.09.2018 23:09)igrik Wrote: [ -> ]Суть: когда включен твик <UI.Ext.AdvMgr> = 1 , 1 , 1 при нападении на монстра вплотную, игра начинает неправильно получать координату x/y/Z (v998/v999/v1000) и ее параметр всегда равен 1 (т.е. подземелье).
Из-за этого возникают многие критические баги и вылеты. Отсюда и были огрехи на скрипт сохранения перед битвой. Что делать - не знаю, куда копать - не знаю. Но это полная "О","Ж","А" и "П"
Вроде бы было исправлено в самом HD-моде:
4.208 RC2 -> 4.208 RC3 (17.05.2017)
[-] (WoG/ERA) баг с невозможностью вступить в битву.
Поэтому я специально использую старую версию HD-мода, в котором этот баг ещё не был добавлен.
(08.09.2018 13:12)XEPOMAHT Wrote: [ -> ]Вроде бы было исправлено в самом HD-моде:
4.208 RC2 -> 4.208 RC3 (17.05.2017)
[-] (WoG/ERA) баг с невозможностью вступить в битву.
Поэтому я специально использую старую версию HD-мода, в котором этот баг ещё не был добавлен.
Нет, это совершенно другое. К тому же я специально указал, что проверял на 4й и 5й версиях HD:
(07.09.2018 23:09)igrik Wrote: [ -> ]в ERA 2.7.5 (и твой инсталятор тоже с твоими дефолтными настройками (более ранние версии 2.6x- 2.7x не проверял)) при игре с HD четвертой и пятой версий.
Сейчас проверил - этот баг есть и при 3.811.
Еще раз повторюсь, что:
- на ERA 2.7.5 на всех версиях HD (3.811 - 5.20) - баг
есть
- на ERA 2.46 на всех версиях HD (3.811 - 5.20) - бага
нет.
Игрик, нажал я F11 в !?BA0:
Вот без HD-мода:
Code:
int ERM2Object(int prePOST,int GM_ai,Dword MixPos,_MapItem_ *Mi,_Hero_ *Hr,int o_t,int o_st)
{
#include "templ.h"
ERM_GM_ai=GM_ai;
ERM_HeroStr=Hr;
Dword lpointer,oldpo;
int ret;
oldpo=pointer;
MixedPos(&ERM_PosX,&ERM_PosY,&ERM_PosL,MixPos);
// Не знаю какую другую обработку сделать
if((o_t==0x22)&&(Mi->OType!=0x22)) RETURN(0) // Пост тригер для героя, а он умер
if(o_t!=0x22){ // объект
lpointer=o_t<<12;
lpointer|=0x40000000; if(prePOST) lpointer|=0x08000000;
pointer=lpointer;
ProcessERM();
lpointer=(o_t<<12)+(o_st+1);
lpointer|=0x40000000; if(prePOST) lpointer|=0x08000000;
pointer=lpointer;
ProcessERM();
}else{
if((int)Mi->SetUp==Hr->Number){ // сам с собой - значит надо объект выяснять
lpointer=Hr->PlOType<<12;
lpointer|=0x40000000; if(prePOST) lpointer|=0x08000000;
pointer=lpointer;
ProcessERM();
lpointer=(Hr->PlOType<<12)+(Mi->OSType+1);
lpointer|=0x40000000; if(prePOST) lpointer|=0x08000000;
pointer=lpointer;
ProcessERM();
}
}
if(o_t!=0x22){ // объект
lpointer=MixPos&0x07FF03FF;
lpointer|=0x10000000; if(prePOST) lpointer|=0x08000000;
}else{ // герой
if((int)Mi->SetUp==Hr->Number){ // сам с собой - значит надо объект выяснять
lpointer=MixPos&0x07FF03FF;
lpointer|=0x10000000; if(prePOST) lpointer|=0x08000000;
}else{
lpointer=Mi->SetUp+30100;
}
}
pointer=lpointer;
ProcessERM();
// Dword setup=MIp->SetUp; Word otype=MIp->OType;
// if(otype==0x22){ // герой "встал" при ретрансляции
// _Hero_ *hp=GetHeroStr(setup);
// MIp->SetUp=hp->PlSetUp; MIp->OType=(Word)hp->PlOType;
// }
pointer=lpointer;
//asm int 3
ret=IsDisabled(pointer,Hr->Owner);
pointer=oldpo;
RETURN(ret)
}
Функция получает изначально неверные упакованные координаты. Пока источник не нашёл.
Я понял. А есть адрес функции?
ЗДЕСЬ: 4A946F
EBX уже содержит неверный уровень, далее передаётся на ERM2Object (74D56D), тот генерирует ЕРМ триггеры.
00711F49 MixedPos
0074C816 ProcessErm
При чём первый раз ERM2Object вызывается с верными координатами.
Может это между функциями Enter2Monster и Enter2Monster2 в monsters.cpp?
4AA766 — ещё выше находится и тоже уже с неверными координатами вызывается.
Может быть.
408049 — ещё выше, тоже с неверными. Всего два параметра.