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_game
sınıfınaGiveNextWeapon
adlı 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
OnPlayerEliminated
değerini güncelle.OnPlayerEliminated
değeri birelimination_result
sonucunu 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.)EliminatingCharacter
değerinin gerçek birFortCharacter
(yani gerçek oyuncu) olup olmadığını belirlemen gerekir.- Bir
Result.EliminatingCharacter
referansı al veEliminator
yerel seçenek değişkenine kaydet.Eliminator
değerinin geçerli birFortCharacter
olup olmadığını kontrol et ve geçerliyse o karakterin aracınıEliminatorAgent
adlı başka bir değişkene kaydet. Son olarakEliminatorAgent
değeriniGiveNextWeapon
değ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
GiveNextWeapon
değerinin birkaç değişkeni izlemesi gerekir.GiveNextWeapon
değerine aşağıdaki bildirimleri ekle.-
WeaponTier
adlı bir değişken tamsayısı. Bu, silah verilecek oyuncunun silah katmanını takip eder. -
Silah verilecek oyuncuyu ifade eden
MaybePlayerToGrant
adlı isteğe bağlı bir aracı değişkeni. Varsayılan olarak bu,GiveNextWeapon
değerine geçirilen oyuncudur. -
Silah verilecek oyuncunun takımını ifade eden
MaybePlayerTeam
adlı isteğe bağlı bir takım değişkeni. Varsayılan olarak bu,GiveNextWeapon
değ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ı
-
-
MaybePlayerTeam
değerini birPlayerTeam
yerel değişkenine çıkar, ardındanWeaponTier
değeriniTeamMap
iç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
MaybePlayerToGrant
değerini o oyuncuya veWeaponTier
değerini puanına ayarla.TeamMap
bir harita olduğundanTeammate -> TeammateTier
sö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
WeaponTier
değerini bir artır, ardındanTeamMap
içindeki silah katmanınıWeaponTier
olarak 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_game
sınıfındaEndGame
adlı yeni bir yöntem oluştur. Bu yöntem, ilgili oyuncu son silah katmanına ulaştığında oyuncu üzerindeEndGameDevice
değ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
GiveNextWeapon
işlevine geri dönerekif WeaponTier >= EliminationsToEndGame
eşitliğini kontrol et. Bu eşitlik varsa oyuncuyu geçerekEndGame
iş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
GiveNextWeapon
yö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.