UO-Dev Arama


scriptingte array kullanımı hakkında geniş bir arşiv

Yazar: Mfusion
Tarih: 17-05-2010 12:45


Paylaş : Paylaş
Karakter Boyut :


Merhaba arkadaşlar. Array kodunu çoğumuz kullanıyoruz. Ne işe yaradığını kısaca hatırlatayım.

TAG.DENEME yazi1,yazi2,yazi3
Buradaki virgül(,) ile ayrılmış değerlerin sırasına göre çekeriz ve işlemlerimizi yaparız.

Yazdığım bir kodda bunun yetersiz olduğunu farkettim ve detaylı bir array kütüphanesi hazırladım. Sizlerle paylaşıyorum.
Kod henüz çok yenidir. Hatalarını ve iyi kötü yorumlarınızı paylaşırsanız sevinirim.

explode ve strregex kullanımlarınızı pekiştirebilirsiniz

Kod:
[FUNCTION ARRAY]
LOCAL.text <EXPLODE {},<args>>
LOCAL.id <result 3,<local.text>>
LOCAL.type <result 4,<local.text>>
LOCAL.argv <eval <argv> -1>

IF STRREGEX(^self+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     LOCAL.return <EXPLODE =,<LOCAL.return>>
     LOCAL.return <result 2,<LOCAL.return>>

ELSEIF STRREGEX(^value+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     LOCAL.return <EXPLODE =,<LOCAL.return>>
     LOCAL.return <result 3,<LOCAL.return>>
     LOCAL.return <STREAT <EXPLODE .,<LOCAL.return>>>

ELSEIF STRREGEX(^loop+$,<LOCAL.type>)
     FOR <eval <LOCAL.id> + 4> <eval <LOCAL.argv> + 4>
          LOCAL.return .= ,<result <LOCAL._for>,<LOCAL.text>>
     ENDFOR
     LOCAL.return <STREAT <STREAT <EXPLODE .,<LOCAL.return>>>>

ELSEIF STRREGEX(^back+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     FOR <eval <LOCAL.id> + 3> 5
          LOCAL.return .= ,<result <LOCAL._for>,<LOCAL.text>>
     ENDFOR
     LOCAL.return <STREAT <EXPLODE .,<LOCAL.return>>>

ELSEIF STRREGEX(^[0-9]+$,<LOCAL.type>)
     LOCAL.return <result <eval <LOCAL.id> + 4>,<LOCAL.text>>
     LOCAL.return <EXPLODE =,<LOCAL.return>>
     LOCAL.return <result 3,<LOCAL.return>>
     LOCAL.return <EXPLODE .,<LOCAL.return>>
     LOCAL.return <result <eval <LOCAL.type> + 1>,<LOCAL.return>>

ELSEIF STRREGEX(^[a-z0-9]+$,<LOCAL.type>)
     LOCAL.to <STREAT <EXPLODE to,<LOCAL.type>>>
     FOR <eval <LOCAL.id> + 4> <eval <LOCAL.to> + 4>
          LOCAL.return .= ,<result <LOCAL._for>,<LOCAL.text>>
     ENDFOR
     LOCAL.return <STREAT <STREAT <EXPLODE .,<LOCAL.return>>>>

ENDIF
IF STRREGEX(^[a-z0-9]+$,<LOCAL.return>)
     RETURN <dLOCAL.return>
ENDIF
RETURN <LOCAL.return>

[FUNCTION result]
RETURN <argv[<argv[0]>]>


Kod karmaşık gelebilir fakat kullanımı bir o kadar basittir. Birden fazla örneklerle açıklayayım.
.dene fonksiyonuyla denemelerinizi hızlandıralım.

6 Çeşit kullanım mevcuttur. Bunlar; SELF, VALUE, VALUE X, TO X, LOOP, BACK

#1 SELF


TAG.deneme selam,merhaba,hello,hi,hola
Buradaki değerlerden herhangi bir tanesini alalım. Örneğin 1. olan "selam"

Kod:
[FUNCTION dene]
TAG.deneme selam,merhaba,hello,hi,hola
say <array {1,self}<TAG.deneme>>

ÇIKTISI > selam
Aynı şekilde diğer değerleride {değer,self} şekilde alabiliyorsunuz. {2,self} {3,self}...

#2 VALUE


TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
Burada selam= değerine ait olan tüm değerleri (sizede selam,naber) alalım.

Kod:
[FUNCTION dene]
TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
say <array {1,value}<TAG.deneme>>

ÇIKTISI > sizede selam,naber
Aynı şekilde diğer değerlerin alt değerlerinide {değer,value} şekilde alabiliyorsunuz.

#3 VALUE X


TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
Burada selam= değerine ait olan istediğimiz değeri alalım.

selam 1. sırada o yüzden ilk değerimiz yine 1
sizede selam selam= a ait olan 1. sıradaki değer.
naber selam= a ait olan 2. sıradaki değer.

Kod:
[FUNCTION dene]
TAG.deneme selam=sizede selam.naber,merhaba=sizede merhaba
say <array {1,1}<TAG.deneme>>

ÇIKTISI > sizede selam

Farklı örnek
Kod:
[FUNCTION dene]
TAG.deneme selam=1.2.3.4.laylay,merhaba=sizede merhaba.90.60.88
say <array {1,1}<TAG.deneme>>

ÇIKTISI > 1

{1,5}
ÇIKTISI > laylay

{2,1}
ÇIKTISI > sizede merhaba

{2,2}
ÇIKTISI > 90

{2,4}
ÇIKTISI > 88

TAG.deneme selam=1.2.3.4.laylay,merhaba=sizede merhaba.90.60.88
Bu değerde selam,2 veya merhaba,3 değilde sadece asıl değeri almak isterseniz SELF devreye giriyor.
{1,self}
ÇIKTISI > selam

{2,self}
ÇIKTISI > merhaba

Yani alt değerlerini göstermiyor.

VALUE değerini toparlamak gerekirse;
KATEGORI BIR=alt kategori bir.alt kategori iki.alt kategori uc,KATEGORU IKI=alt kategori bir.alt kategori iki

Seçtiğiniz kategorinin tüm alt kategorileri için {KATEGORI ID,value}
Seçtiğiniz kategorinin, seçtiğiniz alt kategorisi için {KATEGORI ID,ALT KATEGORI ID}
Sadece kategori için {KATEGORI ID,self}

VALUE kullanırken dikkat edilmesi gereken kısım, selam= yani kategoriden sonra gelen her kelimeyi yani alt kategorileri nokta(.) ile ayırmaktır.
örnek: x=bu bir deneme yazisidir.deneme 1.2.3


#4 LOOP


TAG.deneme 1,2,3,4,5,6,7,8,9
Burada örneğin 4 ve sonraki değerleri almak istiyoruz.

Kod:
[FUNCTION dene]
TAG.deneme 1,2,3,4,5,6,7,8,9
say <array {4,loop}<TAG.deneme>>

ÇIKTISI > 4,5,6,7,8,9
Yani belirli bir değerden sonra bir döngü yapıyoruz.

#5 BACK


TAG.deneme 1,2,3,4,5,6,7,8,9
Burada örneğin 4 ve önceki değerleri almak istiyoruz.

Kod:
[FUNCTION dene]
TAG.deneme 1,2,3,4,5,6,7,8,9
say <array {4,back}<TAG.deneme>>

ÇIKTISI > 4,3,2,1
LOOP fonksiyonun aksidir. Geriye doğru sayar.

#6 TO X


En sevdiğim fonksiyondur. Sadece bunun için başladım diyebilirim (:
TAG.deneme 1,2,3,4,5,6,7,8,9
Burada örneğin 2 den 8 e kadar olan değerleri almak istiyoruz.

Kod:
[FUNCTION dene]
TAG.deneme 1,2,3,4,5,6,7,8,9
say <array {2,to8}<TAG.deneme>>

ÇIKTISI > 2,3,4,5,6,7,8

Dikkat edilmesi gereken husus, to X değerinin, ilk değerden büyük olmasıdır. Yani {5,to3} hatalıdır. Doğrusu {2,to4} olmalıdır.

Farklı örnek
Kod:
[FUNCTION dene]
TAG.deneme selam,hello,hi,hola,merhaba,uo,dev,array,mfusion
say <array {2,to8}<TAG.deneme>>

ÇIKTISI > hello,hi,hola,merhaba,uo,dev,array
Yani hello dan array a kadar olan kısmı gösterir.

LOOP,BACK, TO X fonksiyonu, sadece sayılar için geçerli değildir. Örnekleri kavramanız bakımından sayı ile belirttim.

Son bir karışık örnek.
TAG.deneme kategori=alt 1.alt 2,developer,7,6,merhaba,cat=selam.uo
{1,value} > alt 1,alt 2
{1,2} > alt 2

{2,self} > developer
{2,1} > 0 2 yani developer bir kategori olmadığı için çıktısı 0
{2,value} > 0 2 yani developer bir kategori olmadığı için çıktısı 0

{3,self} > 7
{4,self} > 6

{6,self} > cat
{6,1} > selam

{3,loop} > 2,2,merhaba,cat=selam,merhaba
{4,back} > 2,2,merhaba,selam,kategori=alt 1,alt 2

{3,to5} > 2,2,merhaba

Saygılar. Umarım işinize yarar.



Yorumlar

1.   Gönderen Clad   13-09-2010 19:21    

Array 'ı hiç kafam almadı yada normal bir zamanım da okumadım sanırım ondan da olabilir ama güzel gözüküyor birçok yerde kullanabiliriz...

2.   Gönderen xwerswoodx   01-02-2012 19:26    

Gereksiz, daha ufak kullanımlarla hızlı işlem yaptırmak varken array'ı tercih etmezdim

Oylamalar

Oylama :
Üyelerin oylama ortalaması (10 dışında) : 1.00   
Oylar: 1 den itibaren 01-02-2012 19:26

Benzer Sayfalar

SayfalarYorumlarGönderenTarih
Array Kullanımı0TheRaskol29-07-2009

Keywords:

ultima online, RunUO, ultima online download, sphere scripting, role play, uo grafik, second age ultima, uo loop, macroman, pvp server, server kurulumu, sphere, multool, ml mulls, 56b 55r 55i, htmlgumps, client 4x, client edit, sphere release, osi, rp server, sunucular, ghost mouse, inside uo, kingdom reborn, stygian abyss, uo nasıl oynanır, mondain's legacy, age of shadows, world build, grandmaster, ultima online pvp, player dosyaları, ultima online indir, frp game, RunUO 1.0.0, razor, uo rice, hue editör, skill tools, ultima online patch, axis, world build, verdata, verdata patcher, map editör, gump editör, mul patcher, aos mulls, scriptler, anim edit, anim publish, hues mul, hosting vps, event dialog, account sistemi, skill gain, static yapımı,