优化随机公会

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
Logs map[int64][]*GuildLog // 公会ID -> 公会日志
loadedFlags int64
guildIds []int64 // 公会ids
//RandGuildIds []int64 // 随机公会ids
}
func NewGuildMgr() *GuildMgr {
@ -45,11 +47,12 @@ func (gm *GuildMgr) loadFromDB() {
gm.loadGuildFromDB()
// 加载公会成员
gm.loadGuildMemberFromDB()
//// 加载公会申请者列表
// 加载公会申请者列表
gm.loadPendingReqsFromDB()
//// 加载公会日志
// 加载公会日志
gm.loadGuildLogsFromDB()
// 加载公会ids
gm.loadGuildIds()
//for gm.loadedFlags != 0 {
// time.Sleep(time.Millisecond * 1000)
//}
@ -82,8 +85,8 @@ func (gm *GuildMgr) CreateGuild(name string, leaderId string) (int64, error) {
gm.createGuildDB(guild)
gm.upsertGuildMember(guildId, &newMember)
gm.Guilds[guildId] = guild
gm.addGuildIds(guildId)
return guildId, nil
}
@ -422,37 +425,35 @@ func (gm *GuildMgr) GetLogs(guildID int64) []*GuildLog {
}
// SearchGuilds 根据关键字搜索公会
func (gm *GuildMgr) SearchGuilds(keyword string) []Guild {
var results []Guild
func (gm *GuildMgr) SearchGuilds(keyword string) []*Guild {
var results []*Guild
for _, guild := range gm.Guilds {
if containsSubstring(guild.Name, keyword) {
results = append(results, *guild)
results = append(results, guild)
}
}
return results
}
// RandomGuilds 随机10个公会
func (gm *GuildMgr) RandomGuilds() []Guild {
guildCount := RandomGuildCount
func (gm *GuildMgr) RandomGuilds() []*Guild {
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 _, guild := range gm.Guilds {
guildSlice = append(guildSlice, guild)
for i := 0; i < RandomGuildCount; i++ {
j := rand.Intn(len(gm.guildIds))
gm.guildIds[i], gm.guildIds[j] = gm.guildIds[j], gm.guildIds[i]
}
for i := 0; i < guildCount; i++ {
j := rand.Intn(len(guildSlice))
guildSlice[i], guildSlice[j] = guildSlice[j], guildSlice[i]
}
var results []Guild
for i := 0; i < guildCount; i++ {
results = append(results, *guildSlice[i])
for i := 0; i < RandomGuildCount; i++ {
randGuildId := gm.guildIds[i]
results = append(results, gm.Guilds[randGuildId])
}
return results
}
@ -514,6 +515,17 @@ func (gm *GuildMgr) GetGuildIdByAccountId(accountId string) int64 {
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 {
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 填充公共列表
func (p *Player) FillGuild(guilds []Guild) []*cs.MFGuild {
func (p *Player) FillGuild(guilds []*Guild) []*cs.MFGuild {
var resGuilds []*cs.MFGuild
for _, g := range guilds {
members := q5.ToInt32(len(g.Members))