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

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

Posts: 2490
Post: #691

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

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

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

В теме базовой адресации можно узнать:

(03.12.2021 23:32)XEPOMAHT Wrote:  2. Структура героев:

* Базовый адрес - не потребуется, т.к. в рамках совместимости с плагинами он сохранён неизменным.
* Количество героев в игре = [4BD145h]

Считывать адрес можно после триггера AfterWog, но не в самом триггере, т.к. Тифон все патчи ставит после эровского AfterWog.
(This post was last modified: 11.11.2025 23:22 by XEPOMAHT.)
11.11.2025 23:17
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4373
Post: #692

(11.11.2025 12:25)XEPOMAHT Wrote:  
текст сообщения

Всё исправил, но "полуросликов" заменил на
Code:
if (Era::IsCommanderId(stack->creature_id))
        {
            // может иметь двойную атаку
            c->return_address = 0x441BB1;
        }

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

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


Image: widget.png?style=banner2

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

Posts: 2490
Post: #693

(Yesterday 06:31)daemon_n Wrote:     if (Era::IsCommanderId(stack->creature_id))

Спасибо, теперь осталось узнать у Берсеркера, откуда он берёт IsCommanderId, т.к. в исходниках ЭРЫ я ничего об этом не нашёл. В ERA+ командиры имеют индексы 174..186 (левосторонние) и 256..268 (правосторонние), ну и в Тифоне командиры тоже никак не помечены аналогично ВоГ-у. 105

(Yesterday 06:31)daemon_n Wrote:  Сборка обновлена:

Спасибо за поддерку!
(This post was last modified: Yesterday 11:06 by XEPOMAHT.)
Yesterday 11:05
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16801
Post: #694

Code:
function IsCommanderId (MonId: integer): TInt32Bool; stdcall;
function SetIsCommanderIdFunc (NewImpl: TIsCommanderIdFunc): {n} TIsCommanderIdFunc; stdcall;
function IsCommanderId (MonId: integer): TInt32Bool; stdcall;
begin
  result := IsCommanderIdFunc(MonId);
end;

function SetIsCommanderIdFunc (NewImpl: TIsCommanderIdFunc): {n} TIsCommanderIdFunc; stdcall;
begin
  result            := @IsCommanderIdFunc;
  IsCommanderIdFunc := @NewImpl;
end;

function ImplIsCommanderId (MonId: integer): TInt32Bool; stdcall;
begin
  result := ord((MonId >= Heroes.MON_COMMANDER_FIRST_A) and (MonId <= Heroes.MON_COMMANDER_LAST_D));
end;

Это функция, которую можно заменить на свою, вызвав SetIsCommanderIdFunc и передав адрес новой функции с тем же соглашением вызова (stdcall).
По умолчанию сравнивает ИД монстра с начальным и конечным ИД командиров в вог 3.58. Но моды-расширения могут её заменить.


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

Posts: 2490
Post: #695

Так же последняя версия плагина "wog native dialogs.era" начала терять текст в команде "!!IF:D#/$1/$2/$3/$4/$5/$6/$7/$8/$9/$10/$11/$12/$13/$14/$15", а именно здесь:

Code:
$12 – выбор 1 (окно ввода) – текст кнопки
        $13 – выбор 2 (окно ввода) – текст кнопки
        $14 – выбор 3 (окно ввода) – текст кнопки
        $15 – выбор 4 (окно ввода) – текст кнопки

Пример ERM-команды, в которой плагин теряет текст (не с 1 раза, а обычно с 3 при вызове команды в разных местах, если вызывать в 1, т.е. один и тот же по нескольку раз, то вылета нет):

Code:
!!IF:D99/z100040/0/z100041/^Zmap%X2.pcx^/0/0/0/z1/0/0/0/z100042/z100043/z100044/z100045 E1/99;

К сожалению, старую версию плагина от Игрика последняя ЭРА не грузит без объяснения причин (старая ЭРА ругалась при фаталити в загрузке плагина, новая - предательски молчит), поэтому проверить эту утечку памяти там невозможно (но на моей памяти версия от Игрика с такой ошибкой не вылетала).

Без плагина (т.е. через zvslib1.dll) текст не теряется.

По итогу, "wog native dialogs.era" не может выгрузить текстовые переменные и падает:

Yesterday 17:35
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2490
Post: #696

Посмотрел по исходному коду плагина.

Данный код, с проверкой на itemText, работает всегда:

Code:
itemText = (_DlgStaticTextPcx8ed_*)dlg->GetItem(19+i);
                    if (itemText)
                    {
                        itemText->font = (int)smalfont2;
                        itemText->color = 1;
                    }
                }

А дальше - код фигачит изменения шрифта и цвета уже без проверки на существование самого текста:

Code:
((_DlgStaticTextPcx8ed_*)dlg->GetItem(msg->item_id +4))->font = (int)medfont2;
                ((_DlgStaticTextPcx8ed_*)dlg->GetItem(msg->item_id +4))->color = 7;

По крайней мере мне это кажется подозрительным, ибо я не могу найти причину пропадания текста при клике мыши по кнопке диалога и вылете при попытке выгрузить воговский диалог из "wog native dialogs.era". Вылетает, даже если просто ничего не выделять и нажать отмену, но там по крэшлогу - уже чистая утечка памяти в какое-то молоко.
Yesterday 18:51
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4373
Post: #697

XEPOMAHT, проблема с этим диалогом вскрылась, когда я исправил утечку памяти, вызванную отсутствием удаления виджетов при закрытии диалогов. Без этого исправления текст просто не удалялся из-за памяти, а потому и казалось, что всё нормально. Сейчас посмотрю, что вызывает описанное тобой поведение. Спасибо за наводки Yes


Image: widget.png?style=banner2

Новейший Heroes Launcher
Today 00:59
Visit this user's website Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4373
Post: #698

XEPOMAHT, а ведь репорт говорит о двойном удалении картинок, судя по всему.
Попробую убрать "лишнее" удаление.

UPD: проблему удалось воспроизвести -- исследую

UPD:UPD: В общем, дело в том, что igrik прописал переназначение шрифта на уже загруженный образец, хранимый в памяти, но с новой (корректной) функцией очистки памяти уже загруженный шрифт (который постоянно должен быть в памяти) удалялся, но не занулялся (хотя ни то, ни другое не должно происходить).
Я решил проблему добавлением метода установки шрифта, хотя есть и вариант просто сохранять ссылки на оригинальный (созданный в конструкторе диалога), а в деструкторе возвращать ссылки на них, но то дольше кодить. Так что будем "жрать" оперативу при каждом клике по элементу с выбором 148
реализация метода (Click to View)
То, как теперь обрабатывается процедура (Click to View)
P.S.: теоретически такая же проблема должна возникать и в меню WoG-опций, но я пока не встречал.
АХАХАХ. ДА!!! Если закрыть диалог, когда мышка наведена на элемент меню (отображается не родной шрифт), текст так же пропадёт, а игра вылетит через пару раз.
В общем, это тоже исправлю сейчас исправил (дел на 1 минуту)

P.P.S.: XEPOMAHT, ты просто красавчик -- отличная находка и подсказка177


Image: widget.png?style=banner2

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

Posts: 16801
Post: #699

XEPOMAHT, daemon_n, молодцы, парни 132


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

Posts: 4373
Post: #700

UPD: Сборка обновлена:
Вот ссылка на файл .era:
wog native dialogs.era

Вот ссылка на файл .dbgmap:
wog native dialogs.dbgmap


Image: widget.png?style=banner2

Новейший Heroes Launcher
Today 07:48
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