From 7b54c6acb284a5f7e569bc3bbf0a96aff74bbfba Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 25 Dec 2022 10:31:48 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 33 +++++++++++---------------------- server/gameserver/creature.h | 6 +----- server/gameserver/pbutils.cc | 24 ++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index a0493260..1d4df0e3 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -657,28 +657,6 @@ void Creature::ClearBuffList() RecalcBuffAttr(); } -// 222 -#if 0 -void Creature::FillBuffList(Human* hum, ::google::protobuf::RepeatedPtrField<::cs::MFBuff>* pb_buff_list) -{ - for (auto& itr : buff_list_) { - if (itr.NeedSync(hum)) { - auto buff = pb_buff_list->Add(); - itr.FillMFBuff(buff); - } - } -} - -void Creature::FillSkillList(::google::protobuf::RepeatedPtrField< cs::MFSkill >* - pb_skill_list) -{ - for (auto& pair : skill_hash_) { - auto skill = pb_skill_list->Add(); - pair.second->FillMFSkill(skill); - } -} -#endif - void Creature::AddPassiveSkill(int skill_id) { const mt::Skill* skill_meta = mt::Skill::GetById(skill_id); @@ -2796,6 +2774,17 @@ void Creature::TraverseBuff(std::function func) } } +void Creature::TraverseSkill(std::function func) +{ + bool stop = false; + for (auto& pair : skill_hash_) { + func(pair.second, stop); + if (stop) { + return; + } + } +} + bool Creature::TrySummonHero(const mt::Hero* hero_meta, glm::vec3 dir, Position born_pos, bool through_wall) { AabbCollider collider; diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 577215c0..683522e9 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -154,11 +154,6 @@ class Creature : public MoveableEntity void RecalcBuffAttr(); void RemoveBuffByEffectId(int buff_effect_id); void ClearBuffList(); - // 222 - #if 0 - void FillBuffList(Human* hum, ::google::protobuf::RepeatedPtrField<::cs::MFBuff>* pb_buff_list); - void FillSkillList(::google::protobuf::RepeatedPtrField< cs::MFSkill >* pb_skill_list); - #endif void TriggerBuff(Skill* skill, std::set& target_list, BuffTriggerType_e trigger_type); Skill* GetSkill(int skill_id); int GetSkillTargetId() { return skill_target_id_; }; @@ -261,6 +256,7 @@ class Creature : public MoveableEntity void SetBattleContext(std::shared_ptr c); void RefreshHP(); void TraverseBuff(std::function func); + void TraverseSkill(std::function func); long long GetCollisionTimes() { return collision_times_; }; std::string DebugOutBuffList(); bool CanFollow(Creature* follower); diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index d70fe0e1..22c126ec 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -36,6 +36,30 @@ #include "mt/PveGeminiMode.h" #include "mt/PveGeminiContent.h" +static void Creature_FillBuffList(Creature* self, Human* hum, ::google::protobuf::RepeatedPtrField<::cs::MFBuff>* pb_buff_list) +{ + self->TraverseBuff + ( + [hum, pb_buff_list] (Buff* buff, bool& stop) + { + if (buff->NeedSync(hum)) { + auto p = pb_buff_list->Add(); + buff->FillMFBuff(p); + } + }); +} + +static void Creature_FillSkillList(Creature* self, ::google::protobuf::RepeatedPtrField< cs::MFSkill >* + pb_skill_list) +{ + self->TraverseSkill + ( + [self, pb_skill_list] (Skill* skill, bool& stop) + { + auto p = pb_skill_list->Add(); + skill->FillMFSkill(p); + }); +} void PBUtils::Ability_FillMFAttrAdditionList(Ability* self, Human* hum, cs::MFActivePlayerData* player_data) {