refactor(logic): 重构逻辑层代码

- 更新导入路径和结构体命名
- 调整函数签名和返回类型
- 移除未使用的代码文件
- 统一错误处理方式
This commit is contained in:
2025-07-26 00:48:57 +08:00
parent cb87fda0d1
commit 82075b0884
13 changed files with 386 additions and 198 deletions

View File

@@ -2,15 +2,15 @@ package controller
import (
"blazing/logic/service"
"blazing/logic/service/server"
"blazing/logic/service/CommendSvr"
"github.com/panjf2000/gnet/v2"
)
// 处理命令: 105
func (h Controller) GetServer(data *server.SidInfo, c gnet.Conn) (result *server.CommendSvrInfo, err service.OutInfo) { //这个时候player应该是空的
result = server.NewCommendSvrInfo()
result.ServerList = server.GetServerInfoList()
func (h Controller) GetServer(data *CommendSvr.SidInfo, c gnet.Conn) (result *CommendSvr.CommendSvrInfo, err service.OutInfo) { //这个时候player应该是空的
result = CommendSvr.NewInInfo()
result.ServerList = CommendSvr.GetServerInfoList()
return
//return //TODO 这里待实现改成接口调用Ret方法

View File

@@ -5,13 +5,12 @@ import (
"blazing/common/data/share"
"blazing/logic/service"
"blazing/logic/service/login"
"blazing/logic/service/maps"
"github.com/panjf2000/gnet/v2"
)
// 处理命令: 1001
func (h *Controller) Login(data *login.LoginSidInfo, c gnet.Conn) (result *maps.MapHotOutboundInfo, err service.OutInfo) { //这个时候player应该是空的
func (h *Controller) Login(data *login.InInfo, c gnet.Conn) (result *login.OutInfo, err service.OutInfo) { //这个时候player应该是空的
if tt := data.CheakSession(); tt { //说明sid正确
h.RPCClient.Kick(data.Head.UserID) //先踢人

View File

@@ -3,13 +3,13 @@ package controller
import (
"blazing/common/data/entity"
"blazing/logic/service"
"blazing/logic/service/maps"
maps "blazing/logic/service/MapHot"
)
func (h Controller) MapHot(data *maps.MapHotInboundInfo, c *entity.Player) (result *maps.MapHotOutboundInfo, err service.OutInfo) {
func (h Controller) MapHot(data *maps.MapHotInboundInfo, c *entity.Player) (result *maps.OutInfo, err service.OutInfo) {
data.Def()
result = &maps.MapHotOutboundInfo{
result = &maps.OutInfo{
HotInfos: make([]maps.MapHotInfo, 0),
}

View File

@@ -1,116 +1,116 @@
package server
import (
"blazing/common/socket/handler"
"blazing/cool"
"blazing/modules/base/service"
"blazing/modules/blazing/model"
"github.com/butoften/array"
)
//var _ entity.Blazingservice = (*SidInfo)(nil)
type SidInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化
Head handler.TomeeHeader `cmd:"105" struc:"[0]pad"` //玩家登录
Sid []byte `struc:"[20]byte"` // 登录会话ID固定长度16字节
ret []byte `struc:"[0]pad"`
// NotLogin uint32 `error="10001"|struc:"[0]pad"` //返回错误码 ,不序列化,仅作为错误码
// ErrorPassWord uint32 `struc:"[0]pad"`
}
// CommendSvrInfo 初始连接请求信息结构体
type CommendSvrInfo struct {
//Handler handler.TomeeHeader //` struc:"[0]pad"` //消息头 ,这里为传入的头部数据,遍历此头部实现解析CommendSvrInfo
MaxOnlineID uint32 `struc:"sizeof=ServerList"` // 最大连接数
IsVip uint32 // 建议为0
ServerInfoLen uint32 `struc:"sizeof=ServerList"` // 服务器信息长度 ServerInfo
ServerList []ServerInfo // 服务器具体信息
FriendInfoLen uint32 `struc:"sizeof=FriendInfo"`
FriendInfo []FriendInfo // 好友id
BlackInfoLen uint32 `struc:"sizeof=BlackInfo"`
BlackInfo []BlackInfo // 黑名单id
}
// NewCommendSvrInfo 创建并返回一个新的 commendSvrInfo 结构体实例
// 返回的实例包含初始化的 ServerList、FriendInfo 和 BlackInfo 切片
// IsVip 和 ServerInfoLen 字段被初始化为 0
func NewCommendSvrInfo() *CommendSvrInfo {
return &CommendSvrInfo{
// Handler: handler.TomeeHeader{},
// MaxOnlineID: 100,
IsVip: 0,
ServerInfoLen: 0,
ServerList: make([]ServerInfo, 0),
FriendInfo: make([]FriendInfo, 0),
BlackInfo: make([]BlackInfo, 0),
//Reversed: 0,
}
}
// ServerInfo 服务器信息结构体
type ServerInfo struct {
// 连接ID, 即服务器序号
OnlineID uint32
// 当前服务器玩家在线数量, 供SWF显示
UserCnt uint32
// 服务器IP, 16字节UTF-8, 不足16补齐到16
IP string `struc:"[16]byte"` // 定长模式16字节
// 端口
Port uint16
// 好友在线的个数
Friends uint32
}
// NewServerInfo 创建新的服务器信息实例
func newServerInfo() *ServerInfo {
//getServerInfoList()
return &ServerInfo{
//OnlineID: 0,
UserCnt: 20,
//IP: "",
// Port: 0,
Friends: 1,
}
}
func GetServerInfoList() []ServerInfo {
dictInfoModel1 := model.NewServerList()
mType := cool.DBM(dictInfoModel1)
t, _ := mType.All()
//fmt.Println(t)
var ret []model.ServerList
t.Structs(&ret)
//fmt.Println(t)
var ret1 []ServerInfo
ip := service.NewBaseSysConfService().GetValue("server_ip")
for _, v := range ret {
tt := newServerInfo()
tt.OnlineID = uint32(v.OnlineID)
// tt.UserCnt = v.UserCnt
//tt.IP = v.IP
tt.IP = ip
tt.Port = v.Port
// tt.Friends = v.Friends
ret1 = append(ret1, *tt)
}
array.Sort(&ret1, func(a ServerInfo, b ServerInfo) bool {
return a.OnlineID < b.OnlineID
})
//fmt.Printf("升序 Sort: %v\n", ret1)
return ret1
}
type FriendInfo struct {
BlackInfo
TimePoke uint32
}
type BlackInfo struct {
Userid uint32
//TimePoke uint32
}
package CommendSvr
import (
"blazing/common/socket/handler"
"blazing/cool"
"blazing/modules/base/service"
"blazing/modules/blazing/model"
"github.com/butoften/array"
)
//var _ entity.Blazingservice = (*SidInfo)(nil)
type SidInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化
Head handler.TomeeHeader `cmd:"105" struc:"[0]pad"` //玩家登录
Sid []byte `struc:"[20]byte"` // 登录会话ID固定长度16字节
ret []byte `struc:"[0]pad"`
// NotLogin uint32 `error="10001"|struc:"[0]pad"` //返回错误码 ,不序列化,仅作为错误码
// ErrorPassWord uint32 `struc:"[0]pad"`
}
// CommendSvrInfo 初始连接请求信息结构体
type CommendSvrInfo struct {
//Handler handler.TomeeHeader //` struc:"[0]pad"` //消息头 ,这里为传入的头部数据,遍历此头部实现解析CommendSvrInfo
MaxOnlineID uint32 `struc:"sizeof=ServerList"` // 最大连接数
IsVip uint32 // 建议为0
ServerInfoLen uint32 `struc:"sizeof=ServerList"` // 服务器信息长度 ServerInfo
ServerList []ServerInfo // 服务器具体信息
FriendInfoLen uint32 `struc:"sizeof=FriendInfo"`
FriendInfo []FriendInfo // 好友id
BlackInfoLen uint32 `struc:"sizeof=BlackInfo"`
BlackInfo []BlackInfo // 黑名单id
}
// NewInInfo 创建并返回一个新的 commendSvrInfo 结构体实例
// 返回的实例包含初始化的 ServerList、FriendInfo 和 BlackInfo 切片
// IsVip 和 ServerInfoLen 字段被初始化为 0
func NewInInfo() *CommendSvrInfo {
return &CommendSvrInfo{
// Handler: handler.TomeeHeader{},
// MaxOnlineID: 100,
IsVip: 0,
ServerInfoLen: 0,
ServerList: make([]ServerInfo, 0),
FriendInfo: make([]FriendInfo, 0),
BlackInfo: make([]BlackInfo, 0),
//Reversed: 0,
}
}
// ServerInfo 服务器信息结构体
type ServerInfo struct {
// 连接ID, 即服务器序号
OnlineID uint32
// 当前服务器玩家在线数量, 供SWF显示
UserCnt uint32
// 服务器IP, 16字节UTF-8, 不足16补齐到16
IP string `struc:"[16]byte"` // 定长模式16字节
// 端口
Port uint16
// 好友在线的个数
Friends uint32
}
// NewServerInfo 创建新的服务器信息实例
func newServerInfo() *ServerInfo {
//getServerInfoList()
return &ServerInfo{
//OnlineID: 0,
UserCnt: 20,
//IP: "",
// Port: 0,
Friends: 1,
}
}
func GetServerInfoList() []ServerInfo {
dictInfoModel1 := model.NewServerList()
mType := cool.DBM(dictInfoModel1)
t, _ := mType.All()
//fmt.Println(t)
var ret []model.ServerList
t.Structs(&ret)
//fmt.Println(t)
var ret1 []ServerInfo
ip := service.NewBaseSysConfService().GetValue("server_ip")
for _, v := range ret {
tt := newServerInfo()
tt.OnlineID = uint32(v.OnlineID)
// tt.UserCnt = v.UserCnt
//tt.IP = v.IP
tt.IP = ip
tt.Port = v.Port
// tt.Friends = v.Friends
ret1 = append(ret1, *tt)
}
array.Sort(&ret1, func(a ServerInfo, b ServerInfo) bool {
return a.OnlineID < b.OnlineID
})
//fmt.Printf("升序 Sort: %v\n", ret1)
return ret1
}
type FriendInfo struct {
BlackInfo
TimePoke uint32
}
type BlackInfo struct {
Userid uint32
//TimePoke uint32
}

View File

@@ -1,27 +1,26 @@
package maps
import "blazing/common/socket/handler"
// MapHotInfo 表示地图热度信息
type MapHotInfo struct {
MapID uint64 `json:"mapId"` // 地图ID
Count uint64 `json:"count"` // 地图里的人数
}
type MapHotInboundInfo struct {
Head handler.TomeeHeader `cmd:"1004" struc:"[0]pad"` //玩家登录
}
func (m *MapHotInboundInfo) Def()[]byte {
return m.Head.Pack(MapHotOutboundInfo{
HotInfos: make([]MapHotInfo, 0),
}) //返回传参
}
// MapHotOutboundInfo 表示地图热度的出站消息
type MapHotOutboundInfo struct {
HotInfosLen uint32 `json:"hotInfosLen" struc:"sizeof=HotInfos"` // 热度信息列表长度
HotInfos []MapHotInfo `json:"hotInfos"` // 热度信息列表
}
package MapHot
import "blazing/common/socket/handler"
// MapHotInfo 表示地图热度信息
type MapHotInfo struct {
MapID uint64 `json:"mapId"` // 地图ID
Count uint64 `json:"count"` // 地图里的人数
}
type InInfo struct {
Head handler.TomeeHeader `cmd:"1004" struc:"[0]pad"` //玩家登录
}
func (m *InInfo) Def() []byte {
return m.Head.Pack(OutInfo{
HotInfos: make([]MapHotInfo, 0),
}) //返回传参
}
// OutInfo 表示地图热度的出站消息
type OutInfo struct {
HotInfosLen uint32 `json:"hotInfosLen" struc:"sizeof=HotInfos"` // 热度信息列表长度
HotInfos []MapHotInfo `json:"hotInfos"` // 热度信息列表
}

View File

@@ -8,15 +8,14 @@ import (
)
// LoginSidInfo 登录携带的凭证结构体
type LoginSidInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化
type InInfo struct { //这里直接使用组合来实现将传入的原始头部数据和结构体参数序列化
Head handler.TomeeHeader `cmd:"1001" struc:"[0]pad"` //玩家登录
Sid []byte `struc:"[16]byte"` // 登录会话ID固定长度16字节
// NotLogin uint32 `error="10001"|struc:"[0]pad"` //返回错误码 ,不序列化,仅作为错误码
// ErrorPassWord uint32 `struc:"[0]pad"`
}
func (s *LoginSidInfo) Def() []byte { //默认返回方法
func (s *InInfo) Def() []byte { //默认返回方法
t1, _ := hex.DecodeString("0000045D37000003E9000186A600000000000186A6683F89CF6E69656F0000000000000000000000000008000F00000000000000000000000000000000000000000000000000000001000001DB0000018B000000000000A8C000000000000000000000000000000000000000080001388000000001000000017FFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000000000000000000000000000000000064000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001FFFFFFFF000000004E4F4E4F0000000000000000000000000000000000000001000000010000000100000001000000010000000100000001000000000003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000100000064000000000000000000000000000000000000001F000000000000006400000000000093F4000093F4000000D5000000F7000000AD00000088000000920000008C0000009C00000000000000000000000000000000000000000000000000000004000027900000001B00004E6200000014000028380000002800004E3E0000002368493DC60000000000000000000000000000000000000000000100000000000000A937000007D1000186A600000000000186A66E69656F00000000000000000000000000000000000000000000000F0000000000000000000001DB0000018B0000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000001000000000000000000000000000000000000000000000000000000000000000000000000")
//t1 = t1[17:]
fmt.Println(t1[:40])
@@ -28,7 +27,7 @@ func (s *LoginSidInfo) Def() []byte { //默认返回方法
//return t1[:40]
}
func (l *LoginSidInfo) CheakSession() bool {
func (l *InInfo) CheakSession() bool {
// tt, _ := cool.CacheManager.Keys(context.Background())
//g.Dump(tt)
t1 := hex.EncodeToString(l.Sid)

View File

@@ -0,0 +1,107 @@
package login
import (
"blazing/common/socket/handler"
)
// LoginUserInfo 对应Java版本的登录用户信息结构
type OutInfo struct {
Head handler.TomeeHeader `cmd:"1001" struc:"[0]pad"` // 玩家登录
UserID uint32 `struc:"uint32"` // 米米号 通过sid拿到
RegisterTime uint32 `struc:"uint32"` // 注册时间(按秒的时间戳)
Nick [16]byte `struc:"[16]byte"` // 16字节昵称
Vip uint16 `struc:"uint16"` // 暂时不明建议先给固定值0
Viped uint16 `struc:"uint16" default:"15"` // 暂时不明建议先给固定值15
DSFlag uint32 `struc:"uint32"` // 暂时不明建议先给固定值0
Color uint32 `struc:"uint32"` // 机器人人物颜色 00 rgb
Texture uint32 `struc:"uint32"` // 暂时不明建议先给固定值0
Energy uint32 `struc:"uint32" default:"3000"` // 暂时不明建议先给固定值3000
Coins uint32 `struc:"uint32"` // 赛尔豆
FightBadge uint32 `struc:"uint32"` // 暂时不明建议先给固定值0
MapID uint32 `struc:"uint32"` // 上线的地图id
Pos Pos
TimeToday uint32 `struc:"uint32"` // 已经消耗掉的时间(秒为单位)
TimeLimit uint32 `struc:"uint32"` // 总电池限制(秒为单位)
IsClothHalfDay byte `struc:"byte"` // 暂时不明感觉是某种活动建议先给固定值0(只能0或1)
IsRoomHalfDay byte `struc:"byte"` // 暂时不明感觉是某种活动建议先给固定值0(只能0或1)
IFortressHalfDay byte `struc:"byte"` // 暂时不明感觉是某种活动建议先给固定值0(只能0或1)
IsHQHalfDay byte `struc:"byte"` // 暂时不明感觉是某种活动建议先给固定值0(只能0或1)
LoginCount uint32 `struc:"uint32"` // 暂时不明建议先给固定值0
Inviter uint32 `struc:"uint32"` // 邀请活动建议先给固定值0
NewInviteeCount uint32 `struc:"uint32"` // 邀请活动建议先给固定值0
VipLevel uint32 `struc:"uint32" default:"8"` // 超no等级建议固定8
VipValue uint32 `struc:"uint32" default:"80000"` // 超no的vip值建议固定80000
VipStage uint32 `struc:"uint32" default:"1"` // 超no的外形等级建议固定1(暂定)
AutoCharge uint32 `struc:"uint32" default:"1"` // nono是否自动充电 建议固定1
VipEndTime uint32 `struc:"uint32" default:"4294967295"` // 超no的结束时间建议尽可能大
FreshManBonus uint32 `struc:"uint32"` // 邀请活动建议先给固定值0
NonoChipList [80]byte `struc:"[80]byte"` // 超no芯片列表*(80字节)
DailyResArr [50]byte `struc:"[50]byte" default:"3"` // 50字节默认值为3
TeacherID uint32 `struc:"uint32"` // 教官id
StudentID uint32 `struc:"uint32"` // 学员id
GraduationCount uint32 `struc:"uint32"` // 毕业人数
MaxPuniLv uint32 `struc:"uint32" default:"0"` // 默认值为0
PetMaxLevel uint32 `struc:"uint32"` // 精灵的最高等级
AllPetNumber uint32 `struc:"uint32"` // 所有的精灵的数量
MonKingWin uint32 `struc:"uint32"` // 精灵王之战胜场
CurrentStage uint32 `struc:"uint32"` // 勇者之塔当前到达的层数
MaxStage uint32 `struc:"uint32"` // 试炼之塔最大胜利的层数
CurrentFreshStage uint32 `struc:"uint32"` // 试炼之塔当前到达的层数
MaxFreshStage uint32 `struc:"uint32"` // 试炼之塔最大胜利的层数
MaxArenaWins uint32 `struc:"uint32"` // 星际擂台连胜
TwoTimes uint32 `struc:"uint32" default:"0"` // 未知默认0
ThreeTimes uint32 `struc:"uint32" default:"0"` // 未知默认0
AutoFight uint32 `struc:"uint32" default:"0"` // 是否自动战斗(未知默认值0)
AutoFightTime uint32 `struc:"uint32" default:"0"` // 自动战斗剩余的场次(未知默认值0)
EnergyTime uint32 `struc:"uint32" default:"0"` // 能量吸收仪剩余次数(未知待定默认值0)
LearnTimes uint32 `struc:"uint32" default:"0"` // 学习力吸收仪剩余次数(未知待定默认值0)
MonBattleMedal uint32 `struc:"uint32" default:"0"` // 未知默认0
RecordCount uint32 `struc:"uint32" default:"0"` // 未知默认0
ObtainTm uint32 `struc:"uint32" default:"0"` // 未知默认0
SoulBeadItemID uint32 `struc:"uint32"` // 当前在孵化的元神珠id
ExpireTm uint32 `struc:"uint32" default:"0"` // 未知默认0
FuseTimes uint32 `struc:"uint32" default:"0"` // 未知默认0
HasNono uint32 `struc:"uint32" default:"1"` // 玩家有没有nono
SuperNono uint32 `struc:"uint32" default:"1"` // 玩家有没有超能nono
NonoState uint32 `struc:"uint32" default:"4294967295"` // 默认值-1
NonoColor uint32 `struc:"uint32"` // nono的颜色
NonoNick [16]byte `struc:"[16]byte" default:"nono"` // nono的名字 必须要补齐到16位
TeamInfo TeamInfo `struc:"struct"` // 猜测为战队信息24字节
TeamPkInfo TeamPKInfo `struc:"struct"` // 8字节
Reserved byte `struc:"byte"` // 1字节 无内容
Badge uint32 `struc:"uint32" default:"0"` // 默认值为0
Reserved1 [27]byte `struc:"[27]byte" default:"3"` // 未知(27字节默认值为3)
TaskList [500]byte `struc:"[500]byte" default:"3"` // 任务状态数组(500字节3为已经完成建议默认值为3)
PetListCount uint16 `struc:"sizeof=PetList"` // 精灵列表长度
PetList PetInfo `struc:"-"` // 精灵背包内的信息
ClothesCount uint8 `struc:"sizeof=Clothes"` // 穿戴装备数量
Clothes []PeopleItemInfo `struc:"-"` // 穿戴装备
}
// 初始化默认值
func (l *OutInfo) InitDefaults() {
// 初始化数组默认值
for i := range l.DailyResArr {
l.DailyResArr[i] = 3
}
for i := range l.Reserved1 {
l.Reserved1[i] = 3
}
for i := range l.TaskList {
l.TaskList[i] = 3
}
// 设置结构体字段的默认值
l.Viped = 15
l.Energy = 3000
l.VipLevel = 8
l.VipValue = 80000
l.VipStage = 1
l.AutoCharge = 1
l.VipEndTime = 0xFFFFFFFF
l.HasNono = 1
l.SuperNono = 1
l.NonoState = 0xFFFFFFFF
}

View File

@@ -0,0 +1,12 @@
package login
// PeopleItemInfo 穿戴装备信息结构对应Java的PeopleItemInfo
type PeopleItemInfo struct {
ID uint32 `struc:"uint32"` // 装备id对应Java的@UInt long
Level uint32 `struc:"uint32" default:"1"` // 未知字段默认值1对应Java的@Builder.Default
}
// InitDefaults 初始化默认值(确保默认值正确赋值)
func (p *PeopleItemInfo) InitDefaults() {
p.Level = 1 // 未知字段默认值1与Java的@Builder.Default保持一致
}

View File

@@ -0,0 +1,36 @@
package login
// PetInfo 精灵信息结构对应Java的PetInfo包含新增的皮肤和闪光字段
type PetInfo struct {
ID uint32 `struc:"uint32"` // 精灵编号
Name [16]byte `struc:"[16]byte"` // 名字16字节固定长度默认全0
DV uint32 `struc:"uint32"` // 个体值
Nature uint32 `struc:"uint32"` // 性格
Level uint32 `struc:"uint32"` // 等级
Exp uint32 `struc:"uint32"` // 当前等级已获得的经验
LvExp uint32 `struc:"uint32"` // 当前等级所需的经验
NextLvExp uint32 `struc:"uint32"` // 升到下一级的经验
HP uint32 `struc:"uint32"` // 当前生命
MaxHP uint32 `struc:"uint32"` // 最大生命
Attack uint32 `struc:"uint32"` // 攻击
Defence uint32 `struc:"uint32"` // 防御
SpecialAttack uint32 `struc:"uint32"` // 特攻
SpecialDefence uint32 `struc:"uint32"` // 特防
Speed uint32 `struc:"uint32"` // 速度
EvHP uint32 `struc:"uint32"` // 生命学习力
EvAttack uint32 `struc:"uint32"` // 攻击学习力
EvDefence uint32 `struc:"uint32"` // 防御学习力
EvSpecialAttack uint32 `struc:"uint32"` // 特攻学习力
EvSpecialDefense uint32 `struc:"uint32"` // 特防学习力
EvSpeed uint32 `struc:"uint32"` // 速度学习力
SkillSize uint32 `struc:"uint32"` // 技能个数
SkillList [4]skill.SkillInfo `struc:"[4]struct"` // 技能列表固定4个空技能赋0
CatchTime uint32 `struc:"uint32"` // 捕捉时间
CatchMap uint32 `struc:"uint32"` // 捕捉地图
CatchRect uint32 `struc:"uint32" default:"0"` // 未知默认0
CatchLevel uint32 `struc:"uint32" default:"0"` // 捕获等级默认0
SkinID uint32 `struc:"uint32" default:"0"` // 皮肤id默认0新增字段
Shiny uint32 `struc:"uint32"` // 是不是闪(新增字段)
EffectInfoLen uint16 `struc:"uint16"` // 特性列表长度(无符号短整型)
EffectInfo []effect.PetEffectInfo `struc:"-"` // 特性列表长度由EffectInfoLen指定
}

View File

@@ -0,0 +1,6 @@
package login
type Pos struct {
X uint32 `struc:"uint32"`
Y uint32 `struc:"uint32"`
}

View File

@@ -0,0 +1,24 @@
package login
import "blazing/common/socket/handler"
// TeamInfo 战队信息结构
type TeamInfo struct {
Head handler.TomeeHeader `cmd:"1001" struc:"[0]pad"` // 命令头
ID uint32 `struc:"uint32" default:"0"` // 默认值0
Priv uint32 `struc:"uint32" default:"1"` // 默认值1
SuperCore uint32 `struc:"uint32" default:"1"` // 默认值1
IsShow uint32 `struc:"uint32" default:"1"` // 默认值1
AllContribution uint32 `struc:"uint32" default:"1"` // 默认值1
CanExContribution uint32 `struc:"uint32" default:"1"` // 默认值1
}
// InitDefaults 初始化默认值
func (t *TeamInfo) InitDefaults() {
t.ID = 0
t.Priv = 1
t.SuperCore = 1
t.IsShow = 1
t.AllContribution = 1
t.CanExContribution = 1
}

View File

@@ -0,0 +1,13 @@
package login
// TeamPKInfo 战队PK相关信息结构
type TeamPKInfo struct {
GroupID uint32 `struc:"uint32" default:"1"` // 分组ID默认值1对应Java的@UInt long
HomeTeamID uint32 `struc:"uint32" default:"1"` // 主队ID默认值1对应Java的@UInt long
}
// InitDefaults 初始化默认值(确保字段默认值正确赋值)
func (t *TeamPKInfo) InitDefaults() {
t.GroupID = 1
t.HomeTeamID = 1
}

View File

@@ -13,47 +13,40 @@ type Pet struct {
Data string `gorm:"type:text;not null;comment:'精灵全部数据'" json:"data"`
}
type PetInfo struct {
CapturePlayerID uint64 `gorm:"not null;comment:'捕获者ID'" json:"capture_player_id"`
CaptureTime int64 `gorm:"not null;comment:'捕获时间(时间戳)'" json:"capture_time"`
CaptureMap int32 `gorm:"not null;comment:'捕获地图ID'" json:"capture_map"`
CaptureRect int16 `gorm:"not null;default:0;comment:'捕获区域(未知用途默认为0)'" json:"capture_rect"`
CaptureLevel int16 `gorm:"not null;default:0;comment:'捕获时的等级'" json:"capture_level"`
PetTypeID int32 `gorm:"not null;comment:'精灵类型ID/精灵图鉴ID'" json:"pet_type_id"`
IndividualValue int16 `gorm:"not null;comment:'个体值(DV)'" json:"individual_value"`
Nature int16 `gorm:"not null;comment:'性格类型'" json:"nature"`
AbilityTypeEnum int16 `gorm:"comment:'特性枚举'" json:"ability_type_enum"`
Shiny int32 `gorm:"not null;default:0;comment:'闪光ID(异色!=0非异色=0)'" json:"shiny"`
Level int16 `gorm:"not null;default:1;comment:'当前等级'" json:"level"`
CurrentExp int32 `gorm:"not null;default:0;comment:'当前等级已获得经验值'" json:"current_exp"`
CurrentHP int32 `gorm:"not null;comment:'当前生命值'" json:"current_hp"`
MaxHP int32 `gorm:"not null;comment:'实际最大生命值'" json:"max_hp"`
Attack int32 `gorm:"not null;comment:'实际攻击力'" json:"attack"`
Defense int32 `gorm:"not null;comment:'实际防御力'" json:"defense"`
SpecialAttack int32 `gorm:"not null;comment:'实际特殊攻击力'" json:"special_attack"`
SpecialDefense int32 `gorm:"not null;comment:'实际特殊防御力'" json:"special_defense"`
Speed int32 `gorm:"not null;comment:'实际速度'" json:"speed"`
EvHP int16 `gorm:"not null;default:0;comment:'生命值学习力'" json:"ev_hp"`
EvAttack int16 `gorm:"not null;default:0;comment:'攻击学习力'" json:"ev_attack"`
EvDefense int16 `gorm:"not null;default:0;comment:'防御学习力'" json:"ev_defense"`
EvSpecialAttack int16 `gorm:"not null;default:0;comment:'特殊攻击学习力'" json:"ev_special_attack"`
EvSpecialDefense int16 `gorm:"not null;default:0;comment:'特殊防御学习力'" json:"ev_special_defense"`
EvSpeed int16 `gorm:"not null;default:0;comment:'速度学习力'" json:"ev_speed"`
Skill1ID int32 `gorm:"not null;default:0;comment:'技能1'" json:"skill_1_id"`
Skill2ID int32 `gorm:"not null;default:0;comment:'技能2'" json:"skill_2_id"`
Skill3ID int32 `gorm:"not null;default:0;comment:'技能3'" json:"skill_3_id"`
Skill4ID int32 `gorm:"not null;default:0;comment:'技能4'" json:"skill_4_id"`
Skill1PP int16 `gorm:"not null;default:0;comment:'技能1PP'" json:"skill_1_pp"`
Skill2PP int16 `gorm:"not null;default:0;comment:'技能2PP'" json:"skill_2_pp"`
Skill3PP int16 `gorm:"not null;default:0;comment:'技能3PP'" json:"skill_3_pp"`
Skill4PP int16 `gorm:"not null;default:0;comment:'技能4PP'" json:"skill_4_pp"`
ElementalOrbID int32 `gorm:"not null;default:0;comment:'属性能量珠ID'" json:"elemental_orb_id"`
SpecialOrbID int32 `gorm:"not null;default:0;comment:'平衡/暴击能量珠ID'" json:"special_orb_id"`
ElementalOrbCount int16 `gorm:"not null;default:0;comment:'属性能量珠剩余使用次数'" json:"elemental_orb_count"`
SpecialOrbCount int16 `gorm:"not null;default:0;comment:'平衡/暴击能量珠剩余使用次数'" json:"special_orb_count"`
IndividualGuarantee int64 `gorm:"not null;default:0;comment:'个体值保底(0=无保底)'" json:"individual_guarantee"`
NatureGuarantee int64 `gorm:"not null;default:0;comment:'性格保底(0=无保底)'" json:"nature_guarantee"`
Freed bool `gorm:"default:false;not null;comment:'是否已放生(0=未放生,1=已放生)'" json:"freed"`
FreedTime string `gorm:"comment:'放生时间'" json:"freed_time"`
CapturePlayerID uint64 `gorm:"not null;comment:'捕获者ID'" json:"capture_player_id"`
CaptureTime int64 `gorm:"not null;comment:'捕获时间(时间戳)'" json:"capture_time"`
CaptureMap int32 `gorm:"not null;comment:'捕获地图ID'" json:"capture_map"`
CaptureRect int16 `gorm:"not null;default:0;comment:'捕获区域(未知用途默认为0)'" json:"capture_rect"`
CaptureLevel int16 `gorm:"not null;default:0;comment:'捕获时的等级'" json:"capture_level"`
PetTypeID int32 `gorm:"not null;comment:'精灵类型ID/精灵图鉴ID'" json:"pet_type_id"`
IndividualValue int16 `gorm:"not null;comment:'个体值(DV)'" json:"individual_value"`
Nature int16 `gorm:"not null;comment:'性格类型'" json:"nature"`
AbilityTypeEnum int16 `gorm:"comment:'特性枚举'" json:"ability_type_enum"`
Shiny int32 `gorm:"not null;default:0;comment:'闪光ID(异色!=0非异色=0)'" json:"shiny"`
Level int16 `gorm:"not null;default:1;comment:'当前等级'" json:"level"`
CurrentExp int32 `gorm:"not null;default:0;comment:'当前等级已获得经验值'" json:"current_exp"`
CurrentHP int32 `gorm:"not null;comment:'当前生命值'" json:"current_hp"`
MaxHP int32 `gorm:"not null;comment:'实际最大生命值'" json:"max_hp"`
Attack int32 `gorm:"not null;comment:'实际攻击力'" json:"attack"`
Defense int32 `gorm:"not null;comment:'实际防御力'" json:"defense"`
SpecialAttack int32 `gorm:"not null;comment:'实际特殊攻击力'" json:"special_attack"`
SpecialDefense int32 `gorm:"not null;comment:'实际特殊防御力'" json:"special_defense"`
Speed int32 `gorm:"not null;comment:'实际速度'" json:"speed"`
EvHP int16 `gorm:"not null;default:0;comment:'生命值学习力'" json:"ev_hp"`
EvAttack int16 `gorm:"not null;default:0;comment:'攻击学习力'" json:"ev_attack"`
EvDefense int16 `gorm:"not null;default:0;comment:'防御学习力'" json:"ev_defense"`
EvSpecialAttack int16 `gorm:"not null;default:0;comment:'特殊攻击学习力'" json:"ev_special_attack"`
EvSpecialDefense int16 `gorm:"not null;default:0;comment:'特殊防御学习力'" json:"ev_special_defense"`
EvSpeed int16 `gorm:"not null;default:0;comment:'速度学习力'" json:"ev_speed"`
PetSkill []PetSkillInfo //技能组
ElementalOrbID int32 `gorm:"not null;default:0;comment:'属性能量珠ID'" json:"elemental_orb_id"`
SpecialOrbID int32 `gorm:"not null;default:0;comment:'平衡/暴击能量珠ID'" json:"special_orb_id"`
ElementalOrbCount int16 `gorm:"not null;default:0;comment:'属性能量珠剩余使用次数'" json:"elemental_orb_count"`
SpecialOrbCount int16 `gorm:"not null;default:0;comment:'平衡/暴击能量珠剩余使用次数'" json:"special_orb_count"`
IndividualGuarantee int64 `gorm:"not null;default:0;comment:'个体值保底(0=无保底)'" json:"individual_guarantee"`
NatureGuarantee int64 `gorm:"not null;default:0;comment:'性格保底(0=无保底)'" json:"nature_guarantee"`
Freed bool `gorm:"default:false;not null;comment:'是否已放生(0=未放生,1=已放生)'" json:"freed"`
FreedTime string `gorm:"comment:'放生时间'" json:"freed_time"`
}
type PetSkillInfo struct {