В этом разделе мы расскажем, как находить уже созданных игроков и команды в среде выполнения.
Определение членов класса
- Откройте Проводник Verse и дважды нажмите на файл triad_infiltration_game.verse, чтобы открыть его в Visual Studio Code.
- В начале файла добавьте
using { /Verse.org/Random }
, чтобы получить доступ к функцииShuffle()
. Она нужна для случайного распределения игроков по командам до выравнивания состава. Также добавьтеusing { /Fortnite.com/FortPlayerUtilities }
, чтобы обратиться к функцииRespawn()
для игроков, которую вы будете использовать позже для телепортации игроков в зоны их появления в начале игры.using { /Fortnite.com/Devices } using { /Fortnite.com/FortPlayerUtilities } using { /Verse.org/Simulation } using { /Verse.org/Random } using { /UnrealEngine.com/Temporary/Diagnostics }
- В определении класса
triad_infiltration_game
добавьте следующие поля:- Три редактируемых целых числа
MaximumInfiltrators
,MaximumAttackers
иMaximumDefenders
. ИнициализируйтеMaximumInfiltrators
значением 2, аMaximumAttackers
иMaximumDefenders
значением 4. Эти параметры определяют максимальное количество игроков в каждой команде; вы будете использовать их для динамического выравнивания состава команд. Вы можете протестировать и другие значения, чтобы разнообразить игровой процесс.triad_infiltration := class(creative_device): # Во избежание невозможности присоединиться к команде нужно задать максимальное количество # игроков в настройках острова, равное сумме всех переменных Maximum(Team). # Максимальное количество игроков в команде захватчиков. @editable MaximumInfiltrators:int = 2 # Максимальное количество игроков в команде атакующих. @editable MaximumAttackers:int = 4 # Максимальное количество игроков в команде защитников. @editable MaximumDefenders:int = 4
- Переменная типа
map
с именемTeamsAndTotals
. Служит для сопоставления команды игроков с максимальным количеством игроков в этой команде.# Максимальное количество игроков в команде захватчиков. @editable MaximumInfiltrators:int = 2 # Максимальное количество игроков в команде атакующих. @editable MaximumAttackers:int = 4 # Максимальное количество игроков в команде защитников. @editable MaximumDefenders:int = 4 # Ассоциативный массив, содержащий максимальное количество игроков в командах. var TeamsAndTotals:[team]int = map{}
- Редактируемый массив телепортов
Teleporters
. Содержит ссылку на телепорты, которые вы будете использовать для телепортации игроков на точки их появления после выравнивания состава команд.# Ассоциативный массив, содержащий максимальное количество игроков в командах. var TeamsAndTotals:[team]int = map{} # Массив телепортов, телепортирующих игроков в точку появления их команды после начала игры. @editable Teleporters:[]teleporter_device = array{}
- Редактируемый массив
item_granter_device
с именемWeaponGranters
. Хранит устройства выдачи предметов, чтобы выдавать игрокам оружие в момент появления с учётом команды.# Массив телепортов, телепортирующих игроков в точку появления их команды после начала игры. @editable Teleporters:[]teleporter_device = array{} # Массив устройств выдачи оружия для каждой команды. @editable var WeaponGranters:[]item_granter_device = array{}
- Три переменные option типа
team
:MaybeInfiltrators
,MaybeAttackers
иMaybeDefenders
. Хранят ссылку на каждую команду, благодаря чему вы можете проверить настройки этих команд.# Массив устройств выдачи оружия для каждой команды. @editable var WeaponGranters:[]item_granter_device = array{} # Ссылка на команду захватчиков. var MaybeInfiltrators:?team = false # Ссылка на команду атакующих. var MaybeAttackers:?team = false # Ссылка на команду защитников. var MaybeDefenders:?team = false
- Массив переменных команд
Teams
. Содержит ссылки на все команды в игре; понадобится, чтобы задавать значения переменных option типа team, которые указаны выше, а также чтобы искать команды для распределения игроков во время выравнивания состава команд.# Ссылка на команду захватчиков. var MaybeInfiltrators:?team = false # Ссылка на команду атакующих. var MaybeAttackers:?team = false # Ссылка на команду защитников. var MaybeDefenders:?team = false # Массив всех команд в игре. var Teams:[]team = array{}
- Три редактируемых целых числа
Поиск игроков и команд в среде выполнения
- В
OnBegin()
обновите массивTeams
, добавив команды, настроенные ранее в блоке Настройки опыта. Вы можете использовать функциюGetTeams()
из APIfort_team_collection
, чтобы получить массив всех команд в игровом пространстве.OnBegin<override>()<suspends>:void = # Получить все команды. set Teams = GetPlayspace().GetTeamCollection().GetTeams()
- Сохраните ссылку на каждую команду, присвоив переменным
MaybeInfiltrators
,MaybeAttackers
иMaybeDefenders
соответствующую команду из массиваTeams
.# Сохранить команды для последующего обращения. set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]}
- Теперь можно проверить, правильно ли настроены все три команды. Поскольку
MaybeInfiltrators
,MaybeAttackers
иMaybeDefenders
являются переменными типаoption
, это можно сделать, проверив, содержат ли эти переменные фактические значения. Если да, то задайте для каждой команды максимальное количество игроков вTeamsAndTotals
.if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Найдены все три команды") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Все три команды заданы в TeamsAndTotals") else: Logger.Print("Не удаётся найти все команды. Убедитесь, что вы задали правильные команды в настройках острова.")
-
Теперь ваш код
triad_infiltration_game
должен выглядеть так:triad_infiltration_game := class(creative_device): Logger:log = log{Channel := triad_infiltration_log_channel} # Во избежание невозможности присоединиться к команде нужно задать максимальное количество # игроков в настройках острова, равное сумме всех переменных Maximum(Team). # Максимальное количество игроков в команде захватчиков. @editable MaximumInfiltrators:int = 2 # Максимальное количество игроков в команде атакующих. @editable MaximumAttackers:int = 4 # Максимальное количество игроков в команде защитников. @editable MaximumDefenders:int = 4 # Массив телепортов, телепортирующих игроков в точку появления их команды после начала игры. @editable Teleporters:[]teleporter_device = array{} # Массив устройств выдачи оружия для каждой команды. @editable var WeaponGranters:[]item_granter_device = array{} # Массив точек появления игроков для каждой команды. @editable PlayersSpawners:[]player_spawner_device = array{} # Ссылка на команду захватчиков. var MaybeInfiltrators:?team = false # Ссылка на команду атакующих. var MaybeAttackers:?team = false # Ссылка на команду защитников. var MaybeDefenders:?team = false # Массив всех команд в игре. var Teams:[]team = array{} # Ассоциативный массив, содержащий максимальное количество игроков в командах. var TeamsAndTotals:[team]int = map{} OnBegin<override>()<suspends>:void = # Получить все команды set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Сохранить команды для последующего обращения set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Найдены все три команды") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Все три команды заданы в TeamsAndTotals") else: Logger.Print("Не удаётся найти все команды. Убедитесь, что вы задали правильные команды в настройках острова.")
-
Сохраните сценарий в Visual Studio Code и нажмите Собрать код Verse в главном меню в разделе Verse, чтобы обновить Verse-устройство на уровне.
-
Нажмите Запустить сеанс на панели инструментов UEFN, чтобы выполнить игровой тест уровня. Во время игрового теста уровня все три команды должны быть заданы в
TeamsAndTotals
. Убедитесь, что этот так, проверив журнал.
Что дальше
Дальше вы узнаете, как ассиметрично распределить игроков по командам в начале игры.