Current time: 14.11.2025, 14:28 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Плагины. Обсуждение
» Plugins. Discussion & Questions
Author Message
XEPOMAHT Offline
Moderators

Posts: 2490
Post: #676

(22.05.2024 01:10)Archer30 Wrote:  XEPOMAHT, it looks like Prima didn't patch Mana Vortex. When a hero has Knowledge at above 127, Mana Vortex won't be activated.

Исправлена очепятка в адресе патча. Вместо 5 была 3. Скачать: https://dropmefiles.com/S8qUO

Спасибо за найденную ошибку.
22.05.2024 01:48
Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1192
Post: #677

XEPOMAHT, thanks!


Latest ERA mods and scripts in development - My GitHub
22.05.2024 08:43
Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1192
Post: #678

igrik, in the latest game bug fixes extended.dll, we have a problem of double-wide units

Video and save game

When there's a unit behind a double-wide unit, for this double-wide unit, clicking on the rear of this unit will result in a turn skip (because not possible to move).
Disabling game bug fixes extended.dll resolves the issue.

temporary solution:


Latest ERA mods and scripts in development - My GitHub
(This post was last modified: 04.06.2024 19:31 by Archer30.)
23.05.2024 23:16
Find all posts by this user Quote this message in a reply
SadnessPower Offline

Posts: 1
Post: #679

Hi Igrik,
i would like to report 2 things about your beautiful ChooseAttack plugin:

1) In Hot Seat mode, there is no ChooseAttack button for the right player.

2) The creature ids which have alternate attacks are hardcoded in your plugin. It would be could to make a configuration file or a function which can be called to add more creature. Otherwise the Choose Attack doesn't work on new creatures added by mods.

Can you look into it?

Thank you in advance,
SadnessPower
19.09.2024 15:55
Find all posts by this user Quote this message in a reply
ArKan Offline

Posts: 231
Post: #680

Image: 27144c8ea67c0ea02cf67ab968b38933.jpg

SoD_SP выдаёт вот такую ошибку
17.11.2024 09:49
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2490
Post: #681

При использовании плагина new_battle_interface_dlg.dll от daemon_n Y-координата окна просмотра характеристик монстра почему-то сползает вверх при увеличении расширения экрана монитора.

На 800х600 координаты верные:

Image: 1.jpg

На 1280х1024 (выше монитор не поддерживает) плагин new_battle_interface_dlg.dll Y-координату обнуляет:

Image: 2.jpg

Исправьте, если не сложно.
12.10.2025 04:12
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2490
Post: #682

При использовании последней версии плагина game bug fixes extended.dll от daemon_n вместе с ERA+ теперь стабильно вылетает при попытке ответного удара отряда на поле брани (бой проводился Тяжёлыми Нага-Танками против Духов):

Поэтому в состав ERA+ вынужденно возвращается старая версия game bug fixes extended.dll от 2024 года, в которой этого вылета нету. Временно, пока эта критическая ошибка не будет исправлена.
(This post was last modified: 07.11.2025 16:34 by XEPOMAHT.)
07.11.2025 16:32
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4373
Post: #683

XEPOMAHT, сейчас проверю, что там.

UPD: отключил часть хуков с тифоном на обработку огненного щита. Проверь, пожалуйста, есть ли у тебя там что-то из патчей или хуков:


Image: widget.png?style=banner2

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

Posts: 2490
Post: #684

(07.11.2025 18:53)daemon_n Wrote:  Проверь, пожалуйста, есть ли у тебя там что-то из патчей или хуков:

_PI->WriteLoHook(0x441982, LoHook_00441982) - этот хук затирается Тифоном и срабатывать не должен

_PI->WriteLoHook(0x441AFF, LoHook_00441AFF) - этот хук Тифону вроде б не мешает - там работает содовский код, на выполнение Тифоновского кода это никак не влияет

_PI->WriteHiHook(0x441b5d, CALL_, EXTENDED_, THISCALL_, HiHook_00441b5d); - этот хук затирается Тифоном и срабатывать не должен

(07.11.2025 18:53)daemon_n Wrote:  if (reinterpret_cast<_BattleStack_*>(c->edi)->count_current > 0)

Не очень понимаю эту строку с аж 4 знаками сравнения (я плохо понимаю Си), но что означает в ней "reinterpret_cast"? Если это какая-то воговская переменная, то её может и не быть, т.к. Тифон некоторые ненужные воговские данные отключает.

PS: Методом научного тыка, на который я потратил 2,5 часа, удалось узнать, что глючит эта функция:

Code:
// © JackSlater
// Вампиризм не работает на клонов
_LHF_(LoHook_BattleStackVampirism)
{
    if (reinterpret_cast<H3CombatCreature *>(c->edx)->creature.clone)
    {
        c->return_address = 0x4412AB;
        return NO_EXEC_DEFAULT;
    }
    return EXEC_DEFAULT;
}

Для Тифоновских Духов в edx будет МУСОР (точнее, тифоновский флаг вампиризма, чтобы вампиры не вампирили друг у друга). Поэтому игра тут глючит! Структуру стека в этом месте для совместимости нужно извлекать из стека, а не из edx (т.к. Тифоновская вставка его не восстанавливает, т.к. в дальнейшем коде он в следующей команде затирается содовским кодом).

Пришлось перенести этот багфикс в Тифон, после чего ошибка изчезла:

Code:
proc Багфикс_вапиризма
    mov edx, dword [ebp+8]
    bt dword [edx+Структура_стека.Флаги], Флаг_Клон ; цель отсоса - не клон
    jb .нет_вампиризма
    mov ebx, dword [esi+Структура_стека.Текущее_количество]
    mov edx, dword [esi+Структура_стека.Количество_в_начале_битвы]
    push 44093Bh
    ret

.нет_вампиризма:
    push 4412ABh
    ret
endp
(This post was last modified: 11.11.2025 11:20 by XEPOMAHT.)
08.11.2025 03:13
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16801
Post: #685

XEPOMAHT, perplexity/qwen/deepseek в помощь )
reinterpret_cast — это приведение типов. Дословно: интерпретировать данные по адресу как другой тип

if (reinterpret_cast<_BattleStack_*>(c->edi)->count_current > 0)

c->edi считать указателем на структуру BattleStack, далее посмотреть счётчик текущий существ в структуре и сравнить с 0.


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

Posts: 2490
Post: #686

(08.11.2025 07:25)Berserker Wrote:  perplexity/qwen/deepseek в помощь )

perplexity открывает пустой экран в браузере.
qwen зависает, когда пытается что-то прочитать с гугла.
deepseek сразу с ходу говорит что-то на буржуйском:

Quote:Your browser is out of date. Update your browser to view this site properly.

(08.11.2025 07:25)Berserker Wrote:  reinterpret_cast — это приведение типов. Дословно: интерпретировать данные по адресу как другой тип

В структуре тип задан как _int32_, почему его напрямую нельзя сравнивать с нулём? Т.е. написать так:

Code:
if (((_BattleStack_*)c->edi)->count_current > 0)

Особо в программировании на Си не понимаю, поэтому спрашиваю.
08.11.2025 14:23
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16801
Post: #687

Это принудительное приведение типов в стиле СИ без проверок. Оно позволяет байт считать 32-битной переменной при желании. Иногда оно приводит к ошибкам. В С++ сделали явными варианты приведения:

1) С сохранением размера оригинальной переменной static_cast. Тут нельзя байт как указатель интерпретировать
2) С полной переинтерпретацией байтов и адресов. Тут можно что хочешь на свой страх и риск


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

Posts: 4373
Post: #688

XEPOMAHT, я уже закомментировал и зарелизил плагин с 3 хуками, указанными выше, если включен Тифон.
Мне их вернуть?
"Вампиризм" сейчас тоже исправлю на получение стека из стека (tautology intended)


(08.11.2025 14:23)XEPOMAHT Wrote:  В структуре тип задан как _int32_, почему его напрямую нельзя сравнивать с нулём? Т.е. написать так:

Code:
if (((_BattleStack_*)c->edi)->count_current > 0)

Особо в программировании на Си не понимаю, поэтому спрашиваю.

Потому что я предпочитаю приведение типов, которое появилось в C++. А ещё читается проще, а не *(вот*)(((*(так)**))*)).

Вот пример исправленного кода:

Code:
// © JackSlater
// Вампиризм не работает на клонов
_LHF_(LoHook_BattleStackVampirism)
{
    if ((*reinterpret_cast<H3CombatCreature **>(c->ebp + 0x8))->creature.clone)
    {
        c->return_address = 0x4412AB;
        return NO_EXEC_DEFAULT;
    }
    return EXEC_DEFAULT;
}

UPD: Сборка обновлена:
Вот ссылка на файл .dll:
game bug fixes extended.dll

Вот ссылка на файл .dbgmap:
game bug fixes extended.dbgmap


Image: widget.png?style=banner2

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

Posts: 2490
Post: #689

(11.11.2025 06:23)daemon_n Wrote:  я уже закомментировал и зарелизил плагин с 3 хуками, указанными выше, если включен Тифон.
Мне их вернуть?

Да, верни их, т.к. хук 441AFF вроде б отменяет ответный удар защитника, если атакующий умер от огненного щита в своей атаке, т.е. с Тифоном конфликта там нет и правка содовского бага сработает с Тифоном. А остальные хуки и так затираются Тифоном.

Так же Тифону мешает этот код:

Code:
// Фикс Уланда - герой имеет продвинутую мудрость на старте
    o_HeroInfo[HID_ULAND].second_skill_1_lvl = 1;
    // Фикс Димера - герой имеет продвинутую разведку на старте
    o_HeroInfo[HID_DEEMER].second_skill_2_lvl = 1;

и этот:

Code:
// © JackSlater
    // фикс бага при получении хинта от Магических Святынь
    // ранее использовался массив с заклинаиями от артефактов 0x430 -> 0x3EA
    _PI->WriteWord(0x40D979 +3, 0x3EA);

и этот:

Code:
// удаляем иммунитеты к огню у призраков
    o_CreatureInfo[CID_GHOST].fireImmunity = false;

    // удаляем иммунитеты к огню у посланников
    o_CreatureInfo[CID_FIRE_MESSENGER].fireImmunity = false;
    o_CreatureInfo[CID_EARTH_MESSENGER].fireImmunity = false;
    o_CreatureInfo[CID_AIR_MESSENGER].fireImmunity = false;
    o_CreatureInfo[CID_WATER_MESSENGER].fireImmunity = false;

и этот, т.к. индексы командиров в Тифоне сменены (т.е. этот фикс сломает Полуросликов-Гренадёров, если кто-нибудь в редакторе монстров выставит им флаг двойной атаки):

Code:
// фикс WoG'a
    // командиры, имеющие флаг стрельбы и двойной атаки, в рукопашной бъют один раз. Исправим это, ибо они уникальны
    _PI->WriteLoHook(0x441BAA, Y_NPC_FixDoubleAttackOnMelle);

Так же у тебя отсутствует получение максимального количества героев в игре, т.е. данный код с Тифоном несовместим:

Code:
if (heroID >= 0 && heroID < 156)
11.11.2025 12:25
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4373
Post: #690

(11.11.2025 12:25)XEPOMAHT Wrote:  Так же у тебя отсутствует получение максимального количества героев в игре, т.е. данный код с Тифоном несовместим:

Code:
if (heroID >= 0 && heroID < 156)

Как именно (откуда и когда) предлагаешь получать число героев?


Image: widget.png?style=banner2

Новейший Heroes Launcher
11.11.2025 21:09
Visit this user's website 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