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

Full Version: ERA II
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
У сильванских кентавров постоянный бонус как от заклинания "Радость". Не знаю, надо ли так, но раньше такого не было.
Reinc, сильваны вроде всегда были радостными, как минотавры.
igrik, заметил, что по ссылке обновлена сборка. Что нового/правленого? Готов тестить148
вылетает после битвы с компами. ЯД
(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 такого бага нет.
Скрин (Click to View)
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 — ещё выше, тоже с неверными. Всего два параметра.
Reference URL's