1
This commit is contained in:
parent
45d40a8b02
commit
a47743f91b
@ -70,6 +70,7 @@ enum GuildMemberUpdateReason
|
||||
kGuildUpdateReasonJoin = 0,
|
||||
kGuildUpdateReasonAgree = 1,
|
||||
kGuildUpdateReasonSetJob = 2,
|
||||
kGuildUpdateReasonInherit = 3,
|
||||
};
|
||||
|
||||
const char* const PROJ_NAME_FMT = "friend_imserver";
|
||||
|
@ -362,7 +362,25 @@ void Guild::_CMGuildQuit(f8::MsgHdr& hdr, const cs::CMGuildQuit& msg)
|
||||
if (member_hash_.empty()) {
|
||||
guild_status_ = kGuildDismissed;
|
||||
} else {
|
||||
|
||||
std::vector<int> jobs = {kGuildAdmin, kGuildElite, kGuildMember};
|
||||
for (int job : jobs) {
|
||||
std::set<std::string>* members = GetJobMembers(job);
|
||||
if (members && !members->empty()) {
|
||||
GuildMember* new_leader = ChooseLeader(members);
|
||||
if (new_leader) {
|
||||
member_job_hash_[new_leader->account_id] = kGuildOwner;
|
||||
job_hash_[job].erase(new_leader->account_id);
|
||||
job_hash_[kGuildOwner].insert(new_leader->account_id);
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate
|
||||
(
|
||||
this,
|
||||
new_leader,
|
||||
kGuildUpdateReasonInherit
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SaveToDB();
|
||||
@ -1112,3 +1130,18 @@ void Guild::GenGuildData(Player* hum, long long guild_id, std::string& guild_dat
|
||||
}
|
||||
guild_db.SerializeToString(&guild_data);
|
||||
}
|
||||
|
||||
GuildMember* Guild::ChooseLeader(std::set<std::string>* members)
|
||||
{
|
||||
GuildMember* leader = nullptr;
|
||||
if (members && !members->empty()) {
|
||||
for (const std::string& member_id : *members) {
|
||||
leader = GetMember(member_id);
|
||||
if (leader) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return leader;
|
||||
}
|
||||
|
@ -62,6 +62,7 @@ private:
|
||||
const std::string& guild_log);
|
||||
void SendErrorMsg(int sokcet_handle, const ss::MFIMMsgConext& context, const std::string& errmsg);
|
||||
void QueryMemberOnlineState();
|
||||
GuildMember* ChooseLeader(std::set<std::string>* members);
|
||||
|
||||
private:
|
||||
bool dirty_ = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user