Когда игрок присоединяется к уже запущенной игре, не очень хотелось бы заставлять его ждать начала нового раунда. В идеале, новый игрок должен иметь возможность появиться и сразу же вступить в игру. Чтобы реализовать такую возможность, вам нужно добавить нового игрока в TeamMap, подписаться на событие его устранения и выдать ему первое оружие.
Выполните следующие действия, чтобы выдать игрокам оружие и подписаться на их события, когда они присоединяются к активной игре.
-
В класс
team_elimination_gameдобавьте новый методOnPlayerAdded. Этот метод присваивает любому игроку, присоединившемуся к активной игре, оружие того уровня, который будет соответствовать самому низкому уровню оружия в команде.OnPlayerAdded(InPlayer : player) : void = Print("Присоединился новый игрок!") -
Получите команду для нового игрока с помощью
GetTeam[]и сохраните её в локальной переменнойTeam. Получите значениеFortCharacterдля этого игрока и сохраните его в переменнойFortCharacter.OnPlayerAdded(InPlayer : player) : void = Print("Присоединился новый игрок!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayer.GetFortCharacter[] -
Чтобы добавить нового игрока в массив
TeamMap, необходимо получить доступ к объекту типаplayer_map, связанному с командойTeamнового игрока. Получите объектplayer_map, связанный с новым игроком, и сохраните его в локальной переменнойPlayerMap.OnPlayerAdded(InPlayer : player) : void = Print("Присоединился новый игрок!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayerr.GetFortCharacter[] var PlayerMap : player_map = TeamMap[Team] -
Для счёта игрока в
PlayerMapзадайте значение0, а затем обновитеTeamMapпри помощи локальной переменнойPlayerMap.OnPlayerAdded(InPlayer : player) : void = Print("Присоединился новый игрок!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayer.GetFortCharacter[] var PlayerMap : player_map = TeamMap[Team] set PlayerMap[InPlayer] = 0 set TeamMap[Team] = PlayerMap -
Выдайте игроку его первое оружие, вызвав функцию
GrantWeapon, и подпишитесь на событие устранения для нового игрока. БлокOnPlayerAddedтеперь должен выглядеть следующим образом.OnPlayerAdded(InPlayer : player) : void = Print("Присоединился новый игрок!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayer.GetFortCharacter[] var PlayerMap : player_map = TeamMap[Team] set PlayerMap[InPlayer] = 0 set TeamMap[Team] = PlayerMap then: GrantWeapon(option{InPlayer}, 0) Print("Присваиваю новому игроку уровень оружия 0 в TeamMap") FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) # подписываемся на событие устранения этого игрока -
В блоке
OnBeginподпишитесь на игровое пространствоPlayerAddedEventпри помощиOnPlayerAdded. Теперь при присоединении игрока к активной игре будет вызыватьсяOnPlayerAdded. ПосколькуPlayerAddedEventявляется событием, запускаемым самим игровым пространством, вам не требуется отдельное специальное устройство для подписки на него.OnBegin<override>()<suspends> : void = set Teams = GetPlayspace().GetTeamCollection().GetTeams() set EliminationsToEndGame = WeaponGranters.Length Print("Количество устранений до завершения игры: {EliminationsToEndGame}") Print("Начинаю назначение игроков") PopulateTeamsAndPlayers() for (Spawner : PlayerSpawners): Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Подписываемся на каждую точку появления игроков for (Sentry : Sentries): Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated) # Подписываемся на каждого стрелка # Подписываемся на присоединяющихся игроков GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
Сохраните код в Visual Studio Code, скомпилируйте его и нажмите Запуск сеанса на панели инструментов UEFN, чтобы протестировать уровень. Когда новый игрок присоединяется к активной игре, он должен появляться с оружием, первым по уровню. Когда сам игрок или товарищ по команде набирает очки, они должны быть переведены на следующий уровень оружия.
Что дальше
Дальше мы разберём, как протестировать механику устранения в одиночной игре с помощью стрелков.