优化随机公会
This commit is contained in:
parent
da7f8895a6
commit
f201b0ad26
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user