Herkese kolay gelsin.
Slothere'in paylaşmış olduğu Aile sistemiyle ilgili bir iki ufak sorum olacak. Script aşağıdadır.

Aile Sistemi
Sorun 1: dtextentrylimited 5.x client ve üstünde çalışıyor bildiğim kadarıyla ben bunun yerine textentry kullansam ileride sorun yaşarmıyım.
Sorun 2: Aile sisteminde tabloları oluşturup oyun içinde aile talebi geliyor ve onaylayınca soyadını veriyor fakat aileye birini davet etmek isteyince targetted item moved uyarısını alıyorum.
Sorun 3: Aileye kimseyi davet edemediğim gibi aileyi dağıtmak istediğimde de aile reisi değilsiniz uyarısını alıyorum.

Aile Sistemi;

[comment aile_sistemi]
hazırlayan: Slothere
tarih: 26 Temmuz 2010
güncelleme: 4 ağustos 2010
version: 056b+

// -- functions

[plevel 7]
ailetablo
ailetablo_sil

[function ailetablo]
db.connect
if <db.connected>
	db.execute "CREATE TABLE IF NOT EXISTS `aileler` (`id` INT NULL AUTO_INCREMENT PRIMARY KEY,`aileisim` VARCHAR( 14 ) NOT NULL, `ailereis` VARCHAR( 10 ) NOT NULL, `kurulus` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `yuzukid` VARCHAR( 15 ) NOT NULL DEFAULT 'NULL', `durum` ENUM( '0', '1' ) NOT NULL DEFAULT '0', `onaylayan` VARCHAR( 10 ) DEFAULT 'NULL')";
	db.execute "CREATE TABLE IF NOT EXISTS `aileUyeleri` (`id` INT NULL AUTO_INCREMENT PRIMARY KEY ,`aileNo` INT NOT NULL ,`uyeUid` VARCHAR( 10 ) NOT NULL ,`katilmaTarihi` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP )"
	sys_normal tablolar oluşturuldu.
endif
db.close

[function ailetablo_sil]
db.connect
if <db.connected>
	db.execute "drop table aileler";
	db.execute "drop table aileuyeleri"
endif
db.close

[function isinfamily]
if <tag0.aileno>
	return 1
else
	return 0
endif

[function isfamilyexist]
db.connect
if <db.connected>
	db.query "select aileisim from aileler where aileisim='<addslashes <args>>'";
	if <db.row.numrows>
		return 1
	else
		return 0
	endif
else
	return 1
endif
db.close

[function isfamilyreqexist]
db.connect
if <db.connected>
	db.query "select ailereis from aileler where ailereis='<src>'";
	if <db.row.numrows>
		return 1
	else
		return 0
	endif
else
	return 1
endif
db.close

[function staff_aile_msg]
if <account.plevel> > 1
	sysmessageua 48,6,6,0 <args>
endif

[plevel 6]
ailetalep

[function ailetalep]
clearctags=aile
ctag0.aile_limit=0
dialogclose d_aile_yetkili_paneli
sdialog d_aile_yetkili_paneli

[plevel 1]
ailem
ailemi_dagit
aileden_ayril

[function ailem]
if !<isempty <tag.name.suffix>>
	db.connect
	if <db.connected>
		db.query "select ailereis from aileler where id='<dtag0.aileno>'";
		if <db.row.0.ailereis>!=<uid>
			sys_error Bu işlemi yalnızca aile reisi kullanabilir.
		else
			db.query "select count(id) from aileuyeleri where aileno='<dtag0.aileno>'";
			if !<db.row.0>
				sys_error Ailenizde üye bulunmuyor.
			else
				db.query "select id from aileuyeleri where aileno='<dtag0.aileno>'";
				ctag0.uye_index=0
				ctag0.uye_id=<db.row.<dctag0.uye_index>.id>
				sdialog d_aile_menusu
			endif
		endif
	endif
	db.close
endif


[function ailemi_dagit]
if !<isempty <tag.name.suffix>>
	db.connect
	if <db.connected>
		db.query "select ailereis from aileler where id='<dtag0.aileno>' and ailereis='<uid>";
		if !<db.row.numrows>
			sys_error Bu işlemi yalnızca aile reisi kullanabilir.
		else
			sdialog d_aile_dagit
		endif
	endif
	db.close
endif

[function aileden_ayril]
if !<isempty <tag.name.suffix>>
	db.connect
	if <db.connected>
		db.query "select ailereis from aileler where id='<dtag0.aileno>' and ailereis='<uid>'";
		if <db.row.numrows>
			sys_error Yalnızca aile üyeleri kullanabilir.
		else
			sdialog d_aileden_ayril
		endif
	endif
endif

// -- items

[itemdef i_yuzuk_aile]
id=i_ring_gold
type=t_jewelry
weight=0
name=aile yuzugu

on=@create
color=1153
attr=attr_newbie

on=@click
messageua 48,6,6,0 [<name>]
messageua 1000,6,6,0 sahibi: <link.name>
return 1

on=@equip
if <link>
	if <link>!=<src>
		link.equip=<uid>
		update
		src.sys_error Bu yüzük size ait değil.
	endif
endif

on=@dclick
if <link>!=<src>
	cont=<link.findlayer(layer_pack).uid>
	link.equip=<uid>
	update
	src.sys_error Bu yüzük size ait değil.
else
	target @048,,1 Aileye almak istediğiniz oyuncuyu seçiniz.
	equip
endif
return 1

on=@targon_item
target @38,,1 Yalnızca oyuncuları seçebilirsiniz.
return 1

on=@targon_ground
target @38,,1 Yalnızca oyuncuları seçebilirsiniz.
return 1

on=@targon_char
if <src.targ>==<src>
	target @38,,1 Kendinizi seçemezsiniz.
elif !(<src.targ.isplayer>) || (<src.targ.account.plevel> > 1)
	target @38,,1 Yalnızca oyuncuları seçebilirsiniz.
elif <src.targ.isinfamily>
	target @38,,1 <src.targ.name> <strtrim <src.targ.tag0.name.suffix>> ailesinin mensubu.
elif <src.targ.gold> < 75000
	target @38,,1 <src.targ.name> üyelik için gereken ücreti ödeyecek durumda değil. (75.000gp)
elif <src.targ.isdialogopen d_aile_uye_onay>
	target @38,,1 <src.targ.name> şu an zaten bir aile daveti alıyor.
else
	trysrc <src.targ> sdialog d_aile_uye_onay
endif
return 1

on=@destroy
db.connect
if <db.connected>
	db.query "select id,uyeuid from aileuyeleri where aileno='<link.dtag0.aileno>'";
	while <db.row.<dlocal._while>.uyeuid>
		ref1=<db.row.<dlocal._while>.uyeuid>
		ref1.tag0.name.suffix=
		db.execute "delete from aileuyeleri where id='<db.row.<dlocal._while>.id>'";
		ref1.dialogcloseall
	endwhile
	serv.allclients sysmessageua 0481,6,6,0 <strtrim <link.tag0.name.suffix>> isimli aile dağıldı.
	link.tag0.name.suffix=
	link.tag0.aileno=
	db.execute "delete from aileler where yuzukid='<uid>'";
	link.dialogcloseall
else
	return 1
endif
db.close

[itemdef i_aile_belgesi]
id=i_deed
type=t_script
value=885000
name=aile belgesi
weight=5

on=@create
color=04ec
attr=attr_newbie

on=@click
message <name>
return 1

on=@dclick
if <topobj>!=<src>
	src.sys_error Yalnızca çantanızdayken kullanabilirsiniz.
elif <src.isinfamily>
	src.sys_error Sizin zaten bir aileniz var.
else
	sdialog d_aile_kurulum
endif
return 1

[dialog d_aile_kurulum]
0,0
nomove
resizepic 50 50 5170 450 350
dhtmlgump 90 55 220 20 0 0 <def.bfont_size5>Esenyel Aile Kurulum Menüsü
dhtmlgump 80 85 400 90 0 0 Aile kurabilmek için öncelikle aile ismizin kurallara uygun olması gerekmektedir. Bu kurallara aşağıdan ulaşabilirsiniz. Ayrıca aile kurulumu için talepte bulunduğunuz an talebiniz yetkili onayına gönderilecektir. Uygun görüldüğü taktirde ailenizin kurulum işlemi tamamlanacaktır.
dhtmlgump 100 180 380 120 0 0 <def.bfont_red>1. Hakaret iceren anlamsiz soy isimleri kullanmanız yasaktır.<def.br>2. Sunucudaki aktif soy isimlerini kullanamazsınız.<def.br>3. Soy isminin uzunluğu en az 3, en fazla 14 karakter olabilir.<def.br>4. Yalnızca alfabetik karakterler, (')(-) simgeleri ve boşluk karakterini kullanabilirsiniz.
gumppic 190 300 098e
dtextentrylimited 205 300 200 20 1152 0 14
button 210 330 09a8 09a9 1 0 1
dtext 240 333 0 Gönder

[dialog d_aile_kurulum button]
on=1
if <topobj>!=<src>
	src.sys_error Yalnızca çantanızdayken kullanabilirsiniz.
elif <src.isinfamily>
	src.sys_error Sizin zaten bir aileniz var.
elif <src.isfamilyreqexist>
	src.sys_error Siz daha önceden aile kurulumu için talepte bulunmuşsunuz.
elif <isempty <argtxt[0]>>
	src.sys_error Aile ismini girmelisiniz.	
elif <eval(strlen(<argtxt[0]>))> < 3
	src.sys_error Aile ismi en az 3, en fazla 14 karakterden oluşabilir.
elif <badfamilynames <argtxt[0]>>
	src.sys_error Hatalı aile ismi girdiniz.
elif <isfamilyexist <argtxt[0]>>
	src.syS_error Bu aile ismi daha önceden kayıt edilmiş.
else
	db.connect
	if <db.connected>
		local.aileisim=<strtrim <argtxt[0]>>
		db.execute "insert into aileler (aileisim,ailereis) values ('<addslashes <local.aileisim>>','<src>')";
		src.sys_normal Aile başvurusu talebiniz iletildi.
		serv.allclients staff_aile_msg -- Yeni Aile Talebi: <local.aileisim>, <src.name>/<src>
		remove
	endif
	db.close
endif

// --

// -- dialogs

[dialog d_aile_yetkili_paneli]
0,0
nomove
resizepic 50 100 2600 590 400
dtext 100 120 48 Aile İsmi
dtext 220 120 48 Kurucu
dtext 340 120 48 Tarih
dtext 520 120 48 Onaylayan
gumppictiled 100 140 500 5 3000
button 600 460 015a4 015a6 1 0 10000
button 70 460 015a1 015a3 1 0 10001
db.connect
if <db.connected>
	db.query "select id,aileisim,ailereis,kurulus,onaylayan,durum from aileler order by kurulus desc limit <dctag0.aile_limit>,15";
	while <db.row.<dlocal._while>.ailereis>
		if <db.row.<dlocal._while>.durum>==1
			local.color=048
			dtext 520 <eval(<local._while>*20)+150> <local.color> <uid.<db.row.<dlocal._while>.onaylayan>.name>
		else
			local.color=38
			dtext 520 <eval(<local._while>*20)+150> <local.color> -
			button 65 <eval(<local._while>*20)+150> 4005 4007 1 0 <db.row.<dlocal._while>.id>
		endif
		dtext 100 <eval(<local._while>*20)+150> <local.color> <db.row.<dlocal._while>.aileisim>
		dtext 220 <eval(<local._while>*20)+150> <local.color> <uid.<db.row.<dlocal._while>.ailereis>.name>
		dtext 340 <eval(<local._while>*20)+150> <local.color> <db.row.<dlocal._while>.kurulus>
	endwhile
endif
db.close

[dialog d_aile_yetkili_paneli button]
on=1 9999
ctag0.aile_id=<dargn>
sdialog d_aile_onay

on=10000
ctag0.aile_limit +=16
sdialog d_aile_yetkili_paneli

on=10001
if <ctag0.aile_limit> > 0
	ctag0.aile_limit -=16
endif
sdialog d_aile_yetkili_paneli

[dialog d_aile_onay]
0,0
nomove
resizepic 50 50 5170 300 180
db.connect
if <db.connected>
	db.query "select aileisim,ailereis,kurulus from aileler where id='<dctag0.aile_id>'";
	dhtmlgump 80 75 280 70 0 0 <db.row.0.aileisim> isimli aile başvurusunu nasıl değerlendiriyorsunuz?<def.br><def.bfont_red>Kurucu:<def.bfont_black> <uid.<db.row.0.ailereis>.name><def.br><def.bfont_red>Kuruluş:<def.bfont_black> <db.row.0.kurulus>
	button 80 170 0481 0483 1 0 1
	dtext 110 170 1152 Onayla
	button 220 170 047e 0480 1 0 2
	dtext 250 170 1152 Sil
endif
db.close

[dialog d_aile_onay button]
on=1
db.connect
if <db.connected>
	db.query "select aileisim,ailereis from aileler where id='<dctag0.aile_id>'";
	ref1=<db.row.0.ailereis>
	local.aileisim=<db.row.0.aileisim>
	ref1.tag0.name.suffix=" <db.row.0.aileisim>"
	ref1.tag0.aileno=<dctag0.aile_id>
	serv.newitem i_yuzuk_aile,1,<ref1>,1
	new.link=<ref1>
	db.execute "update aileler set durum='1', onaylayan='<src>', yuzukid='<new>' where id='<dctag0.aile_id>'";
	sys_normal Aile başvurusunu kabul ettiniz.
	if <ref1.isonline>
		ref1.sys_normal Aile başvurunuz <name> tarafından onaylandı.
	else
		ref1.events +e_aile_msg2
		ref1.tag0.aile_staff=<name>
	endif
	serv.allclients sysmessageua 0481,6,6,0 <local.aileisim> isimli aile <ref1.name> tarafından kuruldu.
endif
db.close

on=2
db.connect
if <db.connected>
	db.query "select ailereis from aileler where id='<dctag0.aile_id>'";
	ref1=<db.row.0.ailereis>
	db.execute "delete from aileler where id='<dctag0.aile_id>'";
	serv.newitem i_aile_belgesi,1,<ref1.findlayer(layer_pack).uid>
	sys_normal Aile başvurusunu ret ettiniz.
	if <ref1.isonline>
		ref1.sys_normal Aile başvurunuz <name> tarafından ret edildi.
	else
		ref1.tag0.aile_staff=<name>
		ref1.events +e_aile_msg1
	endif
endif
db.close

[events e_aile_msg1]
on=@login
sys_normal Aile başvurunuz <tag0.aile_staff> tarafından ret edildi.
tag0.aile_staff=
events -e_aile_msg1

[events +e_aile_msg2]
on=@login
sys_normal Aile başvurunuz <tag0.aile_staff> tarafından onaylandı.
tag0.aile_staff=
events -e_aile_msg2

[dialog d_aile_uye_onay]
0,0
nomove
resizepic 75 75 5170 340 140
dhtmlgump 108 97 270 50 0 0 <link.name> sizi <strtrim <link.tag0.name.suffix>> isimli ailesine davet ediyor. Katılmak ister misiniz?
button 120 150 4005 4007 1 0 2
dtext 155 150 0 Evet
button 270 150 4005 4007 1 0 1
dtext 305 150 0 Hayır

[dialog d_aile_uye_onay button]
on=0 1
if <link.isonline>
	link.sys_normal <src.name> aile davetinizi ret etti.
endif

on=2
db.connect
if !<db.connected>
	link.sys_normal Sistem hatası oluştu, yetkililere ulaşınız.
	src.syS_normal Sistem hatası oluştu, yetkililere ulaşınız.
else
	db.query "select id,aileisim from aileler where yuzukid='<uid>'";
	if !<db.row.numrows>
		src.sys_error Böyle bir aile bulunamadı.
	elif <src.gold> < 75000
		src.sys_error Yeterli altınınız bulunmuyor. (75.000gp)
		link.sys_error <src.name>'in yeterli altını bulunmuyor. (75.000gp)
	else
		link.sys_normal <src.name> aile davetinizi kabul etti.
		serv.allclients sysmessageua 0481,6,6,0 <src.name>, <db.row.0.aileisim> isimli aileye katıldı.
		src.gold -=75000
		src.tag0.name.suffix=" <db.row.0.aileisim>"
		db.execute "insert into aileuyeleri (aileno,uyeuid) values (<db.row.0.id>,'<src>')";
	endif
endif
db.close

[dialog d_aile_menusu]
0,0
nomove
resizepic 100 100 5170 350 215
dtext 140 130 450 İsim:
dtext 140 150 450 Durumu:
dtext 140 170 450 Skilltotal:
dtext 140 190 450 Stats:
dtext 140 210 450 Fame/Karma: 
dtext 140 230 450 Kills/Deaths:
db.connect
if <db.connected>
	db.query "select uyeuid from aileuyeleri where id='<dctag0.uye_id>'";
	if <db.row.0>
		ref1=<db.row.0>
		dhtmlgump 235 132 200 20 0 0 <ref1.name>
		dhtmlgump 235 152 100 20 0 0 <qval(<ref1.isonline>)?<def.bfont_green>Online:<def.bfont_red>Offline>
		dhtmlgump 235 172 100 20 0 0 <fval <ref1.skilltotal>>
		dhtmlgump 235 192 200 20 0 0 <ref1.maxhits> str, <ref1.maxstam> dex, <ref1.maxmana> int
		dhtmlgump 235 212 150 20 0 0 <ref1.fame>/<ref1.karma>
		dhtmlgump 235 232 150 20 0 0 <qval(<ref1.kills>)?<ref1.kills>:->/<qval(<ref1.deaths>)?<ref1.deaths>:->
		button 380 265 015a4 015a6 1 0 2
		dtext 335 266 0 Sonraki
		button 140 265 015a1 015a3 1 0 1
		dtext 162 266 0 Önceki
		db.query "select ailereis from aileler where id='<dtag0.aileno>' and ailereis='<src>'";
		if <db.row.numrows>
			button 120 105 2117 2118 1 0 3
			dtext 140 103 68 Aileden Çıkart (Emin misiniz? :    )
			checkbox 330 103 02342 02343 0 1
		endif
	endif
endif
db.close

[dialog d_aile_menusu button]
on=1
db.connect
if <db.connected>
	db.query "select id from aileuyeleri where aileno='<dtag0.aileno>'";
	if <db.row.<eval(<ctag0.uye_index>-1)>.id>
		ctag0.uye_index --
		ctag0.uye_id=<db.row.<dctag0.uye_index>.id>
	endif
	db.close
endif
sdialog d_aile_menusu

on=2
db.connect
if <db.connected>
	db.query "select id from aileuyeleri where aileno='<dtag0.aileno>'";
	if <db.row.<eval(<ctag0.uye_index>+1)>.id>
		ctag0.uye_index ++
		ctag0.uye_id=<db.row.<dctag0.uye_index>.id>
	endif
db.close
endif
sdialog d_aile_menusu

on=3
if !<argchk[1]>
	sys_error Aileden çıkartma işlemi için onayınız gerekiyor.
	sdialog d_aile_menusu
else
	db.connect
	if <db.connected>
		db.query "select uyeuid from aileuyeleri where id='<dctag0.uye_id>'";
		if !<db.row.numrows>
			sys_error Böyle bir üye bulunamadı.
		else
			ref1=<db.row.0.uyeuid>
			ref1.tag0.name.suffix=
			if <ref1.isonline>
				ref1.sys_normal Ailenizden çıkartıldınız.
			endif
			db.execute "delete from aileuyeleri where id='<dctag0.uye_id>'";
			sys_normal <ref1.name> isimli üye ailenizden çıkartıldı.
		endif
	endif
	db.close
endif

[dialog d_aile_dagit]
0,0
resizepic 100 100 5170 280 140
dhtmlgump 135 130 250 45 0 0 <strtrim <tag0.name.suffix>> isimli ailenizi dağıtmak istediğinize emin misiniz?
button 150 180 4005 4007 1 0 1
dtext 185 180 0 Evet
button 250 180 4005 4007 1 0 2
dtext 285 180 0 Hayır

[dialog d_aile_dagit button]
on=1
db.connect
if <db.connected>
	db.query "select yuzukid from aileler where id='<dtag0.aileno>'";
	ref1=<db.row.0.yuzukid>
	ref1.remove
endif
db.close

[dialog d_aileden_ayril]
0,0
resizepic 100 100 5170 280 140
dhtmlgump 135 130 250 45 0 0 <strtrim <tag0.name.suffix>> isimli ailenizden ayrılmak istediğinize emin misiniz?
button 150 180 4005 4007 1 0 1
dtext 185 180 0 Evet
button 250 180 4005 4007 1 0 2
dtext 285 180 0 Hayır

[dialog d_aileden_ayril button]
on=1
db.connect
if <db.connected>
	db.execute "delete from aileuyeleri where uyeuid='<uid>'";
	serv.allclients sysmessageua 0481,6,6,0 <name> <strtrim <tag0.name.suffix>> isimli aileden ayrıldı.
	tag0.name.suffix=
	tag0.aileno=
	sys_normal Ailenizden ayrıldınız.
endif
db.close

// --

[eof] 
Mysql'e bağlandınız mı ? Ayrıca bu işlemleri yaptığınızda, konsolda ne gibi hatalar görüyorsunuz?
mysql'e bağlandım bağlanıyorum. aile tablosuna kaydediyor. hatta oyun içinden .ailetalep yazarak aileleri listeleyebiliyoruz. Ancak aile reisi kısmındaki sorun diğerlerinide tetikliyor diye düşünüyorum. Konsolda da herhangi bir hata almıyorum işin garibi
[Joe] : mysql'e bağlandım bağlanıyorum. aile tablosuna kaydediyor. hatta oyun içinden .ailetalep yazarak aileleri listeleyebiliyoruz. Ancak aile reisi kısmındaki sorun diğerlerinide tetikliyor diye düşünüyorum. Konsolda da herhangi bir hata almıyorum işin garibi

Allah allah garip, gene forumdan Slothere'a öm atarsan sana yardımcı olacağını düşünüyorum.
Master
59.2997
şimdi tekrar denedim bir problem görünmüyor. sanırım mysql ile ilgili bir bağlantı problemin var. tam olarak nerelerde ne sorunla karşılaştığını belirtirsen çözüm yoluna ulaşmak daha kolay olacaktır.

ekleme;

ailemi_dagit fonksiyonunda bir tırnak eklemeyi unutmuşum. şu şekilde güncellersen düzelecektir;
[function ailemi_dagit]
if !<isempty <tag.name.suffix>>
	db.connect
	if <db.connected>
		db.query "select ailereis from aileler where id='<dtag0.aileno>' and ailereis='<uid>'";
		if !<db.row.numrows>
			sys_error Bu işlemi yalnızca aile reisi kullanabilir.
		else
			sdialog d_aile_dagit
		endif
	endif
	db.close
endif


Bu konu Slothere tarafından düzenlendi(2010-08-25 10:30, 13 yıl önce)

Üye Ol veya Giriş Yap

Bu forum başlığına mesaj atmak istiyorsanız hemen üye olun veya giriş yapın.