Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions internal/artifacts/aubade/aubade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package aubade

import (
"fmt"

"github.com/genshinsim/gcsim/pkg/core"
"github.com/genshinsim/gcsim/pkg/core/attacks"
"github.com/genshinsim/gcsim/pkg/core/attributes"
"github.com/genshinsim/gcsim/pkg/core/event"
"github.com/genshinsim/gcsim/pkg/core/glog"
"github.com/genshinsim/gcsim/pkg/core/info"
"github.com/genshinsim/gcsim/pkg/core/keys"
"github.com/genshinsim/gcsim/pkg/core/player/character"
"github.com/genshinsim/gcsim/pkg/modifier"
)

func init() {
core.RegisterSetFunc(keys.AubadeOfMorningstarAndMoon, NewSet)
}

type Set struct {
lastSwap int
core *core.Core
char *character.CharWrapper
buff float64
Index int
Count int
}

func (s *Set) SetIndex(idx int) { s.Index = idx }
func (s *Set) GetCount() int { return s.Count }
func (s *Set) Init() error {
m := 0.2
if s.core.Player.GetMoonsignLevel() >= 2 {
m += 0.4
}
if s.Count >= 4 && s.core.Player.Active() != s.char.Index() {
s.gainBuff(m)
}
return nil
}

func NewSet(core *core.Core, char *character.CharWrapper, count int, param map[string]int) (info.Set, error) {
s := Set{
core: core,
char: char,
lastSwap: -1,
Count: count,
}
if count >= 2 {
m := make([]float64, attributes.EndStatType)
m[attributes.EM] = 80
char.AddStatMod(character.StatMod{
Base: modifier.NewBase("aubade-2pc", -1),
AffectedStat: attributes.EM,
Amount: func() []float64 {
return m
},
})
}
if count >= 4 {
m := 0.2
if core.Player.GetMoonsignLevel() >= 2 {
m += 0.4
}

core.Events.Subscribe(event.OnCharacterSwap, func(args ...any) {
prev := args[0].(int)
next := args[1].(int)
if prev == char.Index() {
s.lastSwap = -1
s.gainBuff(m)
} else if next == char.Index() {
s.lastSwap = core.F
core.Tasks.Add(s.clearBuff(core.F), 3*60)
}
}, fmt.Sprintf("aubade-4pc-%v", char.Base.Key.String()))

char.AddReactBonusMod(character.ReactBonusMod{
Base: modifier.NewBase("aubade-4pc", -1),
Amount: func(ai info.AttackInfo) float64 {
if ai.AttackTag > attacks.LunarReactionStartDelim && ai.AttackTag < attacks.DirectLunarReactionEndDelim {
return s.buff
}
return 0
},
})
}

return &s, nil
}

func (s *Set) gainBuff(m float64) {
s.buff = m
s.core.Log.NewEvent("aubade of morningstar and moon 4pc proc'd", glog.LogArtifactEvent, s.char.Index())
}

func (s *Set) clearBuff(src int) func() {
return func() {
if s.lastSwap != src {
return
}
if s.core.Player.Active() != s.char.Index() {
return
}

s.buff = 0
s.core.Log.NewEvent("aubade of morningstar and moon 4pc lost", glog.LogArtifactEvent, s.char.Index())
}
}
2 changes: 2 additions & 0 deletions internal/artifacts/aubade/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
key: aubade
set_id: 15043
5 changes: 5 additions & 0 deletions internal/services/assets/artifacts_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions pkg/core/keys/sets.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ var setNames = []string{
"",
"adventurer",
"archaicpetra",
"aubadeofmorningstarandmoon",
"berserker",
"blizzardstrayer",
"bloodstainedchivalry",
Expand Down Expand Up @@ -96,6 +97,7 @@ const (
NoSet Set = iota
Adventurer
ArchaicPetra
AubadeOfMorningstarAndMoon
Berserker
BlizzardStrayer
BloodstainedChivalry
Expand Down
3 changes: 3 additions & 0 deletions pkg/shortcut/artifacts.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ var SetNameToKey = map[string]keys.Set{
"adventurer": keys.Adventurer,
"archaicpetra": keys.ArchaicPetra,
"ap": keys.ArchaicPetra,
"aubadeofmorningstarandmoon": keys.AubadeOfMorningstarAndMoon,
"aubadeofmorningstar": keys.AubadeOfMorningstarAndMoon,
"aubade": keys.AubadeOfMorningstarAndMoon,
"berserker": keys.Berserker,
"blizzardstrayer": keys.BlizzardStrayer,
"blizzard": keys.BlizzardStrayer,
Expand Down
1 change: 1 addition & 0 deletions pkg/simulation/imports.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (

// artifacts
_ "github.com/genshinsim/gcsim/internal/artifacts/archaic"
_ "github.com/genshinsim/gcsim/internal/artifacts/aubade"
_ "github.com/genshinsim/gcsim/internal/artifacts/berserker"
_ "github.com/genshinsim/gcsim/internal/artifacts/blizzard"
_ "github.com/genshinsim/gcsim/internal/artifacts/bloodstained"
Expand Down
30 changes: 30 additions & 0 deletions ui/packages/docs/docs/reference/artifacts/aubade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
title: >
Aubade of Morningstar and Moon
---

import AoETable from "@site/src/components/AoE/AoETable";
import IssuesTable from "@site/src/components/Issues/IssuesTable";
import NamesList from "@site/src/components/Names/NamesList";
import ParamsTable from "@site/src/components/Params/ParamsTable";
import FieldsTable from "@site/src/components/Fields/FieldsTable";

## AoE Data

<AoETable item_key="aubade" data_src="artifact" />

## Known issues

<IssuesTable item_key="aubade" data_src="artifact" />

## Names

<NamesList item_key="aubade" data_src="artifact" />

## Params

<ParamsTable item_key="aubade" data_src="artifact" />

## Fields

<FieldsTable item_key="aubade" data_src="artifact" />
4 changes: 4 additions & 0 deletions ui/packages/docs/src/components/Names/artifact_data.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
"archaicpetra": [
"ap"
],
"aubadeofmorningstarandmoon": [
"aubadeofmorningstar",
"aubade"
],
"berserker": [],
"blizzardstrayer": [
"blizzard",
Expand Down
7 changes: 7 additions & 0 deletions ui/packages/localization/src/locales/names.generated.json
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@
},
"artifact_names": {
"archaicpetra": "悠古的磐岩",
"aubade": "晨星与月的晓歌",
"berserker": "战狂",
"blizzardstrayer": "冰风迷途的勇士",
"bloodstainedchivalry": "染血的骑士道",
Expand Down Expand Up @@ -1130,6 +1131,7 @@
},
"artifact_names": {
"archaicpetra": "Archaic Petra",
"aubade": "Aubade of Morningstar and Moon",
"berserker": "Berserker",
"blizzardstrayer": "Blizzard Strayer",
"bloodstainedchivalry": "Bloodstained Chivalry",
Expand Down Expand Up @@ -1926,6 +1928,7 @@
},
"artifact_names": {
"archaicpetra": "Archaischer Fels",
"aubade": "Gesang von Stern und Mond",
"berserker": "Berserker",
"blizzardstrayer": "Im Schnee irrender Recke",
"bloodstainedchivalry": "Blutiger Weg eines Ritters",
Expand Down Expand Up @@ -2722,6 +2725,7 @@
},
"artifact_names": {
"archaicpetra": "悠久の磐岩",
"aubade": "暁の星と月の歌",
"berserker": "狂戦士",
"blizzardstrayer": "氷風を彷徨う勇士",
"bloodstainedchivalry": "血染めの騎士道",
Expand Down Expand Up @@ -3518,6 +3522,7 @@
},
"artifact_names": {
"archaicpetra": "유구한 반암",
"aubade": "샛별과 달의 여명",
"berserker": "전투광",
"blizzardstrayer": "얼음바람 속에서 길잃은 용사",
"bloodstainedchivalry": "피에 물든 기사도",
Expand Down Expand Up @@ -4314,6 +4319,7 @@
},
"artifact_names": {
"archaicpetra": "Архаичный камень",
"aubade": "Рассветная песнь звезды и луны",
"berserker": "Берсерк",
"blizzardstrayer": "Заблудший в метели",
"bloodstainedchivalry": "Рыцарь крови",
Expand Down Expand Up @@ -5110,6 +5116,7 @@
},
"artifact_names": {
"archaicpetra": "Petra Arcaica",
"aubade": "Alborada de la Estrella del Alba y la Luna",
"berserker": "Berserker",
"blizzardstrayer": "Nómada del Invierno",
"bloodstainedchivalry": "Caballería Sanguinaria",
Expand Down
5 changes: 5 additions & 0 deletions ui/packages/ui/src/Data/artifact_data.generated.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
"text_map_id": "2040573235",
"key": "archaicpetra"
},
"aubade": {
"id": "15043",
"text_map_id": "894629371",
"key": "aubade"
},
"berserker": {
"id": "10005",
"text_map_id": "855894507",
Expand Down