```
feat(fight): 调整技能效果命中逻辑与回合开始处理 - 修改了技能效果命中的判定顺序,确保暴击计算在效果添加之前执行 - 修复了回合开始时敌我双方状态结算的上下文错误 - 优化了效果缓存初始化逻辑,避免重复添加相同效果 - 增加了效果去重判断,防止完全相同的效果被重复添加 - 调整了战斗循环中结束逻辑的位置,确保广播和通道关闭正确执行 - 更新了部分日志提示信息,使其更符合实际业务含义 - 移除了部分无用代码和注释,提高
This commit is contained in:
@@ -11,16 +11,19 @@ import (
|
||||
)
|
||||
|
||||
type Input struct {
|
||||
CanChange bool //是否可以死亡切换CanChange
|
||||
CurrentPet *info.BattlePetEntity //当前精灵
|
||||
AllPet []*info.BattlePetEntity
|
||||
Player common.PlayerI
|
||||
EffectCache []Effect
|
||||
Finished bool //是否加载完成
|
||||
CanChange bool //是否可以死亡切换CanChange
|
||||
CurrentPet *info.BattlePetEntity //当前精灵
|
||||
AllPet []*info.BattlePetEntity
|
||||
Player common.PlayerI
|
||||
|
||||
Finished bool //是否加载完成
|
||||
*info.AttackValue
|
||||
FightC common.FightI
|
||||
// info.BattleActionI
|
||||
Effects []Effect //effects 实际上全局就是effect无限回合 //effects容器 技能的
|
||||
Effects []Effect //effects 实际上全局就是effect无限回合 //effects容器 技能的
|
||||
EffectCache []Effect //这里是命中前执行的容器,也就是命中前执行的所有逻辑相关,理论上一个effect被激活,就应该同时将其他的effect取消激活
|
||||
//NewEffects []Effect
|
||||
|
||||
DamageZone struct {
|
||||
Damage decimal.Decimal //伤害
|
||||
BeforeADD decimal.Decimal //攻击伤害
|
||||
@@ -60,15 +63,11 @@ func (input *Input) GenSataus() {
|
||||
|
||||
t := input.GetEffect(EffectType.Status, i)
|
||||
|
||||
if t != nil { //状态都是叠层类的
|
||||
if t != nil && t.Alive() { //状态都是叠层类的
|
||||
|
||||
input.AttackValue.Status[i] = int8(t.Duration())
|
||||
input.Status[i] = int8(t.Duration())
|
||||
|
||||
}
|
||||
// t = f.Second.GetEffect(input.EffectType.Status, i)
|
||||
// if t != nil {
|
||||
// ret.SAttack.Status[i] = int8(t.Duration()) + 1
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -87,6 +86,8 @@ func (input *Input) GenInfo() {
|
||||
func (i *Input) ResetAttackValue() {
|
||||
i.AttackValue.SkillID = 0
|
||||
i.AttackValue.IsCritical = 0
|
||||
i.AttackValue.GainHp = 0
|
||||
i.AttackValue.LostHp = 0
|
||||
|
||||
}
|
||||
|
||||
@@ -135,9 +136,26 @@ func (i *Input) GetStatusBonus() float64 {
|
||||
return maxBonus
|
||||
}
|
||||
|
||||
func (i *Input) initeffectcache() {
|
||||
i.EffectCache = make([]Effect, 0) //先把上一回合数据清空,但是应该把本身延续类效果集成过来
|
||||
|
||||
for _, v := range i.Effects {
|
||||
|
||||
if v.Alive() { //说明存活效果而且是延续类效果,将之添加到初始化列表中
|
||||
|
||||
//这里添加的效果是已经生效的效果对effect的复制,相当于技能施的效果的前置比如改命中的效果等
|
||||
i.EffectCache = append(i.EffectCache, v)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 解析并 施加effect
|
||||
func (i *Input) Parseskill(defender *Input, skill *action.SelectSkillAction) {
|
||||
i.EffectCache = make([]Effect, 0) //先把上一回合数据清空
|
||||
i.initeffectcache() //这里说明是延续的效果,每次复制出来一个新的就好了
|
||||
//i.NewEffects = make([]Effect, 0) //这里说明是新增的效果
|
||||
temparg := skill.SideEffectArgS
|
||||
|
||||
for _, v := range skill.SideEffectS {
|
||||
@@ -159,8 +177,9 @@ func (i *Input) Parseskill(defender *Input, skill *action.SelectSkillAction) {
|
||||
//i.AddEffect(t)
|
||||
// }
|
||||
//这里是临时缓存buff,后面确认命中后修改HIT状态
|
||||
|
||||
// t.Alive() //先让效果保持存活
|
||||
i.EffectCache = append(i.EffectCache, t)
|
||||
// i.NewEffects = append(i.NewEffects, t)
|
||||
}
|
||||
|
||||
temparg = temparg[args:]
|
||||
|
||||
Reference in New Issue
Block a user