1
This commit is contained in:
parent
45d40a8b02
commit
a47743f91b
@ -70,6 +70,7 @@ enum GuildMemberUpdateReason
|
|||||||
kGuildUpdateReasonJoin = 0,
|
kGuildUpdateReasonJoin = 0,
|
||||||
kGuildUpdateReasonAgree = 1,
|
kGuildUpdateReasonAgree = 1,
|
||||||
kGuildUpdateReasonSetJob = 2,
|
kGuildUpdateReasonSetJob = 2,
|
||||||
|
kGuildUpdateReasonInherit = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* const PROJ_NAME_FMT = "friend_imserver";
|
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()) {
|
if (member_hash_.empty()) {
|
||||||
guild_status_ = kGuildDismissed;
|
guild_status_ = kGuildDismissed;
|
||||||
} else {
|
} 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();
|
SaveToDB();
|
||||||
@ -1112,3 +1130,18 @@ void Guild::GenGuildData(Player* hum, long long guild_id, std::string& guild_dat
|
|||||||
}
|
}
|
||||||
guild_db.SerializeToString(&guild_data);
|
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);
|
const std::string& guild_log);
|
||||||
void SendErrorMsg(int sokcet_handle, const ss::MFIMMsgConext& context, const std::string& errmsg);
|
void SendErrorMsg(int sokcet_handle, const ss::MFIMMsgConext& context, const std::string& errmsg);
|
||||||
void QueryMemberOnlineState();
|
void QueryMemberOnlineState();
|
||||||
|
GuildMember* ChooseLeader(std::set<std::string>* members);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool dirty_ = false;
|
bool dirty_ = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user