This commit is contained in:
aozhiwei 2022-10-29 00:00:02 +08:00
parent fabc72dffa
commit 4aa1448379
4 changed files with 31 additions and 3 deletions

View File

@ -62,6 +62,7 @@ void Room::InitData(RoomInitInfo& init_info)
creator_proto_version_ = init_info.creator_proto_version;
creator_channel_ = init_info.creator_channel;
force_entry_newbie_room_ = init_info.force_entry_newbie_room;
pve_human_num = init_info.pve_human_num;
map_tpl_name_ = init_info.map_tpl_name;
grid_service = init_info.grid_service;
@ -975,7 +976,8 @@ bool Room::CanJoin(const std::string& accountid,
RoomMode_e self_room_mode,
int self_proto_version,
int self_channel,
int init_map_id)
int init_map_id,
const cs::CMJoin& msg)
{
if (self_room_mode < kChiJiMode) {
self_room_mode = kChiJiMode;
@ -989,6 +991,14 @@ bool Room::CanJoin(const std::string& accountid,
if (GetGasData().GetGasMode() != GasInactive) {
return false;
}
if (msg.pve_instance_id() && !pve_instance){
return false;
}
if (pve_instance) {
if (pve_instance->pb->gemini_id() != msg.pve_instance_id()) {
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_ &&
@ -1020,9 +1030,19 @@ bool Room::CanJoin(class MatchTeam* team)
if (map_instance->map_id != team->GetMapId()) {
return false;
}
if (team->GetOwner()->msg->pve_instance_id() && !pve_instance){
return false;
}
if (pve_instance) {
if (pve_instance->pb->gemini_id() != team->GetOwner()->msg->pve_instance_id()) {
return false;
}
}
#if 0
if (team->GetCurrMembers().size() != MAX_TEAM_NUM) {
return false;
}
#endif
if (GetPlayerNum() < (int)GetRoomMaxPlayerNum()) {
return false;
}
@ -3631,6 +3651,9 @@ int Room::GetOnlinePlayerNum()
size_t Room::GetRoomMaxPlayerNum()
{
if (pve_instance) {
return pve_human_num;
}
return map_meta_->i->player();
}

View File

@ -94,6 +94,7 @@ public:
std::map<int, RoomObstacleWeakPtr> mine_objects;
MetaData::PveGeminiMode* pve_mode_meta = nullptr;
MetaData::PveGemini* pve_instance = nullptr;
int pve_human_num = 0;
PveData pve_data;
~Room();
@ -200,7 +201,8 @@ public:
RoomMode_e self_room_mode,
int self_proto_version,
int self_channel,
int init_map_id);
int init_map_id,
const cs::CMJoin& msg);
bool CanJoin(class MatchTeam* team);
void OnPlayerOffline(Player* hum);
void FindLocationWithAabb(ColliderComponent* target_collider,

View File

@ -298,7 +298,8 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg,
(RoomMode_e)msg.room_mode(),
proto_version,
channel,
msg.mapid())) {
msg.mapid(),
msg)) {
if (!msg.team_uuid().empty() && room->HaveMyTeam(msg.team_uuid())) {
return room;
}
@ -562,6 +563,7 @@ Room* RoomMgr::CreateRoom(const cs::CMJoin& msg,
init_info.creator_proto_version = creator_proto_version;
init_info.creator_channel = creator_channel;
init_info.pve_instance_id = msg.pve_instance_id();
init_info.pve_human_num = std::max(1, msg.team_members_size());
#if 0
init_info.force_entry_newbie_room = msg.force_entry_newbie_room();
#endif

View File

@ -32,6 +32,7 @@ struct RoomInitInfo
bool force_entry_newbie_room = false;
int init_map_id = 0;
int pve_instance_id = 0;
int pve_human_num = 0;
const MetaData::Map* map_meta = nullptr;
std::string map_tpl_name;