diff --git a/server/gameserver/ability.cc b/server/gameserver/ability.cc index 59f179d5..872174bc 100644 --- a/server/gameserver/ability.cc +++ b/server/gameserver/ability.cc @@ -99,6 +99,14 @@ struct AttrRuduce Ability::Ability(CreatureWeakPtr owner) { + for (auto& tuple : attr_abs_) { + std::get<0>(tuple) = .0f; + INIT_LIST_HEAD(&std::get<1>(tuple)); + } + for (auto& tuple : attr_rate_) { + std::get<0>(tuple) = .0f; + INIT_LIST_HEAD(&std::get<1>(tuple)); + } for (auto& tuple : attr_add_) { std::get<0>(tuple) = .0f; INIT_LIST_HEAD(&std::get<1>(tuple)); @@ -115,45 +123,34 @@ Ability::Ability(CreatureWeakPtr owner) std::get<0>(tuple) = .0f; INIT_LIST_HEAD(&std::get<1>(tuple)); } - Clear(); } -#if 0 -float Ability::GetAttrAbs(int attr_id) -{ - float attr_abs_val = GetBuffAttrAbs(attr_id); - if (attr_id == kHAT_Atk || attr_id == kHAT_Def) { - if (owner_.Get()) { - } - } - return attr_abs_val; -} - -float Ability::GetAttrRate(int attr_id) -{ - float attr_rate_val = GetBuffAttrRate(attr_id) / 100.0f; - return attr_rate_val; -} - -float Ability::GetBuffAttrAbs(int attr_id) -{ - if (IsValidHumanAttr(attr_id)) { - return buff_attr_abs_[attr_id]; - } - return 0; -} - -float Ability::GetBuffAttrRate(int attr_id) -{ - if (IsValidHumanAttr(attr_id)) { - return buff_attr_rate_[attr_id]; - } - return 0; -} -#endif - void Ability::Clear() { + + for (auto& tuple : attr_abs_) { + std::get<0>(tuple) = 0.0f; + while (!list_empty(&std::get<1>(tuple))) { + AttrAbs* e = list_first_entry(&std::get<1>(tuple), + AttrAbs, + entry); + e->ptr->data = nullptr; + list_del_init(&e->entry); + delete e; + } + } + for (auto& tuple : attr_rate_) { + std::get<0>(tuple) = 0.0f; + while (!list_empty(&std::get<1>(tuple))) { + AttrRate* e = list_first_entry(&std::get<1>(tuple), + AttrRate, + entry); + e->ptr->data = nullptr; + list_del_init(&e->entry); + delete e; + } + } + for (auto& tuple : attr_add_) { std::get<0>(tuple) = 0.0f; while (!list_empty(&std::get<1>(tuple))) {