Artık haritalarını ayarladığına göre bir sonraki adım bir oyuncu avlama puanı aldığında silah vermektir.
Bir oyuncu avlama puanı aldığında şu iki kuralı uygulaman gerekir:
-
Oyuncu kendi takımındaki en yüksek silah katmanında değilse veya tüm oyuncular aynı silah katmanındaysa onları bir sonraki silah katmanına yükselt.
-
Aksi takdirde, takımda daha düşük silah seviyesinde olan bir oyuncu varsa onun yerine son oyuncuyu yükselt.
Bunun yapılması, oyuncuların silahlar arasında takım olarak ilerlemesini ve hiçbir oyuncunun takım arkadaşlarından birden fazla silah önde veya arkada olmamasını sağlar.
Bunu yapmak için bir oyuncu avlama puanı aldığında bunu bilmen, sonra silah katmanını takımdaki diğer oyuncularla karşılaştırman ve yukarıdaki iki kurala göre oyuncuyu yükseltmen gerekir.
Oyunculara bir avlama puanı aldıklarında silah vermek için aşağıdaki adımları izle.
-
team_elimination_gamesınıfınaGiveNextWeaponadlı yeni bir metot ekle. Bu metot bir oyuncuya kendisi veya takımındaki birisi avlama puanı aldığında yukarıdaki iki kurala göre bir silah verir.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") -
Hangi oyuncunun avlama puanı aldığını takip etmek için
OnPlayerEliminateddeğerini güncelle.OnPlayerEliminateddeğeri birelimination_resultsonucunu kabul ettiğinden hem avlanan hem de avlayan karakterin referansını alırsın. Oyuncular çeşitli yollarla avlanabileceğinden (düşme hasarı, gözcüler, kendi kendine hasar vb.)EliminatingCharacterdeğerinin gerçek birFortCharacter(yani gerçek oyuncu) olup olmadığını belirlemen gerekir.- Bir
Result.EliminatingCharacterreferansı al veEliminatoryerel seçenek değişkenine kaydet.Eliminatordeğerinin geçerli birFortCharacterolup olmadığını kontrol et ve geçerliyse o karakterin aracınıEliminatorAgentadlı başka bir değişkene kaydet. Son olarakEliminatorAgentdeğeriniGiveNextWeapondeğerine geçir
OnPlayerEliminated(Result : elimination_result) : void = Print("A Player was eliminated!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent) - Bir
-
Doğru oyuncuya yeni bir silah verilmesi için
GiveNextWeapondeğerinin birkaç değişkeni izlemesi gerekir.GiveNextWeapondeğerine aşağıdaki bildirimleri ekle.-
WeaponTieradlı bir değişken tamsayısı. Bu, silah verilecek oyuncunun silah katmanını takip eder. -
Silah verilecek oyuncuyu ifade eden
MaybePlayerToGrantadlı isteğe bağlı bir aracı değişkeni. Varsayılan olarak bu,GiveNextWeapondeğerine geçirilen oyuncudur. -
Silah verilecek oyuncunun takımını ifade eden
MaybePlayerTeamadlı isteğe bağlı bir takım değişkeni. Varsayılan olarak bu,GiveNextWeapondeğerine geçirilen oyuncunun takımıdır.
GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # Silah verilecek oyuncu var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Bu oyuncunun takımı -
-
MaybePlayerTeamdeğerini birPlayerTeamyerel değişkenine çıkar, ardındanWeaponTierdeğeriniTeamMapiçindeki oyuncu puanının değerine ayarla.var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Bu oyuncunun takımı if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): -
Takımdaki her oyuncuda yinele ve silah katmanlarını karşılaştır. Daha düşük katmanda bir oyuncu bulursan
MaybePlayerToGrantdeğerini o oyuncuya veWeaponTierdeğerini puanına ayarla.TeamMapbir harita olduğundanTeammate -> TeammateTiersözdizimini kullanarak hem anahtarı (oyuncu) hem de değeri (silah katmanı) yerel değişkenler olarak çıkarabilirsin.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} -
En düşük (veya en düşük olana eşit) silah seviyesindeki oyuncuyu bulduktan sonra
WeaponTierdeğerini bir artır, ardındanTeamMapiçindeki silah katmanınıWeaponTierolarak ayarla.if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} set WeaponTier = WeaponTier + 1 if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") -
Burası bir oyuncunun oyunu kazanıp kazanmadığını kontrol etmek için iyi bir yerdir çünkü silah katmanını yükseltmek oyuncuyu oyunu sonlandırmak için gereken avlama sayısına yaklaştırabilir.
team_elimination_gamesınıfındaEndGameadlı yeni bir yöntem oluştur. Bu yöntem, ilgili oyuncu son silah katmanına ulaştığında oyuncu üzerindeEndGameDevicedeğerini etkinleştirir. Tamamlanan yöntem şu şekilde görünmelidir:
EndGame(InPlayer : agent) : void = Print("Player reached final Weapon Tier, activating EndGameDevice") EndGameDevice.Activate(InPlayer)- Oyuncunun silah katmanını yükselttikten sonra
GiveNextWeaponişlevine geri dönerekif WeaponTier >= EliminationsToEndGameeşitliğini kontrol et. Bu eşitlik varsa oyuncuyu geçerekEndGameişlevini çağır.
if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) -
Aksi takdirde
GrantedPlayerüzerindeGrantWeaponçağrısı yap.if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier) -
Tamamlanan
GiveNextWeaponyöntemi aşağıdaki kod gibi görünmelidir.GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # Silah verilecek oyuncu var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # Bu oyuncunun takımı if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} set WeaponTier = WeaponTier + 1 if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier)
Kodu Visual Studio Code’a kaydet, derle ve bölüme oynanış testi uygulamak için UEFN araç çubuğunda Oturumu Başlat (Launch Session) butonuna tıkla. Bölümüne oynanış testi uyguladığında yine WeaponGranters dizisindeki birinci silahla doğman gerekir. Günlüğe bakıp bu davranışı doğrula. Bir düşman oyuncuyu avlayarak puan almak seni bir sonraki silaha yükseltir. Yükseltmeler yukarıda verilen iki kurala uygun olmalıdır. Sıradaki son silahı da geçmek, oyunu sonlandırır ve avlayan oyuncu zaferin sahibi olur.

Sonraki Adım
Bu eğitimin bir sonraki adımında haritana nasıl oyuncu ekleyeceğini ve oyuncu sürmekte olan bir oyuna katıldığında ona nasıl silah atayacağını öğreneceksin.