В этом разделе мы расскажем, как находить уже созданных игроков и команды в среде выполнения.
Определение членов класса
- Откройте Проводник 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. Убедитесь, что этот так, проверив журнал.
Что дальше
Дальше вы узнаете, как ассиметрично распределить игроков по командам в начале игры.