Anasayfa
UO Sunucular
Forumlar
Profilim
UO-Developer.COM
Timer Event Kullanımı

Bu kesinlikle senaryolarda, panolarda ve başka yerlerde en çok kafa karışıklığına neden olan olaydır. İşte @Timer event hakkında hatırlamanız gereken bazı şeyler:

1. Bir ITEM (bir karakterin değil) TIMER özelliği sıfıra ulaştığında tetiklenir.

2. TIMER özelliği yaklaşık olarak her saniyede bir azaltılır. Çok sayıda öğeniz varsa, bir saniyeden daha fazla veya daha az olabilir, bu da daha sonra göreceğimiz bazı sorunlara yol açar.

3. Her zaman bir öğenin bozulmasıyla bağlantılı değildir, ancak bir @Timer olayının düzgün çalışması için öğenin attr_decay ayarlanmış olması gerekir.

4. Bir @Timer olayında SRC yoktur.

5. TRYSRC kullanıyorsanız bir @Timer olayında bir SRC vardır.

İşte bir @Timer olayının kullanımına bir örnek:

Script dosyasının başlangıcı şu anda sizin için hiçbir soruna neden olmamalıdır. Öğe oluşturulduğunda zamanlayıcıyı 1 olarak ayarladığımıza dikkat edin. Bir saniye sonra @Timer olayı tetiklenir.

@Timer olayında, öğenin MORE özelliğinin geçerli değerini söylemesini sağlarız. Ayrıca TIMER tekrar 1e ayarlar, yani bir saniye sonra @Timer tekrar yürütülür. Bu, TIMER manuel olarak -1'e ayarlayana veya öğeyi yok edene kadar devam eder.

İşte çalışmayacak bir kod örneği:
[ITEMDEF i_timer_test]
ID=01828
NAME=Timer Test item

ON=@Create
TIMER = 1
MORE = 0

ON=@Timer
TIMER = 1 // bir dahaki sefere sıfırla
SRC.SAY The current MORE value is <MORE>.
MORE = <MORE>+1
RETURN 1 // If you return 0, the item WILL decay!******
Bu aceişt dosyasıyla ilgili bir hata alacaksınız. Bir @Timer script dosyasında SRC nesnesi yoktur. Asla kullanmayın.

Peki zamanlayıcılarla ne yapabilirsiniz? Pekala, herhangi bir sayıda şey yapabilirsiniz.

İşte @Timer kullanan kullanışlı bir araç örneği:
[ITEMDEF i_cool_stick]
ID=i_staff_black
NAME=cool stick

ON=@DClick
IF !(<SRC.TAG0.COOLSTICK>)
SRC.SYSMESSAGE You have used the cool stick. You must wait ten seconds before using it again.
TIMER = 10
SRC.TAG.COOLSTICK = 1
LINK = <SRC.UID>
ELSE
SRC.SYSMESSAGE You cannot use the cool stick right now!
ENDIF
RETURN 1

ON=@Timer
// Uh oh! Şimdi ne yapacağız? Oyuncuya atıfta bulunmanın bir yolu yok!
// But look! We set the LINK of the item to the player's uid.****( Ama bakın! Öğenin LINK'ini oyuncunun uid'sine ayarladık.)
LINK.TAG.COOLSTICK = 0
TIMER = -1
RETURN 1
Bu script dosyası ne işe yarıyor? İlk kez kullandıktan sonra 10 saniye kullanmanıza izin vermeyen havalı bir black stafftır. Bu haliyle nispeten işe yaramaz bir eşyadır, ancak black staffın çok güçlü bir büyü efekti veya manayı geri yüklemek gibi bir şey yapmasını ve ardından kullanımını bir süreliğine kısıtlamasını isteyebilirsiniz. Bunu yapmanın başka bir yolunu, anlaşılması daha kolay olan başka bir bölümde göreceğiz. Ayrıca @Timer kullanır.
Öyleyse senaryoyu parçalayalım. Orta bölümün tamamının biraz yorum yapması gerekiyor, bu yüzden buraya kesip yapıştıracağım ve yorum ekleyeceğim. Satır satır almaktan daha kolay.
ON=@DClick
// Oyuncu çubuğu ilk kez kullandığında TAG.COOLSTICK değerini 1 olarak ayarlıyoruz.
// Eğer o 0'ı oraya koymazsanız, bazen konsol hataları oluşacaktır ("Undefined symbol ”)
// Burada TAG.COOLSTICK'in ayarlanıp ayarlanmadığını test ediyoruz. Unutmayın, bir IF deyimi yalnızca doğru veya yanlış olmalıdır.
// Şuna sahip olduğumuza dikkat edin: !(0<SRC.TAG.COOLSTICK>). Bir IF deyiminde, ! değil anlamına gelir, bu yüzden test ediyoruz
// Gerçekte ne olduğunun tersi. Yani yanlışsa doğrudur ya da tam tersi.
IF !(<SRC.TAG0.COOLSTICK>)
SRC.SYSMESSAGE You have used the cool stick. You must wait ten seconds before using it again.
// 10 saniyelik bir duraklama için ZAMANLAYICI'yı 10'a ayarlayın.
TIMER = 10
SRC.TAG.COOLSTICK=1
// İtem üzerindeki LINK'i SRC'nin UID'sine ayarlayın.
LINK = <SRC.UID>
ELSE // SRC.TAG.COOLSTICK sıfır değildi
SRC.SYSMESSAGE You cannot use the cool stick right now!
ENDIF
RETURN 1
Orada belki de anlamamış olabileceğiniz ilginç bir şey yaptım. Bir kod bloğunun içeriğini girintilemek her zaman iyi bir komut dosyası uygulamasıdır, özellikle de neler olup bittiğini takip etmenin zor olabileceği karmaşık komut dosyalarında. Şöyle ki:
IF <blah>
. . . indent these lines
ELSE
. . . indent these lines
. . . IF <blah>
. . . . . . indent these lines further
. . . ENDIF
ENDIF 
Okumayı çok daha kolay hale getirir. Ayrıca, aynı sayıda IF ve ENDIF'e sahip olup olmadığınızı görmeyi kolaylaştırır, bu da her zaman yararlıdır. Bazı metin editörleri girintiyi sizin için otomatik olarak yapacaktır.

Şimdi, bu öğedeki @Timer komut dosyası, oynatıcıya LINK nesnesi aracılığıyla erişir. Oyuncunun TAG'ını sıfırlar. COOLSTICK'i sıfıra indirin. Oyuncu bir dahaki sefere black staff a çift tıkladığında, bunu tanıyacak ve oyuncu black staffı tekrar kullanacaktır.

UO-Dev SPONSOR

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?

UO-Dev SPONSOR

Henüz yorum yapılmamış. Yorum yazabilmek için giriş yapmanız gerekir.

Üyelerin oylama ortalaması (10 dışında) :

Henüz Oylanmamış

Oylar: 0

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?