From 6368e2f2e9c6a9e12f4147628c6466a3d0373ab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Sat, 13 Dec 2025 23:52:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(room):=20=E5=A2=9E=E5=8A=A0=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E5=AE=A0=E7=89=A9=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=B9=B6=E4=BC=98=E5=8C=96=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 Controller.RoomPetInfo 方法用于获取指定用户的房间宠物详细信息, 同时修复了宠物展示时可能因空数据导致的问题。在设置房间宠物展示和 处理房间装饰时增加对 CatchTime 和 ID --- logic/controller/room_info.go | 13 ++++++++++++- logic/controller/room_set.go | 4 +++- logic/service/pet/list.go | 27 ++++++++++++++++++++++++++- logic/service/room/pet.go | 7 +++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/logic/controller/room_info.go b/logic/controller/room_info.go index 02c023cc..514b1fc9 100644 --- a/logic/controller/room_info.go +++ b/logic/controller/room_info.go @@ -36,7 +36,9 @@ func (h Controller) OnGetRoomPetShowInfo(data *room.PetRoomListInboundInfo, c *p } var pet1 pet.PetShortInfo copier.Copy(&pet1, &pet12.Data) - result.Pets = append(result.Pets, pet1) + if pet12.ID != 0 { + result.Pets = append(result.Pets, pet1) + } } @@ -57,3 +59,12 @@ func (h Controller) OnGetFitmentAll(data *room.FitmentAllInboundEmpty, c *player return } +func (h Controller) RoomPetInfo(data *room.C2S_RoomPetInfo, c *player.Player) (result *pet.RoomPetInfo, err errorcode.ErrorCode) { + r := c.Service.Pet.PetInfo_One_ohter(data.UserID, data.CatchTime) + + result = &pet.RoomPetInfo{} + copier.CopyWithOption(result, &r.Data, copier.Option{DeepCopy: true}) + result.OwnerId = data.UserID + + return +} diff --git a/logic/controller/room_set.go b/logic/controller/room_set.go index d1b6b192..0252244f 100644 --- a/logic/controller/room_set.go +++ b/logic/controller/room_set.go @@ -20,7 +20,9 @@ func (h Controller) SET_FITMENT(data *room.SET_FITMENT, c *player.Player) (resul func (h Controller) SET_Pet(data *room.C2S_PET_ROOM_SHOW, c *player.Player) (result *room.S2C_PET_ROOM_SHOW, err errorcode.ErrorCode) { var showpet []uint32 for _, v := range data.PetShowList { - showpet = append(showpet, v.CatchTime) + if v.CatchTime != 0 { + showpet = append(showpet, v.CatchTime) + } } c.Service.Room.Show(showpet) diff --git a/logic/service/pet/list.go b/logic/service/pet/list.go index 3ce565fb..d860bc11 100644 --- a/logic/service/pet/list.go +++ b/logic/service/pet/list.go @@ -1,6 +1,9 @@ package pet -import "blazing/logic/service/common" +import ( + "blazing/logic/service/common" + "blazing/modules/blazing/model" +) type GetPetListInboundEmpty struct { Head common.TomeeHeader `cmd:"2303" struc:"skip"` @@ -40,3 +43,25 @@ type PetFusionInfo struct { StarterCpTm uint32 `json:"starterCpTm" msgpack:"starterCpTm"` // 融合失败为0 CostItemFlag uint32 `json:"costItemFlag" msgpack:"costItemFlag"` // 是不是消耗掉了金豆道具 1代表消耗道具 } +type RoomPetInfo struct { + OwnerId uint32 + CatchTime uint32 + ID uint32 `fieldDesc:"精灵编号" ` + Nature uint32 `fieldDesc:"性格" ` + + // 等级(@UInt long → uint32) + Level uint32 `fieldDesc:"等级" ` + // 当前生命(@UInt long → uint32) + Hp uint32 + // * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5) + Prop [5]uint32 `fieldDesc:"属性" ` + SkillListLen uint32 `struc:"sizeof=SkillList"` + + // 技能信息:固定4条,空则赋值0(固定长度List → [4]SkillInfo,零值即符合“赋值0”) + SkillList []model.SkillInfo + // * ev:生命学习力,攻击学习力,防御学习力,特攻学习力,特防学习力,速度学习力 + Ev [6]uint32 `fieldDesc:"属性" ` + EffectInfoLen uint16 `struc:"sizeof=EffectInfo"` + // 特性列表:长度用UShort存储(变长List → []PetEffectInfo + 长度前缀规则) 第一个一定是特性 + EffectInfo []model.PetEffectInfo `fieldDesc:"特性列表, 长度在头部以UShort存储" serialize:"lengthFirst,lengthType=uint16,type=structArray"` +} diff --git a/logic/service/room/pet.go b/logic/service/room/pet.go index 90bc7403..510fd32c 100644 --- a/logic/service/room/pet.go +++ b/logic/service/room/pet.go @@ -32,3 +32,10 @@ type S2C_PET_ROOM_SHOW struct { // 数组内每个元素为 S2C_PetShowList(字段顺序:petID → catchTime) PetShowList []pet.PetShortInfo `json:"PetShowList"` } +type C2S_RoomPetInfo struct { + Head common.TomeeHeader `cmd:"2325" struc:"skip"` //玩家登录 + // UserID 跟随精灵的主人用户ID + UserID uint32 `json:"userID"` // C# uint → Go uint32,严格匹配32位无符号整数 + // CatchTime 精灵的捕获时间(Unix时间戳/前端自定义时间格式) + CatchTime uint32 `json:"catchTime"` +}