From 6b6daeda98f61b32a61ec0daf1a203a835bf8d4a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 20 Jun 2023 16:20:57 +0800 Subject: [PATCH] 1 --- server/gameserver/room.cc | 12 ++++++++++++ server/gameserver/room.h | 1 + server/gameserver/roommgr.cc | 13 ++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index befbdfdc..b340a756 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -999,9 +999,11 @@ bool Room::CanJoin(const std::string& accountid, if (msg.force_enter_newbie_room()) { return false; } + #if 0 if (room_mode_ != self_room_mode) { return false; } + #endif if (GetGasData().GetGasMode() != GasInactive) { return false; } @@ -2238,6 +2240,16 @@ long long Room::GetGasInactiveTime() } } +long long Room::GetGasInactiveReaminTime() +{ + if (GetGasData().GetGasMode() != GasInactive) { + return -1; + } + long long remain_time = GetGasInactiveTime() - + (GetFrameNo() - GetGasData().gas_start_frameno) * FRAME_RATE_MS; + return std::max((int)remain_time, 0); +} + void Room::EnableHuman(Human* target) { if (!RuningInTimer()) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 1e73767b..274a894d 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -209,6 +209,7 @@ public: int CreateAndTakeonCar(int car_id, glm::vec3 pos); bool HaveMyTeam(const std::string& team_uuid); long long GetGasInactiveTime(); + long long GetGasInactiveReaminTime(); void CheckPartObjects(Human* testa = nullptr, Human* testb = nullptr); bool RuningInTimer(); Human* GetOneCanEnableAndroid(); diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 12069646..55c3d947 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -284,8 +284,19 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, return group_rooms[self_room_type][rand() % group_rooms[self_room_type].size()]; } if (self_room_type == RoomType_OldBrid2) { - + for (auto& room : group_rooms[RoomType_OldBrid3]) { + if (room->GetGasInactiveReaminTime() > 8 && + room->GetPlayerNum() + 8 < room->GetRoomMaxPlayerNum()) { + return room; + } + } } else if (self_room_type == RoomType_OldBrid3) { + for (auto& room : group_rooms[RoomType_OldBrid2]) { + if (room->GetGasInactiveReaminTime() > 8 && + room->GetPlayerNum() + 8 < room->GetRoomMaxPlayerNum()) { + return room; + } + } } return CreateRoom(msg, self_room_type,