diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 3e3d26b..09f9a78 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -199,3 +199,5 @@ const int MAX_INSTANCE_ID = 500; const int MAX_TEAM_NUM = 4; const int WEAPON_SLOT = 0; + +const int ROOM_MAX_PLAYER_NUM = 8; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 4d35c44..26716cf 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -56,6 +56,7 @@ public: std::map drop_hash; std::map> maptpl_meta_hash; std::map> maptpl_hash; + std::map> born_point_hash; std::map dress_hash; std::map tank_hash; std::map skill_hash; @@ -145,12 +146,23 @@ private: } for (auto& pair : maptpl_meta_hash) { std::vector things; + std::vector born_point; for (auto& itr : pair.second) { - auto& thing = a8::FastAppend(things); - thing.i = &itr; - thing.Init(); + if (itr.is_born_point()) { + auto& thing = a8::FastAppend(born_point); + thing.i = &itr; + thing.Init(); + } else { + auto& thing = a8::FastAppend(things); + thing.i = &itr; + thing.Init(); + } } maptpl_hash[pair.first] = things; + born_point_hash[pair.first] = born_point; + if (born_point.size() != ROOM_MAX_PLAYER_NUM) { + abort(); + } } } #endif @@ -357,12 +369,18 @@ MetaData::SafeArea* MetaMgr::GetSafeArea(int area_id) return itr != loader_->safearea_hash.end() ? itr->second : nullptr; } -std::vector* MetaMgr::GetMapTplThing(std::string& map_name) +std::vector* MetaMgr::GetMapTplThing(const std::string& map_name) { auto itr = loader_->maptpl_hash.find(map_name); return itr != loader_->maptpl_hash.end() ? &itr->second : nullptr; } +std::vector* MetaMgr::GetMapBornPoints(const std::string& map_name) +{ + auto itr = loader_->born_point_hash.find(map_name); + return itr != loader_->born_point_hash.end() ? &itr->second : nullptr; +} + MetaData::Skill* MetaMgr::GetSkill(int skill_id) { auto itr = loader_->skill_hash.find(skill_id); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 4b9c72e..b563d25 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -28,7 +28,8 @@ class MetaMgr : public a8::Singleton MetaData::Building* GetBuilding(int building_id); MetaData::Drop* GetDrop(int drop_id); MetaData::SafeArea* GetSafeArea(int area_id); - std::vector* GetMapTplThing(std::string& map_name); + std::vector* GetMapTplThing(const std::string& map_name); + std::vector* GetMapBornPoints(const std::string& map_name); MetaData::Skill* GetSkill(int skill_id); MetaData::Dress* GetDress(int dress_id); MetaData::Tank* GetTank(int tank_id); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index ee6d50f..259753b 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -23,8 +23,6 @@ #include "hero.h" #include "gamelog.h" -const int ROOM_MAX_PLAYER_NUM = 8; - static long long RoomXGetTickCount(void* context) { Room* room = (Room*)context; @@ -38,6 +36,10 @@ Room::~Room() void Room::Init() { + born_points_ = MetaMgr::Instance()->GetMapBornPoints(map_tpl_name); + if (!born_points_ || born_points_->size() != ROOM_MAX_PLAYER_NUM) { + abort(); + } xtimer.Init(RoomXGetTickCount, this, 100, 100); xtimer_attacher.xtimer = &xtimer; grid_service.Init(MAP_WIDTH, MAP_HEIGHT, MAP_CELL_WIDTH * 8); diff --git a/server/gameserver/room.h b/server/gameserver/room.h index d05081a..5ab6504 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -7,6 +7,7 @@ #include "framemaker.h" #include "gridservice.h" #include "mapservice.h" +#include "metadata.h" namespace MetaData { @@ -116,6 +117,7 @@ private: int current_teamid = 0; int current_uniid = 0; + std::vector* born_points_ = nullptr; xtimer_list* battle_report_timer_ = nullptr; std::set refreshed_robot_set_;