diff --git a/database/frienddb.sql b/database/frienddb.sql index c9ff8462..76ebea8c 100644 --- a/database/frienddb.sql +++ b/database/frienddb.sql @@ -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`), diff --git a/server/imserver/guilddbmgr.go b/server/imserver/guilddbmgr.go index 23544d0a..3aa61cdc 100644 --- a/server/imserver/guilddbmgr.go +++ b/server/imserver/guilddbmgr.go @@ -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, diff --git a/server/imserver/guildmgr.go b/server/imserver/guildmgr.go index bb8e6952..391fcf97 100644 --- a/server/imserver/guildmgr.go +++ b/server/imserver/guildmgr.go @@ -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 { diff --git a/server/imserver/player.go b/server/imserver/player.go index a6973ddf..8014339d 100644 --- a/server/imserver/player.go +++ b/server/imserver/player.go @@ -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, )