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
)
// im server chat
const (
kCCBegin = iota
kCCWorld = 1
kCCPrivate = 2
kCCGuild = 3
kCCTeam = 4
kCCBigHorn = 5
kCCLoopMsg = 6
kCCEnd
)
// im server friend
const (
MaxFriendMembers = 200
@ -36,21 +48,11 @@ const (
OnlineStatus = 1 // 在线状态 在线
)
const (
kCCBegin = iota
kCCWorld = 1
kCCPrivate = 2
kCCGuild = 3
kCCTeam = 4
kCCBigHorn = 5
kCCLoopMsg = 6
kCCEnd
)
// im server guild
const (
RandomGuildCount = 10
MaxMembers = 30
MaxMembersViceLeader = 2
MaxPendingReqs = 10
DefaultLogs = 20
LogTypeApprove = 1 // 公会日志类型, 批准加入
@ -105,21 +107,22 @@ const (
ERR_CODE_SEARCH_NO_RESULT = 11016
// Guild
ERR_CODE_GUILD_NO_EXISTS = 12001
ERR_CODE_JOINED_GUILD = 12002
ERR_CODE_CREATE_GUILD_FAIL = 12003
ERR_CODE_APPLY_GUILD_FAIL = 12004
ERR_CODE_GUILD_MEMBER_NO_EXISTS = 12005
ERR_CODE_GUILD_MEMBER_FULL = 12006
ERR_CODE_GUILD_PENDING_REQUEST_NO_EXISTS = 12007
ERR_CODE_GUILD_NO_LEADER_PERM = 12008
ERR_CODE_GUILD_BLOCKED_LEADER = 12009
ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM = 12010
ERR_CODE_GUILD_DISMISS_MEMBER_NO_PERM = 12011
ERR_CODE_CREATE_GUILD_DB_FAIL = 12013
ERR_CODE_CREATE_GUILD_MEMBER_DB_FAIL = 12014
ERR_CODE_UPDATE_GUILD_DB_FAIL = 12015
ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL = 12016
ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL = 12017
ERR_CODE_REQUEST_PARAMS_ERROR = 12018
ERR_CODE_GUILD_NO_EXISTS = 12001
ERR_CODE_JOINED_GUILD = 12002
ERR_CODE_CREATE_GUILD_FAIL = 12003
ERR_CODE_APPLY_GUILD_FAIL = 12004
ERR_CODE_GUILD_MEMBER_NO_EXISTS = 12005
ERR_CODE_GUILD_MEMBER_FULL = 12006
ERR_CODE_GUILD_PENDING_REQUEST_NO_EXISTS = 12007
ERR_CODE_GUILD_NO_LEADER_PERM = 12008
ERR_CODE_GUILD_BLOCKED_LEADER = 12009
ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM = 12010
ERR_CODE_GUILD_DISMISS_MEMBER_NO_PERM = 12011
ERR_CODE_CREATE_GUILD_DB_FAIL = 12013
ERR_CODE_CREATE_GUILD_MEMBER_DB_FAIL = 12014
ERR_CODE_UPDATE_GUILD_DB_FAIL = 12015
ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL = 12016
ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL = 12017
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)
}
func (g *Guild) GetMembersViceLeaderCount() int {
count := 0
for _, member := range g.Members {
if member.Level == GuildMemberLevelViceLeader {
count++
}
}
return count
}
// GetMember 根据 AccountId 获取成员信息
func (g *Guild) GetMember(accountId string) *GuildMember {
if member, exists := g.Members[accountId]; exists {

View File

@ -524,7 +524,7 @@ func (gm *GuildMgr) DismissMember(operatorAccountId, accountId string, cb func(e
}
// 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)
if guild == nil {
@ -544,24 +544,26 @@ func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, level in
}
beforeLevel := member.Level
if member.Level == level {
if member.Level == newLevel {
cb(ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM, "SetMemberLevel error")
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) {
if err != nil {
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
return
}
member.Level = level
// 转让会长的操作
if level == GuildMemberLevelLeader {
operatorMember := guild.GetMember(operatorAccountId)
operatorMember.Level = GuildMemberLevelDefault
if newLevel == GuildMemberLevelLeader {
guild.LeaderId = member.AccountId
updateFields := [][]string{
{"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())
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) {
if err != nil {
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
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)
// Add event
@ -591,7 +606,7 @@ func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, level in
prop["guild_id"] = q5.ToString(guild.GuildId)
prop["accountId"] = q5.ToString(accountId)
prop["beforeMemberLevel"] = q5.ToString(beforeLevel)
prop["afterMemberLevel"] = q5.ToString(level)
prop["afterMemberLevel"] = q5.ToString(newLevel)
prop["members_count"] = q5.ToString(guild.GetMembersCount())
f5.GetTgLog().AddTrackLog(
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__CMSetAvatar), 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() {