``` refactor(fight): 重构状态效果初始化逻辑,统一使用InitEffect方法并内置随机持续回合
This commit is contained in:
@@ -29,15 +29,11 @@ func (e *NewSel6) Action_end_ex() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
duration := int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合
|
||||
duration++
|
||||
// 5. 获取状态效果实例并设置参数
|
||||
statusEffect := input.Geteffect(input.EffectType.Status, int(e.Args()[0].IntPart()))
|
||||
statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Args()[0].IntPart()))
|
||||
if statusEffect == nil {
|
||||
return true
|
||||
}
|
||||
statusEffect.Duration(duration)
|
||||
statusEffect.SetArgs(e.Ctx().Our) // 目标为对手
|
||||
|
||||
// 6. 给对手添加状态
|
||||
//然后这里是被动添加,所以对方不能消除
|
||||
|
||||
@@ -32,13 +32,11 @@ func (e *NewSel66) OnSkill() bool {
|
||||
duration++
|
||||
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, int(e.Args()[1].IntPart()))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Args()[1].IntPart()))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -32,13 +32,11 @@ func (e *NewSel67) OnSkill() bool {
|
||||
duration++
|
||||
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, int(e.Args()[1].IntPart()))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Args()[1].IntPart()))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -150,10 +150,9 @@ func (e *EffectDefeatTrigger) triggerNextEnemyStatusOnDefeat(at info.AttackValue
|
||||
// 简化示例:直接处理状态施加
|
||||
for i, v := range at.Status {
|
||||
if v > 0 {
|
||||
nv := input.Geteffect(input.EffectType.Status, int(i))
|
||||
nv := e.Ctx().Our.InitEffect(input.EffectType.Status, int(i))
|
||||
if nv != nil {
|
||||
nv.Duration(int(e.Input.FightC.GetRand().Int31n(2)))
|
||||
nv.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, nv)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,16 +64,11 @@ func (e *EffectPhysicalAttackAddStatus) Skill_Use_ex() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// 4. 计算持续回合(默认2~3回合,支持通过参数指定)
|
||||
duration := e.getDuration()
|
||||
|
||||
// 5. 获取状态效果实例并设置参数
|
||||
statusEffect := input.Geteffect(input.EffectType.Status, int(e.targetStatus))
|
||||
statusEffect := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.targetStatus))
|
||||
if statusEffect == nil {
|
||||
return true
|
||||
}
|
||||
statusEffect.Duration(duration)
|
||||
statusEffect.SetArgs(e.Ctx().Our) // 目标为对手
|
||||
|
||||
// 6. 给对手添加状态
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEffect)
|
||||
@@ -85,10 +80,3 @@ func (e *EffectPhysicalAttackAddStatus) SetArgs(t *input.Input, a ...int) {
|
||||
e.EffectNode.SetArgs(t, a...)
|
||||
e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0])
|
||||
}
|
||||
|
||||
// 计算持续回合(封装为独立方法,增强可读性)
|
||||
func (e *EffectPhysicalAttackAddStatus) getDuration() int {
|
||||
|
||||
// 默认随机2~3回合(Int31n(2)返回0/1,+2后为2/3)
|
||||
return int(e.Input.FightC.GetRand().Int31n(2)) + 2
|
||||
}
|
||||
|
||||
@@ -15,10 +15,11 @@ type Effect1 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func initskill(id int, e input.Effect) {
|
||||
input.InitEffect(input.EffectType.Skill, id, e)
|
||||
}
|
||||
func init() {
|
||||
ret := &Effect1{}
|
||||
|
||||
input.InitEffect(input.EffectType.Skill, 1, ret)
|
||||
initskill(1, &Effect1{})
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -68,13 +68,11 @@ func (e *Effect104) OnSkill() bool {
|
||||
duration++
|
||||
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, int(e.Status))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Status))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -32,16 +32,14 @@ func (e *Effect13) OnSkill() bool {
|
||||
if gconv.Int(e.Ctx().Opp.CurrentPet.PetInfo.Type) == int(element.ElementTypeGrass) {
|
||||
return true
|
||||
}
|
||||
duration := e.EffectNode.SideEffectArgs[0] - 1
|
||||
//duration++
|
||||
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, int(info.PetStatus.DrainedHP))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.DrainedHP))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
eff.Duration(e.EffectNode.SideEffectArgs[0] - 1)
|
||||
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our)
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -38,13 +38,11 @@ func (e *Effect1605) OnSkill() bool {
|
||||
duration++
|
||||
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, int(e.SideEffectArgs[1]))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.SideEffectArgs[1]))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ func (e *Effect20) OnSkill() bool {
|
||||
if !ok {
|
||||
return true
|
||||
}
|
||||
t := input.Geteffect(input.EffectType.Status, int(info.PetStatus.Tired))
|
||||
t := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.Tired))
|
||||
t.Duration(e.SideEffectArgs[1])
|
||||
e.Ctx().Our.AddEffect(e.Ctx().Our, t)
|
||||
return true
|
||||
|
||||
@@ -10,10 +10,9 @@ import (
|
||||
// 注册
|
||||
// -----------------------------------------------------------
|
||||
func init() {
|
||||
// 自身能力变化
|
||||
input.InitEffect(input.EffectType.Skill, 4, newEffectStat(false))
|
||||
// 对方能力变化
|
||||
input.InitEffect(input.EffectType.Skill, 5, newEffectStat(true))
|
||||
initskill(4, newEffectStat(false))
|
||||
initskill(5, newEffectStat(true))
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
|
||||
@@ -49,15 +49,11 @@ func (e *EffectRandomStatus) OnSkill() bool {
|
||||
}
|
||||
|
||||
// 获取状态效果并设置参数
|
||||
eff := input.Geteffect(input.EffectType.Status, int(targetStatus))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(targetStatus))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
// 持续时间:随机2-3回合(与原逻辑一致)
|
||||
duration := int(e.Input.FightC.GetRand().Int31n(2)) + 2
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our)
|
||||
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
|
||||
return true
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/common/utils"
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
@@ -26,8 +25,8 @@ type Effect8 struct {
|
||||
// DamageFloor 伤害落实前触发,限制最大伤害
|
||||
func (e *Effect8) DamageFloor(t *info.DamageZone) bool {
|
||||
if t.Type == info.DamageType.Red {
|
||||
t.Damage = alpacadecimal.NewFromInt(utils.Min(t.Damage.IntPart(),
|
||||
int64(e.Ctx().Opp.CurrentPet.Info.Hp)-1))
|
||||
|
||||
t.Damage = alpacadecimal.Min(t.Damage, e.Ctx().Opp.CurrentPet.GetHP().Sub(alpacadecimal.NewFromInt(1)))
|
||||
e.max = t.Damage
|
||||
|
||||
}
|
||||
|
||||
@@ -136,13 +136,11 @@ func (e *Flammable) Skill_Use_ex() bool {
|
||||
return true
|
||||
}
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, info.PetStatus.Burned)
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(info.PetStatus.Burned))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
duration := int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
|
||||
e.Ctx().Our.AddEffect(e.Ctx().Our, eff)
|
||||
|
||||
return true
|
||||
|
||||
@@ -63,26 +63,22 @@ func (e *Effect10) OnSkill() bool {
|
||||
if !success {
|
||||
return true
|
||||
}
|
||||
var duration int
|
||||
if len(e.EffectNode.SideEffectArgs) > 1 {
|
||||
// 持续回合
|
||||
duration = e.EffectNode.SideEffectArgs[1]
|
||||
}
|
||||
|
||||
// 持续回合
|
||||
|
||||
if duration == 0 {
|
||||
duration = int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合
|
||||
duration++
|
||||
}
|
||||
|
||||
// 获取状态效果
|
||||
eff := input.Geteffect(input.EffectType.Status, int(e.Status))
|
||||
eff := e.Ctx().Our.InitEffect(input.EffectType.Status, int(e.Status))
|
||||
if eff == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
eff.Duration(duration)
|
||||
eff.SetArgs(e.Ctx().Our) //输入参数是对方
|
||||
if len(e.EffectNode.SideEffectArgs) > 1 {
|
||||
// 持续回合
|
||||
|
||||
eff.Duration(e.EffectNode.SideEffectArgs[1])
|
||||
|
||||
}
|
||||
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, eff)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/alpacahq/alpacadecimal"
|
||||
"github.com/brunoga/deep"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/gogf/gf/v2/util/grand"
|
||||
"github.com/tnnmigga/enum"
|
||||
)
|
||||
|
||||
@@ -72,6 +73,7 @@ func Geteffect[T int | byte | uint16](etype EnumEffectType, id T) Effect {
|
||||
|
||||
if etype == EffectType.Status {
|
||||
eff.CanStack(true) //状态类不能被覆盖,只能无限叠加
|
||||
eff.Duration(grand.N(1, 2))
|
||||
|
||||
}
|
||||
|
||||
@@ -80,6 +82,12 @@ func Geteffect[T int | byte | uint16](etype EnumEffectType, id T) Effect {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (our *Input) InitEffect(etype EnumEffectType, id int) Effect {
|
||||
ret := Geteffect(etype, id)
|
||||
ret.SetArgs(our) //输入参数是对方
|
||||
return ret
|
||||
|
||||
}
|
||||
|
||||
// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5)
|
||||
// 是否需要真实提升
|
||||
|
||||
Reference in New Issue
Block a user