From 2d868de4190137227da1c17fcf79a5b544f3e213 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 8 Jul 2020 20:39:18 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BD=8D=EF=BD=89?= =?UTF-8?q?=EF=BD=8E=EF=BD=89=E6=88=BF=E9=97=B4=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/room.cc | 34 +++++++++++++++++++++++++++------- server/gameserver/room.h | 2 ++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 0a04b19..27abbcd 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -26,7 +26,9 @@ #include "entityfactory.h" #include "perfmonitor.h" -const int ROOM_MAX_PLAYER_NUM = 40; +const size_t NORMAL_ROOM_MAX_PLAYER_NUM = 40; +const size_t MINI_ROOM_MAX_PLAYER_NUM = 20; + const int SHUA_RANGE = 580; static long long RoomXGetTickCount(void* context) @@ -260,7 +262,7 @@ void Room::ShowAndroid(Human* target, int num) void Room::CreateAndroid(int robot_num) { for (int i = 0; i < robot_num; ++i) { - if (human_hash_.size() >= ROOM_MAX_PLAYER_NUM) { + if (human_hash_.size() >= GetRoomMaxPlayerNum()) { return; } MetaData::Robot* robot_meta = MetaMgr::Instance()->RandRobot(refreshed_robot_set_); @@ -666,7 +668,7 @@ bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type) return false; } } - return GetPlayerNum() < ROOM_MAX_PLAYER_NUM; + return GetPlayerNum() < (int)GetRoomMaxPlayerNum(); } void Room::OnPlayerOffline(Player* hum) @@ -897,8 +899,8 @@ void Room::UpdateGasInactive() gas_data_.rad_old = gas_data_.old_area_meta->i->rad(); gas_data_.rad_new = gas_data_.new_area_meta->i->rad(); battle_start_frameno_ = GetFrameNo(); - if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) { - CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size()); + if (human_hash_.size() < GetRoomMaxPlayerNum()) { + CreateAndroid(GetRoomMaxPlayerNum() - human_hash_.size()); NotifyUiUpdate(); } CombineTeam(); @@ -1687,7 +1689,7 @@ void Room::SecondRandPoint() #endif if (room_type_ == RT_NewBrid || room_type_ == RT_MidBrid) { std::vector tmp_humans; - tmp_humans.reserve(ROOM_MAX_PLAYER_NUM); + tmp_humans.reserve(GetRoomMaxPlayerNum()); for (auto& pair : human_hash_) { if (pair.second->IsAndroid() && a8::HasBitFlag(pair.second->status, HS_Disable) && @@ -2404,7 +2406,7 @@ void Room::AddPlayerPostProc(Player* hum) } } } - while (human_hash_.size() > ROOM_MAX_PLAYER_NUM) { + while (human_hash_.size() > GetRoomMaxPlayerNum()) { RandRemoveAndroid(); } #ifdef DEBUG @@ -2830,3 +2832,21 @@ void Room::ShuaLastGas() CheckPartObjects(); #endif } + +bool Room::IsMiniRoom() +{ + #ifdef DEBUG + return true; + #else + abort(); + #endif +} + +size_t Room::GetRoomMaxPlayerNum() +{ + if (IsMiniRoom()) { + return MINI_ROOM_MAX_PLAYER_NUM; + } else { + return NORMAL_ROOM_MAX_PLAYER_NUM; + } +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 5702969..0f5328d 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -196,6 +196,8 @@ private: void CheckShowHand(); void ShowHand(); void ShuaLastGas(); + bool IsMiniRoom(); + size_t GetRoomMaxPlayerNum(); #ifdef DEBUG void InitDebugInfo(); From 2ce7ddc3dd509bb991c3df3039397cd103cf72cb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 9 Jul 2020 10:19:14 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BD=8D=EF=BD=89?= =?UTF-8?q?=EF=BD=8E=EF=BD=89=E6=88=BF=E9=97=B4=E6=AF=92=E5=9C=88=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/room.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 27abbcd..0a5245d 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -882,8 +882,14 @@ void Room::UpdateGasInactive() { if (GetFrameNo() - gas_data_.gas_start_frameno >= GetGasInactiveTime() * SERVER_FRAME_RATE) { gas_data_.gas_mode = GasWaiting; - gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001); - gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); + if (IsMiniRoom()) { + gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(60001); + gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(60002); + } else { + gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001); + gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); + } + gas_data_.gas_progress = gas_data_.old_area_meta->i->rad(); gas_data_.gas_start_frameno = GetFrameNo(); gas_data_.pos_old = a8::Vec2(map_meta_->i->map_width() / 2.0f, From bca5b880cdd825b1abea12b186c0c6479fad8666 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 9 Jul 2020 13:03:33 +0800 Subject: [PATCH 3/4] 1 --- server/gameserver/mapmgr.cc | 24 ++++++++++++++++++++---- server/gameserver/mapmgr.h | 3 ++- server/gameserver/room.cc | 14 ++++++++++---- server/gameserver/room.h | 3 ++- server/gameserver/types.h | 3 ++- 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index b8d7c75..e48afdc 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -34,13 +34,14 @@ void MapMgr::Init() MAP_GRID_WIDTH); CreateThings(); a8::UdpLog::Instance()->Info - ("current_uniid:%d loots:%d spawn_points:%d " + ("current_uniid:%d loots:%d mini_room_spawn_points:%d normal_room_spawn_points:%d " "building_num:%d obstalce_num:%d obstacle0_num:%d " "obstacle1_num:%d obstacle2_num:%d", { current_uniid_, loots_.size(), - spawn_points_.size(), + mini_room_spawn_points_.size(), + normal_room_spawn_points_.size(), building_num_, obstacle_num_, obstacle0_num_, @@ -66,7 +67,8 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) init_info.map_meta = map_meta_; init_info.grid_service = grid_service_; init_info.map_service = map_service_; - init_info.spawn_points = &spawn_points_; + init_info.mini_room_spawn_points = &mini_room_spawn_points_; + init_info.normal_room_spawn_points = &normal_room_spawn_points_; init_info.level0room_born_point_meta = level0room_born_point_; init_info.level1room_born_point_meta = level1room_born_point_; init_info.loots = &loots_; @@ -99,11 +101,23 @@ void MapMgr::CreateThings() break; case kMOT_SpawnPoint: { + std::string point_name = thing_tpl.i->name(); + //pointxxx + if (point_name.size() < 6) { + abort(); + } + std::string name_part = point_name.substr(0, 5); + std::string id_part = point_name.substr(5, point_name.size() - 5); + int point_id = a8::XValue(id_part); if (spawn_points_hash.find(thing_tpl.i->name()) != spawn_points_hash.end()) { abort(); } - spawn_points_.push_back(&thing_tpl); + if (point_id <= 100) { + normal_room_spawn_points_.push_back(&thing_tpl); + } else { + mini_room_spawn_points_.push_back(&thing_tpl); + } spawn_points_hash[thing_tpl.i->name()] = &thing_tpl; } break; @@ -116,10 +130,12 @@ void MapMgr::CreateThings() if (spawn_points_hash.find(MetaMgr::Instance()->newbie_born_point) != spawn_points_hash.end()) { level0room_born_point_ = spawn_points_hash[MetaMgr::Instance()->newbie_born_point]; + mini_room_spawn_points_.push_back(level0room_born_point_); } if (spawn_points_hash.find(MetaMgr::Instance()->level1room_born_point) != spawn_points_hash.end()) { level1room_born_point_ = spawn_points_hash[MetaMgr::Instance()->level1room_born_point]; + mini_room_spawn_points_.push_back(level1room_born_point_); } } diff --git a/server/gameserver/mapmgr.h b/server/gameserver/mapmgr.h index 8ee5d24..1c88917 100644 --- a/server/gameserver/mapmgr.h +++ b/server/gameserver/mapmgr.h @@ -41,7 +41,8 @@ class MapMgr : public a8::Singleton MetaData::Map* map_meta_ = nullptr; MapService* map_service_ = nullptr; GridService* grid_service_ = nullptr; - std::vector spawn_points_; + std::vector mini_room_spawn_points_; + std::vector normal_room_spawn_points_; MetaData::MapTplThing* level0room_born_point_ = nullptr; MetaData::MapTplThing* level1room_born_point_ = nullptr; std::vector loots_; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 0a5245d..d128b50 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -52,7 +52,8 @@ void Room::InitData(RoomInitInfo& init_info) grid_service = init_info.grid_service; map_service = init_info.map_service; map_meta_ = init_info.map_meta; - spawn_points_ = init_info.spawn_points; + mini_room_spawn_points_ = init_info.mini_room_spawn_points; + normal_room_spawn_points_ = init_info.normal_room_spawn_points; level0room_born_point_meta_ = init_info.level0room_born_point_meta; level1room_born_point_meta_ = init_info.level1room_born_point_meta; loots_ = init_info.loots; @@ -889,7 +890,6 @@ void Room::UpdateGasInactive() gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001); gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); } - gas_data_.gas_progress = gas_data_.old_area_meta->i->rad(); gas_data_.gas_start_frameno = GetFrameNo(); gas_data_.pos_old = a8::Vec2(map_meta_->i->map_width() / 2.0f, @@ -1552,10 +1552,16 @@ BornPoint* Room::GetBornPoint(int point_uniid) void Room::CreateSpawnPoints() { - if (!spawn_points_ || spawn_points_->empty()) { + const std::vector* spawn_points = nullptr; + if (IsMiniRoom()) { + spawn_points = mini_room_spawn_points_; + } else { + spawn_points = normal_room_spawn_points_; + } + if (!spawn_points || spawn_points->empty()) { abort(); } - for (auto& thing_tpl : *spawn_points_) { + for (auto& thing_tpl : *spawn_points) { int uniid = AllocUniid(); BornPoint born_point; born_point.thing_tpl = thing_tpl; diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 0f5328d..2413bed 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -210,7 +210,8 @@ private: const MetaData::Map* map_meta_ = nullptr; std::string map_tpl_name_; RoomType_e room_type_ = RT_NewBrid; - const std::vector* spawn_points_ = nullptr; + const std::vector* mini_room_spawn_points_ = nullptr; + const std::vector* normal_room_spawn_points_ = nullptr; const MetaData::MapTplThing* level0room_born_point_meta_ = nullptr; const MetaData::MapTplThing* level1room_born_point_meta_ = nullptr; const std::vector* loots_ = nullptr; diff --git a/server/gameserver/types.h b/server/gameserver/types.h index e7ef129..17f3314 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -158,7 +158,8 @@ struct RoomInitInfo std::string map_tpl_name; GridService* grid_service = nullptr; MapService* map_service = nullptr; - const std::vector* spawn_points = nullptr; + const std::vector* mini_room_spawn_points = nullptr; + const std::vector* normal_room_spawn_points = nullptr; const MetaData::MapTplThing* level0room_born_point_meta = nullptr; const MetaData::MapTplThing* level1room_born_point_meta = nullptr; const std::vector* loots = nullptr; From 0a9c86758489632494d90864e6abd3baeaa983d4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 9 Jul 2020 13:34:58 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0mini=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/room.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index d128b50..7b663f0 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2847,11 +2847,10 @@ void Room::ShuaLastGas() bool Room::IsMiniRoom() { - #ifdef DEBUG - return true; - #else - abort(); - #endif + return + GetRoomType() == RT_NewBrid || + GetRoomType() == RT_MidBrid || + GetRoomType() == RT_OldBrid1; } size_t Room::GetRoomMaxPlayerNum()