From ccc10f37d2c4b90762f367136faaedc0b9a6ecc1 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sun, 17 Nov 2024 14:14:27 +0100 Subject: [PATCH 1/3] Fix Guinaifen Talent and E4 listener bugs fixes #298 --- internal/character/guinaifen/talent.go | 32 ++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/internal/character/guinaifen/talent.go b/internal/character/guinaifen/talent.go index 8e1b4c76..36238bde 100644 --- a/internal/character/guinaifen/talent.go +++ b/internal/character/guinaifen/talent.go @@ -26,6 +26,7 @@ func init() { }) modifier.Register(FirekissListener, modifier.Config{ + Stacking: modifier.ReplaceBySource, Listeners: modifier.Listeners{ OnBeforeBeingHitAll: checkFirekiss, }, @@ -47,26 +48,39 @@ func (c *char) initTalent() { }) // apply Firekiss listener to all enemies at start - for _, trg := range c.engine.Enemies() { - c.engine.Events().CharactersAdded.Subscribe(func(e event.CharactersAdded) { + c.engine.Events().EnemiesAdded.Subscribe(func(e event.EnemiesAdded) { + for _, trg := range c.engine.Enemies() { c.engine.AddModifier(trg, info.Modifier{ Name: FirekissListener, Source: c.id, }) - }) - } + } + }) - // apply E4 listener to all enemies at the start + // apply E4 listener to all enemies at start if c.info.Eidolon >= 4 { - for _, trg := range c.engine.Enemies() { - c.engine.Events().CharactersAdded.Subscribe(func(e event.CharactersAdded) { + c.engine.Events().EnemiesAdded.Subscribe(func(e event.EnemiesAdded) { + for _, trg := range c.engine.Enemies() { c.engine.AddModifier(trg, info.Modifier{ Name: E4Listener, Source: c.id, }) - }) - } + } + }) } + + // remove listeners when source dies + c.engine.Events().TargetDeath.Subscribe(func(e event.TargetDeath) { + if e.Target == c.id { + for _, trg := range c.engine.Enemies() { + c.engine.RemoveModifierFromSource(trg, c.id, FirekissListener) + if c.info.Eidolon >= 4 { + c.engine.RemoveModifierFromSource(trg, c.id, E4Listener) + } + } + } + }) + } func checkFirekiss(mod *modifier.Instance, e event.HitStart) { From f9d9c4a7d1d81103d6a50cb1b4f1e4006e89864f Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sun, 17 Nov 2024 14:50:00 +0100 Subject: [PATCH 2/3] fix linter --- internal/character/guinaifen/talent.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/character/guinaifen/talent.go b/internal/character/guinaifen/talent.go index 36238bde..c556af8f 100644 --- a/internal/character/guinaifen/talent.go +++ b/internal/character/guinaifen/talent.go @@ -80,7 +80,6 @@ func (c *char) initTalent() { } } }) - } func checkFirekiss(mod *modifier.Instance, e event.HitStart) { From 64b39ec1baee0d9f6f07e38fe62c52ed840e3872 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sun, 24 Nov 2024 19:05:26 +0100 Subject: [PATCH 3/3] Update with RWSD flag --- internal/character/guinaifen/eidolon.go | 1 + internal/character/guinaifen/talent.go | 15 ++------------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/internal/character/guinaifen/eidolon.go b/internal/character/guinaifen/eidolon.go index a6f5eea6..6124fced 100644 --- a/internal/character/guinaifen/eidolon.go +++ b/internal/character/guinaifen/eidolon.go @@ -13,6 +13,7 @@ const ( func init() { modifier.Register(E4Listener, modifier.Config{ + BehaviorFlags: []model.BehaviorFlag{model.BehaviorFlag_REMOVE_WHEN_SOURCE_DEAD}, Listeners: modifier.Listeners{ OnAfterBeingHitAll: checkE4, }, diff --git a/internal/character/guinaifen/talent.go b/internal/character/guinaifen/talent.go index c556af8f..33732161 100644 --- a/internal/character/guinaifen/talent.go +++ b/internal/character/guinaifen/talent.go @@ -26,7 +26,8 @@ func init() { }) modifier.Register(FirekissListener, modifier.Config{ - Stacking: modifier.ReplaceBySource, + Stacking: modifier.ReplaceBySource, + BehaviorFlags: []model.BehaviorFlag{model.BehaviorFlag_REMOVE_WHEN_SOURCE_DEAD}, Listeners: modifier.Listeners{ OnBeforeBeingHitAll: checkFirekiss, }, @@ -68,18 +69,6 @@ func (c *char) initTalent() { } }) } - - // remove listeners when source dies - c.engine.Events().TargetDeath.Subscribe(func(e event.TargetDeath) { - if e.Target == c.id { - for _, trg := range c.engine.Enemies() { - c.engine.RemoveModifierFromSource(trg, c.id, FirekissListener) - if c.info.Eidolon >= 4 { - c.engine.RemoveModifierFromSource(trg, c.id, E4Listener) - } - } - } - }) } func checkFirekiss(mod *modifier.Instance, e event.HitStart) {