pet_home_server/src/server/game/mod/endless/Endless.go
2025-09-11 17:54:23 +08:00

127 lines
2.6 KiB
Go

package endless
import (
"fmt"
endlessCfg "server/conf/endless"
"server/game/mod/item"
"server/msg"
)
type EndlessMod struct {
Auto int // 自增id
Id int // 当前领取的id
List map[int]*Endless // 礼包列表
LastMoney float64 // 最后一次生成的金额
}
const (
ENDLESS_TYPE_AD = 1 // 广告礼包
ENDLESS_TYPE_CHARGE = 2 // 充值礼包
ENDLESS_TYPE_FREE = 3 // 免费礼包
)
type Endless struct {
ChargeId int // 充值id
Type int // 类型
Items []*item.Item
}
func (e *EndlessMod) InitData() {
if e.List == nil {
e.List = make(map[int]*Endless)
}
}
// 零点更新 重置礼包
func (e *EndlessMod) ZeroUpdate(MaxMoney float64, Lv int) {
e.List = make(map[int]*Endless)
e.Auto = 1
FirstMoney := 0.0
if MaxMoney > 0 {
m := MaxMoney / 10
GradeList := []float64{1.99, 3.99, 5.99, 9.99}
for i := 0; i < len(GradeList); i++ {
if m < GradeList[i] {
FirstMoney = GradeList[i]
break
}
}
if FirstMoney == 0 {
FirstMoney = 9.99
}
}
var r map[int]*Endless
r, e.Auto = initGrade(FirstMoney, e.Auto, Lv)
for k, v := range r {
e.List[k] = v
}
NextMoney := endlessCfg.NextMoney(FirstMoney)
r, e.Auto = initGrade(NextMoney, e.Auto, Lv)
for k, v := range r {
e.List[k] = v
}
NextMoney = endlessCfg.NextMoney(NextMoney)
r, e.Auto = initGrade(NextMoney, e.Auto, Lv)
for k, v := range r {
e.List[k] = v
}
e.LastMoney = NextMoney
e.Id = 1
}
// 领取免费礼包
func (e *EndlessMod) GetReward(Lv int) ([]*item.Item, error) {
v, ok := e.List[e.Id]
if !ok {
return nil, fmt.Errorf("EndlessMod Reward Id:%d not found", e.Id)
}
if v.Type == ENDLESS_TYPE_CHARGE {
return nil, fmt.Errorf("EndlessMod Reward Id:%d is charge", e.Id)
}
delete(e.List, e.Id)
e.Id++
v1 := e.List[e.Id]
if v1.Type == ENDLESS_TYPE_CHARGE { //领完一阶段 随机新的一阶段
var r map[int]*Endless
NextMoney := endlessCfg.NextMoney(e.LastMoney)
r, e.Auto = initGrade(NextMoney, e.Auto, Lv)
for k, v := range r {
e.List[k] = v
}
e.LastMoney = NextMoney
}
return v.Items, nil
}
func (e *EndlessMod) BackData() *msg.ResEndless {
r := make(map[int32]*msg.ResEndlessInfo)
for k, v := range e.List {
r[int32(k)] = &msg.ResEndlessInfo{
ChargeId: int32(v.ChargeId),
Type: int32(v.Type),
Items: item.ItemToMsg(v.Items),
}
}
return &msg.ResEndless{
Id: int32(e.Id),
EndlessList: r,
}
}
// 处理充值礼包
func (e *EndlessMod) Fire(ChargeId int) []*item.Item {
v, ok := e.List[e.Id]
if !ok {
return nil
}
if v.ChargeId != ChargeId {
return nil
}
delete(e.List, e.Id)
e.Id++
return v.Items
}