[C++]Büyülü Saldırı Değeri Efsunu BUG Fixi

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Paylaşılan, ücretli satılıp sonradan warez'e düşen veya satıştaki halleriyle bile, açılan çoğu (tümü değil birkaç tane pvp'de çalışıyor) Büyülü Saldırı Değeri efsunu çalışmıyor. Nasıl çalışmıyor veya nasıl test edersiniz. Örneğin Sura karakteri, Büyülü Saldırı Değeri kullanması gerekiyor skillerinde. Bu efsunun skillere hiçbir katkısı yok.
Yada şöylede test edebilirsiniz. Elinizde herhangi bir silah takmadan skill atın, Büyülü saldırı değeri efsunu emdirilmiş bir kuşak takın.
Skill damagesi artmıyorsa, bu sorun(bug) sizdede mevcut. Sorunun sebebi char_skill'de sadece Silahtaki büyülü saldırı değerinin hesaplanması. Karakter üzerindeki Büyülü Saldırı değerinin bir hesaplaması yok.

char_skill.cpp 'de aratın
Kod:
void SetPolyVarForAttack(LPCHARACTER ch, CSkillProto * pkSk, LPITEM pkWeapon)

Fonksiyonu şu şekilde değiştirin.
Kod:
void SetPolyVarForAttack(LPCHARACTER ch, CSkillProto * pkSk, LPITEM pkWeapon) {     if (ch->IsPC())     {         if (pkWeapon && pkWeapon->GetType() == ITEM_WEAPON)         {             int iWep = number(pkWeapon->GetValue(3), pkWeapon->GetValue(4));             iWep += pkWeapon->GetValue(5);             int iMtk = number(pkWeapon->GetValue(1), pkWeapon->GetValue(2));             iMtk += pkWeapon->GetValue(5);             pkSk->SetPointVar("wep", iWep);             pkSk->SetPointVar("mtk", iMtk);             pkSk->SetPointVar("mwep", iMtk + ch->GetPoint(POINT_MAGIC_ATT_GRADE_BONUS));         }         else         {             pkSk->SetPointVar("wep", 0);             pkSk->SetPointVar("mtk", 0);             pkSk->SetPointVar("mwep", 0 + ch->GetPoint(POINT_MAGIC_ATT_GRADE_BONUS));         }     }     else     {         int iWep = number(ch->GetMobDamageMin(), ch->GetMobDamageMax());         pkSk->SetPointVar("wep", iWep);         pkSk->SetPointVar("mwep", iWep);         pkSk->SetPointVar("mtk", iWep);     } }
Sorununuz çözülmüş olucak ;)
[C++]Büyülü Saldırı Değeri Efsunu BUG Fixi
Metin2 özel sunucularında C++ tabanlı sistemler üzerinde geliştirme yaparken, bazı buglar zaman zaman geliştiricileri zor durumda bırakabilir. Bu yazıda Büyülü Saldırı Değeri Efsunu ile ilgili karşılaşılan yaygın bir hatayı ele alacağız ve bu hatanın kök nedenini ve çözümünü detaylıca inceleyeceğiz. Bu konu, özellikle Metin2 PvP sistemleri üzerinde çalışan geliştiriciler için kritik öneme sahiptir.

Hatanın Tanımı
Oyun içinde bazı eşyaların büyülü saldırı değerini artıran efsunları vardır. Ancak bazı özel sunucularda, bu efsunların işlevini tam olarak yerine getirmemesi veya değerlerin doğru şekilde hesaplanmaması gibi durumlarla karşılaşılır. Örneğin, bir karakterin elindeki silah üzerinde +10 büyülü saldırı efsunu varsa, bu değerin karakterin toplam攻击力 değerine eklenmesi gerekir. Ancak bazı durumlarda bu değer eksik, fazla ya da hiç eklenmez.

Sorunun Kaynağı
Genellikle bu sorun, game_core üzerinde yapılan değişikliklerden kaynaklanır. Özellikle item_attr.cpp veya char_battle.cpp gibi dosyalardaki fonksiyonlarda yapılan küçük hatalar, efsun değerlerinin doğru şekilde okunamamasına yol açar. Bu fonksiyonlar, karakterin envanterindeki eşyaların özelliklerini okuyup, savaş sistemine aktarır. Eğer bu süreçte bir eksiklik varsa, büyülü saldırı gibi değerler eksik veya yanlış hesaplanabilir.

Yapılan Hata Örneği
Örnek olarak bir geliştirici, CalculateMagicAttack() fonksiyonunu değiştirmiş olabilir. Bu fonksiyon, karakterin toplam büyülü saldırı gücünü hesaplamaktadır. Ancak efsun değerlerinin doğru şekilde alınmadığı bir senaryoda, fonksiyon sadece temel silah değerlerini dikkate alabilir. Böylece oyuncu, efsun sayesinde kazandırılması gereken bonus攻击力 değerini alamaz.

Çözüm Yolu
Bu hatayı çözmek için öncelikle CalculateMagicAttack() fonksiyonunun doğru şekilde efsun değerlerini okup okomadığını kontrol etmek gerekir. Bunun için şu adımlar izlenebilir:

- item_attr.cpp dosyasında efsun değerlerinin nasıl okunduğu incelenir.
- char_battle.cpp dosyasındaki CalculateMagicAttack() fonksiyonu, efsunları doğru şekilde ekliyor mu?
- Oyuncu envanterindeki her eşya için apply_item_bonus() fonksiyonu çağrılıyor mu?

Kod Örneği (Fix)
Kod:
void CHARACTER::CalculateMagicAttack() {[BR][/BR]    int total_magic_attack = GetBaseMagicAttack();[BR][/BR]    for (int i = 0; i < WEAR_MAX_NUM; ++i) {[BR][/BR]        LPITEM item = GetWear(i);[BR][/BR]        if (item) {[BR][/BR]            total_magic_attack += item->GetAttribute(ATTR_MAGIC_ATT_BONUS);[BR][/BR]        }[BR][/BR]    }[BR][/BR]    m_iTotalMagicAttack = total_magic_attack;[BR][/BR]}

Test Aşaması
Yukarıdaki kod değişikliğini yaptıktan sonra, sunucuda test yapılması önemlidir. Bir oyuncu, büyülü saldırı efsunı olan bir eşyayı kuşanmalı ve karakterin攻击力 değerinde artış olup olmadığı kontrol edilmelidir. Ayrıca, PvP sırasında bu değerin doğru şekilde yansıması da gözlemlenmelidir.

Sonuç
Metin2 özel sunucularında geliştirme yaparken, küçük detaylar büyük fark yaratır. Büyülü saldırı efsunları gibi sistemlerin doğru çalışması, oyuncuların deneyimini doğrudan etkiler. Bu nedenle, C++ tabanlı sistemlerde yapılan her değişikliğin detaylı test edilmesi şarttır. Bu yazı sayesinde bu tür hataların önüne geçebilir ve daha stabil bir oyun ortamı sağlayabilirsiniz.


[C++]Magic Attack Value Enchant BUG Fix
While developing on C++ based systems in Metin2 private servers, some bugs can occasionally put developers in a difficult situation. In this article, we will examine a common issue related to the Magic Attack Value Enchant and discuss its root cause and solution in detail. This topic is particularly critical for developers working on Metin2 PvP systems.

Defining the Error
In the game, certain items have enchantments that increase magical attack value. However, on some private servers, these enchantments may not function properly or values might not be calculated correctly. For example, if a weapon has a +10 magic attack enchant, this value should be added to the character's total magical attack value. However, in some cases, this value is either missing, insufficient, or not added at all.

Root Cause of the Problem
This issue typically stems from modifications made to the game_core. Particularly, small errors in functions within files like item_attr.cpp or char_battle.cpp can prevent enchantment values from being read correctly. These functions read properties of items in the character's inventory and pass them to the combat system. If there is any deficiency in this process, magical attack values may be calculated incorrectly or incompletely.

Example of the Mistake
For instance, a developer may have modified the CalculateMagicAttack() function. This function calculates the character's total magical attack power. However, in a scenario where enchantment values are not correctly retrieved, the function may only consider base weapon values. As a result, the player does not receive the bonus magical attack value that should be granted by the enchantment.

Solution Path
To resolve this issue, first check whether the CalculateMagicAttack() function correctly retrieves enchantment values. The following steps can be taken:

- Examine how enchantment values are read in item_attr.cpp.
- Check if the CalculateMagicAttack() function in char_battle.cpp properly adds enchantment values.
- Ensure that the apply_item_bonus() function is called for each item equipped by the player.

Code Example (Fix)
Kod:
void CHARACTER::CalculateMagicAttack() {[BR][/BR]    int total_magic_attack = GetBaseMagicAttack();[BR][/BR]    for (int i = 0; i < WEAR_MAX_NUM; ++i) {[BR][/BR]        LPITEM item = GetWear(i);[BR][/BR]        if (item) {[BR][/BR]            total_magic_attack += item->GetAttribute(ATTR_MAGIC_ATT_BONUS);[BR][/BR]        }[BR][/BR]    }[BR][/BR]    m_iTotalMagicAttack = total_magic_attack;[BR][/BR]}

Testing Phase
After implementing the above code changes, testing on the server is essential. A player should equip an item with a magic attack enchant and verify whether the character's magical attack value increases accordingly. Additionally, the correct reflection of this value during PvP should also be observed.

Conclusion
When developing on Metin2 private servers, small details make a big difference. Correct functioning of systems like magic attack enchantments directly impacts the player experience. Therefore, every modification made to C++ based systems must be thoroughly tested. With the help of this article, you can avoid such errors and provide a more stable gaming environment.
 

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

Geri
Üst Alt