From e6ba781b3074206de2b3fabf0099eb26b9a81d37 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 8 Dec 2020 11:30:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B8=B8=E6=88=8F=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/mapmgr.h | 2 +- server/gameserver/room.cc | 12 +++++++++++- server/gameserver/room.h | 3 ++- server/gameserver/roommgr.cc | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/server/gameserver/mapmgr.h b/server/gameserver/mapmgr.h index 1923d9ac..6bc3fafd 100644 --- a/server/gameserver/mapmgr.h +++ b/server/gameserver/mapmgr.h @@ -13,9 +13,9 @@ public: void UnInit(); void AttachRoom(Room* room, RoomInitInfo& init_info); + MapInstance* GetMapInstance(int map_id); private: - MapInstance* GetMapInstance(int map_id); MapInstance* RandMapInstance(int map_mode); private: diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 17b8cd00..ab456718 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -25,6 +25,8 @@ #include "typeconvert.h" #include "entityfactory.h" #include "perfmonitor.h" +#include "mapinstance.h" +#include "mapmgr.h" #include "framework/cpp/utils.h" @@ -742,7 +744,8 @@ bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type, RoomMode_e self_room_mode, int self_proto_version, - int self_channel) + int self_channel, + int init_map_id) { if (self_room_mode < kChiJiMode) { self_room_mode = kChiJiMode; @@ -756,6 +759,13 @@ bool Room::CanJoin(const std::string& accountid, if (gas_data_.gas_mode != GasInactive) { return false; } + if (init_map_id != 0) { + MapInstance* map_instance = MapMgr::Instance()->GetMapInstance(init_map_id); + if (map_instance && map_instance->GetMapMeta()->i->map_mode() == room_mode_ && + map_instance->map_id != map_meta_->i->map_id()) { + return false; + } + } if (GetPlayerByAccountId(accountid)) { return false; } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index b25439d1..364056ff 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -113,7 +113,8 @@ public: RoomType_e self_roomm_type, RoomMode_e self_room_mode, int self_proto_version, - int self_channel); + int self_channel, + int init_map_id); void OnPlayerOffline(Player* hum); Entity* FindFirstCollisonEntity(const a8::Vec2& aabb_pos, AabbCollider& aabb_box); void FindLocationWithAabb(Entity* target, const a8::Vec2& aabb_pos, AabbCollider* aabb_box, diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 231e1bb1..0158dded 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -249,7 +249,8 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, self_room_type, (RoomMode_e)msg.room_mode(), proto_version, - channel)) { + channel, + msg.mapid())) { if (!msg.team_uuid().empty() && room->HaveMyTeam(msg.team_uuid())) { return room; }