diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 1d32e0f..d1f8def 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -380,6 +380,7 @@ void Creature::RecalcBuffAttr() { CheckAbilityUsed(); ability_->Clear(); + bool need_refresh_hp = false; for (auto& buff : buff_list_) { if (buff.meta->i->buff_effect() == kBET_ChgAttr || buff.meta->i->buff_effect() == kBET_Car || @@ -399,8 +400,16 @@ void Creature::RecalcBuffAttr() } } } + if (buff.add_frameno == room->GetFrameNo() || + attr_type == kHAT_MaxHp) { + need_refresh_hp = true; + } } } + if (need_refresh_hp) { + SetHP(GetMaxHP()); + GetTrigger()->HpChg(); + } } void Creature::OnBuffRemove(Buff& buff) @@ -1920,7 +1929,8 @@ float Creature::GetHP() float Creature::GetMaxHP() { - return ability.max_hp; + return ability.max_hp * (1 + GetAbility()->GetAttrRate(kHAT_MaxHp)) + + GetAbility()->GetAttrAbs(kHAT_MaxHp); } float Creature::GetDef() @@ -2191,3 +2201,8 @@ void Creature::CheckAbilityUsed() *ability_.get() = *(old_val.get()); } } + +void Creature::RefreshHP() +{ + +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index a6213c9..06dfd2d 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -203,6 +203,7 @@ class Creature : public MoveableEntity bool CheckCollision(); Trigger* GetTrigger() { return trigger_; }; std::shared_ptr& GetAbility() { return ability_; }; + void RefreshHP(); protected: