1
This commit is contained in:
parent
273aca649e
commit
026deefbdc
@ -785,6 +785,7 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
|
||||
g_calc_dmg_context.is_crit = 0;
|
||||
|
||||
#ifdef MYDEBUG
|
||||
std::vector<std::string> dbg_strings;
|
||||
if (owner_.Get()->IsPlayer()) {
|
||||
|
||||
}
|
||||
@ -793,24 +794,27 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
|
||||
float vEbc = 1.0f;
|
||||
float vEd = 1 - target->GetNetData()->GetDef();
|
||||
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) {
|
||||
//触发暴击
|
||||
float vCritBon = hero_ability_->hero_meta->GetBasicMeta()->vOrigCriBon();
|
||||
float E = ProEffect(X, vCritBon); //E >= 0
|
||||
vCritBon = hero_ability_->hero_meta->GetBasicMeta()->vOrigCriBon();
|
||||
E = ProEffect(X, vCritBon); //E >= 0
|
||||
if (E > 0.00001f) {
|
||||
vEbc = 1 + E;
|
||||
}
|
||||
} else {
|
||||
//触发格挡 0,-1
|
||||
float vBlock = target->GetNetData()->GetHeroAbility()->hero_meta->GetBasicMeta()->vOrigBloDef();
|
||||
float E = ProEffect(X, -vBlock); //E >= 0
|
||||
vBlock = target->GetNetData()->GetHeroAbility()->hero_meta->GetBasicMeta()->vOrigBloDef();
|
||||
E = ProEffect(X, -vBlock); //E >= 0
|
||||
if (E < 0.00001f) {
|
||||
vEbc = 1 + E;
|
||||
}
|
||||
}
|
||||
float vAttack = GetHeroTotalAtk();
|
||||
float vBullet = GetWeaponAtk(bullet);
|
||||
float BDM = 100;
|
||||
const float BDM = 100;
|
||||
float vNormalDamageDealtRateIn = owner_.Get()->GetAbility()->GetAttr(kNHAT_vNormalDamageDealtRateIn);
|
||||
float vNormalDamageTakenRateIn = target->GetAbility()->GetAttr(kNHAT_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 DTR = 0.0f;
|
||||
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));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user