Bir arkadaşıma (buxiun) verdiğim söz ve önceden yayımladığım mysql tabanlı aile sisteminin genel olarak kullanılamaması üzerine klasik olarak işleyen ve eski clientler taban alınarak kodladığım bir aile sistemini sizlerle paylaşıyorum. Scriptin comment kısmında kullanımını detaylıca açıkladığım için tekrar açıklamama gerek yok. Sistem temel fonksiyonları ile kodlandığı için chat ve benzeri eklentiler mevcut değil. İstek olursa ekleyip yayınlayabilirim buradan. Sistemi her ne kadar lokal olarak test etmiş olsam da 3-5 kişilik bir test ile tek kişinin yapacağı test bir değildir, bu yüzden sistemi kullanmadan önce tüm fonksiyonlarını en az ikişer defa test ediniz. Çıkan bir sorun olursa (çıkacağını düşünmüyorum ama gene de garantiye almak amaçlı) buradan bildirmeniz yeterli.
[comment aile_sistemi]
yazan: Slothere
tarih: 29/07/2009
version: 056b+
-------------------------
Kullanımı:
- Sistemin kullanımda ihtiyaç duyduğu tek ve en önemli şey karakterlerin başlangıçta bir soy ismi olmamasıdır. Bunu engellemek için "f_onchar_create" altında kullanmanız amaçlı f_isim_duzenle isimli fonksiyon da size sistem ile birlikte verilmiştir.
- def.maxuye bölümünden ailenin alacağı max. üye sayısını belirleyebilirsiniz.
- sistem aile isimlerini tesciller. tekrar alınan soy ismi bir daha alınamaz.
- şu an default olarak üye alım ücreti 50.000gp olarak belirlendi. scriptte ilgili kısımlar değiştirilecek güncellenebilir.
-------------------------
[defname aile_sistemi]
maxuye 50 // ailenin alabilecegi max. üye sayısı.
// * fonksiyonlar
[function f_isim_duzenle]
local.isim = <strarg <strtoupper(<strsub 0 1 <src.name>>)><strtolower(<strsub 1 15 <src.name>>)>>
src.name <local.isim>
src.sysmessage @1153 isminiz <local.isim> olarak tekrar duzenlendi.
[function f_isim_kontrolu]
local.num = 0
for 0 <eval (strlen(<args>)) -1>
if !strmatch('[abcdefghijklmnoprstuvyz']','<strsub <dlocal._for> 1 <args>>')
local.num ++
endif
endfor
return <local.num>
[function f_soyadi_kontrolu]
for 0 <eval (<serv.accounts>) -1>
if (<serv.account.<dlocal._for>>)
for x 0 <eval (<serv.account.<dlocal._for>.chars>) -1>
local.soyad = <streat <serv.account.<dlocal._for>.char.<dlocal.x>.name>>
if !strcmpi('<local.soyad>','<args>')
local.return ++
endif
endfor
endif
endfor
return <dlocal.return>
[function f_yeniuye]
ref1 = <args>
if (<argo> == <src>)
src.sysmessage @1153 kendinizi secemezsiniz.
elif !(<argo.isplayer>) || (<argo.isgm>) || (<argo.isitem>)
src.sysmessage @1153 sadece oyunculari secebilirsiniz.
elif strcmpi('<argo.tag.soyad>','')
src.sysmessage @1153 <argo.name>, <argo.tag0.soyad> ailesine kayitli
elif (<argo.isdialogopen d_uye_kayidi>)
src.sysmessage @1153 <argo.name> baska bir aile teklifi almis.
elif (<argo.gold> < 50000)
src.sysmessage @1153 <argo.name>'in uzerinde yeterli altin bulunmuyor (50.000gp)
elif (<eval <ref1.f_uyesayisi_kontrolu>> < 1)
src.sysmessage @1153 ailenizde bos yer kalmamis.
else
trysrc <argo> sdialog d_uye_kayidi,0,<args>,<src>
src.sysmessage @1153 teklif yapildi, cevap bekleniyor.
endif
return 1
[function f_uyesayisi_kontrolu]
for <eval <def.maxuye>> 0
if !strcmpi('<tag.uye<dlocal._for>>','')
local.bos = <dlocal._for>
endif
endif
return <dlocal.bos>
// * //
// * eşyalar
[itemdef i_aile_belgesi]
id = i_deed
type = t_script
value = 52356
name = aile belgesi
weight = 2
on=@create
color = 0455
attr = attr_newbie
on=@dclick
if (<topobj> != <src>)
src.sysmessage @1153 bunu sadece uzerinizdeyken kullanabilirsiniz.
elif strcmpi('<src.tag.soyad>','')
src.sysmessage @1153 <src.tag0.soyad> ailesine kayitlisiniz.
elif (<src.isdialogopen d_aile_kurulum>)
src.sysmessage @1153 aktif islemi bitirmeden kullanamazsiniz.
else
sdialog d_aile_kurulum
endif
return 1
[dialog d_aile_kurulum]
0,0
nomove
resizepic 50 50 5054 300 150
dtext 132 75 1152 Aile Kurulum Menusu
resizepic 100 110 3000 200 22
dtextentry 110 110 170 20 1152 0 <var.blank>
button 100 150 4005 4007 1 0 1
dtext 132 150 1152 Tamam
[dialog d_aile_kurulum button]
on = 1
if strlen(<argtxt[0]>) < 3 || strlen(<argtxt[0]>) > 15
src.sysmessage @1153 soy ismi en az 3, en fazla 15 karakterden olusmalidir.
elif (<f_isim_kontrolu <argtxt[0]>> > 0)
src.sysmessage @1153 soy isminizde gecersiz karakterler bulunuyor.
elif (<f_soyadi_kontrolu <argtxt[0]>> > 0)
src.sysmessage @1153 <argtxt[0]> ailesi kayitli durumda.
else
local.isim <strarg <src.name>>
local.soyisim <strtoupper(<strsub 0 1 <argtxt[0]>>)><strtolower(<strsub 1 15 <argtxt[0]>>)>
src.name <local.isim> <local.soyisim>
src.tag.soyad <argtxt[0]>
serv.newitem i_reis_kolyesi,1,<src>
new.link <src>
new.tag.uye0 <src>
new.tag.uyeler 1
src.equip <new>
src.tag.kolye = <new>
serv.b @1153,1,1 <local.soyisim> ailesi, <local.isim> tarafindan kuruldu.
remove
endif
return 1
[itemdef i_reis_kolyesi]
id = i_necklace_gold
type = t_jewelry
value = 0
weight = 0
name = aile kolyesi
on=@create
color = 1153
attr = attr_newbie
on=@click
message @1153 [<link.tag0.soyad> Aile Reisi]
message @1153 <link.name>
return 1
on=@dclick
if (<link> == <src>) && (<topobj> == <src>)
sdialog d_aile_kontrolu,0,0
endif
[itemdef i_uye_kolyesi]
id = i_necklace_gold
type = t_jewelry
value = 0
weight = 0
name = aile kolyesi
on=@create
color = 1153
attr = attr_newbie
on=@click
message @1153 [<link.tag0.soyad> Aile Uyesi]
message @1153 <link.name>
return 1
on=@dclick
if (<link> == <src>) && (<topobj> == <src>)
ref1 = <more1>
ref1.sdialog d_uye_menusu,0,0
endif
// * //
[dialog d_uye_menusu]
0,0
src.ctag.siralama = <argv[0]>
resizepic 20 50 5054 250 300
resizepic 30 60 3000 230 280
button 240 315 015e1 015e5 1 0 1
button 210 315 015e3 015e7 1 0 2
resizepic 20 350 5054 250 70
resizepic 30 360 3000 230 50
button 65 375 4005 4007 1 0 3
dtext 100 375 1000 Aileden Ayril
dorigin 60 60
for <eval (<src.ctag0.siralama>)> <eval (<src.ctag0.siralama> + 10)>
if strcmpi('<tag.uye<dlocal._for>>','')
ref2 = <tag.uye<dlocal._for>>
dtext +0 *20 <qval (<ref2.isonline>) ? 040 : 025> <ref2.name>
endif
endfor
[dialog d_uye_menusu button]
on = 0
src.ctag0.siralama =
on = 1 2
ref1 = <uid>
if <dargn> == 1
src.ctag.siralama +=10
else
if (<src.dctag0.siralama> > 0)
src.ctag.siralama -=10
endif
endif
ref1.sdialog d_uye_menusu,0,<src.dctag0.siralama>,<src.ctag0.aile>
return 1
on = 3
ref1 = <uid>
ref1.sdialog d_cikart,3,0
return 1
[dialog d_aile_kontrolu]
0,0
nomove
src.ctag.siralama = <dargv[0]>
page 0
resizepic 20 50 5054 250 170
resizepic 30 60 3000 230 150
dhtmlgump 50 70 200 20 0 0 <link.tag0.soyad> Aile Menusu (<dtag0.uyeler>/<eval <def.maxuye>> uye)
button 65 100 4005 4007 0 2 0
dtext 105 100 1000 Uyeleri Yonet
button 65 120 4005 4006 1 0 902
dtext 105 120 1000 Yeni Uye Al
button 65 140 4005 4006 1 0 904
dtext 105 140 1000 Aileyi Dagit
page 2
resizepic 20 220 5054 250 300
resizepic 30 230 3000 230 280
button 240 490 015e1 015e5 1 0 900
button 210 490 015e3 015e7 1 0 901
dorigin 100 220
for <eval (<src.ctag0.siralama>)> <eval (<src.ctag0.siralama> + 10)>
if strcmpi('<tag.uye<dlocal._for>>','')
ref1 = <tag.uye<dlocal._for>>
dtext +0 *20 <qval (<ref1.isonline>) ? 040 : 025> <ref1.name>
button -35 *0 0FA2 0FA4 1 0 <eval <local._for> + 1>
endif
endfor
[dialog d_aile_kontrolu button]
on = 0
src.ctag.siralama =
on = 1 899
ref1 = <uid>
if (<tag.uye<eval <argn> -1>> == <src>)
src.sysmessage @1153 kendi kendinizi aileden cikartamazsiniz.
else
ref1.sdialog d_cikart,1,<eval <argn> -1>
endif
return 1
on = 900 901
ref1 = <uid>
if <dargn> == 900
src.ctag.siralama +=10
else
if (<src.dctag0.siralama> > 0)
src.ctag.siralama -=10
endif
endif
ref1.sdialog d_aile_kontrolu,2,<src.dctag0.siralama>
return 1
on = 902
if !((<src.flags> & statf_dead) || (<src.flags> & statf_freeze))
src.targetf f_yeniuye <uid>
endif
return 1
on = 904
ref1 = <uid>
ref1.sdialog d_cikart,2,0
return 1
[dialog d_cikart]
0,0
nomove
resizepic 50 50 5054 300 150
resizepic 60 60 3000 280 130
page 1
src.ctag.uye = <tag.uye<dargv[0]>>
src.ctag.numara = <dargv[0]>
ref1 = <src.ctag0.uye>
dhtmlgump 95 70 230 50 0 0 <ref1.name> isimli aile uyesini aileden cikartmak istediginize emin misiniz?
button 90 150 4005 4007 1 0 1
dtext 125 150 1000 Evet
page 2
dhtmlgump 95 70 230 50 0 0 <src.tag0.soyad> isimli ailenizi dagitmak istediginize emin misiniz?
button 90 150 4005 4007 1 0 2
dtext 125 150 1000 Evet
page 3
dhtmlgump 95 70 230 50 0 0 <link.tag0.soyad> isimli ailenizden ayrilmak istediğinize emin misiniz?
button 90 150 4005 4007 1 0 3
dtext 125 150 1000 Evet
[dialog d_cikart button]
on = 0
src.ctag.uye =
on = 1
ref1 = <src.ctag0.uye>
ref1.tag.soyad =
ref1.name <strarg <ref1.name>>
try uid.<ref1.tag0.kolye>.remove
ref1.tag.kolye =
tag.uye<src.dctag0.numara> =
tag.uyeler --
src.sysmessage @1153 <ref1.name> isimli kisiyi ailenizden cikarttiniz.
if (<ref1.isonline>)
ref1.sysmessage @1153 Ailenizden cikartildiniz.
endif
src.ctag.uye =
src.ctag.numara =
return 1
on = 2
for <eval <def.maxuye>> 1
if strcmpi('<tag.uye<dlocal._for>>','') && (<tag.uye<dlocal._for>> != <src>)
ref6 = <tag.uye<dlocal._for>>
ref6.name <strarg <ref6.name>>
ref6.tag.soyad =
try uid.<ref6.tag0.kolye>.remove
ref6.tag.kolye =
tag.uye<dlocal._for>> =
endif
endfor
src.name <strarg <src.name>>
serv.b @1153,1,1 <src.tag0.soyad> ailesi, <src.name> tarafından dagitildi.
src.tag.soyad =
try uid.<src.tag0.kolye>.remove
src.tag.kolye =
return 1
on = 3
src.name <strarg <src.name>>
src.tag.soyad =
try uid.<tag0.kolye>.remove
src.tag.kolye =
for <eval <def.maxuye>> 1
if strcmpi('<tag.uye<dlocal._for>>','') && (<tag0.uye<dlocal._for>> == <src>)
tag0.uye<dlocal._for> =
tag0.uyeler --
endif
endfor
ref1 = <link>
ref1.sysmessage @1153 <src.name> isimli uye ailenizden ayrildi.
src.sysmessage @1153 Ailenizden ayrildiniz.
return 1
[dialog d_uye_kayidi]
0,0
nomove
src.ctag0.aile = <argv[0]>
src.ctag0.reis = <argv[1]>
resizepic 50 50 5054 320 150
resizepic 60 60 3000 300 130
dhtmlgump 100 75 250 60 0 0 <uid.<argv[1]>.name> sizi, <uid.<argv[1]>.tag0.soyad> ailesine davet ediyor. Kabul ediyor musunuz? (Giris 50.000gp)
button 90 150 4005 4007 1 0 1
dtext 125 150 1000 Evet
button 250 150 4005 4007 1 0 2
dtext 285 150 1000 Hayir
[dialog d_uye_kayidi button]
on = 0
ref1 = <src.ctag0.reis>
ref1.sysmessage @1153 <src.name> teklifinizi red etti.
src.ctag0.aile =
src.ctag0.reis =
on = 1
ref1 = <src.ctag0.aile>
ref2 = <src.ctag0.reis>
local.bos = <eval <ref1.f_uyesayisi_kontrolu>>
if !(<dlocal.bos>)
src.sysmessage @1153 <ref2.tag0.soyad> ailesinde bos yer kalmamis.
ref2.sysmessage @1153 ailenizde bos yer kalmamis.
elif (<src.gold> < 50000)
src.sysmessage @1153 Karakterinizde yeterli altin bulunmuyor (50.000gp)
ref2.sysmessage @1153 <src.name> uzerinde yeterli altin bulunmuyor (50.000gp)
else
local.isim <strarg <src.name>>
src.name <local.isim> <ref2.tag0.soyad>
src.tag.soyad <ref2.tag0.soyad>
ref1.tag.uyeler ++
ref1.tag.uye<dlocal.bos> = <src>
serv.newitem i_uye_kolyesi,1,<src>
new.link <src>
new.more1 = <ref1>
src.equip <new>
src.tag.kolye = <new>
src.gold -=50000
src.sysmessage <ref2.tag0.soyad> ailesine katildiniz.
for <eval <def.maxuye>> 0
if strcmpi('<ref1.tag.uye<dlocal._for>>','')
ref3 = <ref1.tag.uye<dlocal._for>>
if (<ref3> != <src>)
ref3.sysmessage @1153 <src.name> ailenize katildi.
endif
endif
endfor
src.ctag0.aile =
src.ctag0.reis =
endif
return 1
on = 2
ref1 = <src.ctag0.reis>
ref1.sysmessage @1153 <src.name> teklifinizi red etti.
src.ctag0.aile =
src.ctag0.reis =
[eof]