This commit is contained in:
aozhiwei 2022-11-21 19:05:16 +08:00
parent 3a46347a11
commit d647878dde
2 changed files with 19 additions and 2 deletions

View File

@ -504,13 +504,14 @@ void BattleDataContext::CalcBattleStat(struct PlayerStats* stats)
float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
{
g_calc_dmg_context = {0};
g_calc_dmg_context.is_crit = IsCrit(bullet) ? 1 : 0;
float total_atk = GetTotalAtk(bullet);
float normal_dmg = total_atk * (1 - target->GetBattleContext()->GetDef() / 1000);
if (bullet->GetStrengthenWall()) {
normal_dmg *= 1.2f;
}
float crit = IsCrit(bullet) ? GetCritRate(bullet) : 0;
float crit = g_calc_dmg_context.is_crit ? GetCritRate(bullet) : 0;
float dodge = IsDodge(bullet) ? GetDodgeRuduce(bullet) : 0;
float finaly_dmg = normal_dmg * (1.0f + crit + dodge);
finaly_dmg *= (1 + target->GetAbility()->GetDmgAddition());
@ -534,16 +535,20 @@ float BattleDataContext::CalcDmg(Creature* target, IBullet* bullet)
}
#endif
finaly_dmg = std::max(1.0f, finaly_dmg);
if (g_calc_dmg_context.is_crit) {
g_calc_dmg_context.crit_dmg = finaly_dmg;
}
return finaly_dmg;
}
float BattleDataContext::CalcDmg(Obstacle* target, IBullet* bullet)
{
g_calc_dmg_context = {0};
g_calc_dmg_context.is_crit = IsCrit(bullet) ? 1 : 0;
float total_atk = GetTotalAtk(bullet);
float normal_dmg = total_atk * (1 - 0 / 1000);
float crit = IsCrit(bullet) ? GetCritRate(bullet) : 0;
float crit = g_calc_dmg_context.is_crit ? GetCritRate(bullet) : 0;
float dodge = IsDodge(bullet) ? GetDodgeRuduce(bullet) : 0;
float finaly_dmg = normal_dmg * (1.0f + crit + dodge);
#ifdef DEBUG
@ -561,6 +566,9 @@ float BattleDataContext::CalcDmg(Obstacle* target, IBullet* bullet)
owner_.Get()->SendDebugMsg(data);
}
#endif
if (g_calc_dmg_context.is_crit) {
g_calc_dmg_context.crit_dmg = finaly_dmg;
}
return finaly_dmg;
}

View File

@ -3808,6 +3808,15 @@ void Human::OnBulletHit(IBullet* bullet)
if (bullet->GetBulletMeta()->buff_meta) {
MustBeAddBuff(bullet->GetSender().Get(), bullet->GetBulletMeta()->i->buffid());
}
if (bullet->GetSender().Get()->GetBattleContext()->IsCrit()) {
room->frame_event.AddPropChg
(
GetWeakPtrRef(),
kPropCritDmg,
0,
bullet->GetSender().Get()->GetBattleContext()->GetCritDmg()
);
}
if (bullet->GetSender().Get() && bullet->GetSender().Get()->IsCar() && bullet->GetPassenger().Get()) {
if (!bullet->IsPreBattleBullet()) {
DecHP(finaly_dmg,