1
This commit is contained in:
parent
fabc72dffa
commit
4aa1448379
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user