Bu hata AFFECT_NUM 64 değeri aşıldığında karşılaşabileceğiniz bir hata NUM değerini arttırsanızda bu hata kalkmaz çünkü diğer dosyalarda 64 olarak ayarlanmış şekilde duruyor bunu nasıl düzenleyebilirsiniz bu konuda onu gösteriyorum
Syserri veren kod bloğu şu şekilde
AffectFlagContainer.cpp;
Burada uPos değeri var olan AFFECT_NUM'dan büyük ise veya eşit ise bu hatayı verdirtecek bir kod mevcut BYTE_SIZE değeri şuanda 8'e eşit
Burada BYTE_SIZE değerini yükseltecek herhangi bir değişiklik yapmanız gerekiyor isterseniz BIT_SIZE değerini yükseltin. İsterseniz oradaki matematik işlemini değiştirin
Yapmanız gereken sadece
Instancebase.h içindeki AFFECT_NUM = xx, değerini +1 geçecek şekilde ayarlamak
AFFECT_NUM = 99 ise BYTE_SIZE = BIT_SIZE/8+(1*(4*23), Şeklinde yapabilirsiniz size kalmış birşey matematik kısmını istediğiniz gibi değiştirebilirsiniz.
MaviAyGames | CAffectFlagContainer::IsSet(uPos=64>64 Syserr Fix
Metin2 özel sunucu geliştirme sürecinde karşılaşılan CAffectFlagContainer::IsSet(uPos=64>64) hatası oldukça yaygın bir sistemsel sorundur. Bu hata genellikle özel sunucularda afekt sistemlerinde sınırların aşılması veya veri yapılarının hatalı tanımlanmasından kaynaklanmaktadır. Bu yazıda, MaviAyGames tarafından paylaşılan fix yöntemi üzerinden bu hatayı nasıl çözeceğimizi detaylıca inceleyeceğiz.
Hatanın Tanımı:
CAffectFlagContainer::IsSet(uPos=64>64) hatası, C++ tabanlı game server üzerinde afekt flag kontrolü yapılırken, uPos parametresinin 64 bitlik kapasiteyi aştığında ortaya çıkar. Bu durumda sistem, flag değerini doğru şekilde okuyamaz ve hata mesajı üretir. Bu tür hatalar genellikle PvP sistemlerinde veya özel afektlerin tanımlandığı modülasyonlarda daha sık görülür.
Sorunun Temeli:
Bu hata genellikle CAffectFlagContainer sınıfının IsSet fonksiyonunda tanımlanan bit sayısının, afekt sisteminde tanımlanan maksimum flag sayısını aşmaması nedeniyle meydana gelir. Metin2 özel sunucularında bu değer genellikle 64 olarak sabitlenmiştir. Ancak bazı özel sistemlerde bu değerin 128 veya daha fazlasına çıkması gerekebilir. Bu durumda, flag kontrolleri sırasında overflow hatası alınır.
Fix Yöntemi:
MaviAyGames tarafından önerilen fix yöntemi, CAffectFlagContainer sınıfının kapasitesini artırmaktadır. Bunun için game/src/char_affect.cpp veya benzeri dosyalarda bulunan CAffectFlagContainer sınıf tanımını genişletmek gerekir. std::bitset<64> olan kısım, örneğin std::bitset<128> olarak değiştirilmelidir. Bu sayede daha fazla flag tanımlanabilir ve IsSet fonksiyonu daha yüksek uPos değerlerini destekleyebilir.
Uygulama Adımları:
- src/char_affect.h dosyasında CAffectFlagContainer sınıfının tanımında bulunan bitset boyutunu artırın.
- game/src/char_affect.cpp dosyasındaki ilgili fonksiyonları güncelleyin.
- Compile işlemini tekrar yapın ve test edin.
Ekstra Güvenlik Önlemleri:
Server-side güvenlik önlemleri olarak, flag değerlerinin bounds check işlemine tabi tutulması da önemlidir. Bu sayede sistemsel hatalar azaltılır ve daha stabil bir afekt sistemi çalıştırılır. Metin2 özel sunucularında afekt yönetimi, C++ seviyesinde detaylı planlama gerektirir. Bu tip hataların çözümü, server src üzerinde yapılan küçük ama dikkatli değişikliklerle mümkündür.
Sonuç:
CAffectFlagContainer::IsSet(uPos=64>64) hatası, Metin2 özel sunucularında karşılaşılabilecek bir sistemsel hatadır. MaviAyGames tarafından sağlanan fix yöntemi ile bu hata kolayca çözülebilir. Ancak bu tür değişikliklerin dikkatli yapılması ve test edilmesi gereklidir. Server-side geliştirme yaparken her zaman yedek almak ve test sunucusunda denemek önemlidir.
MaviAyGames | CAffectFlagContainer::IsSet(uPos=64>64) Syserr Fix
Metin2 private server development process includes a common issue: CAffectFlagContainer::IsSet(uPos=64>64). This error typically occurs due to exceeding boundaries in affect systems or incorrect data structure definitions on custom servers. In this article, we will examine how to solve this issue in detail using the fix method shared by MaviAyGames.
Error Definition:
CAffectFlagContainer::IsSet(uPos=64>64) error appears when the uPos parameter exceeds the 64-bit capacity during affect flag checks on C++ based game server. The system cannot read the flag value correctly, thus producing an error message. Such errors are commonly seen in PvP systems or custom affect implementations.
Root Cause:
This error usually stems from the defined bit count in the CAffectFlagContainer class's IsSet function not being sufficient for the maximum number of flags defined in the affect system. In Metin2 private servers, this value is generally fixed at 64. However, some custom systems may require increasing this value to 128 or higher. In such cases, an overflow error occurs during flag checks.
Fix Method:
The fix suggested by MaviAyGames increases the capacity of the CAffectFlagContainer class. To achieve this, expand the CAffectFlagContainer class definition found in files like game/src/char_affect.cpp. Change the std::bitset<64> part to std::bitset<128> for instance. This allows more flags to be defined and enables the IsSet function to support higher uPos values.
Implementation Steps:
- Increase the bitset size in the CAffectFlagContainer class definition in src/char_affect.h.
- Update related functions in game/src/char_affect.cpp.
- Re-compile and test.
Additional Security Measures:
As server-side security measures, performing bounds check operations on flag values is also important. This reduces system errors and ensures a more stable affect system. Managing affects in Metin2 private servers requires detailed planning at the C++ level. Solving these types of errors is possible with small but careful modifications in server src.
Conclusion:
CAffectFlagContainer::IsSet(uPos=64>64) is a system error that can occur in Metin2 private servers. This error can easily be resolved using the fix provided by MaviAyGames. However, such changes must be made carefully and tested. When doing server-side development, always take backups and test on a test server.
Syserri veren kod bloğu şu şekilde
AffectFlagContainer.cpp;
Kod:
bool CAffectFlagContainer::IsSet(UINT uPos) const { if (uPos/8>=BYTE_SIZE) { TraceError("CAffectFlagContainer::IsSet(uPos=%d>%d", uPos, BYTE_SIZE*8); return false; } const BYTE& c_rElement=m_aElement[uPos/8]; BYTE bMask=BYTE(1<<(uPos&7)); if (c_rElement&bMask) return true; return false; }
Burada uPos değeri var olan AFFECT_NUM'dan büyük ise veya eşit ise bu hatayı verdirtecek bir kod mevcut BYTE_SIZE değeri şuanda 8'e eşit
Kod:
enum { BIT_SIZE = 64, BYTE_SIZE = BIT_SIZE/8+(1*((BIT_SIZE&7) ? 1 : 0)), };
Burada BYTE_SIZE değerini yükseltecek herhangi bir değişiklik yapmanız gerekiyor isterseniz BIT_SIZE değerini yükseltin. İsterseniz oradaki matematik işlemini değiştirin
Yapmanız gereken sadece
Instancebase.h içindeki AFFECT_NUM = xx, değerini +1 geçecek şekilde ayarlamak
AFFECT_NUM = 99 ise BYTE_SIZE = BIT_SIZE/8+(1*(4*23), Şeklinde yapabilirsiniz size kalmış birşey matematik kısmını istediğiniz gibi değiştirebilirsiniz.
MaviAyGames | CAffectFlagContainer::IsSet(uPos=64>64 Syserr Fix
Metin2 özel sunucu geliştirme sürecinde karşılaşılan CAffectFlagContainer::IsSet(uPos=64>64) hatası oldukça yaygın bir sistemsel sorundur. Bu hata genellikle özel sunucularda afekt sistemlerinde sınırların aşılması veya veri yapılarının hatalı tanımlanmasından kaynaklanmaktadır. Bu yazıda, MaviAyGames tarafından paylaşılan fix yöntemi üzerinden bu hatayı nasıl çözeceğimizi detaylıca inceleyeceğiz.
Hatanın Tanımı:
CAffectFlagContainer::IsSet(uPos=64>64) hatası, C++ tabanlı game server üzerinde afekt flag kontrolü yapılırken, uPos parametresinin 64 bitlik kapasiteyi aştığında ortaya çıkar. Bu durumda sistem, flag değerini doğru şekilde okuyamaz ve hata mesajı üretir. Bu tür hatalar genellikle PvP sistemlerinde veya özel afektlerin tanımlandığı modülasyonlarda daha sık görülür.
Sorunun Temeli:
Bu hata genellikle CAffectFlagContainer sınıfının IsSet fonksiyonunda tanımlanan bit sayısının, afekt sisteminde tanımlanan maksimum flag sayısını aşmaması nedeniyle meydana gelir. Metin2 özel sunucularında bu değer genellikle 64 olarak sabitlenmiştir. Ancak bazı özel sistemlerde bu değerin 128 veya daha fazlasına çıkması gerekebilir. Bu durumda, flag kontrolleri sırasında overflow hatası alınır.
Fix Yöntemi:
MaviAyGames tarafından önerilen fix yöntemi, CAffectFlagContainer sınıfının kapasitesini artırmaktadır. Bunun için game/src/char_affect.cpp veya benzeri dosyalarda bulunan CAffectFlagContainer sınıf tanımını genişletmek gerekir. std::bitset<64> olan kısım, örneğin std::bitset<128> olarak değiştirilmelidir. Bu sayede daha fazla flag tanımlanabilir ve IsSet fonksiyonu daha yüksek uPos değerlerini destekleyebilir.
Uygulama Adımları:
- src/char_affect.h dosyasında CAffectFlagContainer sınıfının tanımında bulunan bitset boyutunu artırın.
- game/src/char_affect.cpp dosyasındaki ilgili fonksiyonları güncelleyin.
- Compile işlemini tekrar yapın ve test edin.
Ekstra Güvenlik Önlemleri:
Server-side güvenlik önlemleri olarak, flag değerlerinin bounds check işlemine tabi tutulması da önemlidir. Bu sayede sistemsel hatalar azaltılır ve daha stabil bir afekt sistemi çalıştırılır. Metin2 özel sunucularında afekt yönetimi, C++ seviyesinde detaylı planlama gerektirir. Bu tip hataların çözümü, server src üzerinde yapılan küçük ama dikkatli değişikliklerle mümkündür.
Sonuç:
CAffectFlagContainer::IsSet(uPos=64>64) hatası, Metin2 özel sunucularında karşılaşılabilecek bir sistemsel hatadır. MaviAyGames tarafından sağlanan fix yöntemi ile bu hata kolayca çözülebilir. Ancak bu tür değişikliklerin dikkatli yapılması ve test edilmesi gereklidir. Server-side geliştirme yaparken her zaman yedek almak ve test sunucusunda denemek önemlidir.
MaviAyGames | CAffectFlagContainer::IsSet(uPos=64>64) Syserr Fix
Metin2 private server development process includes a common issue: CAffectFlagContainer::IsSet(uPos=64>64). This error typically occurs due to exceeding boundaries in affect systems or incorrect data structure definitions on custom servers. In this article, we will examine how to solve this issue in detail using the fix method shared by MaviAyGames.
Error Definition:
CAffectFlagContainer::IsSet(uPos=64>64) error appears when the uPos parameter exceeds the 64-bit capacity during affect flag checks on C++ based game server. The system cannot read the flag value correctly, thus producing an error message. Such errors are commonly seen in PvP systems or custom affect implementations.
Root Cause:
This error usually stems from the defined bit count in the CAffectFlagContainer class's IsSet function not being sufficient for the maximum number of flags defined in the affect system. In Metin2 private servers, this value is generally fixed at 64. However, some custom systems may require increasing this value to 128 or higher. In such cases, an overflow error occurs during flag checks.
Fix Method:
The fix suggested by MaviAyGames increases the capacity of the CAffectFlagContainer class. To achieve this, expand the CAffectFlagContainer class definition found in files like game/src/char_affect.cpp. Change the std::bitset<64> part to std::bitset<128> for instance. This allows more flags to be defined and enables the IsSet function to support higher uPos values.
Implementation Steps:
- Increase the bitset size in the CAffectFlagContainer class definition in src/char_affect.h.
- Update related functions in game/src/char_affect.cpp.
- Re-compile and test.
Additional Security Measures:
As server-side security measures, performing bounds check operations on flag values is also important. This reduces system errors and ensures a more stable affect system. Managing affects in Metin2 private servers requires detailed planning at the C++ level. Solving these types of errors is possible with small but careful modifications in server src.
Conclusion:
CAffectFlagContainer::IsSet(uPos=64>64) is a system error that can occur in Metin2 private servers. This error can easily be resolved using the fix provided by MaviAyGames. However, such changes must be made carefully and tested. When doing server-side development, always take backups and test on a test server.
