Этот шаблон, предназначенный только для UEFN, содержит небольшую игру в стиле фабрики, в которой есть функции сохранения данных и прогресса в оффлайн-режиме.
Для прохождения обучения по шаблону необходимы базовые знания Unreal Editor для Fortnite (UEFN) и возможность открывать файлы Verse. Других требований нет. Шаблон сам содержит инструкции по использованию.
Представляем вам Фабрику игрушек Санты, шаблон LEGO®, который сосредоточен на удержании игроков с помощью увлекательных игровых циклов с использованием:
сохранения данных: данные игроков сохраняются между игровыми сеансами;
прогресса в оффлайн-режиме: фабрика продолжает выпускать игрушки, даже когда игрок не в игре, пока в контейнере фабрики есть место, а лес из карамельных палочек продолжает расти, как с игроками, так и без них.
Сочетание этих двух функций позволит создать механику смены дня и ночи, которая будет побуждать игроков возвращаться на ваш остров. Используйте этот шаблон, чтобы узнать, как реализовать эту механику на вашем уютном праздничном острове!
Шаблон содержит три кратких урока.
Для новичков: в нём рассказывается, как изменять время роста леса из карамельных палочек в Verse.
Для среднего уровня: он описывает, как редактировать переменные в Verse.
Для продвинутых пользователей: здесь речь идёт о том, как вносить изменения и дополнения в код Verse.
В каждом уроке проекта описано, как использовать Verse для реализации используемой механики.
Шаблон разделён на три части:
игра: для начала поиграйте в игру 5–10 минут, чтобы понять, как всё работает;
создание: затем создайте три модификатора, выполняя задания, описанные в уроке;
изучение: наконец, вы сможете самостоятельно изучить и разобрать весь задокументированный код, чтобы понять, как он работает, а затем создать собственную праздничную игру!
Игра
Загрузите шаблон в UEFN. Он находится вместе с другими шаблонами LEGO. Начните играть.
Чтобы выполнить задание, подойдите к сэру Pawlar, который объяснит, что нужно делать.
Следуйте инструкциям в игре.
В определённый момент урока вам будет предложено завершить игру. Нажмите Esc, а затем Завершить игру.
Подождите 2 минуты.
По истечении 2 минут снова нажмите Esc, а затем Начать игру.
Это может показаться странным, но так вы поймёте очень важный момент. В этой игре всё продолжает работать, даже когда вы выходите из неё! Завод продолжает работать, а лес из карамельных палочек продолжает расти.
Это ключевые механики, которые могут побудить игроков возвращаться в игру, чтобы собирать урожай или произведённые ресурсы.
По возвращении в игру вы увидите, что было создано, пока вас не было:
Для этого нужен файл factory_manager.verse. В нём с помощью сохраняемых данных и устройства Часы реального времени измеряется время отсутствия игрока. После этого рассчитывается, какой объём фабрика сможет выпустить за это время.
После создания второй фабрики вы получите сообщение о том, что нужно вернуться в UEFN.
Ваш первый урок завершён! Пора перейти к творческим испытаниям.
Создание
Время повеселиться! Вас ждут три испытания.
С первым испытанием вас познакомит Freshman Flapjack. Он ждёт вас на одном из трёх жёлтых квадратов.
Задание для новичка: изменить время восстановления леса из карамельных палочек
Первое испытание не представляет сложности. Вы увидите, как сильно можно изменить игру, просто поиграв с некоторыми параметрами — в данном случае со временем восстановления полей из карамельных палочек.
Рядом с Freshman Flapjack вы увидите Verse-устройство Карамельная палочка.
Выберите это устройство и убедитесь, что оно также выбрано на панели Сведения.
Измените параметр
CandyCanRegrowthTime— поэкспериментируйте и посмотрите, как он влияет на игровой процесс.
Испытание для среднего уровня: измените цены на улучшения
Во втором испытании вы познакомитесь с самим кодом Verse.
Опять же, вы увидите, насколько можно изменить темп и атмосферу игры, просто скорректировав цены на улучшение фабрики.
Откройте файл upgrade_config.verse в проводнике Verse.
Здесь указаны все цены на обновление различных элементов фабрики. Первая группа содержит цены на фабричные конвейеры. На фабрике четыре конвейера, поэтому в таблице с ценами четыре столбца. Каждая строка в таблице содержит цену улучшения ремня до соответствующего уровня.
Verse# This file contains the data used to configure the factory in the game. # This includes upgrade prices, max levels, production speeds, storage capacities and more. # It also contains functions for getting all this data. using { /Verse.org/Simulation } using { Persistence } # Blubberchops: "Looks like this is the place to modify the upgrade prices for belts."Последуйте совету Blubberchops и снизьте цену улучшения конвейеров. Вы также можете поэкспериментировать с увеличением цены, что позволит замедлить темп игры.
Когда вы будете готовы, создайте код Verse и внесите в него соответствующие изменения, чтобы протестировать их.
Подробнее об этом шаге: Измените и запустите свою первую программу на Verse.
Обратите внимание, что каждый раз после внесения изменений в сеанс прогресс фабрики будет сбрасываться.
Испытание для продвинутых пользователей: ежедневный подарок
В третьем, и последнем, испытании вам нужно поработать над ежедневным подарком под руководством Professor Flopkins.
Для этого вам нужно будет добавить некоторые дополнительные сохраняемые данные, в которых будет указано, когда подарок открывался последний раз. Вам также нужно будет исправить логику Verse-устройства Ежедневный подарок.
Подробнее о работе с сохраняемыми данными в Verse см. в статье Использование сохраняемых данных.
Подсказки для прохождения испытания приводятся в разделе Устройство «Ежедневный подарок» ниже!
Откройте файл player_info.verse в проводнике Verse.
Найдите комментарии Professor Flopkins в начале файла.
Не забудьте добавить поле массива
date_and_timeв классplayer_infoдля сохранения времени последнего открытия подарка. Также убедитесь, что значение поля задано в конструктореMakePlayerInfo.Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Исправьте функции получения и настройки нового добавленного поля. На этот раз обратите внимание на комментарии Professor Flopkins в нижней части файла.
Заполните недостающие строки, чтобы функции работали корректно. Для примера можете изучить и другие функции в файле.
Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Когда новые функции для сохраняемых данных будут готовы, откройте файл daily_gift.verse, чтобы изменить логику появления подарка на «только раз в день».
Вы увидите, что не хватает двух важных элементов:
сохранения текущего времени открытия подарка;
проверки того, изменилась ли дата с момента последнего открытия подарка.
Следуйте комментариям профессора и добавьте недостающий код.
Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() # Professor Flopkins: "Hmm, the code to determine if the date has rolled over is also missing." # "Let's see.. first we'll get the selected player." # "Look in the OnHarvesting function to see how to do that."Теперь пора протестировать ваше решение! Создайте код Verse и внесите в него соответствующие изменения, чтобы протестировать их во время сеанса.
Вы можете использовать горячую клавишу — кнопку отладки Sub Zero, чтобы перейти вперёд по времени и проверить, появится ли подарок повторно при изменении даты.
Изучение
Вы прошли все испытания, и теперь настало время изучить некоторые другие устройства, используемые в этом шаблоне.
Устройство «Часы реального времени»
Устройство Часы реального времени показывает текущее время в формате всемирного координированного времени (UTC). Оно также позволяет анимировать стрелки часов.
Вы можете использовать его для активации событий, которые должны происходить ежедневно в определённое время, или для отслеживания того, сколько времени прошло.
В нём есть встроенная функция тестирования, которая позволяет смещать текущее время. Изучите файлы real_time_device.verse, date_and_time.verse и time_interval.verse.
Устройство «Поле карамельных палочек»
Verse-устройство Поле карамельных палочек отслеживает поле, на котором можно собирать карамельные палочки. Оно выдаёт ресурсы в момент сбора и позволяет восстанавливать их со временем. Его можно использовать для восстановления ресурсов любого вида. Изучите файл candy_cane_field.verse.
Модуль сохранения данных
Этот модуль содержит все сохраняемые данные по каждому игроку. Основной класс — это player_info в файле player_info.verse.
Этот файл также содержит все функции для считывания и изменения данных. Также обратите внимание на другие классы в этом модуле — они определяют некоторые данные, сохраняемые для каждого игрока. Вы можете изменить эти или добавить другие данные в случае необходимости.
# This file defines player_info, the collection of persistable information stored for each player.
# It also contains functions for creating, updating and returning information about a player.
using { /Verse.org/Simulation }
using { Config }
using { Time }
# Maps each player to their persisted information.
var PlayerInfoMap:weak_map(player, player_info) = map{}
# This tracks all persistable information for a player.
player_info := class<final><persistable>:
# The version of the current player info.
Устройство «Ежедневный подарок»
Это устройство выдаёт ежедневные подарки — или, по крайней мере, выдавало бы, если бы работало!
Вот решение для испытания для продвинутых пользователей, которое поможет вам полноценно использовать Verse-устройство «Ежедневный подарок». Его можно использовать для всех видов ежедневных событий и наград.
Сначала добавьте необходимые данные в класс
player_infoи измените конструкторMakePlayerInfoв файле player_info.verse:Verse# This tracks all persistable information for a player. player_info := class<final><persistable>: # The version of the current player info. Version:int = 0 # Latest harvest times of all candy canes. CandyCaneHarvestTimes:[]date_and_time = array{date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}} # The amount of gold the player has.Заполните функции
SetGiftOpeningTimeиGetGiftOpeningTime:Verse# Sets the gift opening time for the player. SetGiftOpeningTime<public>(Player:player, GiftOpeningTime:date_and_time)<decides><transacts>:void= CheckPlayerInfoForPlayer[Player] SourceInfo := PlayerInfoMap[Player] set PlayerInfoMap[Player] = player_info: MakePlayerInfo<constructor>(SourceInfo) GiftOpeningTime := GiftOpeningTime # Gets the gift opening time for the player.Обратите внимание на класс
daily_giftв файле daily_gift.verse. Сначала задайте сохранение текущего времени при открытии подарка:Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Реализуйте функцию
IsDateRolledOver:Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() SelectedPlayer := MaybeSelectedPlayer? GiftOpeningTime := GetGiftOpeningTime[SelectedPlayer] Now.Years <> GiftOpeningTime.Years or Now.Months <> GiftOpeningTime.Months or Now.Days <> GiftOpeningTime.Days
Устройство «Диспетчер фабрики»
Verse-устройство Диспетчер фабрики инициализирует и запускает фабрику. Оно подсчитывает, сколько предметов было произведено, пока игрок отсутствовал.
Этот подсчёт может быть сложным, поскольку хранилище фабрики используется одновременно для нескольких конвейеров фабрики. В более простом варианте можно подсчитать количество созданных предметов, подсчитав, сколько времени произошло с момента последнего производства, а затем разделив его на скорость производства.