1
This commit is contained in:
parent
443def2ff7
commit
d32dc250aa
@ -18,6 +18,7 @@
|
|||||||
#include "framework/cpp/httpclientpool.h"
|
#include "framework/cpp/httpclientpool.h"
|
||||||
|
|
||||||
const int GUILD_MAX_MEMBER_NUM = 5;
|
const int GUILD_MAX_MEMBER_NUM = 5;
|
||||||
|
const int GUILD_MAX_ADMIN_NUM = 1;
|
||||||
|
|
||||||
enum GuildApplyStatus_e
|
enum GuildApplyStatus_e
|
||||||
{
|
{
|
||||||
@ -517,6 +518,7 @@ void Guild::_CMGuildQuit(f8::MsgHdr& hdr, const cs::CMGuildQuit& msg)
|
|||||||
new_leader,
|
new_leader,
|
||||||
kGuildUpdateReasonInherit
|
kGuildUpdateReasonInherit
|
||||||
);
|
);
|
||||||
|
SetNewLeader(new_leader);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -882,83 +884,25 @@ void Guild::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob&
|
|||||||
respmsg);
|
respmsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (GetMemberJob(member->account_id) == msg.job()) {
|
||||||
|
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||||
|
forward_msg->context(),
|
||||||
|
respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (msg.job() == kGuildAdmin) {
|
||||||
|
if (GetJobMemberNum(msg.job()) >= GUILD_MAX_ADMIN_NUM) {
|
||||||
|
SendErrorMsg(hdr.socket_handle, forward_msg->context(), "副队长数量已达上限");
|
||||||
|
respmsg.set_errcode(3);
|
||||||
|
respmsg.set_errmsg("副队长数量已达上限");
|
||||||
|
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||||
|
forward_msg->context(),
|
||||||
|
respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int src_job = GetMemberJob(member->account_id);
|
ForceSetJob(member, msg.job());
|
||||||
if (src_job != msg.job()) {
|
|
||||||
{
|
|
||||||
std::set<std::string>* noraml_members = GetJobMembers(src_job);
|
|
||||||
noraml_members->erase(member->account_id);
|
|
||||||
}
|
|
||||||
switch (msg.job()) {
|
|
||||||
case kGuildOwner:
|
|
||||||
{
|
|
||||||
owner_id_ = member->account_id;
|
|
||||||
owner_name_ = member->nickname;
|
|
||||||
owner_avatar_url_ = member->avatar_url;
|
|
||||||
member_job_hash_[sender->account_id] = kGuildMember;
|
|
||||||
member_job_hash_[member->account_id] = kGuildOwner;
|
|
||||||
{
|
|
||||||
std::set<std::string>* members = GetJobMembers(kGuildOwner);
|
|
||||||
members->clear();
|
|
||||||
members->insert(member->account_id);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::set<std::string>* members = GetJobMembers(kGuildMember);
|
|
||||||
members->insert(sender->account_id);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, sender, kGuildUpdateReasonSetJob);
|
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonSetJob);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
auto p = respmsg.add_chged_members();
|
|
||||||
p->add_values(sender->account_id);
|
|
||||||
p->add_values(a8::XValue(GetMemberJob(sender->account_id)).GetString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case kGuildAdmin:
|
|
||||||
{
|
|
||||||
member_job_hash_[member->account_id] = kGuildAdmin;
|
|
||||||
{
|
|
||||||
std::set<std::string>* members = GetJobMembers(kGuildAdmin);
|
|
||||||
for (const std::string& old_member_id : *members) {
|
|
||||||
GuildMember* old_member = GetMember(old_member_id);
|
|
||||||
if (old_member) {
|
|
||||||
member_job_hash_[old_member_id] = kGuildMember;
|
|
||||||
std::set<std::string>* noraml_members = GetJobMembers(kGuildMember);
|
|
||||||
noraml_members->insert(old_member_id);
|
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this,
|
|
||||||
old_member,
|
|
||||||
kGuildUpdateReasonSetJob);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
members->clear();
|
|
||||||
members->insert(member->account_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case kGuildElite:
|
|
||||||
{
|
|
||||||
member_job_hash_[member->account_id] = kGuildElite;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
member_job_hash_[member->account_id] = kGuildMember;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
GameLog::Instance()->GuildSetJob(this,
|
|
||||||
sender,
|
|
||||||
src_job);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
auto p = respmsg.add_chged_members();
|
|
||||||
p->add_values(member->account_id);
|
|
||||||
p->add_values(a8::XValue(GetMemberJob(member->account_id)).GetString());
|
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonSetJob);
|
|
||||||
}
|
|
||||||
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||||
forward_msg->context(),
|
forward_msg->context(),
|
||||||
respmsg);
|
respmsg);
|
||||||
@ -1641,3 +1585,74 @@ void Guild::RecalcRedPoint()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Guild::SetNewLeader(GuildMember* member)
|
||||||
|
{
|
||||||
|
owner_id_ = member->account_id;
|
||||||
|
owner_name_ = member->nickname;
|
||||||
|
owner_avatar_url_ = member->avatar_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Guild::ForceSetJob(GuildMember* member, int new_job)
|
||||||
|
{
|
||||||
|
if (!IsValidGuildJob(new_job)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GuildMember* old_owner = GetMember(owner_id_);
|
||||||
|
if (!old_owner || GetMemberJob(owner_id_) != kGuildOwner) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (old_owner == member) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int old_job = GetMemberJob(member->account_id);
|
||||||
|
switch (new_job) {
|
||||||
|
case kGuildOwner:
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::set<std::string>* members = GetJobMembers(kGuildOwner);
|
||||||
|
members->clear();
|
||||||
|
members->insert(member->account_id);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::set<std::string>* members = GetJobMembers(kGuildMember);
|
||||||
|
members->insert(old_owner->account_id);
|
||||||
|
}
|
||||||
|
member_job_hash_[old_owner->account_id] = kGuildMember;
|
||||||
|
member_job_hash_[member->account_id] = kGuildOwner;
|
||||||
|
SyncHelper::Instance()->SyncGuildMemberUpdate(this, old_owner, kGuildUpdateReasonSetJob);
|
||||||
|
SetNewLeader(member);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case kGuildAdmin:
|
||||||
|
{
|
||||||
|
if (GetJobMemberNum(new_job) >= GUILD_MAX_ADMIN_NUM) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::set<std::string>* members = GetJobMembers(new_job);
|
||||||
|
members->insert(member->account_id);
|
||||||
|
member_job_hash_[member->account_id] = new_job;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case kGuildElite:
|
||||||
|
case kGuildMember:
|
||||||
|
{
|
||||||
|
std::set<std::string>* members = GetJobMembers(new_job);
|
||||||
|
members->insert(member->account_id);
|
||||||
|
member_job_hash_[member->account_id] = new_job;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::set<std::string>* members = GetJobMembers(old_job);
|
||||||
|
members->erase(member->account_id);
|
||||||
|
}
|
||||||
|
GameLog::Instance()->GuildSetJob(this, member, old_job);
|
||||||
|
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonSetJob);
|
||||||
|
}
|
||||||
|
@ -74,6 +74,8 @@ private:
|
|||||||
void CombineRepeatApply();
|
void CombineRepeatApply();
|
||||||
void GuildAgreeCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg);
|
void GuildAgreeCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg);
|
||||||
void RecalcRedPoint();
|
void RecalcRedPoint();
|
||||||
|
void SetNewLeader(GuildMember* member);
|
||||||
|
void ForceSetJob(GuildMember* member, int new_job);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool dirty_ = false;
|
bool dirty_ = false;
|
||||||
|
@ -554,7 +554,6 @@ message SMGuildMemberSetJob
|
|||||||
{
|
{
|
||||||
optional int32 errcode = 1; //错误码
|
optional int32 errcode = 1; //错误码
|
||||||
optional string errmsg = 2; //错误信息
|
optional string errmsg = 2; //错误信息
|
||||||
repeated MFStringTuple chged_members = 3; //发生职位变更的玩家 values[0]: account_id values[1]: job
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//同意邀请
|
//同意邀请
|
||||||
|
Loading…
x
Reference in New Issue
Block a user