完成僵尸模式结算

This commit is contained in:
aozhiwei 2020-07-30 14:34:47 +08:00
parent 5b3286f3fa
commit 9a9cd8165d
3 changed files with 48 additions and 5 deletions

View File

@ -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*> 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*> 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);

View File

@ -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);

View File

@ -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;