1
This commit is contained in:
parent
19efcf3ff1
commit
b777a99815
@ -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()) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user