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 }