优化
This commit is contained in:
parent
6dbfc4d22a
commit
e5adb3e3d0
@ -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`),
|
||||
|
@ -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,
|
||||
|
@ -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 {
|
||||
|
@ -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,
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user