Yalnızca UEFN’e özgü bu şablon hem süreklilik hem de çevrimdışı ilerleme özelliklerine sahip olan küçük, fabrika tarzında bir oyun içerir.
Şablonun içindeki eğitimler için temel Fortnite İçin Unreal Editor (UEFN) bilgilerine sahip olman ve bir Verse dosyasının nasıl açılacağını bilmen gerekir. Başka bir gereklilik yoktur. Şablonun kendisi eğitim talimatlarını sağlar.
Yılbaşı Oyuncak Fabrikası’na hoş geldin. Bu LEGO® şablonu, aşağıdaki özellikleri kullanarak ilgi çekici oyun döngüleri yoluyla oyuncu sadakatini sağlamaya odaklanır:
Süreklilik: Oyuncu verilerinin oyun oturumları arasında kaydedilmesi.
Çevrimdışı ilerleme: Fabrika, oyuncu oyunda değilken dahi kapsayıcısında yer olduğu sürece oyuncak üretmeye devam ederken baston şeker ormanı da oyuncuların varlığından bağımsız olarak büyümeyi sürdürür.
Bu iki özelliğin bileşiminden faydalanarak oyuncuların adana dönmeye devam etmesini teşvik eden günlük mekanikler de oluşturabilirsin. Bu şablonu kullanarak bu mekanizmaları kendi rahat tatil adanda nasıl uygulayacağını öğren!
Şablon üç kısa eğitim içerir.
Yeni Başlayanlar: Baston şeker ormanı büyüme süresinin Verse’te nasıl değiştirileceğini gösterir.
Orta Seviye: Bir değişkenin Verse’te nasıl düzenleneceğini ayrıntılı olarak açıklar.
İleri Seviye: Verse kodunda değişiklikler ve eklemeler yapmanı sağlar.
Projedeki her eğitimde, kullanılan mekanikleri hayata geçirmek için Verse’ü nasıl kullanacağın gösterilir.
Şablon üç bölüme ayrılmıştır:
Oyna: Öncelikle oyunun nasıl çalıştığını anlamak için 5–10 dakika boyunca oyunu oyna.
Oluştur: Ardından, eğitimdeki zorlu görevleri izleyerek üç mod yapacaksın.
Keşfet: Son olarak, kendi başına keşiflerde bulunabilir ve belgelenmiş tüm kodları, bunların nasıl çalıştığını görmek için parçalarına ayırabilir, sonrasında da tatil dönemine yönelik kendi oyununu oluşturabilirsin!
Oyna
UEFN’den şablonu yükle. Bu şablonu diğer LEGO şablonlarıyla birlikte bulacaksın. Oyunu oynamaya başla.
Oyun içindeyken görevi takip etmek için, sana ne yapılacağını açıklayacak olan Sör Pawlar’a doğru yürü.
Oyundaki talimatları izle.
Eğitimde, belli bir aşamadan sonra oyunu sonlandırman istenecek. Esc tuşuna bas, ardından Oyunu Sonlandır düğmesine tıkla.
2 dakika bekle.
2 dakika dolduktan sonra tekrar Esc tuşuna bas, ardından Oyunu Başlat düğmesine tıkla.
Böyle bir test istenmesi tuhaf bir şey gibi görünebilir ancak bu test, çok önemli bir özelliğin gösterilmesini sağlar. Bu oyunda, sen oynamadığın zamanlarda da bir şeyler olmaya devam eder! Fabrika üretime devam eder ve baston şeker ormanı büyümeyi sürdürür.
Bu mekanikler, oyuncuları oyununa geri dönüp zaman içinde büyüyen bitkileri veya üretilen kaynakları hasat etmeye veya toplamaya teşvik edebilecek temel mekaniklerdir.
Oyuna geri döndüğünde, sen oyunda değilken nelerin üretildiğini görebilirsin:
Bu işlem factory_manager.verse dosyasında yapılır. Dosya, kalıcı verileri ve gerçek zaman saati cihazını kullanarak oyuncu oyunda değilken ne kadar zaman geçtiğini ölçer. Ardından, fabrikanın bu süre zarfında ne kadar üretim yapacağını hesaplar.
İkinci fabrika inşasını ürettikten sonra UEFN’e geri dönmene yönelik bir mesaj alacaksın.
İlk eğitimin tamamlandı! Şimdi yaratıcı zorlu görevlere geçme zamanı.
Oluştur
Artık eğlenceli şeyler yapmanın zamanı geldi! Seni bekleyen üç zorlu görev var.
Bunlardan ilki olan Acemi Gözleme’yi bul. Bu karakter seni üç sarı kareden birinde bekliyor olacak.
Yeni Başlayanlar İçin Zorlu Görev: Baston Şeker Yeniden Büyüme Süresini Değiştir
İlk zorlu görev oldukça nettir. Bu görev ile, yalnızca bazı değerlerde (bu durumda baston şeker tarlalarının yeniden büyüme süresi) ince ayar yaparak oyunu ne kadar değiştirebileceğini göreceksin.
Acemi Gözleme’nin yanında, Verse ile oluşturulan baston şeker cihazını göreceksin.
Bunu seç ve Ayrıntılar panelinin de seçili olduğundan emin ol.
CandyCaneRegrowthTimeparametresini ayarla. Denemeler yaparak bunun oynanışı nasıl etkilediğini gör.
Orta Seviye Zorlu Görev: Yükseltme Fiyatlarını Değiştir
İkinci zorlu görev seni Verse kodu içine yönlendirecektir.
Yine bu görevde de yalnızca fabrikanı yükseltmene dair fiyatlarda ufak değişiklikler yaparak oyunun temposunu ve verdiği hissi ne kadar değiştirebileceğini göreceksin.
Verse Gezgini’nden upgrade_config.verse dosyasını aç.
Çeşitli fabrika unsurlarının yükseltilmesine ilişkin tüm fiyatları görebilirsin. İlk fiyat grubu, fabrika bantlarına ilişkindir. Fabrikada dört bant vardır, bu nedenle fiyat tablosu dört sütun içerir. Tablodaki her satır, bir bandın o seviyeye yükseltilmesi için gereken fiyatı gösterir.
Verse# This file contains the data used to configure the factory in the game. # This includes upgrade prices, max levels, production speeds, storage capacities and more. # It also contains functions for getting all this data. using { /Verse.org/Simulation } using { Persistence } # Blubberchops: "Looks like this is the place to modify the upgrade prices for belts."Zırıltı Pirzolası’nın tavsiyesine uy ve bantların yükseltilmesi için gereken fiyatı düşür. Oyunun temposunu yavaşlatmak için fiyatı artırmayı da deneyebilirsin.
Hazır olduğunda Verse kodunu oluştur ve değişikliklerini denemek için Verse değişikliklerini gönder.
Bu adımda ne yaptığına dair daha fazla bilgi için İlk Verse Programını Değiştir ve Çalıştır bölümüne bakabilirsin.
Oturuma her değişiklik gönderdiğinde fabrika ilerlemesinin sıfırlanacağını unutma.
Uzman Zorlu Görevi: Günlük Hediye
Üçüncü ve son zorlu görevde, Profesör Flopkins’in yanında günlük hediye üzerinde çalışman istenir.
Bunu yapmak için hediyenin en son açıldığı zamanı depolamak üzere bazı ekstra kalıcı veriler eklemen gerekecektir. Ayrıca Verse ile oluşturulan günlük hediye cihazındaki mantığı düzeltmen de gerekir.
Verse’te kalıcı verilerle çalışma hakkında daha fazla bilgi için Kalıcı Veriler Kullanma bölümüne bakabilirsin.
Bu zorlu görevle ilgili biraz yardıma ihtiyacın varsa aşağıdaki Günlük Hediye Cihazı bölümüne göz at!
Verse Gezgini’nden player_info.verse dosyasını aç.
Dosyanın üst kısmına yakın bir yerde Profesör Flopkins’in açıklamalarına bak.
player_infosınıfına, hediyenin en son açıldığı zamanı depolamak için birdate_and_timedizi alanı eklediğinden emin ol. Alan değerininMakePlayerInfooluşturucusunda ayarlandığından da emin ol.Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Yeni eklenen alanı almaya ve ayarlamaya yönelik fonksiyonları düzelt. Profesör Flopkins’in açıklamalarına, bu kez dosyanın alt kısmına yakın bir yerde bak.
Fonksiyonların doğru şekilde işlev göstermesi için eksik satırları doldur. İlham almak için dosyadaki bazı diğer fonksiyonlara bakabilirsin.
Verse# This file defines player_info, the collection of persistable information stored for each player. # It also contains functions for creating, updating and returning information about a player. using { /Verse.org/Simulation } using { Config } using { Time } # Maps each player to their persisted information. var PlayerInfoMap:weak_map(player, player_info) = map{}Kalıcı verilere ilişkin yeni işlevsellik hazır olduğuna göre, hediyenin günde yalnızca bir kez görünmesini sağlayan mantığı değiştirmek için daily_gift.verse dosyasını açabilirsin.
Aşağıdaki iki hayati parçanın eksik olduğunu göreceksin:
Hediye açıldığında geçerli zamanın depolanması ve
Hediyenin son açıldığı tarihten bu yana tarihin yenilenip yenilenmediğinin kontrol edilmesi.
Profesörün açıklamalarını takip et ve eksik kodu ekle.
Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() # Professor Flopkins: "Hmm, the code to determine if the date has rolled over is also missing." # "Let's see.. first we'll get the selected player." # "Look in the OnHarvesting function to see how to do that."Artık çözümünü test etmeye hazırsın! Verse kodunu derle ve kodu oturumunda denemek için Verse değişikliklerini gönder.
Tarih değiştiğinde hediyenin yeniden çıkıp çıkmadığını test etmek için zamanda ileri gitmek amacıyla bir kısayol olarak Sub Zero’nun hata ayıklama düğmesini kullanabilirsin.
Keşfet
Zorlu görevlerini yerine getirdiğine göre artık bu şablonda kullanılan diğer cihazlardan bazılarını keşfetmenin zamanı geldi.
Gerçek Zaman Saati Cihazı
Gerçek zaman saati cihazı, geçerli saati Eşgüdümlü Evrensel Saat’e (UTC) göre verir. Bir saatin kollarını da animasyonlu hale getirir.
Bu cihazı, her gün belirli bir saatte gerçekleşmesi gereken olayları yönlendirmek veya geçen süreyi takip etmek için kullanabilirsin.
Geçerli saati belirli bir süre kadar ileriye veya geriye kaydırabilen yerleşik bir test fonksiyonu içerir. real_time_device.verse dosyası ile date_and_time.verse ve time_interval.verse dosyalarına göz at.
Baston Şeker Tarlası Cihazı
Verse ile oluşturulan baston şeker tarlası cihazı, hasat edilebilir baston şekerlerinden oluşan bir tarlanın takibini yapar. Baston şekerleri hasat edildiğinde kaynaklar sağlar ve baston şekerlerinin zaman içinde yeniden büyümesini sağlar. Bu cihazı, yeniden büyüyen her türlü kaynak için kullanabilirsin. candy_cane_field.verse dosyasına göz at.
Süreklilik Modülü
Bu modül, her oyuncuyla ilişkili tüm kalıcı verileri tutar. Ana sınıf, player_info.verse dosyasındaki player_info sınıfıdır.
Bu dosya, verilerin okunmasına ve manipüle edilmesine yönelik tüm fonksiyonları da içerir. Modüldeki diğer sınıflara da göz atmalısın. Bunların her biri, her oyuncu için depolanan verilerin bir kısmını tanımlar. Sınıfları ihtiyaçlarına göre değiştirebilir veya bunlara daha fazla veri ekleyebilirsin.
# This file defines player_info, the collection of persistable information stored for each player.
# It also contains functions for creating, updating and returning information about a player.
using { /Verse.org/Simulation }
using { Config }
using { Time }
# Maps each player to their persisted information.
var PlayerInfoMap:weak_map(player, player_info) = map{}
# This tracks all persistable information for a player.
player_info := class<final><persistable>:
# The version of the current player info.
Günlük Hediye Cihazı
Bu cihaz, çalışıyor olması halinde günlük bir hediye çıkarır.
Verse ile oluşturulan günlük hediye cihazından tam olarak yararlanmana yardımcı olmak için uzman zorlu görevinin çözümü aşağıda veriliyor. Bu cihazı, her türlü günlük olayı ve ödülü gerçekleştirmek için kullanabilirsin.
player_infosınıfına gerekli verileri ekleyerek işe başla ve player_info.verse dosyasındakiMakePlayerInfooluşturucusunu değiştir:Verse# This tracks all persistable information for a player. player_info := class<final><persistable>: # The version of the current player info. Version:int = 0 # Latest harvest times of all candy canes. CandyCaneHarvestTimes:[]date_and_time = array{date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}, date_and_time{}} # The amount of gold the player has.SetGiftOpeningTimeveGetGiftOpeningTimefonksiyonlarını doldur:Verse# Sets the gift opening time for the player. SetGiftOpeningTime<public>(Player:player, GiftOpeningTime:date_and_time)<decides><transacts>:void= CheckPlayerInfoForPlayer[Player] SourceInfo := PlayerInfoMap[Player] set PlayerInfoMap[Player] = player_info: MakePlayerInfo<constructor>(SourceInfo) GiftOpeningTime := GiftOpeningTime # Gets the gift opening time for the player.Dikkatini daily_gift.verse dosyasındaki
daily_giftsınıfına ver. Öncelikle, hediyeyi açarken geçerli zamanın depolanmasını doldur:Verse# When the gift is opened (harvested), give the selected player gold. OnHarvesting(Agent:agent):void= # Hide gift. set Opened = true PropManipulator.HideProps() # Show effect. spawn: ShowGiftEffect()IsDateRolledOverfonksiyonunu uygula:Verse# Succeeds if the current date is different from the opening time. IsDateRolledOver()<decides><transacts>:void= # Get the current date. Now := RealTime.GetDateAndTime() SelectedPlayer := MaybeSelectedPlayer? GiftOpeningTime := GetGiftOpeningTime[SelectedPlayer] Now.Years <> GiftOpeningTime.Years or Now.Months <> GiftOpeningTime.Months or Now.Days <> GiftOpeningTime.Days
Fabrika Yöneticisi Cihazı
Verse ile oluşturulan fabrika yöneticisi cihazı, fabrikayı başlatır ve çalıştırır. Oyuncu oyunda değilken kaç ürün yapıldığının hesaplanmasını üstlenir.
Bu hesaplama, fabrika depolama alanının birden fazla fabrika bandı arasında paylaşılmasından dolayı karmaşık olabilir. Daha basit bir kurulumda, son üretimin üzerinden ne kadar zaman geçtiğini hesaplayıp bunu üretim hızına bölerek yapılan ürün sayısını hesaplayabilirsin.