Neler yeni

Foruma hoş geldin, Ziyaretçi

Metin2Lobby.com Metin2 Private Server Tanıtım Advertising Ve Geliştirme Forumudur.Metin2 pvp serverler,1-99,1-105,1-120,55-120 global serverları paylaş yada ara.
Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

[C++/PY] Kritik Hasar Artışı Bonusu - Kritik Hasar Değişimi

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Konular
48,291
Mesajlar
48,601
Tepkime puanı
75
M2 Yaşı
3 yıl 11 ay 10 gün
Trophy Puan
48
Konum
Web sitesi
M2 Yang
488,879
Ticaret : 1 / 0 / 0
Ticaret Oranı : 100%
Merhabalar değerli arkadaşlar, sizlere yeni Kritik Hasar Artışı Bonusunu paylaşıyorum.
Bu bonusu itemlere-şebnemlere vs.. ekleyebilirsiniz. Ben Sarı Şebnemdeki bonus yerine ve Ejderha Tanrı Zeka'ya ekledim. Gayet işlevli.

İşleyişi; Bonus ancak normal kritik vurduğunuzda devreye girer. Yani kritik vuruş şansınızın olması ve denk gelmesi gerekmektedir, bonus tek başına çalışmaz sadece kritik ile tetiklenir.
Örnek 100 hasar vuruyorsunuz kritikle 200 oluyor haliyle. Bu bonus Kritik Hasar Artışı efsunu %20 diyelim. Vurduğunuz hasar 220 oluyor.
Yani kritiğin üzerine asıl damagenizden %20 daha ekliyor. Kritik Hasar Artışı efsunu %50 olursa 250, %100 olursa 300 hasar vuruyorsunuz.
Örnek 1: damageniz 10.000 + Kritik = 20.000 damage (kritik hasar artışı bonussuz)
Örnek 2: damageniz 10.000 + Kritik = 20.000 damage + Kritik Hasar Artışı %50 = 25.000 damage (bonuslu)
Örnek 3: damageniz 10.000 + Kritik = 20.000 damage + Kritik Hasar Artışı %100 = 30.000 damage (bonuslu)
Örnek 4: damageniz 10.000 + Kritik = 20.000 damage + Kritik Hasar Artışı %200 = 40.000 damage (bonuslu)

Oyundan örnek;
Kritik Hasar Artışı %50. Normal Hasar 717(+%50 si 358) + kritikten gelen 717 = 1.792 (+ beraberinde gelen delici ile 1.897)
271488_460edb810aa91293f681409473d80f06.gif

Kod:
section                     item_vnum    50823             apply_type    CRITICAL_DAMAGE_BONUS             apply_value    10    10    15    15    20     apply_duration    300    300    600    600    900 end
Kod:
ADDON_TYPE0    ADDON_VALUE0    ADDON_TYPE1    ADDON_VALUE1    ADDON_TYPE2    ADDON_VALUE2    ADDON_TYPE3    ADDON_VALUE3 APPLY_ATTBONUS_MONSTER    25    APPLY_ATTBONUS_METIN    20    APPLY_CRITICAL_PCT    15    APPLY_CRITICAL_DAMAGE_BONUS    10
271484_e4c0a025ba94e7543aae1ff3dfdef5e8.png
271486_4493eaf20afca9361947db832dd91371.png
271490_05ae3dfa75edf7cb7cfeabfdd065e7d3.png


# DB SRC #

Kod:
arat; int get_Item_ApplyType_Value string arApplyType[*] = içerisinde en sona ekle; (öncesinde olması gereken virgüle dikkat - diğer bonusları örnek alarak ekleyin) "APPLY_CRITICAL_DAMAGE_BONUS"
ProtoReader.cpp içeriği böyle olacak;
Kod:
arat; MAX_APPLY_NUM, üstüne ekle; (TAB AYARLARINA DİKKAT)     APPLY_CRITICAL_DAMAGE_BONUS,            //115 (filesimde yeni bonusumun kodu 115. sizde sonuncu bonus kaç ise +1 ekleyin)

Kod:
arat; enum EPointTypes bonusları göreceksiniz, en altta varsa " POINT_MAX_NUM = 255 " dan öncesine yoksa " }; " öncesine ekleyin; (TAB AYARLARINA DİKKAT)     POINT_CRITICAL_DAMAGE_BONUS = 172, // bende 172. sizde sonuncu bonus ne ise +1 ekleyin

Kod:
arat;         case POINT_ST: altına ekle;         case POINT_CRITICAL_DAMAGE_BONUS: arat;         case APPLY_STR: altına ekle; (TAB AYARLARINA DİKKAT)         case APPLY_CRITICAL_DAMAGE_BONUS:
Kod:
arat; const TApplyInfo aApplyInfo[MAX_APPLY_NUM] = içerisinde bonusların en sonundaki " }; " dan önce ekle; (TAB AYARLARINA DİKKAT)     { POINT_CRITICAL_DAMAGE_BONUS,}, // 115 (filesimde yeni bonusumun kodu 115. sizde sonuncu bonus kaç ise +1 ekleyin) arat; TValueName c_aApplyTypeNames[*] = en sonda { NULL,        0            } olacak. üstüne ekle; (TAB AYARLARINA DİKKAT)     {"CRITICAL_DAMAGE_BONUS", APPLY_CRITICAL_DAMAGE_BONUS},
Kod:
arat;     if (type == DAMAGE_TYPE_MELEE || type == DAMAGE_TYPE_RANGE || type == DAMAGE_TYPE_MAGIC)     {         if (pAttacker)         {             // 크리티컬             int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);             if (!IsPC())                 iCriticalPct += pAttacker->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_CRITICAL_BONUS);             if (iCriticalPct)             {                 if (iCriticalPct >= 10) // 10보다 크면 5% + (4마다 1%씩 증가), 따라서 수치가 50이면 20%                     iCriticalPct = 5 + (iCriticalPct - 10) / 4;                 else // 10보다 작으면 단순히 반으로 깎음, 10 = 5%                     iCriticalPct /= 2;                 //크리티컬 저항 값 적용.                 iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL);                 if (number(1, 100) <= iCriticalPct)                 {                     IsCritical = true;                     dam *= 2;                     EffectPacket(SE_CRITICAL);                     if (IsAffectFlag(AFF_MANASHIELD))                     {                         RemoveAffect(AFF_MANASHIELD);                     }                 }             }       kod bloğunu değiştir; (TAB AYARLARINA DİKKAT)     if (type == DAMAGE_TYPE_MELEE || type == DAMAGE_TYPE_RANGE || type == DAMAGE_TYPE_MAGIC)     {         if (pAttacker)         {             // 크리티컬/             int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);             int iCriticalDmgPct = pAttacker->GetPoint(POINT_CRITICAL_DAMAGE_BONUS);             int criticalDamage = dam * 2;             int extraCritDamage = dam * iCriticalDmgPct / 100;             if (!IsPC())                 iCriticalPct += pAttacker->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_CRITICAL_BONUS);             if (iCriticalPct)             {                 if (iCriticalPct >= 10) // 10보다 크면 5% + (4마다 1%씩 증가), 따라서 수치가 50이면 20%                     iCriticalPct = 5 + (iCriticalPct - 10) / 4;                 else // 10보다 작으면 단순히 반으로 깎음, 10 = 5%                     iCriticalPct /= 2;                 //크리티컬 저항 값 적용.                 iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL); // SİZDE BU BONUS YOKSA SİLİN BURAYI                 if (number(1, 100) <= iCriticalPct)                 {                     IsCritical = true;                     {                     if (iCriticalDmgPct)                     dam = criticalDamage + extraCritDamage;                     else                     dam *= 2;                     EffectPacket(SE_CRITICAL);                     }                     if (IsAffectFlag(AFF_MANASHIELD))                     {                         RemoveAffect(AFF_MANASHIELD);                     }                 }             } ##################### arat;         if (pAttacker)         {             if (type == DAMAGE_TYPE_NORMAL)             {                 // 반사                 if (GetPoint(POINT_REFLECT_MELEE))                 {                     int reflectDamage = dam * GetPoint(POINT_REFLECT_MELEE) / 100;                     // NOTE: 공격자가 IMMUNE_REFLECT 속성을 갖고있다면 반사를 안 하는 게                     // 아니라 1/3 데미지로 고정해서 들어가도록 기획에서 요청.                     if (pAttacker->IsImmune(IMMUNE_REFLECT))                         reflectDamage = int(reflectDamage / 3.0f + 0.5f);                     pAttacker->Damage(this, reflectDamage, DAMAGE_TYPE_SPECIAL);                 }             }             // 크리티컬             int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);             if (!IsPC())                 iCriticalPct += pAttacker->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_CRITICAL_BONUS);             if (iCriticalPct)             {                 //크리티컬 저항 값 적용.                 iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL);                 if (number(1, 100) <= iCriticalPct)                 {                     IsCritical = true;                     dam *= 2;                     EffectPacket(SE_CRITICAL);                 }             } Kod bloğunu değiştir; (TAB AYARLARINA DİKKAT)         if (pAttacker)         {             if (type == DAMAGE_TYPE_NORMAL)             {                 // 반사                 if (GetPoint(POINT_REFLECT_MELEE))                 {                     int reflectDamage = dam * GetPoint(POINT_REFLECT_MELEE) / 100;                     // NOTE: 공격자가 IMMUNE_REFLECT 속성을 갖고있다면 반사를 안 하는 게                     // 아니라 1/3 데미지로 고정해서 들어가도록 기획에서 요청.                     if (pAttacker->IsImmune(IMMUNE_REFLECT))                         reflectDamage = int(reflectDamage / 3.0f + 0.5f);                     pAttacker->Damage(this, reflectDamage, DAMAGE_TYPE_SPECIAL);                 }             }             // 크리티컬             int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT);             int iCriticalDmgPct = pAttacker->GetPoint(POINT_CRITICAL_DAMAGE_BONUS);             int extraCritDamage = dam * iCriticalDmgPct / 100;             int criticalDamage = dam * 2;             if (!IsPC())                 iCriticalPct += pAttacker->GetMarriageBonus(UNIQUE_ITEM_MARRIAGE_CRITICAL_BONUS);             if (iCriticalPct)             {                 //크리티컬 저항 값 적용.                 iCriticalPct -= GetPoint(POINT_RESIST_CRITICAL); // SİZDE BU BONUS YOKSA SİLİN BURAYI                 if (number(1, 100) <= iCriticalPct)                 {                     IsCritical = true;                     {                     if (iCriticalDmgPct)                     dam = criticalDamage + extraCritDamage;                     else                     dam *= 2;                     EffectPacket(SE_CRITICAL);                     }                 }             }
Kod:
arat;             MAX_APPLY_NUM, üstüne ekle; (TAB AYARLARINA DİKKAT)             APPLY_CRITICAL_DAMAGE_BONUS,
Kod:
arat; enum EPointTypes içerisinde bonuslar olacak en sona "};" dan önce ekleyin. Eğer     POINT_MAX_NUM = 255, gibi bir kod var ise bunun üstüne ekleyin. ekle; (TAB AYARLARINA DİKKAT)     POINT_CRITICAL_DAMAGE_BONUS = 172,    //bende 172. sizde en son bonus kaç ise +1 ekleyin.
Kod:
arat;     PyModule_AddIntConstant(poModule, "APPLY_RESIST_MAGIC", CItemData::APPLY_RESIST_MAGIC); üstüne ekle; (TAB AYARLARINA DİKKAT)     PyModule_AddIntConstant(poModule, "APPLY_CRITICAL_DAMAGE_BONUS", CItemData::APPLY_CRITICAL_DAMAGE_BONUS);
Kod:
arat; PyModule_AddIntConstant(poModule, "RESIST_MAGIC",    POINT_RESIST_MAGIC); üstüne ekle; (TAB AYARLARINA DİKKAT)     PyModule_AddIntConstant(poModule, "POINT_CRITICAL_DAMAGE_BONUS",    POINT_CRITICAL_DAMAGE_BONUS);

# PACK-PY #
Kod:
en sona ekle; POINT_CRITICAL_DAMAGE_BONUS    Kritik Hasar Artışı +%d%%    SA APPLY_CRITICAL_DAMAGE_BONUS    Kritik Hasar Artışı +%d%%    SA TOOLTIP_APPLY_CRITICAL_DAMAGE_BONUS    Kritik Hasar Artışı +%d%%    SA TOOLTIP_APPLY_CRITICAL_DAMAGE_BONUS_FISH    Kritik Hasar Artışı +%d%%

Kod:
arat;     AFFECT_DICT = { içerisine ekle; (TAB AYARLARINA DİKKAT)         item.APPLY_CRITICAL_DAMAGE_BONUS : [localeInfo.TOOLTIP_APPLY_CRITICAL_DAMAGE_BONUS], ## arat; eğer var ise     def __AppendAbilityPotionInformation(self): içerisine ekle; (TAB AYARLARINA DİKKAT)         elif abilityType == item.APPLY_CRITICAL_DAMAGE_BONUS:             self.AppendTextLine(localeInfo.TOOLTIP_APPLY_CRITICAL_DAMAGE_BONUS_FISH % point, self.GetChangeTextLineColor(point))
Kod:
arat;     AFFECT_DATA_DICT =    { içerisinde MALL_DESC_IDX_START ' ların arasına bir yere ekle; (TAB AYARLARINA DİKKAT)             MALL_DESC_IDX_START+player.POINT_CRITICAL_DAMAGE_BONUS : (localeInfo.TOOLTIP_APPLY_CRITICAL_DAMAGE_BONUS, "icon/item/71029.tga"),


SAYGILARIMLA,
Metin2 Özel Sunucularında Kritik Hasar Artışı Sistemi

Metin2 özel sunucuları geliştirme sürecinde oyuncuların dikkatini çeken ve oyun deneyimini artıran pek çok mekanik vardır. Bu mekaniklerden biri de Kritik Hasar Artışı Bonusu'dur. Bu sistem, oyuncuların saldırılarında belirli bir ihtimalle kritik vuruş yapmalarını ve bu vuruşların normal hasardan daha fazla zarar vermesini sağlar. Bu yazıda [C++/PY] Kritik Hasar Artışı Bonusu - Kritik Hasar Değişimi konusunu detaylıca ele alacağız.

Kritik Hasar Nedir?
Oyunlarda kritik hasar, belirli bir ihtimalle tetiklenen ve normal hasarın üzerine belli bir oranda bonus hasar ekleyen bir sistemdir. Metin2 özel sunucularda bu değer genellikle karakterin donanımına, seviyesine ve kullanılan itemlere göre değişir. Bu bonuslar, PvP savaşlarında büyük avantaj sağlar ve oyuncuların stratejik olarak ekipmanlarını optimize etmelerini teşvik eder.

C++ Tarafında Kritik Hasar Hesaplama
Metin2 özel sunucu geliştirme sürecinde game core üzerinde çalışırken kritik hasar mekaniği genellikle C++ kodları ile tanımlanır. Oyuncunun kritik şansı ve kritik hasar miktarı, karakterin özelliklerine göre hesaplanır. Bu hesaplamalar genellikle char_battle.cpp veya benzeri dosyalarda yer alır. Geliştiriciler, bu fonksiyonları düzenleyerek özel bonuslar ekleyebilir veya var olan formülleri değiştirebilirler.

Python Tarafında GUI ve Ayarlar
Metin2 client tarafında kritik hasar gibi değerlerin kullanıcıya gösterilmesi için genellikle Python tabanlı UI Script sistemleri kullanılır. Bu sistemlerde uiscript dosyaları ile arayüz oluşturulur. Py root klasöründe yer alan status_bar.py gibi dosyalar üzerinden kritik hasar oranı ve bonusu kullanıcıya gösterilebilir. Bu sayede oyuncular, karakterlerinin yeteneklerini daha iyi analiz edebilir.

Kritik Hasar Artışı Bonus Sistemleri
Özel sunucularda kritik hasar artışı bonusları, oyuncuların belirli itemleri giymesinden, skill kullanmasından veya PvP zaferlerinden sonra aktif olabilir. Bu bonuslar genellikle buff olarak tanımlanır ve belirli bir süre boyunca karaktere ek bonus sağlar. Bu bonuslar, PvP sistemlerinde büyük rol oynar ve oyun içi rekabeti artırır.

PvP Mekaniği ve Kritik Hasar
Metin2 PvP sistemlerinde kritik hasar, sadece攻击力 değil, aynı zamanda strateji anlamında da önemlidir. Doğru ekipman kombinasyonu ve bonuslar ile bir karakter, rakibine karşı ciddi üstünlük sağlayabilir. Özellikle turnuvalarda bu sistemlerin dengelenmiş olması gerekir ki oyun adil ve eğlenceli kalabilsin.

DB ve Core Entegrasyonu
Metin2 sistemlerinde kritik hasar bonusları DB tarafında saklanabilir. db_core ile entegre çalışan sistemler sayesinde, oyuncuların bonusları doğru şekilde kaydedilir ve farklı sunucular arasında tutarlı kalır. Bu sayede oyuncu bilgileri eksiksiz şekilde korunur.

Sonuç
Metin2 özel sunucularında kritik hasar artışı mekaniği, hem oyuncular hem de geliştiriciler için oldukça önemli bir özelliktir. C++ tarafında doğru tanımlanmış formüller, Python GUI ile kullanıcı dostu bir arayüz ve veritabanı ile entegre çalışan sistemler, güçlü bir oyun deneyimi sunar. Metin2Lobby olarak biz de bu gibi gelişmiş sistemlerin nasıl uygulanacağını paylaşmaya devam ediyoruz.


Critical Damage Increase System in Metin2 Private Servers

In the development process of Metin2 private servers, there are many mechanics that attract players' attention and enhance their gaming experience. One of these mechanics is the Critical Damage Increase Bonus. This system allows players to perform critical hits with a certain probability during attacks, dealing more damage than normal hits. In this article, we will examine the topic of [C++/PY] Critical Damage Increase Bonus - Critical Damage Modification in detail.

What is Critical Damage?
In games, critical damage refers to a system that triggers with a specific probability and adds additional damage on top of normal damage. In Metin2 private servers, this value usually varies based on the character's equipment, level, and items used. These bonuses provide significant advantages in PvP battles and encourage players to strategically optimize their gear sets.

Critical Damage Calculation in C++
During the development of Metin2 private servers, the critical damage mechanism is typically defined through C++ code on the game core. The player's critical chance and critical damage amount are calculated based on character attributes. These calculations are usually located in files such as char_battle.cpp. Developers can modify these functions to add custom bonuses or alter existing formulas.

GUI and Settings in Python
In the Metin2 client, values like critical damage are often displayed to the user via Python-based UI Script systems. Interfaces are created using uiscript files. Through files like status_bar.py in the Py root folder, critical damage rates and bonuses can be presented to the player, allowing them to better analyze their character's abilities.

Critical Damage Increase Bonus Systems
In private servers, critical damage increase bonuses can activate based on players wearing specific items, using skills, or winning PvP matches. These bonuses are generally defined as buffs and provide temporary additional bonuses to the character. They play a major role in PvP systems and increase in-game competition.

PvP Mechanics and Critical Damage
In Metin2 PvP systems, critical damage is not only about attack power but also about strategy. With correct equipment combinations and bonuses, a character can gain significant superiority over their opponent. Especially in tournaments, these systems must be well-balanced to ensure fair and enjoyable gameplay.

DB and Core Integration
In Metin2 systems, critical damage bonuses can be stored in the database. Thanks to systems integrated with db_core, player bonuses are saved correctly and remain consistent across different servers. This ensures that player data remains intact.

Conclusion
The critical damage increase mechanism in Metin2 private servers is a very important feature for both players and developers. Correctly defined formulas on the C++ side, user-friendly interfaces with Python GUI, and database-integrated systems offer a powerful gaming experience. At Metin2Lobby, we continue sharing how such advanced systems can be implemented.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kaydol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Üye ol
Giriş Yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş Yap

Tema düzenleyici

Tema özelletirmeleri