From 23a948dff54e13dbfde3481e092ed9e811f95abb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 8 Jul 2020 20:00:36 +0800 Subject: [PATCH] add creator_game_times --- server/gameserver/room.cc | 3 ++- server/gameserver/room.h | 1 + server/gameserver/roommgr.cc | 21 ++++++++++++--------- server/gameserver/roommgr.h | 4 ++-- server/gameserver/types.h | 1 + 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 0a04b19..0f614cc 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -45,6 +45,7 @@ void Room::InitData(RoomInitInfo& init_info) room_idx_ = init_info.room_idx; room_uuid_ = init_info.room_uuid; room_type_ = init_info.room_type; + creator_game_times_ = init_info.creator_game_times; map_tpl_name_ = init_info.map_tpl_name; grid_service = init_info.grid_service; @@ -68,7 +69,7 @@ void Room::Init() CreateDropObjs(); InitObstacleDatas(); ShuaAndroid(); - if (room_type_ == RT_NewBrid) { + if (room_type_ == RT_NewBrid && creator_game_times_ <= 0) { CreateLevel0RoomSpecThings(); } #ifdef DEBUG diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 5702969..36063d8 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -231,6 +231,7 @@ private: int level0room_born_point_uniid_ = 0; int level1room_born_point_uniid_ = 0; bool show_handed_ = false; + int creator_game_times_ = 0; int current_teamid_ = 0; int current_uniid_ = FIXED_OBJECT_MAXID; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 5a06ddf..67c7758 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -22,15 +22,16 @@ const int ROOM_NUM_UP_LIMIT = 1000; const int HUM_NUM_DOWN_LIMIT = 1500; -static RoomType_e GetHumanRoomType(const cs::CMJoin& msg) +static RoomType_e GetHumanRoomType(const cs::CMJoin& msg, int& game_times) { + game_times = 0; std::vector tmp_strings; a8::Split(msg.pre_settlement_info(), tmp_strings, ','); if (tmp_strings.size() < 3) { return RT_NewBrid; } //游戏次数,吃鸡数,击杀数,段位 - int game_times = a8::XValue(tmp_strings[0]); + game_times = a8::XValue(tmp_strings[0]); int rank = tmp_strings.size() > 3 ? a8::XValue(tmp_strings[3]).GetInt() : 0; #if 1 #else @@ -128,8 +129,9 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) JoinErrorHandle(msg, 2, hdr.socket_handle); return; } - RoomType_e self_room_type = GetHumanRoomType(msg); - Room* room = GetJoinableRoom(msg, self_room_type); + int game_times = 0; + RoomType_e self_room_type = GetHumanRoomType(msg, game_times); + Room* room = GetJoinableRoom(msg, self_room_type, game_times); if (!room) { JoinErrorHandle(msg, 3, hdr.socket_handle); return; @@ -159,7 +161,7 @@ int RoomMgr::OverRoomNum() return over_room_hash_.size(); } -Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type) +Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type, int game_times) { std::vector> group_rooms; for (int i = 0; i < RT_Max; ++i) { @@ -179,17 +181,17 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room return group_rooms[self_room_type][rand() % group_rooms[self_room_type].size()]; } if (self_room_type == RT_NewBrid) { - return CreateRoom(self_room_type); + return CreateRoom(self_room_type, game_times); } if (self_room_type == RT_MidBrid) { - return CreateRoom(self_room_type); + return CreateRoom(self_room_type, game_times); } for (int i = 0; i < RT_Max; ++i) { for (Room* room : group_rooms[i]) { return room; } } - return CreateRoom(self_room_type); + return CreateRoom(self_room_type, game_times); } Room* RoomMgr::GetRoomByUuid(long long room_uuid) @@ -362,7 +364,7 @@ int RoomMgr::AllocRoomIdx() return current_room_idx_; } -Room* RoomMgr::CreateRoom(RoomType_e room_type) +Room* RoomMgr::CreateRoom(RoomType_e room_type, int game_times) { int room_idx = AllocRoomIdx(); if (room_idx < 1) { @@ -373,6 +375,7 @@ Room* RoomMgr::CreateRoom(RoomType_e room_type) init_info.room_idx = room_idx; init_info.room_uuid = App::Instance()->NewUuid(); init_info.room_type = room_type; + init_info.creator_game_times = game_times; if (GetRoomByUuid(init_info.room_uuid)) { abort(); } diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 565251f..1a325a6 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -33,13 +33,13 @@ class RoomMgr : public a8::Singleton private: void InstallReportStateTimer(); Room* GetRoomByIdx(int room_idx); - Room* GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type); + Room* GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type, int game_times); void ReportServerState(int instance_id, const std::string& host, int port); void FreeOverRoom(long long room_uuid); bool IsLimitJoin(); int AllocRoomIdx(); - Room* CreateRoom(RoomType_e room_type); + Room* CreateRoom(RoomType_e room_type, int game_times); void JoinErrorHandle(const cs::CMJoin& msg, int error_code, int socket_handle); private: diff --git a/server/gameserver/types.h b/server/gameserver/types.h index e7ef129..7da9e17 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -153,6 +153,7 @@ struct RoomInitInfo int room_idx = 0; long long room_uuid = 0; RoomType_e room_type = RT_NewBrid; + int creator_game_times = 0; const MetaData::Map* map_meta = nullptr; std::string map_tpl_name;