- Bu döküman Ultima-Strike.com adresinde kullanılması amacı ile tarafımca (Slothere) hazırlanmıştır. Genel olarak SphereServer'ın orjinal kaynağından çeviri yapılmış olsa da kendi örnekleme ve anlatımlarım ile daha anlaşılabilir
olduğunu düşünüyorum. Eğer eksik bir kısım veya anlayamadığınız bir bölüm olursa bana özel mesaj atmanız yeterli.
Temel Kullanım
İlk olarak sphere üzerinde kelime ayırma yöntemleri ile başlayalım. Sphere'da kullanılan en temel kelime ayıracı olarak virgülü (,) gösterebiliriz. Bir çok fonksiyon üzerinde virgül kullanarak kelimelerinizi rahatça ayırabilir, virgül ile ayırdığınız bölümleri rahatça bütünden ayırabilirsiniz.
Örnek;
[FUNCTION f_karakter]
SYSMESSAGE Argumanlar: <ARGV>
SYSMESSAGE 1. Arguman: <ARGV[0]>
SYSMESSAGE 2. Arguman: <ARGV[1]>
SYSMESSAGE 3. Arguman: <ARGV[2]>
Şimdi bu komutu "f_karakter Merhaba Ultima-Strike Üyeleri" şeklinde kullanırsak eğer sol tarafta görünen yazımız şu
şekilde olucak,
Argumanlar: 1
1. Arguman:
2. Arguman:
3. Arguman:
İstediğimiz gibi olmadı değil mi? Biz yazdığımız cümle içindeki belli bölümleri ayırıp 1. Arguman, 2. Arguman şeklinde ayırmak istiyoruz. Bu şekilde yazmasının yegâne nedeni olarak boşluk kullanmamızı söyleyebilirim. Eğer bu şekilde kullanımda boşluk kullanırsak kelimeler virgül ile ayrılmadığı için bir bütün olarak karşımıza çıkacaktır ve ARGV[x] şeklindeki ayırmalarımızda karşımıza ayrılmış bir bölüm çıkmayacaktır. Eğer biz bu cümle içindeki tüm karakterlerin şu şekilde ayrılmasını istiyorsak;
1. Arguman: Merhaba
2. Arguman: Ultima-Strike
3. Arguman: Üyeleri
bu defa ayırmak istediğimiz kelimenin arasına virgül (,) koymamız gerekli. Hatırlarsanız üstte fonksiyonu kullanırken "f_karakter Merhaba Ultima-Strike Üyeleri" şeklinde yazmıştık. Şimdi "f_karakter Merhaba, Ultima-Strike, Üyeleri" şeklinde kullanıp oluşan sonuca göz atalım. Bu şekilde kullanıldığında karşımıza gelicek sonuç şu şekilde olacaktır,
Argumanlar: 3
1. Arguman: Merhaba
2. Arguman: Ultima-Strike
3. Arguman: Üyeleri
Üstteki "Argumanlar" kısmındaki değer, yazdığımız yazıdaki ayrılmış bölümlerin sayısını bize verecektir. Üst kısımda 1 yazmasnının nedeni yazdığımız yazıyı tek bir bütün olarak görmesi idi. İkinci örnekte kelimeleri virgül ile ayırdığımız için bu sefer her bir bütün olarak ayırdığımız kelimelerin toplam sayısını görmüş olduk.
STRARG
"STRARG" komutu yazdığınız bir dizi içerisinde, ilk boşluktan önceki kelimeyi size geri döndürür.
Örnek;
[FUNCTION test]
SYSMESSAGE <STRARG Ultima Strike>
SYSMESSAGE <STRARG Merhaba arkadaşlar>
şeklindeki fonksiyonu kullandığımızda bize dönen değerler "Ultima" ve "Merhaba" olacaktır.
STREAT
"STREAT" komutu "STRARG" komutunun tam tersi şeklinde işler. "STRARG" komutunda ilk boşluktan önceki kelime size dönerken, "STREAT" komutunda ilk boşluktan sonraki kelimeler dönecektir. Üstteki örneğin aynısını kullanarak bu sefer "STREAT" komutu üzerindeki işleyişe bir göz atalım.
[FUNCTION test]
SYSMESSAGE <STREAT Ultima Strike>
SYSMESSAGE <STREAT Merhaba arkadaşlar>
Bu sefer bize dönen değerler "Strike" ve "arkadaşlar" olacaktır.
STRCMP
String karşılaştırılmalarında kullanılan bir fonksiyondur. String'ler sayısal değerler gibi (string1 = string2) şeklinde kontrol edilemezler. Diğer kontroller sadece sayısal değerlerin kontrol edilmesi için yaratılmışlardır. İki string karşılaştırılacağı zaman sadece belirli komutları kullanabilirsiniz. Bu komutlardan ilk olarak "STRCMP" komutunu ele alalım.
Mesela string1 ve string2 adında iki tane kelimemiz var ve bunların birbiri ile olan ilişkilerini kontrol etmek istiyoruz. Yapmamız gereken şey;
STRCMP(string1, string2)
şeklinde kullanmak. Burada size dönecek sonuç 3 ihtimallidir. Bu ihtimaller;
| Değer | Anlamı |
| -1 | string1, string2'den küçüktür |
| 0 | iki dizi birbirine eşittir |
| 1 | string1, string2'den büyüktür |
Burada dikkat edilmesi gereken en önemli husus dönüş değerleridir. Mesela dönen değer yanlış, yani "0" olduğunda iki değer birbirine eşit anlamındadır. Daha iyi anlaşılması açısından bir örnek verelim.
[FUNCTION test]
IF !STRCMP(<SRC.NAME>, Slothere)
SRC.SAY Benim adım Slothere.
ENDIF
Burada eğer "STRCMP(<SRC.NAME>, Slothere)" şeklinde yapsaydık iki değer birbirine eşit olduğu için dönen değer "1" olacaktı. Ancak bu komutta dönecek olan 1 değeri ilk değerin, diğer değerden büyük olduğu anlamında kullanılıyor. Bizim eşit olduğunu kontrol edebilmemiz için "0" değerini döndürmemiz lazım. O yüzden "eşitse" demek yerine ters
mantık "eşit değilse" demeliyiz. Bu şekilde dönen değerimiz "1" yerine "0" olacaktır ve istediğimiz sonuca kolayca ulaşabileceğiz.
Son olarak bu komuttaki belki de en önemli kısmı açıklamak istiyorum. "STRCMP" komutunu kullandığınızda karşılaştırılan değerler büyük küçük harf duyarlı olarak kontrol edilirler. Mesela sizin isminiz Slothere ve siz kontrol ederken bunu slothere, SLothere, sLothere gibi büyük küçük harf eşit şekilde olmadan girdiniz. Fonksiyon her ne kadar değerler doğru dahi olsa büyük küçük harf hassasiyetinden dolayı sonucu yanlış olarak nitelendirecektir
STRCMPI
Aslında bu komutu detaylıca anlatmaya gerek yok. İşleyişi tamamen STRCMP ile aynıdır. Ancak STRCMP ile STRCMPI arasındaki tek fark, STRCMP kontrollerde büyük küçük harfe duyarlıdır. STRCMPI'de ise bu şekilde bir hassasiyet mevcut değildir.
STRLEN
STRLEN komutu, yazdığınız parçadaki karakter sayısını size geri döndürür. Örneklemek gerekirse;
[FUNCTION test]
SYSMESSAGE <EVAL STRLEN(<ARGS>)>
Mesela "Ultima-Strike Slothere" yazdığımızda bize dönecek değer 22 olacaktır. Boşluklar da karakter sayısına eklenir.
STRREVERSE
STRREVERSE komutu girdiğiniz kelimedeki harfleri tersine çevirir. Örnek olarak;
SYSMESSAGE <STRREVERSE Total Refresh Potion>
yapıldığında dönen değer "noitoP hserfeR latoT" olacaktır.
STRSUB
STRSUB girilen değerler içerisinde belli bir bölümü veya bir karakteri almaya yarar. Örnek olarak;
[FUNCTION test]
SYSMESSAGE <STRSUB 0 3 Merhaba Ultima-Strike>
komutunu kullandığımızda bize dönen değer "Mer" olacaktır. Bunu kendi kullanım alanınız ve hayal gücünüze göre çeşitli yerlerde kullanabilirsiniz. Daha basit bir anlatım olarak bunu; 0 3 değerlerini "0. karakterden itibaren 3 karakter al" şeklinde, 5 10 değerlerini "5. karakterden itibaren 10 karakter al" şeklinde anlatmakta mümkün.
Ayriyetten şu şekilde güzel bir kullanış şekli daha bulunmakta,
[FUNCTION test]
SYSMESSAGE <STRSUB -3 0 Merhaba Ultima-Strike>
Bunu kullandığınızda size dönen değer Strike içindeki "ike" olacaktır. -3 değerinden aldırdığınızda sondan itibaren belirlediğiniz sayı içindeki karakteri verecektir.
STRTOLOWER
STRTOLOWER fonksiyonu girdiğiniz değerlerdeki karakterleri küçültmeye yarar. Örnek ile anlatırsak daha iyi anlayacağınızı sanıyorum.
[FUNCTION test]
SYSMESSAGE <STRTOLOWER meRHaBa uLTiMa STriKe>
Bu fonksiyonu kullandığımızda, girdiğimiz mesaj bize "merhaba ultima strike" şeklinde dönecektir. Bu şekilde kullanabileceğiniz gibi STRSUB yardımı ile belirlediğiniz aralıktaki karakterleri küçültmekte mümkün. Buna verilebilecek en büyük örnek olarak isim düzenleme sistemini göstermek mümkün.
[FUNCTION duzenle]
SRC.NAME = <STRTOUPPER <STRSUB 0 1 <SRC.NAME>>><STRTOLOWER <STRSUB 1 16 <SRC.NAME>>>
Burada yaptığımız şey 0'dan itibaren 1 karakter alıp (1. karakteri alıp) karakteri büyüttük. Daha sonra 1. karakterden itibaren 16 karakter alarak ismimizin kalanındaki tüm karakterleri ufalttık.
STRTOUPPER
Bunu da pek izah etmeye gerek yok sanırım. STRTOLOWER'ın tam tersi şeklinde işler. STRTOUPPER belirlenen kısımdaki karakterleri büyütmeye yarar. Üstte de verdiğimiz düzenleme fonksiyonunda göründüğü gibi ..
[FUNCTION test]
SYSMESSAGE <STRTOLOWER meRHaBa uLTiMa STriKe>
Bu fonksiyonu kullandığımızda bize dönen değer "MERHABA ULTIMA STRIKE" olacaktır.
STRTRIM
Bu komut üzerinden girdğimiz değerlerin başındaki ve sonundaki boşlukları siler. Örnek vermek gerekirse;
[FUNCTION test]
LOCAL.Text = " TEST 11 22 33 "
SYSMESSAGE <LOCAL.Text>
SYSMESSAGE <STRTRIM <LOCAL.TEXT>>
Bunu kullanınca dönen değer;
" TEST 11 22 33 "
"TEST 11 22 33"
Burada ilk dönen değer LOCAL.Text'te belirlediğimiz gibi baş ve sonundaki boşlukların olduğu şekildeki gibi yazacaktır. Ancak ikinci mesajda bize yazının başında ve sonundaki boşluklar göstermeyecektir.
STRMATCH
STRMATCH'de STRCMP, STRCMPI gibi string kontrol etmize yarayan bir fonksiyondur. Ancak şunu söylemek gerekir ki STRMATCH diğerlerinden daha kapsamlı ve daha detaylı bir kontrol sağlar.
[FUNCTION test]
IF STRMATCH(*lot*, <ARGS>)
SYSMESSAGE Yazınızın içerisinde lot geçiyor.
ELSE
SYSMESSAGE Yazınızın içerisinde lot geçmiyor.
ENDIF
Mesela bu komut içerisinde "Slothere" yazdık. Slothere içerisinde lot geçtiği için sorguyu doğru olarak döndürecektir. Ancak lot geçmeyen bir şey yazdığımızda dönen değer yanlış olacaktır. Bu komutta (*) karakteri dışında pek çok özel kontrol karakteri bulunmaktadır.
| Komut | Anlamı |
| * | Herhangi bir sayı veya harf eşleşmesinde |
| ? | Eşleşen herhangi bir karakter ile |
| [\*] | * yerine belirtilen karakter ile eşleşmede |
| [abcdef] | Belirtilen karakterler ile eşleşmede |
| [!abc][br][^abc] | Belirtilen herhangi bir karakter ile eşleşmediğinde |
| [A-Z][br][0-9] | A-Z veya 0-9 arası karakterler ile eşleştiğinde |
STRMATCH, STRCMP gibi büyük-küçük harf duyarlı değildir. STRMATCH kullanırken dikkat etmeniz gereken en önemli
özellik şudur. Mesela iki tane string var elimizde (string1 ve string2) bunları birbirleri ile karşılaştıracağız. Bu karşılaştırmada STRMATCH yerine STRCMP veya STRCMPI kullanmak daha performanslıdır. Çünkü STRMATCH genel olarak
belirtilen yazı içinde arama yaparken, STRCMP ve STRCMPI bütünü kontrol ettiğinden daha hızlı şekilde çalışacaktır.
(!) STRCMPI ve STRCMP içerisinde yukarıdaki tablodaki özel karakterler kullanılamaz, sadece bütünü kontol eder.
EXPLODE
EXPLODE komutu belirttiğiniz metinleri, belirttiğiniz ayraç(lar)dan itibaren virgülle ayırmanıza olanak sağlar.
kullanımı:
EXPLODE <ayraç(lar)>,<ayrılacakMetin>
örnek kullanım:
[function ayir]
goster <explode *,<args>>
[function goster]
serv.b toplam parca: <dargv>
for <dargv>
serv.b <local._for>. parca: <argv[<dlocal._for>]>
endfor
* ayraç bölümünde birden fazla belirtebilirsiniz. örnek olarak ben yukarıda * (yıldız) simgesinden itibaren ayırmasını belirttim. ancak siz bunu dilediğiniz gibi düzenleyebilirsiniz.
örnek:
<explode -+*!,<metin>
bu şekilde kullanıldığında - + ! * simgelerinden herhangi biri ile karşılaştığı an metni parçalayacaktır.



döküman güncellendi.
eline sağlık güzel döküman
Eline sağlık.