Oyuna bir oyuncu katıldığında doğru takıma asimetrik şekilde dengelenmesi gerekir. Casuslar takımına katılırsa oyuncuyla ilişkili bir OnInfiltratorDamaged() örneği olmak zorundadır.
Sürmekte olan oyuna katılan oyuncuları doğru takıma nasıl dengeleyeceğini öğrenmek için aşağıdaki adımları izle.
Oyuncunun Katılma Fonksiyonlarını Ayarlama
invisibility_managersınıf tanımınaOnInfiltratorJoined()adlı yeni bir fonksiyon ekle. Bu fonksiyon bir aracıyı alır ve bu aracı için birOnInfiltratorDamaged()örneği üretir. Bu fonksiyonutriad_infiltration_gamesınıfından çağıracağın için fonksiyona `` belirleyicisini ekle. # Oyuna yeni bir casus katıldığında bir OnInfiltratorDamaged fonksiyonu oluşturur OnInfiltratorJoined<public>(InAgent:agent):void= spawn{OnInfiltratorDamaged(InAgent)}triad_infiltration_gamesınıf tanımınaOnPlayerAdded()adlı yeni bir fonksiyon ekle. Bu fonksiyon bir oyuncu alır, oyuncuyu doğru takıma alarak dengeyi sağlar ve yeni oyuncu bir casus iseOnInfiltratorJoined()örneğini çağırır.# Oyuna katılan yeni bir oyuncuyu işler. OnPlayerAdded(InPlayer:player):void=- Geçerli oyun alanı için
fort_team_collectiondeğerini al ve birFortTeamCollectiondeğişkenine kaydet.# Oyuna katılan yeni bir oyuncuyu işler. OnPlayerAdded(InPlayer:player):void= Logger.Print("Yeni bir Oyuncu katıldı, bir takıma atanıyor") FortTeamCollection := GetPlayspace().GetTeamCollection()Takım Dengelemesini Yeniden Düzenleme
- Yeni oyuncuyu doğru takıma dengelemen gerekir ancak
BalanceTeams()fonksiyonunu çağırırsan her oyuncu yeni bir takıma dağıtılacak şekilde düzenlenir. Yeni oyuncu için en küçük takımı bulmaya ve oyuncuyu bu takıma dengelemeye yönelik kodu yeniden yazmak yerine bu güzel fırsatı kullanarak yeniden düzenleme yapabilirsin.triad_infiltration_gamesınıf tanımınaBalancePlayer()adlı yeni bir metot ekle. Bu metot bir oyuncu alıp doğru takıma ekleyerek asimetrik denge sağlar.# Her oyuncu için takım listesini yinele ve onları # en az sayıda oyuncuya sahip takıma ya da eşitlik varsa başladıkları takıma ata. BalancePlayer(InPlayer:player):void= Logger.Print(“Oyuncu dengeleme başlıyor”)BalanceTeams()metodunda bulunanfordöngüsünün içindeki kodu çıkar veTeamPlayeradınıInPlayerolarak değiştirerekBalancePlayer()metodunun içine yerleştir.BalancePlayer()kodun şu şekilde görünmelidir:# Her oyuncu için takım listesini yinele ve onları # en az sayıda oyuncuya sahip takıma ya da eşitlik varsa başladıkları takıma ata. BalancePlayer(InPlayer:player):void= Logger.Print(“Oyuncu dengeleme başlıyor”) var TeamToAssign:?team = false set TeamToAssign = FindTeamWithLargestDifference() if (AssignedTeam := TeamToAssign?, GetPlayspace().GetTeamCollection().AddToTeam[InPlayer, AssignedTeam]): Logger.Print("Yeni katılan oyuncuyu yeni bir takıma atamayı deniyor") else: Logger.Print("Bu oyuncu zaten en küçük takımdaydı")- Şimdi
BalanceTeams()kodundafordöngüsünün içine birBalancePlayer()çağrısı ekle. Bunu yapmakBalanceTeams()fonksiyonunu korurken bir oyuncuyu tek başına dengelemene olanak tanır.BalanceTeams()kodun şu şekilde görünmelidir:# Tüm oyuncuları oyundaki tüm takımlar arasında dengeler BalanceTeams():void= Logger.Print("Takım dengeleme başlıyor") var AllPlayers:[]player := GetPlayspace().GetPlayers() set AllPlayers = Shuffle(AllPlayers) Logger.Print("AllPlayers Uzunluğu {AllPlayers.Length}") for (TeamPlayer:AllPlayers): BalancePlayer(TeamPlayer)
OnPlayerAdded()dizisine geri dönerek yeni katılan oyuncuyu geçen birBalancePlayer()çağrısı ekle.# Oyuna katılan yeni bir oyuncuyu işler. OnPlayerAdded(InPlayer:player):void= Logger.Print("Yeni bir Oyuncu katıldı, bir takıma atanıyor") FortTeamCollection := GetPlayspace().GetTeamCollection() set AllPlayers = GetPlayspace().GetPlayers() # Yeni oyuncuyu en küçük takıma ata BalancePlayer(InPlayer)- Dengeleme sonrasında
PlayerTeamile eşit olup olmadığını kontrol etmek içinGetTeam[]ifadesini filtre olarak kullanarakTeamsdizisindeki her takımı yineleyip oyuncunun takım dizinini bul.# Oyuna katılan yeni bir oyuncuyu işler. OnPlayerAdded(InPlayer:player):void= Logger.Print("Yeni bir Oyuncu katıldı, bir takıma atanıyor") FortTeamCollection := GetPlayspace().GetTeamCollection() # Yeni oyuncuyu en küçük takıma asimetrik olarak ata. BalancePlayer(InPlayer) for: TeamIndex -> PlayerTeam:Teams PlayerTeam = FortTeamCollection.GetTeam[InPlayer] - Oyuncunun takımıyla ilişkili ışınlayıcıyı almak için
TeamIndexkullanarakTeleportersdizisi içinde dizine al ve birTeamTeleporterdeğişkeninde depola. Bu ışınlayıcının dönüşümünü birTransformdeğişkeninde depola. Ardından yeni oyuncuyu takımının başlangıç ışınlayıcısında yeniden çıkar.for: TeamIndex -> PlayerTeam:Teams PlayerTeam = FortTeamCollection.GetTeam[InPlayer] TeamTeleporter := Teleporters[TeamIndex] Transform := TeamTeleporter.GetTransform() do: InPlayer.Respawn(Transform.Translation, Transform.Rotation) Logger.Print(“Doğan oyuncu başlangıç konumuna ışınlandı”) - Son olarak; oyuncunun takımını, daha önce ayarladığın
Infiltratorsseçeneğiyle karşılaştırarak yeni katılan oyuncunun casus olup olmadığını kontrol et. Oyuncu bir casus ise yeni oyuncunun titremeye başlaması için oyuncu üzerindeinvisibility_managersınıfındanOnInfiltratorJoined()fonksiyonunu çağır.OnPlayerAdded()kodun şu şekilde görünmelidir:# Oyuna katılan yeni bir oyuncuyu işler. OnPlayerAdded(InPlayer:player):void= Logger.Print("Yeni bir Oyuncu katıldı, bir takıma atanıyor") FortTeamCollection := GetPlayspace().GetTeamCollection() # Yeni oyuncuyu en küçük takıma asimetrik olarak ata. BalancePlayer(InPlayer) for: TeamIndex -> PlayerTeam:Teams PlayerTeam = FortTeamCollection.GetTeam[InPlayer] TeamTeleporter := Teleporters[TeamIndex] Transform := TeamTeleporter.GetTransform() do: InPlayer.Respawn(Transform.Translation, Transform.Rotation) Logger.Print(“Doğan oyuncu başlangıç konumuna ışınlandı”) # Oyuncu bir casussa # InvisibilityManager’da OnInfiltratorJoined fonksiyonunu çağır. if(PlayerTeam = MaybeInfiltrators?): InvisibilityManager.OnInfiltratorJoined(InPlayer) - Kodu kaydet, derle ve bölüme oynanış testi uygulamak için UEFN araç çubuğunda oturumu başlat düğmesine tıkla. Bölümüne oynanış testi yaptığında, sürmekte olan oyuna katılan oyuncular doğru takıma eklenmelidir. İlgili oyuncu bir casus ise görünmez olarak doğmalı ve hasar aldığında titremelidir.
Sonraki Adım
Bu eğitimin sonraki adımında, hedefi ele geçiren bir oyuncu için görsel göstergeyi oluşturmayı öğreneceksin.