package model import ( "blazing/cool" "time" "github.com/creasty/defaults" ) const TableNamePlayerInfo = "player_info" type Player struct { *cool.Model PlayerID uint64 `gorm:"not null;index:idx_pet_by_player_id;comment:'所属玩家ID'" json:"player_id"` Data string `gorm:"type:text;not null;comment:'全部数据'" json:"data"` } type PlayerEX struct { Player Data *PlayerInfo `orm:"data" json:"data"` } type Pos struct { X uint32 `struc:"uint32" default:"0"` Y uint32 `struc:"uint32" default:"0"` } // PeopleItemInfo 穿戴装备信息结构(PeopleItemInfo) type PeopleItemInfo struct { ID uint32 `struc:"uint32"` // 装备id Level uint32 `struc:"uint32" default:"1"` // 未知字段(默认值1,@Builder.Default) } // InitDefaults 初始化默认值(确保默认值正确赋值) func (p *PeopleItemInfo) InitDefaults() { p.Level = 1 // 未知字段默认值1,与Java的@Builder.Default保持一致 } func NewPlayerInfo() *PlayerInfo { l := &PlayerInfo{ Clothes: make([]PeopleItemInfo, 0), PetList: make([]PetInfo, 0), } // 自动填充 struct tag 里的 default 值 if err := defaults.Set(l); err != nil { panic(err) // 方便发现 default 设置错误 } return l } type PlayerInfo struct { GoldBean int32 `struc:"skip" json:"nieo_gold_bean"` // 金豆(特殊货币) ExpPool int64 `struc:"skip" json:"exp_pool"` // 累计经验池 LastResetTime time.Time `struc:"skip" json:"last_reset_time"` // 重置时间,比如电池和每日任务 // OutInfo 字段 UserID uint32 `struc:"uint32" json:"user_id"` // 米米号 通过sid拿到 RegisterTime uint32 `struc:"uint32" json:"register_time"` // 注册时间(秒时间戳) Nick string `struc:"[16]byte" default:"seer" json:"nick"` // 16字节昵称 Vip uint16 `struc:"uint16" json:"vip"` // 固定0 Viped uint16 `struc:"uint16" default:"15" json:"viped"` // 固定15 DSFlag uint32 `struc:"uint32" json:"ds_flag"` // 固定0 Color uint32 `struc:"uint32" json:"color"` // 机器人颜色RGB颜色值(uint32,实际为3个uint8) Texture uint32 `struc:"uint32" json:"texture"` // 固定0 Energy uint32 `struc:"uint32" default:"3000" json:"energy"` // 固定3000 Coins uint32 `struc:"uint32" json:"coins"` // 赛尔豆 FightBadge uint32 `struc:"uint32" json:"fight_badge"` // 固定0 MapID uint32 `struc:"uint32" default:"1" json:"map_id"` // 上线地图ID Pos Pos `json:"pos"` // 坐标 TimeToday uint32 `struc:"uint32" default:"0" json:"time_today"` // 已消耗时间(秒) TimeLimit uint32 `struc:"uint32" default:"43200" json:"time_limit"` // 总电池限制(秒) IsClothHalfDay byte `struc:"byte" json:"is_cloth_half_day"` // 活动标志0/1 IsRoomHalfDay byte `struc:"byte" json:"is_room_half_day"` // 活动标志0/1 IFortressHalfDay byte `struc:"byte" json:"i_fortress_half_day"` // 活动标志0/1 IsHQHalfDay byte `struc:"byte" json:"is_hq_half_day"` // 活动标志0/1 LoginCount uint32 `struc:"uint32" json:"login_count"` // 固定0 Inviter uint32 `struc:"uint32" json:"inviter"` // 固定0 NewInviteeCount uint32 `struc:"uint32" json:"new_invitee_count"` // 固定0 VipLevel uint32 `struc:"uint32" default:"8" json:"vip_level"` // 固定8 VipValue uint32 `struc:"uint32" default:"80000" json:"vip_value"` // 固定80000 VipStage uint32 `struc:"uint32" default:"1" json:"vip_stage"` // 超no的外形等级建议固定1 AutoCharge uint32 `struc:"uint32" default:"1" json:"auto_charge"` // nono是否自动充电 VipEndTime uint32 `struc:"uint32" default:"4294967295" json:"vip_end_time"` // 超no的结束时间建议尽可能大 FreshManBonus uint32 `struc:"uint32" json:"fresh_man_bonus"` // 邀请活动建议先给固定值0 NonoChipList [80]byte `struc:"[80]byte" json:"nono_chip_list"` // 超no芯片列表 DailyResArr [50]byte `struc:"[50]byte" default:"0" json:"daily_res_arr"` // 每日任务状态 40+是谱尼的 Study struct { TeacherID uint32 `struc:"uint32" json:"teacher_id"` // 教官id StudentID uint32 `struc:"uint32" json:"student_id"` // 学员id GraduationCount uint32 `struc:"uint32" default:"0" json:"graduation_count"` // 毕业人数 } MaxPuniLv uint32 `struc:"uint32" default:"0" json:"max_puni_lv"` // 默认0, 虚无 元素 能量 生命 轮回 永恒 圣洁 最高为8 PetMaxLevel uint32 `struc:"uint32" json:"pet_max_level"` // 精灵最高等级 AllPetNumber uint32 `struc:"uint32" json:"all_pet_number"` // 精灵数量 MonKingWin uint32 `struc:"uint32" json:"mon_king_win"` // 精灵王胜场 CurrentStage uint32 `struc:"uint32" json:"current_stage"` // 勇者之塔层数 MaxStage uint32 `struc:"uint32" json:"max_stage"` // 试炼之塔最高层 CurrentFreshStage uint32 `struc:"uint32" json:"current_fresh_stage"` // 当前试炼层数 MaxFreshStage uint32 `struc:"uint32" json:"max_fresh_stage"` // 最高试炼层 MaxArenaWins uint32 `struc:"uint32" json:"max_arena_wins"` // 星际擂台连胜 TwoTimes uint32 `struc:"uint32" default:"0" json:"two_times"` // 双倍经验加速器剩余使用次数 ThreeTimes uint32 `struc:"uint32" default:"0" json:"three_times"` // 三倍经验加速器剩余使用次数 AutoFight uint32 `struc:"uint32" default:"0" json:"auto_fight"` // 是否自动战斗 AutoFightTime uint32 `struc:"uint32" default:"0" json:"auto_fight_time"` // 自动战斗剩余的场次 EnergyTime uint32 `struc:"uint32" default:"0" json:"energy_time"` // 能量吸收仪剩余次数 LearnTimes uint32 `struc:"uint32" default:"0" json:"learn_times"` // 学习力吸收仪剩余次数 MonBattleMedal uint32 `struc:"uint32" default:"0" json:"mon_battle_medal"` // 默认0 RecordCount uint32 `struc:"uint32" default:"0" json:"record_count"` // 默认0 ObtainTm uint32 `struc:"uint32" default:"0" json:"obtain_tm"` // 默认0 SoulBeadItemID uint32 `struc:"uint32" json:"soul_bead_item_id"` // 当前元神珠id ExpireTm uint32 `struc:"uint32" default:"0" json:"expire_tm"` // 默认0 FuseTimes uint32 `struc:"uint32" default:"0" json:"fuse_times"` // 默认0 HasNono uint32 `struc:"uint32" default:"1" json:"has_nono"` // 玩家是否有nono SuperNono uint32 `struc:"uint32" default:"1" json:"super_nono"` // 玩家是否有超能nono NonoState uint32 `struc:"uint32" default:"4294967295" json:"nono_state"` // 默认-1 NonoColor uint32 `struc:"uint32" json:"nono_color"` // nono颜色 NonoNick string `struc:"[16]byte" default:"nono" json:"nono_nick"` // nono名字(16字节) TeamInfo TeamInfo `struc:"struct" json:"team_info"` // 战队信息24字节 TeamPkInfo TeamPKInfo `struc:"struct" json:"team_pk_info"` // 8字节 Reserved byte `struc:"byte" json:"reserved"` // 1字节无内容 Badge uint32 `struc:"uint32" default:"0" json:"badge"` // 默认0 Reserved1 [27]byte `struc:"[27]byte" default:"3" json:"reserved1"` // 27字节默认3 TaskList [500]byte `struc:"[500]byte" default:"0" json:"task_list"` // 任务状态数组500字节,默认3 PetListCount uint32 `struc:"sizeof=PetList" json:"pet_list_count"` // 精灵列表长度 PetList []PetInfo ` json:"pet_list"` // 精灵背包内信息 ClothesCount uint32 `struc:"sizeof=Clothes" json:"clothes_count"` // 穿戴装备数量 Clothes []PeopleItemInfo ` json:"clothes"` // 穿戴装备 } // TableName PlayerInfo's table name func (*Player) TableName() string { return TableNamePlayerInfo } // GroupName PlayerInfo's table group func (*Player) GroupName() string { return "default" } // NewPlayerInfo create a new PlayerInfo func NewPlayer() *PlayerEX { return &PlayerEX{ Player: Player{ Model: cool.NewModel(), }, } } // init 创建表 func init() { cool.CreateTable(&Player{}) }