game_sync/srvdata/rankmatch.go

68 lines
1.2 KiB
Go

package srvdata
import (
"sort"
"mongo.games.com/game/protocol/server"
)
func init() {
DataMgr.RegisterLoader("DB_RankLevel.dat", RankLevelMgr)
}
var RankLevelMgr = &RankLevel{
RankType: map[int32][]*server.DB_RankLevel{},
}
type RankLevel struct {
RankType map[int32][]*server.DB_RankLevel
}
func (r *RankLevel) Load(fileFullPath string) error {
r.RankType = make(map[int32][]*server.DB_RankLevel)
for _, v := range PBDB_RankLevelMgr.Datas.GetArr() {
r.RankType[v.RankType] = append(r.RankType[v.RankType], v)
}
for _, v := range r.RankType {
sort.Slice(v, func(i, j int) bool {
return v[i].Score < v[j].Score
})
}
return nil
}
func (r *RankLevel) Reload(fileFullPath string) error {
return r.Load(fileFullPath)
}
func (r *RankLevel) GetRankLevel(rankType int32, score int64) int32 {
// 没有配置排名
if len(r.RankType) == 0 {
return 0
}
// 没有配置该类型的排名
if _, ok := r.RankType[rankType]; !ok {
return 0
}
// 遍历排名
var level int32
for _, v := range r.RankType[rankType] {
if score < v.Score {
return v.Level
}
level = v.Level
}
return level
}
func (r *RankLevel) GetNewScore(score int64) int64 {
if score <= 10000 {
return score
}
return score/2 + 5000
}