diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 8e8c0d84..3e399fb8 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -858,12 +858,34 @@ void Human::FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_o void Human::FillSMGameOver(cs::SMGameOver& msg) { if (GetTeam()->already_report_battle) { + msg.mutable_settlement_new()->set_settlement_status(1); auto p = msg.mutable_settlement_new(); p->set_version(20230321); - p->set_settlement_status(1); p->set_team_id(GetTeam()->GetTeamId()); - p->set_battle_uuid(a8::XValue(battle_uuid).GetString()); p->set_room_uuid(a8::XValue(room->GetRoomUuid()).GetString()); + p->set_room_mode(room->IsPveRoom() ? 1 : 0); + p->set_team_mode(1); + p->set_game_over(room->IsGameOver() ? 1 : 0); + p->set_victory(stats->victory ? 1 : 0); + p->set_watchable(false); + p->set_map_id(room->GetMapMeta()->map_id()); + p->set_battle_uuid(a8::XValue(battle_uuid).GetString()); + + if (room->IsPveRoom()) { + p->set_pve_settlement_color(stats->settlement_color); + p->set_pve_wave(room->pve_data.GetPassedWave()); + p->set_pve_max_wave(room->pve_data.max_wave); + p->set_pve_instance_id(room->pve_instance->gemini_id()); + } else { + p->set_pvp_settlement_type(stats->pvp_settlement_type); + p->set_pvp_settlement_color(stats->settlement_color); + p->set_pvp_team_rank(GetTeam()->team_rank); + p->set_pvp_total_human_num(room->GetHumanNum()); + p->set_pvp_alive_human_num(room->AliveCount()); + p->set_pvp_total_team_num(room->GetTeamNum()); + p->set_pvp_match_mode(0); + } + GetTeam()->FillSMGameOver(msg); return; } else { msg.mutable_settlement_new()->set_settlement_status(0);