Anasayfa
UO Sunucular
Forumlar
Profilim
UO-Developer.COM
Yaygın Hatalar

Bu eğitim, Sphere 56b için SphereServer forumlarında Maximus'un "Yaygın Hataların Açıklaması" eğitiminin gözden geçirilmiş bir kopyasıdır.

İdeal olarak, aşağıdaki bilgiler, farklı iş parçacıklarında birçok kez sorulmuş ve yanıtlanmış olan yardım isteklerini azaltmalıdır.

Bu eğitim çok basit ve okunması kolaydır ve tüm yeni başlayan komut yazarları için bir zorunluluktur. Hadi başlayalım!

TARGET FUNCTIONS

Muhtemelen Sphere ile geçirdiğim zamandan beri gördüğüm en yaygın hata, hedeflerin doğrudan işlevlerden çağrılmasıdır, örneğin:
[FUNCTION target_test]
TARGET Select target

ON=@TargOn_Item
    // kodunuzu buraya girin
Bu çok iyi çalışmayacak 56b, bellek hedeflerine olan ihtiyacı ortadan kaldıran yeni bir hedefleme işlevi tanıttı - TARGETF ve 3 farklı varyasyonu:

TARGETF
Karakterleri ve statik olmayan öğeleri hedeflemenize olanak tanır

TARGETFG
Yukarıdakiyle aynı şekilde, yalnızca bu, zemini hedeflemenize izin verir

TARGETFW
targst karakterleri ve statik olmayan öğeler ve ayrıca cezai işlemlere karşı uyarır

Syntax:

TARGETF[GW] function_to_be_called

Dikkat edilmesi gereken bazı noktalar:

• Çağrılan fonksiyonda ARGO, hedeflenen nesnedir
• Bağımsız değişkenleri işlev aracılığıyla geçebilirsiniz (ör TARGETF F_WHATEVER <UID>, <UID>bağımsız değişkendir) ve bu bağımsız değişkene çağrılan işlevde başvurulabilir
• Yer hedefleniyorsa, bu koordinatlar TARPP olacaktır

Örneğin:
[FUNCTION target_fun]
SYSMESSAGE Select target. // hedefte görüntülenen mesaj
TARGETF f_target_fun // calls the target and the function*****

[FUNCTION f_target_fun]
ARGO.SAY MY NAME IS <ARGO.NAME> AND I  AM A CLOWN!!
IF (<ARGO.ISITEM>)
    ARGO.SAY I am an item too!
ENDIF   
DİZİLERİ VE ETİKETLERİ KARŞILAŞTIRMA

Sphere, iki bilgi parçasını karşılaştırmak için birçok farklı yöntem kullanır. Pek çok kullanıcının fark etmediği şey, TAG'ler, VAR'lar ve LOCAL'ler gibi depolama değişkenlerinin bilgileri bir sayı veya kelime yerine bir değermiş gibi tutmasıdır.

Örneğin, bir oyuncuda bir TAG olduğunu varsayalım, TAG. TEST, bir kelimeyi tutan ve bu kelimenin "mavi" olup olmadığını kontrol etmek için bir IF ifadesi kullanmak istiyorsunuz. Sphere'da yeni olan birçok kullanıcı şöyle bir şey yapmayı deneyebilir:
IF (<TAG.TEST> == blue)
Sphere, etiketi bir dize yerine bir değerle karşılaştırmak istiyor ve bu nedenle Sphere "mavi"yi sayısal bir değere çeviremediği için Sphere konsolunda bir hata gösterilecek.

Dizeleri karşılaştırmak için en yaygın dize karşılaştırma anahtar kelimeleri STRCMPI ve STRMATCH'tir.

Yukarıdaki karşılaştırma için uygun sözdizimi şöyle olabilir:
IF !STRCMPI("<VARIABLE>", "STRING")
    IF !STRCMPI("<TAG.TEST>", "blue")
VEYA
IF STRMATCH("STRING", "<VARIABLE>")
    IF STRMATCH("blue", "<TAG.TEST>")
Bunun nedeni (basitçe söylemek gerekirse, "yapmaz" anlamına gelir), STRCMPI'nin iki dizeyi karşılaştırması ve ilk dize ikinciden 'küçük' ise -1, ilk dize ikinciden 'büyük' ise 1 veya iki dize eşitse 0 döndürmesidir. Bu nedenle, bu fonksiyon için, iki dizenin eşit olup olmadığını görmek için YANLIŞ (0) döndürüp döndürmediğini kontrol etmemiz gerekir.

= VE ==

Tek bir eşittir işareti ile arka arkaya iki tane arasındaki fark konusunda birçok senaryo yazarının neden kafasının karıştığını anlayabiliyorum. Kısacası, tek eşittir işareti bir atama operatörüdür, çift eşittir işareti ise eşittir işaretidir.

Tek işaret yalnızca değişkenleri, yerelleri, etiketleri vb. "atarken" kullanılmalıdır... koşullu (örneğin IF, WHILE) ifadelerde çift eşittir işareti kullanılmalıdır:
LOCAL.IMNAKED = 1 // doğru
LOCAL.IMNAKED == 1 // yanlış

IF (<LOCAL.IMNAKED> == 1) // doğru
    IF (<LOCAL.IMNAKED> = 1) // yanlış
[/gw]

UO-Dev SPONSOR

Paylaş

XFacebook

Önceki / Sonraki

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

Önceki / Sonraki

Faydalı mı?

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