1
This commit is contained in:
parent
20286a1e5f
commit
ff7a387d9d
@ -10,6 +10,8 @@
|
||||
#include "app.h"
|
||||
#include "jsondatamgr.h"
|
||||
|
||||
const size_t MAX_RANK_HUMAN_NUM = 50;
|
||||
|
||||
void GuildMgr::Init()
|
||||
{
|
||||
auto mysql_cluster_conf = JsonDataMgr::Instance()->GetMysqlClusterConf();
|
||||
@ -322,6 +324,7 @@ void GuildMgr::OnOneDBDone(int instance_id)
|
||||
a8::UdpLog::Instance()->Debug("%d db done", {instance_id});
|
||||
if (load_done_) {
|
||||
a8::UdpLog::Instance()->Debug("all db done", {});
|
||||
GenGuildRank();
|
||||
}
|
||||
}
|
||||
|
||||
@ -364,3 +367,61 @@ void GuildMgr::RefreshGuild(long long guild_id)
|
||||
},
|
||||
guild_id);
|
||||
}
|
||||
|
||||
void GuildMgr::GenGuildRank()
|
||||
{
|
||||
auto force_rank_list =
|
||||
[this] (int gameid) -> std::vector<cs::MFGuildBasic*>&
|
||||
{
|
||||
auto itr = sorted_game_guild_list_.find(gameid);
|
||||
if (itr != sorted_game_guild_list_.end()) {
|
||||
return itr->second;
|
||||
}
|
||||
sorted_game_guild_list_[gameid] = std::vector<cs::MFGuildBasic*>();
|
||||
return sorted_game_guild_list_[gameid];
|
||||
};
|
||||
sorted_game_guild_list_.clear();
|
||||
for (auto& pair : guild_hash_) {
|
||||
auto guild = pair.second;
|
||||
std::vector<cs::MFGuildBasic*>& rank_list = force_rank_list(guild->_gameid());
|
||||
UpdateRank(rank_list, guild);
|
||||
}
|
||||
}
|
||||
|
||||
void GuildMgr::ResortRank(std::vector<cs::MFGuildBasic*>& rank_list)
|
||||
{
|
||||
std::sort(rank_list.begin(),
|
||||
rank_list.end(),
|
||||
[] (cs::MFGuildBasic* a, cs::MFGuildBasic* b) -> bool
|
||||
{
|
||||
return GuildMgr::Instance()->CmpGuild(a, b);
|
||||
});
|
||||
}
|
||||
|
||||
void GuildMgr::UpdateRank(std::vector<cs::MFGuildBasic*>& rank_list, cs::MFGuildBasic* guild)
|
||||
{
|
||||
if (rank_list.size() < MAX_RANK_HUMAN_NUM) {
|
||||
if (std::find(rank_list.begin(), rank_list.end(), guild) == rank_list.end()) {
|
||||
rank_list.push_back(guild);
|
||||
ResortRank(rank_list);
|
||||
}
|
||||
} else {
|
||||
if (CmpGuild(guild, rank_list[rank_list.size() - 1])) {
|
||||
if (std::find(rank_list.begin(), rank_list.end(), guild) == rank_list.end()) {
|
||||
rank_list[rank_list.size() - 1] = guild;
|
||||
ResortRank(rank_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool GuildMgr::CmpGuild(cs::MFGuildBasic* a, cs::MFGuildBasic* b)
|
||||
{
|
||||
if (a->guild_lv() > b->guild_lv()) {
|
||||
return true;
|
||||
}
|
||||
if (a->guild_exp() > b->guild_exp()) {
|
||||
return true;
|
||||
}
|
||||
return a->guild_id() > b->guild_id();
|
||||
}
|
||||
|
@ -27,6 +27,10 @@ class GuildMgr : public a8::Singleton<GuildMgr>
|
||||
void LoadGuild(int instance_id, long long last_idx);
|
||||
void OnOneDBDone(int instance_id);
|
||||
void RefreshGuild(long long guild_id);
|
||||
void GenGuildRank();
|
||||
void ResortRank(std::vector<cs::MFGuildBasic*>& rank_list);
|
||||
void UpdateRank(std::vector<cs::MFGuildBasic*>& rank_list, cs::MFGuildBasic* guild);
|
||||
bool CmpGuild(cs::MFGuildBasic* a, cs::MFGuildBasic* b);
|
||||
|
||||
private:
|
||||
bool load_done_ = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user