Files
bl/logic/service/fight/input/interface.go
昔念 1fa1ae848d
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
```
feat(fight): 实现技能PP消耗Hook机制并优化效果处理

- 在Effect475中添加子效果时通过Ctx().Our.AddEffect正确添加效果
- 删除已废弃的Effect407、Effect440和Effect412效果类型
- 在fightc.go中实现技能使用后的PP消耗Hook机制,支持效果修改PP消耗数量
- 添加HookPP接口方法用于处理技能使用的PP消耗逻辑
- 在SkillInfo中添加Use方法用于实际消耗PP值
```
2026-03-09 23:44:09 +08:00

82 lines
3.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 input
import (
"blazing/logic/service/common"
"blazing/logic/service/fight/action"
"blazing/logic/service/fight/info"
"blazing/modules/player/model"
"github.com/alpacahq/alpacadecimal"
)
type Effect interface {
Fight_Start() bool //战斗开始 首发也写这里吧,别)单独写了
TurnStart(fattack, sattack *action.SelectSkillAction) //回合开始,注入特性
ComparePre(fattack, sattack *action.SelectSkillAction) bool //比较前对优先级的修改
//技能命中前的返回值代表是否可以出手 ,对命中本身的修改应该是对上下文本身的修改
//对技能修改 行动开始前,注入视为等参数在这里实现
ActionStartEx(fattack, sattack *action.SelectSkillAction) bool //比较前对优先级的修改
ActionStart(fattack, sattack *action.SelectSkillAction) bool //比较前对优先级的修改
SkillHit() bool //这是是命中后的对技能的修改,比如变威力
SkillHit_ex() bool // 技能命中前触发//预处理受击技能 被攻击方效果,比如受击时无效技能这样
CalculatePre() bool //视为 无视效果,相当于这里对敌方的修改
OnSkill() bool // 触发on miss onhit
//Skill_Can() bool //使用技能 可以取消用技能节点 技能无效节点锁定伤害加上
DamageAdd(*info.DamageZone) bool // 攻击前触发 ,这时候就是+区间
Damage_Mul(*info.DamageZone) bool // 攻击触发
DamageFloor(*info.DamageZone) bool // 保底伤害
DamageDivEx(*info.DamageZone) bool //受击前触发 这时候就是百分比减伤区间
DamageSubEx(*info.DamageZone) bool // 受击触发 这时候就是点数减伤
DamageLock(*info.DamageZone) bool //锁定伤害
DamageLockEx(*info.DamageZone) bool //被动方锁定伤害
Damage_Shield(*info.DamageZone) bool // 护盾值变化时触发
Skill_Use() bool //技能使用节点
Skill_Use_ex() bool //技能PP减少节点
Action_end() bool
Action_end_ex() bool
//OnDefeat(opp *Input) bool // 精灵被击败时触发
// 首发其实就是切换的精灵为nil
SwitchIn(in *Input) bool // 精灵出战 / 上场时触发
SwitchOut(in *Input) bool // 精灵下场时触发
//OnSwitchOut() bool // 精灵下场时触发
// OnOwnerSwitchIn() bool // 所属玩家精灵出战时触发
// OnOwnerSwitchOut() bool // 所属玩家精灵下场时触发
HookPP(count *int) bool
TurnEnd() //回合结束计算
HookAction() bool //出手前的hook参数返回false阻止继续出手
//PreBattleEnd() bool //战斗结束前
OnBattleEnd() bool //战斗结束
PropBefer(in *Input, prop, level int8) bool //锁定属性
//效果添加时候应该区分主动方和被动方来确认是主动添加的还是受击添加的
//boss是进入防守方才被添加抵御异常状态效果的boss免疫的实质是给挑战者挂载一个阻止添加给对手的debuff
EFFect_Befer(in *Input, effEffect Effect) bool //属性免疫
SetArgs(input *Input, param ...int)
Args() []alpacadecimal.Decimal
// 治疗相关触发
Heal_Pre(action.BattleActionI, *int) bool // 治疗前触发 回复翻倍效果
//Heal(action.BattleActionI) bool // 治疗生效时触发 药剂反噬
Ctx() *Ctx
//回合数,然后次数另外维护
Duration(...int) int
//Hit(...bool) bool
Alive(...bool) bool
IsFirst(...bool) bool
Stack(...int) int
CanStack(...bool) bool
//Owner(...bool) bool // 技能属主,比如寄生和镇魂歌,属主是对方)
GetInput() *Input
ID(...EffectIDCombiner) EffectIDCombiner
//GetSkill() *BattleSkillEntity //获得技能ctx
}
type RuleI interface {
SetArgs(param ...int)
Exec(common.FightI, *model.FightOverInfo) bool
}