package model import ( "blazing/cool" "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"` // 击败野生精灵次数 //炫彩数量3524 不同种类的炫彩精灵3525 }]() 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 Pet EnumMilestone //宠物 属性->属性值->ID 击杀-捕捉-炫彩击杀-炫彩捕捉 Room EnumMilestone }]() const TableNameMilestone = "player_milestone" // Milestone 数据库存储结构体,映射milestone表 type Milestone struct { Base PlayerID uint64 `gorm:"not null;index:idx_milestone_by_player_id;comment:'所属玩家ID'" json:"player_id"` DoneType EnumMilestone `gorm:"not null;comment:'里程碑类型'" json:"done_type"` Args []int32 `gorm:"type:jsonb;not null;comment:'里程碑ID'" json:"args"` // 注:不单独设置"里程碑ID",通过 PlayerID + DoneType + IDs 组合唯一标识一个里程碑(更灵活) Results []uint32 `gorm:"type:jsonb;not null;comment:'里程碑参数'" 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 { // _, ok := lo.Find(m.Results, func(v1 uint32) bool { //寻找是否触发过 // //大于触发值就触发,然后1的返回false,因为没有奖励,这样就可以一直触发 // return v1 == count //大于等于就触发 // }) // //没找到且次数满足才能返回真 // if !ok && m.Count >= count { // return true // } // //已经触发过 // return false // // } // } // TableName 返回表名 func (*Milestone) TableName() string { return TableNameMilestone } // GroupName 返回表组名 func (*Milestone) GroupName() string { return "default" } // NewMilestone 创建新里程碑实例 func NewMilestone() *Milestone { return &Milestone{ Base: *NewBase(), } } // init 初始化表 func init() { cool.CreateTable(&Milestone{}) }