1
This commit is contained in:
@@ -3,19 +3,34 @@ package model
|
||||
import (
|
||||
"blazing/cool"
|
||||
|
||||
"github.com/samber/lo"
|
||||
"github.com/tnnmigga/enum"
|
||||
)
|
||||
|
||||
var MilestoneEnum = enum.New[struct {
|
||||
CollectElfCount EnumMilestone `enum:"3515"` // 收集精灵数量
|
||||
DailyTaskCount EnumMilestone `enum:"3510"` // 日常任务次数
|
||||
MaxLevelCount EnumMilestone `enum:"3511"` // 满级数量
|
||||
SingleAttrCount EnumMilestone `enum:"3512"` // 单属性数量
|
||||
DoubleAttrCount EnumMilestone `enum:"3513"` // 双属性数量
|
||||
Arena EnumMilestone `enum:"3508"` // 擂台
|
||||
Brawl EnumMilestone `enum:"3504"` // 乱斗
|
||||
ElfKing EnumMilestone `enum:"3503"` // 精灵王
|
||||
BaseVisit EnumMilestone `enum:"3506"` // 基地拜访
|
||||
BaseVisitedCount EnumMilestone `enum:"3520"` // 基地被拜访次数
|
||||
WinSPTType EnumMilestone `enum:"3521"` // 战胜spt种类
|
||||
CollectElfType EnumMilestone `enum:"3522"` // 收集精灵种类
|
||||
DefeatWildElfCount EnumMilestone `enum:"3523"` // 击败野生精灵次数
|
||||
}]()
|
||||
|
||||
type EnumMilestone int
|
||||
|
||||
var MilestoneMode = enum.New[struct {
|
||||
BOSS EnumMilestone //boss类 地图ID->BOSSID ,胜利次数 mapid bossid petid,防止换boss后数据不可用
|
||||
ITEM EnumMilestone //物品类 物品ID 使用精灵
|
||||
Fight EnumMilestone //挑战类 对战模式->对战类型->1是赢,0是总局数
|
||||
Moster EnumMilestone //野怪统计 地图ID->怪物ID
|
||||
Task EnumMilestone
|
||||
}]()
|
||||
// var MilestoneMode = enum.New[struct {
|
||||
// BOSS EnumMilestone //boss类 地图ID->BOSSID ,胜利次数 mapid bossid petid,防止换boss后数据不可用
|
||||
// ITEM EnumMilestone //物品类 物品ID 使用精灵
|
||||
// Fight EnumMilestone //挑战类 对战模式->对战类型->1是赢,0是总局数
|
||||
// Moster EnumMilestone //野怪统计 地图ID->怪物ID
|
||||
// Task EnumMilestone
|
||||
// }]()
|
||||
|
||||
const TableNameMilestone = "player_milestone"
|
||||
|
||||
@@ -30,31 +45,31 @@ type Milestone struct {
|
||||
Count uint32 `gorm:"not null;comment:'里程碑完成次数'" json:"count"`
|
||||
}
|
||||
|
||||
// MilestoneEX 里程碑扩展结构体,用于业务层解析后的数据操作
|
||||
type MilestoneEX struct {
|
||||
Milestone
|
||||
Args []uint32 // 解析后的里程碑详细数据
|
||||
Results []uint32 `json:"results"` // 解析后的里程碑详细数据
|
||||
}
|
||||
// // MilestoneEX 里程碑扩展结构体,用于业务层解析后的数据操作
|
||||
// type MilestoneEX struct {
|
||||
// Milestone
|
||||
// Args []uint32 // 解析后的里程碑详细数据
|
||||
// Results []uint32 `json:"results"` // 解析后的里程碑详细数据
|
||||
// }
|
||||
|
||||
// 检查是否触发过,成功返回触发的次数,失败返回0
|
||||
func (m *MilestoneEX) CheakNoNumber(count uint32) bool {
|
||||
// if v.DoneType == model.MilestoneMode.BOSS && IsPrefixBasicSlice(v.Args, []uint32{mapid, bossid}) && v.Count == count {
|
||||
// // 检查是否触发过,成功返回触发的次数,失败返回0
|
||||
// func (m *MilestoneEX) CheakNoNumber(count uint32) bool {
|
||||
// // if v.DoneType == model.MilestoneMode.BOSS && IsPrefixBasicSlice(v.Args, []uint32{mapid, bossid}) && v.Count == count {
|
||||
|
||||
_, ok := lo.Find(m.Results, func(v1 uint32) bool { //寻找是否触发过
|
||||
//大于触发值就触发,然后1的返回false,因为没有奖励,这样就可以一直触发
|
||||
return v1 == count //大于等于就触发
|
||||
})
|
||||
//没找到且次数满足才能返回真
|
||||
if !ok && m.Count >= count {
|
||||
return true
|
||||
}
|
||||
// _, ok := lo.Find(m.Results, func(v1 uint32) bool { //寻找是否触发过
|
||||
// //大于触发值就触发,然后1的返回false,因为没有奖励,这样就可以一直触发
|
||||
// return v1 == count //大于等于就触发
|
||||
// })
|
||||
// //没找到且次数满足才能返回真
|
||||
// if !ok && m.Count >= count {
|
||||
// return true
|
||||
// }
|
||||
|
||||
//已经触发过
|
||||
return false
|
||||
// //已经触发过
|
||||
// return false
|
||||
|
||||
// }
|
||||
}
|
||||
// // }
|
||||
// }
|
||||
|
||||
// TableName 返回表名
|
||||
func (*Milestone) TableName() string {
|
||||
|
||||
@@ -3,49 +3,45 @@ package service
|
||||
import (
|
||||
"blazing/cool"
|
||||
"blazing/modules/player/model"
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
type DoneService struct {
|
||||
BaseService
|
||||
}
|
||||
|
||||
func (s *DoneService) Exec(data model.EnumMilestone, id []uint32, fn func(*model.MilestoneEX) bool) {
|
||||
if cool.Config.ServerInfo.IsVip != 0 {
|
||||
cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid)
|
||||
return
|
||||
}
|
||||
arss := strings.Join(gconv.Strings(id), "-")
|
||||
m := s.PModel(s.Model).Where("done_type", data).Where("args", arss)
|
||||
var tt *model.MilestoneEX
|
||||
m.Scan(&tt)
|
||||
if tt == nil {
|
||||
tt = &model.MilestoneEX{
|
||||
Milestone: model.Milestone{
|
||||
DoneType: data,
|
||||
Args: strings.Join(gconv.Strings(id), "-"),
|
||||
//Count: 1,
|
||||
},
|
||||
}
|
||||
}
|
||||
// func (s *DoneService) Exec(data model.EnumMilestone, id []uint32, fn func(*model.MilestoneEX) bool) {
|
||||
// if cool.Config.ServerInfo.IsVip != 0 {
|
||||
// cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid)
|
||||
// return
|
||||
// }
|
||||
// arss := strings.Join(gconv.Strings(id), "-")
|
||||
// m := s.PModel(s.Model).Where("done_type", data).Where("args", arss)
|
||||
// var tt *model.MilestoneEX
|
||||
// m.Scan(&tt)
|
||||
// if tt == nil {
|
||||
// tt = &model.MilestoneEX{
|
||||
// Milestone: model.Milestone{
|
||||
// DoneType: data,
|
||||
// Args: strings.Join(gconv.Strings(id), "-"),
|
||||
// //Count: 1,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
|
||||
tt.Args = id
|
||||
ook := fn(tt)
|
||||
if !ook { //不需要保存
|
||||
return
|
||||
}
|
||||
tt.PlayerID = uint64(s.userid)
|
||||
tt.Milestone.Args = strings.Join(gconv.Strings(id), "-")
|
||||
// tt.Args = id
|
||||
// ook := fn(tt)
|
||||
// if !ook { //不需要保存
|
||||
// return
|
||||
// }
|
||||
// tt.PlayerID = uint64(s.userid)
|
||||
// tt.Milestone.Args = strings.Join(gconv.Strings(id), "-")
|
||||
|
||||
_, err := m.Save(tt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// _, err := m.Save(tt)
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
}
|
||||
// }
|
||||
func NewDoneService(id uint32) *DoneService {
|
||||
return &DoneService{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user