После распределения игроков по командам нужно выдать игрокам оружие, соответствующее команде. Следуйте инструкциям ниже, чтобы узнать, как выдавать игрокам соответствующее оружие в момент появления.
Выдача оружия в зависимости от команды
- В определении класса
triad_infiltration_game
добавьте новую функциюGrantTeamWeapon()
. Эта функция выдаёт игроку оружие, соответствующее его команде.GrantTeamWeapon(InPlayer:player):void=
- Получите команду для заданного игрока в
GrantTeamWeapon()
. Затем в циклеfor
переберите все команды в массивеTeams
, получите индекс каждой команды и сохраните его в переменнойTeamIndex
. Проверьте, совпадает ли команда текущего игрока с этой командой, что является условием фильтрации в циклеfor
.GrantTeamWeapon(InPlayer:player):void= if(CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]): for(TeamIndex -> PlayerTeam:Teams, PlayerTeam = CurrentTeam):
- Поскольку ваше условие фильтрации гарантирует, что код в цикле
for
выполнится с нужной командой, получите соответствующее устройство выдачи предметов для этой команды, указав вWeaponGranters
индексTeamIndex
этой команды. Наконец, вызовитеGrantItem()
для этого игрока. КодGrantTeamWeapon()
теперь должен выглядеть следующим образом:# Выдать игрокам оружие исходя из индекса их команды в массиве команд, # выбрав элемент массива WeaponGranters по индексу. GrantTeamWeapon(InPlayer:player):void= if(CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer]): for(TeamIndex -> PlayerTeam:Teams, PlayerTeam = CurrentTeam): if(WeaponGranter := WeaponGranters[TeamIndex]): WeaponGranter.GrantItem(InPlayer) Logger.Print("Выдано оружие игроку команды {TeamIndex + 1}")
Порядок команд в
Teams
должен совпадать с порядком устройств выдачи предметов вWeaponGranters
. Если захватчики — это команда 1, то первое устройство выдачи вWeaponGranters
должно быть назначено для захватчиков. Дважды проверьте эти значения в редакторе.
Выдача оружия игрокам в момент появления
- В определении класса
triad_infiltration_game
добавьте новую функциюOnPlayerSpawn()
. Эта функция принимает аргумент типаagent
для вызоваGrantTeamWeapon()
, чтобы выдать игроку соответствующее оружие.OnPlayerSpawn(SpawnedAgent:agent):void=
- Приведите
SpawnedAgent
к типуplayer
вOnPlayerSpawn()
. Затем вызовите функциюGrantTeamWeapon()
, передав в неё игрока. Ваша функцияOnPlayerSpawn()
должна выглядеть следующим образом:# Выполняется, когда в точке появления появляется любой игрок. # Вызывает GrantTeamWeapon с аргументом SpawnedAgent. OnPlayerSpawn(SpawnedAgent:agent):void= if(SpawnedPlayer := player[SpawnedAgent]): Logger.Print("Пытаемся выдать оружие появившемуся игроку") GrantTeamWeapon(SpawnedPlayer)
- В функции
OnBegin()
до вызоваBalanceTeams()
подпишите событиеSpawnedEvent
каждой точки появления игрока на только что определённую функциюOnPlayerSpawn()
в циклеfor
.OnBegin<override>()<suspends>:void = # Получить все команды set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Сохранить команды для последующего обращения set InfiltratorsOpt = option{Teams[0]} set AttackersOpt = option{Teams[1]} set DefendersOpt = option{Teams[2]} if: Infiltrators := InfiltratorsOpt? Attackers := AttackersOpt? Defenders := DefendersOpt? Logger.Print("Найдены все три команды") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Все три команды заданы в TeamsAndTotals") then: # Подпишемся на PlayerAddedEvent для возможного перераспределения игроков по командам при присоединении нового игрока for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) BalanceTeams() TeleportPlayersToStartLocations() else: Logger.Print("Не удаётся найти все команды. Убедитесь, что вы задали правильные команды в настройках острова.")
-
Сохраните сценарий, скомпилируйте его и нажмите Запуск сеанса на панели инструментов UEFN, чтобы выполнить игровой тест уровня. Во время игрового теста уровня каждый игрок должен попасть в команду с наибольшей разницей и появиться с оружием, соответствующим команде. Проверьте это по записям в журнале.
Что дальше
Дальше вы узнаете, как сделать захватчиков невидимыми при появлении и в начале игры.