diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index f2bd72e3..a655260b 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1768,6 +1768,41 @@ void Player::_CMSetRevivePosition(f8::MsgHdr& hdr, const cs::CMSetRevivePosition void Player::_CMGetSettlementTeamList(f8::MsgHdr& hdr, const cs::CMGetSettlementTeamList& msg) { - cs::CMGetSettlementTeamList rspmsg; + cs::SMGetSettlementTeamList rspmsg; + std::vector sorted_teams; + room->TraverseTeams + ( + [&sorted_teams] (Team* team) -> bool + { + sorted_teams.push_back(team); + return true; + } + ); + std::sort(sorted_teams.begin(), sorted_teams.end(), + [] (Team* a, Team *b) -> bool + { + if (a->team_rank == 0 && b->team_rank == 0) { + return a->GetTeamId() < b->GetTeamId(); + } + return a->team_rank < b->team_rank; + }); + int team_rank = 1; + for (auto& team : sorted_teams) { + auto p = rspmsg.add_team_list(); + p->set_team_id(team->GetTeamId()); + p->set_team_rank(team_rank); + team->TraverseMembers + ( + [p] (Human* hum) -> bool + { + auto m = p->add_members(); + m->set_obj_uniid(hum->GetUniId()); + m->set_account_id(hum->account_id); + m->set_name(hum->name); + m->set_hero_id(hum->meta->id()); + return true; + }); + ++team_rank; + } SendNotifyMsg(rspmsg); }