Bu eğitimde belirli özellikleri mümkün kılmak için Verse kullanılmaktadır. Bu eğitimde Verse’ü kullanarak şunları yapabilirsin:
-
Bir oynanış mekaniği oluşturmak için animasyonları aralıklı olarak tetikleyip oynatma.
-
Mini oyundaki tüm oyuncular için oyuncunun puan bilgisini güncelleme.
-
Oyuncunun doğması için gecikmeler ve aralıklı eşya çıkma süreleri oluşturma.
Aşağıdaki görevleri yerine getirmek için bu kodu tekrar kullanabilirsin:
-
Oyun, merkezden oynanışa ve tekrar merkeze geçerken etkin ve devre dışı olan cihazları değiştirme.
-
Kazanan puanı bulup merkezde göstermek için oyuncuların skorlarını kontrol etme.
-
Mini oyun bittiğinde oyunu sonlandırma ve oyuncuları merkeze geri ışınlama.
Verse Cihazını ve Düzenlenebilir Objeleri Ayarlama
Verse cihazınızı ve düzenlenebilir objeleri ayarlamak için bu adımları izle:
-
tiltnboom
adlı yeni bir Verse cihazı oluştur ve bölüme ekle. Buna ilişkin adımlar için Verse Kullanarak Kendi Cihazını Oluştur bölümüne bakabilirsin. -
Dosyanın en üstüne aşağıdaki modülleri ekle:
using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /Fortnite.com/Game } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Random } using { /Verse.org/Simulation }
- Aşağıdaki alanları
tiltnboom
sınıf tanımına ekle:-
İki adet düzenlenebilir
trigger
cihazı; ActivateGameTrigger ve EndGameTrigger.ActivateGameTrigger
bu oyunu etkinleştirmek için kullanılır. Bu tetikleyici; oyuna Işınlayıcı veya giriş sinematiği sonrası gibi herhangi bir şeyle tetiklenebilir.EndGameTrigger
, mini oyunu sonlandırmak ve sonrasında tüm kamera ve kontrol cihazlarını oyunculardan kaldırmak için kullanılır.
@editable ActivateGameTrigger:trigger_device = trigger_device{} @editable EndGameTrigger:trigger_device = trigger_device{}
-
GameTimer adlı düzenlenebilir bir Süreölçer Cihazı. Bu cihaz belirli bir süre sonrasında oyunu sonlandırır.
-
CannonballSequences
adlı Sinematik Sekans cihazlarıarray
i. Dizideki her cihaz farklı bir gülle iniş konumunu oynatır. -
DamageVolumes adlı bir dizi Hasar Bölgesi. Bu etki aktörleri oyunun durumuna göre etkinleşir veya devre dışı kalır.
-
ItemSpawners adlı bir dizi Eşya Çıkma Yeri. Bu çıkma yerleri oyun sırasında rastgele sayıda eşya ortaya çıkarır.
-
CaptureArea adlı bir Ele Geçirme Alanı Cihazı. Bu cihaz, oyunculara sandalda kaldıkları için puan verir ve oyunun durumuna göre etkinleşir veya devre dışı kalır.
-
ScoreManager
adlı bir Puan Yöneticisi Cihazı. Bu cihaz, oyun başladığında oyuncuların puanlarını sıfırlar ve oyun sonunda kazanan oyuncuyu belirler. -
HUBTeleporter
adlı bir Işınlayıcı. Bu ışınlayıcı, oyun sona erdiğinde herkesi merkeze geri getirir. -
PlayerReference adlı bir Oyuncu Referansı. Bu referans, oyunlar arasındayken merkezde kazanan oyuncuyu gösterir.
@editable GameTimer:timer_device = timer_device{} @editable CannonballSequences:[]cinematic_sequence_device = array{} @editable DamageVolumes:[]damage_volume_device = array{} @editable ItemSpawners:[]item_spawner_device = array{} @editable CaptureArea:capture_area_device = capture_area_device{} @editable ScoreManager:score_manager_device = score_manager_device{} @editable HUBTeleporter:teleporter_device = teleporter_device{} @editable PlayerReference:player_reference_device = player_reference_device{}
-
-
PlayerSpawners
veHUBSpawners
adlı iki düzenlenebilir Oyuncu Doğma Karesi dizisi. Bunlar mini oyun sona erdiğinde, doğmayı devre dışı bırakır ve sonrasında oyuncuları merkeze geri götürür.@editable PlayerSpawners:[]player_spawner_device = array{} @editable HUBSpawners:[]player_spawner_device = array{}
-
MinimumItemSpawnTime
veMaximumItemSpawnTime
adlı iki düzenlenebilirfloats
. Bunlar sandalda ortaya çıkan eşyalar arasında beklenecek minimum ve maksimum süreyi belirtir.@editable MinimumItemSpawnTime:float = 5.0 @editable MaximumItemSpawnTime:float = 10.0
-
DelayAfterGame
adlı bir düzenlenebilirfloat
. Bu değer, oyun sona erdikten sonra oyuncuların merkeze ışınlanması için beklenen süreyi belirtir.@editable DelayAfterGame:float = 5.0
-
DelayBetweenCannonballSequences
adlı birfloat
. Bu değer, mini oyun sırasında sekanslar arasında güllelerin ortaya çıkması için beklenen süreyi belirtir.DelayBetweenCannonballSequences:float = 8.0
-
Oyunun aktif olup olmadığını belirlemek için kullanılan
GameActive
adlı bir mantık değişkeni.var GameActive:logic = false
Oyunu Başlatmak
Mini oyun başladığında çeşitli cihazlar etkinleştirilir ve oyuncu puanı sıfırlanır.
-
tiltnboom
sınıf tanımının üzerine, mini oyuna özel mesajlar göstermek için bir günlük kanalı ekle. Ardından, günlük kanalıyla birlikte kullanmak için sınıf tanımına bir Günlük Kaydedici ekle.tiltnboom_log_channel := class(log_channel){} # Bir bölüme yerleştirilebilen, Verse ile yazılmış bir Kreatif cihazı tiltnboom := class(creative_device): Logger:log = log{Channel := tiltnboom_log_channel}
-
titnboom
sınıf tanımına, birInitiatingAgent
alıp oyunu başlatan yeni birOnTriggered
metodu ekle. Biri çalışırken başka bir oyun başlatmak istemeyeceğinden, oyun zaten aktifse metoda geri dönen birif
ifadesi ekle.OnTriggered(InitiatingAgent:?agent):void= if (GameActive?): return spawn{StartGame()}
-
OnBegin()
de, oyunu başlatmak için ActivateGameTrigger’ınTriggeredEvent
öğesiniOnTriggered
fonksiyonuna bağla. Mini oyunun başında etkinleştirilmesi gereken tüm cihazlar bu olaya bağlanır ve *OnTrigger olayı tetiklendiğinde etkinleşir.OnBegin<override>()<suspends>:void= ActivateGameTrigger.TriggeredEvent.Subscribe(OnTriggered)
-
Oyunu başlatma mantığını üstlenecek yeni bir
StartGame()
metodu ekle. Eşzamanlı olmadan çalışabilmesi için bu fonksiyona<suspends>
değiştiricisini ekle.İlk olarak, oyunun aktif olduğunu işaret etmek için
GameActive
öğesinitrue
olarak ayarla. Ardından,DamageVolumes
dizisindekiCaptureArea
ve her birDamageVolume
öğesini etkinleştir.Her oyuncu için, eğer oyuncunun puanı 0 değerinden fazlaysa mevcut puanın tersini oyuncuya ödül olarak vererek puanı 0 olarak yeniden ayarla.
Ardından bir yarış ifadesinde süreölçerin sonlanması, gülle sekansının çalışması ve rastgele eşyaların ortaya çıkması arasında geçiş yap. Gülle sekansı ve rastgele eşya ortaya çıkarma, sonsuz döngülerdir fakat süreölçer sona erdiğinde iptal edilirler.
Oyun sona erdiğinde oyun sonu temizliği için
OnGameFinished()
fonksiyonunu çağır.StartGame()<suspends>:void= Logger.Print("Oyun başlatılıyor.") set GameActive = true CaptureArea.Enable() for (DamageVolume : DamageVolumes): DamageVolume.Enable() for: Player : GetPlayspace().GetPlayers() PlayerScore := ScoreManager.GetCurrentScore(Player) PlayerScore > 0 do: ScoreManager.SetScoreAward(-PlayerScore) ScoreManager.Activate(Player) race: GameTimer.SuccessEvent.Await() StartCannonSequence() SpawnRandomItems() OnGameFinished()
Bir Gülle Döngüsü Oluşturma
Bu bölümde, gülle Sinematik Sekansları oynatan bir fonksiyonun eklenmesi ele alınmaktadır.
-
tiltnboom
sınıf tanımına, gülle Bölüm Sekanslarını oynatan ve gecikme ifadesini oynatıp gülleler arasına gecikme eklemek için bir döngü kullanan yeni birStartCannonSequence()
metodu ekle. Eşzamanlı olmadan çalışabilmesi için bu fonksiyona<suspends>
değiştiricisini ekle.Bir döngü içinde,
GetRandomInt()
ile dizinleyerekCannonballSequences
dizisinde rastgele bir sekans seç. Sekansı oynat, ardından başka bir sekans oynatmadan önceDelayBetweenCannonballSequences
kadar süre boyunca uyut.StartCannonSequence()<suspends>:void= loop: RandomCannonballSequence:int = GetRandomInt(0, CannonballSequences.Length - 1) if (CannonballSequence := CannonballSequences[RandomCannonballSequence]): Logger.Print("Set CannonballSequence to {RandomCannonballSequence}") CannonballSequence.Play() Sleep(DelayBetweenCannonballSequences)
Rastgele Eşya Çıkma Döngüleri Oluşturma
Bu bölümde, sandalda rastgele konumlarda döngü halinde rastgele eşya çıkmasını sağlayan bir fonksiyon oluşturulması ele alınmaktadır. Bu fonksiyon, oyuncuların mini oyunu kazanma şansını olumlu veya olumsuz etkileyebilir.
-
titlnboom
sınıf tanımınaSpawnRandomItems
adlı yeni bir metot ekle. Bu metot, sandalda çıkan eşyaları kontrol eder. -
ItemSpawners
dizisindeki eşya sayısını al ve dizi içinde bir döngü oluştur. Diziden rastgele bir eşya çıkma yeri almak için rastgele birint
kullan ve ardından bunu etkinleştir. Eşya çıkışları arasında rastgele bir süre boyunca uyut. -
Döngü kaç eşyanın çıkacağına rastgele karar verir ve
NumberOfItemsToSpawn
sayıda çıkacak eşyayı rastgele seçer .DelayBetweenItemSpawns
, ortaya çıkışlar arasında önceden belirlenmemiş bir bekleme süresi oluşturur.SpawnRandomItems()<suspends>:void= ItemSpawnerCount:int = ItemSpawners.Length - 1 loop: NumberOfItemsToSpawn:int = GetRandomInt(0, ItemSpawnerCount) # NumberOfItemsToSpawn sayıda rastgele seçilmiş eşya çıkar. for: CurrentItemSpawnNumber := 0..NumberOfItemsToSpawn RandomItemToSpawn:int = GetRandomInt(0, ItemSpawnerCount) SelectedItemSpawner := ItemSpawners[RandomItemToSpawn] do: SelectedItemSpawner.SpawnItem() Logger.Print("Rastgele Çıkan Eşyalar") DelayBetweenItemSpawns:float = GetRandomFloat(MinimumItemSpawnTime, MaximumItemSpawnTime)
Oyunu Sona Erdirme
Mini oyun bittiğinde, kazanan oyuncunun puanını merkeze göndermeli, cihazları devre dışı bırakmalı ve oyuncuları merkeze geri ışınlanmalısın.
-
titlnboom
sınıf tanımınaOnGameFinished
adlı yeni bir metot ekle. Oyun sona erdiğinde, bu işlev oyunu ve ilgili cihazları devre dışı bırakır.OnGameFinished()<suspends>:void= Logger.Print("Oyun bitti.") set GameActive = false CaptureArea.Disable() for (PlayerSpawner : PlayerSpawners): PlayerSpawner.Disable() for (DamageVolume : DamageVolumes): DamageVolume.Disable()
-
En yüksek puanlı oyuncuyu takip etmek için
HighestScore
adlı birvariable int
veWinningPlayer
olarak belirlenen oyuncuya bir seçenek referans değişkeni ekle.var HighestScore:int = -1 var WinningPlayer:?agent = false
-
Bir
for
/do ifadesinde, oyun alanındaki tüm oyuncuları al ve ardından her biri içinFortCharacter
al.PutInStasis()
kullanarak karakteri yerine sabitle, bir grupstasis_args
ile oyuncuların ifade kullanarak ve dönerek kutlama yapmalarına izin ver.for: Player : GetPlayspace().GetPlayers() FortCharacter := Player.GetFortCharacter[] do: FortCharacter.PutInStasis(stasis_args{AllowTurning := true, AllowEmotes := true})
-
Bir
if
ifadesinde, kazanan puanı bulup merkezdeki Oyuncu Referansı cihazında saklamak için her oyuncunun puanını kontrol et.if (ScoreManager.GetCurrentScore(Player) > HighestScore): set HighestScore = ScoreManager.GetCurrentScore(Player) set WinningPlayer = option{Player}
-
Son olarak, bir başka if ifadesinde, kazanan puan bulunduğunda herkesi merkeze geri ışınlamak için
TeleportPlayersToHUB()
fonksiyonunu çağır.if(Winner := WinningPlayer?): PlayerReference.Register(Winner) TeleportPlayersToHUB()
Oyuncuları Merkeze Geri Işınlama
Puanlar hesaplanıp kazanan açıklandıktan sonra tüm oyuncular merkeze geri ışınlanmalıdır.
-
titlnboom sınıf tanımına
TeleportPlayersToHUB()
adlı yeni bir metot ekle. Bu metot, merkezdeki tüm oyuncu çıkma yerlerini etkinleştirir, ardından herkesi merkeze geri ışınlamadan önce birkaç saniye bekler. Bu metot ayrıca oyunculardan kamera ve kontrol cihazlarını kaldırmak içinEndGameTrigger
fonksiyonunu da tetiklemelidir.TeleportPlayersToHUB()<suspends>:void= for (HUBSpawner : HUBSpawners): HUBSpawner.Enable() Sleep(DelayAfterGame) EndGameTrigger.Trigger()
-
Bir
for
ifadesinde, her oyuncuyuHUBTeleporter
a geri ışınla ve durağan durumdan çıkar.for: Player : GetPlayspace().GetPlayers() FortCharacter := Player.GetFortCharacter[] do: HUBTeleporter.Teleport(Player) Sleep(1.0) FortCharacter.ReleaseFromStasis()
Kendi Kendine Yapabileceklerin
Süreölçer Cihazının yapacağı farklı görevler oluşturmak için bu kodu değiştir. Mini oyunun ne kadar uzun olacağını belirlemek yerine, yarışın süresini belirlemek için Süreölçer Cihazını kullanabilirsin.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
tiltnboom_log_channel := class(log_channel){}
# Bir bölüme yerleştirilebilen, Verse ile yazılmış bir Kreatif cihazı
tiltnboom := class(creative_device):
Logger:log = log{Channel := tiltnboom_log_channel}
# Bu oyunu etkinleştirmek için kullanılan tetikleyici. Bu tetikleyici; oyuna ışınlayıcı veya giriş sinematiği sonrası gibi herhangi bir şeyle tetiklenebilir.
@editable
ActivateGameTrigger:trigger_device = trigger_device{}
# Bu oyunu sonlandırmak için kullanılan tetikleyici. Oyun sona erdikten sonra tüm kamera ve kontrol cihazlarını oyunculardan kaldırmak için kullanılır.
@editable
EndGameTrigger:trigger_device = trigger_device{}
# Süreölçer Cihazı belirli bir süre sonrasında oyunu sonlandırır.
@editable
GameTimer:timer_device = timer_device{}
# Her sekansın farklı bir gülle iniş konumu olduğu Sekans Dizisi.
@editable
CannonballSequences:[]cinematic_sequence_device = array{}
# Oyunun durumuna göre etkinleştirme ve devre dışı bırakma için kullanılan Hasar Etki Aktörleri Dizisi.
@editable
DamageVolumes:[]damage_volume_device = array{}
# Bu oyun için, oyun sona erdiğinde devre dışı bırakmak için kullanılan Oyuncu Doğma Kareleri dizisi.
@editable
PlayerSpawners:[]player_spawner_device = array{}
# Oyuncuların merkeze dönebilmesi için oyun sonrasında etkinleştirmek için merkezde kullanılan Oyuncu Doğma Kareleri dizisi.
@editable
HUBSpawners:[]player_spawner_device = array{}
# Oyun sırasında rastgele sayıda eşya çıkarmak için kullanılan Eşya Çıkma Yerleri dizisi.
@editable
ItemSpawners:[]item_spawner_device = array{}
# Oyunculara sandalda oldukları için puan veren Ele Geçirme Alanı Cihazı. Oyunun durumuna göre etkinleştirme ve devre dışı bırakma için kullanılır.
@editable
CaptureArea:capture_area_device = capture_area_device{}
# Puan Yöneticisi Cihazı, oyun başladığında oyuncuların puanlarını sıfırlamak ve oyun sonunda kazanan oyuncuyu belirlemek için kullanılır.
@editable
ScoreManager:score_manager_device = score_manager_device{}
# Oyun sona erdiğinde herkesi merkeze geri ışınlamak için kullanılan ışınlayıcı.
@editable
HUBTeleporter:teleporter_device = teleporter_device{}
# Rastgele eşya çıkışları arasında geçen minimum süre.
@editable
MinimumItemSpawnTime:float = 5.0
# Rastgele eşya çıkışları arasında geçen maksimum süre.
@editable
MaximumItemSpawnTime:float = 10.0
# Oyunlar arasında kazanan oyuncuyu görüntülemek için kullanılan Oyuncu Referansı Cihazı.
@editable
PlayerReference:player_reference_device = player_reference_device{}
# Oyun sona erdiğinde herkesi merkeze geri ışınlamadan önce beklenecek süre.
@editable
DelayAfterGame:float = 5.0
# Gülle sekansları arasında beklenecek süre.
DelayBetweenCannonballSequences:float = 8.0
# Oyunun aktif olup olmama durumu için global mantık değişkeni.
var GameActive:logic = false
OnBegin<override>()<suspends>:void=
# Tetikleyici tetiklendiğinde cihazın oyunu başlatabilmesi için ActivateGameTrigger’ın TriggeredEvent’ine bağla.
ActivateGameTrigger.TriggeredEvent.Subscribe(OnTriggered)
# Oyun aktif değilse
# ActivateGameTrigger tetiklendiğinde oyunu başlatır.
OnTriggered(InitiatingAgent:?agent):void=
# Oyun devam ediyorsa bir oyun başlatma.
if (GameActive?):
return
spawn{StartGame()}
# Oyun aktif değilse ve tetiklendiyse oyunu aktif olarak ayarla ve bu oyun için cihazları etkinleştir.
# Ardından tüm oyuncuların puanını sıfırla, zaman dolduğunda Süreölçer Cihazının SuccessEvent’ini oyunu sonlandırmaya bağla,
# oyunculara gülleler fırlatmaya ve rastgele eşyalar çıkarmaya başla.
StartGame()<suspends>:void=
Logger.Print("Oyun başlatılıyor.")
set GameActive = true
# Oyunda kullanılan cihazları etkinleştir.
CaptureArea.Enable()
for (DamageVolume : DamageVolumes):
DamageVolume.Enable()
# Her oyuncu için, eğer oyuncunun puanı 0 değerinden fazlaysa
# mevcut puanın tersini oyuncuya ödül olarak vererek puanı 0 olarak yeniden ayarla.
for:
Player : GetPlayspace().GetPlayers()
PlayerScore := ScoreManager.GetCurrentScore(Player)
PlayerScore > 0
do:
ScoreManager.SetScoreAward(-PlayerScore)
ScoreManager.Activate(Player)
# Süreölçerin sonlanması, gülle sekansının çalışması ve rastgele eşyaların ortaya çıkması arasında geçiş yap.
# Gülle sekansı ve rastgele eşya ortaya çıkarma, sonsuz döngülerdir fakat süreölçer sona erdiğinde iptal edilirler.
race:
GameTimer.SuccessEvent.Await()
StartCannonSequence()
SpawnRandomItems()
# Süreölçer bittiği için oyun sona erdi. Oyuncuları taşı ve kazanan oyuncuyu kaydet.
OnGameFinished()
# Oyun döngü sırasında devre dışı kalırsa döngüden çık ve gülle atmayı bırak.
# Aksi takdirde dizide rastgele bir sekans seç ve oynat, ardından başka bir sekansı oynatmadan önce sekiz saniye bekle.
StartCannonSequence()<suspends>:void=
loop:
# Oynatmak için gülle sekanslarından rastgele bir sekans seç.
RandomCannonballSequence:int = GetRandomInt(0, CannonballSequences.Length - 1)
if (CannonballSequence := CannonballSequences[RandomCannonballSequence]):
Logger.Print("Set CannonballSequence to {RandomCannonballSequence}")
# Rastgele seçilmiş gülle sekansını oynat
CannonballSequence.Play()
# Bir sonraki sekans için DelayBetweenCannonBallSequences saniye bekle.
Sleep(DelayBetweenCannonballSequences)
# ItemSpawners dizisinin uzunluğunu al, ardından dizi içinde bir döngü oluşturarak rastgele sayıda eşya çıkma yerini etkinleştir.
# Eşya çıkışları arasında rastgele bir süre bekle ve oyun devre dışı olana kadar bunu tekrar et.
SpawnRandomItems()<suspends>:void=
ItemSpawnerCount:int = ItemSpawners.Length - 1
loop:
# Bu sefer rastgele kaç kere çıkacağına karar ver.
NumberOfItemsToSpawn:int = GetRandomInt(0, ItemSpawnerCount)
# NumberOfItemsToSpawn sayıda rastgele seçilmiş eşya çıkar.
for:
CurrentItemSpawnNumber := 0..NumberOfItemsToSpawn
RandomItemToSpawn:int = GetRandomInt(0, ItemSpawnerCount)
SelectedItemSpawner := ItemSpawners[RandomItemToSpawn]
do:
SelectedItemSpawner.SpawnItem()
# Eşya çıkışları arasında beklemek için rastgele bir süre üret.
Logger.Print("Rastgele Çıkan Eşyalar")
DelayBetweenItemSpawns:float = GetRandomFloat(MinimumItemSpawnTime, MaximumItemSpawnTime)
# DelayBetweenItemSpawns saniye bekle
Sleep(DelayBetweenItemSpawns)
# Oyun sona erdiğinde oyunu ve ilgili cihazları devre dışı bırak.
# Ardından kazanan oyuncuyu bul ve oyuncu referansı cihazını o oyuncuya ayarla.
# Son olarak herkesi merkeze geri ışınla.
OnGameFinished()<suspends>:void=
Logger.Print("Oyun bitti.")
set GameActive = false
# Oyunda kullanılan cihazları devre dışı bırak.
CaptureArea.Disable()
for (PlayerSpawner : PlayerSpawners):
PlayerSpawner.Disable()
for (DamageVolume : DamageVolumes):
DamageVolume.Disable()
# En yüksek puanı alan oyuncuları al ve bunları Oyuncu Referansı cihazında sakla.
var HighestScore:int = -1
var WinningPlayer:?agent = false
for:
Player : GetPlayspace().GetPlayers()
FortCharacter := Player.GetFortCharacter[]
do:
# Oyuncuyu dondur.
FortCharacter.PutInStasis(stasis_args{AllowTurning := true, AllowEmotes := true})
# Oyuncunun puanının mevcut bulunan en yüksek puandan yüksek olup olmadığını kontrol et.
if (ScoreManager.GetCurrentScore(Player) > HighestScore):
# En yüksek puanı ve kazanan oyuncuyu güncelle
set HighestScore = ScoreManager.GetCurrentScore(Player)
set WinningPlayer = option{Player}
if(Winner := WinningPlayer?):
PlayerReference.Register(Winner)
TeleportPlayersToHUB()
# Merkezdeki tüm oyuncu doğma karelerini etkinleştir, ardından herkesi merkeze geri ışınlamadan önce birkaç saniye bekle.
# Ayrıca, oyunculardan kamera ve kontrol cihazlarını kaldırmak için EndGameTrigger fonksiyonunu da tetikle.
TeleportPlayersToHUB()<suspends>:void=
# Merkez çıkma yerlerini etkinleştir.
for (HUBSpawner : HUBSpawners):
HUBSpawner.Enable()
# Oyun sona erdikten sonraki gecikme.
Sleep(DelayAfterGame)
# Oyunun sona erdiğini diğer cihazlara bildir.
EndGameTrigger.Trigger()
# Tüm oyuncuları merkeze taşı.
for:
Player : GetPlayspace().GetPlayers()
FortCharacter := Player.GetFortCharacter[]
do:
HUBTeleporter.Teleport(Player)
# Işınlanmanın tamamlanması için bir saniye bekle.
Sleep(1.0)
# Dondurulmuş oyuncuyu çöz.
FortCharacter.ReleaseFromStasis()