Anasayfa
UO Sunucular
Forumlar
Profilim
UO-Developer.COM

Sphere, MySQL ve PHP — Online Player Listesi

UO-Developer.com — db.execute ile online oyuncu tablosu ve web listesi

Bu dökümanı pek çok kişiye faydalı olabileceğini düşündüğüm için yazma gereği duydum. Devamı da gelecek.

Konu: MySQL online player listesi + PHP web gösterimi | Seviye: Orta – İleri

Ön koşul rehberler: MySQL Kurulumu | MySQL'den Yararlanma | MySQL Komutları

İlgili scriptler: Online Player Listesi | Online Player ve Yetkili | Forum: Sphere MySQL Hakkında


! DİKKAT !

Aşağıdaki örneklerde güvenlik açığı vardır. Kullanmanız durumunda oluşabilecek hasarlardan, zararlardan ve diğer sonuçlardan yazar sorumlu tutulamaz. Kullanmak ya da kullanmamak tamamen sizin elinizdedir.

Neden güvenli yazılmadı? Yazar, bunları herkesin kullanmasını istemediğini belirtmiştir — kullanabilecekler kullansın.

! DİKKAT !
İçindekiler
  • Gereksinimler
  • Sistemin amacı
  • Adım 1 — Login / Logout ile tablo yönetimi
  • Adım 2 — Sunucu açılışında tablo sıfırlama
  • Adım 3 — PHP ile web listesi
  • Özet kontrol listesi
  • Güvenlik notları

1. Gereksinimler

Öncelikle yeteri derecede MySQL bilginizin olması gerekir — ve tabii ki Sphere script diline de hakim olmanız.

MySQL konusunda yardımcı kaynak:

Tizag MySQL Tutorial

Kurulum ve sphere.ini ayarları henüz yapılmadıysa önce şu rehberleri tamamlayın:

  • MySQL kurulumu, libMySQL.dll, veritabanı oluşturma
  • sphere.ini içinde MYSQL=1, MySqlHost, MySqlUser, MySqlPassword, MySqlDatabase

sphere.ini örnek:

MYSQL=1
MySqlHost=localhost
MySqlUser=kullanici_adi
MySqlPassword=sifreniz
MySqlDatabase=sphere_db

2. Sistemin Amacı

Sphere içinde MySQL'i nerede kullanabiliriz diye düşünüyorsanız — cevap tabii ki her yerde.

Bu rehberdeki basit sistem:

  • MySQL kullanarak online player listesi tutmak
  • Devamında online oyuncuları web sitesi üzerinde listelemek
  • İleride oyun içinde de göstermek — devam yazısında ele alınacak

Varsayım: sphere.ini MySQL ayarlarınız yapılmış ve sunucunuzdaki MySQL sorunsuz çalışıyor.


3. Adım 1 — Tablo Oluşturma, Veri Girişi ve Silme

Oyuncularınıza tanımladığınız event içinde @Login ve @Logout triggerlarını kullanacağız.

Örnek event — kendi script dosyanıza ekleyin ve karakter şablonunuza EVENTS=e_player_mysql ile bağlayın:

[EVENTS e_player_mysql]
ON=@Login
db.connect
db.execute "create table if not exists online_players (playerUid text, playerName text);"
db.execute "insert into online_players values ('<uid>', '<name>');"

ON=@Logout
db.connect
db.execute "delete from online_players where playerUid='<uid>';"

Bu kadarcık. Herhangi bir oyuncu login olduğunda Sphere MySQL'e bağlanır; tablo yoksa oluşturur, ardından oyuncuyu tabloya ekler. Çıkışta tablodan siler.

Tabloya istediğiniz kadar alan ekleyebilirsiniz — Kills, Deaths vb.

Not: Oyuncu adında tek tırnak varsa SQL hatası oluşabilir; bu örnek bilinçli olarak basit bırakılmıştır.


4. Adım 2 — Crash Sonrası Asılı Kalan Kayıtlar

Sunucu crash olur ve Sphere istenmeyen şekilde kapanırsa @Logout triggerları tetiklenemez; oyuncular tabloda asılı kalır.

Bunun için sphere_serv_triggers.scp dosyasındaki f_onserver_start fonksiyonunu şu şekilde değiştirin:

[FUNCTION f_onserver_start]
db.connect
db.execute "drop table online_players;"
return 1

Sunucu açıldığında online_players tablosu silinir. Oyuncular tekrar login oldukça tablo yeniden oluşur ve sıfırdan dolar.

Alternatif: Tabloyu silmek yerine delete from online_players veya truncate table online_players kullanabilirsiniz — yapı korunur, veri temizlenir.


5. Adım 3 — PHP ile Web Sitesinde Gösterme

Online oyuncuları sitede listelemek için aşağıdaki PHP örneğini kullanabilirsiniz. Veritabanı bilgilerini kendi kurulumunuza göre düzenleyin:

<?php

$dbhost = 'localhost';
$dbuser = 'kullanici_adi';
$dbpass = 'sifre';
$dbname = 'database_adi';

$connect = mysql_connect($dbhost, $dbuser, $dbpass) or die("Veritabani baglantisi basarisiz");
mysql_select_db($dbname, $connect) or die("Veritabani secilemedi");

$player_list = mysql_query("select * from online_players");
if (mysql_num_rows($player_list) >= 1) {
    while ($player_data = mysql_fetch_array($player_list)) {
        $playerName = $player_data['playerName'];
        echo $playerName;
        echo "<br />";
    }
}
?>

Düzeltme: Orijinal örnekte echo $playername yazıyordu — PHP değişken adları büyük/küçük harfe duyarlıdır; doğrusu $playerName.

Modern PHP notu: mysql_connect ve mysql_query PHP 7+ sürümlerinde kaldırıldı. Güncel sunucularda mysqli veya PDO kullanın. Eski hosting ortamlarında yukarıdaki örnek hâlâ çalışabilir.


6. Özet Kontrol Listesi
  • [ ] MySQL kurulu ve sphere.ini ayarları yapıldı mı?
  • [ ] libMySQL.dll Sphere klasöründe mi?
  • [ ] Login / Logout event scripti eklendi mi?
  • [ ] Karakterlere event atandı mı?
  • [ ] f_onserver_start tablo sıfırlama eklendi mi?
  • [ ] Test: login → MySQL'de kayıt görünüyor mu?
  • [ ] Test: logout → kayıt siliniyor mu?
  • [ ] PHP dosyası doğru DB bilgileriyle çalışıyor mu?

7. Güvenlik Notları

Bu rehber bilinçli olarak basit ve güvensiz örnekler içerir. Canlı shard'da kullanmadan önce:

  • SQL injection — oyuncu adı ve UID için filtre / escape
  • PHP — güncel mysqli veya PDO + prepared statement
  • drop table — production'da dikkatli kullanın
  • Web sayfası — veritabanı şifresini public repoya koymayın

db.execute komutları ayrıntı: projedeki Sphere MySQL db.execute Rehberi ve MySQL'den Yararlanma

UO-Dev SPONSOR

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?

UO-Dev SPONSOR

anilkan 05-04-2011 12:08
suicide
Bu dökümanı, pek çok kişiye faydalı olabileceğini düşündüğüm için yazma gereği duydum.

herkesin kullanmasını istemedim diyebilirim. Kullanabilecekler kullansın. Ayak altı olmasın.
Bi iş yapıcaksan adam gibi yap.

Üyelerin oylama ortalaması (10 dışında) :

1.00

Oylar: 2 den itibaren 05-04-2011 12:09

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?