diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index dfb548d..0f1d4a1 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -48,6 +48,7 @@ void Room::InitData(RoomInitInfo& init_info) room_uuid_ = init_info.room_uuid; room_type_ = init_info.room_type; creator_game_times_ = init_info.creator_game_times; + creator_register_time_ = init_info.creator_register_time; map_tpl_name_ = init_info.map_tpl_name; grid_service = init_info.grid_service; @@ -908,8 +909,8 @@ void Room::UpdateGasInactive() battle_start_frameno_ = GetFrameNo(); if (human_hash_.size() < GetRoomMaxPlayerNum()) { CreateAndroid(GetRoomMaxPlayerNum() - human_hash_.size()); - NotifyUiUpdate(); } + NotifyUiUpdate(); CombineTeam(); NotifyGameStart(); NotifyWxVoip(); @@ -2390,7 +2391,7 @@ a8::Vec2 Room::GetDefaultBornPoint() void Room::AddPlayerPostProc(Player* hum) { if (room_type_ == RT_NewBrid) { - CreateAndroid(20 + rand() % 10); + CreateAndroid(10 + rand() % 5); xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * (1 + rand() % 3), a8::XParams() .SetSender(hum), @@ -2566,8 +2567,12 @@ void Room::NewBieRoomStart() first_newbie_ = pair.second; break; } + int protect_time = MetaMgr::Instance()->level0room_robot_protect_time; + if (creator_game_times_ > 0) { + protect_time = 6; + } xtimer.AddDeadLineTimerAndAttach - (SERVER_FRAME_RATE * MetaMgr::Instance()->level0room_robot_protect_time, + (SERVER_FRAME_RATE * protect_time, a8::XParams() .SetSender(this), [] (const a8::XParams& param) @@ -2848,6 +2853,13 @@ void Room::ShuaLastGas() bool Room::IsMiniRoom() { + if (GetRoomType() == RT_NewBrid || + GetRoomType() == RT_MidBrid) { + if (a8::BetweenDays(Global::g_nowtime, creator_register_time_) > 0) { + return false; + } + } + return GetRoomType() == RT_NewBrid || GetRoomType() == RT_MidBrid || diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 122b880..8810a28 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -235,6 +235,7 @@ private: int level1room_born_point_uniid_ = 0; bool show_handed_ = false; int creator_game_times_ = 0; + int creator_register_time_ = 0; int current_teamid_ = 0; int current_uniid_ = FIXED_OBJECT_MAXID; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index acd75b5..e0a9fd1 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -87,6 +87,30 @@ static RoomType_e GetHumanRoomType(const cs::CMJoin& msg, int& game_times) } } + time_t register_time = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); +#if 1 + if (!msg.team_uuid().empty()) { + bool has_new_brid = false; + for (auto& team_member : msg.team_members()) { + if (team_member.create_time() != 0 && + a8::BetweenDays(Global::g_nowtime, team_member.create_time()) <= 0) { + has_new_brid = true; + break; + } + } + if (has_new_brid) { + return RT_OldBrid1; + } else { + return RT_OldBrid2; + } + } else { + if (a8::BetweenDays(Global::g_nowtime, register_time) <= 0) { + return RT_OldBrid1; + } else { + return RT_OldBrid2; + } + } +#else if (rank >= 0 && rank <= 10) { return RT_OldBrid1; } else if (rank >= 11 && rank <= 17) { @@ -96,6 +120,7 @@ static RoomType_e GetHumanRoomType(const cs::CMJoin& msg, int& game_times) } else { return RT_OldBrid1; } +#endif } void RoomMgr::Init() @@ -135,7 +160,8 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) } int game_times = 0; RoomType_e self_room_type = GetHumanRoomType(msg, game_times); - Room* room = GetJoinableRoom(msg, self_room_type, game_times); + time_t register_time = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); + Room* room = GetJoinableRoom(msg, self_room_type, game_times, register_time); if (!room) { JoinErrorHandle(msg, 3, hdr.socket_handle); return; @@ -165,7 +191,10 @@ int RoomMgr::OverRoomNum() return over_room_hash_.size(); } -Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room_type, int game_times) +Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, + const RoomType_e self_room_type, + int game_times, + int creator_register_time) { std::vector> group_rooms; for (int i = 0; i < RT_Max; ++i) { @@ -185,10 +214,10 @@ 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, game_times); + return CreateRoom(self_room_type, game_times, creator_register_time); } if (self_room_type == RT_MidBrid) { - return CreateRoom(self_room_type, game_times); + return CreateRoom(self_room_type, game_times, creator_register_time); } for (int i = 0; i < RT_Max; ++i) { for (Room* room : group_rooms[i]) { @@ -197,7 +226,7 @@ Room* RoomMgr::GetJoinableRoom(const cs::CMJoin& msg, const RoomType_e self_room } } } - return CreateRoom(self_room_type, game_times); + return CreateRoom(self_room_type, game_times, creator_register_time); } Room* RoomMgr::GetRoomByUuid(long long room_uuid) @@ -370,7 +399,7 @@ int RoomMgr::AllocRoomIdx() return current_room_idx_; } -Room* RoomMgr::CreateRoom(RoomType_e room_type, int game_times) +Room* RoomMgr::CreateRoom(RoomType_e room_type, int game_times, int creator_register_time) { int room_idx = AllocRoomIdx(); if (room_idx < 1) { @@ -382,6 +411,7 @@ Room* RoomMgr::CreateRoom(RoomType_e room_type, int game_times) init_info.room_uuid = App::Instance()->NewUuid(); init_info.room_type = room_type; init_info.creator_game_times = game_times; + init_info.creator_register_time = creator_register_time; if (GetRoomByUuid(init_info.room_uuid)) { abort(); } diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 1a325a6..311aa38 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -33,13 +33,16 @@ 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, int game_times); + Room* GetJoinableRoom(const cs::CMJoin& msg, + const RoomType_e self_room_type, + int game_times, + int creator_register_time); 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, int game_times); + Room* CreateRoom(RoomType_e room_type, int game_times, int creator_register_time); 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 ccfa369..86a4ac1 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -154,6 +154,7 @@ struct RoomInitInfo long long room_uuid = 0; RoomType_e room_type = RT_NewBrid; int creator_game_times = 0; + int creator_register_time = 0; const MetaData::Map* map_meta = nullptr; std::string map_tpl_name; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index f223dff..2167084 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -671,6 +671,7 @@ message MFTeamMember optional int32 game_times = 4; //游戏次数 optional int32 win_times = 5; //吃鸡次数 optional int32 kill_times = 6; //击杀数 + optional int32 create_time = 7; //账号创建时间 } //end mfmsg