İlan
04 Haz 2026 30 çevrimiçi üye Duyurular
Ana Sayfa C++ / C# / Python
Ana Sayfa Forum C++ / C# / Python ITJA - MIGO PİYASAYA DARBE PANELİ-MİŞ FULL SYSTEM...
İlan Yan banner placeholder

ITJA - MIGO PİYASAYA DARBE PANELİ-MİŞ FULL SYSTEM

SMMLabs 26.03.2026 01:36 632 görüntüleme 15 cevap
Son Mesaj
SMMLabs
Üye
Üye
Katılım13 Şub 2026
Konular11
Mesajlar95
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
26.03.2026 01:36 #1
KURULUM ŞUAN YAPAMIYORSANIZ WEB SİTENİZ MEVCUT DEĞİL İSE DİREK PANELİ TEST ETMEK İÇİN : TEST PANEL



TANITIM (YAPAY ZEKA DOSYALARI ATTIK SİSTEMİ TANIT DEDİK)

Ana Modüller ve Özellikler​

1. Giriş ve Bağlantı Sistemi (index.php)​

plain
Copy
Özellikler:
├── MySQL root kullanıcısı ile çoklu veritabanı erişimi
├── Host/Port/Kullanıcı/Şifre ile esnek bağlantı
├── Session tabanlı oturum yönetimi
├── Bağlantı testi ve hata raporlama
└── Güvenli giriş ekranı (modern dark tema)

2. Dashboard (dashboard.php)​

Ana Kontrol Paneli:
Table
Copy
Bileşen​İşlev​
Veritabanı İstatistikleriToplam DB sayısı, tablo sayısı, toplam boyut (MB)​
Metin2 ÖzetToplam hesap, karakter, online oyuncu, guild sayısı​
Hızlı ErişimTek tıkla hesaplar, karakterler, itemler, SQL sorgusu​
Veritabanı ListesiTüm DB'lerin boyut ve tablo sayısı görünümü​
Dinamik SidebarMetin2 tabloları algılandığında özel menüler açılır​

3. Veritabanı Yöneticisi (database_manager.php)​

Navicat'in Temel Özelliklerinin Tamamı:

A. Veritabanı İşlemleri​

plain
Copy
├── Tüm veritabanlarını listeleme
├── DB boyut analizi (data + index ayrıntılı)
├── Tablo listesi (satır sayısı, boyut, oluşturma tarihi)
├── Tablo yapısı görüntüleme (kolonlar, tipler, indexler)
├── Tablo verilerini görüntüleme (sayfalama ile)
├── CRUD işlemleri (Create, Read, Update, Delete)
└── CSV Export/Import

B. SQL Editörü​

plain
Copy
├── Renklendirilmiş syntax highlighting
├── Sorgu geçmişi otomatik kaydetme
├── Snippet kütüphanesi (hazır sorgular)
├── Çoklu sorgu desteği
├── Sonuç tablosu görünümü
└── Hata ayıklama ve raporlama

C. Gelişmiş Araçlar (?action=tools)​

Table
Copy
Araç​Açıklama​
Global AramaTüm DB'de metin arama​
Global ReplaceToplu metin değiştirme (dry-run destekli)​
YedeklemeSeçili tabloları/tüm DB'yi SQL olarak yedekle​
Sorgu GeçmişiÇalıştırılan tüm SQL'lerin logu​
SQL SnippetsKaydedilmiş sorgu şablonları​
Çöp KutusuSoft delete ile geri yükleme​

D. Tablo Bakım Araçları​

plain
Copy
├── OPTIMIZE TABLE - Tablo optimizasyonu
├── REPAIR TABLE - Tablo onarımı
├── ANALYZE TABLE - İndeks istatistikleri
├── CHECK TABLE - Bütünlük kontrolü
└── AUTO_INCREMENT düzeltme

E. ER Diyagram (?action=er_diagram)​

  • Foreign key ilişkilerini görselleştirme
  • Tablo bağlantılarını otomatik çizme

F. Canlı Monitör (?action=monitor)​

plain
Copy
├── Aktif MySQL bağlantı sayısı
├── Thread durumları (connected/running)
├── Process list (çalışan sorgular)
├── Yavaş sorgu tespiti
└── Bağlantı havuzu izleme

G. Güvenlik & Anti-Cheat (?action=security)​

Table
Copy
Özellik​Detay​
Anomali TespitiBüyük tablolar, inactive hesaplar, orphan kayıtlar​
Anti-Cheat TaramasıÇoklu hesap, imkansız item, şüpheli yang​
Anlık UyarılarOtomatik tespit edilen riskli işlemler​

4. Hesap Yönetimi (accounts.php)​

plain
Copy
Özellikler:
├── Tüm hesapları listeleme (arama, sayfalama)
├── Hesap detayı görüntüleme
├── Ban/Unban işlemleri (status 0/1)
├── Email ve kayıt tarihi bilgisi
├── Son giriş ve IP adresi takibi
└── Hesaba bağlı karakterleri görme

40250 Uyumlu: Status TINYINT (0=ban, 1=active)

5. Karakter Yönetimi (players.php)​

plain
Copy
Özellikler:
├── Karakter listesi (level, job, yang, son giriş)
├── Detaylı karakter bilgisi:
│ ├── Temel bilgiler (ID, isim, hesap, level, exp)
│ ├── Job bilgisi (Warrior, Ninja, Sura, Shaman)
│ ├── Yang miktarı (0-2B arası validasyon)
│ ├── Oynama süresi (saat cinsinden)
│ ├── Son giriş ve IP
│ └── Konum bilgisi (X, Y, harita)
├── Hızlı düzenleme:
│ ├── Yang güncelleme (güvenli limit kontrolü)
│ ├── Level/EXP güncelleme (1-250 arası)
│ └── Otomatik validasyon
├── Envanter görüntüleme (son 20 item)
└── Oyuncu arama ve filtreleme

6. Envanter & Depo Yöneticisi (inventory_manager.php)​

plain
Copy
Modüller:
├── Item Arama (sunucu genelinde)
│ ├── Item adı veya VNUM ile arama
│ ├── Sahip bilgisi ve konum
│ ├── Efsun (socket) göstergeleri
│ └── Hızla envantere gitme
├── Oyuncu Envanteri
│ ├── 90 slot görsel envanter grid
│ ├── Slot numaraları ve boş/dolu durumu
│ ├── Item detay modalı (vnum, adet, socketler)
│ └── Hover efektleri
├── Depo (Safebox) Görüntüleme
│ ├── Account bazlı depo erişimi
│ ├── Item listesi tablo görünümü
│ └── Miktar ve pozisyon bilgisi
└── Değerli Itemler
├── Efsunlu itemleri otomatik tespit
├── Son eklenen nadir itemler
└── Sahip bilgisi ile listeleme

7. Canlı Oyuncu Takip (player_tracker.php)​

Gerçek Zamanlı İzleme Sistemi:
plain
Copy
Özellikler:
├── Canlı Harita Görünümü
│ ├── Grid tabanlı harita arayüzü
│ ├── Oyuncuları renkli noktalar olarak gösterme
│ ├── Mesleklere göre renk kodları:
│ │ 🔴 Warrior (Savaşçı)
│ │ 🟢 Ninja
│ │ Sura
│ │ Shaman
│ ├── Koordinat bazlı konumlandırma (X,Y)
│ ├── Tooltip ile detay bilgi (isim, level, HP)
│ └── Harita göstergesi (legend)
├── Liste Görünümü
│ ├── Tüm online oyuncular
│ ├── Detaylı bilgi kartları
│ ├── Level, job, HP, harita, IP, oynama süresi
│ ├── Durum badge'leri (Online/PvP/Zindan)
│ └── Hızlı işlem butonları
├── Hareket Geçmişi
│ ├── Oyuncunun konum değişimleri
│ ├── Eski/Yeni koordinat takibi
│ ├── Harita ve zaman bilgisi
│ └── Eylem tipi (hareket, savaş, vs.)
├── Zindan Geçmişi
│ ├── Giriş/çıkış zamanları
│ ├── Kalınan süre
│ └── Tamamlanma durumu
└── Parti Bilgisi
├── Parti üyeleri
└── Lider bilgisi

Harita Desteği: 40+ harita (Köyler, ormanlar, zindanlar, PvP alanı)

8. Ekonomi Monitörü (economy_monitor.php)​

plain
Copy
Modüller:
├── Genel Ekonomi İstatistikleri
│ ├── Toplam yang (tüm sunucu)
│ ├── Dolaşımdaki yang (son 7 gün aktif)
│ ├── Oyuncu başına ortalama yang
│ └── Risk skoru (şüpheli işlem sayısı)
├── En Zengin Oyuncular
│ ├── Top 10 liste
│ ├── Level ve son giriş bilgisi
│ └── Online/offline durumu
├── Yang Transferleri
│ ├── Gönderen/Alan bilgisi
│ ├── Transfer miktarı ve sebep
│ ├── Zaman damgası
│ └── Şüpheli transfer vurgulama (>10M)
├── Offline Shop Satışları
│ ├── Satıcı ve alıcı bilgisi
│ ├── Item adı ve VNUM
│ ├── Satış fiyatı ve tarihi
│ └── Market aktivitesi takibi
├── Şüpheli İşlemler
│ ├── Büyük transferler (>100M)
│ ├── Aynı IP'den çoklu transfer
│ ├── Negatif/Max aşımı yang
│ └── Riskli IP adresleri
└── Enflasyon Analizi
├── Günlük yang üretimi grafiği
├── 7 günlük trend analizi
└── Ekonomik sağlık göstergeleri

Zaman Filtreleri: 1 saat, 24 saat, 7 gün, 30 gün

9. Otomatik Etkinlik Sistemi (event_manager.php)​

plain
Copy
Özellikler:
├── Etkinlik Oluşturma
│ ├── İsim ve tip seçimi (yang/item/exp/level)
│ ├── Hedef kitle belirleme:
│ │ ├── Tüm oyuncular
│ │ ├── Sadece online
│ │ ├── Level aralığı (örn: 1-50)
│ │ └── Belirli oyuncu
│ ├── Ödül yapılandırması:
│ │ ├── Yang miktarı
│ │ ├── Item (VNUM seçimi)
│ │ ├── Item adedi
│ │ └── EXP miktarı
│ ├── Zamanlama (başlangıç/bitiş)
│ └── Otomatik tablo oluşturma
├── Etkinlik Yönetimi
│ ├── Aktif/Pasif durum
│ ├── Manuel çalıştırma
│ ├── Etkinlik silme
│ └── Ödül dağıtım logu
├── Etkinlik Listesi
│ ├── Durum badge'leri (Aktif/Süresi Doldu/Pasif)
│ ├── Ödül özetleri
│ └── Son çalıştırma tarihi
└── Item Seçimi
└── Dropdown'dan item_proto listesi

10. GM (Game Master) Yönetimi (gm_manager.php)​

plain
Copy
Özellikler:
├── GM Listesi
│ ├── Tüm yetkili kullanıcılar
│ ├── Yetki seviyelerine göre renklendirme:
│ │ 🔴 IMPLEMENTOR (Tam yetki)
│ │ HIGH_WIZARD (Yüksek yetki)
│ │ GOD (Orta yetki)
│ │ 🟢 LOW_WIZARD (Sınırlı yetki)
│ │ PLAYER (Sadece izleme)
│ ├── Hesap ve karakter bilgisi
│ ├── Son giriş takibi
│ └── Hızla yetki değiştirme
├── Yeni GM Ekleme
│ ├── Hesap login ile arama
│ ├── GM karakter adı
│ └── Yetki seviyesi seçimi
├── Yetki Matrisi
│ ├── Her seviyenin yetki detayı
│ ├── İzin listesi görünümü
│ └── Karşılaştırma tablosu
└── İşlem Logları
├── GM eylem kayıtları
├── Tarih, hedef ve detay bilgisi
└── IP adresi takibi

Tablo: common.gmlist (standart 40250 yapısı)

11. 🛡️ Güvenlik Duvarı (security_firewall.php)​

plain
Copy
Modüller:
├── Güvenlik Dashboard
│ ├── Tehdit seviyesi göstergesi (Düşük/Orta/Yüksek)
│ ├── Aktif ban sayısı
│ ├── Bugünkü banlar
│ └── Şüpheli IP sayısı
├── IP Ban Yönetimi
│ ├── IP adresi yasaklama
│ ├── Geçici veya kalıcı ban
│ ├── Süre seçimi (1 saat - 30 gün)
│ ├── Ban sebebi kaydı
│ └── Ban kaldırma
├── Ban Listesi
│ ├── Tüm yasaklı IP'ler
│ ├── Aktif/Pasif durum
│ ├── Ban tarihi ve bitiş
│ ├── Banlayan admin bilgisi
│ └── Hızlı kaldırma butonu
├── Şüpheli IP Tespiti
│ ├── Çoklu hesap tespiti (5+ hesap)
│ ├── IP başına hesap sayısı
│ └── Hızlı ban butonu
└── Bölgesel Dağılım
├── Ülke/bölge istatistikleri
├── Pasta grafik görünümü
└── IP range analizi

12. Canlı İşlem Monitörü (live_monitor.php)​

MySQL Trigger Entegrasyonu:
plain
Copy
Özellikler:
├── Otomatik Yenileme (10 saniyede bir)
│ ├── Toggle ile açıp kapatma
│ ├── Canlı gösterge (yeşil nokta)
│ └── Son güncelleme zamanı
├── Yang Hareketleri
│ ├── Trigger'dan gelen loglar
│ ├── Oyuncu adı ve level
│ ├── IP adresi ve harita
│ ├── Değişim miktarı (+/-)
│ └── Şüpheli işlem vurgulama (>500M)
├── Item Hareketleri
│ ├── Alım/satım/drop işlemleri
│ ├── Item adı ve VNUM
│ ├── Eylem tipi ve hedef
│ └── Zaman damgası
├── Şüpheli İşlem Uyarıları
│ ├── Otomatik tespit
│ ├── Animasyonlu uyarı kutusu
│ └── Detaylı liste
└── İstatistik Kartları
├── Son 10dk yang işlemi
├── Son 10dk item hareketi
└── Toplam şüpheli işlem

13. Market/Pazar Yöneticisi (market_manager.php)​

plain
Copy
Modüller:
├── Fiyat Analizi
│ ├── Item bazlı fiyat geçmişi
│ ├── Ortalama, min, max fiyat
│ ├── Toplam satış sayısı
│ └── Fiyat trend göstergesi (↑↓)
├── En Çok Satan Itemler
│ ├── Satış sayısına göre sıralama
│ ├── Ortalama fiyat bilgisi
│ ├── Fiyat aralığı (min-max)
│ └── Trend yüzdesi
├── Item Detay Sayfası
│ ├── Fiyat istatistikleri (4 kart)
│ ├── Son satışlar tablosu
│ └── Tarihsel fiyat değişimi
├── Fiyat Trendleri
│ ├── 7 günlük değişim analizi
│ ├── Yükselen/düşen itemler
│ └── Yüzdelik değişimler
└── Nadir Itemler
├── Az satılan değerli itemler
└── Piyasa analizi

14. İstatistik & Raporlama (statistics.php)​

Gelişmiş Analiz ve Grafikler:
plain
Copy
Özellikler:
├── Oyuncu Tutundurma (Retention)
│ ├── 1 günlük retention (%)
│ ├── 7 günlük retention (%)
│ ├── 30 günlük retention (%)
│ ├── Kayıt sayısı ve dönen oyuncu
│ └── Detaylı kart görünümü
├── Günlük Online Grafiği
│ ├── Çift eksenli grafik:
│ │ ├── Online oyuncu sayısı (mor)
│ │ └── Ortalama level (yeşil)
│ ├── Tarih seçimi (7/30/90 gün)
│ └── Chart.js entegrasyonu
├── Saatlik Online Dağılımı
│ ├── 24 saatlik bar grafik
│ ├── Pik saat tespiti
│ └── Zamanlı yoğunluk analizi
├── Meslek Dağılımı
│ ├── Pasta grafik görünümü
│ ├── Yüzde ve oyuncu sayısı
│ ├── Ortalama level (meslek bazlı)
│ └── Renkli segmentler
├── Popüler Haritalar
│ ├── Progress bar görünümü
│ ├── Oyuncu yoğunluğu
│ └── Ortalama level (harita bazlı)
└── Günlük Yeni Kayıt
├── Bar grafik görünümü
├── Kayıt trendi
└── Tarih aralığı filtresi

15. Mob Yönetimi (mobs.php)​

plain
Copy
Özellikler:
├── Mob Kartları Grid
│ ├── İsim ve VNUM
│ ├── Level ve HP/SP
│ ├── Saldırı gücü (min-max)
│ ├── Savunma ve hız
│ ├── Verdiği EXP ve yang
│ └── Hover animasyonları
├── Arama ve Filtreleme
│ ├── Mob adı ile arama
│ ├── VNUM ile arama
│ └── Sonuç limiti (50 varsayılan)
└── Hızlı Bilgi
└── Tüm temel istatistikler kart üzerinde

16. Skill Yönetimi (skills.php)​

plain
Copy
Özellikler:
├── Skill Protolari
│ ├── VNUM ve isim
│ ├── Meslek bazlı filtreleme
│ ├── Max level ve gereken level
│ ├── SP maliyet formülü
│ └── Passive/Active/Toggle tipi
├── Job Filtreleme
│ ├── Warrior, Ninja, Sura, Şaman, Lycan
│ ├── Buton ile hızlı filtre
│ └── Tümü görünümü
├── Arama
│ ├── Skill adı ile arama
│ └── VNUM ile arama
└── Oyuncu Skill'leri
├── Belirli oyuncunun skill'leri
├── Skill group ve level
├── Affect type ve value
└── Duration bilgisi

🔧 Yardımcı Fonksiyonlar (functions.php)​

Metin2Functions Sınıfı:
Table
Copy
Kategori​Metodlar​
HesapgetAllAccounts, getAccountById, banAccount, unbanAccount​
OyuncugetAllPlayers, getPlayerById, updatePlayerGold, updatePlayerLevel​
ItemgetItemProto, getPlayerItems, addItemToPlayer​
MobgetMobProto​
GuildgetAllGuilds, getGuildMembers​
GMgetGMList, addGM, updateGMAuthority, removeGM​
İstatistikgetDashboardStats, getEconomyStats, getPlayerMovementHistory​
VeritabanıbackupDatabase, restoreDatabase, globalSearch, globalReplace​
BakımoptimizeTable, repairTable, analyzeTable, checkTable​
GüvenlikdetectAnomalies, antiCheatScan, softDelete, restoreFromTrash​
AraçlarexportToCSV, importFromCSV, getERDiagram, saveSnippet​


ŞİMDİ BAZI ARKADAŞLAR DER BU CANLI TİCARET VS HARİTA VS KAYITLARINI NASIL KAYDECEK ATTIĞIM SQL DE PLAYER VERİTABANINA SQL LERİ OKUTACAKSIN DİĞER YANG DEĞİŞİMİ VS DİĞER ANLIK GELİŞMELERİ Trigger mantığı kısacası Sistemi entegreli olacak üzümü yiyin bağını sormayın.

SQL TARAFI

Sistem Genel Bakış​

plain
Copy
┌─────────────────────────────────────────────────────────┐
│ METIN2 GELİŞMİŞ İZLEME SİSTEMİ │
├─────────────────────────────────────────────────────────┤
│ 1. Oyuncu Hareket Takibi → Konum ve harita logları │
│ 2. Ekonomi Monitörü → Yang akışı takibi │
│ 3. Market Analizi → Offline shop satışları │
│ 4. Zindan Yönetimi → Giriş/çıkış kontrolü │
│ 5. Otomatik Etkinlikler → Yang/item/exp dağıtımı │
│ 6. GM Güvenlik Sistemi → Yetki ve IP yönetimi │
│ 7. Canlı Trigger Sistemi → Anlık veri yakalama │
│ 8. Raporlama Prosedürleri → Hazır SQL sorguları │
└─────────────────────────────────────────────────────────┘

1. OYUNCU TAKİP SİSTEMİ TABLOLARI​

A. player_movement_log - Oyuncu Hareket Logu​

sql
Copy
NE İŞE YARAR?
├── Oyuncuların haritadaki her hareketini kaydeder
├── Koordinat değişimlerini (X,Y) takip eder
├── Harita değişimlerini (warp) loglar
├── Ölüm, binek kullanımı gibi olayları yakalar
└── Hileci teleport tespiti için kullanılır

KULLANIM ALANLARI:
✓ Bot/hile tespiti (imkansız hızda hareket)
✓ Oyuncu yoğunluk analizi (hangi haritalar popüler)
✓ Stuck/bug report doğrulama
✓ PvP alanı aktivite takibi

Örnek Veri:
Table
Copy
player_id​old_x​old_y​new_x​new_y​map_index​action_type​created_at​
12345​100​200​5000​6000​43​warp​2024-01-15 14:30:22​
12345​5000​6000​5100​6100​43​move​2024-01-15 14:30:25​
Şüpheli: 2 saniyede 100 birim hareket = teleport hilesi şüphesi!

B. yang_transfer_log - Yang Transfer Logu​

sql
Copy
NE İŞE YARAR?
├── Tüm yang transferlerini kaydeder (trade, drop, shop)
├── Gönderen ve alan oyuncu bilgisi
├── Transfer miktarı ve sebep
├── IP adresi takibi (çoklu hesap tespiti)
└── Şüpheli ekonomik aktivite yakalama

KULLANIM ALANLARI:
✓ Real money trade (RMT) tespiti
✓ Yang satıcısı hesaplarını bulma
✓ Çalıntı yang takibi
✓ Ekonomi balans analizi

Örnek Senaryo:
plain
Copy
Oyuncu A → Oyuncu B: 500.000.000 Yang (Sebep: "Borç")
Oyuncu B → Oyuncu C: 500.000.000 Yang (Sebep: "Hediye")
Oyuncu C → Oyuncu D: 500.000.000 Yang (Sebep: "Ticaret")

TESPİT: Zincirleme transfer = Yang satışı şüphesi!

C. offline_shop_sale - Offline Shop Satış Logu​

sql
Copy
NE İŞE YARAR?
├── Offline shop satışlarını kaydeder
├── Satıcı ve alıcı bilgisi
├── Item VNUM ve satış fiyatı
├── Piyasa fiyat analizi için kullanılır
└── Enflasyon/ekonomi takibi

KULLANIM ALANLARI:
✓ Item fiyat geçmişi (trend analizi)
✓ En çok satan itemler
✓ Piyasa manipülasyonu tespiti
✓ Oyuncu ticaret aktivitesi

D. dungeon_log - Zindan Logu​

sql
Copy
NE İŞE YARAR?
├── Zindan giriş/çıkışlarını kaydeder
├── Kalınan süreyi hesaplar
├── Zindan tamamlama oranları
└── Boost/yardım hizmeti tespiti

KULLANIM ALANLARI:
✓ Nemere/Razador/Beran-Setaou takibi
✓ "Boost hizmeti" satanları tespit (çok hızlı çıkış)
✓ Zindan zorluk ayarı için istatistik
✓ Oyuncu ilerleme takibi

2. ETKİNLİK SİSTEMİ (auto_events)​

sql
Copy
NE İŞE YARAR?
├── Otomatik etkinlik oluşturma ve yönetme
├── Belirli kriterlere göre ödül dağıtımı
├── Zamanlanmış görevler
└── Toplu ödül operasyonları

ETKİNLİK TİPLERİ:
┌─────────────┬────────────────────────────────────────┐
│ yang │ Belirli oyunculara yang gönderme │
│ item │ Item ödülü (VNUM + adet) │
│ exp │ Deneyim puanı verme │
│ level │ Level atlama (doğrudan level ayarlama) │
└─────────────┴────────────────────────────────────────┘

HEDEF KİTLE SEÇENEKLERİ:
├── all → Tüm oyuncular
├── online → Şu an online olanlar
├── level_range → Belirli level aralığı (örn: 30-50)
└── specific → Belirli bir oyuncu (ID ile)

Örnek Kullanım:
plain
Copy
Etkinlik: "Haftasonu Yang Yağmuru"
├── Tip: yang
├── Hedef: online (şu an oyunda olanlar)
├── Ödül: 1.000.000 Yang
├── Zaman: Cumartesi 20:00 - 22:00
└── Sonuç: Otomatik olarak 150 oyuncuya 1M yang

3. GM GÜVENLİK SİSTEMİ​

A. gm_action_log - GM İşlem Logu​

sql
Copy
NE İŞE YARAR?
├── Tüm GM eylemlerini kaydeder
├── Yetki kötüye kullanımını önler
├── Hesap verebilirlik sağlar
└── Hukuki/sorumsuzluk koruması

LOGLANAN EYLEMLER:
├── Hesap ban/unban
├── Item/yang verme
├── Level değiştirme
├── GM ekleme/çıkarma
└── Tüm admin panel işlemleri

Örnek Log:
Table
Copy
gm_account​action_type​target​details​ip_address​created_at​
1​BAN_ACCOUNT​12345​Sebep: Hile kullanımı​192.168.1.1​2024-01-15 10:30:00​
1​ADD_ITEM​67890​Item: 11971 (Kılıç) x1​192.168.1.1​2024-01-15 11:15:22​

B. ip_bans - IP Ban Sistemi​

sql
Copy
NE İŞE YARAR?
├── IP adreslerini yasaklama
├── Geçici veya kalıcı ban
├── Ban sebebi ve tarih kaydı
└── Otomatik ban açma (süreli banlar için)

BAN TİPLERİ:
├── temporary → Süreli (1 saat - 30 gün)
└── permanent → Kalıcı (manuel açılır)

KULLANIM ALANLARI:
✓ Çoklu hesap (multi-account) banı
✓ DDoS/saldırı kaynağı engelleme
✓ Yasaklı bölge/ülke engelleme
✓ Hile/bot IP'lerini bloklama

4. ⚡ TRIGGER SİSTEMİ (Canlı Yakalama)​

A. trg_player_gold_change - Yang Değişim Trigger'ı​

sql
Copy
ÇALIŞMA MANTIĞI:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Oyuncu yang │────→│ Trigger ateşle │────→│ Log tablosuna │
│ alır/verir │ │ (AFTER UPDATE) │ │ kaydet │
└─────────────────┘ └─────────────────┘ └─────────────────┘

YAKALANAN BİLGİLER:
├── Eski yang miktarı (old_gold)
├── Yeni yang miktarı (new_gold)
├── Fark (difference: + veya -)
├── IP adresi (account tablosundan)
├── Harita ve koordinat (X,Y)
└── Zaman damgası

Örnek Senaryolar:
plain
Copy
Senaryo 1: Normal Mob Kesme
├── +50.000 Yang (Mob drop)
├── Log: increase, 50000, map: 43
└── ✅ Normal aktivite

Senaryo 2: Şüpheli Transfer
├── +500.000.000 Yang (Bilinmeyen kaynak)
├── Log: increase, 500000000, map: 1 (Köy)
└── ALARM: Anormal miktar!

B. trg_item_insert - Yeni Item Trigger'ı​

sql
Copy
NE İŞE YARAR?
├── Oyuncuya yeni item eklendiğinde çalışır
├── Item kaynağını belirler (drop, GM verdi, vb.)
├── Envanter hareketlerini izler
└── Yasa dışı item tespiti

YAKALANAN BİLGİLER:
├── Item ID ve VNUM
├── Sahip (owner_id)
├── Kaynak pencere (INVENTORY, SAFEBOX, GROUND)
├── Adet ve konum
└── Harita bilgisi

C. trg_item_delete - Item Silme Trigger'ı​

sql
Copy
NE İŞE YARAR?
├── Item silindiğinde çalışır (drop to ground)
├── Item kaybını loglar
├── Yanlışlıkla silme tespiti
└── Hileli item temizleme takibi

D. trg_player_login - Giriş/Çıkış Trigger'ı​

sql
Copy
NE İŞE YARAR?
├── Oyuncu giriş yaptığında session başlatır
├── Çıkış yaptığında session kapatır
├── Oynama süresini hesaplar
└── Çoklu hesap tespiti (aynı IP, farklı account)

ÖZELLİKLER:
├── 5 dakika kuralı: 5dk'dan az ara = aynı session
├── IP adresi kaydı
├── Harita ve koordinat
├── Çıkış sebebi (normal, kick, ban, crash)
└── Toplam oynama süresi (saniye)

5. LOG TABLOLARI (Detaylı)​

A. log_yang_changes - Detaylı Yang Logu​

sql
Copy
KOLONLAR VE ANLAMLARI:
┌─────────────┬─────────────────────────────────────────┐
│ player_id │ Oyuncu ID │
│ player_name │ Oyuncu adı (JOIN yerine cache) │
│ old_gold │ Eski yang miktarı │
│ new_gold │ Yeni yang miktarı │
│ difference │ Fark (pozitif/negatif) │
│ change_type │ Otomatik: increase/decrease/unknown │
│ ip_address │ Oyuncunun IP adresi │
│ map_index │ Hangi haritada │
│ x, y │ Koordinatlar │
│ created_at │ Zaman damgası │
└─────────────┴─────────────────────────────────────────┘

INDEX'LER:
├── Hızlı oyuncu sorgusu (player_id)
├── Zaman aralığı sorgusu (created_at)
├── Tip filtresi (change_type)
└── Miktar sıralaması (difference)

B. log_item_moves - Item Hareket Logu​

sql
Copy
KULLANIM ALANLARI:
├── Item ticareti takibi
├── Çalıntı item tespiti
├── Envanter yönetimi
└── Market/shop analizi

WINDOW TİPLERİ:
├── INVENTORY → Ana envanter (45 slot)
├── SAFEBOX → Depo (safebox)
├── GROUND → Yerden alma/bırakma
├── SHOP │ Offline shop veya NPC
├── TRADE → Oyuncu ticareti
└── UNKNOWN → Belirsiz kaynak

C. log_player_sessions - Oturum Logu​

sql
Copy
HESAPLANAN METRİKLER:
├── Günlük aktif kullanıcı (DAU)
├── Aylık aktif kullanıcı (MAU)
├── Ortalama oynama süresi
├── Retention oranları (1g, 7g, 30g)
└── Pik saatler (en çok online olan saatler)

D. log_pvp_deaths - PvP/Ölüm Logu​

sql
Copy
KULLANIM ALANLARI:
├── PvP istatistikleri
├── Intentional feeding tespiti
├── Level kasma/ düşürme tespiti
├── Harita dengesi (hangi harita ölümcül)
└── Klan/Guild savaş analizi

6. 🔧 PROSEDÜRLER (Hazır Sorgular)​

A. sp_get_recent_yang_changes - Son Yang Değişimleri​

sql
Copy
NE İŞE YARAR?
├── Son 5 dakikadaki tüm yang hareketlerini getirir
├── Admin panel "Canlı Monitör" için kullanılır
├── Otomatik yenileme ile anlık takip
└── Büyük miktarları öne çıkarır

KULLANIM:
CALL sp_get_recent_yang_changes();

B. sp_get_suspicious_yang - Şüpheli Yang Hareketleri​

sql
Copy
NE İŞE YARAR?
├── 100M üzeri yang değişimlerini bulur
├── Son 24 saatlik zaman aralığı
├── Hile/yasa dışı ticaret tespiti
└── Otomatik alarm sistemi için

KULLANIM:
CALL sp_get_suspicious_yang();

C. sp_get_ip_yang_patterns - IP Bazlı Pattern Analizi​

sql
Copy
NE İŞE YARAR?
├── Aynı IP'den çoklu işlem tespiti
├── 1 saatte 5+ işlem = şüpheli
├── Çoklu hesap + yang transferi = RMT şüphesi
└── Bot ağı tespiti

ÇIKTI KOLONLARI:
├── ip_address → Şüpheli IP
├── transaction_count → İşlem sayısı
├── unique_players → Kaç farklı oyuncu
└── total_volume → Toplam yang hacmi

7. TÜM SİSTEMİN ÇALIŞMA AKIŞI​

plain
Copy
┌─────────────────────────────────────────────────────────────┐
│ OYUNCU OYUNDA │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ 1. HAREKET (X,Y değişimi) │
│ └──► player_movement_log'a kaydet │
│ │
│ 2. YANG DEĞİŞİMİ (mob kesme, trade, drop) │
│ └──► trg_player_gold_change ► log_yang_changes │
│ │
│ 3. ITEM ALMA (drop, trade, GM) │
│ └──► trg_item_insert ► log_item_moves │
│ │
│ 4. GİRİŞ/ÇIKIŞ │
│ └──► trg_player_login ► log_player_sessions │
│ │
│ 5. ZİNDAN │
│ └──► Manuel INSERT ► dungeon_log │
│ │
│ 6. SHOP SATIŞ │
│ └──► Manuel INSERT ► offline_shop_sale │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ ADMIN PANEL GÖRÜNÜMÜ │
├─────────────────────────────────────────────────────────────┤
│ Canlı Monitör → sp_get_recent_yang_changes │
│ Ekonomi → yang_transfer_log analizi │
│ Oyuncu Takip → player_movement_log harita üzerinde │
│ Etkinlikler → auto_events ile otomatik ödül │
│ GM Logları → gm_action_log denetim │
│ 🛡️ Güvenlik → ip_bans + şüpheli işlem alarmı │
│ İstatistikler → Tüm log tablolarının analizi │
└─────────────────────────────────────────────────────────────┘

İNDİRME LİNKİ Virustotal
arifcan
Üye
Üye
Katılım31 Oca 2026
Konular12
Mesajlar83
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
28.03.2026 19:57 #2
PAYLAŞIM İÇİN TEŞEKKÜRLER,ELİNE SAĞLIK.
Pctralex
Üye
Üye
Katılım30 Kas 2025
Konular8
Mesajlar69
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 09:43 #3
Paylaşım için teşekkürler.
SMMLabs
Üye
Üye
Katılım13 Şub 2026
Konular11
Mesajlar95
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 14:14 #4
player_tracker.php deki map indexleri kendi filesinizin uygun indexlerini yapınız
stabil metin2 indexleri:
Kod:
1 metin2_map_a1
3 metin2_map_a3
4 metin2_map_guild_01
5 metin2_map_monkey_dungeon_11
6 metin2_guild_village_01
21 metin2_map_b1
23 metin2_map_b3
24 metin2_map_guild_02
25 metin2_map_monkey_dungeon_12
26 metin2_guild_village_02
41 metin2_map_c1
43 metin2_map_c3
44 metin2_map_guild_03
45 metin2_map_monkey_dungeon_13
46 metin2_guild_village_03
61 map_n_snowm_01
62 metin2_map_n_flame_01
63 metin2_map_n_desert_01
64 map_n_threeway
65 metin2_map_milgyo
66 metin2_map_deviltower1
67 metin2_map_trent
68 metin2_map_trent02
69 metin2_map_WL_01
70 metin2_map_nusluck01
71 metin2_map_spiderdungeon_02
72 metin2_map_skipia_dungeon_01
73 metin2_map_skipia_dungeon_02
81 metin2_map_wedding_01
100 metin2_map_fielddungeon
101 metin2_map_resources_zon
103 metin2_map_t1
104 metin2_map_spiderdungeon
105 metin2_map_t2
107 metin2_map_monkey_dungeon
108 metin2_map_monkey_dungeon2
109 metin2_map_monkey_dungeon3
110 metin2_map_t3
111 metin2_map_t4
112 metin2_map_duel
113 metin2_map_oxevent
114 metin2_map_sungzi
118 metin2_map_sungzi_flame_hill_01
119 metin2_map_sungzi_flame_hill_02
120 metin2_map_sungzi_flame_hill_03
121 metin2_map_sungzi_snow
122 metin2_map_sungzi_snow_pass01
123 metin2_map_sungzi_snow_pass02
124 metin2_map_sungzi_snow_pass03
125 metin2_map_sungzi_desert_01
126 metin2_map_sungzi_desert_hill_01
127 metin2_map_sungzi_desert_hill_02
128 metin2_map_sungzi_desert_hill_03
181 metin2_map_empirewar01
182 metin2_map_empirewar02
183 metin2_map_empirewar03
200 gm_guild_build
208 metin2_map_skipia_dungeon_boss
216 metin2_map_devilcatacomb
217 metin2_map_spiderdungeon_03
301 Metin2_map_CapeDragonHead
302 metin2_map_dawnmistwood
303 metin2_map_BayBlackSand
304 metin2_map_Mt_Thunder
351 metin2_map_n_flame_dungeon_01
SMMLabs
Üye
Üye
Katılım13 Şub 2026
Konular11
Mesajlar95
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 16:00 #5
// OYUNCU TAKİP


GÜNCEL player_tracker.php metin2 stabil map indexlerine uygun şekilde

player_tracker.php:
<?php
require_once 'includes/functions.php';

$action = $_GET['action'] ?? 'live_map';
$player_id = isset($_GET['player_id']) ? intval($_GET['player_id']) : 0;
$target_player = null;

if ($player_id) {
    $target_player = Metin2Functions::getPlayerById($player_id);
}

// Online oyuncuları çek
$online_players = [];
$db_type_used = 'Unknown';
$error_message = '';

try {
    $db = Metin2DB::getDB('player');
    
    // Önce sadece player tablosundan çek (cross-database join olmadan)
    $stmt = $db->query("
        SELECT p.id, p.name, p.level, p.job, p.x, p.y, p.map_index,
               p.hp, p.playtime, p.last_play, p.account_id
        FROM player p
        WHERE p.last_play > DATE_SUB(NOW(), INTERVAL 5 MINUTE)
        ORDER BY p.level DESC
    ");
    $players_raw = $stmt->fetchAll();
    $db_type_used = 'MySQL DATETIME (NOW()) - Player Only';
    
    // Şimdi account bilgilerini ayrı ayrı çek
    if (!empty($players_raw)) {
        try {
            $accountDb = Metin2DB::getDB('account');
            $account_cache = [];
            
            foreach ($players_raw as $player) {
                $account_id = $player['account_id'];
                
                // Cache'de yoksa çek
                if (!isset($account_cache[$account_id])) {
                    $stmt_acc = $accountDb->prepare("SELECT login, ip FROM account WHERE id = ?");
                    $stmt_acc->execute([$account_id]);
                    $account_cache[$account_id] = $stmt_acc->fetch();
                }
                
                $account = $account_cache[$account_id];
                $player['account_login'] = $account['login'] ?? 'Bilinmiyor';
                $player['account_ip'] = $account['ip'] ?? 'Bilinmiyor';
                $online_players[] = $player;
            }
        } catch (Exception $acc_e) {
            // Account DB hatası - sadece player bilgileriyle devam et
            foreach ($players_raw as $player) {
                $player['account_login'] = 'Hesap DB Yok';
                $player['account_ip'] = 'N/A';
                $online_players[] = $player;
            }
            $error_message = 'Account DB: ' . $acc_e->getMessage();
        }
    }
    
} catch (Exception $e) {
    $error_message = $e->getMessage();
    $db_type_used = 'HATA: ' . $e->getMessage();
}

// Harita isimleri
$maps = [
    1 => 'Shinsoo Köyü (map_a1)',
    3 => 'Shinsoo Şehir 2 (map_a3)',
    4 => 'Lonca Savaşı 1',
    5 => 'Maymun Zindanı 11',
    6 => 'Lonca Kövü 1',
    21 => 'Chunjo Köyü (map_b1)',
    23 => 'Chunjo Şehir 2 (map_b3)',
    24 => 'Lonca Savaşı 2',
    25 => 'Maymun Zindanı 12',
    26 => 'Lonca Köyü 2',
    41 => 'Jinno Köyü (map_c1)',
    43 => 'Jinno Şehir 2 (map_c3)',
    44 => 'Lonca Savaşı 3',
    45 => 'Maymun Zindanı 13',
    46 => 'Lonca Köyü 3',
    61 => 'Buzul Dağı (Snow)',
    62 => 'Alev Vadisi',
    63 => 'Çöl',
    64 => 'Üç Yol',
    65 => 'Milgyo',
    66 => 'Şeytan Kulesi 1',
    67 => 'Trent',
    68 => 'Trent 2',
    69 => 'WL',
    70 => 'Nusluck',
    71 => 'Örümcek Zindanı 2',
    72 => 'Sekoya Zindanı 1',
    73 => 'Sekoya Zindanı 2',
    81 => 'Düğün Alanı',
    100 => 'Field Zindanı',
    101 => 'Kaynak Bölgesi',
    103 => 'T1',
    104 => 'Örümcek Zindanı',
    105 => 'T2',
    107 => 'Nemere',
    108 => 'Razador',
    109 => 'Erohim',
    110 => 'T3',
    111 => 'T4',
    112 => 'Duello',
    113 => 'OX Etkinliği',
    114 => 'Savaş Alanı',
    118 => 'Alev Tepesi 1',
    119 => 'Alev Tepesi 2',
    120 => 'Alev Tepesi 3',
    121 => 'Kar Geçidi',
    122 => 'Kar Geçidi 1',
    123 => 'Kar Geçidi 2',
    124 => 'Kar Geçidi 3',
    125 => 'Çöl Savaşı 1',
    126 => 'Çöl Tepesi 1',
    127 => 'Çöl Tepesi 2',
    128 => 'Çöl Tepesi 3',
    181 => 'İmparatorluk Savaşı 1',
    182 => 'İmparatorluk Savaşı 2',
    183 => 'İmparatorluk Savaşı 3',
    200 => 'GM Lonca Binası',
    208 => 'Sekoya Boss',
    216 => 'Şeytan Katakomu',
    217 => 'Örümcek Zindanı 3',
    301 => 'Cape Dragon Head',
    302 => 'Dawn Mist Wood',
    303 => 'Black Sand Bay',
    304 => 'Mt. Thunder',
    351 => 'Alev Zindanı'
];

$job_names = ['Savaşçı', 'Ninja', 'Sura', 'Şaman'];
$job_classes = ['warrior', 'ninja', 'sura', 'shaman'];
$job_colors = ['#ef4444', '#22c55e', '#a855f7', '#3b82f6'];
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Oyuncu Takip Sistemi</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: #0f1419;
            color: #e0e0e0;
        }
        .sidebar {
            width: 280px;
  #0f1419   background: linear#e0e0e0nt(180deg, #1e3c72 0%, #2a5298 100%);
            min-height: 100vh;
            position: fixed;
       #1e3c72lor: #2a5298            padding: 20px 0;
        }
        .sidebar-header { padding: 0 20px 20px; border-bottom: 1px solid rgba(255,255,255,0.1); text-align: center; }
        .nav-menu { list-style: none; padding: 20px 0; }
        .nav-menu li { margin: 2px 0; }
        .nav-menu a {
            display: block;
            padding: 12px 20px;
            color: rgba(255,255,255,0.8);
            text-decoration: none;
            transition: all 0.3s;
            border-left: 3px solid transparent;
        }
        .nav-menu a:hover, .nav-menu a.active {
            background: rgba(255,255,255,0.1);
            color: white;
            border-left-color: #00ff88;
        }
        .main-content { margin-left: 280px; padding: 30px; }
        
     #00ff88der {
            background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
            padding: 25px 30px;
            border-radius: 15px;
  #1e3c72   ma#2a5298ttom: 30px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .header h1 { color: white; font-size: 28px; }
        
        .stats-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 20px;
            margin-bottom: 30px;
        }
        .stat-card {
            background: linear-gradient(135deg, #1e2937 0%, #0f172a 100%);
            padding: 25px;
            border-radius: 15px;
       #1e2937rder:#0f172alid #334155;
            text-align: center;
            transition: transform 0.3s;
        }
   #334155tat-card:hover { transform: translateY(-5px); border-color: #00ff88; }
        .stat-card h3 { color: #94a3b8; font-size: 14px; margin-bottom: 10px; text-#00ff88rm: uppercase; }
        .stat-card#94a3b8lor: #00ff88; font-size: 36px; font-weight: 700; }
        
        .card {
            background:#00ff887;
            padding: 25px;
            border-radius: 15px;
            border: 1px s#1e293734155;
            margin-bottom: 20px;
        }
        .card h2 {
            color: #00f#334155          margin-bottom: 20px;
            padding-bottom: 10px;
            border#00ff88: 2px solid #334155;
        }
        
        .debug-box {
            background: #0f172a;
            #334155 2px solid #f59e0b;
            border-radius: 10px;
            p#0f172a 20px;
            margin-bottom#f59e0b
        }
        .debug-box h3 { color: #f59e0b; margin-bottom: 15px; }
        .debug-row {
            display: flex;
            ju#f59e0bontent: space-between;
            padding: 8px 0;
            border-bottom: 1px solid #334155;
            font-family: monospace;
            font-size: 13px;
        }
        .d#334155w:last-child { border-bottom: none; }
        .debug-error { color: #ef4444; }
        .debug-success { color: #22c55e; }
        
        .live-map-container {
 #ef4444    position: relative;
            #22c55e100%;
            height: 600px;
            background: linear-gradient(135deg, #0f172a 0%, #1e2937 100%);
            border-radius: 15px;
            border: 2px solid #334#0f172a     #1e2937erflow: hidden;
        }
        .map-grid {
            position: abs#334155            width: 100%;
            height: 100%;
            background-image:
                linear-gradient(rgba(51, 65, 85, 0.3) 1px, transparent 1px),
                linear-gradient(90deg, rgba(51, 65, 85, 0.3) 1px, transparent 1px);
            background-size: 50px 50px;
        }
        .player-dot {
            position: absolute;
            width: 16px;
            height: 16px;
            border-radius: 50%;
            cursor: pointer;
            transition: all 0.3s;
            box-shadow: 0 0 15px currentColor;
            border: 2px solid white;
            z-index: 10;
        }
        .player-dot:hover { transform: scale(1.8); z-index: 100; }
        .player-dot.warrior { background: #ef4444; color: #ef4444; }
        .player-dot.ninja { background: #22c55e; color: #22c55e; }
#ef4444 .player-#ef4444a { background: #a855f7; color: #a855f7; }
 #22c55e.player-d#22c55ean { background: #3b82f6; color: #3b82f6; }#a855f7  
      #a855f7er-tooltip {
            position: fixed;
   #3b82f6  backgro#3b82f6ba(0,0,0,0.95);
            color: white;
            padding: 12px;
            border-radius: 8px;
            font-size: 13px;
            pointer-events: none;
            z-index: 1000;
            border: 2px solid #00ff88;
            display: none;
            min-width: 200px;
        }
        
        .#00ff88end {
            position: absolute;
            bottom: 20px;
            right: 20px;
            background: rgba(0,0,0,0.9);
            padding: 20px;
            border-radius: 10px;
            border: 1px solid #334155;
            z-index: 50;
        }
        .legend-item { display: flex; align-items:#334155; gap: 10px; margin: 8px 0; font-size: 13px; }
        .legend-dot { width: 12px; height: 12px; border-radius: 50%; border: 2px solid white; }
        
        .data-table {
            width: 100%;
            background: #0f172a;
            border-radius: 10px;
            overflow: hidden;
            font-size:#0f172a            border-collapse: collapse;
        }
        .data-table th {
            background: #1e3c72;
            color: white;
            padding: 12px 15px;
            text-align: lef#1e3c72    }
        .data-table td {
            padding: 12px 15px;
            border-bottom: 1px solid #334155;
        }
        .data-table tr:hover { background: #334155; }
        
        .btn#334155        display: inline-block;
            padding: 10p#334155
            border-radius: 8px;
            text-decoration: none;
            font-size: 13px;
            font-weight: 500;
            cursor: pointer;
            border: none;
            transition: all 0.3s;
        }
        .btn-primary { background: #3b82f6; color: white; }
        .btn-success { background: #22c55e; color: white; }
        .#3b82f6o { background: #06b6d4; color: white; }
        .btn#22c55eadding: 6px 12px; font-size: 12px; }
        
    #06b6d4bs {
            display: flex;
            gap: 10px;
            margin-bottom: 20px;
            border-bottom: 2px solid #334155;
        }
        .tab {
            padding: 12px 24px;
            background: none#334155       border: none;
            color: #94a3b8;
            cursor: pointer;
            font-size: 14px;
            border-bottom: #94a3b8id transparent;
            margin-bottom: -2px;
            text-decoration: none;
        }
        .tab.active { color: #00ff88; border-bottom-color: #00ff88; font-weight: 600; }
        
        .player-card {
   #00ff88  background: linear-gr#00ff88135deg, #1e2937 0%, #0f172a 100%);
            border: 1px solid #334155;
            border-radius: 1#1e2937     #0f172adding: 20px;
            margin-bottom#334155
            display: flex;
            align-items: center;
            gap: 20px;
            transition: all 0.3s;
        }
        .player-card:hover { border-color: #00ff88; transform: translateX(5px); }
        
        .player-avatar {
            width: 60#00ff88         height: 60px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 24px;
            font-weight: bold;
            flex-shrink: 0;
        }
        .player-avatar.warrior { background: rgba(239, 68, 68, 0.2); color: #ef4444; border: 2px solid #ef4444; }
        .player-avatar.ninja { background: rgba(34, 197,#ef44442); color: #22c55e; #ef4444 2px solid #22c55e; }
        .player-avatar.sura { background: rgba(168, 85, #22c55e2); color: #a855f7; #22c55e 2px solid #a855f7; }
        .player-avatar.shaman { background: rgba(59, 130#a855f70.2); color: #3b82f6#a855f7r: 2px solid #3b82f6; }
        
        .player-info h4 { color: white; margin-#3b82f6 5px; font-size: 18p#3b82f6      .player-info p { color: #94a3b8; font-size: 13px; line-height: 1.6; }
        
        .badge {
            display: i#94a3b8lock;
            padding: 4px 12px;
            border-radius: 20px;
            font-size: 11px;
            font-weight: 600;
            margin-left: 8px;
        }
        .badge-online { background: rgba(34, 197, 94, 0.2); color: #22c55e; border: 1px solid #22c55e; }
        .badge-shinsoo { background: rgba(239, 68, 68, 0#22c55elor: #ef4444; border#22c55eolid #ef4444; }
        .badge-chunjo { background: rgba(245, 158, 11, 0#ef4444lor: #f59e0b; border#ef4444olid #f59e0b; }
        .badge-jinno { background: rgba(59, 130, 246, 0.#f59e0bor: #3b82f6; border:#f59e0blid #3b82f6; }
        .badge-pvp { background: rgba(239, 68, 68, 0.2);#3b82f6 #ef4444; }
        #3b82f6dungeon { background: rgba(168, 85, 247, 0.2); color: #a855f7; }
   #ef4444       .coordinate-box {
            background: #0f172a;
            pad#a855f72px 18px;
            border-radius: 8px;
            font-fami#0f172aurier New', monospace;
            color: #00ff88;
            border: 1px solid #334155;
            text-align: center;
            fo#00ff88: 13px;
        }
        
     #334155ty-state {
            text-align: center;
            padding: 60px 20px;
            color: #64748b;
        }
        .empty-state-icon { font-size: 64px; margin-bottom: 20px; opacity: #64748b        
        .alert { padding: 15px 20px; border-radius: 10px; margin-bottom: 20px; border-left: 4px solid; }
        .alert-warning { background: rgba(245, 158, 11, 0.1); border-color: #f59e0b; color: #f59e0b; }
        .alert-success { background: rgba(34, 197, 94, 0.1); border#f59e0b #22c55e;#f59e0b #22c55e; }
        .alert-error { background: rgba(239, 68, 68, 0.1); border-c#22c55eef4444; c#22c55eef4444; }
    </style>
</head>
<body>
    <div>
        <div #ef4444sidebar-h#ef4444
            <h2>🎯 Oyuncu Takip</h2>
            <p>Canlı İzleme Sistemi</p>
        </div>
        <ul>
            <li><a href="dashboard.php">📊 Dashboard</a></li>
            <li><a href="player_tracker.php">🎯 Canlı Takip</a></li>
            <li><a href="player_tracker.php?action=list">📋 Liste</a></li>
            <li><a href="logout.php">🚪 Çıkış</a></li>
        </ul>
    </div>
    
    <div>
        <divcolor: #94a3b8; margin-top: 5px;">Son güncelleme: <?php echo date('H:i:s'); ?></p>
            </div>
            <div>
        #94a3b8 <button onclick="location.reload()">🔄 Yenile</button>
                <a href="dashboard.php">← Dashboard</a>
            </div>
        </div>
        
        <!-- Debug Bilgisi -->
        <div>
            <h3>🔍 Debug Bilgisi</h3>
            <div>
                <span>Online Oyuncu Sayısı:</span>
                <span>
                    <?php echo count($online_players); ?>
                </span>
            </div>
            <div>
                <span>Sorgu Tipi:</span>
                <span><?php echo htmlspecialchars($db_type_used); ?></span>
            </div>
            <?php if ($error_message): ?>
            <div>
                <span>Hata Mesajı:</span>
                <span><?php echo htmlspecialchars($error_message); ?></span>
            </div>
            <?php endif; ?>
            <div>
                <span>MySQL NOW():</span>
                <span>
                    <?php
                    try {
                        $db = Metin2DB::getDB('player');
                        echo $db->query("SELECT NOW()")->fetchColumn();
                    } catch(Exception $e) { echo 'Hata: ' . $e->getMessage(); }
                    ?>
                </span>
            </div>
            <div>
                <span>PHP Zamanı:</span>
                <span><?php echo date('Y-m-d H:i:s'); ?></span>
            </div>
            <?php if (!empty($online_players)): ?>
            <div>
                <span>Oyuncular:</span>
                <span>
                    <?php echo implode(', ', array_map(fn($p) => $p['name'] . '(Lv.'.$p['level'].')', $online_players)); ?>
                </span>
            </div>
            <?php endif; ?>
        </div>
        
        <?php if (empty($online_players)): ?>
        <div>
            <strong>⚠️ Online oyuncu bulunamadı!</strong><br>
            <?php if ($error_message): ?>
                Hata: <?php echo htmlspecialchars($error_message); ?>
            <?php else: ?>
                Sorgu başarılı ama sonuç yok. test.php'de çalışıyorsa, bu da çalışmalı.
            <?php endif; ?>
        </div>
        <?php else: ?>
        
        <div>
            <strong>✅ Başarılı!</strong> <?php echo count($online_players); ?> oyuncu online.
        </div>
        
        <div>
            <div>
                <h3>🟢 Online Oyuncu</h3>
                <p><?php echo count($online_players); ?></p>
            </div>
            <?php foreach ($job_names as $idx => $job): ?>
            <div>
                <h3><?php echo $job; ?></h3>
                <p><?php echo count(array_filter($online_players, fn($p) => $p['job'] == $idx)); ?></p>
            </div>
            <?php endforeach; ?>
        </div>
        
        <div>
            <a href="?action=live_map">🗺️ Canlı Harita</a>
            <a href="?action=list">📋 Liste Görünümü</a>
        </div>
        
        <?php if ($action == 'live_map'): ?>
        <!-- Canlı Harita -->
        <div>
            <h2>🗺️ Canlı Harita Görünümü</h2>
            <div id="liveMap">
                <div></div>
                
                <?php
                foreach ($online_players as $player):
                    $job_class = $job_classes[$player['job']] ?? 'warrior';
                    
                    // Koordinatları normalize et
                    // Metin2 koordinatları genellikle 0-200000 arası
                    $x_percent = min(95, max(5, ($player['x'] / 1000000) * 100));
                    $y_percent = min(95, max(5, ($player['y'] / 1000000) * 100));
                    
                    $map_name = $maps[$player['map_index']] ?? 'Harita #'.$player['map_index'];
                ?>
                <div
                    
                    
                    
                    
                    
                    
                    
                    >
                </div>
                <?php endforeach; ?>
                
                <div>
                    <h4>Meslekler</h4>
                    <?php foreach ($job_names as $idx => $job): ?>
                    <div>
                        <div cl#00ff88gend-dot"></div>
                        <span><?php echo $job; ?></span>
                    </div>
                    <?php endforeach; ?>
                </div>
            </div>
        </div>
        
        <?php elseif ($action == 'list'): ?>
        <!-- Liste Görünümü -->
        <div>
            <h2>📋 Online Oyuncular (<?php echo count($online_players); ?>)</h2>
            
            <div>
                <table>
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>İsim</th>
                            <th>Meslek</th>
                            <th>Seviye</th>
                            <th>HP</th>
                            <th>Harita</th>
                            <th>Koordinatlar</th>
                            <th>Hesap</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($online_players as $player):
                            $map_name = $maps[$player['map_index']] ?? 'Harita #'.$player['map_index'];
                            
                            $kingdom = '';
                            if (in_array($player['map_index'], [1, 3, 4, 5, 6])) $kingdom = 'Shinsoo';
                            elseif (in_array($player['map_index'], [21, 23, 24, 25, 26])) $kingdom = 'Chunjo';
                            elseif (in_array($player['map_index'], [41, 43, 44, 45, 46])) $kingdom = 'Jinno';
                        ?>
                        <tr>
                            <td><?php echo $player['id']; ?></td>
                            <td>
                                <strong><?php echo htmlspecialchars($player['name']); ?></strong>
                                <span>Online</span>
                            </td>
                            <td>
                                <?php echo $job_names[$player['job']] ?? 'Bilinmiyor'; ?>
                            </td>
                            <td>Lv. <?php echo $player['level']; ?></td>
                            <td><?php echo $player['hp']; ?></td>
                            <td>
                                <?php echo htmlspecialchars($map_name); ?>
                                <?php if ($kingdom): ?>
                                    <span><?php echo $kingdom; ?></span>
                                <?php endif; ?>
                            </td>
                            <td>
                                X:<?php echo $player['x']; ?><br>Y:<?php echo $player['y']; ?>
                            </td>
                            <td><?php echo htmlspecialchars($player['account_login'] ?? 'N/A'); ?></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </div>
        <?php endif; ?>
        
        <?php endif; ?>
    </div>
    
    <div id="tooltip"></div>
    
    <script>
        const tooltip = document.getElementById('tooltip');
        
        document.querySelectorAll('.player-dot').forEach(dot => {
            dot.addEventListener('mouseenter', function(e) {
                tooltip.innerHTML = `
                    <div>${this.dataset.name}</div>
                    <div>
                        <div><strong>Meslek:</strong> ${this.dataset.job}</div>
                        <#00ff88rong>Seviye:</strong> Lv.${this.dataset.level}</div>
                        <div><strong>HP:</strong> ${this.dataset.hp}/${this.dataset.maxHp}</div>
                        <div><strong>Konum:</strong> X:${this.dataset.x} Y:${this.dataset.y}</div>
                        <div>${this.dataset.map}</div>
                    </div>
                `;
                tooltip.style.display = 'block';
            });
            
#94a3b8     dot.addEventListener('mousemove', function(e) {
                tooltip.style.left = (e.clientX + 15) + 'px';
                tooltip.style.top = (e.clientY + 15) + 'px';
            });
            
            dot.addEventListener('mouseleave', function() {
                tooltip.style.display = 'none';
            });
        });
    </script>
</body>
</html>
SMMLabs
Üye
Üye
Katılım13 Şub 2026
Konular11
Mesajlar95
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 16:41 #6
Dip not: MMOZirve Altyapı Server filesinin MYSQL Veritabanına uygun şekilde kodlanmıştır. veritaban hatalarınızda kodları kendi veritabanı ve tablo isimlerine göre güncellersiniz. hatalar gider. genellikle bütün fileslerle aynıdır ama istisna bilmem. şuanlık hade allaha emane. gelecek aylarda görüşürüz
Sosyalio
Üye
Üye
Katılım24 Mar 2026
Konular8
Mesajlar61
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 20:39 #7
Mıgo eline sağlık
Objektifhaber
Üye
Üye
Katılım30 Mar 2026
Konular4
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
07.05.2026 21:20 #8
teşekkürler
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme
İlan Yan banner placeholder