From a2fe0ca1e0624c2b7b8b1b0a6f2bef42143c3557 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 14 May 2021 17:47:19 +0800 Subject: [PATCH] 1 --- server/gameserver/car.cc | 21 +++++++++++++++++++++ server/gameserver/car.h | 2 ++ server/gameserver/metadata.h | 1 + 3 files changed, 24 insertions(+) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index a2017b2..924f2b8 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -235,6 +235,9 @@ void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int #ifdef DEBUG dec_hp *= 5; #endif + if (dec_hp < 0.001f) { + return; + } float old_health = GetHP(); float new_health = std::max(0.0f, GetHP() - dec_hp); ability.hp = std::max(0.0f, new_health); @@ -242,6 +245,24 @@ void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int BeKill(killer_id, killer_name, weapon_id); } room->frame_event.AddHpChg(GetWeakPtrRef()); + float hp_rate = GetHP() / GetMaxHP(); + int new_buff_idx = cur_buff_idx_; + while (new_buff_idx < meta->car_buff_list.size()) { + if (hp_rate > std::get<0>(meta->car_buff_list[new_buff_idx])) { + break; + } + ++new_buff_idx; + } + if (new_buff_idx != cur_buff_id_) { + if (cur_buff_id_ != 0) { + RemoveBuffById(cur_buff_id_); + } + cur_buff_idx_ = new_buff_idx; + cur_buff_id_ = std::get<1>(meta->car_buff_list[cur_buff_idx_]); + if (cur_buff_id_ != 0) { + MustBeAddBuff(this, cur_buff_id_); + } + } } void Car::BeKill(int killer_id, const std::string& killer_name, int weapon_id) diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 4797048..510c427 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -44,4 +44,6 @@ class Car : public Creature bool later_removed_ = false; Human* driver_ = nullptr; std::set passengers_; + int cur_buff_id_ = 0; + int cur_buff_idx_ = -1; }; diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 62bf206..5155f13 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -72,6 +72,7 @@ namespace MetaData float float_param2 = 0; std::vector> power_charge; MetaData::Buff* buff_meta = nullptr; + std::vector> car_buff_list; void Init(); int GetWeaponIdx();