114 lines
3.3 KiB
Go
114 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
|
|
"mongo.games.com/game/proto"
|
|
player_proto "mongo.games.com/game/protocol/player"
|
|
server_proto "mongo.games.com/game/protocol/server"
|
|
"mongo.games.com/goserver/core"
|
|
"mongo.games.com/goserver/core/logger"
|
|
)
|
|
|
|
var niceIdMgr = &NiceIdManager{
|
|
SnIds: []int32{},
|
|
UsedIds: make(map[int32]int32),
|
|
}
|
|
|
|
type NiceIdManager struct {
|
|
SnIds []int32
|
|
UsedIds map[int32]int32
|
|
RobHeadUrlIdx int32
|
|
}
|
|
|
|
func (this *NiceIdManager) init() {
|
|
//this.SnIds = model.GetInvalidSnid()
|
|
//this.SnIds = make([]int32, 0, len(srvdata.PBDB_PlayerInfoMgr.Datas.Arr))
|
|
//for _, value := range srvdata.PBDB_PlayerInfoMgr.Datas.Arr {
|
|
// this.SnIds = append(this.SnIds, value.GetId())
|
|
//}
|
|
snidLen := len(this.SnIds)
|
|
logger.Logger.Info("NiceIdManager snid lens:", snidLen)
|
|
for i := 0; i < snidLen; i++ {
|
|
index := rand.Intn(snidLen)
|
|
this.SnIds[i], this.SnIds[index] = this.SnIds[index], this.SnIds[i]
|
|
}
|
|
for _, value := range niceIdMgr.SnIds {
|
|
this.UsedIds[value] = 0
|
|
}
|
|
}
|
|
func (this *NiceIdManager) PopNiceId(user int32) int32 {
|
|
if len(this.SnIds) <= 0 {
|
|
return 0
|
|
}
|
|
selId := this.SnIds[len(this.SnIds)-1]
|
|
this.SnIds = this.SnIds[:len(this.SnIds)-1]
|
|
this.UsedIds[selId] = user
|
|
logger.Logger.Infof("NiceIdManager pop niceid %v to %v", selId, user)
|
|
return selId
|
|
}
|
|
func (this *NiceIdManager) PushNiceId(snid int32) {
|
|
if _, ok := this.UsedIds[snid]; ok {
|
|
this.SnIds = append(this.SnIds, snid)
|
|
snidLen := len(this.SnIds)
|
|
index := rand.Intn(snidLen)
|
|
this.SnIds[snidLen-1], this.SnIds[index] = this.SnIds[index], this.SnIds[snidLen-1]
|
|
this.UsedIds[snid] = 0
|
|
logger.Logger.Infof("NiceIdManager push niceid %v to cache", snid)
|
|
}
|
|
}
|
|
func (this *NiceIdManager) NiceIdCheck(playerid int32) {
|
|
logger.Logger.Infof("%v be used in NiceIdManager.", playerid)
|
|
if userid, ok := this.UsedIds[playerid]; ok {
|
|
delete(this.UsedIds, playerid)
|
|
if userid != 0 {
|
|
user := PlayerMgrSington.GetPlayerBySnId(userid)
|
|
if user != nil {
|
|
user.NiceId = this.PopNiceId(userid)
|
|
if user.scene != nil {
|
|
pack := &server_proto.WGNiceIdRebind{
|
|
User: proto.Int32(userid),
|
|
NewId: proto.Int32(user.NiceId),
|
|
}
|
|
user.SendToGame(int(server_proto.SSPacketID_PACKET_GW_NICEIDREBIND), pack)
|
|
packNr := &player_proto.SCNiceIdRebind{
|
|
SnidId: proto.Int32(userid),
|
|
NiceId: proto.Int32(user.NiceId),
|
|
}
|
|
user.scene.Broadcast(int(player_proto.PlayerPacketID_PACKET_SC_NICEIDREBIND), packNr, 0)
|
|
}
|
|
}
|
|
} else {
|
|
niceIndex := -1
|
|
for key, value := range this.SnIds {
|
|
if value == playerid {
|
|
niceIndex = key
|
|
break
|
|
}
|
|
}
|
|
if niceIndex != -1 {
|
|
curCount := len(this.SnIds)
|
|
this.SnIds[niceIndex], this.SnIds[curCount-1] = this.SnIds[curCount-1], this.SnIds[niceIndex]
|
|
this.SnIds = this.SnIds[:curCount-1]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func (this *NiceIdManager) GetRobHeadUrlIdx() string {
|
|
this.RobHeadUrlIdx++
|
|
if this.RobHeadUrlIdx > 1448 {
|
|
this.RobHeadUrlIdx = 1
|
|
}
|
|
return fmt.Sprintf("https://avatar-icon.oss-cn-guangzhou.aliyuncs.com/user_head/head_%v.jpg", this.RobHeadUrlIdx)
|
|
}
|
|
func (this *NiceIdManager) GetRobHeadUrl(idx int32) string {
|
|
return fmt.Sprintf("https://avatar-icon.oss-cn-guangzhou.aliyuncs.com/user_head/head_%v.jpg", idx)
|
|
}
|
|
func init() {
|
|
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
|
|
niceIdMgr.init()
|
|
return nil
|
|
})
|
|
}
|