1
This commit is contained in:
parent
20286a1e5f
commit
ff7a387d9d
@ -10,6 +10,8 @@
|
|||||||
#include "app.h"
|
#include "app.h"
|
||||||
#include "jsondatamgr.h"
|
#include "jsondatamgr.h"
|
||||||
|
|
||||||
|
const size_t MAX_RANK_HUMAN_NUM = 50;
|
||||||
|
|
||||||
void GuildMgr::Init()
|
void GuildMgr::Init()
|
||||||
{
|
{
|
||||||
auto mysql_cluster_conf = JsonDataMgr::Instance()->GetMysqlClusterConf();
|
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});
|
a8::UdpLog::Instance()->Debug("%d db done", {instance_id});
|
||||||
if (load_done_) {
|
if (load_done_) {
|
||||||
a8::UdpLog::Instance()->Debug("all db done", {});
|
a8::UdpLog::Instance()->Debug("all db done", {});
|
||||||
|
GenGuildRank();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -364,3 +367,61 @@ void GuildMgr::RefreshGuild(long long guild_id)
|
|||||||
},
|
},
|
||||||
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 LoadGuild(int instance_id, long long last_idx);
|
||||||
void OnOneDBDone(int instance_id);
|
void OnOneDBDone(int instance_id);
|
||||||
void RefreshGuild(long long guild_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:
|
private:
|
||||||
bool load_done_ = false;
|
bool load_done_ = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user