[comment mortal_tecrube_sys_v1]
Tecrübe sistemi v1
Yazar: Mortal
Tarih: 02.09.2012
Saat: 15:26
Gerekenler: MySQL gereklidir
Özellikleri
- tecrübe puanları online süresi ve öldürdüğü adam sayısı arttıkça yükselir.
- tecrübe puanlarıyla bonus seçebilirler
- tecrübe puanlarıyla item satın alınabilir
- tecrübe puanlarıyla npc satın alınabilir
- tecrübe puanları altına çevrilebilir.
Hesaplamalar
- 1 saat 10 tecrübe puanı eder
- 1 kill 20 tecrübe puanı eder
- 10 tecrübe puanı 1000 altın eder
Doğal fixler
- Son 30 dakika içerisinde öldürdüğü bir oyuncudan puan alamaz.
- Karakter ilk yaratılırken <age> 3600 olarak ayarlanır.(girişte 10 tecrübe puanı verilir)
Kullanımı
- Tecrübe puanı kullanma örneği; "tecrubeharca 1000" 1000 tecrübe puanı siler-harcar.
- "tecrube_mysqltablo" komutu ile MySQL tablosu oluşturulur.
- Toplam harcanılan tecrübe puanı <tecrubehesapgider> komutu ile öğrenilebilir.
- Toplam kazanılan tecrübe puanı <tecrubehesapgelir> komutu ile öğrenilebilir.
- Kullanılabilir tecrübe puanı <tecrubehesap> ile öğrenebilir.
***ÖNEMLİ NOT: <serv.rtime> mysql'a eklendi ancak kullanıma açılmadı.rtime kullanarak ileride sitede gösterilebilecek bir
hale getirilebilir.Ayrıca ileride multi cliente karşı bir sistemin açığını kapatmak olarak kullanabilir
///*****Defname****//////////////************///////////************/////////////***************/////////////*******//
[defname tecrube_config]
tecrube_timer 10, 3600 // vereceği puan, saat başı (60 saniye * 60 dakika) 3600
tecrube_kill 20 // adam öldürünce verilecek tecrübe puanı
tecrube_lastdeathplayertime 30 // kaç dakika içinde ikinci adamı öldürürse puan verme.
tecrube_gold 10, 1000 // 10 tecrübe puanı 1k altına çevrilebilir.
///****************//////////////************///////////************/////////////***************/////////////*******//
[function mysqlkontrol]
if (<db.connected>)
return 1
else
return 0
endif
[function tecrube_mysqltablo]
db.connect
db.execute "create table tecrube(isim text, uid varchar(20), oldurulen varchar(20), tarih varchar(10));"
db.close
[function tecrubeler]
targetf _tecrubeler
[function _tecrubeler]
src.sysmessage <argo.tecrubegelir> deneme
[function tecrubeharca]
if (<args> > <tecrubehesap>)
src.sysmessage Yeterli tecrübe puanınız yok.
return 1
else
src.tag0.tecrubeharcama +=<args>
src.sysmessage <args> tecrübe puanı harcadınız.
endif
[function tecrubehesapgider]
return <tag0.tecrubeharcama>
[function tecrubehesapgelir]
args <def.tecrube_timer>
if !(<src.tag0.oldurme>)
return <eval <src.age>/<argv[1]>*<argv[0]>>
else
return <eval <eval <src.age>/<argv[1]>*<argv[0]>> + <eval <src.tag0.oldurme>*<def.tecrube_kill>> >
endif
[function tecrubehesap]
return <eval <tecrubehesapgelir>-<tecrubehesapgider>>
[events e_tecrube]
on=@login
src.sysmessage Toplam kullanabilir tecrübe puanınız: <tecrubehesap>
on=@death
ref1 <act>
if (<ref1.isplayer>)
if (<mysqlkontrol>)
db.connect
db.execute "insert into tecrube (isim, uid, oldurulen, tarih) values ('<ref1.name>', '<ref1.uid>', '<src.uid>',
'<serv.rtime>');"
ref1.tecrube_puanveriver <src.uid>
endif
db.close
endif
[function tecrube_puanveriver]
db.connect
db.query "select (uid,oldurulen) from tecrube where uid='<src.uid>' BETWEEN (SELECT NOW() - INTERVAL
<def.tecrube_lastdeathplayertime> MINUTE) and NOW()";
if !(<db.row>)
src.puanver
endif
for 0 <db.row>
if (strmatch("<args>","<db.row.<dlocal._for>.oldurulen>")
src.sysmessage <uid.<args>.name> son öldürdüğün 3 adam içinde olduğundan puan alamadın.
return 1
endfor
db.close
src.puanver
[function puanver]
if !(<src.tag0.oldurme>)
src.tag0.oldurme 1
return 1
else
src.tag0.oldurme +=1
endif
src.sysmessage <def.tecrube_kill> puan kazandınız.Toplam tecrübe puanınız : <tecrubehesap>
[eof]
Büyük ihtimalle hata olabilir test etme şansım olmadı.Ancak yinede paylaşmak istedim kaç yıldır ilk defa doğru düzgün oturup bir şeyler yazdım.