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_proto_version_ = init_info.creator_proto_version;
|
||||||
creator_channel_ = init_info.creator_channel;
|
creator_channel_ = init_info.creator_channel;
|
||||||
force_entry_newbie_room_ = init_info.force_entry_newbie_room;
|
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;
|
map_tpl_name_ = init_info.map_tpl_name;
|
||||||
grid_service = init_info.grid_service;
|
grid_service = init_info.grid_service;
|
||||||
@ -975,7 +976,8 @@ bool Room::CanJoin(const std::string& accountid,
|
|||||||
RoomMode_e self_room_mode,
|
RoomMode_e self_room_mode,
|
||||||
int self_proto_version,
|
int self_proto_version,
|
||||||
int self_channel,
|
int self_channel,
|
||||||
int init_map_id)
|
int init_map_id,
|
||||||
|
const cs::CMJoin& msg)
|
||||||
{
|
{
|
||||||
if (self_room_mode < kChiJiMode) {
|
if (self_room_mode < kChiJiMode) {
|
||||||
self_room_mode = kChiJiMode;
|
self_room_mode = kChiJiMode;
|
||||||
@ -989,6 +991,14 @@ bool Room::CanJoin(const std::string& accountid,
|
|||||||
if (GetGasData().GetGasMode() != GasInactive) {
|
if (GetGasData().GetGasMode() != GasInactive) {
|
||||||
return false;
|
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) {
|
if (init_map_id != 0) {
|
||||||
MapInstance* map_instance = MapMgr::Instance()->GetMapInstance(init_map_id);
|
MapInstance* map_instance = MapMgr::Instance()->GetMapInstance(init_map_id);
|
||||||
if (map_instance && map_instance->GetMapMeta()->i->map_mode() == room_mode_ &&
|
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()) {
|
if (map_instance->map_id != team->GetMapId()) {
|
||||||
return false;
|
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) {
|
if (team->GetCurrMembers().size() != MAX_TEAM_NUM) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (GetPlayerNum() < (int)GetRoomMaxPlayerNum()) {
|
if (GetPlayerNum() < (int)GetRoomMaxPlayerNum()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -3631,6 +3651,9 @@ int Room::GetOnlinePlayerNum()
|
|||||||
|
|
||||||
size_t Room::GetRoomMaxPlayerNum()
|
size_t Room::GetRoomMaxPlayerNum()
|
||||||
{
|
{
|
||||||
|
if (pve_instance) {
|
||||||
|
return pve_human_num;
|
||||||
|
}
|
||||||
return map_meta_->i->player();
|
return map_meta_->i->player();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,6 +94,7 @@ public:
|
|||||||
std::map<int, RoomObstacleWeakPtr> mine_objects;
|
std::map<int, RoomObstacleWeakPtr> mine_objects;
|
||||||
MetaData::PveGeminiMode* pve_mode_meta = nullptr;
|
MetaData::PveGeminiMode* pve_mode_meta = nullptr;
|
||||||
MetaData::PveGemini* pve_instance = nullptr;
|
MetaData::PveGemini* pve_instance = nullptr;
|
||||||
|
int pve_human_num = 0;
|
||||||
PveData pve_data;
|
PveData pve_data;
|
||||||
|
|
||||||
~Room();
|
~Room();
|
||||||
@ -200,7 +201,8 @@ public:
|
|||||||
RoomMode_e self_room_mode,
|
RoomMode_e self_room_mode,
|
||||||
int self_proto_version,
|
int self_proto_version,
|
||||||
int self_channel,
|
int self_channel,
|
||||||
int init_map_id);
|
int init_map_id,
|
||||||
|
const cs::CMJoin& msg);
|
||||||
bool CanJoin(class MatchTeam* team);
|
bool CanJoin(class MatchTeam* team);
|
||||||
void OnPlayerOffline(Player* hum);
|
void OnPlayerOffline(Player* hum);
|
||||||
void FindLocationWithAabb(ColliderComponent* target_collider,
|
void FindLocationWithAabb(ColliderComponent* target_collider,
|
||||||
|
@ -298,7 +298,8 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg,
|
|||||||
(RoomMode_e)msg.room_mode(),
|
(RoomMode_e)msg.room_mode(),
|
||||||
proto_version,
|
proto_version,
|
||||||
channel,
|
channel,
|
||||||
msg.mapid())) {
|
msg.mapid(),
|
||||||
|
msg)) {
|
||||||
if (!msg.team_uuid().empty() && room->HaveMyTeam(msg.team_uuid())) {
|
if (!msg.team_uuid().empty() && room->HaveMyTeam(msg.team_uuid())) {
|
||||||
return room;
|
return room;
|
||||||
}
|
}
|
||||||
@ -562,6 +563,7 @@ Room* RoomMgr::CreateRoom(const cs::CMJoin& msg,
|
|||||||
init_info.creator_proto_version = creator_proto_version;
|
init_info.creator_proto_version = creator_proto_version;
|
||||||
init_info.creator_channel = creator_channel;
|
init_info.creator_channel = creator_channel;
|
||||||
init_info.pve_instance_id = msg.pve_instance_id();
|
init_info.pve_instance_id = msg.pve_instance_id();
|
||||||
|
init_info.pve_human_num = std::max(1, msg.team_members_size());
|
||||||
#if 0
|
#if 0
|
||||||
init_info.force_entry_newbie_room = msg.force_entry_newbie_room();
|
init_info.force_entry_newbie_room = msg.force_entry_newbie_room();
|
||||||
#endif
|
#endif
|
||||||
|
@ -32,6 +32,7 @@ struct RoomInitInfo
|
|||||||
bool force_entry_newbie_room = false;
|
bool force_entry_newbie_room = false;
|
||||||
int init_map_id = 0;
|
int init_map_id = 0;
|
||||||
int pve_instance_id = 0;
|
int pve_instance_id = 0;
|
||||||
|
int pve_human_num = 0;
|
||||||
|
|
||||||
const MetaData::Map* map_meta = nullptr;
|
const MetaData::Map* map_meta = nullptr;
|
||||||
std::string map_tpl_name;
|
std::string map_tpl_name;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user