From 1562212376063abacfcff9bd8d1f38b932309f23 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 6 Jul 2021 13:15:46 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 13 +++++++++++-- server/gameserver/bullet.h | 1 + server/gameserver/frag_mitask.cc | 2 +- server/gameserver/frag_mitask.h | 1 + server/gameserver/human.cc | 8 ++++++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index b629eda..8c65896 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -61,9 +61,8 @@ void Bullet::OnHit(std::set& objects) void Bullet::ProcBomb() { - self_collider_->rad = gun_meta->i->explosion_range(); + self_collider_->rad = GetExplosionRange(); if (IsCurrWeapon()) { - self_collider_->rad *= (1 + ability_->GetAttrRate(kHAT_WeaponExplosionRange)); } std::set objects; Car* c4_target = nullptr; @@ -300,6 +299,15 @@ float Bullet::GetAtk() return atk * attr_rate; } +float Bullet::GetExplosionRange() +{ + float e_range = gun_meta->i->explosion_range(); + if (IsCurrWeapon()) { + e_range *= (1 + ability_->GetAttrRate(kHAT_WeaponExplosionRange)); + } + return e_range; +} + void Bullet::Check(float distance) { std::set objects; @@ -365,6 +373,7 @@ void Bullet::ProcFragBomb(int delay_time) task->gun_meta = gun_meta; task->meta = meta; task->atk = GetAtk(); + task->explosion_range = GetExplosionRange(); room->xtimer.AddDeadLineTimerAndAttach (std::max(1, (int)(delay_time / FRAME_RATE_MS)), a8::XParams() diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index d6850d9..53cfbc1 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -39,6 +39,7 @@ class Bullet : public MoveableEntity void RecalcSelfCollider(); bool IsBomb(); float GetAtk(); + float GetExplosionRange(); bool IsCurrWeapon(); protected: diff --git a/server/gameserver/frag_mitask.cc b/server/gameserver/frag_mitask.cc index 43e4d05..c614757 100644 --- a/server/gameserver/frag_mitask.cc +++ b/server/gameserver/frag_mitask.cc @@ -20,7 +20,7 @@ void FragMiTask::Done() Explosion explosion; explosion.EnemyAndObstacleAttack(sender, center, - meta->i->explosion_range(), + explosion_range, gun_meta->i->explosion_effect(), GetAtk()); } diff --git a/server/gameserver/frag_mitask.h b/server/gameserver/frag_mitask.h index 08683eb..d360c4e 100644 --- a/server/gameserver/frag_mitask.h +++ b/server/gameserver/frag_mitask.h @@ -19,6 +19,7 @@ class FragMiTask : public MicroTask CreatureWeakPtr follow_target; MetaData::Equip* gun_meta = nullptr; MetaData::Equip* meta = nullptr; + float explosion_range = 1; float atk = 0; void Done(); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 7a4369d..89e20ee 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3548,6 +3548,14 @@ void Human::OnExplosionHit(Explosion* e) GetAbility()->GetAttrAbs(kHAT_Def); float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); finaly_dmg = std::max(finaly_dmg, 0.0f); +#ifdef DEBUG + { + room->BroadcastDebugMsg(a8::Format("explosion dmg:%d def:%d finaly_dmg:%d", + {dmg, + def, + finaly_dmg})); + } +#endif #if 1 DecHP(finaly_dmg, 1,