This commit is contained in:
殷勇 2023-09-20 13:07:50 +08:00
parent f6730e9cde
commit c2bfa892b9
4 changed files with 70 additions and 41 deletions

View File

@ -16,6 +16,18 @@ const (
GAME_ID = 206 GAME_ID = 206
) )
// im server chat
const (
kCCBegin = iota
kCCWorld = 1
kCCPrivate = 2
kCCGuild = 3
kCCTeam = 4
kCCBigHorn = 5
kCCLoopMsg = 6
kCCEnd
)
// im server friend // im server friend
const ( const (
MaxFriendMembers = 200 MaxFriendMembers = 200
@ -36,21 +48,11 @@ const (
OnlineStatus = 1 // 在线状态 在线 OnlineStatus = 1 // 在线状态 在线
) )
const (
kCCBegin = iota
kCCWorld = 1
kCCPrivate = 2
kCCGuild = 3
kCCTeam = 4
kCCBigHorn = 5
kCCLoopMsg = 6
kCCEnd
)
// im server guild // im server guild
const ( const (
RandomGuildCount = 10 RandomGuildCount = 10
MaxMembers = 30 MaxMembers = 30
MaxMembersViceLeader = 2
MaxPendingReqs = 10 MaxPendingReqs = 10
DefaultLogs = 20 DefaultLogs = 20
LogTypeApprove = 1 // 公会日志类型, 批准加入 LogTypeApprove = 1 // 公会日志类型, 批准加入
@ -105,21 +107,22 @@ const (
ERR_CODE_SEARCH_NO_RESULT = 11016 ERR_CODE_SEARCH_NO_RESULT = 11016
// Guild // Guild
ERR_CODE_GUILD_NO_EXISTS = 12001 ERR_CODE_GUILD_NO_EXISTS = 12001
ERR_CODE_JOINED_GUILD = 12002 ERR_CODE_JOINED_GUILD = 12002
ERR_CODE_CREATE_GUILD_FAIL = 12003 ERR_CODE_CREATE_GUILD_FAIL = 12003
ERR_CODE_APPLY_GUILD_FAIL = 12004 ERR_CODE_APPLY_GUILD_FAIL = 12004
ERR_CODE_GUILD_MEMBER_NO_EXISTS = 12005 ERR_CODE_GUILD_MEMBER_NO_EXISTS = 12005
ERR_CODE_GUILD_MEMBER_FULL = 12006 ERR_CODE_GUILD_MEMBER_FULL = 12006
ERR_CODE_GUILD_PENDING_REQUEST_NO_EXISTS = 12007 ERR_CODE_GUILD_PENDING_REQUEST_NO_EXISTS = 12007
ERR_CODE_GUILD_NO_LEADER_PERM = 12008 ERR_CODE_GUILD_NO_LEADER_PERM = 12008
ERR_CODE_GUILD_BLOCKED_LEADER = 12009 ERR_CODE_GUILD_BLOCKED_LEADER = 12009
ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM = 12010 ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM = 12010
ERR_CODE_GUILD_DISMISS_MEMBER_NO_PERM = 12011 ERR_CODE_GUILD_DISMISS_MEMBER_NO_PERM = 12011
ERR_CODE_CREATE_GUILD_DB_FAIL = 12013 ERR_CODE_CREATE_GUILD_DB_FAIL = 12013
ERR_CODE_CREATE_GUILD_MEMBER_DB_FAIL = 12014 ERR_CODE_CREATE_GUILD_MEMBER_DB_FAIL = 12014
ERR_CODE_UPDATE_GUILD_DB_FAIL = 12015 ERR_CODE_UPDATE_GUILD_DB_FAIL = 12015
ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL = 12016 ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL = 12016
ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL = 12017 ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL = 12017
ERR_CODE_REQUEST_PARAMS_ERROR = 12018 ERR_CODE_REQUEST_PARAMS_ERROR = 12018
ERR_CODE_GUILD_SETMEMBERLEVEL_VICE_LEADER_MAX_LIMIT = 12019
) )

View File

@ -46,6 +46,16 @@ func (g *Guild) GetMembersCount() int {
return len(g.Members) return len(g.Members)
} }
func (g *Guild) GetMembersViceLeaderCount() int {
count := 0
for _, member := range g.Members {
if member.Level == GuildMemberLevelViceLeader {
count++
}
}
return count
}
// GetMember 根据 AccountId 获取成员信息 // GetMember 根据 AccountId 获取成员信息
func (g *Guild) GetMember(accountId string) *GuildMember { func (g *Guild) GetMember(accountId string) *GuildMember {
if member, exists := g.Members[accountId]; exists { if member, exists := g.Members[accountId]; exists {

View File

@ -524,7 +524,7 @@ func (gm *GuildMgr) DismissMember(operatorAccountId, accountId string, cb func(e
} }
// SetMemberLevel 设置公会成员等级 // SetMemberLevel 设置公会成员等级
func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, level int32, cb func(errCode int32, errMsg string)) { func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, newLevel int32, cb func(errCode int32, errMsg string)) {
// 干部, 精英, 副会长 // 干部, 精英, 副会长
guild := gm.GetGuildByAccountId(operatorAccountId) guild := gm.GetGuildByAccountId(operatorAccountId)
if guild == nil { if guild == nil {
@ -544,24 +544,26 @@ func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, level in
} }
beforeLevel := member.Level beforeLevel := member.Level
if member.Level == level { if member.Level == newLevel {
cb(ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM, "SetMemberLevel error") cb(ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM, "SetMemberLevel error")
return return
} }
fields := [][]string{{"level", q5.ToString(level)}} // 副会长上限2个
if newLevel == GuildMemberLevelViceLeader && guild.GetMembersViceLeaderCount() >= MaxMembersViceLeader {
cb(ERR_CODE_GUILD_SETMEMBERLEVEL_VICE_LEADER_MAX_LIMIT, "SetMemberLevel Vice leader max limit")
return
}
fields := [][]string{{"level", q5.ToString(newLevel)}}
gm.updateGuildMember(guild, member.AccountId, fields, func(err error) { gm.updateGuildMember(guild, member.AccountId, fields, func(err error) {
if err != nil { if err != nil {
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error()) cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
return return
} }
member.Level = level
// 转让会长的操作 // 转让会长的操作
if level == GuildMemberLevelLeader { if newLevel == GuildMemberLevelLeader {
operatorMember := guild.GetMember(operatorAccountId)
operatorMember.Level = GuildMemberLevelDefault
guild.LeaderId = member.AccountId guild.LeaderId = member.AccountId
updateFields := [][]string{ updateFields := [][]string{
{"leader_account_id", q5.ToString(guild.LeaderId)}, {"leader_account_id", q5.ToString(guild.LeaderId)},
@ -571,19 +573,32 @@ func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, level in
cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error()) cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error())
return return
} }
// 新会长
newMemberFields := [][]string{{"level", q5.ToString(member.Level)}} // 旧会长 -> 普通成员
gm.updateGuildMember(guild, member.AccountId, newMemberFields, oldMember := guild.GetMember(operatorAccountId)
oldMemberFields := [][]string{{"level", q5.ToString(GuildMemberLevelDefault)}}
gm.updateGuildMember(guild, oldMember.AccountId, oldMemberFields,
func(err error) { func(err error) {
if err != nil { if err != nil {
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error()) cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
return return
} }
oldMember.Level = GuildMemberLevelDefault
}) })
}) })
} }
logContent := fmt.Sprintf("SetMemberLevel[%d-%s-%s-%d-%d]", guild.GuildId, operatorAccountId, accountId, beforeLevel, level) newMemberFields := [][]string{{"level", q5.ToString(newLevel)}}
gm.updateGuildMember(guild, member.AccountId, newMemberFields,
func(err error) {
if err != nil {
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
return
}
member.Level = newLevel
})
logContent := fmt.Sprintf("SetMemberLevel[%d-%s-%s-%d-%d]", guild.GuildId, operatorAccountId, accountId, beforeLevel, newLevel)
gm.WriteLog(guild.GuildId, accountId, LogTypeChangeLevel, logContent) gm.WriteLog(guild.GuildId, accountId, LogTypeChangeLevel, logContent)
// Add event // Add event
@ -591,7 +606,7 @@ func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, level in
prop["guild_id"] = q5.ToString(guild.GuildId) prop["guild_id"] = q5.ToString(guild.GuildId)
prop["accountId"] = q5.ToString(accountId) prop["accountId"] = q5.ToString(accountId)
prop["beforeMemberLevel"] = q5.ToString(beforeLevel) prop["beforeMemberLevel"] = q5.ToString(beforeLevel)
prop["afterMemberLevel"] = q5.ToString(level) prop["afterMemberLevel"] = q5.ToString(newLevel)
prop["members_count"] = q5.ToString(guild.GetMembersCount()) prop["members_count"] = q5.ToString(guild.GetMembersCount())
f5.GetTgLog().AddTrackLog( f5.GetTgLog().AddTrackLog(
GAME_ID, GAME_ID,

View File

@ -43,6 +43,7 @@ func (this *HandlerMgr) init() {
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetName), PLAYER_HANDLER_ID) cs.RegHandlerId(int(cs.CMMessageIdE__CMSetName), PLAYER_HANDLER_ID)
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetAvatar), PLAYER_HANDLER_ID) cs.RegHandlerId(int(cs.CMMessageIdE__CMSetAvatar), PLAYER_HANDLER_ID)
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetJoinCond), PLAYER_HANDLER_ID) cs.RegHandlerId(int(cs.CMMessageIdE__CMSetJoinCond), PLAYER_HANDLER_ID)
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetMemberLevel), PLAYER_HANDLER_ID)
} }
func (this *HandlerMgr) unInit() { func (this *HandlerMgr) unInit() {