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;
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user