diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 11000d7..bd24dc4 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -10,6 +10,7 @@ #include "hero.ai.h" #include "obstacle.h" #include "collider.h" +#include "bullet.h" Hero::Hero():Creature() { @@ -74,6 +75,31 @@ void Hero::Update(int delta_time) ++updated_times_; } +void Hero::OnBulletHit(Bullet* bullet) +{ + if (IsInvincible()) { + return; + } + if (!IsDead(room) && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) { + float dmg = bullet->GetAtk() * (1 + bullet->sender.Get()->GetAttrRate(kHAT_Atk)) + + bullet->sender.Get()->GetAttrAbs(kHAT_Atk); + float def = ability.def * (1 + GetAttrRate(kHAT_Def)) + + GetAttrAbs(kHAT_Def); + float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); + finaly_dmg = std::max(finaly_dmg, 0.0f); +#if 0 + sender->stats.damage_amount_out += finaly_dmg; +#endif + if (bullet->meta->buff_meta) { + MustBeAddBuff(this, bullet->meta->i->buffid()); + } + DecHP(finaly_dmg, + bullet->sender.Get()->GetEntityUniId(), + bullet->sender.Get()->GetName(), + bullet->gun_meta->i->id()); + } +} + float Hero::GetSpeed() { float speed = meta->i->move_speed(); @@ -246,3 +272,8 @@ void Hero::DetachFromMaster() detached_ = true; } } + +void Hero::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) +{ + +} diff --git a/server/gameserver/hero.h b/server/gameserver/hero.h index 5b09f18..ee52e6f 100644 --- a/server/gameserver/hero.h +++ b/server/gameserver/hero.h @@ -26,8 +26,9 @@ public: virtual void Initialize() override; 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 Update(int delta_time) override; + virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override; virtual float GetSpeed() override; virtual float GetRadius() override;