From 9a9cd8165d7707efd8cee3c2ef480d152dd3117d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 30 Jul 2020 14:34:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=83=B5=E5=B0=B8=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 51 ++++++++++++++++++++++++++++++++++---- server/gameserver/human.h | 1 + server/gameserver/types.h | 1 + 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index d30f74c..e62b660 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -944,6 +944,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) SendRollMsg(msg); } else { ((Human*)hum)->stats.kills++; + ((Human*)hum)->stats.last_kill_frameno = room->GetFrameNo(); ((Human*)hum)->kill_humans.insert(this); ((Human*)hum)->SyncAroundPlayers(__FILE__, __LINE__, __func__); if (weapon_id == VW_Tank) { @@ -2160,6 +2161,7 @@ void Human::ClearFrameData() void Human::GenBattleReportData(a8::MutableXObject* params) { + params->SetVal("room_mode", room->GetRoomMode()); int rank = 0; { std::vector human_list; @@ -2333,6 +2335,45 @@ void Human::GenBattleReportData(a8::MutableXObject* params) params->SetVal("rank_score", stats.rank_score); } +void Human::GenZbModeBattleReportData(a8::MutableXObject* params) +{ + params->SetVal("room_mode", room->GetRoomMode()); + int rank = 0; + { + std::vector human_list; + room->TouchHumanList(a8::XParams(), + [&human_list] (Human* hum, a8::XParams& param) -> bool + { + human_list.push_back(hum); + return true; + }); + std::sort(human_list.begin(), human_list.end(), + [] (Human* a, Human* b ) + { + if (a->stats.kills > b->stats.kills) { + return true; + } + if (a->stats.last_kill_frameno < b->stats.last_kill_frameno) { + return true; + } + return a->GetEntityUniId() < b->GetEntityUniId(); + }); + rank = human_list.size(); + for (size_t i = 0; i < human_list.size(); ++i) { + if (human_list[i] == this) { + rank = i + 1; + break; + } + } + } + stats.rank = rank; + params->SetVal("account_id", account_id); + params->SetVal("map_id", room->GetMapMeta()->i->map_id()); + params->SetVal("game_time", time(nullptr)); + params->SetVal("rank", rank); + params->SetVal("kills", stats.kills); +} + void Human::DeadDrop() { for (auto& weapon : weapons) { @@ -2390,7 +2431,11 @@ void Human::DeadDrop() void Human::SendBattleReport() { a8::MutableXObject* params = a8::MutableXObject::NewObject(); - GenBattleReportData(params); + if (room->GetRoomMode() == kZombieMode) { + GenZbModeBattleReportData(params); + } else { + GenBattleReportData(params); + } auto on_ok = [] (a8::XParams& param, a8::XObject& data) { }; @@ -2410,11 +2455,7 @@ void Human::SendBattleReport() url = "https://game2004api-test.kingsome.cn/webapp/index.php?c=Role&a=battleReport"; } } else { - #if 1 url = "http://game2004api.kingsome.cn/webapp/index.php?c=Role&a=battleReport"; - #else - url = "https://game2004api.kingsome.cn/webapp/index.php?c=Role&a=battleReport"; - #endif } std::string data; params->ToUrlEncodeStr(data); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 67deca3..f522c64 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -302,6 +302,7 @@ protected: private: void ClearFrameData(); void GenBattleReportData(a8::MutableXObject* params); + void GenZbModeBattleReportData(a8::MutableXObject* params); void FillSMGameOver(cs::SMGameOver& msg); void SendBattleReport(); void FindLocationWithTarget(Entity* target); diff --git a/server/gameserver/types.h b/server/gameserver/types.h index b982aa2..5b6f177 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -62,6 +62,7 @@ struct Skin struct PlayerStats { int kills = 0; + long long last_kill_frameno = 0; int damage_amount_in = 0; int damage_amount_out = 0; int heal_amount = 0;