Neran
03ofkosucusu
Array türkçesi diziliş anlamına gelmekte olan bir kelimedir. Array mantığı biraz karmaşık olmakla beraber iyi anlaşılırsa birçok sistemde işinizi oldukça kolaylaştırıcaktır. En basitinden pvp türü sunucuların en çok kullandığı Stone scriptini array mantığı ile yazalım. Normalde her stone için ayrı ayrı dialoglar ve ayrı ayrı stonelar yazılır. Biz şu şekilde başlıyoruz.
Kod:
[defname moongate_points]
zone_1 = i_katana_Vanq 10000,i_Spear_vanq 10000,i_Scimitar_vanq 10000,i_Bow_vanq 10000,i_Crossbow_vanq 10000 // itemin id , itemin fiyatı şeklinde ekliyoruz.
zone_2 = i_potion_healgreat 0,i_potion_curegreat 0,i_bandage 0,i_potion_refreshtotal 0,i_potion_poisondeadly 0
stonenizin dclick kısmını aşağıdaki gibi ayarlarsanız tek stone scripti ve menüsüyle tüm itemleri ayarlayabilirsiniz.
ON=@dclick
if (<tag0.potionstone>=1)
src.tag0.zonenum 2
elif (<tag0.weaponstone>=1)
src.tag0.zonenum 1
-
-
-
endif
[DIALOG d_itemstone]
0, 0
PAGE 0
resizepic 262 64 5120 230 320
resizepic 268 69 3000 220 310
dtext 289 83 32 <serv.servname> Item Alma Taşı
for 0 <eval <f_array <def.zones>>-1>
dhtmlgump 315 <eval 120+<hval <dlocal._for>*30>> 250 25 0 0 <def.l1><def.r1><def.bfont_white> <serv.itemdef.<f_array_item <def.zone_<src.dtag0.zonenum>>, <eval <dlocal._for> + 1>>.name>
button 296 <eval 120+<hval <dlocal._for>*30>> 2714 2715 1 0 <dlocal._for>
endfor
[dialog d_itemstone button]
ON=0,999
if (<src.gold> >= <streat <f_array_item <def.zone_<src.dtag0.zonenum>>, <eval <dargn> + 1>>>)
serv.b @,,1 <serv.itemdef.<f_array_item <def.zone_<src.dtag0.zonenum>>, <eval <dargn> + 1>>.name>
serv.newitem <strarg <f_array_item <def.zone_<src.dtag0.zonenum>>>,1,<src.uid>
src.gold -=<streat <f_array_item <def.zone_<src.dtag0.zonenum>>, <eval <dargn> + 1>>
else
src.sys_error <streat <f_array_item <def.zone_<src.dtag0.zonenum>>, <eval <dargn> + 1>>> altına ihtiyacınız var.
return 1
endif
[FUNCTION f_array]
return <dargv> // burda bir nevi virgülleri sayıyoruz.
[FUNCTION f_array_item]
local.temp = <argv[<eval <argv> - 1>]> -1 // forla gelen fazlalığı aldk.
return <argv[<dlocal.temp>]>
Script başta karmaşık gözüksede argv fonksyonunu biliyorsanız birkaç kez üstünden geçince o kadar karmaşık gelmemeye başlıyor.