diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 6e033d3f..cb1d2e5e 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -44,6 +44,7 @@ Android::~Android() void Android::Initialize() { Human::Initialize(); + account_id = a8::Format("2006_0000_%d", {robot_meta->id()}); RandSkin(); GiveEquip(); RecalcBaseAttr(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e756a5dc..88650d75 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2213,7 +2213,30 @@ void Room::OnGameOver() }); return; } else { - TryRoomReport(0); + xtimer.SetIntervalEx + (SERVER_FRAME_RATE / 0.5, + [this, frameno = GetFrameNo()] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + bool all_sent = true; + TraverseTeams + ( + [&all_sent] (Team* team) -> bool + { + if (team->HasPlayer() && team->IsViewTeam() && + !team->IsAlreadyReportBattle()) { + all_sent = false; + return false; + } + return true; + }); + if (all_sent) { + TryRoomReport(0); + xtimer.DeleteCurrentTimer(); + } + } + }, + &xtimer_attacher_); } } @@ -3955,6 +3978,7 @@ void Room::TryRoomReport(int try_count) if (room) { room->already_room_report_battle_ = true; room->sending_room_report_battle_ = false; + room->StartOverTimer(); } }, url.c_str(), diff --git a/server/gameserver/team.h b/server/gameserver/team.h index 16657f74..52da260f 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -64,6 +64,7 @@ class Team : public std::enable_shared_from_this void FillMFTeamFull(cs::MFTeamFull* p); bool AllIsDead(); void TrySendTeamBattleReport(Human* sender); + bool IsAlreadyReportBattle() { return already_report_battle_;} private: void SendTeamBattleReport(Human* sender);