diff --git a/server/gameserver/ability.cc b/server/gameserver/ability.cc index 2616ee44..91300c85 100644 --- a/server/gameserver/ability.cc +++ b/server/gameserver/ability.cc @@ -103,3 +103,72 @@ void Ability::FillMFAttrAdditionList(Room* room, Human* hum, } } } + +void Ability::AddSpeedAddition(float rate) +{ + speed_addition_rate_ += rate; + ++speed_addition_times_; +} + +void Ability::DelSpeedAddition(float rate) +{ + speed_addition_rate_ -= rate; + speed_addition_rate_ = std::max(0.0f, speed_addition_rate_); + --speed_addition_times_; +#ifdef DEBUG + if (speed_addition_times_ < 0) { + abort(); + } +#endif +} + +float Ability::GetSpeedAddition() +{ + return speed_addition_rate_; +} + +void Ability::AddDmgRuduce(float rate) +{ + dmg_ruduce_rate_ += rate; + ++dmg_ruduce_times_; +} + +void Ability::DelDmgRuduce(float rate) +{ + dmg_ruduce_rate_ -= rate; + dmg_ruduce_rate_ = std::max(0.0f, dmg_ruduce_rate_); + --dmg_ruduce_times_; +#ifdef DEBUG + if (dmg_ruduce_times_ < 0) { + abort(); + } +#endif +} + +float Ability::GetDmgRuduce() +{ + return dmg_ruduce_rate_; +} + +void Ability::AddDmgAddition(float rate) +{ + dmg_addition_rate_ += rate; + ++dmg_addition_times_; +} + +void Ability::DelDmgAddition(float rate) +{ + dmg_addition_rate_ -= rate; + dmg_addition_rate_ = std::max(0.0f, dmg_addition_rate_); + --dmg_addition_times_; +#ifdef DEBUG + if (dmg_addition_times_ < 0) { + abort(); + } +#endif +} + +float Ability::GetDmgAddition() +{ + return dmg_addition_rate_; +} diff --git a/server/gameserver/ability.h b/server/gameserver/ability.h index b1e56fb2..127839f4 100644 --- a/server/gameserver/ability.h +++ b/server/gameserver/ability.h @@ -19,9 +19,27 @@ class Ability float* GetBuffAttrRatePtr(int attr_id); void FillMFAttrAdditionList(Room* room, Human* hum, ::google::protobuf::RepeatedPtrField<::cs::MFAttrAddition>* pb_attr_list); + void AddSpeedAddition(float rate); + void DelSpeedAddition(float rate); + float GetSpeedAddition(); + void AddDmgRuduce(float rate); + void DelDmgRuduce(float rate); + float GetDmgRuduce(); + void AddDmgAddition(float rate); + void DelDmgAddition(float rate); + float GetDmgAddition(); private: std::array buff_attr_abs_ = {}; std::array buff_attr_rate_ = {}; std::array buff_attr_flag_ = {}; + + int speed_addition_times_ = 0; + float speed_addition_rate_ = 0; + + int dmg_ruduce_times_ = 0; + float dmg_ruduce_rate_ = 0; + + int dmg_addition_times_ = 0; + float dmg_addition_rate_ = 0; };