farkmt2official 1
farkmt2official
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle

EG2C-Engelleme Nüfusu Yorumumuz.

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

logo.png

Amaç :
Sunucumuzda son safhalarda tank karakterler %100 Bloklama efsunları dizebiliyor.
Ok bloklaması , Yakın dövüş bloklaması ve Yansıtma efsunları sayesinde tank karakteler ölümsüzleşiyor.
Kritik ve Delici vuruşu ise %100 üzerine çıkartmanın bir değeri olsun istedik.


Sistemin çalışma prensibi :
Kritik vuruş şansı + Delici vuruş şansı / 50 hesaplaması ile bir tam sayı çıkartır.
Saldırganın vuruşları esnasında bu sayı kadar şansla Engelleme Nüfusu hasarı verme şansı vardır.
Engelleme Nüfusu hasarı bloklama ve yansıtmaları yok sayar.
Kritik , delici yükseldikçe şans artar , bloklama ve kritik delici efsunlarının komple dengesi değişmiş olur kullanacaklara dikkat etmesi tavsiyemdir.


[CODE lang="cpp" title="char_battle.cpp"]// else if (type == DAMAGE_TYPE_NORMAL || type == DAMAGE_TYPE_NORMAL_RANGE)
// bulun if (IsAffectFlag(AFF_JEONGWIHON)) a kadar değiştirin.


else if (type == DAMAGE_TYPE_NORMAL || type == DAMAGE_TYPE_NORMAL_RANGE)
{
// --- ORTAK DELME ŞANSI HESAPLAMA ---
bool bDefensePierced = false;
if (pAttacker)
{
// Senin istediğin formül: (Kritik + Delici) / 50
int iPierceChance = (pAttacker->GetPoint(POINT_CRITICAL_PCT) + pAttacker->GetPoint(POINT_PENETRATE_PCT)) / 50;

if (number(1, 100) <= iPierceChance)
{
bDefensePierced = true;
pAttacker->ChatPacket(CHAT_TYPE_INFO, "Engelleme Nufuzu uygulandı! (Sans: %d%%)", iPierceChance);
}
}
// ------------------------------------

if (type == DAMAGE_TYPE_NORMAL)
{
// Eğer delme başarılıysa buradaki blok kontrolü atlanır
if (!bDefensePierced && GetPoint(POINT_BLOCK) && number(1, 100) <= GetPoint(POINT_BLOCK))
{
if (test_server)
{
pAttacker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ??! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ??! (%d%%)"), GetName(), GetPoint(POINT_BLOCK));
}

SendDamagePacket(pAttacker, 0, DAMAGE_BLOCK);
return false;
}
}
else if (type == DAMAGE_TYPE_NORMAL_RANGE)
{
// Eğer delme başarılıysa buradaki dodge (savuşturma) kontrolü atlanır
if (!bDefensePierced && GetPoint(POINT_DODGE) && number(1, 100) <= GetPoint(POINT_DODGE))
{
if (test_server)
{
pAttacker->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ??! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ??! (%d%%)"), GetName(), GetPoint(POINT_DODGE));
}

SendDamagePacket(pAttacker, 0, DAMAGE_DODGE);
return false;
}
}



// if (pAttacker)
// {
// if (type == DAMAGE_TYPE_NORMAL)

// tekrar bulun. int iCriticalPct = pAttacker->GetPoint(POINT_CRITICAL_PCT); e kadar değiştirin.

if (pAttacker)
{
if (type == DAMAGE_TYPE_NORMAL)
{
if (GetPoint(POINT_REFLECT_MELEE))
{
// --- YENİ: YANSITMA DELME MANTIĞI ---
bool bReflectPierced = false;

if (pAttacker)
{
// Formül: (Kritik + Delici) / 50
int iPierceChance = (pAttacker->GetPoint(POINT_CRITICAL_PCT) + pAttacker->GetPoint(POINT_PENETRATE_PCT)) / 50;

if (number(1, 100) <= iPierceChance)
{
bReflectPierced = true;

if (test_server)
pAttacker->ChatPacket(CHAT_TYPE_INFO, "Yansitma Delindi! Hasar geri dönmedi. (Sans: %d%%)", iPierceChance);
}
}
// ------------------------------------

// Eğer yansıtma delinmediyse normal yansıtma işlemi yapılır
if (!bReflectPierced)
{
int reflectDamage = dam * GetPoint(POINT_REFLECT_MELEE) / 100;

if (pAttacker->IsImmune(IMMUNE_REFLECT))
reflectDamage = int(reflectDamage / 3.0f + 0.5f);

pAttacker->Damage(this, reflectDamage, DAMAGE_TYPE_SPECIAL);
}
}
}


[/CODE]
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst