Bir oyuncunun puan aldığı avlama sayısını izlemek için bir harita kullanacaksın. Haritalar anahtarlarla değerleri pratik bir şekilde ilişkilendirir. Bu eğitimde oyuncuyu anahtar, ilişkili silah katmanını (int olarak gösterilir) değer olarak kullanacaksın. Bu şekilde bir oyuncunun sadece bir oyuncu referansı olarak verilen geçerli katmanını alabilirsin. Aşağıda, bir oyuncu-silah katmanı ilişkisi haritasının nasıl olduğunu gösteren bir örnek veriliyor.
| Anahtar | oyuncu 1 | oyuncu 2 | oyuncu 3 |
| Değer | 1 | 2 | 2 |
| Oyundaki Silah | Çatışma Tabancası L1 | Çakmaklı Tepen Tabanca L1 | Çakmaklı Tepen Tabanca L1 |
Oyuncu haritanı ayarlamak ve doldurmak için aşağıdaki adımları izle:
-
PlayerMapadlı[player]intharitasınıteam_elimination_gamesınıfına ekle. Bu harita her bir oyuncuya ve silah katmanına bir referans kaydeder.team_elimination_game := class(creative_device): var PlayerMap : [player]int = map{} -
team_elimination_gamesınıfınaPopulateTeamsAndPlayers()adlı yeni bir metot ekle. Bu metotPlayerMapharitanı doldurur veOnBegin()içinden çağrılır.PopulateTeamsAndPlayers() : void= Print("Beginning to populate players") -
team_elimination_gamesınıfınaOnPlayerEliminatedadlı yeni bir metot ekle. Bir oyuncu avlandığında bu metot çağrılır ve bir bağımsız değişken olarak geçirilenelimination_resultyapısına erişerek avlayan oyuncunun kim olduğunu belirler.OnPlayerEliminated(Result : elimination_result) : void= Print("A Player was eliminated!") -
Oyun başladığında oyuncu listesini yinelemen ve hepsini birinci silah katmanına ayarlaman gerekir.
PopulateTeamsAndPlayersiçindeGetPlaySpace().GetPlayers()kullanarak tüm oyuncuları al ve birAllPlayersdizisine kaydet. Her bir oyuncu için oyuncununFortCharacterdeğerini al ve birFortCharacterdeğişkenine kaydet. Birinci silahıWeaponGrantersdizisinde göstermek için oyuncununPlayerMapharitasındaki puanını 0’a ayarla, ardındanFortCharacter.EliminatedEvent()olayınıOnPlayerEliminatedkoşuluna abone yap.AllPlayers := GetPlayspace().GetPlayers() for (Agent : AllPlayers, TeamPlayer := player[Agent], FortCharacter := TeamPlayer.GetFortCharacter[]): if(set PlayerMap[TeamPlayer] = 0, WeaponTier := PlayerMap[TeamPlayer]): Print("Assigned Player to PlayerMap with Tier {WeaponTier}") FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) -
Oyuncunun
PlayerMapkümesindeki puanına başvurarak oyunculara birinci silahlarını verebilirsin. Oyunculara birinci silahlarını vermek içinOnPlayerSpawndeğerini değiştir. Bir oyuncu doğduğundaPlayerMapharitasından silah katmanını al veWeaponTierdeğişkeninde depola, ardındanWeaponTierve bir oyuncu referansını geçirenGrantWeaponişlevini çağır.OnPlayerSpawn(InPlayer : agent) : void = Print("A player just spawned!") if(WeaponTier := PlayerMap[InPlayer]): GrantWeapon(option{InPlayer}, WeaponTier) Print("Spawned Player was granted a gun of tier {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
WeaponGrantersdizisindeki ilk silahla doğman gerekir. Günlüğe bakıp bu davranışı doğrula.
Oyuncu Takımlarını Eşleştirme
Oyuncu haritan ayarlandığında oyuncunun puanını nasıl kontrol edeceğini düşünmen gerekir. Kodun otomatik olarak takımdaki en az avlamaya sahip oyuncuyu yükselteceğinden düşman takımın oyuncularının silah katmanını kontrol etmenin bir yararı olmaz. PlayerMap takımlar arasında farklı olmadığından burada bir sorun olduğunu fark etmiş olmalısın.
Bu sorunu gidermek için başka bir harita kullanabilirsin. Bunun için daha önce oluşturduğun PlayerMap haritasını bir iç içe harita sistemine uyarlaman gerekir. Bir haritadaki anahtar-değer çiftleri herhangi bir türden çiftler olabileceği için bir takım anahtarının değer olarak başka bir haritaya sahip olabilmesi mümkündür. Birinci harita, takımları (anahtarı) aynı takımdaki (değer) başka bir oyuncu haritasıyla ilişkilendirir. İç harita, oyuncuları (anahtar) puanlarıyla (değer) ilişkilendirir.
Şimdi, belirli bir oyuncunun hangi takımda olduğunu GetTeam() kullanarak doğrulayabilirsin. Oradan avlama sayısını karşılaştırmak için takım üyelerinin bir listesini alabilirsin.
İç içe harita [team][player]int sözdizimi anlaşılır olmayabilir. Bunun anlaşılmasını kolaylaştırmak için tür diğer adından yararlanarak harita referansına daha basit bir isim oluşturabilirsin. Bu eğitimde [player]int değerine player_map diğer adını vereceksin. Diğer bir deyişle player_map adını [player]int değerine her ihtiyaç duyduğunda kullanabilirsin ve iç içe harita [team]player_map ya da takımları oyuncu haritalarıyla ilişkilendiren bir harita olarak yeniden yazılabilir.
Haritanı iç içe bir harita sistemine uyarlamak için aşağıdaki adımları izle:
-
team_elimination_gamesınıf tanımının üzerine[player]intiçinplayer_mapadlı bir diğer ad ekle.player_map := [player]int # Bu, tür diğer adıdır! team_elimination_game := class(creative_device): -
Daha önce
team_elimination_gamesınıfında oluşturduğunPlayerMapdeğişkenini[team]player_maptüründe yeni birTeamMapdeğişkeniyle değiştir.# Takım Haritalarının Haritası, burada anahtar takım, değer ise # player->int anahtar değer çiftleridir var TeamMap : [team]player_map = map{} -
TeamMapdeğeriplayer_maptüründe olduğundan, her takım için bir oyuncu haritası başlatman, haritaları doldurman, her bir oyuncunun puanını0olarak ayarlaman, ardından oyuncu haritasınıTeamMapharitasına ataman gerekir.PopulateTeamsAndPlayers()değerini güncellenmiş kodla değiştir.- Her takım için aynı takımdaki oyuncuları al ve
TeamPlayersdeğişkeninde depola. Oyuncuları puanlarıyla eşleştirmek içinplayer_maptüründe yeni birPlayerMapdeğişkeni başlat.
PopulateTeamsAndPlayers() : void= Print("Beginning to populate players") for (Team : Teams, TeamPlayers := GetPlayspace().GetTeamCollection().GetAgents[Team]): var PlayerMap : player_map = map {}TeamPlayersiçindeki her bir oyuncu için ilgili oyuncununFortCharacterdeğerini al ve birFortCharacterdeğişkenine kaydet. Birinci silahıWeaponGrantersdizisinde göstermek için oyuncununPlayerMapharitasındaki puanını0olarak ayarla, ardındanFortCharacter.EliminatedEvent()olayınıOnPlayerEliminatedkoşuluna abone yap.
PopulateTeamsAndPlayers() : void = Print("Beginning to populate players") for (Team : Teams, TeamPlayers := GetPlayspace().GetTeamCollection().GetAgents[Team]): var PlayerMap : player_map = map {} for (Agent : TeamPlayers, TeamPlayer := player[Agent], FortCharacter := Agent.GetFortCharacter[]): if(set PlayerMap[TeamPlayer] = 0, WeaponTier := PlayerMap[TeamPlayer]): Print("Assigned Player to PlayerMap with Tier {WeaponTier}") FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated)- Son olarak,
PlayerMapdeğeriniTeamMapharitasındaki geçerliTeamanahtarı olarak ayarla.PopulateTeamsAndPlayerskodun aşağıdaki gibi görünmelidir.
PopulateTeamsAndPlayers() : void = Print("Beginning to populate players") for (Team : Teams, TeamPlayers := GetPlayspace().GetTeamCollection().GetAgents[Team]): var PlayerMap : player_map = map {} for (Agent : TeamPlayers, TeamPlayer := player[Agent], FortCharacter := Agent.GetFortCharacter[]): if(set PlayerMap[TeamPlayer] = 0, WeaponTier := PlayerMap[TeamPlayer]): Print("Assigned Player to PlayerMap with Tier {WeaponTier}") FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) if(set TeamMap[Team] = PlayerMap): Print("Successfully set this team in the TeamMap") - Her takım için aynı takımdaki oyuncuları al ve
-
TeamMapayarını yaptıktan sonraGetTeam[]kullanarak bir oyuncunun takımına erişmek içinOnPlayerSpawndeğerini güncelle vePlayerTeamyerel değişkeninde depola. HemPlayerTeamhem de bir oyuncu referansı kullanarak oyuncununTeamMapharitasındaki geçerli puanını alıpWeaponTierayarını yap. GüncellenenOnPlayerSpawn()aşağıdaki kod gibi görünmelidir.OnPlayerSpawn(InPlayer : agent) : void = Print("A player just spawned!") if: PlayerTeam := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] WeaponTier:int := TeamMap[PlayerTeam][InPlayer] then: GrantWeapon(option{InPlayer}, WeaponTier) Print("Spawned Player was granted a gun of tier {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.
Sonraki Adım
Bu eğitimin bir sonraki adımında bir avlama puanı aldıklarında oyunculara nasıl silah verileceğini öğreneceksin.