feat(fight): 实现主动切换宠物逻辑并优化相关结构体字段

- 在 `ActiveSwitchAction` 中新增 `Cid` 字段用于标识要切换的宠物 ID
- 调整 `ChangePet` 方法逻辑,移除旧有输入处理,改为在 loop 中统一处理
- 更新 `collectPlayerActions` 方法以正确设置当前宠物及发送指令
- 优化 `PetInfo` 结构体字段标签,去除冗余描述,并重命名部分字段提升可读性
- 增加 `ExtSkin` 字段支持记录可用皮肤信息
- 移除玩家信息中的 `LastResetTime` 注释字段
```
This commit is contained in:
2025-12-11 12:16:32 +08:00
parent 49b9e938f5
commit 5b804d07db
5 changed files with 12 additions and 13 deletions

View File

@@ -62,13 +62,9 @@ func (f *FightC) ChangePet(c common.PlayerI, id uint32) {
//todo 待实现无法切精灵的情况 //todo 待实现无法切精灵的情况
ret := &action.ActiveSwitchAction{ ret := &action.ActiveSwitchAction{
BaseAction: action.NewBaseAction(c.GetInfo().UserID), BaseAction: action.NewBaseAction(c.GetInfo().UserID),
Cid: id,
} }
selfinput := f.GetInputByPlayer(c, false)
selfinput.CurrentPet, ret.Reason = selfinput.GetPet(id)
c.SendPackCmd(2407, &ret.Reason)
f.actionChan <- ret f.actionChan <- ret
} }

View File

@@ -61,6 +61,7 @@ func (a *BaseAction) GetPlayerID() uint32 {
// ActiveSwitchAction 主动切换宠物的战斗动作 // ActiveSwitchAction 主动切换宠物的战斗动作
type ActiveSwitchAction struct { type ActiveSwitchAction struct {
BaseAction BaseAction
Cid uint32
Reason info.ChangePetInfo Reason info.ChangePetInfo
// CurrentPet BattlePetEntity // 当前在场宠物 // CurrentPet BattlePetEntity // 当前在场宠物

View File

@@ -151,6 +151,8 @@ func (f *FightC) collectPlayerActions(ourID, oppID uint32) map[uint32]action.Bat
} }
selfinput.CurrentPet, ret.Reason = selfinput.GetPet(ret.Cid)
selfinput.Player.SendPackCmd(2407, &ret.Reason)
InitAttackValue := *selfinput.AttackValue InitAttackValue := *selfinput.AttackValue
oldpet := selfinput.CurrentPet oldpet := selfinput.CurrentPet
f.Switch[selfinput.UserID] = ret f.Switch[selfinput.UserID] = ret

View File

@@ -64,16 +64,16 @@ type PetInfo struct {
Level uint32 `fieldDesc:"等级" ` Level uint32 `fieldDesc:"等级" `
// 当前等级已获得经验(@UInt long → uint32 // 当前等级已获得经验(@UInt long → uint32
Exp uint32 `fieldDesc:"当前等级已经获得的经验 2538" ` Exp uint32
// 当前等级所需经验(@UInt long → uint32 // 当前等级所需经验(@UInt long → uint32
LvExp uint32 `fieldDesc:"当前等级所需的经验" ` LvExp uint32
// 升到下一级的经验(@UInt long → uint32 // 升到下一级的经验(@UInt long → uint32
NextLvExp uint32 `fieldDesc:"升到下一级的经验" ` NextLvExp uint32
// 当前生命(@UInt long → uint32 // 当前生命(@UInt long → uint32
Hp uint32 `fieldDesc:"当前生命" ` Hp uint32
// 最大生命(@UInt long → uint32 // 最大生命(@UInt long → uint32
MaxHp uint32 `fieldDesc:"最大生命" ` MaxHp uint32 `fieldDesc:"最大生命" `
@@ -108,12 +108,12 @@ type PetInfo struct {
SkinID uint32 `fieldDesc:"皮肤id默认为0" ` SkinID uint32 `fieldDesc:"皮肤id默认为0" `
// 是否闪光(@UInt long → uint320=否1=是) // 是否闪光(@UInt long → uint320=否1=是)
ShinyLen uint32 `struc:"sizeof=Shiny"` ShinyLen uint32 `json:"ShinyLen,omitempty" struc:"sizeof=ShinyInfo"`
Shiny []GlowFilter ShinyInfo []GlowFilter `json:"ShinyInfo,omitempty"`
//时间轮转然后effect根据type同时只共存一个特性是1 特质是1柱子是两种魂印是一个然后异色字段然后特训技能字段 //时间轮转然后effect根据type同时只共存一个特性是1 特质是1柱子是两种魂印是一个然后异色字段然后特训技能字段
ExtSKill []uint32 `struc:"skip"` //特训技能 ExtSKill []uint32 `struc:"skip"` //特训技能
ExtSkin []uint32 `struc:"skip"` //可用皮肤
} }
// 定义常量,提升可维护性(避免魔法数字) // 定义常量,提升可维护性(避免魔法数字)

View File

@@ -112,7 +112,7 @@ func (m *PlayerInfo) GetTask(i int) TaskStatus {
type PlayerInfo struct { type PlayerInfo struct {
ExpPool uint32 `struc:"skip" json:"exp_pool"` // 累计经验池 ExpPool uint32 `struc:"skip" json:"exp_pool"` // 累计经验池
//LastResetTime time.Time `struc:"skip" json:"last_reset_time"` // 重置时间,比如电池和每日任务
OnlineTime uint32 `struc:"skip" json:"online_time"` //在线分钟数 OnlineTime uint32 `struc:"skip" json:"online_time"` //在线分钟数
// OutInfo 字段 // OutInfo 字段
UserID uint32 `struc:"uint32" json:"user_id"` // 米米号 通过sid拿到 UserID uint32 `struc:"uint32" json:"user_id"` // 米米号 通过sid拿到