From 026deefbdc68f4fb81bbfccfbef167882dc0281c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 Jan 2024 13:26:55 +0800 Subject: [PATCH] 1 --- server/gameserver/netdata.cc | 40 +++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/server/gameserver/netdata.cc b/server/gameserver/netdata.cc index 26178682..1c23740f 100644 --- a/server/gameserver/netdata.cc +++ b/server/gameserver/netdata.cc @@ -785,6 +785,7 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet) g_calc_dmg_context.is_crit = 0; #ifdef MYDEBUG + std::vector 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)); }