diff --git a/server/gameserver/mapmgr.h b/server/gameserver/mapmgr.h index 1923d9a..6bc3faf 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 17b8cd0..ab45671 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 b25439d..364056f 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 231e1bb..0158dde 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; }