This commit is contained in:
aozhiwei 2024-05-30 15:49:56 +08:00
parent 40f80c2bd5
commit c9cd7f7947
5 changed files with 102 additions and 6 deletions

View File

@ -1756,7 +1756,7 @@ void Human::SendGameOver()
sent_personal_report_ = true;
}
if (GetTeam()->team_rank && GetTeam()->HasPlayer() && !GetTeam()->IsViewTeam() &&
stats->abandon_battle != 1) {
stats->abandon_battle != 1 && !room->IsMobaModeRoom()) {
GetTeam()->TrySendTeamBattleReport(this);
} else {
cs::SMGameOver msg;

View File

@ -2207,6 +2207,69 @@ void Room::AddObjectLater(RoomEntity* entity)
&entity->xtimer_attacher);
}
void Room::TryMobaReport(int try_count)
{
if (!IsMobaModeRoom()) {
return;
}
if (sending_moba_report_battle_) {
return;
}
if (already_moba_report_battle_) {
return;;
}
sending_moba_report_battle_ = true;
Player* player = nullptr;
TraversePlayerList
(
[&player] (Player* hum) -> bool
{
player = hum;
return true;
});
if (!player) {
return;
}
std::string url;
JsonDataMgr::Instance()->GetApiUrl(url);
if (url.find('?') != std::string::npos) {
url += "c=Battle&a=mobaTeamReport";
} else {
url += "?c=Battle&a=mobaTeamReport";
}
std::shared_ptr<a8::MutableXObject> params = a8::MutableXObject::CreateObject();
std::shared_ptr<a8::MutableXObject> post_data = a8::MutableXObject::CreateObject();
params->SetVal("account_id", player->account_id);
params->SetVal("session_id", player->session_id);
GenBattleMobaReportData(post_data.get());
std::string content = post_data->ToJsonStr();
HttpProxy::Instance()->HttpPost
(
[room_uuid = GetRoomUuid()]
(bool ok, a8::XObject* rsp_obj, f8::HttpContext* ctx)
{
auto room = RoomMgr::Instance()->GetRoomByUuid(room_uuid);
if (room) {
room->already_moba_report_battle_ = true;
room->sending_moba_report_battle_ = false;
room->TraverseHumanList
(
[] (Human* ele_hum) -> bool
{
ele_hum->SendGameOver();
return true;
});
}
},
url.c_str(),
*params.get(),
content
);
#ifdef MYDEBUG
a8::XPrintf("MobaReportReportLen:%d\n", {params->ToJsonStr().size()});
#endif
}
void Room::OnGameOver()
{
if (IsAlreadyRoomReportBattle() ||
@ -2228,6 +2291,9 @@ void Room::OnGameOver()
ele_hum->SendGameOver();
return true;
});
if (IsMobaModeRoom()) {
TryMobaReport(0);
}
xtimer.SetIntervalEx
(SERVER_FRAME_RATE / 0.5,
[this, frameno = GetFrameNo()] (int event, const a8::Args* args)
@ -3961,6 +4027,27 @@ void Room::GenBattleRoomReportData(a8::MutableXObject* params)
params->SetVal("team_list", *teams_pb);
}
void Room::GenBattleMobaReportData(a8::MutableXObject* params)
{
params->SetVal("version", 2023030201);
params->SetVal("room_uuid", a8::XValue(GetRoomUuid()));
params->SetVal("room_mode", GetReportRoomMode());
params->SetVal("map_mode", GetReportMapMode());
params->SetVal("map_id", GetMapMeta()->map_id());
auto teams_pb = a8::MutableXObject::CreateArray();
TraverseTeams
(
[&teams_pb] (Team* team) -> bool
{
auto team_pb = a8::MutableXObject::CreateObject();
team->GenBattleReportData(team_pb.get());
teams_pb->Push(*team_pb);
return true;
}
);
params->SetVal("team_list", *teams_pb);
}
void Room::StartOverTimer()
{
int param1 = 1;

View File

@ -375,7 +375,9 @@ private:
void IncAliveCount();
void DecAliveCount();
void GenBattleRoomReportData(a8::MutableXObject* params);
void GenBattleMobaReportData(a8::MutableXObject* params);
void TryRoomReport(int try_count);
void TryMobaReport(int try_count);
private:
bool destorying_ = false;
@ -389,6 +391,10 @@ private:
RoomType_e room_type_ = RoomType_NewBrid;
bool already_room_report_battle_ = false;
bool sending_room_report_battle_ = false;
bool already_moba_report_battle_ = false;
bool sending_moba_report_battle_ = false;
long long moba_overtime_race_frameno_ = 0;
GasData gas_data_;

View File

@ -205,7 +205,7 @@ void Team::SendTeamBattleReport(Human* sender)
return;
}
std::shared_ptr<a8::MutableXObject> post_data = a8::MutableXObject::CreateObject();
GenBattleReportData(player, post_data.get());
GenBattleReportData(post_data.get());
#ifdef MYDEBUG
a8::XPrintf("SendTeamBattleReport:%s\n", {post_data->ToJsonStr()});
#endif
@ -273,7 +273,7 @@ void Team::SendTeamBattleReport(Human* sender)
);
}
void Team::GenBattleReportData(Human* player, a8::MutableXObject* params)
void Team::GenBattleReportData(a8::MutableXObject* params)
{
params->SetVal("version", 2023030201);
params->SetVal("battle_uuid", a8::XValue(battle_uuid_));
@ -620,10 +620,13 @@ bool Team::AllIsDead()
void Team::TrySendTeamBattleReport(Human* sender)
{
if (!sending_battlereport_ && !already_report_battle_) {
if (room->IsMobaModeRoom()) {
} else {
sending_battlereport_ = true;
SendTeamBattleReport(sender);
}
}
}
void Team::GenRoomReportData(a8::MutableXObject* params)
{

View File

@ -49,7 +49,7 @@ class Team : public std::enable_shared_from_this<Team>
bool HasPlayer();
int GetPlayerNum();
void FillSMGameOver(cs::SMGameOver& msg);
void GenBattleReportData(Human* player, a8::MutableXObject* params);
void GenBattleReportData(a8::MutableXObject* params);
void GenRoomReportData(a8::MutableXObject* params);
void RunAway(Human* hum);
bool AllIsRunAway();