- 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.
