На этом этапе мы создадим особую мишень, которая будет добавлять игроку время при попадании. Эта мишень будет появляться случайным образом при попадании в «хорошие» мишени, при этом шансы её появления будут увеличиваться до тех пор, пока она не появится.
Измените свой остров
Выберите комбо-мишень в окне просмотра.
Зажмите клавишу Alt, выберите левой кнопкой мыши виджет оси, после чего перетащите копию мишени в переднюю часть тира. Это будет наша мишень с бонусным временем.
На панели Сведения для TargetType задайте Танцующая.
Написание кода Verse
Здесь пошагово рассматривается процесс внесения изменений в код. Если вы хотите проверить свою работу, загляните в раздел Полный код, в котором вы сможете ознакомиться с конечным результатом.
Откройте файл
shooting_range_manager_device.verse.Добавьте следующую библиотеку для поддержки генерации случайных чисел.
Verseusing { /Verse.org/Random }Добавьте следующие переменные для хранения ссылки на устройство мишени и связанных свойств. Переменные продолжительности и вознаграждения будут содержать значения в секундах.
Verse@editable InitialTimerDuration:float = 30.0 @editable MaxTimerDuration:float = 60.0 @editable BonusTimeTarget:shooting_range_target_track_device = shooting_range_target_track_device{} @editableДобавьте метод обратного вызова
OnBonusTimeTargetHit, который будет повышать значение таймера.Verse# A hit callback that adds bonus time and disables the BonusTimeTarget. OnBonusTimeTargetHit():void= CurrentDuration:float = Timer.GetActiveDuration() Timer.SetActiveDuration(CurrentDuration + BonusTimeReward) BonusTimeTarget.PopDown() BonusTimeTarget.Disable()Измените метод
OnBegin, чтобы подписаться на событие мишени с бонусным временем, после чего отключите её.Verse# Runs when the device is started in a running game. OnBegin<override>()<suspends>:void= # Subscribing to the GoodTarget HitEvents. GoodTarget1.HitEvent.Subscribe(OnGoodTarget1Hit) GoodTarget2.HitEvent.Subscribe(OnGoodTarget2Hit) GoodTarget3.HitEvent.Subscribe(OnGoodTarget3Hit) # Subscribing to the BadTarget HitEvents. BadTarget1.HitEvent.Subscribe(OnBadTarget1Hit) BadTarget2.HitEvent.Subscribe(OnBadTarget2Hit)Измените метод
StartTimer, чтобы задать максимальную и активную длительность таймера.Verse# Setup and start the timer. StartTimer():void= # Set the event subscription to call OnTimerSuccess when the timer finishes. Timer.SuccessEvent.Subscribe(OnTimerSuccess) <# --- New Code Start --- #> # Set the max and active duration based on the set property values. Timer.SetMaxDuration(MaxTimerDuration) Timer.SetActiveDuration(InitialTimerDuration)Измените метод
AdjustScore, чтобы мишень с бонусным временем поднималась случайным образом с учётом того, в какое количество «хороших» мишеней вы попали.Verse# Adjusts the player's score by the provided value. AdjustScore(Value:int):void= # Start the timer if it hasn't started yet. if (not IsTimerStarted?): StartTimer() # Sets the score award to the base value of the target. ScoreManager.SetScoreAward(Value) # Gets the first player in the playspace.Сохраните код Verse и выполните его сборку.
Полный код
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
# A device that manages shooting range gameplay.
shooting_range_manager_device := class(creative_device):
@editable
ScoreManager:score_manager_device = score_manager_device{}
Собираем воедино
Выберите устройство shooting_range_manager_device в окне просмотра или на панели Структура.
На панели Сведения задайте для BonusTimeTarget мишень с бонусным временем.
Примените изменения и протестируйте свой остров:
убедитесь, что мишень с бонусным временем периодически появляется после стрельбы по «хорошим» мишеням.