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