This commit is contained in:
aozhiwei 2024-01-10 13:26:55 +08:00
parent 273aca649e
commit 026deefbdc

View File

@ -785,6 +785,7 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
g_calc_dmg_context.is_crit = 0; g_calc_dmg_context.is_crit = 0;
#ifdef MYDEBUG #ifdef MYDEBUG
std::vector<std::string> dbg_strings;
if (owner_.Get()->IsPlayer()) { if (owner_.Get()->IsPlayer()) {
} }
@ -793,24 +794,27 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
float vEbc = 1.0f; float vEbc = 1.0f;
float vEd = 1 - target->GetNetData()->GetDef(); float vEd = 1 - target->GetNetData()->GetDef();
float X = (1 + hero_ability_->GetCrit()) * (1 - target->GetNetData()->GetBlock()) - 1; float X = (1 + hero_ability_->GetCrit()) * (1 - target->GetNetData()->GetBlock()) - 1;
float vCritBon = 0.0f;
float E = 0.0f;
float vBlock = 0.0f;
if (X > 0.00001f) { if (X > 0.00001f) {
//触发暴击 //触发暴击
float vCritBon = hero_ability_->hero_meta->GetBasicMeta()->vOrigCriBon(); vCritBon = hero_ability_->hero_meta->GetBasicMeta()->vOrigCriBon();
float E = ProEffect(X, vCritBon); //E >= 0 E = ProEffect(X, vCritBon); //E >= 0
if (E > 0.00001f) { if (E > 0.00001f) {
vEbc = 1 + E; vEbc = 1 + E;
} }
} else { } else {
//触发格挡 0,-1 //触发格挡 0,-1
float vBlock = target->GetNetData()->GetHeroAbility()->hero_meta->GetBasicMeta()->vOrigBloDef(); vBlock = target->GetNetData()->GetHeroAbility()->hero_meta->GetBasicMeta()->vOrigBloDef();
float E = ProEffect(X, -vBlock); //E >= 0 E = ProEffect(X, -vBlock); //E >= 0
if (E < 0.00001f) { if (E < 0.00001f) {
vEbc = 1 + E; vEbc = 1 + E;
} }
} }
float vAttack = GetHeroTotalAtk(); float vAttack = GetHeroTotalAtk();
float vBullet = GetWeaponAtk(bullet); float vBullet = GetWeaponAtk(bullet);
float BDM = 100; const float BDM = 100;
float vNormalDamageDealtRateIn = owner_.Get()->GetAbility()->GetAttr(kNHAT_vNormalDamageDealtRateIn); float vNormalDamageDealtRateIn = owner_.Get()->GetAbility()->GetAttr(kNHAT_vNormalDamageDealtRateIn);
float vNormalDamageTakenRateIn = target->GetAbility()->GetAttr(kNHAT_vNormalDamageTakenRateIn); float vNormalDamageTakenRateIn = target->GetAbility()->GetAttr(kNHAT_vNormalDamageTakenRateIn);
float vDmg = vAttack * vBullet / BDM * (1 + vNormalDamageDealtRateIn) * ( 1 + vNormalDamageTakenRateIn); float vDmg = vAttack * vBullet / BDM * (1 + vNormalDamageDealtRateIn) * ( 1 + vNormalDamageTakenRateIn);
@ -821,6 +825,32 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
float DDR = 0.0f; float DDR = 0.0f;
float DTR = 0.0f; float DTR = 0.0f;
float finaly_dmg = vDmg * vEbc * vEd * (1 + DDR) * (1 + DTR); float finaly_dmg = vDmg * vEbc * vEd * (1 + DDR) * (1 + DTR);
#ifdef MYDEBUG
if (owner_.Get()->IsPlayer()) {
dbg_strings.push_back(a8::Format
("finaly_dmg:%f vEcb:%f vEd:%f X:%f vCritBon:%f E:%f vBlock:%f vAttack:%f vBullet:%f BDM:%f "
"vNormalDamageDealtRateIn:%f vNormalDamageTakenRateIn:%f vDmg:%f DDR:%f DTR:%f",
{
finaly_dmg,
vEbc,
vEd,
X,
vCritBon,
E,
vBlock,
vAttack,
vBullet,
BDM,
vNormalDamageDealtRateIn,
vNormalDamageTakenRateIn,
vDmg,
DDR,
DTR
}
)
);
}
#endif
return std::max(1.0f, std::round(finaly_dmg)); return std::max(1.0f, std::round(finaly_dmg));
} }