Üç takım içinde Casuslar, oyunundaki en benzersiz rolü oynayan takımdır. Casuslar gizli hareket eder ve oyuna görünmez olarak başlarlar. Yüksek hasar verebilen bir sürgülü tüfekle doğarlar ve Savunmacı üssüne doğru gizlice ilerlerken gölgelerin içinden avlama puanları alabilirler. Ancak Casuslar her zaman görünmez değildir. Vurulduklarında görünmezliklerini geçici süreyle kaybederler ve titreşim şeklinde bir görünüp bir kaybolurlar.
Bu eğitimde bir Casus hasar gördüğünde takımdaki her Casusu titretmeyi veya yalnızca ilgili Casusun titremesini sağlamayı da öğreneceksin. Takım halinde titreme, Casuslar için daha zor bir deneyim oluşturur ancak onları daha dikkatli oynamaya teşvik eder.
Casusları doğduklarında nasıl görünmez yapacağını öğrenmek için bu adımları izle.
Görünmezlik Yöneticisini Oluşturma
- Verse Gezgini kullanarak invisibility_manager adlı yeni bir Verse cihazı oluştur ve cihazı bölüme sürükle.
invisibility_manager
dosyasının en üstüneusing { /Fortnite.com/Characters }
ifadesini ekleyerek bir oyuncuyla ilişkilifort_character
değerini al.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }
invisibility_manager
sınıf tanımına aşağıdaki alanları ekle:PlayerSpawners
adlı düzenlenebilir bir oyuncu doğma yerleri dizisi. Bu dizi, Casuslar için oyuncu çıkma yerlerini takip eder ve doğduklarında Casusları görünmez yapmak için kullanılırinvisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # Casuslar takımı için oyuncu doğma karelerinin dizisi @editable PlayersSpawners:[]player_spawner_device = array{}
IsVisibilityShared
adlı düzenlenebilir bir mantık. Bu mantık, hasar gördükten sonra titreşimin aynı anda tüm Casuslar için veya yalnızca hasar gören oyuncu için gerçekleşeceğini belirler.# Casuslar takımı için oyuncu doğma karelerinin dizisi @editable PlayersSpawners:[]player_spawner_device = array{} # Casusların görünürlük bilgisinin takım arkadaşlarıyla paylaşılıp paylaşılmadığı. @editable IsVisibilityShared:logic = true
VulnerableSeconds
adlı düzenlenebilir bir kayan sayı veFlickerRateSeconds
ve adlı düzenlenebilir bir kayan sayı. Birinci kayan değer Casusların hasar gördükten sonra ne kadar süreyle titreyeceğini belirlerken ikinci kayan değer ise titreşim animasyonunun ne kadar hızlı oynatılacağını kontrol eder.# Casusların görünürlük bilgisinin takım arkadaşlarıyla paylaşılıp paylaşılmadığı. @editable IsVisibilityShared:logic = true # Casusların hasar gördükten sonra ne kadar süreyle görünür olacağı. @editable VulnerableSeconds:float = 3.0 # Casusların hasar gördükten sonra ne kadar hızlı titreyeceğini belirtir. @editable FlickerRateSeconds:float = 0.4
Teams
adlı değişken bir takım dizisi. Bu diziyi kullanarak bir oyuncunun Casus olup olmadığını kontrol edeceksin.# Casusların hasar gördükten sonra ne kadar hızlı titreyeceğini belirtir. @editable FlickerRateSeconds:float = 0.4 # Oyundaki tüm takımların dizisi. var Teams:[]team = array{}
PlayerVisibilitySeconds
adlı değişken biragent
-float
eşleştirmesi. Bu eşleştirme, her bir aracının hasar gördükten sonra kaç saniye titrediğini belirler.var Teams:[]team = array{} # Oyundaki tüm takımların dizisi. var Teams:[]team = array{} # Oyuncuların titremeye devam edecekleri kalan saniye miktarıyla eşleştirilmesi. var PlayerVisibilitySeconds:[agent]float = map{}
- Cihazın başlatıldığını doğrulamak için
OnBegin()
dizisine bir günlük ifadesi ekle. Yanlış takımdaki oyuncuların görünmez olmasını önlemek için,invisibility_manager
cihazının takımlartriad_infiltration_game
koduyla dengelendikten sonra çalıştığından emin olman gerekir. Bunu garanti etmek için koduOnBegin()
dizisinde çalıştırmak yerineinvisibility_manager
cihazınıtriad_infiltration_game
kodundan başlatmalısın.OnBegin<override>()<suspends>:void= # Oyuncuları görünür yapan olaylara abone olmadan önce takımların dengelenmesini bekle. Logger.Print("Takımların dengelenmesi bekleniyor...")
invisibility_manager
sınıf tanımınaOnPlayerSpawn()
adlı yeni bir metot ekle. Casusların her doğduğunda görünmez olmasını sağlaman gerektiği için önce bu fonksiyonu uygularsın.# Casus doğma karesinde bir oyuncunun doğmasını işler OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print(“Casus doğma karesinde şimdi bir oyuncu doğdu!”)
OnPlayerSpawn()
fonksiyonunda, doğan aracıyla ilişkilifort_character
değerini almak içinGetFortCharacter[]
kullan ve birFortCharacter
değişkenine kaydet. Ayrıca,GetTeam[]
kullanarak doğan aracının takımını al ve birCurrentTeam
değişkenine kaydet.# Casus doğma karesinde bir oyuncunun doğmasını işler OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print(“Casus doğma karesinde şimdi bir oyuncu doğdu!”) if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent]
CurrentTeam
değerininTeams
dizisindeki birinci takım olan Casuslar ile eşleşip eşleşmediğini kontrol et. Eşleşiyorsa bu aracı bir casustur ve aracınınFortCharacter
değerindeHide()
çağrısı yapabilirsin. Bunu yaptığında aracı doğduğu zaman görünmez olacaktır.OnPlayerSpawn()
fonksiyonun şu şekilde görünmelidir:# Casus doğma karesinde bir oyuncunun doğmasını işler OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print(“Casus doğma karesinde şimdi bir oyuncu doğdu!”) if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent] Teams[0] = CurrentTeam Logger.Print("Oyuncu bir casus olarak doğdu, bu da onu görünmez yapıyor") then: FortCharacter.Hide()
invisibility_manager
sınıf tanımınaStartInvisibilityManager()
adlı yeni bir metot ekle. Bu fonksiyon, birAllTeams
takım türü dizisini,AllPlayers
oyuncu türü dizisini veteam
türündeki Casuslar takımının bir referansını alır. Bu fonksiyonutriad_infiltration_game
kodundan çağırarakinvisibility_manager
mantığını başlatabilirsin. Bu nedenle, bu fonksiyonuntriad_infiltration_game
kodu tarafından bulunabilmesi için<public>
belirleyicisine sahip olması gerekir.# Görünmezlik yöneticisi mantığını oluşturmaya başlar. Takım dengeleme bittikten sonra triad_infiltration sınıfından çağrılır StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Görünmezlik kodu başlatıldı!")
StartInvisibilityManager()
fonksiyonunda:Teams
dizisiniAllTeams
dizisine ayarla.# Görünmezlik yöneticisi mantığını oluşturmaya başlar. Takım dengeleme bittikten sonra triad_infiltration sınıfından çağrılır StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Görünmezlik kodu başlatıldı!") set Teams = AllTeams
- Bir
for
döngüsündePlayerSpawners
içindeki her bir oyuncu doğma yeriniOnPlayerSpawn()
fonksiyonuna abone yap.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)
- Kod başlatıldığında her bir Casusu bulup görünmez yapman gerekir. Ayrıca
PlayerVisibilitySeconds
haritanda casuslar için bir giriş oluşturman gerekir. Bu girişi daha sonra, hasar gören her bir Casusun ne kadar süreyle titreyeceğini takip etmek için kullanacaksın. TıpkıOnPlayerSpawn()
fonksiyonunda olduğu gibi her oyuncu içinfort_character
veteam
değerlerini al.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Bir oyuncu casus takımında doğduysa o oyuncu için bir OnInfiltratorDamaged fonksiyonu # oluştur. Ardından, karakterini görünmez yap. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer]
CurrentTeam
değerinin bu fonksiyona geçirdiğinInfiltrators
takımıyla eşleşip eşleşmediğini kontrol et. Eşleşiyorsa oyuncununPlayerVisibilitySeconds
içindeki anahtarını0.0
olarak ayarla.for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Bu oyuncunun geçerli takımı alındı") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Oyuncu PlayerVisibilitySeconds değerine eklendi")
- Son olarak oyuncunun
FortCharacter
değerindeHide()
fonksiyonunu çağırarak oyuncuyu görünmez yap.StartInvisibilityManager
kodun şu şekilde görünmelidir:# Görünmezlik yöneticisi mantığını oluşturmaya başlar. Takım dengeleme bittikten sonra triad_infiltration sınıfından çağrılır StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Görünmezlik kodu başlatıldı!") set Teams = AllTeams for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Bir oyuncu casus takımında doğduysa o oyuncu için bir OnInfiltratorDamaged fonksiyonu # oluştur. Ardından, karakterini görünmez yap. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Bu oyuncunun geçerli takımı alındı") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Oyuncu PlayerVisibilitySeconds değerine eklendi") then: spawn{OnInfiltratorDamaged(TeamPlayer)} Logger.Print("Oyuncu bir casus olarak doğdu, bu da onu görünmez yapıyor") FortCharacter.Hide() else: Logger.Print("Bu oyuncu bir casus değil")
Üçlü Casusluk Oyunundan Görünmezlik Yöneticisini Çağırma
triad_infiltration_game
dosyasına geri dönerek sınıf tanımına düzenlenebilir birinvisibility_manager
ekle.triad_infiltration_game
cihazının bölümünde çağıracağı cihaz budur.# Casusların görünmezliğini kontrol eden invisibility_manager koduna referans. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}
BalanceTeams()
çağrısından sonraOnBegin()
fonksiyonundaTeams
,AllPlayers
veInfiltrators
değerlerini geçerekStartInvisibilityManager()
fonksiyonunu çağır.OnBegin()
fonksiyonun şu şekilde görünmelidir:OnBegin<override>()<suspends>:void = # Bütün Takımları al set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Takımları daha sonra başvurmak üzere kaydet set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Üç takımın hepsi bulundu") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("TeamsAndTotals içinde üç takımın hepsi ayarlandı") then: #Yeni bir oyuncu oyuna katıldığında takımların yeniden dengelenmesine olanak tanıyan PlayerAddedEvent olayına abone ol GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded) for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) BalanceTeams() Logger.Print("Takımlar dengelendi, görünmezlik kodu çağrılıyor") InvisibilityManager.StartInvisibilityManager(Teams,AllPlayers, Infiltrators) TeleportPlayersToStartLocations() else: Logger.Print("Bütün takımlar bulunamadı, ada ayarlarında doğru takımları atadığından emin ol.")
- Dosyaları kaydet ve derle. Anahat Düzenleyicisinde cihazı seç ve Casuslara ait tüm doğma karelerini PlayerSpawners dizisine ata.
- Anahat Düzenleyicisinde triad_infiltration_game cihazını seç ve invisibility_manager cihazını InvisibilityManager özelliğine ata.
- Bölümün oynanış testini yapmak için UEFN araç çubuğunda Oturumu Başlata tıkla.
Bölümüne oynanış testi uyguladığında her oyuncunun en büyük farka sahip takıma atanması ve kendi takımına uygun bir silahla doğması gerekir. Her Casus hem oyun başladığında hem de yeniden doğduğunda görünmez olmalıdır.

Sonraki Adım
Bu eğitimin sonraki adımında bir Casus hasar gördüğünde karakterini nasıl titreteceğini öğreneceksin.