Öncelikle herkese selamlar,
55Games olarak Metin2 projelerimizi sonlandırmış bulunmaktayız bundan dolayı bu konu altından hem yaşadığınız sorunlara yardımcı olacağım.
Hem de çeşitli hata çözümlerini bu konu altından sizlerle paylaşacağım.
Konuyu sürekli güncel tutmayı düşünüyorum. Tüm düzenlemeleri bir anda paylaşmayacağım konuya olan ilgiye göre devam edeceğim.
Artık benden Metin2 işleri geçti umarım yeni başlayacak veya bazı şeylere heves eden arkadaşlarımıza yardımcı olabilirim.
1. Düzenleme
ThingInstance.cpp üzerindeki bir TraceError komutundan dolayı clientin aniden kapanması ( Crash )
2. Düzenleme
Client Debug modunda derlenip çalıştırıldığında CANNOT_FIND_PACK_FILE kısmında ses dosyalarının dışında tüm efektlerin ses dosyasını oyunun okumaya çalışmasından dolayı .mss diye syserr.txt / log.txt 'nizin dolması.
Yapılan düzenleme sadece gerçek eksikleri görebilmek için .mss hatalarını gizlemektedir. Ses dosyalarının okuma mantığı değiştirilerek çözüm uygulanabilir fakat bunu paylaşmayacağım. Yöntemi ve olayı burada bildirdim zaten.
EterPackManager.cpp
3. Düzenleme
PythonWindow.cpp üzerinde Button 'daki Up, Down, Over, Disable fonksiyonlarındaki çok nadir durumlarda oluşabilen aniden client kapanmasının çözümü ( Crash )
4. Düzenleme
TextureSet.cpp üzerinde pointerin null gelmesinden dolayı oluşan aniden client kapanmasının çözümü ( Crash )
Ekstra
Metin2 Toplu Hata Düzenlemeleri
Metin2 özel sunucu geliştirme sürecinde karşılaşılan en yaygın sorunlardan birisi hataların tekrarlanmasıdır. Özellikle büyük sistemlerde, binlerce satırlık kodlarda küçük yazım hataları ya da eksik yapılandırmalar ciddi performans ve güvenlik problemlerine neden olabilir. Bu makalede, Metin2 özel sunucularında karşılaşılan hataları hızlıca tespit edip toplu olarak nasıl düzelteceğimizi ele alacağız. Amacımız, Metin2 Lobby gibi platformlarda sunucu geliştirme sürecini hızlandırmak ve daha verimli hale getirmektir.
Toplu Hata Türleri Nelerdir?
Metin2 özel sunucularında genellikle şu tür hatalar yoğunlaşır:
- Sunucu çökmesine sebep olan bellek sızıntısı hataları
- Client ile Auth/Game sunucu arasında bağlantı kopması
- DB tablosu eksiklikleri
- Python GUI hataları ve komut yorumlayıcı hataları
- C++ sistemlerde referans hatası veya pointer kullanımı
Bu hataların çoğu tekrarlayan doğada olduğu için otomatik tespit ve düzeltme süreçleri geliştirilebilir.
C++ Kaynak Kodlarında Toplu Hata Ayıklama
Metin2 sunucu çekirdeği genellikle C++ dilinde yazılmıştır. Büyük projelerde kod kalitesini artırmak ve hataları minimize etmek için statik analiz araçları kullanılmalıdır. Örneğin, cppcheck gibi araçlar ile tüm projeyi tarayıp yaygın hataları listeleyebilirsiniz. Ayrıca, bazı durumlarda valgrind kullanarak bellek sızıntılarını da tespit edebilirsiniz.
Örnek olarak, bir çok dosyada tekrarlayan bir pointer hatası varsa, bu hatayı otomatik olarak bulup düzeltmeniz mümkündür. Öncelikle tüm proje boyunca belirli bir kalıp aramak için grep komutunu kullanabilirsiniz:
Bu sayede, silinen bir pointer'ı tekrar kullanma riski olan kod bloklarını kolayca görebilirsiniz.
Python Sistemlerinde Hata Ayıklama
Metin2 client tarafında genellikle Python dili kullanılır. Özellikle UI script'leri (uiscript), py root ve GUI sistemleri üzerinde çalışan geliştiriciler, hatalı sözdizimi ve modül eksikliği gibi sık rastlanan sorunlarla karşılaşabilir. Bu tür hataları toplu olarak tespit etmek için pylint veya flake8 gibi araçlar kullanılabilir.
Python sistemlerinde karşılaşılan yaygın hatalar şunlardır:
- Tanımsız değişken kullanımı
- Modül içeri aktarma hataları
- Dosya yolu tanımları eksikliği
Bu hataları toplu şekilde düzeltmek için, bir bash betiği veya Python script'i ile proje dizinindeki tüm .py uzantılı dosyaları tarayabilirsiniz. Örnek bir komut:
DB ve Oyun Veri Hataları
Metin2 özel sunucularda veritabanı, oyun içi verilerin tutulduğu temel yapıdır. Eksik tablo tanımları, yanlış veri türleri veya eksik foreign key tanımları gibi hatalar, sunucu başlatılırken hata vermeye neden olabilir. Bu tür hataların toplu olarak düzeltilmesi için, öncelikle tüm tabloları ve ilişkileri kontrol eden bir SQL sorgusu yazmanız gerekir.
Ayrıca, game ve auth sunucuları arasındaki veri uyumsuzluğu da sık karşılaşılan bir diğer sorundur. Bu tür sorunları çözmek için, iki veritabanını senkronize eden bir betik yazabilirsiniz. Bu betik, iki sunucudaki ortak tabloları karşılaştırarak farkları listeler.
Otomatikleştirme ile Geliştirme Sürecini Hızlandırma
Tüm bu hataları manuel olarak düzeltmek zaman alıcıdır. Bu yüzden, geliştiricilerin kendi araçlarını geliştirmesi önemlidir. Örneğin, bir bash veya python betiği ile proje dosyalarını tarayıp, belirli hata kalıplarını otomatik olarak düzeltebilirsiniz. Bu tür otomasyonlar, hem zaman kazandırır hem de insan kaynaklı hataları azaltır.
Metin2 özel sunucu geliştirme sürecinde, hata ayıklama ve onarma işlemleri büyük bir zaman tasarrufu sağlar. Bu makalede bahsedilen yöntemleri uygulayarak, Metin2 Lobby gibi platformlarda daha stabil ve güvenli sunucular geliştirebilirsiniz.
Metin2 Bulk Error Corrections
One of the most common issues encountered during Metin2 private server development is the recurrence of errors. Especially in large-scale systems with thousands of code lines, minor typos or misconfigurations can cause serious performance and security issues. In this article, we will discuss how to quickly identify and correct recurring errors in Metin2 private servers in bulk. Our goal is to speed up and make the server development process more efficient on platforms like Metin2 Lobby.
What Are Common Bulk Errors?
In Metin2 private servers, you typically encounter these types of errors:
- Memory leak errors causing server crashes
- Disconnection between Client and Auth/Game servers
- Missing DB table definitions
- Python GUI errors and command parser issues
- Reference or pointer usage errors in C++ systems
Most of these errors are repetitive in nature, so automated detection and correction processes can be developed.
Bulk Debugging in C++ Source Code
The Metin2 server core is mostly written in C++. To improve code quality and reduce errors in large projects, static analysis tools should be used. For instance, tools like cppcheck can scan the entire project and list common errors. Additionally, valgrind can be used to detect memory leaks in some cases.
As an example, if there's a repeated pointer error across multiple files, you can automatically find and fix that error. First, you can use the grep command to search for a specific pattern throughout the project:
This way, you can easily spot code blocks where a deleted pointer might be used again, posing a risk.
Debugging in Python Systems
On the Metin2 client side, Python language is commonly used. Developers working on UI scripts (uiscript), py root, and GUI systems may face common issues such as syntax errors or missing modules. To detect such errors in bulk, tools like pylint or flake8 can be used.
Common errors in Python systems include:
- Undefined variable usage
- Module import errors
- Missing file path definitions
To fix these errors in bulk, you can scan all .py files in your project directory using a bash script or Python script. Example command:
Database and Game Data Errors
In Metin2 private servers, the database is the fundamental structure storing in-game data. Missing table definitions, incorrect data types, or missing foreign key definitions can cause errors during server startup. To correct such errors in bulk, you first need to write an SQL query that checks all tables and their relationships.
Additionally, data inconsistency between game and auth servers is another frequent issue. To solve this, you can write a script that synchronizes the two databases by comparing common tables and listing differences.
Speeding Up Development Through Automation
Correcting all these errors manually is time-consuming. Therefore, developers must create their own tools. For example, using a bash or python script, you can scan project files and automatically fix certain error patterns. Such automation saves time and reduces human error.
In the Metin2 private server development process, debugging and fixing errors provide significant time savings. By applying the methods mentioned in this article, you can develop more stable and secure servers on platforms like Metin2 Lobby.
55Games olarak Metin2 projelerimizi sonlandırmış bulunmaktayız bundan dolayı bu konu altından hem yaşadığınız sorunlara yardımcı olacağım.
Hem de çeşitli hata çözümlerini bu konu altından sizlerle paylaşacağım.
Konuyu sürekli güncel tutmayı düşünüyorum. Tüm düzenlemeleri bir anda paylaşmayacağım konuya olan ilgiye göre devam edeceğim.
Artık benden Metin2 işleri geçti umarım yeni başlayacak veya bazı şeylere heves eden arkadaşlarımıza yardımcı olabilirim.
1. Düzenleme
ThingInstance.cpp üzerindeki bir TraceError komutundan dolayı clientin aniden kapanması ( Crash )
Kod:
void CGraphicThingInstance::RegisterModelThing // Aratın if (!CheckModelThingIndex(iModelThing)) { if (pModelThing) TraceError("CGraphicThingInstance::RegisterModelThing(iModelThing=%d, pModelThing=%s)\n", iModelThing, pModelThing->GetFileName()); return; } // Bu şekilde değiştirin.
2. Düzenleme
Client Debug modunda derlenip çalıştırıldığında CANNOT_FIND_PACK_FILE kısmında ses dosyalarının dışında tüm efektlerin ses dosyasını oyunun okumaya çalışmasından dolayı .mss diye syserr.txt / log.txt 'nizin dolması.
Yapılan düzenleme sadece gerçek eksikleri görebilmek için .mss hatalarını gizlemektedir. Ses dosyalarının okuma mantığı değiştirilerek çözüm uygulanabilir fakat bunu paylaşmayacağım. Yöntemi ve olayı burada bildirdim zaten.
EterPackManager.cpp
Kod:
#ifdef _DEBUG if (strFileName.find("mss") == std::string::npos) TraceError("CANNOT_FIND_PACK_FILE [%s]", strFileName.c_str()); #endif // Bu şekilde değiştirin.
3. Düzenleme
PythonWindow.cpp üzerinde Button 'daki Up, Down, Over, Disable fonksiyonlarındaki çok nadir durumlarda oluşabilen aniden client kapanmasının çözümü ( Crash )
Kod:
BOOL CButton::SetUpVisual(const char* c_szFileName) { CResource* pResource = CResourceManager::Instance().GetResourcePointer(c_szFileName); if (!pResource || !pResource->IsType(CGraphicImage::Type())) return FALSE; m_upVisual.SetImagePointer(static_cast<CGraphicImage*>(pResource)); if (m_upVisual.IsEmpty()) return FALSE; SetSize(m_upVisual.GetWidth(), m_upVisual.GetHeight()); SetCurrentVisual(&m_upVisual); return TRUE; } BOOL CButton::SetOverVisual(const char* c_szFileName) { CResource* pResource = CResourceManager::Instance().GetResourcePointer(c_szFileName); if (!pResource || !pResource->IsType(CGraphicImage::Type())) return FALSE; m_overVisual.SetImagePointer(static_cast<CGraphicImage*>(pResource)); if (m_overVisual.IsEmpty()) return FALSE; SetSize(m_overVisual.GetWidth(), m_overVisual.GetHeight()); return TRUE; } BOOL CButton::SetDownVisual(const char* c_szFileName) { CResource* pResource = CResourceManager::Instance().GetResourcePointer(c_szFileName); if (!pResource || !pResource->IsType(CGraphicImage::Type())) return FALSE; m_downVisual.SetImagePointer(static_cast<CGraphicImage*>(pResource)); if (m_downVisual.IsEmpty()) return FALSE; SetSize(m_downVisual.GetWidth(), m_downVisual.GetHeight()); return TRUE; } BOOL CButton::SetDisableVisual(const char* c_szFileName) { CResource* pResource = CResourceManager::Instance().GetResourcePointer(c_szFileName); if (!pResource || !pResource->IsType(CGraphicImage::Type())) return FALSE; m_disableVisual.SetImagePointer(static_cast<CGraphicImage*>(pResource)); if (m_downVisual.IsEmpty()) return FALSE; SetSize(m_disableVisual.GetWidth(), m_disableVisual.GetHeight()); return TRUE; } // Bu kısmı direkt bu şekilde değiştirin.
4. Düzenleme
TextureSet.cpp üzerinde pointerin null gelmesinden dolayı oluşan aniden client kapanmasının çözümü ( Crash )
Kod:
bool CTextureSet::SetTexture // içerisinde CResource* pResource = CResourceManager::Instance().GetResourcePointer(c_szFileName); // Altına aşağıdaki kodu ekle. if (!pResource) return false; ///////////////////////////////////////////////// bool CTextureSet::AddTexture // içerisinde CResource* pResource = CResourceManager::Instance().GetResourcePointer(c_szFileName); // Altına aşağıdaki kodu ekle. if (!pResource) return false;
Ekstra
Metin2 Toplu Hata Düzenlemeleri
Metin2 özel sunucu geliştirme sürecinde karşılaşılan en yaygın sorunlardan birisi hataların tekrarlanmasıdır. Özellikle büyük sistemlerde, binlerce satırlık kodlarda küçük yazım hataları ya da eksik yapılandırmalar ciddi performans ve güvenlik problemlerine neden olabilir. Bu makalede, Metin2 özel sunucularında karşılaşılan hataları hızlıca tespit edip toplu olarak nasıl düzelteceğimizi ele alacağız. Amacımız, Metin2 Lobby gibi platformlarda sunucu geliştirme sürecini hızlandırmak ve daha verimli hale getirmektir.
Toplu Hata Türleri Nelerdir?
Metin2 özel sunucularında genellikle şu tür hatalar yoğunlaşır:
- Sunucu çökmesine sebep olan bellek sızıntısı hataları
- Client ile Auth/Game sunucu arasında bağlantı kopması
- DB tablosu eksiklikleri
- Python GUI hataları ve komut yorumlayıcı hataları
- C++ sistemlerde referans hatası veya pointer kullanımı
Bu hataların çoğu tekrarlayan doğada olduğu için otomatik tespit ve düzeltme süreçleri geliştirilebilir.
C++ Kaynak Kodlarında Toplu Hata Ayıklama
Metin2 sunucu çekirdeği genellikle C++ dilinde yazılmıştır. Büyük projelerde kod kalitesini artırmak ve hataları minimize etmek için statik analiz araçları kullanılmalıdır. Örneğin, cppcheck gibi araçlar ile tüm projeyi tarayıp yaygın hataları listeleyebilirsiniz. Ayrıca, bazı durumlarda valgrind kullanarak bellek sızıntılarını da tespit edebilirsiniz.
Örnek olarak, bir çok dosyada tekrarlayan bir pointer hatası varsa, bu hatayı otomatik olarak bulup düzeltmeniz mümkündür. Öncelikle tüm proje boyunca belirli bir kalıp aramak için grep komutunu kullanabilirsiniz:
Kod:
grep -r 'delete ptr' ./src/
Bu sayede, silinen bir pointer'ı tekrar kullanma riski olan kod bloklarını kolayca görebilirsiniz.
Python Sistemlerinde Hata Ayıklama
Metin2 client tarafında genellikle Python dili kullanılır. Özellikle UI script'leri (uiscript), py root ve GUI sistemleri üzerinde çalışan geliştiriciler, hatalı sözdizimi ve modül eksikliği gibi sık rastlanan sorunlarla karşılaşabilir. Bu tür hataları toplu olarak tespit etmek için pylint veya flake8 gibi araçlar kullanılabilir.
Python sistemlerinde karşılaşılan yaygın hatalar şunlardır:
- Tanımsız değişken kullanımı
- Modül içeri aktarma hataları
- Dosya yolu tanımları eksikliği
Bu hataları toplu şekilde düzeltmek için, bir bash betiği veya Python script'i ile proje dizinindeki tüm .py uzantılı dosyaları tarayabilirsiniz. Örnek bir komut:
Kod:
find ./root/ -name '*.py' -exec pylint {} \;
DB ve Oyun Veri Hataları
Metin2 özel sunucularda veritabanı, oyun içi verilerin tutulduğu temel yapıdır. Eksik tablo tanımları, yanlış veri türleri veya eksik foreign key tanımları gibi hatalar, sunucu başlatılırken hata vermeye neden olabilir. Bu tür hataların toplu olarak düzeltilmesi için, öncelikle tüm tabloları ve ilişkileri kontrol eden bir SQL sorgusu yazmanız gerekir.
Ayrıca, game ve auth sunucuları arasındaki veri uyumsuzluğu da sık karşılaşılan bir diğer sorundur. Bu tür sorunları çözmek için, iki veritabanını senkronize eden bir betik yazabilirsiniz. Bu betik, iki sunucudaki ortak tabloları karşılaştırarak farkları listeler.
Otomatikleştirme ile Geliştirme Sürecini Hızlandırma
Tüm bu hataları manuel olarak düzeltmek zaman alıcıdır. Bu yüzden, geliştiricilerin kendi araçlarını geliştirmesi önemlidir. Örneğin, bir bash veya python betiği ile proje dosyalarını tarayıp, belirli hata kalıplarını otomatik olarak düzeltebilirsiniz. Bu tür otomasyonlar, hem zaman kazandırır hem de insan kaynaklı hataları azaltır.
Metin2 özel sunucu geliştirme sürecinde, hata ayıklama ve onarma işlemleri büyük bir zaman tasarrufu sağlar. Bu makalede bahsedilen yöntemleri uygulayarak, Metin2 Lobby gibi platformlarda daha stabil ve güvenli sunucular geliştirebilirsiniz.
Metin2 Bulk Error Corrections
One of the most common issues encountered during Metin2 private server development is the recurrence of errors. Especially in large-scale systems with thousands of code lines, minor typos or misconfigurations can cause serious performance and security issues. In this article, we will discuss how to quickly identify and correct recurring errors in Metin2 private servers in bulk. Our goal is to speed up and make the server development process more efficient on platforms like Metin2 Lobby.
What Are Common Bulk Errors?
In Metin2 private servers, you typically encounter these types of errors:
- Memory leak errors causing server crashes
- Disconnection between Client and Auth/Game servers
- Missing DB table definitions
- Python GUI errors and command parser issues
- Reference or pointer usage errors in C++ systems
Most of these errors are repetitive in nature, so automated detection and correction processes can be developed.
Bulk Debugging in C++ Source Code
The Metin2 server core is mostly written in C++. To improve code quality and reduce errors in large projects, static analysis tools should be used. For instance, tools like cppcheck can scan the entire project and list common errors. Additionally, valgrind can be used to detect memory leaks in some cases.
As an example, if there's a repeated pointer error across multiple files, you can automatically find and fix that error. First, you can use the grep command to search for a specific pattern throughout the project:
Kod:
grep -r 'delete ptr' ./src/
This way, you can easily spot code blocks where a deleted pointer might be used again, posing a risk.
Debugging in Python Systems
On the Metin2 client side, Python language is commonly used. Developers working on UI scripts (uiscript), py root, and GUI systems may face common issues such as syntax errors or missing modules. To detect such errors in bulk, tools like pylint or flake8 can be used.
Common errors in Python systems include:
- Undefined variable usage
- Module import errors
- Missing file path definitions
To fix these errors in bulk, you can scan all .py files in your project directory using a bash script or Python script. Example command:
Kod:
find ./root/ -name '*.py' -exec pylint {} \;
Database and Game Data Errors
In Metin2 private servers, the database is the fundamental structure storing in-game data. Missing table definitions, incorrect data types, or missing foreign key definitions can cause errors during server startup. To correct such errors in bulk, you first need to write an SQL query that checks all tables and their relationships.
Additionally, data inconsistency between game and auth servers is another frequent issue. To solve this, you can write a script that synchronizes the two databases by comparing common tables and listing differences.
Speeding Up Development Through Automation
Correcting all these errors manually is time-consuming. Therefore, developers must create their own tools. For example, using a bash or python script, you can scan project files and automatically fix certain error patterns. Such automation saves time and reduces human error.
In the Metin2 private server development process, debugging and fixing errors provide significant time savings. By applying the methods mentioned in this article, you can develop more stable and secure servers on platforms like Metin2 Lobby.
