fix(fight): 修复技能效果命中判断逻辑错误

修复了技能攻击中效果命中的判断条件,使用更准确的 AttackTime 字段代替
AttackValue.AttackTime。同时优化了回合开始与结束时宠物状态的还原逻辑,确
保血量与技能列表能正确恢复。此外,修正了效果叠加判断条件的取反问题,避
免不可叠加效果被错误处理。
This commit is contained in:
2025-11-14 09:35:21 +08:00
parent 6920fb99ef
commit efa7ad6f76
2 changed files with 10 additions and 3 deletions

View File

@@ -72,7 +72,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski
// attacker.AddEffects(attacker.EffectCache...) //命中再添加效果
for _, e := range attacker.EffectCache {
//这里实现应该参考本地技能是否命中,然后
e.Hit(attacker.AttackValue.AttackTime != 0) //我方效果命中
e.Hit(attacker.AttackTime != 0) //我方效果命中
}
// 扣减防御方血量
@@ -130,6 +130,8 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) {
var oldpet [2]*model.PetInfo
var oldpettype [2]int
var oldhp [2]uint32
var oldskill [2][]model.SkillInfo
oldpet[0], oldpet[1] = f.copypet(f.Our.CurrentPet.Info), f.copypet(f.Opp.CurrentPet.Info)
@@ -137,7 +139,11 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) {
fmt.Println("开始时对方最大体力值", f.Opp.CurrentPet.Info.MaxHp)
defer func() {
f.Our.CurrentPet.Info, f.Opp.CurrentPet.Info = oldpet[0], oldpet[1] //还原精灵信息
oldhp[0], oldhp[1] = f.Opp.CurrentPet.Info.Hp, f.Our.CurrentPet.Info.Hp
oldskill[0], oldskill[1] = f.Opp.CurrentPet.Info.SkillList, f.Our.CurrentPet.Info.SkillList
f.Our.CurrentPet.Info, f.Opp.CurrentPet.Info = oldpet[0], oldpet[1] //还原精灵信息
f.Opp.CurrentPet.Info.Hp, f.Our.CurrentPet.Info.Hp = oldhp[0], oldhp[1]
f.Opp.CurrentPet.Info.SkillList, f.Our.CurrentPet.Info.SkillList = oldskill[0], oldskill[1]
f.Our.CurrentPet.PType, f.Opp.CurrentPet.PType = oldpettype[0], oldpettype[1] //还原精灵属性
fmt.Println("结束时对方最大体力值", f.Opp.CurrentPet.Info.MaxHp)

View File

@@ -165,9 +165,10 @@ func (our *Input) AddEffect(in *Input, e Effect) Effect {
v.Alive() && //如果之前的效果还存活
equalInts(v.Args(), e.Args()) { //如果层数可以叠加或者是无限层数
if v.CanStack() { //说明进行了替换
if !v.CanStack() { //说明进行了替换
v.Alive(false) //不允许叠层,取消效果
e.Duration(utils.Max(e.Duration(), v.Duration()))
our.Effects = append(our.Effects, e)
return v //这里把V替换掉了
} else {
v.Stack(v.Stack() + e.Stack()) //获取到当前叠层数然后叠加