This commit is contained in:
aozhiwei 2023-02-13 18:53:24 +08:00
parent 19efcf3ff1
commit b777a99815

View File

@ -62,18 +62,25 @@
#include "pbutils.h" #include "pbutils.h"
static double TopXFunc (Human* sender, std::function<int (Human*, Human*)> cmpFunc) static double TopXFunc (Human* sender,
std::function<int (Human*, Human*)> cmpFunc,
bool need_group,
std::function<bool (Human*)> validFunc)
{ {
std::vector<std::vector<Human*>> rank_list; std::vector<std::vector<Human*>> rank_list;
double topx = 0.0f;
#if 0
sender->room->TraverseHumanList sender->room->TraverseHumanList
( (a8::XParams(),
[cmpFunc, &rank_list] (Human* hum) -> bool [cmpFunc, &rank_list, need_group] (Human* hum, a8::XParams& param) -> bool
{ {
bool found = false; bool found = false;
for (auto& list : rank_list) { if (need_group) {
if (cmpFunc(list[0], hum) == 0) { for (auto& list : rank_list) {
list.push_back(hum); if (cmpFunc(list[0], hum) == 0) {
found = true; list.push_back(hum);
found = true;
}
} }
} }
if (!found) { if (!found) {
@ -85,6 +92,15 @@ static double TopXFunc (Human* sender, std::function<int (Human*, Human*)> cmpFu
(rank_list.begin(), rank_list.end(), (rank_list.begin(), rank_list.end(),
[cmpFunc] (const std::vector<Human*>& a, const std::vector<Human*>& b ) [cmpFunc] (const std::vector<Human*>& a, const std::vector<Human*>& b )
{ {
a8::XPrintf("id1:%d dead:%d id2:%d dead:%d cmpRet:%d\n",
{
a[0]->GetUniId(),
a[0]->dead ? 1 :0,
b[0]->GetUniId(),
b[0]->dead ? 1 :0,
cmpFunc(a[0], b[0])
});
return cmpFunc(a[0], b[0]) > 0; return cmpFunc(a[0], b[0]) > 0;
}); });
@ -103,13 +119,21 @@ static double TopXFunc (Human* sender, std::function<int (Human*, Human*)> cmpFu
} }
} }
#if 1
double topx = (double)rank / 40.0f;
if (!validFunc(sender)) {
topx = 40.0f / 40.0f;
}
#else
double topx = (double)rank / rank_list.size(); double topx = (double)rank / rank_list.size();
#endif
#endif
return topx; return topx;
}; };
void PlayerStats::Statement(Human* sender) void PlayerStats::Statement(Human* sender)
{ {
sender->stats.ranked_topx = (double)sender->stats.rank / sender->room->GetHumanNum(); sender->stats.ranked_topx = (double)sender->stats.rank / sender->room->GetHumanNum();
sender->stats.kills_topx = TopXFunc sender->stats.kills_topx = TopXFunc
( (
sender, sender,
@ -122,6 +146,11 @@ void PlayerStats::Statement(Human* sender)
} else { } else {
return -1; return -1;
} }
},
true,
[] (Human* hum)
{
return hum->stats.kills > 0;
} }
); );
sender->stats.hero_topx = TopXFunc sender->stats.hero_topx = TopXFunc
@ -150,6 +179,17 @@ void PlayerStats::Statement(Human* sender)
} else { } else {
return -1; return -1;
} }
},
true,
[] (Human* hum)
{
if (hum->GetBattleContext()) {
int hero_lv = 0;
int quality = 0;
hum->GetBattleContext()->GetHeroLvQuality(hero_lv, quality);
return hero_lv + quality > 0;
}
return false;
} }
); );
sender->stats.weapon_topx = TopXFunc sender->stats.weapon_topx = TopXFunc
@ -178,6 +218,17 @@ void PlayerStats::Statement(Human* sender)
} else { } else {
return -1; return -1;
} }
},
true,
[] (Human* hum)
{
if (hum->GetBattleContext()) {
int weapon_lv = 0;
int quality = 0;
hum->GetBattleContext()->GetWeaponLvQuality(weapon_lv, quality);
return weapon_lv + quality > 0;
}
return false;
} }
); );
sender->stats.survival_topx = TopXFunc sender->stats.survival_topx = TopXFunc
@ -194,12 +245,8 @@ void PlayerStats::Statement(Human* sender)
return -1; return -1;
} }
} else { } else {
if (!(a->dead && b->dead)) { if (!a->dead && !b->dead) {
if (a->GetUniId() > b->GetUniId()) { return 0;
return 1;
} else {
return -1;
}
} else { } else {
if (!a->dead) { if (!a->dead) {
return 1; return 1;
@ -208,6 +255,11 @@ void PlayerStats::Statement(Human* sender)
} }
} }
} }
},
true,
[] (Human* hum)
{
return true;
} }
); );
if (sender->GetBattleContext()) { if (sender->GetBattleContext()) {