优化随机公会

This commit is contained in:
殷勇 2023-08-30 16:28:40 +08:00
parent da7f8895a6
commit f201b0ad26
2 changed files with 36 additions and 24 deletions

View File

@ -21,6 +21,8 @@ type GuildMgr struct {
pendingReqs map[int64]map[string]bool // 公会ID -> 申请者账户ID -> bool pendingReqs map[int64]map[string]bool // 公会ID -> 申请者账户ID -> bool
Logs map[int64][]*GuildLog // 公会ID -> 公会日志 Logs map[int64][]*GuildLog // 公会ID -> 公会日志
loadedFlags int64 loadedFlags int64
guildIds []int64 // 公会ids
//RandGuildIds []int64 // 随机公会ids
} }
func NewGuildMgr() *GuildMgr { func NewGuildMgr() *GuildMgr {
@ -45,11 +47,12 @@ func (gm *GuildMgr) loadFromDB() {
gm.loadGuildFromDB() gm.loadGuildFromDB()
// 加载公会成员 // 加载公会成员
gm.loadGuildMemberFromDB() gm.loadGuildMemberFromDB()
//// 加载公会申请者列表 // 加载公会申请者列表
gm.loadPendingReqsFromDB() gm.loadPendingReqsFromDB()
//// 加载公会日志 // 加载公会日志
gm.loadGuildLogsFromDB() gm.loadGuildLogsFromDB()
// 加载公会ids
gm.loadGuildIds()
//for gm.loadedFlags != 0 { //for gm.loadedFlags != 0 {
// time.Sleep(time.Millisecond * 1000) // time.Sleep(time.Millisecond * 1000)
//} //}
@ -82,8 +85,8 @@ func (gm *GuildMgr) CreateGuild(name string, leaderId string) (int64, error) {
gm.createGuildDB(guild) gm.createGuildDB(guild)
gm.upsertGuildMember(guildId, &newMember) gm.upsertGuildMember(guildId, &newMember)
gm.Guilds[guildId] = guild gm.Guilds[guildId] = guild
gm.addGuildIds(guildId)
return guildId, nil return guildId, nil
} }
@ -422,37 +425,35 @@ func (gm *GuildMgr) GetLogs(guildID int64) []*GuildLog {
} }
// SearchGuilds 根据关键字搜索公会 // SearchGuilds 根据关键字搜索公会
func (gm *GuildMgr) SearchGuilds(keyword string) []Guild { func (gm *GuildMgr) SearchGuilds(keyword string) []*Guild {
var results []Guild var results []*Guild
for _, guild := range gm.Guilds { for _, guild := range gm.Guilds {
if containsSubstring(guild.Name, keyword) { if containsSubstring(guild.Name, keyword) {
results = append(results, *guild) results = append(results, guild)
} }
} }
return results return results
} }
// RandomGuilds 随机10个公会 // RandomGuilds 随机10个公会
func (gm *GuildMgr) RandomGuilds() []Guild { func (gm *GuildMgr) RandomGuilds() []*Guild {
guildCount := RandomGuildCount
count := len(gm.Guilds) count := len(gm.Guilds)
if count <= guildCount {
guildCount = count var results []*Guild
if count <= RandomGuildCount {
for _, guildId := range gm.guildIds {
results = append(results, gm.Guilds[guildId])
}
return results
} }
guildSlice := make([]*Guild, 0, count) for i := 0; i < RandomGuildCount; i++ {
for _, guild := range gm.Guilds { j := rand.Intn(len(gm.guildIds))
guildSlice = append(guildSlice, guild) gm.guildIds[i], gm.guildIds[j] = gm.guildIds[j], gm.guildIds[i]
} }
for i := 0; i < RandomGuildCount; i++ {
for i := 0; i < guildCount; i++ { randGuildId := gm.guildIds[i]
j := rand.Intn(len(guildSlice)) results = append(results, gm.Guilds[randGuildId])
guildSlice[i], guildSlice[j] = guildSlice[j], guildSlice[i]
}
var results []Guild
for i := 0; i < guildCount; i++ {
results = append(results, *guildSlice[i])
} }
return results return results
} }
@ -514,6 +515,17 @@ func (gm *GuildMgr) GetGuildIdByAccountId(accountId string) int64 {
return 0 return 0
} }
func (gm *GuildMgr) loadGuildIds() {
gm.guildIds = make([]int64, 0, len(gm.Guilds))
for guildId, _ := range gm.Guilds {
gm.guildIds = append(gm.guildIds, guildId)
}
}
func (gm *GuildMgr) addGuildIds(guildId int64) {
gm.guildIds = append(gm.guildIds, guildId)
}
func containsSubstring(s, substr string) bool { func containsSubstring(s, substr string) bool {
return len(s) >= len(substr) && s[len(s)-len(substr):] == substr return len(s) >= len(substr) && s[len(s)-len(substr):] == substr
} }

View File

@ -472,7 +472,7 @@ func (p *Player) CMSearchGuilds(hdr *f5.MsgHdr, msg *cs.CMSearchGuilds) {
} }
// FillGuild 填充公共列表 // FillGuild 填充公共列表
func (p *Player) FillGuild(guilds []Guild) []*cs.MFGuild { func (p *Player) FillGuild(guilds []*Guild) []*cs.MFGuild {
var resGuilds []*cs.MFGuild var resGuilds []*cs.MFGuild
for _, g := range guilds { for _, g := range guilds {
members := q5.ToInt32(len(g.Members)) members := q5.ToInt32(len(g.Members))