2025-11-16 20:30:17 +00:00
|
|
|
|
package model
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"blazing/cool"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/tnnmigga/enum"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2026-01-21 20:46:05 +00:00
|
|
|
|
var MilestoneEnum = enum.New[struct {
|
2026-01-23 20:18:58 +00:00
|
|
|
|
// CollectElfCount EnumMilestone `enum:"3515"` // 收集精灵数量
|
2026-01-21 20:46:05 +00:00
|
|
|
|
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"` // 击败野生精灵次数
|
2026-01-31 03:55:58 +08:00
|
|
|
|
//炫彩数量3524 不同种类的炫彩精灵3525
|
2026-01-21 20:46:05 +00:00
|
|
|
|
}]()
|
|
|
|
|
|
|
2025-11-16 20:30:17 +00:00
|
|
|
|
type EnumMilestone int
|
|
|
|
|
|
|
2026-01-25 23:17:46 +08:00
|
|
|
|
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
|
2026-01-29 18:39:07 +08:00
|
|
|
|
Pet EnumMilestone //宠物 属性->属性值->ID 击杀-捕捉-炫彩击杀-炫彩捕捉
|
2026-02-14 07:36:05 +08:00
|
|
|
|
Room EnumMilestone
|
2026-01-25 23:17:46 +08:00
|
|
|
|
}]()
|
2025-11-16 20:30:17 +00:00
|
|
|
|
|
2026-01-19 18:51:56 +08:00
|
|
|
|
const TableNameMilestone = "player_milestone"
|
2025-11-16 20:30:17 +00:00
|
|
|
|
|
|
|
|
|
|
// Milestone 数据库存储结构体,映射milestone表
|
|
|
|
|
|
type Milestone struct {
|
2026-01-08 03:30:18 +08:00
|
|
|
|
Base
|
2025-11-16 20:48:12 +00:00
|
|
|
|
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"`
|
2026-01-25 23:17:46 +08:00
|
|
|
|
Args []int32 `gorm:"type:jsonb;not null;comment:'里程碑ID'" json:"args"`
|
2025-11-16 20:30:17 +00:00
|
|
|
|
// 注:不单独设置"里程碑ID",通过 PlayerID + DoneType + IDs 组合唯一标识一个里程碑(更灵活)
|
2026-01-31 19:10:36 +08:00
|
|
|
|
Results []uint32 `gorm:"type:jsonb;not null;comment:'里程碑参数'" json:"results"`
|
2025-11-16 20:30:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-21 20:46:05 +00:00
|
|
|
|
// // MilestoneEX 里程碑扩展结构体,用于业务层解析后的数据操作
|
|
|
|
|
|
// type MilestoneEX struct {
|
|
|
|
|
|
// Milestone
|
|
|
|
|
|
// Args []uint32 // 解析后的里程碑详细数据
|
|
|
|
|
|
// Results []uint32 `json:"results"` // 解析后的里程碑详细数据
|
|
|
|
|
|
// }
|
2025-11-16 20:30:17 +00:00
|
|
|
|
|
2026-01-21 20:46:05 +00:00
|
|
|
|
// // 检查是否触发过,成功返回触发的次数,失败返回0
|
|
|
|
|
|
// func (m *MilestoneEX) CheakNoNumber(count uint32) bool {
|
|
|
|
|
|
// // if v.DoneType == model.MilestoneMode.BOSS && IsPrefixBasicSlice(v.Args, []uint32{mapid, bossid}) && v.Count == count {
|
2025-11-22 22:57:32 +08:00
|
|
|
|
|
2026-01-21 20:46:05 +00:00
|
|
|
|
// _, ok := lo.Find(m.Results, func(v1 uint32) bool { //寻找是否触发过
|
|
|
|
|
|
// //大于触发值就触发,然后1的返回false,因为没有奖励,这样就可以一直触发
|
|
|
|
|
|
// return v1 == count //大于等于就触发
|
|
|
|
|
|
// })
|
|
|
|
|
|
// //没找到且次数满足才能返回真
|
|
|
|
|
|
// if !ok && m.Count >= count {
|
|
|
|
|
|
// return true
|
|
|
|
|
|
// }
|
2025-11-22 22:57:32 +08:00
|
|
|
|
|
2026-01-21 20:46:05 +00:00
|
|
|
|
// //已经触发过
|
|
|
|
|
|
// return false
|
|
|
|
|
|
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// }
|
2025-11-22 22:57:32 +08:00
|
|
|
|
|
2025-11-16 20:30:17 +00:00
|
|
|
|
// TableName 返回表名
|
|
|
|
|
|
func (*Milestone) TableName() string {
|
|
|
|
|
|
return TableNameMilestone
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// GroupName 返回表组名
|
|
|
|
|
|
func (*Milestone) GroupName() string {
|
|
|
|
|
|
return "default"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// NewMilestone 创建新里程碑实例
|
|
|
|
|
|
func NewMilestone() *Milestone {
|
|
|
|
|
|
return &Milestone{
|
2026-01-08 03:30:18 +08:00
|
|
|
|
Base: *NewBase(),
|
2025-11-16 20:30:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// init 初始化表
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
cool.CreateTable(&Milestone{})
|
|
|
|
|
|
}
|