This commit is contained in:
殷勇 2023-08-22 19:34:48 +08:00
parent 6dbfc4d22a
commit e5adb3e3d0
4 changed files with 46 additions and 43 deletions

View File

@ -68,7 +68,7 @@ CREATE TABLE `t_guild_members` (
`guild_id` bigint(20) NOT NULL,
`account_id` varchar(60) COLLATE utf8_bin NOT NULL,
`level` tinyint(4) DEFAULT '0' COMMENT '成员阶级1会长,2干部,3群众',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '是否已离开公会 0 正常, 1 已离开',
`is_leave_guild` tinyint(4) DEFAULT '0' COMMENT '是否已离开公会 0 正常, 1 已离开',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),

View File

@ -57,7 +57,7 @@ func (gm *GuildMgr) loadGuildFromDBResult(err error, rows *f5.DataSet) {
func (gm *GuildMgr) loadGuildMemberFromDB() {
fields := []string{"guild_id", "account_id", "level"}
where := [][]string{
{"is_deleted", "0"},
{"is_leave_guild", "0"},
}
f5.GetJsStyleDb().Select(
FRIEND_DB,
@ -207,7 +207,7 @@ func (gm *GuildMgr) insertGuildMember(guildId int64, member *GuildMember) {
{"account_id", member.AccountId},
{"level", q5.ToString(member.Level)},
}
f5.GetJsStyleDb().Insert(
f5.GetJsStyleDb().Replace(
FRIEND_DB,
"t_guild_members",
fields,

View File

@ -2,7 +2,6 @@ package main
import (
"cs"
"errors"
"f5"
"fmt"
"math/rand"
@ -37,10 +36,16 @@ func (gm *GuildMgr) init() {
// CreateGuild 创建公会
func (gm *GuildMgr) CreateGuild(name string, leaderID string) (int64, error) {
guildId := f5.GetApp().NewUuid()
// check join guild
otherGuildId, isJoin := gm.checkJoinGuild(leaderID)
if isJoin {
errMsg := fmt.Sprintf("Player:%s has joined other guild:%d", leaderID, otherGuildId)
return 0, fmt.Errorf(errMsg)
}
guildId := f5.GetApp().NewUuid()
if _, exists := gm.Guilds[guildId]; exists {
return 0, errors.New("guild already exists")
return 0, fmt.Errorf("guild already exists")
}
maxMembers := 10
guild := &Guild{
@ -53,7 +58,7 @@ func (gm *GuildMgr) CreateGuild(name string, leaderID string) (int64, error) {
newLevel := 1 // 会长
newMember := GuildMember{AccountId: leaderID, Level: newLevel}
guild.AddMember(&newMember)
_ = guild.AddMember(&newMember)
gm.insertGuildMember(guildId, &newMember)
gm.Guilds[guildId] = guild
@ -63,21 +68,20 @@ func (gm *GuildMgr) CreateGuild(name string, leaderID string) (int64, error) {
// ApplyToGuild 申请加入公会
func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error {
if _, exists := gm.Guilds[guildId]; !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
// check join guild
otherGuildId, isJoin := gm.checkJoinGuild(applicantAccountId)
if isJoin {
errMsg := fmt.Sprintf("Player:%s has joined other guild:%d", applicantAccountId, otherGuildId)
return errors.New(errMsg)
return fmt.Errorf(errMsg)
}
guild := gm.Guilds[guildId]
if len(guild.Members) >= guild.MaxMembers {
return errors.New("guild is full")
return fmt.Errorf("guild is full")
}
// IF exists, then replace
// IF exists, then replace it
gm.insertPendingReqs(guildId, applicantAccountId)
gm.pendingReqs[guildId][applicantAccountId] = true
return nil
@ -87,7 +91,7 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error
func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string) error {
guild, exists := gm.Guilds[guildId]
if !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
// 公会干部及以上仅可操作
@ -100,12 +104,12 @@ func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string)
otherGuildId, isJoin := gm.checkJoinGuild(accountId)
if isJoin {
errMsg := fmt.Sprintf("Player:%s has joined other guild:%d", accountId, otherGuildId)
return errors.New(errMsg)
return fmt.Errorf(errMsg)
}
_, exists = gm.pendingReqs[guildId][accountId]
if !exists {
return errors.New("no pending applications for this guild")
return fmt.Errorf("no pending applications for this guild")
}
newMember := GuildMember{AccountId: accountId, Level: 3}
@ -125,7 +129,7 @@ func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string)
func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error {
_, exists := gm.pendingReqs[guildId]
if !exists {
return errors.New("no pending applications for this guild")
return fmt.Errorf("no pending applications for this guild")
}
//delete(gm.pendingReqs[guildId], applicantAccountId)
@ -139,11 +143,11 @@ func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error {
//func (gm *GuildMgr) JoinGuild(guildId int64, memberID string) error {
// guild, exists := gm.Guilds[guildId]
// if !exists {
// return errors.New("guild not found")
// return fmt.Errorf("guild not found")
// }
//
// if len(guild.Members) >= guild.MaxMembers {
// return errors.New("guild is full")
// return fmt.Errorf("guild is full")
// }
//
// newMember := GuildMember{AccountId: memberID, Level: 3}
@ -155,20 +159,20 @@ func (gm *GuildMgr) Reject(guildId int64, applicantAccountId string) error {
func (gm *GuildMgr) LeaveGuild(guildId int64, memberID string) error {
guild, exists := gm.Guilds[guildId]
if !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
if guild.LeaderId == memberID {
return fmt.Errorf("leader not leave guild")
}
member, err := guild.GetMember(memberID)
if err != nil {
return errors.New("member not found in the guild")
}
if guild.LeaderId == memberID {
return errors.New("leader not leave guild")
return fmt.Errorf("member not found in the guild")
}
_ = guild.RemoveMember(memberID)
fields := [][]string{{"is_deleted", q5.ToString(1)}}
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
where := []string{"account_id", q5.ToString(member.AccountId)}
gm.updateGuildMember(guild, fields, where)
@ -179,32 +183,31 @@ func (gm *GuildMgr) LeaveGuild(guildId int64, memberID string) error {
func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, memberID string) error {
guild, exists := gm.Guilds[guildId]
if !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
if memberID == guild.LeaderId {
return errors.New("cannot dismiss the leader")
return fmt.Errorf("cannot dismiss the leader")
}
operatorMember, err := guild.GetMember(operatorAccountId)
if err != nil {
return errors.New("cannot dismiss the leader")
return fmt.Errorf("cannot dismiss the leader")
}
if operatorMember.Level >= 2 {
return errors.New("no permission")
return fmt.Errorf("no permission")
}
dismissMember, err := guild.GetMember(memberID)
if err != nil {
return errors.New("member not found in the guild")
return fmt.Errorf("member not found in the guild")
}
if dismissMember.Level <= 2 {
return errors.New("no permission")
return fmt.Errorf("no permission")
}
_ = guild.RemoveMember(memberID)
fields := [][]string{{"is_deleted", q5.ToString(1)}}
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
where := []string{"account_id", q5.ToString(dismissMember.AccountId)}
gm.updateGuildMember(guild, fields, where)
@ -215,16 +218,16 @@ func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, memberID str
func (gm *GuildMgr) PromoteMember(guildId int64, operatorAccountId, memberID string) error {
guild, exists := gm.Guilds[guildId]
if !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
if memberID == guild.LeaderId {
return errors.New("cannot promote the leader")
return fmt.Errorf("cannot promote the leader")
}
member, err := guild.GetMember(memberID)
if err != nil {
return errors.New("member not found in the guild")
return fmt.Errorf("member not found in the guild")
}
newLevel := 2
member.Level = newLevel
@ -240,16 +243,16 @@ func (gm *GuildMgr) PromoteMember(guildId int64, operatorAccountId, memberID str
func (gm *GuildMgr) DemoteMember(guildId int64, operatorAccountId, memberID string) error {
guild, exists := gm.Guilds[guildId]
if !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
if memberID == guild.LeaderId {
return errors.New("cannot demote the leader")
return fmt.Errorf("cannot demote the leader")
}
member, err := guild.GetMember(memberID)
if err != nil {
return errors.New("member not found in the guild")
return fmt.Errorf("member not found in the guild")
}
newLevel := 3
member.Level = newLevel
@ -279,11 +282,11 @@ func (gm *GuildMgr) WriteLog(guildId int64, accountId string, logType uint16, co
func (gm *GuildMgr) Disband(guildId int64, accountId string) error {
guild, exists := gm.Guilds[guildId]
if !exists {
return errors.New("guild not found")
return fmt.Errorf("guild not found")
}
if accountId != guild.LeaderId {
return errors.New("cannot disband guild")
return fmt.Errorf("cannot disband guild")
}
guildName := guild.Name
@ -384,7 +387,7 @@ func containsSubstring(s, substr string) bool {
func (gm *GuildMgr) checkOperatorPerm(guild *Guild, operatorAccountId string, level int) error {
operatorMember, err := guild.GetMember(operatorAccountId)
if err != nil {
//return errors.New("checkOperatorPerm: no member")
//return fmt.Errorf("checkOperatorPerm: no member")
return fmt.Errorf("checkOperatorPerm: no member[%s]", operatorAccountId)
}
if operatorMember.Level > level {

View File

@ -264,7 +264,7 @@ func (p *Player) CMLeaveGuild(hdr *f5.MsgHdr, msg *cs.CMLeaveGuild) {
rspMsg := new(cs.SMLeaveGuild)
guildId := msg.GetGuildId()
err := guildMgr.Reject(
err := guildMgr.LeaveGuild(
guildId,
p.accountId,
)