Archer30, check you test in Era 2 or WoG 3.58. I'm pretty sure you'll get the same behavior.
When you teleport hero, no external data structures are changed. If a hero was in prison, it will still be marked as staying in prison. If hero was in a town (CA:H), it will be there. Thus you need advanced code to handle all those edge cases.
For instance CA:H0/-1, HE(hero):O-1, HE(hero):P..., HE(hero):O(restoreOwner).
Not a bug, but we still hope it could be improved!
Looks like the CO:X command worked as it should, it sets commander lv/exp correctly and everything, but it doesn't get commander to the level up screen even if the new level/exp is greater than current. So...you got only the change in number but nothing else. This is a completely different behaviour comparing with HE:E.
Есть некая проблема, связанная с функционалом ХД мода и ЭРА триггерами "после битвы"! Это по моим выводам связано именно с ХД модом, но думаю, что лучше будет, если Берсеркер об этом Бараторчу объяснить попытается. Мои объяснения в ветке ХД мода, скорее не смогут донести до него суть проблемы. ------------------------------------------------ Суть: На версии ХД мода 5.0 RC 89 - условия скриптов идущих в теле триггера !?BA1 или !?FU(OnAfterBattleUniversal) выполнялись лишь именно при завершении боя. Но никогда не стартовали, если игрок выбирал опцию "Загрузка из боя" (функционал ХД мода). На более поздних версиях (имеется 5.2 RC 39 и 5.2 RC 44) - условия в теле триггера стартуют даже если бой не окончен, а выбрана опция загрузки непосредственно из боя. От версий ЭРА это не зависит (проверял на 3.3.5 и 3.8), именно версия ХД мода влияет.
----------------------------------------------------------- Прилагаю тестовый мод с готовой модуляцией ситуации. Test mod (HD+ERA after_battle trigger) К сожалению я не знаю где достать предыдущие версии ХД мода, потому могу лишь сослаться на карту-мод от SergOz. У него стоит именно старая и "рабочая" версия ХД мода (5.0 RC 89) Карта SergOz Для наглядности привожу также видео демонстрацию всего того, о чём выше написал:
(28.06.2021 14:03)daemon_n Wrote: helgtla, это не проблема, а результат её решения.
Я бы сказал, что для большинства авторских карт ЭТО именно проблема. И достаточно весомая! Во многих авторских ЭРА картах по завершению боя происходят некие действия: либо диалоги, либо ещё что (вплоть до того, что действия могут быть продолжительными по реальному времени (показ участка карты, телепортация героев и т.д.)). Бои на авторских картах, как правило создаются с учётом некоей сложности, что подразумевает, что их прохождение может потребовать перезагрузку битвы (не переигровку, а именно перезагрузку) для изменения сетапа героя/артов/войска. И часто подобные загрузки приходится проводить отнюдь не единожды. А это приводит (при данной реализации) к постоянному "просмотру постсодержимого битвы" при каждой попытке грузиться из боя (в таком случае сама опция "быстрой боевой загрузки" теряет смысл, так как это практически идентично тому, как если бы игрок сначала завершил бой на "Q", а после попытался загрузиться в стандартном режиме). И мне кажется (хотя я и не играю особо), что подобные "постбоевые триггеры" достаточно часто используются и других модах, применяемых именно что для игры на случайных картах (я про ТУМ и АКМ).
(28.06.2021 14:31)daemon_n Wrote: helgtla, ранее, если грузиться из боя, игра ломалась. Этим всё сказано.
А можно поподробней, что именно "ломалось"? Не возможно было загрузить/инициировать загружаемую сессию, крашилась сама игра , может "запарывалось" физически сам сейв файл. Что именно? А то сейчас, я пока не замечал проблем по сравнении с предыдущей реализацией загрузки из боя. Но вот обновлённый вариант гарантированно вызывает "раздражение" (я не только про себя говорю, но и по отзывам некоторых тестеров-игроков). Может есть тогда какая-либо возможность при сохранении версии ХД мода (обновлённых версий) вернуть старый функционал боевой загрузки (если это возможно как-то твиками сделать)? Повторюсь: то что есть на данный момент - крайне неудобно в плане игрового взаимодействия с игроком.
helgtla, в HD моде решение сделано верное.
Конкретно в твоём случае нужно придумать правильный способ определения, что из боя вышли перезагрузкой, а не победой/поражением.
Upd: самый простой способ (на вскидку...), это после битвы проверить параметр o_BattleMgr->Finished != 1
Но это не точно, нужно проверять. Но на работе я этого сделать не могу.
Как раз старый способ выхода из боя ломал всю цепочку триггеров, включая OnGameLeave, поскольку был реализован хакерским способом. Реально бой должен закончится, затем эмулируется выход в меню загрузки.
Хорошо, если Игрик найдёт решение. Возможно, было бы неплохо, если бы HD-мод генерировал событие вроде OnLoadGameFromBattle. Бой заканчивается победой или поражением?
(28.06.2021 15:49)Berserker Wrote: Хорошо, если Игрик найдёт решение. Возможно, было бы неплохо, если бы HD-мод генерировал событие вроде OnLoadGameFromBattle. Бой заканчивается победой или поражением?
Не нашёл я простого решения, как не бился. Либо нужно хук создавать (но его там тупо некуда впихнуть) либо самое правильное решение - получать событие от HD. Нужно репортить Бараторчу.
Кстати, при этих тестах обнаружил, что UN:C (расширенное, которе со смещением) как то не всегда верно отрабатывает.
Например, в ряде случаев:
1) Старый синтаксис всегда работает правильно:
UN:C(адрес)/4/?(param:y);
VR(адрес2:y):S(param) +(offset);
UN:C(адрес2)/4/?(value:y);
2) Новый синтаксис НЕ всегда работает правильно, и очень часто мне возвращал value=ноль: UN:C(адрес)/(offset)/4/?(value:y); (upd: не правильно)
UN:C(адрес)/4/?(адрес2:y);
UN:C(адрес2)/(offset)/4/?(value:y); (upd: правильно)
Т.е. я запускал оба кода одновременно и в одном триггере, первый мне возвращал value=данные, второй value=ноль.