
Sistem, SMF 2.0.9 tabanlıdır. Ancak en önemli özelliği, forum ile oyun hesap sisteminin tamamen entegre çalışmasıdır.
Yani kullanıcı foruma üye olduğunda, aynı bilgiler kullanılarak oyun hesabı da otomatik olarak oluşturulur. Böylece ayrı bir kayıt sayfasına veya ikinci bir üyelik işlemine ihtiyaç duyulmaz.
Bununla birlikte, forumdaki "Şifremi Unuttum" sistemi de oyun hesaplarıyla senkronize çalışmaktadır. Kullanıcı forum şifresini sıfırladığında, oyun hesabının şifresi de otomatik olarak güncellenir. Kısacası forum ve oyun tarafında tek hesap, tek şifre mantığı korunmaktadır.
Sistem içerisinde bunun dışında çeşitli geliştirmeler ve entegrasyonlar da bulunmaktadır. Dilerseniz kendi ihtiyaçlarınıza göre düzenleyebilir, geliştirebilir ve sunucunuza uyarlayabilirsiniz.
Bu paylaşımı, hem yeni altyapılarımıza odaklanabilmek hem de yeni projelere başlayacak arkadaşlara katkı sağlayabilmek amacıyla yapıyoruz.
Notlar
Proje olduğu haliyle paylaşılmaktadır. Kurulum, geliştirme veya teknik destek hizmeti verilmemektedir.
Minimum PHP 5.x, önerilen sürüm ise PHP 5.4'tür. Daha yeni PHP sürümlerine geçirmek isterseniz, mevcut kod yapısındaki uyumluluk gerektiren bölümleri düzenleyerek istediğiniz sürüme adapte edebilirsiniz.
Kurulumdan sonra aşağıdaki SQL sorgusunu çalıştırmanız gerekmektedir. Sorgudaki te.smf_members kısmını kendi veritabanınızdaki tablo adıyla değiştirmeniz yeterlidir.
ALTER TABLE te.smf_members
ADD (
acc_created int(11) NOT NULL,
pin text NOT NULL,
adi varchar(65) NOT NULL,
soyad varchar(65) NOT NULL,
acc_pass varchar(65) NOT NULL,
acc_pin int(11) NOT NULL,
degis_pin int(4) NOT NULL default '1',
degis_pass varchar(65) NOT NULL default '1',
sifre varchar(20) NOT NULL
);Bu işlemin ardından sistem kayıt entegrasyonunu sorunsuz şekilde kullanabilirsiniz.Sphere kısmında sphere.ini ayarlarını (Mysql Configuration + AccApp vb.) yapmayı unutmayın.
//Script//
[FUNCTION f_onserver_save]
db.connect
IF (<db.connected>)
///////////////// hesap ekle
db.query "SELECT member_name, sifre, passwd, adi, soyad, pin, email_address, secret_question, secret_answer FROM smf_members WHERE acc_created='0' AND is_activated='1'";
if <ddb.row.numrows>
while (!<isempty <db.row.<dlocal._while>.member_name>>)
IF (STRMATCH(*İışŞĞğÇçÜü*,'<db.row.<dlocal._while>.member_name>'))
//SERV.LOG HESAP ADI TURKCE KARAKTER ICERIYOR : <db.row.<dlocal._while>.member_name> || Hesap silindi !
db.execute "DELETE FROM smf_members WHERE member_name='<db.row.<dlocal._while>.member_name>'";
ELSEIF !(STRREGEX(^[a-zA-Z0-9]+$,<db.row.<dlocal._while>.member_name>))
//SERV.LOG HESAP ADI HATALI KARAKTER ICERIYOR : <db.row.<dlocal._while>.member_name> || Hesap silindi !
db.execute "DELETE FROM smf_members WHERE member_name='<db.row.<dlocal._while>.member_name>'";
ELSE
serv.account add <db.row.<dlocal._while>.member_name>
serv.account.<db.row.<dlocal._while>.member_name>.password <db.row.<dlocal._while>.sifre>
serv.account.<db.row.<dlocal._while>.member_name>.plevel=1
serv.account.<db.row.<dlocal._while>.member_name>.tag0.plevel=1
serv.account.<db.row.<dlocal._while>.member_name>.tag0.kayit_isim <db.row.<dlocal._while>.adi>
serv.account.<db.row.<dlocal._while>.member_name>.tag0.kayit_soyisim <db.row.<dlocal._while>.soyad>
serv.account.<db.row.<dlocal._while>.member_name>.tag0.kayit_pin <db.row.<dlocal._while>.pin>
serv.account.<db.row.<dlocal._while>.member_name>.tag0.kayit_email <db.row.<dlocal._while>.email_address>
serv.account.<db.row.<dlocal._while>.member_name>.tag0.kayit_gsoru <db.row.<dlocal._while>.secret_question>
serv.account.<db.row.<dlocal._while>.member_name>.tag0.kayit_gcevap <db.row.<dlocal._while>.secret_answer>
db.execute "UPDATE smf_members SET acc_created='1' WHERE member_name='<db.row.<dlocal._while>.member_name>'"
db.execute "UPDATE smf_members SET sifre='Hide' WHERE member_name='<db.row.<dlocal._while>.member_name>'"
serv.log Hesap : <db.row.<dlocal._while>.member_name> eklendi.
ENDIF
endwhile
endif
db.close
db.connect
IF (<db.connected>)
///////////////// güncellenmesi gereken şifre varsa güncelle
db.query "SELECT member_name, degis_pass, is_activated FROM smf_members WHERE is_activated='1'";
if <ddb.row.numrows>
while (!<isempty <db.row.<dlocal._while>.member_name>>)
IF !(<db.row.<dlocal._while>.degis_pass> == 1) && (<db.ROW.<dlocal._while>.is_activated> == 1)
IF (STRMATCH(*İışŞĞğÇçÜü*,'<db.row.<dlocal._while>.member_name>'))
//SERV.LOG SIFRESI DEGISEN HESAP ADI TURKCE KARAKTER ICERIYOR : <db.row.<dlocal._while>.member_name> || Hesap silindi !
//db.execute "DELETE FROM smf_members WHERE member_name='<db.row.<dlocal._while>.member_name>'";
elseIF !(STRREGEX(^[a-zA-Z0-9]+$,<db.row.<dlocal._while>.member_name>))
//SERV.LOG SIFRESI DEGISEN HESAP ADI HATALI KARAKTER ICERIYOR : <db.row.<dlocal._while>.member_name> || Hesap silindi !
// db.execute "DELETE FROM smf_members WHERE member_name='<db.row.<dlocal._while>.member_name>'";
else
serv.account.<db.row.<dlocal._while>.member_name>.password <db.row.<dlocal._while>.degis_pass>
db.execute "UPDATE smf_members SET degis_pass = '1' WHERE member_name='<db.row.<dlocal._while>.member_name>'";
serv.log Hesap : <db.row.<dlocal._while>.member_name> sifresini degistirdi.
ENDIF
endif
endwhile
endif
db.close
serv.savestatics
var.kalansure <serv.time>
// This function is called after server has saved correctly (once per stage with background save).
[FUNCTION f_onserver_save_ok]
// This function is called after server hasn't saved correctly (once per stage with background save).
[FUNCTION f_onserver_save_fail]
// This function is called after server completely finished saving (also at end of background save).
// ARGS --> Time it took to save (in seconds, 4 digit precision)
[FUNCTION f_onserver_save_finished]
serv.allclients sysmessage @,,1 Save işlemi <args> saniyede tamamlanmıştır.
// This function is called when a server is triggeted a shutdown, after all
// saves and everything finished
[FUNCTION f_onserver_exit]
// This function is called when an IP is blocked from the server
// ARGS --> IP being blocked
// ARGN1 --> Time to block the IP for in tenths of a second (writable)
[FUNCTION f_onserver_blockip]
[Function f_oncommand]
[EOF]Ayrıca güvenlik açısından kayıt sistemini doğrudan oyun sunucusuna kurmanızı önermiyoruz. Bunun yerine uzak SQL bağlantısına izin veren bir web hosting üzerinde çalıştırmanız ve gerekli veritabanı bağlantılarını bu şekilde yapılandırmanız hem güvenlik hem de performans açısından daha sağlıklı olacaktır.Sistem içerisinde, kayıt sistemi üzerinde hile veya kötüye kullanım girişimlerini tespit etmek amacıyla hazırlanmış bir güvenlik mekanizması da bulunmaktadır. Olası şüpheli işlemlerde kullanıcı UDProtect/index.php sayfasına yönlendirilir ve olay kayıt altına alınır. Bunun yanında oluşturulan log dosyaları sayesinde IP bilgileri, işlem detayları ve gerçekleşen denemeleri daha sonra inceleyebilirsiniz.
Sevgilerimizle,
Ultima Destek

