Sphere, MySQL ve PHP — Online Player Listesi
UO-Developer.com — db.execute ile online oyuncu tablosu ve web listesiBu 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:
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_db2. 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 1Sunucu 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

