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"
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;
double topx = 0.0f;
#if 0
sender->room->TraverseHumanList
(
[cmpFunc, &rank_list] (Human* hum) -> bool
(a8::XParams(),
[cmpFunc, &rank_list, need_group] (Human* hum, a8::XParams& param) -> bool
{
bool found = false;
for (auto& list : rank_list) {
if (cmpFunc(list[0], hum) == 0) {
list.push_back(hum);
found = true;
if (need_group) {
for (auto& list : rank_list) {
if (cmpFunc(list[0], hum) == 0) {
list.push_back(hum);
found = true;
}
}
}
if (!found) {
@ -85,6 +92,15 @@ static double TopXFunc (Human* sender, std::function<int (Human*, Human*)> cmpFu
(rank_list.begin(), rank_list.end(),
[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;
});
@ -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();
#endif
#endif
return topx;
};
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,
@ -122,6 +146,11 @@ void PlayerStats::Statement(Human* sender)
} else {
return -1;
}
},
true,
[] (Human* hum)
{
return hum->stats.kills > 0;
}
);
sender->stats.hero_topx = TopXFunc
@ -150,6 +179,17 @@ void PlayerStats::Statement(Human* sender)
} else {
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
@ -178,6 +218,17 @@ void PlayerStats::Statement(Human* sender)
} else {
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
@ -194,12 +245,8 @@ void PlayerStats::Statement(Human* sender)
return -1;
}
} else {
if (!(a->dead && b->dead)) {
if (a->GetUniId() > b->GetUniId()) {
return 1;
} else {
return -1;
}
if (!a->dead && !b->dead) {
return 0;
} else {
if (!a->dead) {
return 1;
@ -208,6 +255,11 @@ void PlayerStats::Statement(Human* sender)
}
}
}
},
true,
[] (Human* hum)
{
return true;
}
);
if (sender->GetBattleContext()) {