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 girinBu ç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ŞTIRMASphere, 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]
