This commit is contained in:
aozhiwei 2023-03-28 17:47:05 +08:00
parent 49966de9d2
commit dbd5064c69
3 changed files with 11 additions and 92 deletions

View File

@ -100,27 +100,27 @@ struct AttrRuduce
Ability::Ability(CreatureWeakPtr owner) Ability::Ability(CreatureWeakPtr owner)
{ {
for (auto& tuple : attr_abs_) { for (auto& tuple : attr_abs_) {
std::get<0>(tuple) = .0f; std::get<0>(tuple) = 0.0f;
INIT_LIST_HEAD(&std::get<1>(tuple)); INIT_LIST_HEAD(&std::get<1>(tuple));
} }
for (auto& tuple : attr_rate_) { for (auto& tuple : attr_rate_) {
std::get<0>(tuple) = .0f; std::get<0>(tuple) = 0.0f;
INIT_LIST_HEAD(&std::get<1>(tuple)); INIT_LIST_HEAD(&std::get<1>(tuple));
} }
for (auto& tuple : attr_add_) { for (auto& tuple : attr_add_) {
std::get<0>(tuple) = .0f; std::get<0>(tuple) = 0.0f;
INIT_LIST_HEAD(&std::get<1>(tuple)); INIT_LIST_HEAD(&std::get<1>(tuple));
} }
for (auto& tuple : attr_dec_) { for (auto& tuple : attr_dec_) {
std::get<0>(tuple) = .0f; std::get<0>(tuple) = 0.0f;
INIT_LIST_HEAD(&std::get<1>(tuple)); INIT_LIST_HEAD(&std::get<1>(tuple));
} }
for (auto& tuple : vattr_add_) { for (auto& tuple : vattr_add_) {
std::get<0>(tuple) = .0f; std::get<0>(tuple) = 0.0f;
INIT_LIST_HEAD(&std::get<1>(tuple)); INIT_LIST_HEAD(&std::get<1>(tuple));
} }
for (auto& tuple : vattr_dec_) { for (auto& tuple : vattr_dec_) {
std::get<0>(tuple) = .0f; std::get<0>(tuple) = 0.0f;
INIT_LIST_HEAD(&std::get<1>(tuple)); INIT_LIST_HEAD(&std::get<1>(tuple));
} }
} }
@ -199,62 +199,6 @@ void Ability::Clear()
} }
void Ability::AddDefAddition(float rate)
{
def_addition_rate_ += rate;
++def_addition_times_;
}
void Ability::DelDefAddition(float rate)
{
def_addition_rate_ -= rate;
def_addition_rate_ = std::max(0.0f, def_addition_rate_);
--def_addition_times_;
#ifdef DEBUG
if (def_addition_times_ < 0) {
abort();
}
#endif
}
float Ability::GetDefAddition()
{
return def_addition_rate_;
}
int Ability::GetDefAdditionTimes()
{
return def_addition_times_;
}
void Ability::AddAtkAddition(float rate)
{
atk_addition_rate_ += rate;
++atk_addition_times_;
}
void Ability::DelAtkAddition(float rate)
{
atk_addition_rate_ -= rate;
atk_addition_rate_ = std::max(0.0f, atk_addition_rate_);
--atk_addition_times_;
#ifdef DEBUG
if (atk_addition_times_ < 0) {
abort();
}
#endif
}
float Ability::GetAtkAddition()
{
return atk_addition_rate_;
}
int Ability::GetAtkAdditionTimes()
{
return atk_addition_times_;
}
void Ability::IncImmuneTimes(int tag) void Ability::IncImmuneTimes(int tag)
{ {
auto itr = immune_tags_.find(tag); auto itr = immune_tags_.find(tag);

View File

@ -5,36 +5,21 @@
typedef std::weak_ptr<struct AttrAdditionPtr> AttrAdditionHandle; typedef std::weak_ptr<struct AttrAdditionPtr> AttrAdditionHandle;
typedef std::weak_ptr<struct AttrRuducePtr> AttrRuduceHandle; typedef std::weak_ptr<struct AttrRuducePtr> AttrRuduceHandle;
typedef std::weak_ptr<struct AttrAbsPtr> AttrAbsHandle; typedef std::weak_ptr<struct AttrAbsPtr> AttrAbsHandle;
typedef std::weak_ptr<struct AttrRatePtr> AttrRateHandle; typedef std::weak_ptr<struct AttrRatePtr> AttrRateHandle;
class Room;
class Human;
class Ability class Ability
{ {
public: public:
Ability(CreatureWeakPtr owner); Ability(CreatureWeakPtr owner);
void AddDefAddition(float rate);
void DelDefAddition(float rate);
float GetDefAddition();
int GetDefAdditionTimes();
void AddAtkAddition(float rate);
void DelAtkAddition(float rate);
float GetAtkAddition();
int GetAtkAdditionTimes();
void IncImmuneTimes(int tag); void IncImmuneTimes(int tag);
void DecImmuneTimes(int tag); void DecImmuneTimes(int tag);
bool CanImmune(int tag); bool CanImmune(int tag);
bool CanImmune(const std::set<int>& tags); bool CanImmune(const std::set<int>& tags);
void IncDisableShotTimes(); void IncDisableShotTimes();
void DecDisableShotTimes(); void DecDisableShotTimes();
int GetDisableShotTimes(); int GetDisableShotTimes();
void IncDisableUseSkillTimes(); void IncDisableUseSkillTimes();
void DecDisableUseSkillTimes(); void DecDisableUseSkillTimes();
int GetDisableUseSkillTimes(); int GetDisableUseSkillTimes();
@ -43,8 +28,6 @@ class Ability
void RemoveAttrAbs(AttrAbsHandle handle); void RemoveAttrAbs(AttrAbsHandle handle);
AttrRateHandle AddAttrRate(int attr_id, float value); AttrRateHandle AddAttrRate(int attr_id, float value);
void RemoveAttrRate(AttrRateHandle handle); void RemoveAttrRate(AttrRateHandle handle);
void RecalcAttrAbs(int attr_id);
void RecalcAttrRate(int attr_id);
float GetAttrAbs(int attr_id); float GetAttrAbs(int attr_id);
float GetAttrRate(int attr_id); float GetAttrRate(int attr_id);
@ -52,33 +35,25 @@ class Ability
void RemoveAttrAddition(AttrAdditionHandle handler); void RemoveAttrAddition(AttrAdditionHandle handler);
AttrRuduceHandle AddAttrRuduce(int attr_id, float rate); AttrRuduceHandle AddAttrRuduce(int attr_id, float rate);
void RemoveAttrRuduce(AttrRuduceHandle handler); void RemoveAttrRuduce(AttrRuduceHandle handler);
void RecalcAttrAddition(int attr_id);
void RecalcAttrRuduce(int attr_id);
float GetAttrAddition(int attr_id); float GetAttrAddition(int attr_id);
float GetAttrRuduce(int attr_id); float GetAttrRuduce(int attr_id);
private: private:
void Clear(); void Clear();
void RecalcAttrAbs(int attr_id);
void RecalcAttrRate(int attr_id);
void RecalcAttrAddition(int attr_id);
void RecalcAttrRuduce(int attr_id);
private: private:
CreatureWeakPtr owner_; CreatureWeakPtr owner_;
std::array<std::tuple<float, list_head>, kHAT_End> attr_abs_ = {}; std::array<std::tuple<float, list_head>, kHAT_End> attr_abs_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_rate_ = {}; std::array<std::tuple<float, list_head>, kHAT_End> attr_rate_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_add_ = {}; std::array<std::tuple<float, list_head>, kHAT_End> attr_add_ = {};
std::array<std::tuple<float, list_head>, kHAT_End> attr_dec_ = {}; std::array<std::tuple<float, list_head>, kHAT_End> attr_dec_ = {};
std::array<std::tuple<float, list_head>, kHVAT_End - kHVAT_Begin> vattr_add_ = {}; std::array<std::tuple<float, list_head>, kHVAT_End - kHVAT_Begin> vattr_add_ = {};
std::array<std::tuple<float, list_head>, kHVAT_End - kHVAT_Begin> vattr_dec_ = {}; std::array<std::tuple<float, list_head>, kHVAT_End - kHVAT_Begin> vattr_dec_ = {};
int def_addition_times_ = 0;
float def_addition_rate_ = 0;
int atk_addition_times_ = 0;
float atk_addition_rate_ = 0;
int disable_shot_times_ = 0; int disable_shot_times_ = 0;
int disable_useskill_times_ = 0; int disable_useskill_times_ = 0;
std::map<int, int> immune_tags_; std::map<int, int> immune_tags_;
friend class PBUtils; friend class PBUtils;

View File

@ -3147,7 +3147,7 @@ void Human::ProcGemStoneItem(AddItemDTO& dto)
0, 0,
gemstone, gemstone,
false); false);
GetAbility()->AddAtkAddition(dto.item_meta->_atk); GetAbility()->AddAttrRate(kHAT_Atk, dto.item_meta->_atk);
SetMaxHP(GetMaxHP() + dto.item_meta->_max_hp * GetBattleContext()->GetMaxHP()); SetMaxHP(GetMaxHP() + dto.item_meta->_max_hp * GetBattleContext()->GetMaxHP());
SetHP(GetHP() + dto.item_meta->_max_hp * GetBattleContext()->GetMaxHP()); SetHP(GetHP() + dto.item_meta->_max_hp * GetBattleContext()->GetMaxHP());
room->frame_event.AddPropChg room->frame_event.AddPropChg