From 49b03c656c5a447da6be64ccb7ee5f4b2aea9ce7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 26 Mar 2024 08:46:17 +0800 Subject: [PATCH] 1 --- server/gameserver/custom_battle.cc | 2 +- server/gameserver/pbutils.cc | 95 +++++++++++++++++++++++++++++- server/gameserver/room.h | 3 +- 3 files changed, 94 insertions(+), 6 deletions(-) diff --git a/server/gameserver/custom_battle.cc b/server/gameserver/custom_battle.cc index d062c524..278fc664 100644 --- a/server/gameserver/custom_battle.cc +++ b/server/gameserver/custom_battle.cc @@ -374,7 +374,7 @@ void CustomBattle::GameStart() } } SetRoom(room.get()); - //room->JoinWithCustomBattle(ip_saddr, socket_handle, join_msg, p); + room->JoinWithCustomBattle(shared_from_this()); } else { abort(); } diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 4f7f4125..2e902742 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2695,6 +2695,40 @@ int Room::InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr std::shared_ptr p) { #if 1 + std::vector> room_teams; + std::vector> net_teams; + p->TraverseTeamList + ( + [this, &room_teams, &net_teams] (std::shared_ptr team) -> bool + { + auto new_team = NewTeam(); + new_team->SetInitTeamMemberNum(0); + new_team->SetAutoFill(true); + room_teams.push_back(new_team); + net_teams.push_back(team); + return true; + }); + if (room_teams.empty()) { + abort(); + } + if (IsMobaModeRoom() && + room_teams.size() != 2) { + abort(); + } + cs::CMJoin join_msg = *msg; + for (size_t i = 0; i < net_teams.size(); ++i) { + auto net_team = net_teams.at(i); + auto room_team = room_teams.at(i); + room_team->SetInitTeamMemberNum(net_team->GetMemberNum()); + net_team->TraverseMember + ( + [join_msg, p, room_team] (std::shared_ptr m) mutable -> bool + { + Player* hum = InternalCreatePlayer(p, m, room_team, join_msg); + return true; + } + ); + } #else std::vector> room_teams; std::vector> net_teams; @@ -2807,10 +2841,64 @@ int Room::InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr return 0; } -int Room::JoinWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr msg, - std::shared_ptr p) +int Room::JoinWithCustomBattle(std::shared_ptr p) { - std::vector> room_teams; +#if 1 + std::vector> room_teams; + std::vector> net_teams; + p->TraverseTeamList + ( + [this, &room_teams, &net_teams] (std::shared_ptr team) -> bool + { + auto new_team = NewTeam(); + new_team->SetInitTeamMemberNum(0); + new_team->SetAutoFill(true); + room_teams.push_back(new_team); + net_teams.push_back(team); + return true; + }); + if (room_teams.empty()) { + abort(); + } + if (IsMobaModeRoom() && + room_teams.size() != 2) { + abort(); + } + + { + p->TraverseObList + ( + [this, p] (std::shared_ptr m) mutable -> bool + { + auto new_team = NewViewTeam(); + new_team->SetInitTeamMemberNum(0); + new_team->SetAutoFill(true); + #if 0 + Player* hum = InternalCreatePlayer(p, m, new_team, join_msg, + [p] (Player* hum) + { + a8::SetBitFlag(hum->status, CS_IsOb); + p->GetRoom()->GetRoomOb()->AddOb(hum); + }); + #endif + return true; + }); + } + #if 0 + { + auto hum = GetPlayerByAccountId(msg->account_id()); + if (hum) { + hum->ReJoin(ip_saddr, socket_handle, msg); + } else { + auto hum = p->GetRoom()->GetRoomOb()->GetByAccountId(msg->account_id()); + if (hum) { + hum->ReJoin(ip_saddr, socket_handle, msg); + } + } + } + #endif +#else + std::vector> room_teams; std::vector> net_teams; p->TraverseTeamList ( @@ -2917,6 +3005,7 @@ int Room::JoinWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr } } } +#endif return 0; } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index d20fb637..d72a2d36 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -283,8 +283,7 @@ public: int GenShotUniid() { return ++current_shot_uniid_; } int InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr msg, std::shared_ptr p); - int JoinWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr msg, - std::shared_ptr p); + int JoinWithCustomBattle(std::shared_ptr p); void CreateAndroid(int android_num, std::shared_ptr team = nullptr); int GetFullLevelIdx() { return ++curr_full_level_idx_;} std::shared_ptr GetRoomOb();