Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Наработка
Версия Warcraft:
1.26 +?

Перенос персонажа в мультиплеере

В теме варкрафта периодически возникает вопрос переноса персонажа в мультиплеере. Наработка позволяет сохранять персонажа в файл и подгружать его. Сегодня мы попробуем внедрить ее в две тестовые карты.
Возможности переноса
  • Юнит
    • Жизнь
    • Мана
    • Положение
    • Поворот
  • Герой (опционально)
    • Опыт
    • Сила
    • Ловкость
    • Разум
  • Игрок
    • Золото
    • Дерево
  • Свои данные (до 1000 значений)
Команды
-save название - выполняет сохранение. Так как в локальной сети имя игрока можно менять, то было принято решение привязывать сохранение к файлу-идентификатору, который создается при первом сохранении по пути save/'SaveUnit_directory'/user
-load название - выполняет загрузку.
PS Если название оставить пустым, то имя сохранения по умолчанию примет знание "default"
Настройки переменных
SaveUnit_unit - unit - поместить персонажа перед сохранением в эту переменную. После загрузки новый юнит будет помещен сюда.
SaveUnit_ability - integer array - массив обычных способностей. Укажите там те способности, которые вы выдаете персонажу в различных условиях, например, после выполнение квеста. Или те способности, уровень которых вы меняете.
SaveUnit_hero_ability - integer array - массив геройских способностей. Тут надо указать те способности, которыми обладают ваши герои. Если их не указать, то при загрузке игроку будет нужно изучать способности заново.
SaveUnit_user_data - integer array - массив пользовательских данных. Если вы желаете сохранить свои собственные значения во время сохранения персонажа, то вам нужно указать в SaveUnit_user_data[0] количество сохраняемых элементов. Затем положите данные в этот массив с индекса 1. Внимание: не сохраняйте более 1000 элементов. После загрузки персонажа ваши значения снова окажутся в этом массиве, включая и их количество. Внимание: значения ваших переменных должны быть в диапазоне от 0 до 2_000_000_000
SaveUnit_directory - string - название папки, где будут храниться сохранения. По умолчанию используется путь save/'SaveUnit_directory'/
SaveUnit_map_number - integer - номер карты в системе карт (1, 2, 3...). Если ваш персонаж может быть загружен на нескольких физически разных картах (.w3x), указывайте разный номер. Если персонаж загружается на ту карту, где он был в прошлый раз, то он территориально появляется там, где был на момент сохранения. Если он загружается в новую карту, то координата Х и У будут взяты из SaveUnit_x и SaveUnit_у. Установите их заранее.
SaveUnit_author - integer - уникальное авторское значение. Выберете себе случайное число от 1 до 2_000_000_000. Это нужно для того, чтобы ваши сохранения не подходили к картам других авторов, которые используют эту же наработку.
Установка
  1. Открыть save_unit_basic.w3x
  2. Скопировать папку module, все переменные и весь нестандартный код к себе в карту
  3. Настроить
Подробный пример
И так у нас есть 2 тестовые карты. Открываем первую, выполняем пункты выше, сохраняем.
Мы можем сохранять, загружать, но не создавать персонажа. Добавим триггер с командой -new и подсказку в начале игры.
Для того чтобы было нельзя дважды создать или подгрузить героя создадим массив, где будем их хранить и проверять.
Во время загрузки происходит много временных прерываний, по этому индекс игрока придется записать в локальную переменную.
Настроим первоначальные параметры системы. Зададим позицию загрузки героя по умолчанию.
Теперь сделаем фишку, что при убийстве самого сильного моба, Вождя лесных троллей, был 10% шанс получить способность на уклонение.
Добавим эту способность в Save unit ability, чтобы при переходе она сохранялась.
Добавим подсчет убийств. Для этого заведем массив integer.
Сделаем перенос количества убийств между картами

Займемся настройкой второй карты.
Допустим на этой карте всегда можно загружаться только возле фонтана. Для этого делаем следующее:
Все готово, можно пользоваться.
PS Кастомные способности и предметы должны иметь одинаковый id для загрузки. Те, кто любит заполнять список геройских/не геройских способностей на jass, могут заполнить вручную в функциях SaveUnit_ability() и SaveUnit_hero_ability() и включить их в триггерах Save unit ability и Save unit hero ability соответственно.
save unit basic
save_unit_1/2
Скачать 1.0
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
4
1
3 года назад
4
Спасибо большое за эту наработку. Гораздо лучше длинных кодов, которые бы приходилось вписывать постоянно. Единственное что, долго не мог понять почему не работает (уже грешил на то, что не работает), но нашел решение через редактирование реестра.
0
1
2 года назад
0
такой вопрос смогу ли я переносить прогресс нескольки героев к примеру в районе 40 такое поместится?)
0
17
2 года назад
0
такой вопрос смогу ли я переносить прогресс нескольки героев к примеру в районе 40 такое поместится?)
Да поместится, но сейчас можно автоматически сохранять только одного героя. Вы можете вручную использовать 1000 значений чтобы самому хранить прогресс 40 героев
Чтобы оставить комментарий, пожалуйста, войдите на сайт.