Перейти к содержанию

Сообщения от Перенос данных из одной карты в другую между любыми картами

Пока нет оценок — будьте первым!
4 года назад
В общем я пытался создать кампанию в которой было бы больше 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 ?
Вложения 1
1 файл • Общий размер: 5,2 MB
Аватар пользователя
4 года назад
Это очень хорошие открытие! Надо будет посидеть и обмозговать информацию, полученную вами. Может, как-то удастся упростить данный способ для большей доступности.
Аватар пользователя
4 года назад
Не знаю на сколько это осуществимо :
1) Создать отдельное приложение в котором по средствам допустим выбора чекбоксов, указать какую информацию необходимо сохранить и в какой миссии-главе(например в 1-ой главе сохранить прокачку героя и армию, а во 2-ой главе что-либо иное). И сохранить выбранные настройки в файл допустим в виде 'ini' или 'xml'.
2) Уже из Dll распарсить файл с сохранёнными настройками, и подставлять необходимые для переноса данные в функцию которая будет создавать скрипт.
Аватар пользователя
4 года назад
Автор
Выхукал где игра вызывает обычный print в консоль и собрал простейший DLL, который перехватывает их и сохраняет в файл, то что мне нужно.
Я хочу отдельно засвидетельствовать, то, что вы делаете -- это высший класс. Спасибо!
Аватар пользователя
4 года назад
Крутая штука cool
Аватар пользователя
4 года назад
Блин, офигенная вещь!
Статы можно выставить как delta-default (из дельты вычесть начальное значение), но вы это и так знаете, как вижу.

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

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

Насчет выставления статов получается delta-default единственное решение? А я думал, что должен был быть более "нормальный" способ. Кажется как будто разработчики не дописали API скриптовое, точнее зачем то его сломали, так как я читал, что раньше ChangeStat нормально устанавливал значения, а не прибавлял в старых версиях. Странно, что после изменения этой функции разрабы не добавили че-то типа SetStat.
Аватар пользователя
4 года назад
Узнать координаты объектов на карте можно, но вот только тогда нужно их всех проименовать)
По сути, то, чего я хочу, — утопическая идея о полном переносе информации карты в скрипт (для постоянного хождения между локациями как в Сталкере).

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

По поводу стат — по-моему, так и есть, увы.

Статистика

Приветствуем новейшего участника: recijeb