From b5149a0e6e80d2d43e492d17851042fb8a8dde0f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 4 Feb 2024 21:37:45 +0800 Subject: [PATCH] 1 --- server/gameserver/pbutils.cc | 14 ++++++++++---- server/gameserver/room.cc | 4 ++-- server/gameserver/team.cc | 27 +++++++++++++++++++++++++++ server/gameserver/team.h | 1 + 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index e4df7067..5bcd0580 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1666,11 +1666,14 @@ void Human::SendGameOver() if (room->IsNewBieRoom()) { return; } - if (GetTeam()->HasPlayer()) { + if (stats->abandon_battle == 1 || (GetTeam()->HasPlayer()) || GetTeam()->MemberHasOb()) { if (GetTeam()->already_report_battle) { cs::SMGameOver msg; FillSMGameOver(msg); - SendNotifyMsg(msg); + if (msg.settlement_new().battle_uuid().empty()) { + abort(); + } + SendMsgSelfAndOb(msg); #ifdef MYDEBUG if (IsPlayer()) { a8::XPrintf("SMGameOver:%s\n", {f8::PbToJson(&msg)}); @@ -1682,7 +1685,7 @@ void Human::SendGameOver() SendPersonalBattleReport(); sent_personal_report_ = true; } - if (GetTeam()->team_rank) { + if (GetTeam()->team_rank && GetTeam()->HasPlayer()) { if (!GetTeam()->sending_battlereport) { GetTeam()->sending_battlereport = true; GetTeam()->SendTeamBattleReport(this); @@ -1690,7 +1693,10 @@ void Human::SendGameOver() } else { cs::SMGameOver msg; FillSMGameOver(msg); - SendNotifyMsg(msg); + if (msg.settlement_new().battle_uuid().empty()) { + abort(); + } + SendMsgSelfAndOb(msg); #ifdef MYDEBUG if (IsPlayer()) { a8::XPrintf("SMGameOver:%s\n", {f8::PbToJson(&msg)}); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 206ba75f..b953e383 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2147,7 +2147,7 @@ void Room::AddObjectLater(RoomEntity* entity) void Room::OnGameOver() { - TraverseRawHumanList + TraverseHumanList ( [] (Human* ele_hum) -> bool { @@ -2173,7 +2173,7 @@ void Room::OnGameOver() #endif RoomMgr::Instance()->AddOverRoom(room_uuid_); } - TraverseRawHumanList + TraverseHumanList ( [] (Human* ele_hum) -> bool { diff --git a/server/gameserver/team.cc b/server/gameserver/team.cc index a851dcbc..da80eede 100644 --- a/server/gameserver/team.cc +++ b/server/gameserver/team.cc @@ -574,3 +574,30 @@ void Team::RemoveMember(Human* member) first_member_ = hum; } } + +bool Team::MemberHasOb() +{ + if (IsViewTeam()) { + return false; + } + bool has = false; + TraverseMembers + ( + [&has] (Human* ele_hum) -> bool + { + ele_hum->TraverseObservers + ( + [&has] (Human* ele_hum, bool& stop) + { + if (ele_hum->IsOb()) { + has = true; + stop = true; + } + }); + if (has) { + return false; + } + return true; + }); + return has; +} diff --git a/server/gameserver/team.h b/server/gameserver/team.h index feb9124c..3cf04c3c 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -60,6 +60,7 @@ class Team : public std::enable_shared_from_this void IncKillCount(); int GetKillCount(); long long GetLastKillFrameNo() { return last_kill_frameno_; } + bool MemberHasOb(); private: int team_id_ = 0;