Files
bl/logic/service/fight/action/BattleAction.go
昔念 d4781bf4a4 feat(socket): 添加全局 panic 恢复机制
refactor(socket): 调整 defer recover 位置以优化错误捕获逻辑

feat(logic): 为服务器启动函数添加 defer recover
2025-10-10 00:40:32 +08:00

136 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package action
import (
"blazing/logic/service/common"
"blazing/logic/service/fight/info"
"time"
"github.com/tnnmigga/enum"
)
// EnumPlayerOperation 玩家操作枚举类型
type EnumPlayerOperation int
// 定义读秒倒计时期间玩家可执行的操作枚举
var PlayerOperations = enum.New[struct {
//SystemGiveUp EnumPlayerOperation `enum:"-1"` // 系统选择放弃出手(比如没有PP)
//系统放弃出手就是SKILL ID=0
SelectSkill EnumPlayerOperation `enum:"0"` // 选择技能-6到6
ActiveSwitch EnumPlayerOperation `enum:"2"` // 主动切换(中切)
UsePotion EnumPlayerOperation `enum:"3"` // 使用药剂(捕捉、逃跑等)
Escape EnumPlayerOperation `enum:"4"` // 逃跑(等级最高,以及掉线)
PlayerOffline EnumPlayerOperation `enum:"5"` // 玩家掉线
// BeExpelledSwitch EnumPlayerOperation `enum:"6"` // 被驱逐切换
}]()
// BattleActionI 战斗动作接口
type BattleActionI interface {
GetPlayerID() uint32
Priority() int // 优先级
}
// SelectSkillAction 选择技能的战斗动作
type SelectSkillAction struct {
ID uint32 //技能ID
BaseAction
Skill *info.SkillEntity // 使用的技能
//PetInfo *info.BattlePetEntity // 使用技能的宠物
Attack info.AttackValue
}
// Priority 返回动作优先级
func (s *SelectSkillAction) Priority() int {
return int(PlayerOperations.SelectSkill)
}
type BaseAction struct {
PlayerID uint32 // 玩家ID
}
func NewBaseAction(t uint32) BaseAction {
return BaseAction{
PlayerID: t,
}
}
func (a *BaseAction) GetPlayerID() uint32 {
return a.PlayerID
// fmt.Printf("玩家[%d]主动切换宠物:从%s切换到%s原因%s\n",
// // a.PlayerID, a.CurrentPet.Name, a.TargetPet.Name, a.SwitchReason)
}
// ActiveSwitchAction 主动切换宠物的战斗动作
type ActiveSwitchAction struct {
BaseAction
Reason info.ChangePetInfo
// CurrentPet BattlePetEntity // 当前在场宠物
// TargetPet BattlePetEntity // 要切换上场的宠物
// SwitchReason string // 切换原因
}
// Priority 返回动作优先级
func (a *ActiveSwitchAction) Priority() int {
return int(PlayerOperations.ActiveSwitch)
}
// UsePotionAction 使用药剂的战斗动作
type UseItemAction struct {
BaseAction
ItemID uint32 // 药剂ID
TargetPet info.BattlePetEntity // 药剂作用目标宠物
}
// Priority 返回动作优先级
func (u *UseItemAction) Priority() int {
return int(PlayerOperations.UsePotion)
}
// EscapeAction 逃跑的战斗动作
type EscapeAction struct {
BaseAction
Reason info.FightOverInfo
Our common.PlayerI
Opp common.PlayerI
}
func (e *EscapeAction) GetInfo() info.FightOverInfo {
return e.Reason
}
// Priority 返回动作优先级
func (e *EscapeAction) Priority() int {
return int(PlayerOperations.Escape)
}
// EscapeAction 逃跑的战斗动作
type OverTimeAction struct {
BaseAction
Reason info.FightOverInfo
Our common.PlayerI
Opp common.PlayerI
}
func (e *OverTimeAction) GetInfo() info.FightOverInfo {
return e.Reason
}
// Priority 返回动作优先级
func (e *OverTimeAction) Priority() int {
return int(PlayerOperations.PlayerOffline)
}
// PlayerOfflineAction 玩家掉线的战斗动作
type PlayerOfflineAction struct {
BaseAction
OfflineTime time.Time // 掉线时间
Reason info.FightOverInfo
}
// Priority 返回动作优先级
func (p *PlayerOfflineAction) Priority() int {
return int(PlayerOperations.PlayerOffline)
}