Перенос данных из одной карты в другую между любыми картами - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Модостроительство В этом разделе можно обсуждать все что касается создания модов для Heroes of Might and Magic V.

Ответ
 
Опции темы
#1
Старый 18.12.2021, 21:41
  #1
^
Mistral-war2
📖
Регистрация: 18.12.2021
Сообщения: 2
Регистрация: 18.12.2021
Сообщения: 2
По умолчанию
Перенос данных из одной карты в другую между любыми картами

В общем я пытался создать кампанию в которой было бы больше 5 миссий.
Приходится делать через обычные карты, но невозможность переноса все сильно ограничивает.
Нагугливал на разных сайтах, что раньше можно было делать print_to прямо в файл, но как оказалось эту возможность давно убрали.
Не придумал ничего лучше, чем дописать функцию в код игры самому.
Выхукал где игра вызывает обычный print в консоль и собрал простейший DLL, который перехватывает их и сохраняет в файл, то что мне нужно.
Для того, чтобы оно все сразу само переносилось в следующие миссии я записываю непосредственно скриптовые функции сразу в LUA файл, который потом может быть загружен в следующей карте (миссии кампании) через простейший doFile().

Пример переноса данных из одной карты в другую.
На видео видно как между миссиями переносятся статы Атака и Защита героя Витторио. (собрано на коленке из говна и палок за 0.00001 наносек)
Сохранение в файл происходит когда у синего игрока убивают героя. (но по сути можно прописать это в любой триггер, вообще в любой)

https://www.youtube.com/watch?v=2icBCpRaBp4


Если развивать эту тему, то можно в теории переносить любую информацию в другие карты на лету.
Все можно скачать и попробовать во вложении. Исходник DLL компилится через MINGW GCC, но возможно MS VS его тоже сожрет.

Плюсы
1) Очевидно такой способ позволяет создавать кампании с количеством миссий больше 5, просто с переносом инфы между картами (или между несколькими кампаниями, если надо)
2) Можно выбирать, какую информацию переносить, не как в обычной кампании из редактора карт, а например, можно перенести только один определенный стат, навык, артефакт или даже армию.
3) Переносить инфу больше чем о 5 героях.
4) Наверное есть ещё, но пока не придумал.
Минусы
1) Сейчас оно все захардкодено в DLL, возможно кто-то может подсказать как бы лучше это дело автоматизировать и облегчить, чтобы могли пользоваться даже люди, не способные скомпилировать DLL.
2) Приходится вручную прописывать print практически для каждого значения стата, так как в DLL выхукано именно вывод текста. Что-то типа print("ATAK=",A) оно не ловит, только обычный принт.
3) ChangeHeroStat именно добавляет статы а не ставит значения, поэтому сейчас приходится уменьшать их на оригинальное значение, а потом только добавлять.
4) Наверное есть ещё, но пока не придумал.

Вопрос:
Есть ли у кого-то способ или скрипт как именно устанавливать значение статов, а не добавлять их как в ChangeHeroStat ?
Вложения
Тип файла: zip h5.zip (5.22 Мбайт, 11 просмотров)
Mistral-war2 вне форума
Ответить с цитированием
#2
Старый 18.12.2021, 23:40
  #2
^
Andrei_21
 
Аватар для Andrei_21
📖
Регистрация: 14.03.2021
Сообщения: 170
Andrei_21#1931
Выставка наград
Регистрация: 14.03.2021
Сообщения: 170
Andrei_21#1931
Выставка наград
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

Это очень хорошие открытие! Надо будет посидеть и обмозговать информацию, полученную вами. Может, как-то удастся упростить данный способ для большей доступности.
Andrei_21 вне форума
Ответить с цитированием
#3
Старый 19.12.2021, 04:13
  #3
^
vova2112
 
Аватар для vova2112
📖
Регистрация: 01.09.2020
Сообщения: 57
Регистрация: 01.09.2020
Сообщения: 57
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

Не знаю на сколько это осуществимо :
1) Создать отдельное приложение в котором по средствам допустим выбора чекбоксов, указать какую информацию необходимо сохранить и в какой миссии-главе(например в 1-ой главе сохранить прокачку героя и армию, а во 2-ой главе что-либо иное). И сохранить выбранные настройки в файл допустим в виде 'ini' или 'xml'.
2) Уже из Dll распарсить файл с сохранёнными настройками, и подставлять необходимые для переноса данные в функцию которая будет создавать скрипт.
__________________
Невозможное - невозможно. Например, невозможно двигаться быстрее света... Впрочем, если это и было бы возможно - стоит ли стараться? Все равно никто не увидит и не оценит.
К. Прутков-инженер, мысль No 17

Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.
© Козьма Прутков
Невозможное - невозможно. Например, невозможно двигаться быстрее света... Впрочем, если это и было бы возможно - стоит ли стараться? Все равно никто не увидит и не оценит.
К. Прутков-инженер, мысль No 17

Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий.
© Козьма Прутков
vova2112 вне форума
Ответить с цитированием
#4
Старый 19.12.2021, 14:11
  #4
^
Ment
 
Аватар для Ment
📖
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 25207
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 25207
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

АвторВыхукал где игра вызывает обычный print в консоль и собрал простейший DLL, который перехватывает их и сохраняет в файл, то что мне нужно.
Я хочу отдельно засвидетельствовать, то, что вы делаете -- это высший класс. Спасибо!
__________________
Времена года прошли
Не оставив часа на плач.
Вспомни их, чтоб победить,
Довольно неудач!





Стикеры GBF в Telegram
Времена года прошли
Не оставив часа на плач.
Вспомни их, чтоб победить,
Довольно неудач!





Стикеры GBF в Telegram
Ment сейчас на форуме
Ответить с цитированием
#5
Старый 19.12.2021, 14:34
  #5
^
Waterfall_13
 
Аватар для Waterfall_13
📖
Регистрация: 31.03.2020
Адрес: Крым
Сообщения: 608
Waterfall#7225
Регистрация: 31.03.2020
Адрес: Крым
Сообщения: 608
Waterfall#7225
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

Крутая штука cool
Waterfall_13 вне форума
Ответить с цитированием
#6
Старый 20.12.2021, 07:52
  #6
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1537
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1537
Выставка наград
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

Блин, офигенная вещь!
Статы можно выставить как delta-default (из дельты вычесть начальное значение), но вы это и так знаете, как вижу.

К слову хочу сказать, что данные (числа и строки, а также функции для parse'ра) можно передавать между сценариями через SetGameVar, а телепорт в новые миссии осуществлять автоматом через WarpToMap.
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#7
Старый 20.12.2021, 17:07
  #7
^
Mistral-war2
📖
Регистрация: 18.12.2021
Сообщения: 2
Регистрация: 18.12.2021
Сообщения: 2
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

Видел вы писали на ютубе "Вот было бы круто, если бы переносились данные по карте map.xdb (положении обьектов к концу игры итд)."
В теории можно запомнить любую информацию, которую можно узнать скриптами и вывести в print, а затем так же скриптами установить. Но как я понимаю как раз их и SetGameVar тоже может?
А вообще положение объектов, что имеется ввиду? где герой стоял? В теории можно узнавать его координаты через локации, а телепортировать через SetObjectPosition. Или на героев оно не работает? И для других объектов типа лежащих ресурсов тоже наверное можно узнать подбирались ли они? Вроде видел в мануале GetObjectsInRegion. Конечно тема муторная получается в итоге, но в теории возможно?


Кстати SetGameVar и WarpToMap работают в кампаниях тоже? или только в стандартных миссиях?
Получается я зря делал свой dll раз уже был способ переноса и так.


Насчет выставления статов получается delta-default единственное решение? А я думал, что должен был быть более "нормальный" способ. Кажется как будто разработчики не дописали API скриптовое, точнее зачем то его сломали, так как я читал, что раньше ChangeStat нормально устанавливал значения, а не прибавлял в старых версиях. Странно, что после изменения этой функции разрабы не добавили че-то типа SetStat.
Mistral-war2 вне форума
Ответить с цитированием
#8
Старый 21.12.2021, 08:15
  #8
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1537
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1537
Выставка наград
По умолчанию
Re: Перенос данных из одной карты в другую между любыми картами

Узнать координаты объектов на карте можно, но вот только тогда нужно их всех проименовать)
По сути, то, чего я хочу, — утопическая идея о полном переносе информации карты в скрипт (для постоянного хождения между локациями как в Сталкере).

Увы, SetGameVar переносит данные между сценариями, последовательно запущенными, а также между миссиями кампаний (так организован перенос артефактов). Но dll вы писали не зря, я уверен, что у него есть более широкое применение. Возможно ли сохранение таблиц? Это же очень круто: передать сложные n-мерные таблицы при помощи SetGameVar нереально.

По поводу стат — по-моему, так и есть, увы.
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
Ответ


Опции темы



Часовой пояс GMT +4, время: 01:26.


vBulletin v3.5.0, Copyright ©2000-2022, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru