diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 14b750b8..8a0a8ce0 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -524,30 +524,22 @@ void Skill::Clear() void Skill::LevelUp() { - #if 1 + if (IsFullLevel()) { + return; + } + const mt::Skill* next_skill_meta = mt::Skill::GetById + (GetBaseSkillMeta()->_base_skill_meta->skill_id() + level_); + if (!next_skill_meta) { + return; + } + ++level_; + curr_meta_ = next_skill_meta; Clear(); - #else - if (owner->GetInventory(IS_BLUE_STONE) % 3 == 0) { - Clear(); - auto merge_item_meta = mt::MergeItem::GetById(mt::Equip::BLUE_STONE_ID); - if (merge_item_meta) { - int skill_lv = owner->GetInventory(IS_BLUE_STONE) / 3 + 1; - const mt::Skill* new_skill_meta = mt::Skill::GetById(meta->_base_skill_meta->skill_id()); - if (new_skill_meta) { - if (mt::Skill::GetById(new_skill_meta->skill_id() + skill_lv - 1)) { - owner->skill_hash_[new_skill_meta->skill_id() + skill_lv - 1] = owner->skill_hash_[meta->skill_id()]; - } - level_ = skill_lv; - } - std::set* buffs = merge_item_meta->GetBuffs(owner->GetInventory(IS_BLUE_STONE)); - if (buffs) { - for (int buff_id : *buffs) { - hold_buffs_.push_back(owner->TryAddBuff(owner, buff_id, nullptr)); - } - } + if (IsPassiveSkill()) { + for (int buff_id : GetCurrSkillMeta()->_buff_list) { + hold_buffs_.push_back(owner->TryAddBuff(owner, buff_id, GetCurrSkillMeta())); } } - #endif } bool Skill::IsFullLevel() @@ -566,16 +558,7 @@ void Skill::Reset() const mt::Skill* Skill::GetCurrSkillMeta() { - if (level_ > 1) { - const mt::Skill* new_skill_meta = mt::Skill::GetById(GetBaseSkillMeta()->skill_id() + level_ - 1); - if (new_skill_meta) { - return new_skill_meta; - } else { - return GetBaseSkillMeta(); - } - } else { - return GetBaseSkillMeta(); - } + return curr_meta_; } int Skill::GetSkillId() @@ -595,4 +578,10 @@ int Skill::GetBaseSkillId() void Skill::SetMeta(const mt::Skill* meta) { meta_ = meta; + curr_meta_ = meta; +} + +bool Skill::IsPassiveSkill() +{ + return GetBaseSkillMeta()->skill_type() == kPassiveSkill; } diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index 122cb58b..430a5e86 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -63,6 +63,7 @@ class Skill const mt::Skill* GetCurrSkillMeta(); int GetSkillId(); int GetBaseSkillId(); + bool IsPassiveSkill(); private: void InitActiveSkill(); @@ -79,6 +80,7 @@ private: private: const mt::Skill* meta_ = nullptr; + const mt::Skill* curr_meta_ = nullptr; bool actived_ = false; int level_ = 1; int curr_times_ = 0;