[C++] At Skill Bug Fixleme

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 66

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Kendi derlediğim ve deneme sunucu için açılan server'da farkedilen bir bug onun fixlenmesini.

char_skill.cpp

açın

Aratın

Kod:
GetMountVnum

Kod Bloğunu değiştirin.

Kod:
if(GetMountVnum())         {             if( !((GetMountVnum() >= 20101 && GetMountVnum() <= 20205)))                 return true;         }                        if(GetMountVnum()) //Server filesinizde skill kodları farklı ise onları kendinize göre ayarlayın.         {             if( !((GetMountVnum() >= 20209 && GetMountVnum() <= 20212)    ||                 GetMountVnum() == 20215 || GetMountVnum() == 20218 || GetMountVnum() == 20225    )    )                     return false;         }

İyi forumlar ..

C++ ile Metin2 At Skill Bug Fixleme Rehberi


Giriş:
Metin2 özel sunucularında geliştirme yaparken, özellikle yetenek (skill) sistemlerinde meydana gelen buglar oyuncu deneyimini ciddi şekilde etkileyebilir. Bu bağlamda, At Skill sistemi, karakterlerin yetenek seviyesini doğrudan artıran bir özelliktir. Ancak bu sistemin hatalı uygulanması durumunda, skill level geçişlerinde donmalar, hatalı hesaplamalar ya da server çökmeleri gibi ciddi problemler yaşanabilir. Bu yazıda, C++ tabanlı Metin2 sunucularında At Skill buglarını nasıl tespit edip düzelteceğinizi adım adım anlatacağız.

At Skill Sisteminin Yapısı:
At Skill, genellikle bir NPC aracılığıyla aktif edilen ve karakterin belirli bir skill seviyesine anında ulaşmasını sağlayan bir sistemdir. Bu işlem sırasında, client ile auth-server ya da game-server arasında veri transferi yapılır. Hatalar genellikle bu veri akışında meydana gelir. C++ tarafında, bu sistem genellikle game/src/char.cpp, game/src/char_skill.cpp ve game/src/input_main.cpp gibi dosyalarda tanımlanır.

Yaygın At Skill Bugları:
1. Yetenek Seviyesi Taşması: Karakterin skill levelı 60'ı geçmesi gibi durumlar, client tarafında hatalı rendera neden olabilir. Bu durumda, yetenek seviyesi 60'ı geçmemeli veya özel olarak 70, 80 gibi yüksek level desteklenmelidir.
2. Yetenek Puanı Eksiltilmesi: At Skill yapıldığında, skill pointlerin doğru şekilde düşmemesi hata kaynağıdır. Bu, skill_point değişkeninin eksiltilme işlemindeki mantık hatasından kaynaklanabilir.
3. Yetenek Aktivasyonu Gecikmesi: Skill seviyesi artırıldıktan sonra yeteneğin anında aktif olmaması gibi bir problem mevcutsa, client-server senkronizasyonunda sorun vardır.

Fixleme Adımları:
Adım 1: Client ve Game Server Senkronizasyonu
Game/src/char_skill.cpp dosyasında yer alan PointChange(POINT_SKILL, GetSkillPoint()) fonksiyonunun çağrıldığından emin olun. Bu işlem, skill pointin client tarafına doğru yansıtılmasını sağlar.

Adım 2: Yetenek Seviyesi Kontrolü
Yetenek seviyesinin geçerli maksimum değeri kontrol edilmelidir. Örneğin, bir skillin 60 üstü olup olmadığını kontrol eden koşul şu şekilde olabilir:
Kod:
if (skill_level > SKILL_MAX_LEVEL)[BR][/BR]{[BR][/BR]    return false;[BR][/BR]}

SKILL_MAX_LEVEL sabiti, libgame.h dosyasında tanımlanmalıdır.

Adım 3: Skill Point Azaltma
Skill pointin doğru şekilde azaltılması için, DecreaseSkillPoint() fonksiyonu doğru şekilde çağrılmalıdır. Bu fonksiyonun çalışmadığı durumlarda, skill point negatif olabilir veya hatalı bir şekilde depolanabilir.

Adım 4: Yetenek Güncellemesi
Yetenek seviyesi değiştirildikten sonra, SendSkillLevelPacket() gibi bir fonksiyon ile client tarafına güncellenmiş skill level bilgisi gönderilmelidir. Aksi takdirde, skill seviyesi artsa bile client üzerinde görünmeyebilir.

Ekstra Güvenlik Önlemleri:
Sunucu tarafında At Skill işlemi yapılırken, yetkilendirme kontrolleri yapılmalıdır. Örneğin, sadece admin yetkili karakterlerin yetenek seviyesini artırabilmesi sağlanabilir. Bu işlem, input_main.cpp dosyasında yer alan komut kontrol mekanizmasıyla sağlanabilir. Ayrıca, skill seviyesi değişikliği loglanarak güvenlik açıkları tespit edilebilir.

Sonuç:
At Skill sisteminin doğru şekilde çalışması, Metin2 özel sunucularında kullanıcı memnuniyetini doğrudan etkiler. C++ seviyesinde yapılan küçük değişiklikler, büyük performans ve kararlılık kazandırabilir. Bu rehber sayesinde, yetenek sistemlerinde karşılaştığınız bugları daha hızlı ve güvenli bir şekilde düzeltebilirsiniz. Daha fazla Metin2 geliştirme kaynağı için Metin2Lobby'i ziyaret edebilirsiniz.


Fixing At Skill Bugs with C++ in Metin2


Introduction:
When developing private servers for Metin2, bugs related to skill systems can significantly impact the player experience. In this context, the At Skill system allows players to instantly increase their character's skill level. However, incorrect implementation of this system may cause freezing, calculation errors, or even server crashes during skill level transitions. In this article, we'll walk you through how to detect and fix At Skill bugs in C++-based Metin2 servers step by step.

Structure of the At Skill System:
At Skill is usually activated via an NPC and allows a character to instantly reach a specific skill level. During this process, data is transferred between the client and the auth-server or game-server. Errors typically occur within this data flow. On the C++ side, this system is generally defined in files like game/src/char.cpp, game/src/char_skill.cpp, and game/src/input_main.cpp.

Common At Skill Bugs:
1. Skill Level Overflow: If a character's skill level exceeds 60, it may cause rendering errors on the client side. To prevent this, ensure that the skill level does not exceed 60, or properly support higher levels like 70 or 80.
2. Incorrect Skill Point Reduction: If skill points are not reduced correctly after an At Skill action, it could be due to a logic error in the skill_point reduction function.
3. Delayed Skill Activation: If the skill does not activate immediately after the level increase, there might be a synchronization issue between the client and the server.

Steps to Fix the Issues:
Step 1: Client and Game Server Synchronization
Ensure that the PointChange(POINT_SKILL, GetSkillPoint()) function is called in game/src/char_skill.cpp. This ensures that the skill point change is reflected correctly on the client side.

Step 2: Skill Level Validation
Validate whether the skill level exceeds the maximum allowed value. For example, a condition to check if the skill level is above 60 might look like:
Kod:
if (skill_level > SKILL_MAX_LEVEL)[BR][/BR]{[BR][/BR]    return false;[BR][/BR]}

The constant SKILL_MAX_LEVEL should be defined in the libgame.h file.

Step 3: Skill Point Reduction
Ensure that the DecreaseSkillPoint() function is called correctly to reduce skill points. If this function doesn't execute properly, skill points may become negative or stored incorrectly.

Step 4: Skill Update
After changing the skill level, update the client-side with the new skill level using a function like SendSkillLevelPacket(). Otherwise, the skill level may increase without being visually updated on the client.

Additional Security Measures:
Authorization checks must be performed when applying the At Skill command on the server. For example, only admin-level characters should be allowed to increase skill levels. This can be implemented in input_main.cpp through command validation mechanisms. Additionally, logging skill level changes can help detect potential security issues.

Conclusion:
Proper functioning of the At Skill system directly affects user satisfaction on Metin2 private servers. Small changes at the C++ level can significantly improve performance and stability. With this guide, you can fix skill-related bugs faster and more securely. For more Metin2 development resources, visit Metin2Lobby.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt