From 9696086968802a3fa31532e9cb52831ef71cf6e1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 24 Sep 2021 08:53:40 +0000 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 27 +++++++++++++++++++-------- server/gameserver/room.cc | 2 ++ server/gameserver/room.h | 3 +++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 037678a..580ec66 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2788,18 +2788,29 @@ Weapon* Creature::ChooseNextSpecWeapon(int curr_weapon_slot_id) void Creature::OnBattleStart(Room* room) { - std::vector del_buffs; - del_buffs.reserve(buff_list_.size()); - for (auto& buff : buff_list_) { - if (!buff.meta->i->post_battle_valid()) { - if (!buff.skill_meta || buff.skill_meta->i->skill_type() != kPassiveSkill) { - del_buffs.push_back(buff.buff_uniid); + int try_count = 0; + while (try_count++ < 10) { + std::vector del_buffs; + del_buffs.reserve(buff_list_.size()); + for (auto& buff : buff_list_) { + if (!buff.meta->i->post_battle_valid()) { + if (!buff.skill_meta || buff.skill_meta->i->skill_type() != kPassiveSkill) { + del_buffs.push_back(buff.buff_uniid); + } } } + for (auto itr = del_buffs.rbegin(); itr != del_buffs.rend(); ++itr) { + RemoveBuffByUniId(*itr); + } + if (del_buffs.empty()) { + break; + } } - for (auto itr = del_buffs.rbegin(); itr != del_buffs.rend(); ++itr) { - RemoveBuffByUniId(*itr); +#ifdef DEBUG + if (try_count > 5) { + abort(); } +#endif } bool Creature::CanFollow(Creature* follower) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e3ca1f5..aea9878 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3857,6 +3857,7 @@ void Room::ClearPostBattleAutoFreeList() void Room::OnBattleStart() { + battle_starting_ = true; std::vector entitys; entitys.reserve(uniid_hash_.size()); for (auto& pair : uniid_hash_) { @@ -3867,4 +3868,5 @@ void Room::OnBattleStart() e.Get()->OnBattleStart(this); } } + battle_starting_ = false; } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index ec2e724..90c31af 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -110,6 +110,7 @@ public: #else bool IsWaitingStart() { return waiting_start_; } #endif + bool IsBattleStarting() { return battle_starting_; }; int GetPlayerNum(); int GetHumanNum(); @@ -379,6 +380,8 @@ private: bool infinite_bullet_mode_ = false; + bool battle_starting_ = false; + friend class Incubator; friend class Team; };