- 重构了任务系统的数据结构和执行逻辑 - 优化了地图加载和怪物刷新机制 - 改进了宠物系统的基础架构 - 调整了玩家信息和背包的处理方式 - 统一了数据访问层的接口和实现
148 lines
4.8 KiB
Go
148 lines
4.8 KiB
Go
package model
|
||
|
||
import (
|
||
"blazing/cool"
|
||
)
|
||
|
||
const TableNamePet = "pet"
|
||
|
||
// Pet mapped from table <pet>
|
||
type Pet struct {
|
||
*cool.Model
|
||
PlayerID uint32 `gorm:"not null;index:idx_pet_by_player_id;comment:'所属玩家ID'" json:"player_id"`
|
||
InBag bool `gorm:"not null;comment:'是否在背包中'" json:"in_bag"` //"0为放入仓库,1为放入背包
|
||
Data string `gorm:"type:text;not null;comment:'精灵全部数据'" json:"data"`
|
||
}
|
||
|
||
// PetInfo 精灵信息结构(合并后的优化版本)
|
||
type PetInfo struct {
|
||
Owner uint32 `struc:"skip"` //仅作为存储
|
||
// 精灵编号(@UInt long → uint32)
|
||
ID uint32 `fieldDesc:"精灵编号" `
|
||
|
||
// 名字:默认为全0,补齐到16字节(固定长度 → [16]byte)
|
||
Name [16]byte `fieldDesc:"名字 默认为全0 但要补齐到16字节" serialize:"fixedLength=16,type=byteArray"`
|
||
|
||
// 个体值(@UInt long → uint32)
|
||
Dv uint32 `fieldDesc:"个体值" `
|
||
|
||
// 性格(@UInt long → uint32)
|
||
Nature uint32 `fieldDesc:"性格" `
|
||
|
||
// 等级(@UInt long → uint32)
|
||
Level uint32 `fieldDesc:"等级" `
|
||
|
||
// 当前等级已获得经验(@UInt long → uint32)
|
||
Exp uint32 `fieldDesc:"当前等级已经获得的经验 2538" `
|
||
|
||
// 当前等级所需经验(@UInt long → uint32)
|
||
LvExp uint32 `fieldDesc:"当前等级所需的经验" `
|
||
|
||
// 升到下一级的经验(@UInt long → uint32)
|
||
NextLvExp uint32 `fieldDesc:"升到下一级的经验" `
|
||
|
||
// 当前生命(@UInt long → uint32)
|
||
Hp uint32 `fieldDesc:"当前生命" `
|
||
|
||
// 最大生命(@UInt long → uint32)
|
||
MaxHp uint32 `fieldDesc:"最大生命" `
|
||
|
||
// 攻击(@UInt long → uint32)
|
||
Attack uint32 `fieldDesc:"攻击" `
|
||
|
||
// 防御(@UInt long → uint32)
|
||
Defence uint32 `fieldDesc:"防御" `
|
||
|
||
// 特攻(@UInt long → uint32)
|
||
SpecialAttack uint32 `fieldDesc:"特攻" `
|
||
|
||
// 特防(@UInt long → uint32)
|
||
SpecialDefence uint32 `fieldDesc:"特防" `
|
||
|
||
// 速度(@UInt long → uint32)
|
||
Speed uint32 `fieldDesc:"速度" `
|
||
|
||
// 生命学习力(@UInt long → uint32)
|
||
EvHp uint32 `fieldDesc:"生命学习力" `
|
||
|
||
// 攻击学习力(@UInt long → uint32)
|
||
EvAttack uint32 `fieldDesc:"攻击学习力" `
|
||
|
||
// 防御学习力(@UInt long → uint32)
|
||
EvDefence uint32 `fieldDesc:"防御学习力" `
|
||
|
||
// 特攻学习力(@UInt long → uint32)
|
||
EvSpecialAttack uint32 `fieldDesc:"特攻学习力" `
|
||
|
||
// 特防学习力(@UInt long → uint32,注意原Java拼写:evSpecialDefense)
|
||
EvSpecialDefense uint32 `fieldDesc:"特防学习力" `
|
||
|
||
// 速度学习力(@UInt long → uint32)
|
||
EvSpeed uint32 `fieldDesc:"速度学习力" `
|
||
SkillListLen uint32
|
||
// 技能信息:固定4条,空则赋值0(固定长度List → [4]SkillInfo,零值即符合“赋值0”)
|
||
SkillList [4]SkillInfo `fieldDesc:"32字节 技能信息 必须插入4条skillInfo,若技能信息为空则要赋值成0" serialize:"fixedLength=4,type=structArray"`
|
||
|
||
// 捕捉时间(@UInt long → 若为时间戳用uint32;若需时间类型可改为time.Time,需配合序列化处理)
|
||
CatchTime uint32 `fieldDesc:"捕捉时间" `
|
||
|
||
// 捕捉地图(@UInt long → uint32)
|
||
CatchMap uint32 `fieldDesc:"捕捉地图" `
|
||
|
||
// 未知默认0(@UInt long → uint32)
|
||
CatchRect uint32 `fieldDesc:"未知默认为0" `
|
||
|
||
// 捕获等级默认0(@UInt long → uint32)
|
||
CatchLevel uint32 `fieldDesc:"捕获等级 默认为0" `
|
||
EffectInfoLen uint16 `struc:"sizeof=EffectInfo"`
|
||
// 特性列表:长度用UShort存储(变长List → []PetEffectInfo + 长度前缀规则)
|
||
EffectInfo []PetEffectInfo `fieldDesc:"特性列表, 长度在头部以UShort存储" serialize:"lengthFirst,lengthType=uint16,type=structArray"`
|
||
|
||
// 皮肤ID默认0(@UInt long → uint32)
|
||
SkinID uint32 `fieldDesc:"皮肤id默认为0" `
|
||
|
||
// 是否闪光(@UInt long → uint32,0=否,1=是)
|
||
Shiny uint32 `fieldDesc:"是不是闪" `
|
||
}
|
||
|
||
// PetEffectInfo 精灵特性信息结构
|
||
type PetEffectInfo struct {
|
||
ItemID uint32 `struc:"uint32" json:"item_id"`
|
||
Status byte `struc:"byte" json:"status"`
|
||
LeftCount byte `struc:"byte" json:"left_count"`
|
||
EffectID uint16 `struc:"uint16" json:"effect_id"`
|
||
Reserve1 byte `struc:"byte" json:"reserve1"`
|
||
Reserve2 byte `struc:"byte" json:"reserve2"`
|
||
Reserve3 byte `struc:"byte" json:"reserve3"`
|
||
Reserve4 [13]byte `struc:"[13]byte" json:"reserve4"`
|
||
}
|
||
|
||
// SkillInfo 精灵技能信息结构(SkillInfo)
|
||
type SkillInfo struct {
|
||
ID uint32 `struc:"uint32"` // 技能id(@UInt long)
|
||
Pp uint32 `struc:"uint32"` // 剩余pp(@UInt long)
|
||
}
|
||
|
||
// TableName Pet's table name
|
||
func (*Pet) TableName() string {
|
||
return TableNamePet
|
||
}
|
||
|
||
// GroupName Pet's table group
|
||
func (*Pet) GroupName() string {
|
||
return "default"
|
||
}
|
||
|
||
// NewPet create a new Pet
|
||
func NewPet() *Pet {
|
||
return &Pet{
|
||
Model: cool.NewModel(),
|
||
}
|
||
}
|
||
|
||
// init 创建表
|
||
func init() {
|
||
_ = cool.CreateTable(&Pet{})
|
||
// fmt.Println(err)
|
||
}
|