From cf290c2572182bbf017987476a40f4736f2f3131 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Wed, 25 Sep 2024 17:26:46 +0200 Subject: [PATCH 1/8] Implement Worrisome, Blissful (LC) * init lc setup * register modifiers * added cr to owner * implemented `state` struct with values for modifiers * implemented logic for modifiers * currently applies Tame to all targets of the attack --- .../lightcone/hunt/worrisomeblissful/data.go | 71 ++++++++++++++ .../worrisomeblissful/worrisomeblissful.go | 94 +++++++++++++++++++ pkg/key/lightcone.go | 1 + pkg/simulation/imports.go | 1 + 4 files changed, 167 insertions(+) create mode 100644 internal/lightcone/hunt/worrisomeblissful/data.go create mode 100644 internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go diff --git a/internal/lightcone/hunt/worrisomeblissful/data.go b/internal/lightcone/hunt/worrisomeblissful/data.go new file mode 100644 index 00000000..d14d9476 --- /dev/null +++ b/internal/lightcone/hunt/worrisomeblissful/data.go @@ -0,0 +1,71 @@ +// Code generated by "weapstat"; DO NOT EDIT. + +package worrisomeblissful + +import "github.com/simimpact/srsim/pkg/engine/equip/lightcone" + +var promotions = []lightcone.PromotionData{ + { + MaxLevel: 20, + HPBase: 48, + HPAdd: 7.2, + ATKBase: 26.4, + ATKAdd: 3.96, + DEFBase: 21, + DEFAdd: 3.15, + }, + { + MaxLevel: 30, + HPBase: 105.6, + HPAdd: 7.2, + ATKBase: 58.08, + ATKAdd: 3.96, + DEFBase: 46.2, + DEFAdd: 3.15, + }, + { + MaxLevel: 40, + HPBase: 182.4, + HPAdd: 7.2, + ATKBase: 100.32, + ATKAdd: 3.96, + DEFBase: 79.8, + DEFAdd: 3.15, + }, + { + MaxLevel: 50, + HPBase: 259.2, + HPAdd: 7.2, + ATKBase: 142.56, + ATKAdd: 3.96, + DEFBase: 113.4, + DEFAdd: 3.15, + }, + { + MaxLevel: 60, + HPBase: 336, + HPAdd: 7.2, + ATKBase: 184.8, + ATKAdd: 3.96, + DEFBase: 147, + DEFAdd: 3.15, + }, + { + MaxLevel: 70, + HPBase: 412.8, + HPAdd: 7.2, + ATKBase: 227.04, + ATKAdd: 3.96, + DEFBase: 180.6, + DEFAdd: 3.15, + }, + { + MaxLevel: 80, + HPBase: 489.6, + HPAdd: 7.2, + ATKBase: 269.28, + ATKAdd: 3.96, + DEFBase: 214.2, + DEFAdd: 3.15, + }, +} \ No newline at end of file diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go new file mode 100644 index 00000000..53441aed --- /dev/null +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -0,0 +1,94 @@ +package worrisomeblissful + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/equip/lightcone" + "github.com/simimpact/srsim/pkg/engine/event" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/engine/modifier" + "github.com/simimpact/srsim/pkg/engine/prop" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +const ( + check = "worrisome-blissful" + tame = "worrisome-blissful-cdmg-debuff" +) + +type state struct { + fuaflag bool + dmgBonus float64 + cdmgBonus float64 +} + +// Increase the wearer's CRIT Rate by 18/21/24/27/30% and increases DMG dealt by follow-up attack by 30/35/40/45/50%. +// After the wearer uses a follow-up attack, inflicts the target with the Tame state, stacking up to 2 time(s). +// When allies hit enemy targets under the Tame state, each Tame stack increases the CRIT DMG dealt by 12/14/16/18/20%. + +func init() { + lightcone.Register(key.WorrisomeBlissful, lightcone.Config{ + CreatePassive: Create, + Rarity: 5, + Path: model.Path_HUNT, + Promotions: promotions, + }) + + modifier.Register(check, modifier.Config{ + Listeners: modifier.Listeners{ + OnBeforeHitAll: buffFua, + OnAfterAttack: applyTame, + }, + }) + + modifier.Register(tame, modifier.Config{ + StatusType: model.StatusType_STATUS_DEBUFF, + Stacking: modifier.ReplaceBySource, + MaxCount: 2, + CountAddWhenStack: 1, + Listeners: modifier.Listeners{ + OnBeforeBeingHitAll: buffCdmg, + }, + }) +} + +func Create(engine engine.Engine, owner key.TargetID, lc info.LightCone) { + crAmt := 0.15 + 0.03*float64(lc.Imposition) + dmgAmt := 0.25 + 0.05*float64(lc.Imposition) + cdmgAmt := 0.1 + 0.02*float64(lc.Imposition) + engine.AddModifier(owner, info.Modifier{ + Name: check, + Source: owner, + Stats: info.PropMap{ + prop.CritChance: crAmt, + }, + State: state{ + fuaflag: false, + dmgBonus: dmgAmt, + cdmgBonus: cdmgAmt, + }, + }) +} + +func buffFua(mod *modifier.Instance, e event.HitStart) { + if e.Hit.AttackType == model.AttackType_INSERT { + e.Hit.Attacker.AddProperty(check, prop.AllDamagePercent, mod.State().(state).dmgBonus) + mod.State().(*state).fuaflag = true + } +} + +func applyTame(mod *modifier.Instance, e event.AttackEnd) { + if mod.State().(state).fuaflag { + for _, trg := range e.Targets { + mod.Engine().AddModifier(trg, info.Modifier{ + Name: tame, + }) + } + } +} + +func buffCdmg(mod *modifier.Instance, e event.HitStart) { + if mod.Engine().IsCharacter(e.Attacker) { + e.Hit.Attacker.AddProperty(tame, prop.CritDMG, mod.Count()*mod.State().(state).cdmgBonus) + } +} diff --git a/pkg/key/lightcone.go b/pkg/key/lightcone.go index a2a912c6..3cf90446 100644 --- a/pkg/key/lightcone.go +++ b/pkg/key/lightcone.go @@ -30,6 +30,7 @@ const ( ReturntoDarkness LightCone = "return_to_darkness" SleepLiketheDead LightCone = "sleep_like_the_dead" IntheNight LightCone = "in_the_night" + WorrisomeBlissful LightCone = "worrisome_blissful" ) // Nihility diff --git a/pkg/simulation/imports.go b/pkg/simulation/imports.go index 491d8566..441c9536 100644 --- a/pkg/simulation/imports.go +++ b/pkg/simulation/imports.go @@ -76,6 +76,7 @@ import ( _ "github.com/simimpact/srsim/internal/lightcone/hunt/sleeplikethedead" _ "github.com/simimpact/srsim/internal/lightcone/hunt/subscribeformore" _ "github.com/simimpact/srsim/internal/lightcone/hunt/swordplay" + _ "github.com/simimpact/srsim/internal/lightcone/hunt/worrisomeblissful" _ "github.com/simimpact/srsim/internal/lightcone/nihility/beforethetutorialmissionstarts" _ "github.com/simimpact/srsim/internal/lightcone/nihility/eyesoftheprey" _ "github.com/simimpact/srsim/internal/lightcone/nihility/fermata" From c3f0dede8fc71bc5dac42cb48e4fd1af1e4ae8b4 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Wed, 25 Sep 2024 20:38:50 +0200 Subject: [PATCH 2/8] add missing source in `AddModifier` --- internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index 53441aed..1a036978 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -81,7 +81,8 @@ func applyTame(mod *modifier.Instance, e event.AttackEnd) { if mod.State().(state).fuaflag { for _, trg := range e.Targets { mod.Engine().AddModifier(trg, info.Modifier{ - Name: tame, + Name: tame, + Source: mod.Owner(), }) } } From ecaa116a746966da2861c8bda50ab5dd420e85db Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Fri, 27 Sep 2024 21:21:44 +0200 Subject: [PATCH 3/8] Fix `applyTame` function * `applyTame` now correctly hands over value for CDmg Bonus to listener * add missing setting flag back to false in `applyTame` * fix pointer logic --- .../worrisomeblissful/worrisomeblissful.go | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index 1a036978..ee965138 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -36,7 +36,7 @@ func init() { modifier.Register(check, modifier.Config{ Listeners: modifier.Listeners{ - OnBeforeHitAll: buffFua, + OnBeforeHitAll: buffFuaDmg, OnAfterAttack: applyTame, }, }) @@ -62,7 +62,7 @@ func Create(engine engine.Engine, owner key.TargetID, lc info.LightCone) { Stats: info.PropMap{ prop.CritChance: crAmt, }, - State: state{ + State: &state{ fuaflag: false, dmgBonus: dmgAmt, cdmgBonus: cdmgAmt, @@ -70,26 +70,33 @@ func Create(engine engine.Engine, owner key.TargetID, lc info.LightCone) { }) } -func buffFua(mod *modifier.Instance, e event.HitStart) { +func buffFuaDmg(mod *modifier.Instance, e event.HitStart) { if e.Hit.AttackType == model.AttackType_INSERT { - e.Hit.Attacker.AddProperty(check, prop.AllDamagePercent, mod.State().(state).dmgBonus) - mod.State().(*state).fuaflag = true + st := mod.State().(*state) + e.Hit.Attacker.AddProperty(check, prop.AllDamagePercent, st.dmgBonus) + st.fuaflag = true } } func applyTame(mod *modifier.Instance, e event.AttackEnd) { - if mod.State().(state).fuaflag { + st := mod.State().(*state) + if st.fuaflag { for _, trg := range e.Targets { mod.Engine().AddModifier(trg, info.Modifier{ Name: tame, Source: mod.Owner(), + State: state{ + cdmgBonus: st.cdmgBonus, + }, }) } + st.fuaflag = false } } func buffCdmg(mod *modifier.Instance, e event.HitStart) { if mod.Engine().IsCharacter(e.Attacker) { - e.Hit.Attacker.AddProperty(tame, prop.CritDMG, mod.Count()*mod.State().(state).cdmgBonus) + cdmgBonus := mod.State().(*state).cdmgBonus + e.Hit.Attacker.AddProperty(tame, prop.CritDMG, mod.Count()*cdmgBonus) } } From 97d3f9fd9ead152b352e89fe9555f1d4b9601a20 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Fri, 27 Sep 2024 21:44:33 +0200 Subject: [PATCH 4/8] Fix linter, add comment --- internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index ee965138..3c2ea818 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -74,6 +74,7 @@ func buffFuaDmg(mod *modifier.Instance, e event.HitStart) { if e.Hit.AttackType == model.AttackType_INSERT { st := mod.State().(*state) e.Hit.Attacker.AddProperty(check, prop.AllDamagePercent, st.dmgBonus) + // flag for checking whether to apply Tame debuff st.fuaflag = true } } @@ -86,6 +87,8 @@ func applyTame(mod *modifier.Instance, e event.AttackEnd) { Name: tame, Source: mod.Owner(), State: state{ + fuaflag: st.fuaflag, + dmgBonus: st.dmgBonus, cdmgBonus: st.cdmgBonus, }, }) From dbdcda2f2c12b8c7d5497be332511c15a3df7fa2 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Fri, 27 Sep 2024 21:59:48 +0200 Subject: [PATCH 5/8] Remove unneeded values from State --- .../lightcone/hunt/worrisomeblissful/worrisomeblissful.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index 3c2ea818..7d8283cc 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -86,11 +86,7 @@ func applyTame(mod *modifier.Instance, e event.AttackEnd) { mod.Engine().AddModifier(trg, info.Modifier{ Name: tame, Source: mod.Owner(), - State: state{ - fuaflag: st.fuaflag, - dmgBonus: st.dmgBonus, - cdmgBonus: st.cdmgBonus, - }, + State: st.cdmgBonus, }) } st.fuaflag = false @@ -99,7 +95,7 @@ func applyTame(mod *modifier.Instance, e event.AttackEnd) { func buffCdmg(mod *modifier.Instance, e event.HitStart) { if mod.Engine().IsCharacter(e.Attacker) { - cdmgBonus := mod.State().(*state).cdmgBonus + cdmgBonus := mod.State().(state).cdmgBonus e.Hit.Attacker.AddProperty(tame, prop.CritDMG, mod.Count()*cdmgBonus) } } From 715b9a4d755182941a7cb68dcd3fdf355734a161 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sat, 28 Sep 2024 23:25:58 +0200 Subject: [PATCH 6/8] Fix names and Tame listener using wrong value --- .../worrisomeblissful/worrisomeblissful.go | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index 7d8283cc..235910c7 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -12,8 +12,8 @@ import ( ) const ( - check = "worrisome-blissful" - tame = "worrisome-blissful-cdmg-debuff" + Check = "worrisome-blissful" + Tame = "worrisome-blissful-cdmg-debuff" ) type state struct { @@ -34,16 +34,17 @@ func init() { Promotions: promotions, }) - modifier.Register(check, modifier.Config{ + modifier.Register(Check, modifier.Config{ Listeners: modifier.Listeners{ OnBeforeHitAll: buffFuaDmg, OnAfterAttack: applyTame, }, }) - modifier.Register(tame, modifier.Config{ - StatusType: model.StatusType_STATUS_DEBUFF, - Stacking: modifier.ReplaceBySource, + modifier.Register(Tame, modifier.Config{ + StatusType: model.StatusType_STATUS_DEBUFF, + Stacking: modifier.ReplaceBySource, + // CanDispel: true, MaxCount: 2, CountAddWhenStack: 1, Listeners: modifier.Listeners{ @@ -57,7 +58,7 @@ func Create(engine engine.Engine, owner key.TargetID, lc info.LightCone) { dmgAmt := 0.25 + 0.05*float64(lc.Imposition) cdmgAmt := 0.1 + 0.02*float64(lc.Imposition) engine.AddModifier(owner, info.Modifier{ - Name: check, + Name: Check, Source: owner, Stats: info.PropMap{ prop.CritChance: crAmt, @@ -73,7 +74,7 @@ func Create(engine engine.Engine, owner key.TargetID, lc info.LightCone) { func buffFuaDmg(mod *modifier.Instance, e event.HitStart) { if e.Hit.AttackType == model.AttackType_INSERT { st := mod.State().(*state) - e.Hit.Attacker.AddProperty(check, prop.AllDamagePercent, st.dmgBonus) + e.Hit.Attacker.AddProperty(Check, prop.AllDamagePercent, st.dmgBonus) // flag for checking whether to apply Tame debuff st.fuaflag = true } @@ -84,7 +85,7 @@ func applyTame(mod *modifier.Instance, e event.AttackEnd) { if st.fuaflag { for _, trg := range e.Targets { mod.Engine().AddModifier(trg, info.Modifier{ - Name: tame, + Name: Tame, Source: mod.Owner(), State: st.cdmgBonus, }) @@ -95,7 +96,7 @@ func applyTame(mod *modifier.Instance, e event.AttackEnd) { func buffCdmg(mod *modifier.Instance, e event.HitStart) { if mod.Engine().IsCharacter(e.Attacker) { - cdmgBonus := mod.State().(state).cdmgBonus - e.Hit.Attacker.AddProperty(tame, prop.CritDMG, mod.Count()*cdmgBonus) + cdmgBonus := mod.State().(float64) + e.Hit.Attacker.AddProperty(Tame, prop.CritDMG, mod.Count()*cdmgBonus) } } From 0778af20a603206e2440cfbb190b2a69d2630c83 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Fri, 1 Nov 2024 17:30:56 +0100 Subject: [PATCH 7/8] Remove comment --- .../lightcone/hunt/worrisomeblissful/worrisomeblissful.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index 235910c7..bfc579b8 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -42,9 +42,8 @@ func init() { }) modifier.Register(Tame, modifier.Config{ - StatusType: model.StatusType_STATUS_DEBUFF, - Stacking: modifier.ReplaceBySource, - // CanDispel: true, + StatusType: model.StatusType_STATUS_DEBUFF, + Stacking: modifier.ReplaceBySource, MaxCount: 2, CountAddWhenStack: 1, Listeners: modifier.Listeners{ From d1270e0af992fcb8e8e719e76179cae261adb67c Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sun, 24 Nov 2024 18:26:05 +0100 Subject: [PATCH 8/8] Update with `CanDispel` field --- internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go index bfc579b8..993fd746 100644 --- a/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go +++ b/internal/lightcone/hunt/worrisomeblissful/worrisomeblissful.go @@ -44,6 +44,7 @@ func init() { modifier.Register(Tame, modifier.Config{ StatusType: model.StatusType_STATUS_DEBUFF, Stacking: modifier.ReplaceBySource, + CanDispel: true, MaxCount: 2, CountAddWhenStack: 1, Listeners: modifier.Listeners{