From ed389d54e625418abafa617014c9106c275b18e8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 2 Apr 2024 20:19:23 +0800 Subject: [PATCH] 1 --- server/gameserver/room.cc | 1 + server/gameserver/team.cc | 21 ++++++++++++++++++--- server/gameserver/team.h | 2 ++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 8ec78156..7b85d492 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3922,6 +3922,7 @@ void Room::GenBattleRoomReportData(a8::MutableXObject* params) [&teams_pb] (Team* team) -> bool { auto team_pb = a8::MutableXObject::CreateObject(); + team->GenRoomReportData(team_pb.get()); teams_pb->Push(*team_pb); return true; } diff --git a/server/gameserver/team.cc b/server/gameserver/team.cc index ef8430de..18bb2b08 100644 --- a/server/gameserver/team.cc +++ b/server/gameserver/team.cc @@ -273,8 +273,9 @@ void Team::SendTeamBattleReport(Human* sender) void Team::GenBattleReportData(Human* player, a8::MutableXObject* params) { + CheckBattleUuid(); params->SetVal("version", 2023030201); - params->SetVal("battle_uuid", a8::XValue(player->battle_uuid)); + params->SetVal("battle_uuid", a8::XValue(battle_uuid_)); params->SetVal("room_uuid", a8::XValue(room->GetRoomUuid())); params->SetVal("room_mode", room->GetReportRoomMode()); params->SetVal("team_id", GetTeamId()); @@ -503,6 +504,7 @@ void Team::GenBattleUuid() hum->battle_uuid = battle_uuid; hum->GetNetData()->battle_uuid = battle_uuid; } + battle_uuid_ = battle_uuid; } void Team::RunAway(Human* hum) @@ -632,8 +634,8 @@ void Team::TrySendTeamBattleReport(Human* sender) void Team::GenRoomReportData(a8::MutableXObject* params) { - std::string battle_uuid; - params->SetVal("battle_uuid", battle_uuid); + CheckBattleUuid(); + params->SetVal("battle_uuid", battle_uuid_); params->SetVal("team_id", GetTeamId()); if (room->IsPveRoom()) { @@ -839,3 +841,16 @@ void Team::GenRoomReportData(a8::MutableXObject* params) params->SetVal("pvp_team_kills", pvp_team_kills); } } + +void Team::CheckBattleUuid() +{ + TraverseMembers + ( + [this] (Human* hum) -> bool + { + if (battle_uuid_ != hum->battle_uuid) { + abort(); + } + return true; + }); +} diff --git a/server/gameserver/team.h b/server/gameserver/team.h index 51f1cc7d..16657f74 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -67,6 +67,7 @@ class Team : public std::enable_shared_from_this private: void SendTeamBattleReport(Human* sender); + void CheckBattleUuid(); private: int team_id_ = 0; @@ -80,5 +81,6 @@ private: long long last_kill_frameno_ = 0; bool sending_battlereport_ = false; bool already_report_battle_ = false; + std::string battle_uuid_; };