Files
bl/logic/service/fight/battle/node/node.go

151 lines
4.8 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 node
import (
"context"
"blazing/logic/service/fight/info"
)
type Effect interface {
PreBattleStart() bool //战斗开始前
OnBattleStart() bool //战斗开始
PreTurnStart() bool //回合开始前
OnTurnStart() bool //回合开始
PreActive() bool //效果生效前
OnActive() bool //效果生效
BeforeUseSkillCheck() bool //使用技能前
AfterUseSkillCheck() bool //使用技能后
SkillUseEnd() bool //技能使用结束
BeforeMultiHit() bool //多段攻击前
BeforeHit() bool //命中前
OnCritPreDamage() bool //暴击判定成功且伤害计算前触发
PreDamage() bool // 技能伤害计算前触发(增伤 / 减伤等)
OnBeforeCalculateDamage() bool // 最终伤害计算前触发
OnDamage() bool // 造成伤害时触发
Shield() bool // 护盾值变化时触发
PostDamage() bool // 伤害结算后触发(血量扣除后)
OnCritPostDamage() bool // 暴击伤害结算后触发
OnHit() bool // 技能命中时触发
OnMiss() bool // 技能未命中时触发
AfterAttacked() bool // 被攻击后触发(受击判定)
OnDefeat() bool // 精灵被击败时触发
// BeforeTransform EnumEffectTrigger enum:"19" // 变形 / 进化前触发
// OnTransform EnumEffectTrigger enum:"20" // 精灵变形 / 进化时触发
// AfterTransform EnumEffectTrigger enum:"21" // 变形 / 进化后触发
// OnTransformEnd EnumEffectTrigger enum:"22" // 变形 / 进化结束时触发
PreTurnEnd() bool // 回合结束前
TurnEnd() bool // 回合结束
// 印记Mark相关触发
OnBeforeAddMark() bool // 添加印记前触发
OnAnyMarkAdded() bool // 任何印记添加时触发
OnMarkCreated() bool // 印记创建时触发
OnMarkDurationEnd() bool // 印记持续回合结束时触发
OnRemoveMark() bool // 移除印记时触发
OnMarkDestroy() bool // 印记销毁时触发
// 堆叠Stack相关触发
OnStackBefore() bool // 堆叠效果前触发
OnStack() bool // 堆叠效果触发
OnBeforeConsumeStack() bool // 消耗堆叠前触发
OnConsumeStack() bool // 消耗堆叠时触发
// 治疗相关触发
OnBeforeHeal() bool // 治疗前触发
OnHeal() bool // 治疗生效时触发
// // 怒气Rage相关触发
// BeforeRageGain EnumEffectTrigger enum:"37" // 增怒前触发
// OnRageGain EnumEffectTrigger enum:"38" // 增怒时触发
// BeforeRageLoss EnumEffectTrigger enum:"39" // 减怒前触发
// OnRageLoss EnumEffectTrigger enum:"40" // 减怒时触发
// 精灵切换相关触发
OnSwitchIn() bool // 精灵出战 / 上场时触发
OnSwitchOut() bool // 精灵下场时触发
OnOwnerSwitchIn() bool // 所属玩家精灵出战时触发
OnOwnerSwitchOut() bool // 所属玩家精灵下场时触发
PreBattleEnd() bool //战斗结束前
OnBattleEnd() bool //战斗结束
Duration(int) int
ID() int
Stack(int) int
MaxStack() int
}
// 检查,激活,延后
// /基础节点
type EffectNode struct {
//Turn int // 当前回合数 ,回合数其实从战斗的上下文中获取
//本质上ctx还要传入战斗双方数据来判断是否是本精灵切换
ctx context.Context //节点上下文
duration int // 默认为1 持续回合/次0 = 即时生效,>0 = 回合数 ,负数是永久)
stacks int // 当前层数
paramSize int
maxStack int // 最大叠加层数 ,正常都是不允许叠加的,除了衰弱特殊效果
SideEffectArgs []int // 附加效果参数
//LifeType EnumLifeType //回合效果 是否可持续 继承到下一直精灵 ,这个用重写事件来实现
// Parent string // 上下文来源(比如 "Skill"、"Buff"、"Passive"
// Trigger node.EnumEffectTrigger // 当前触发的节点
// Container *EffectContainer // 效果容器(通常挂在 Actor 身上)
// Effect *Effect // 当前正在执行的 Effect
// Available bool // 是否可用
// Success bool // 是否执行成功
// Done bool // 是否中止后续执行
}
func (this *EffectNode) ID() int {
return 0
}
func (this *EffectNode) Stack(t int) int {
if t != 0 {
this.stacks = t
}
return this.stacks
}
func (this *EffectNode) MaxStack() int {
return this.maxStack
}
func (this *EffectNode) Duration(t int) int {
return this.duration
}
func (this *EffectNode) SetArgs(args []int) {
this.SideEffectArgs = args
}
func (this *EffectNode) ParamSize(t int) int {
if t != 0 {
this.paramSize = t
}
return this.paramSize
}
func (this *EffectNode) GetSkill(t int) *info.BattleSkillEntity {
pet, _ := this.ctx.Value(info.BattleSkillEntityCtx).(*info.BattleSkillEntity)
return pet
}