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_manager
sı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_game
sı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_game
sı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_collection
değerini al ve birFortTeamCollection
değ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_game
sı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 bulunanfor
döngüsünün içindeki kodu çıkar veTeamPlayer
adınıInPlayer
olarak 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()
kodundafor
dö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
PlayerTeam
ile eşit olup olmadığını kontrol etmek içinGetTeam[]
ifadesini filtre olarak kullanarakTeams
dizisindeki 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
TeamIndex
kullanarakTeleporters
dizisi içinde dizine al ve birTeamTeleporter
değişkeninde depola. Bu ışınlayıcının dönüşümünü birTransform
değ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
Infiltrators
seç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_manager
sı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.