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