1
This commit is contained in:
parent
40f80c2bd5
commit
c9cd7f7947
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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_;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user