From 6656bbabb963dba2edbbc681bdd410aba8d01733 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 25 Aug 2021 13:20:41 +0800 Subject: [PATCH] add car explosion dmg --- server/gameserver/car.cc | 42 ++++++++++++++++++++++++++++++++++++++++ server/gameserver/car.h | 1 + 2 files changed, 43 insertions(+) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 773d071..f161693 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -303,6 +303,48 @@ void Car::OnBulletHit(Bullet* bullet) } } +void Car::OnExplosionHit(Explosion* e) +{ + if (IsInvincible()) { + return; + } + if (dead) { + return; + } + if (e->IsPreBattleExplosion()) { + return; + } + if (HasBuffEffect(kBET_Jump) || + HasBuffEffect(kBET_Fly)) { + return; + } + + float dmg = e->GetDmg(); + float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) + + 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, + "", + 1); +#else + DecHP(finaly_dmg, + sender.Get()->GetUniId(), + sender.Get()->GetName(), + gun_meta->i->id()); +#endif +} + void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) { if (dec_hp < 0.001f) { diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 271dd30..599b6ca 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -26,6 +26,7 @@ class Car : public Creature virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; virtual void OnBulletHit(Bullet* bullet) override; + virtual void OnExplosionHit(Explosion* e) override; virtual void GetAabbBox(AabbCollider& aabb_box) override; virtual void GetHitAabbBox(AabbCollider& aabb_box) override;