diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index b396841a..b3b24ccc 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2865,25 +2865,48 @@ int Room::JoinWithCustomBattle(std::shared_ptr p) } { - if (IsMobaModeRoom()) { - - } else { - 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 - ( - [this, p, room_team] (std::shared_ptr m) mutable -> bool - { - if (!m->IsAndroid()) { - Player* hum = InternalCreatePlayer(p, m, room_team); - } else { - Human* hum = CreateAndroidWithCustomMember(m, room_team); - } - return true; + 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 + ( + [this, p, room_team] (std::shared_ptr m) mutable -> bool + { + if (!m->IsAndroid()) { + Player* hum = InternalCreatePlayer(p, m, room_team); + } else { + Human* hum = CreateAndroidWithCustomMember(m, room_team); } - ); + return true; + } + ); + } + if (IsMobaModeRoom()) { + int side = a8::RandEx(1, 2); + for (size_t i = 0; i < 2; ++i) { + auto team = room_teams.at(i); + if (i == 0) { + moba_team_a_ = team.get(); + } else { + moba_team_b_ = team.get(); + } + team->TraverseMembers + ( + [this, side] (Human* hum) -> bool + { + hum->side = side; + std::shared_ptr born_point = std::make_shared(); + born_point->wo_meta = std::get<0>(GetMapMeta()->moba_born_points.at(side - 1)); + hum->SetBornPoint(born_point); + hum->InitMobaRoad(); + return true; + }); + if (side == 1) { + side = 2; + } else { + side = 1; + } } } p->TraverseObList