diff --git a/server/gameserver/ability.cc b/server/gameserver/ability.cc index ad0fe228..b77e3b62 100644 --- a/server/gameserver/ability.cc +++ b/server/gameserver/ability.cc @@ -465,14 +465,25 @@ int Ability::GetSwitchTimes(int type) float Ability::GetAttr(int attr_id) { float val = 0.0f; - if (IsValidHumanAttr(attr_id)) { - val = std::get<0>(attr_add_[attr_id]) + std::get<0>(attr_dec_[attr_id]); - } else if (IsValidHumanVirtualAttr(attr_id)) { - val = std::get<0>(vattr_add_[attr_id - kHVAT_Begin]) + std::get<0>(vattr_dec_[attr_id - kHVAT_Begin]); + if (!HasAttr(attr_id)) { + return 0.0f; } if (IsMulCalc(attr_id)) { - if (HasAttr(attr_id)) { - val = 1 - val; + if (IsValidHumanAttr(attr_id)) { + val = std::get<0>(attr_add_[attr_id]) * + std::get<0>(attr_dec_[attr_id]); + } else if (IsValidHumanVirtualAttr(attr_id)) { + val = std::get<0>(vattr_add_[attr_id - kHVAT_Begin]) * + std::get<0>(vattr_dec_[attr_id - kHVAT_Begin]); + } + val = 1.0f - val; + } else { + if (IsValidHumanAttr(attr_id)) { + val = std::get<0>(attr_add_[attr_id]) + + std::get<0>(attr_dec_[attr_id]); + } else if (IsValidHumanVirtualAttr(attr_id)) { + val = std::get<0>(vattr_add_[attr_id - kHVAT_Begin]) + + std::get<0>(vattr_dec_[attr_id - kHVAT_Begin]); } } return val;