XEPOMAHT, указанная функция никакого отношения к Эре не имеет. В буфере по результату её выполнения должна быть отформатированная строка. Похоже на легальный относительный путь. Вероятно, какой-то файл далее по коду не находится по данному относительному пути. С 2.8.0 изменился способ работы с путями на соответствующий оригинальному поведению ОС Windows. Ранее С Эры 2.0 пути вида «\File» обрабатывались как относительные геройской папки, а реально это путь от корня текущего диска. В коде выше проблемы не вижу. Возможно, она появляется далее по коду при формировании полного пути. Не смотрел журнал Эры со включённой трассировкой файловой системы?
helgtla, есть ещё какие-то функции для работы с музыкой, поскольку соглашусь, иногда бывают не ясные моменты в работе менеджера музыки.
Попробуйте следующее. При событии установите v5180 в 1. И сразу же вызывайте !!MP:P^трек^/0/1;
А в !?MP блокируйте любое изменение музыки вообще, если переменная равна 1.
!?какое-то событие
!!VRv5180:S0;
!!MP:P^трек^/0/1;
!!VRv5180:S1;
!?MP;
!!if&v5180=1:; смена композиций заблокирована
!!MP:R0;
!!FU:E;
!!en:;
(27.09.2019 01:47)Berserker Wrote: [ -> ]В буфере по результату её выполнения должна быть отформатированная строка. Похоже на легальный относительный путь.
И... значит эта команда не может отформатировать строку под новую версию ЭРА (я в Си ничего не понимаю, если что):
Code:
int artifact = atoi(ffd.cFileName);
???
XEPOMAHT, функция sprintf находится или в самой dll, или в msvcrt.dll, никакого отношения ни к одному проекту в мире она не имеет.
int artifact = atoi(ffd.cFileName);
Это интересная строка. Берётся строка с именем файла и вызывается преобразование её в целое число. ffd — видно структура LPWIN32_FIND_DATA. Используется в цикле FindFirstFileA - FindNextFileA - FindClose.
Загрузи, пожалуйста, пример нерабочего плагина и тестовый конфиг к нему из одного или нескольких файлов. Мне также важно знать, как ты определяешь, что файлы не загружены.
(27.09.2019 02:59)Berserker Wrote: [ -> ]Загрузи, пожалуйста, пример нерабочего плагина и тестовый конфиг к нему из одного или нескольких файлов. Мне также важно знать, как ты определяешь, что файлы не загружены.
Мод ERA+, внутри - феаноровский плагин emerald_v202a.era.
Проверка: в папке data/artifacts лежат конфиги артефактов, задающие им свойства. Например я даю герою артефакт №249 - посох колдуна (даёт все заклинания 4-го уровня). Сразу должны появиться заклы в книге с заклинаниями героя, в ERA 2.7.7 заклинания появляются (т.е. конфиг грузится и обрабатывается), а в ERA 2.8.X - уже нет.
AstralBagFix.bin
crexpfix.bin
dismiss last stack.bin
display primary skills over 99.bin
DwellingsSecurity.bin
emerald.bin
fix_erm_if_n1.bin
inferno gates teleports to any town.bin
Jeddite_Nagash.bin
kartograf 15000.bin
NewTerra.bin
no_underground_at_underground.bin
no secondary skills limit.bin
Straker.bin
transfer last stack.bin
view mage guild.bin
Данные патчи из EraPlugins перемести, пожалуйста, в EraPlugins\AfterWoG
Иначе они вообще не грузятся. Для чего emerald.bin?
И всё работает после этого, проверил.
В 2.8.3 было исправление старого недокументированного поведения загрузки в неизвестное время bin-патчей из EraPlugins.
[-] Era does not apply *.bin patches from EraPlugins directory anymore. Patches from EraPlugins/BeforeWoG and EraPlugins/AfterWoG directories are still applied.
В документации говорилось только о двух папках: EraPlugins\OnAfterWoG и EraPlugins\OnBeforeWoG. Феанор использовал EraPlugins по старой традиции.
(27.09.2019 03:22)Berserker Wrote: [ -> ]Для чего emerald.bin?
Расширяет ветку артефактов, дающих заклинания. Порт из исходников MoP.
Berserker указанный Вами способ не помогает. Всё так же при завершении композиции во время боя- только ALT+TAB для рестарта мелодии.
(27.09.2019 03:28)Berserker Wrote: [ -> ]Но сперва я поместил бинарные патчи в правильную подпапку.
Поместил бинарники в папку AfterWoG - всё равно не работает и артефакт заклинания не даёт. А конфиги читаются - зря я грешил, прости. Не читаются бин-файлы, куда бы я их не помещал...

Хмм. У меня посох колдунов дал Армагеддон. Это поведение ведь не верное?
В файле D:\Heroes 3\Debug\Era\patch list.txt список всех применённых патчей. Нажми F11, чтобы он сгенерировался:
> Format: [Patch name] (Patch size)
acredit.bin (24)
ai sod radius.bin (21)
AstralBagFix.bin (14)
crexpfix.bin (606)
dismiss last stack.bin (54)
display primary skills over 99.bin (472)
dl buttons fix.bin (17)
DwellingsSecurity.bin (13)
emerald.bin (283)
enable next hero button.bin (17)
enable town info.bin (14)
fix erm ca b2 command.bin (15)
fix erm check syntax.bin (42)
fix erm ss a command.bin (13)
fix erm tr r roads.bin (15)
fix towers damage.bin (31)
fix wog exp screen.bin (112)
fix_erm_if_n1.bin (49)
inferno gates teleports to any town.bin (40)
Jeddite_Nagash.bin (28)
kartograf 15000.bin (24)
mp3 44khz patch.bin (24)
NewTerra.bin (561)
no erm he f redraw.bin (13)
no erm ow r redraw.bin (17)
no erm scripts turning off.bin (16)
no memory and hdd checks.bin (22)
no multiplayer notes.bin (17)
no secondary skills limit.bin (67)
no_underground_at_underground.bin (13)
remove black screens.bin (15)
remove exe protection.bin (109)
skeleton transformer fix.bin (22)
Straker.bin (39)
transfer last stack.bin (85)
view mage guild.bin (24)
zvslib.bin (324)
helgtla, пока решения вопроса нет. Вероятно, есть ещё какие-то настройки, которые игра меняет. Буду думать, что можно сделать, но пока что нужно обходное решение. Есть гипотеза, что в бою игра отключает вообще функцию повтора.
XEPOMAHT, проверил пару байт патча emerald.bin — применён. Можешь указать, байты какого патча по-твоему перезаписаны? Думаю, дело в том, что МоР в патчах опирался на старый код ВоГа, где у функций были логирующие пролог и эпилог. Вместо них сейчас NOP-ы. MoP менял в таких местах адрес вызова функций, не прописывая начальный опкод CALL.
..конкретно в патче emerald.bin, который применяется, я проблем не вижу.
https://yadi.sk/i/mbx8gIxD3VWCpg
Может быть, всё-таки один из феаноровских плагинов тоже на воговские пролог/эпилог где был завязан. Точно не скажу. Артефакт добавляется, отображается, но даёт Армаггеддон.
(27.09.2019 03:47)Berserker Wrote: [ -> ]Хмм. У меня посох колдунов дал Армагеддон. Это поведение ведь не верное?
Нет, не правильное. Патч должен применяться
ДО загрузки emerald_v202a.era. Т.е. в последней ERA он работает только из папки BeforeWoG. Уффф, разобрался с этим, теперь есть повод перезалить ERA PLUS под ERA 2.8.8 ещё раз. И ещё раз спасибо,
Berserker 
XEPOMAHT, понял! Отлично! )) Для этого и есть явное деление на BeforeWoG и AfterWoG.
Вот порядок загрузки плагинов и применения патчей:
Code:
:
LoadPlugins('era');
EventMan.GetInstance.Fire('OnBeforeWoG', NO_EVENT_DATA, 0);
BinPatching.ApplyPatches(GameDir + '\' + PATCHES_PATH + '\BeforeWoG');
InitWoG;
EraInit;
LoadPlugins('dll');
EventMan.GetInstance.Fire('OnAfterWoG', NO_EVENT_DATA, 0);
BinPatching.ApplyPatches(GameDir + '\' + PATCHES_PATH + '\AfterWoG');
Так как у плагина старое расширение dll, то грузится он после применения двоичных патчей из BeforeWoG и после загрузки других плагинов с расширением era. Как раз для совместимости.
Странный баг:
На посланниках огня висит "защита от огня" 1000 раундов, но при этом они имеют иммунитет к магии огня. В описании - защищен от огня.
Это так задумано, или надо исправить?