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