Metin2 Offline Shop Crash Fix | Çevrimdışı Pazar Çökme Sorunu (Source & SQL Fix 2026)
admin
Katılım
23 Eki 2022
Mesajlar
8,740
Çözümler
12
Tepkime puanı
6,306
Puanları
113
Yaş
28

Metin2 Offline Shop Crash Fix Rehberi

Metin2 Offline Shop (Çevrimdışı Pazar) sistemlerinde yaşanan crash sorunları genellikle source (C++), SQL veri yapısı ve client-server paket uyumsuzluklarından kaynaklanır.

Aşağıda en sık görülen crash senaryoları ve nokta atışı çözüm yöntemleri yer almaktadır.


1. Item_Proto & SQL Veri Tipi Uyumsuzluğu (Channel Crash)

Oyuncu pazara yüksek stack (örneğin 200+ item) koyduğunda kanal (core) çöküyorsa, sorun veri tipi taşmasıdır.

Belirtiler

  • Pazar açarken crash
  • Item eklerken channel down
  • Item çekince sunucu kapanması

Sebep

  • Client: BYTE / short
  • Server: DWORD / int
  • Veri tipi uyuşmazlığı → memory overflow

Çözüm (Source Fix)

Şu dosyaları kontrol edin:

  • packet.h
  • tables.h
  • length.h

Kritik kontrol

  • Item count değişkeni her iki tarafta aynı tip olmalı
  • Önerilen: DWORD / CountType


2. Offline Shop NULL Pointer Crash (Silme / Kapatma Hatası)

Pazar kapatılırken veya süre bitince pointer NULL hatası oluşabilir.

Belirtiler

  • Pazar kapatınca crash
  • syserr içinde RemoveOfflineShop hatası
  • Kanal aniden kapanır

Sebep

  • Shop nesnesi silinmiş ama referans hâlâ kullanılıyor
  • NULL pointer kontrolü yok

Çözüm (C++ Source Fix)

offlineshop.cpp / offlineshop_manager.cpp içine kontrol ekleyin:


if (!pShop)
{
sys_err("OfflineShop: Shop nesnesi bulunamadi, islem iptal edildi.");
return;
}



Ek öneri

  • Shop silinmeden önce tüm effect / NPC bağlantıları kapatılmalı
  • M2_DELETE işlemleri doğru sırada yapılmalı


3. Pazar İsmi & SQL Injection / String Crash

Uzun veya özel karakter içeren pazar isimleri crash sebebidir.

Belirtiler

  • Pazar açarken crash
  • Boş isim girince çökme
  • Özel karakter kullanınca channel down

Sebep

  • SQL injection riski
  • String overflow
  • Boş/invalid input

Çözüm (Source Fix)


if (strlen(szSign) < 3 || strlen(szSign) > 32)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Pazar adi cok kisa veya cok uzun!");
return;
}

char szSignString[256];
DBManager::instance().EscapeString(szSignString, sizeof(szSignString), szSign, strlen(szSign));



Sonuç

  • Uzun isim engellenir
  • SQL injection önlenir
  • Crash riski düşer


4. Grid (Slot) Çakışma / Dupe Crash

Offline shop sisteminde item yerleşimi kontrol edilmezse slot üst üste binmesi olur ve server crash verir.

Belirtiler

  • Item taşıma sırasında crash
  • Pazar açarken çökme
  • Item duplication hataları

Sebep

  • Slot kontrolü yok
  • Aynı grid'e iki item yerleşiyor

Çözüm

  • IsEmptyItemGrid kontrolü aktif olmalı
  • Slot doluysa işlem return; ile kesilmeli


5. syserr.txt ile Crash Analizi

Offline shop hatalarını çözmenin en hızlı yolu syserr log analizidir.

Log yorumlama

SQL kaynaklı hata:

  • TABLE_POSTFIX
  • Query

Packet / Source hatası:

  • CPythonNetworkStream
  • Packet

Öneri

  • Her crash sonrası syserr son satırları kontrol edilmelidir
  • Hangi sistemin crash verdiği tespit edilmelidir


En Yaygın Offline Shop Crash Nedenleri

  • Item count veri tipi uyuşmazlığı
  • NULL pointer (shop delete bug)
  • Pazar ismi overflow / SQL injection
  • Slot (grid) çakışması
  • Packet size mismatch
  • Source-side memory leak
  • Yanlış shop destroy sırası


Sonuç

Metin2 Offline Shop crash, genellikle 3 ana kaynaktan oluşur:

  • Source (C++ logic hataları)
  • SQL veri uyumsuzluğu
  • Client-server packet mismatch

En kritik fixler:

  • Pointer NULL kontrolü
  • DWORD veri tipi standardizasyonu
  • Grid kontrol sistemi
  • String input filtreleme

Doğru log analizi ile sorun %100 nokta atışı çözülebilir.
 
Üst
Reklam Ver
R10dev.net'i ana ekrana ekle!