68 lines
1.2 KiB
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
|
|
}
|