diff --git a/logic/controller/getserver.go b/logic/controller/getserver.go index a01fc41f..8948ef0c 100644 --- a/logic/controller/getserver.go +++ b/logic/controller/getserver.go @@ -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方法 diff --git a/logic/controller/login.go b/logic/controller/login.go index e5eb14cc..a4a720f1 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -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) //先踢人 diff --git a/logic/controller/maphot.go b/logic/controller/maphot.go index 9a3ae467..323db7fc 100644 --- a/logic/controller/maphot.go +++ b/logic/controller/maphot.go @@ -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), } diff --git a/logic/service/server/CommendSvrInfo.go b/logic/service/CommendSvr/CommendSvrInfo.go similarity index 92% rename from logic/service/server/CommendSvrInfo.go rename to logic/service/CommendSvr/CommendSvrInfo.go index 08b08175..6374668a 100644 --- a/logic/service/server/CommendSvrInfo.go +++ b/logic/service/CommendSvr/CommendSvrInfo.go @@ -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 +} diff --git a/logic/service/maps/maphot.go b/logic/service/MapHot/maphot.go similarity index 61% rename from logic/service/maps/maphot.go rename to logic/service/MapHot/maphot.go index 6f869a0c..cb1430fd 100644 --- a/logic/service/maps/maphot.go +++ b/logic/service/MapHot/maphot.go @@ -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"` // 热度信息列表 +} diff --git a/logic/service/login/LoginSidInfo.go b/logic/service/login/LoginSidInfo.go index a6ee1c47..f6bc1118 100644 --- a/logic/service/login/LoginSidInfo.go +++ b/logic/service/login/LoginSidInfo.go @@ -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) diff --git a/logic/service/login/LoginUserInfo.go b/logic/service/login/LoginUserInfo.go new file mode 100644 index 00000000..5c47a67c --- /dev/null +++ b/logic/service/login/LoginUserInfo.go @@ -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 +} diff --git a/logic/service/login/PeopleItemInfo.go b/logic/service/login/PeopleItemInfo.go new file mode 100644 index 00000000..35b47d00 --- /dev/null +++ b/logic/service/login/PeopleItemInfo.go @@ -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保持一致 +} diff --git a/logic/service/login/PetInfo.go b/logic/service/login/PetInfo.go new file mode 100644 index 00000000..dd2c2e61 --- /dev/null +++ b/logic/service/login/PetInfo.go @@ -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指定) +} diff --git a/logic/service/login/Point.go b/logic/service/login/Point.go new file mode 100644 index 00000000..31f44387 --- /dev/null +++ b/logic/service/login/Point.go @@ -0,0 +1,6 @@ +package login + +type Pos struct { + X uint32 `struc:"uint32"` + Y uint32 `struc:"uint32"` +} diff --git a/logic/service/login/TeamInfo.go b/logic/service/login/TeamInfo.go new file mode 100644 index 00000000..549fd9cf --- /dev/null +++ b/logic/service/login/TeamInfo.go @@ -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 +} diff --git a/logic/service/login/TeamPKInfo.go b/logic/service/login/TeamPKInfo.go new file mode 100644 index 00000000..a1e91f14 --- /dev/null +++ b/logic/service/login/TeamPKInfo.go @@ -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 +} diff --git a/modules/blazing/model/pet.go b/modules/blazing/model/pet.go index b61347a1..2c4f9cf1 100644 --- a/modules/blazing/model/pet.go +++ b/modules/blazing/model/pet.go @@ -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 {