From 8cfc78be906957003f21bd0c0bc906b6e33fc117 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Jan 2024 11:27:54 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 45 +++++++++++++++++++++----- server/gameserver/mt/BattleHeroGrow.cc | 2 +- server/gameserver/mt/BattleHeroGrow.h | 2 +- server/gameserver/skill.cc | 5 +++ server/gameserver/skill.h | 1 + 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index a81c0704..59757877 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3932,17 +3932,46 @@ void Creature::AdjustMobaBornDir() void Creature::SetHeroLevel(int level, int exp, const mt::BattleHeroGrow* grow_meta) { - for (int buff_uniid : grow_buff_list_) { - RemoveBuffByUniId(buff_uniid); - } - grow_buff_list_.clear(); - for (auto handle : grow_attr_list_) { - GetAbility()->RemoveAttr(handle); - } - grow_attr_list_.clear(); hero_level_ = level; hero_exp_ = exp; hero_grow_meta_ = grow_meta; + if (hero_grow_meta_) { + { + auto attrs = hero_grow_meta_->GetLevelAttrs(); + if (attrs) { + for (auto handle : grow_attr_list_) { + GetAbility()->RemoveAttr(handle); + } + grow_attr_list_.clear(); + for (auto tuple : *attrs) { + auto handle = GetAbility()->AddAttr(std::get<0>(tuple), std::get<1>(tuple)); + if (!handle.expired()) { + grow_attr_list_.push_back(handle); + } + } + } + } + { + auto effects = hero_grow_meta_->GetEquipEffects(); + if (effects) { + for (int buff_uniid : grow_buff_list_) { + RemoveBuffByUniId(buff_uniid); + } + grow_buff_list_.clear(); + for (int buff_id : *effects) { + TryAddBuff(this, buff_id); + } + } + } + if (hero_grow_meta_->GetSkillEffect()) { + for (auto& pair : skill_hash_) { + pair.second->LevelUp(); + } + for (auto& pair : passive_skill_hash_) { + pair.second->LevelUp(); + } + } + } } int Creature::GetHeroLevel() diff --git a/server/gameserver/mt/BattleHeroGrow.cc b/server/gameserver/mt/BattleHeroGrow.cc index e68de20e..fca2d9bf 100644 --- a/server/gameserver/mt/BattleHeroGrow.cc +++ b/server/gameserver/mt/BattleHeroGrow.cc @@ -36,7 +36,7 @@ namespace mt return nullptr; } - int BattleHeroGrow::GetSkilLEffect() const + int BattleHeroGrow::GetSkillEffect() const { return 0; } diff --git a/server/gameserver/mt/BattleHeroGrow.h b/server/gameserver/mt/BattleHeroGrow.h index 602a303d..67c3f297 100644 --- a/server/gameserver/mt/BattleHeroGrow.h +++ b/server/gameserver/mt/BattleHeroGrow.h @@ -18,7 +18,7 @@ namespace mt bool IsFullLevel() const; std::shared_ptr>> GetLevelAttrs() const; std::shared_ptr> GetEquipEffects() const; - int GetSkilLEffect() const; + int GetSkillEffect() const; private: }; diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 3dc5ff8c..4eb74057 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -550,6 +550,11 @@ void Skill::LevelUp() } } +bool Skill::IsFullLevel() +{ + return level_ == 4; +} + void Skill::Reset() { Clear(); diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index ea2887a8..fdb9e4dc 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -56,6 +56,7 @@ class Skill void Deactive() { actived_ = false; } bool IsMainSkill(); void LevelUp(); + bool IsFullLevel(); void Clear(); void Reset(); const mt::Skill* GetCurrSkillMeta();