From 9e344768b780eb38dbbbcf4d02fd6d2525501ef1 Mon Sep 17 00:00:00 2001 From: Vitaliy Vorobets Date: Mon, 20 Feb 2023 21:21:40 +0200 Subject: [PATCH] fix the attack speed buff for some characters (#1296) --- internal/characters/cyno/cons.go | 10 ++++++---- internal/characters/diluc/diluc.go | 11 ++++++----- internal/characters/diluc/skill.go | 25 ++++++++++++++++++++----- internal/characters/rosaria/cons.go | 17 +++++++++++++++-- internal/characters/xinyan/cons.go | 11 ++++++++--- 5 files changed, 55 insertions(+), 19 deletions(-) diff --git a/internal/characters/cyno/cons.go b/internal/characters/cyno/cons.go index 3f7d6cf76..f8ecfccc6 100644 --- a/internal/characters/cyno/cons.go +++ b/internal/characters/cyno/cons.go @@ -1,6 +1,7 @@ package cyno import ( + "github.com/genshinsim/gcsim/pkg/core/action" "github.com/genshinsim/gcsim/pkg/core/attributes" "github.com/genshinsim/gcsim/pkg/core/combat" "github.com/genshinsim/gcsim/pkg/core/event" @@ -23,10 +24,11 @@ const ( func (c *char) c1() { m := make([]float64, attributes.EndStatType) m[attributes.AtkSpd] = 0.2 - c.AddAttackMod(character.AttackMod{ - Base: modifier.NewBaseWithHitlag(c1Key, 600), // 10s - Amount: func(atk *combat.AttackEvent, t combat.Target) ([]float64, bool) { - if atk.Info.AttackTag != combat.AttackTagNormal { + c.AddStatMod(character.StatMod{ + Base: modifier.NewBaseWithHitlag(c1Key, 600), // 10s + AffectedStat: attributes.AtkSpd, + Amount: func() ([]float64, bool) { + if c.Core.Player.CurrentState() != action.NormalAttackState { return nil, false } return m, true diff --git a/internal/characters/diluc/diluc.go b/internal/characters/diluc/diluc.go index 51373c9ab..46367da77 100644 --- a/internal/characters/diluc/diluc.go +++ b/internal/characters/diluc/diluc.go @@ -17,12 +17,13 @@ func init() { type char struct { *tmpl.Character - eCounter int - a4buff []float64 - c2buff []float64 - c2stack int - c4buff []float64 + eCounter int + a4buff []float64 + c2buff []float64 + c2stack int + c4buff []float64 savedNormalCounter int + c6Count int } const eWindowKey = "diluc-e-window" diff --git a/internal/characters/diluc/skill.go b/internal/characters/diluc/skill.go index 959b2986a..2ad7f9514 100644 --- a/internal/characters/diluc/skill.go +++ b/internal/characters/diluc/skill.go @@ -59,23 +59,38 @@ func (c *char) Skill(p map[string]int) action.ActionInfo { // C6: After casting Searing Onslaught, the next 2 Normal Attacks within the // next 6s will have their DMG and ATK SPD increased by 30%. if c.Base.Cons >= 6 { - count := 0 + c.c6Count = 0 m := make([]float64, attributes.EndStatType) m[attributes.DmgP] = 0.3 - m[attributes.AtkSpd] = 0.3 c.AddAttackMod(character.AttackMod{ - Base: modifier.NewBaseWithHitlag("diluc-c6", 360), + Base: modifier.NewBaseWithHitlag("diluc-c6-dmg", 360), Amount: func(atk *combat.AttackEvent, t combat.Target) ([]float64, bool) { if atk.Info.AttackTag != combat.AttackTagNormal { return nil, false } - if count > 1 { + if c.c6Count > 1 { return nil, false } - count++ + c.c6Count++ return m, true }, }) + + mAtkSpd := make([]float64, attributes.EndStatType) + mAtkSpd[attributes.AtkSpd] = 0.3 + c.AddStatMod(character.StatMod{ + Base: modifier.NewBaseWithHitlag("diluc-c6-speed", 360), + AffectedStat: attributes.AtkSpd, + Amount: func() ([]float64, bool) { + if c.Core.Player.CurrentState() != action.NormalAttackState { + return nil, false + } + if c.c6Count > 1 { + return nil, false + } + return mAtkSpd, true + }, + }) } hitmark := skillHitmarks[c.eCounter] diff --git a/internal/characters/rosaria/cons.go b/internal/characters/rosaria/cons.go index 3d16acf26..372012714 100644 --- a/internal/characters/rosaria/cons.go +++ b/internal/characters/rosaria/cons.go @@ -1,6 +1,7 @@ package rosaria import ( + "github.com/genshinsim/gcsim/pkg/core/action" "github.com/genshinsim/gcsim/pkg/core/attributes" "github.com/genshinsim/gcsim/pkg/core/combat" "github.com/genshinsim/gcsim/pkg/core/player/character" @@ -28,10 +29,9 @@ func (c *char) makeC1CB() combat.AttackCBFunc { } m := make([]float64, attributes.EndStatType) - m[attributes.AtkSpd] = 0.1 m[attributes.DmgP] = 0.1 c.AddAttackMod(character.AttackMod{ - Base: modifier.NewBaseWithHitlag("rosaria-c1", 240), //4s + Base: modifier.NewBaseWithHitlag("rosaria-c1-dmg", 240), //4s Amount: func(atk *combat.AttackEvent, _ combat.Target) ([]float64, bool) { if atk.Info.AttackTag != combat.AttackTagNormal { return nil, false @@ -39,6 +39,19 @@ func (c *char) makeC1CB() combat.AttackCBFunc { return m, true }, }) + + mAtkSpd := make([]float64, attributes.EndStatType) + mAtkSpd[attributes.AtkSpd] = 0.1 + c.AddStatMod(character.StatMod{ + Base: modifier.NewBaseWithHitlag("rosaria-c1-speed", 240), //4s + AffectedStat: attributes.AtkSpd, + Amount: func() ([]float64, bool) { + if c.Core.Player.CurrentState() != action.NormalAttackState { + return nil, false + } + return mAtkSpd, true + }, + }) } } diff --git a/internal/characters/xinyan/cons.go b/internal/characters/xinyan/cons.go index 5cebe51c6..06c6bfcd2 100644 --- a/internal/characters/xinyan/cons.go +++ b/internal/characters/xinyan/cons.go @@ -1,6 +1,7 @@ package xinyan import ( + "github.com/genshinsim/gcsim/pkg/core/action" "github.com/genshinsim/gcsim/pkg/core/attributes" "github.com/genshinsim/gcsim/pkg/core/combat" "github.com/genshinsim/gcsim/pkg/core/player/character" @@ -33,9 +34,13 @@ func (c *char) makeC1CB() combat.AttackCBFunc { m := make([]float64, attributes.EndStatType) m[attributes.AtkSpd] = 0.12 - c.AddAttackMod(character.AttackMod{ - Base: modifier.NewBaseWithHitlag("xinyan-c1", 5*60), - Amount: func(atk *combat.AttackEvent, t combat.Target) ([]float64, bool) { + c.AddStatMod(character.StatMod{ + Base: modifier.NewBaseWithHitlag("xinyan-c1", 5*60), + AffectedStat: attributes.AtkSpd, + Amount: func() ([]float64, bool) { + if c.Core.Player.CurrentState() != action.NormalAttackState && c.Core.Player.CurrentState() != action.ChargeAttackState { + return nil, false + } return m, true }, })