game_sync/srvdata/gamedropmgr.go

91 lines
1.8 KiB
Go

package srvdata
import (
"sort"
)
func init() {
DataMgr.RegisterLoader("DB_Game_Drop.dat", GameDropMgrSingleton)
}
var GameDropMgrSingleton = &GameDropMgr{
GameDropData: make(map[int32][]*GameDropData),
}
type GameDropMgr struct {
GameDropData map[int32][]*GameDropData // gameId:[]*GameDropData
}
func (this *GameDropMgr) Load(fileFullPath string) error {
GameDropMgrSingleton.Init()
return nil
}
func (this *GameDropMgr) Reload(fileFullPath string) error {
GameDropMgrSingleton.Init()
return nil
}
type GameDropData struct {
Id int32
BaseCoin int64
ItemId int32
Rate int32
MinAmount int32
MaxAmount int32
}
func (this *GameDropMgr) ModuleName() string {
return "GameDropMgr"
}
func (this *GameDropMgr) Init() {
this.GameDropData = make(map[int32][]*GameDropData)
if PBDB_Game_DropMgr.Datas == nil {
return
}
for _, v := range PBDB_Game_DropMgr.Datas.Arr {
//道具
if v.Amount1 == nil || len(v.Amount1) != 2 {
continue
}
if v.Rate1 <= 0 {
continue
}
gdd1 := &GameDropData{
Id: v.Id,
BaseCoin: int64(v.Bet),
ItemId: v.ItemId1,
Rate: v.Rate1,
MinAmount: v.Amount1[0],
MaxAmount: v.Amount1[1],
}
this.GameDropData[v.GameId] = append(this.GameDropData[v.GameId], gdd1)
}
for _, v := range this.GameDropData {
sort.Slice(v, func(i, j int) bool {
return v[i].BaseCoin < v[j].BaseCoin
})
}
}
func (this *GameDropMgr) GetDropInfoByBaseScore(gameId, baseCoin int32) []*GameDropData {
var ret []*GameDropData
arr := this.GameDropData[gameId]
i := sort.Search(len(arr), func(i int) bool {
return arr[i].BaseCoin > int64(baseCoin)
})
if i < len(arr) && i > 0 {
n := arr[i-1].BaseCoin
for i := i - 1; i >= 0; i-- {
if arr[i].BaseCoin == n {
ret = append(ret, arr[i])
} else {
break
}
}
}
return ret
}