diff --git a/server/gameserver/mt/SafeAreaPos.cc b/server/gameserver/mt/SafeAreaPos.cc index 5ae3fcd7..7a1089c1 100644 --- a/server/gameserver/mt/SafeAreaPos.cc +++ b/server/gameserver/mt/SafeAreaPos.cc @@ -3,6 +3,7 @@ #include "mt/SafeAreaPos.h" IMPL_TABLE(mt::SafeAreaPos) +std::map> mt::SafeAreaPos::area_hash_; namespace mt { @@ -36,4 +37,16 @@ namespace mt } + const SafeAreaPos* SafeAreaPos::RandSafeAreaPos(int area_id) + { + auto pos_list = GetSafeAreaPosList(area_id); + return pos_list && !pos_list->empty() ? pos_list->at(rand() % pos_list->size()) : nullptr; + } + + std::vector* SafeAreaPos::GetSafeAreaPosList(int area_id) + { + auto itr = area_hash_.find(area_id); + return itr != area_hash_.end() ? &itr->second : nullptr; + } + } diff --git a/server/gameserver/mt/SafeAreaPos.h b/server/gameserver/mt/SafeAreaPos.h index 2dd07df4..50ccfa32 100644 --- a/server/gameserver/mt/SafeAreaPos.h +++ b/server/gameserver/mt/SafeAreaPos.h @@ -15,6 +15,12 @@ namespace mt void Init2(); std::vector _poses; + + static const SafeAreaPos* RandSafeAreaPos(int area_id); + static std::vector* GetSafeAreaPosList(int area_id); + + private: + static std::map> area_hash_; }; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 992c205c..2e83d7db 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1446,11 +1446,7 @@ void Room::UpdateGasJump() gas_data_.SetGasMode(GasWaiting); gas_data_.old_area_meta = first_safearea; gas_data_.new_area_meta = mt::SafeArea::GetById(first_safearea->id() + 1); - // 999 - #if 1 - #else - gas_data_.pos_list = MetaMgr::Instance()->RandSafeAreaPos(first_safearea->id()); - #endif + gas_data_.pos_list = mt::SafeAreaPos::RandSafeAreaPos(first_safearea->id()); gas_data_.gas_progress = gas_data_.old_area_meta->rad(); gas_data_.gas_start_frameno = GetFrameNo(); #if 1