Merhaba bugün dereceye göre bonus sistemi yazarken fark ettiğim küçük bir düzeltmeden bahsedeceğim.
GameMaster hesabınızdayken kendi derecenizi istediğiniz şekilde değiştirip yükseltebiliyorsunuz.
Ama başka bir oyuncuyu değiştirdiğiniz de değerler saçmalıyor.
Bknz:
GameMaster hesabınızdayken kendi derecenizi istediğiniz şekilde değiştirip yükseltebiliyorsunuz.
Ama başka bir oyuncuyu değiştirdiğiniz de değerler saçmalıyor.
Bknz:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Bunun sebebi ise cmd_gm.cpp de karşı oyuncunun derecesini değiştirirken komut yazdığınız hesabın derecesini almaktadır.
Paylaştığım şeyi uyguladıktan sonra sorun çözülmüş olacaktır.
Düzeltmeden sonraki hali:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
C++ GameMaster UpdateAlignment Fix Nedir?
Metin2 özel sunucularında geliştirme yaparken karşılaşılan yaygın hatalardan birisi UpdateAlignment fonksiyonunun GameMaster (GM) karakterler üzerinde düzgün çalışmamasıdır. Bu durum, GM karakterlerin oyuncu listesindeki_alignment değerlerinin güncellenmemesiyle sonuçlanabilir. Bu yazıda, C++ tabanlı Metin2 sunucu kaynak kodlarında UpdateAlignment hatasını nasıl düzelteceğimizi adım adım inceleyeceğiz.
Metin2'de Alignment Sistemi
Metin2 oyununda alignment (alignment), oyuncuların kanunsuzluk veya adalet puanlarına göre sınıflandırılmasıdır. Oyuncular kanunsuz davranışlar yaptıkça alignment azalır ve kanunsuz karakter haline gelirler. GM karakterler ise genellikle özel yetkilere sahip oldukları için bu sisteme dahil edilmeyebilir. Ancak bazı durumlarda GM karakterlerin alignment güncellemeleri yapılmazsa, sunucu tarafında tutarsızlıklar oluşabilir.
UpdateAlignment Fonksiyonunun Hatalı Davranışı
Standart Metin2 kaynak kodlarında UpdateAlignment fonksiyonu, oyuncuların alignment değerlerini düzenli olarak veritabanına yazar. Ancak bu fonksiyon bazen GM karakterler üzerinde çalışmaz. Bunun nedeni genellikle GM kontrolü yapan bir if bloğudur. Bu blok, GM karakterlerin alignment değerlerinin asla güncellenmesini engeller. Bu da GM karakterlerin alignment verilerinin eski kalmasına neden olur.
Hatanın Kaynağı
Kaynak kodda CHARACTER::UpdateAlignment() fonksiyonu içinde şu kontroller yer alabilir:
if (GetGMLevel() > GM_PLAYER)
{
return; // GM karakterler için işlem yapma
}
Bu durumda, GM karakterlerin alignment değerleri asla güncellenmez. Bu hata, hem güvenlik hem de oyun içi denge açısından ciddi sorunlara yol açabilir.
C++ Kodlarında UpdateAlignment Fix Uygulaması
Fix için, önce CHARACTER::UpdateAlignment() metodunu inceleyin. Eğer GM kontrolü varsa ve GM karakterlerin alignment değerlerinin güncellenmesini istiyorsanız, bu kontrolü kaldırabilir ya da daha detaylı bir kontrol ekleyebilirsiniz.
// Eski kod
if (GetGMLevel() > GM_PLAYER)
{
return;
}
// Yeni kod (GM karakterler için özel kontrol)
if (GetGMLevel() > GM_PLAYER && !m_bGmUpdateAlignment)
{
return;
}
Yukarıdaki örnekte, m_bGmUpdateAlignment adında bir bayrak tanımlanarak GM karakterlerin alignment değerlerinin güncellenip güncellenmeyeceği belirlenebilir. Bu, daha esnek bir kontrol sağlar.
Veritabanı Güncellemeleri
Bu fix sonrası, alignment değerlerinin doğru şekilde veritabanına yazıldığını test etmelisiniz. Özellikle player veritabanındaki alignment alanının GM karakterler için de düzgün güncellenip güncellenmediğini kontrol edin.
Sonuç
Metin2 özel sunucularında C++ seviyesinde geliştirme yaparken, küçük kod değişiklikleri bile büyük etki yaratabilir. UpdateAlignment fix, özellikle PvP sunucularında GM karakterlerin oyuncularla olan etkileşimlerini daha gerçekçi ve dengeli hale getirmek için önemli bir adımdır. Bu fix sayesinde, GM karakterlerin alignment verileri de doğru şekilde takip edilir ve sunucu içi denge korunur.
Kaynak Kod Editörleri ve Geliştirme Ortamı
Metin2 kaynak kodları genellikle Visual Studio gibi IDE'lerle düzenlenir. C++ bilgisi gerektiren bu işlemlerde, doğru derleme ortamı ve hata ayıklama araçları önemlidir. Martysama gibi topluluklar, bu konuda oldukça destekleyici ve bilgi dolu kaynaklardır. Ayrıca, Metin2 geliştirme sürecinde Python tabanlı GUI sistemleri ve py root klasörleri de aktif olarak kullanılır. Bu yapılar, hem script hem de GUI geliştirme açısından büyük kolaylık sağlar.
What is C++ GameMaster UpdateAlignment Fix?
One of the common issues encountered during Metin2 private server development is the malfunction of the UpdateAlignment function for GameMaster (GM) characters. This issue results in alignment values of GM characters not being updated properly in the player list. In this article, we will examine step by step how to fix the UpdateAlignment bug in C++ based Metin2 server source codes.
Alignment System in Metin2
In Metin2, alignment refers to classifying players based on their lawlessness or justice points. As players engage in unlawful behaviors, their alignment decreases, turning them into lawless characters. GM characters often have special privileges and may be excluded from this system. However, in some cases, if GM character alignment updates are not processed, inconsistencies can occur on the server side.
Faulty Behavior of UpdateAlignment Function
In standard Metin2 source codes, the UpdateAlignment function regularly writes player alignment values to the database. However, this function sometimes fails to work for GM characters. The reason is often an 'if' block that checks for GM status. This block prevents alignment values of GM characters from ever being updated, causing their alignment data to remain outdated.
Source of the Bug
In the source code, inside the CHARACTER::UpdateAlignment() function, there might be checks like:
if (GetGMLevel() > GM_PLAYER)
{
return; // Do not process for GM characters
}
In such cases, alignment values of GM characters are never updated. This error can lead to serious issues regarding both security and in-game balance.
Implementing UpdateAlignment Fix in C++ Code
To fix this, first examine the CHARACTER::UpdateAlignment() method. If there is a GM check and you want GM characters' alignment values to be updated, you can remove this check or add a more detailed condition.
// Old code
if (GetGMLevel() > GM_PLAYER)
{
return;
}
// New code (special control for GM characters)
if (GetGMLevel() > GM_PLAYER && !m_bGmUpdateAlignment)
{
return;
}
In the example above, a flag named m_bGmUpdateAlignment is defined to determine whether GM characters' alignment values should be updated. This provides more flexible control.
Database Updates
After applying this fix, you must test whether alignment values are correctly written to the database. Specifically, check whether the alignment field in the player database is updated correctly for GM characters as well.
Conclusion
When developing Metin2 private servers at the C++ level, small code changes can have significant impacts. The UpdateAlignment fix is an important step to make interactions between GM characters and players more realistic and balanced, especially in PvP servers. With this fix, GM character alignment data is tracked correctly, preserving in-server balance.
Source Code Editors and Development Environment
Metin2 source codes are generally edited using IDEs like Visual Studio. In these operations requiring C++ knowledge, a correct compilation environment and debugging tools are crucial. Communities like Martysama are highly supportive and rich in information on this topic. Moreover, Python-based GUI systems and py root folders are actively used in the Metin2 development process. These structures provide great convenience in both scripting and GUI development.
