From 4d7268ef4398bf9ab21fecc9cc33eea06a645b17 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Jun 2023 19:39:19 +0800 Subject: [PATCH] 1 --- server/gameserver/mt/SafeArea.cc | 20 ++++++++++++++++---- server/gameserver/mt/SafeArea.h | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/server/gameserver/mt/SafeArea.cc b/server/gameserver/mt/SafeArea.cc index 97698551..150f8dbc 100644 --- a/server/gameserver/mt/SafeArea.cc +++ b/server/gameserver/mt/SafeArea.cc @@ -4,15 +4,25 @@ IMPL_TABLE(mt::SafeArea) -std::map mt::SafeArea::type_hash_; +std::map> mt::SafeArea::type_hash_; namespace mt { void SafeArea::Init1() { - if (!GetByType(type())) { - type_hash_[type()] = this; + { + auto itr = type_hash_.find(type()); + if (itr == type_hash_.end()) { + type_hash_[type()] = std::vector({this}); + } else { + if (itr->second.empty()) { + abort(); + } + if (itr->second.at(itr->second.size() - 1)->id() + 1 != id()) { + abort(); + } + } } if (!boss().empty()) { std::vector strings; @@ -34,13 +44,15 @@ namespace mt void SafeArea::StaticPostInit() { + for (auto& pair : type_hash_) { + } } const SafeArea* SafeArea::GetByType(int type) { auto itr = type_hash_.find(type); - return itr != type_hash_.end() ? itr->second : nullptr; + return itr != type_hash_.end() ? itr->second.at(0) : nullptr; } } diff --git a/server/gameserver/mt/SafeArea.h b/server/gameserver/mt/SafeArea.h index 6827ef51..8550a1ce 100644 --- a/server/gameserver/mt/SafeArea.h +++ b/server/gameserver/mt/SafeArea.h @@ -21,7 +21,7 @@ namespace mt private: - static std::map type_hash_; + static std::map> type_hash_; int small_ring_count_ = 0; const mt::SafeArea* last_area_ = nullptr; std::shared_ptr> _boss;