diff --git a/server/gameserver/CMakeLists.txt b/server/gameserver/CMakeLists.txt index b231a3d..50ba598 100644 --- a/server/gameserver/CMakeLists.txt +++ b/server/gameserver/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 2.8) set(GAME_ID 2001) set(CMAKE_BUILD_TYPE "Debug") -set(CMAKE_BUILD_TYPE "Release") +#set(CMAKE_BUILD_TYPE "Release") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g -std=gnu++11 -DGAME_ID=${GAME_ID}") set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID}") diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index db7a749..533eb5c 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -70,6 +70,7 @@ public: std::map killpoint_hash; std::map equipupgrade_hash; std::map robot_hash; + std::map> airline_hash; void Load() { @@ -231,6 +232,14 @@ private: MetaData::AirLine& item = a8::FastAppend(airline_list); item.i = &meta; item.Init(); + { + auto itr = airline_hash.find(item.i->map_id()); + if (itr != airline_hash.end()) { + itr->second.push_back(&item); + } else { + airline_hash[item.i->map_id()] = std::vector({&item}); + } + } } { @@ -402,12 +411,14 @@ std::list& MetaMgr::GetAirDrops() return loader_->airdrop_list; } -MetaData::AirLine* MetaMgr::RandAirLine() +MetaData::AirLine* MetaMgr::RandAirLine(int map_id) { - if (loader_->airline_list.empty()) { - abort(); + auto itr = loader_->airline_hash.find(map_id); + if (itr != loader_->airline_hash.end()) { + return !itr->second.empty() ? itr->second.at(rand() % itr->second.size()) : nullptr; + } else { + return nullptr; } - return &loader_->airline_list[rand() % loader_->airline_list.size()]; } MetaData::Skill* MetaMgr::GetSkill(int skill_id) diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 7f1fd48..697c916 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -30,7 +30,7 @@ class MetaMgr : public a8::Singleton MetaData::SafeArea* GetSafeArea(int area_id); std::vector* GetMapTplThing(std::string& map_name); std::list& GetAirDrops(); - MetaData::AirLine* RandAirLine(); + MetaData::AirLine* RandAirLine(int map_id); MetaData::Skill* GetSkill(int skill_id); MetaData::Dress* GetDress(int dress_id); float GetRankRewardParam(int rank); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 14e1631..091e5fe 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1312,7 +1312,10 @@ void Room::AirDrop(int appear_time, int box_id) void Room::ShuaPlane() { - airline_ = MetaMgr::Instance()->RandAirLine(); + airline_ = MetaMgr::Instance()->RandAirLine(map_meta->i->map_id()); + if (!airline_) { + abort(); + } plane.start_point = a8::Vec2(airline_->start_point_x, airline_->start_point_y); plane.end_point = a8::Vec2(airline_->end_point_x, airline_->end_point_y); plane.dir = plane.end_point - plane.start_point; diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index b4b2bc0..61f5332 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -152,6 +152,7 @@ message AirLine optional string end_point = 3; optional float plane_speed = 4; optional int32 weight = 5; + optional int32 map_id = 6; } message Dress