Evet şimdi size for döngüsünü anlatacağım. Aslında çok kolay bir şey, mantığını anlamanız yeterli...
Şimdi for un yaptığı iş, sizin belirleyeceğiniz sayılar arasındaki sayıları sırayla saymaktır. Çok basit ama son derece kullanışlı bir koddur.
[function yeah]
for x 1 10
sysmessage Asd <eval <local.x>>
endfor
Şimdi yukarıda ne yaptık? .yeah yazdığınızda 10 kere sysmessage yazacak ve her birinde sondaki sayı bir artacak.. Asd 1, Asd 2, Asd 3..., Asd 10 şeklinde.
-------------
[itemdef i_yeahgate]
id i_moongate_black
name Test moongatei
on=@create
for x 1 50
tag.giren<eval <local.x>> 0
endfor
on=@dclick
if !(<tag.giren50> == 0)
src.sysmessage Giremezsin
return 1
endif
for x 1 50
if (<tag.giren<eval <local.x>>> == 0)
tag.giren<eval <local.x>> <src.uid>
return 1
endif
endfor
Evet şimdi üstte bir gate var. On=@create kısmında yaptırdığımız iş 1 den 50 ye kadar ( 1 ve 50 dahil ) tag verdirtmek. Taglar tag.giren1, tag.giren2, ...., tag.giren50 şeklinde oluyor ve bunların hepsini 0 yapıyor.
Gelelim on=@dclick'e. Yapılan iş nedir? İlk if kontrolunun for la bi alakası yok, diyor ki eğer tag.giren50 0 değilse giremezsin, bir başka değişle 50 kişi girdiyse giremesin. Onu geçin ve for un olduğu kısıma gelin.
"For x 1 50", diyor ki 1 den 50 ye kadar olan sayıları saymaya başla,
"if (<tag.giren<eval <local.x>>> == 0)", burda da diyor ki 1 den 50 ye kadar tag.giren1, tag.giren2... ları sırayla 50 ye kadar kontrol et. Eğer sayarken bunlardan birinin sıfır olduğunu görürsen, mesela tag.giren1 ve 2 ve 3 ve 4 sıfır olmasın, ama 5 sıfır olsun;
"tag.giren<eval <local.x>> <src.uid>", o tag.giren5 deki sıfır yerine senin uidini yazdırır.
"return 1", en can alıcı kısımlardan biri. Eğer bunu koymazsanız 50 ye kadar olan taglara senin uidini yazar. Yani tag.giren5 sıfır ise, tag.giren6, tag.giren7,... 50 ye kadar senin uidini yazar ve 50 sıfır olmadığında başka birisi geçemeyeceğinden kimse geçemez bu gateden. Ama bu return 1 i koyarsanız, tag.giren5 in sıfır olduğunu görünce tag.giren5 e sizin uidinizi yazar ve döngüyü durdurur, 6 ya falan uidinizi yazmaz.
"endif" if i kapat.
"endfor" for u kapat.
Ek bilgi:
1.for x 1 5 yerine sadece for 1 5 yazabilirsiniz, eğer böyle yazarsanız <eval <local.x>> yerine <eval <local._for>> yazmanız gerekir.
2.<eval <local.x>> yerine <dlocal.x> kullanabilirsiniz, daha kısa ve yazması kolay. Ancak sysmessagelerde hex değeri olarak yazacağından sysmessageler yazarken <eval <local.x>> veya <eval <dlocal.x>> kullanmanız gerekir.


