From 46450d83843f387efb6346b129eafa5853448a46 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 23 May 2023 15:28:37 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 8 ++++++++ server/gameserver/creature.h | 2 ++ server/gameserver/human.cc | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 21489d52..86848ac8 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3301,3 +3301,11 @@ Skill* Creature::GetMainSkill() } return nullptr; } + +void Creature::ClearGemStoneBuffs() +{ + for (int buff_uniid : gemstone_hold_buffs) { + RemoveBuffByUniId(buff_uniid); + } + gemstone_hold_buffs.clear(); +} diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 3e6f5a6a..2dc03de8 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -118,6 +118,7 @@ class Creature : public MoveableEntity int shield_max_hp_ = 0; int gemstone = 0; + std::vector gemstone_hold_buffs; bool shot_start = false; bool shot_hold = false; @@ -357,6 +358,7 @@ class Creature : public MoveableEntity void AdjustPos(); void OnLand(); std::shared_ptr GetCompose() { return compose_; } + void ClearGemStoneBuffs(); protected: virtual void OnBuffRemove(Buff& buff); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 5a4cb486..16dfd56f 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3344,8 +3344,15 @@ void Human::ProcYellowStoneItem(AddItemDTO& dto) GetMaxHP(), true); #endif + ClearGemStoneBuffs(); auto merge_item_meta = mt::MergeItem::GetById(mt::Equip::YELLOW_STONE_ID); if (merge_item_meta) { + std::set* buffs = merge_item_meta->GetBuffs(GetInventory(IS_YELLOW_STONE)); + if (buffs) { + for (int buff_id : *buffs) { + gemstone_hold_buffs.push_back(TryAddBuff(this, buff_id, nullptr)); + } + } } SyncVolume(IS_YELLOW_STONE); //刷新数量