Merge branch 'MadeBaruna:main' into fix-369-overlapping-deck-names

This commit is contained in:
jogerj 2023-07-07 20:56:28 +02:00 committed by GitHub
commit d9db7dd3f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 1943 additions and 1229 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -826,6 +826,52 @@ export const banners = {
// timezoneDependent: true,
// version: '3.7',
// },
{
name: 'Caution in Confidence',
image: 2,
shortName: 'Alhaitham',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#5bcbd1',
featured: ['alhaitham', 'kaedehara_kazuha'],
featuredRare: ['yaoyao', 'shikanoin_heizou', 'xiangling'],
version: '3.7',
},
// {
// name: 'Leaves in the Wind',
// image: 3,
// shortName: 'Kazuha',
// start: '2023-06-13 18:00:00',
// end: '2023-07-04 14:59:59',
// color: '#5bcbd1',
// featured: ['alhaitham', 'kaedehara_kazuha'],
// featuredRare: ['yaoyao', 'shikanoin_heizou', 'xiangling'],
// version: '3.7',
// },
{
name: 'Born of Ocean Swell',
image: 3,
shortName: 'Eula',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#A6D6E0',
featured: ['eula', 'klee'],
featuredRare: ['mika', 'razor', 'thoma'],
version: '3.8',
timezoneDependent: true,
},
// {
// name: 'Sparkling Steps',
// image: 4,
// shortName: 'Klee',
// start: '2023-07-05 06:00:00',
// end: '2023-07-25 17:59:59',
// color: '#A6D6E0',
// featured: ['eula', 'klee'],
// featuredRare: ['mika', 'razor', 'thoma'],
// version: '3.8',
// timezoneDependent: true,
// },
],
weapons: [
{
@ -1401,5 +1447,27 @@ export const banners = {
timezoneDependent: true,
version: '3.7',
},
{
name: 'Epitome Invocation',
image: 48,
shortName: 'Freedom',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#eae5e1',
featured: ['freedom-sworn', 'light_of_foliar_incision'],
featuredRare: ['wavebreakers_fin', 'mouuns_moon', 'favonius_sword', 'sacrificial_greatsword', 'favonius_codex'],
version: '3.7',
},
{
name: 'Epitome Invocation',
image: 49,
shortName: 'Freedom',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#ffb169',
featured: ['song_of_broken_pines', 'lost_prayer_to_the_sacred_winds'],
featuredRare: ['the_alley_flash', 'alley_hunter', 'rainslasher', 'favonius_lance', 'eye_of_perception'],
version: '3.8',
},
],
};

View file

@ -553,4 +553,54 @@ export const bannersDual = {
version: '3.7',
},
],
'Caution in Confidence 2': [
{
name: 'Caution in Confidence',
image: 2,
shortName: 'Alhaitham',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#5bcbd1',
featured: ['alhaitham', 'kaedehara_kazuha'],
featuredRare: ['yaoyao', 'shikanoin_heizou', 'xiangling'],
version: '3.7',
},
{
name: 'Leaves in the Wind',
image: 3,
shortName: 'Kazuha',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#5bcbd1',
featured: ['alhaitham', 'kaedehara_kazuha'],
featuredRare: ['yaoyao', 'shikanoin_heizou', 'xiangling'],
version: '3.7',
},
],
'Born of Ocean Swell 3': [
{
name: 'Born of Ocean Swell',
image: 3,
shortName: 'Eula',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#A6D6E0',
featured: ['eula', 'klee'],
featuredRare: ['mika', 'razor', 'thoma'],
timezoneDependent: true,
version: '3.8',
},
{
name: 'Sparkling Steps',
image: 4,
shortName: 'Klee',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#A6D6E0',
featured: ['eula', 'klee'],
featuredRare: ['mika', 'razor', 'thoma'],
timezoneDependent: true,
version: '3.8',
},
],
};

File diff suppressed because it is too large Load diff

View file

@ -1274,4 +1274,60 @@ export const events = [
url: 'https://www.hoyolab.com/article/18031376',
showOnHome: true,
},
{
name: "Duel! The Summoners' Summit!",
pos: '35% 20%',
zoom: '250%',
image: 'Duel The Summoners Summit.png',
start: '2023-05-25 10:00:00',
end: '2023-06-12 03:59:59',
color: '#d8e29d',
url: 'https://www.hoyolab.com/article/18699059',
showOnHome: true,
},
{
name: "Divine Ingenuity: Collector's Chapter",
pos: '0% 20%',
zoom: '200%',
image: 'Divine Ingenuity 2.png',
start: '2023-06-08 10:00:00',
end: '2023-06-29 03:59:59',
color: '#cbfeff',
url: 'https://www.hoyolab.com/article/18699187',
showOnHome: true,
},
{
name: 'Feast of the Departed Warriors',
pos: '0% 20%',
zoom: '250%',
image: 'Feast of the Departed Warriors.png',
start: '2023-06-14 10:00:00',
end: '2023-06-26 03:59:59',
color: '#4f7eed',
url: 'https://www.hoyolab.com/article/19277582',
showOnHome: true,
},
{
name: 'Secret Summer Paradise',
pos: '20% 10%',
zoom: '150%',
image: 'Secret Summer Paradise.jpg',
start: '2023-07-05 06:00:00',
end: '2023-08-16 03:59:59',
color: '#9ceddf',
url: 'https://www.hoyolab.com/article/19771436',
showOnHome: true,
timezoneDependent: true,
},
{
name: "Adventurer's Trials: Advanced",
pos: '0% 50%',
zoom: '150%',
image: 'Adventurers Trials Advanced Temp.png',
start: '2023-07-20 10:00:00',
end: '2023-07-31 03:59:59',
color: '#fffa86',
url: 'https://www.hoyolab.com/article/19777607',
showOnHome: true,
},
];

View file

@ -1,73 +1,29 @@
export const eventsData = [
[
{
name: 'Fulminating Sandstorm',
pos: '0% 20%',
zoom: '100%',
image: 'fulminating_sandstorm.png',
start: '2023-04-21 10:00:00',
end: '2023-05-01 03:59:59',
color: '#f1eada',
url: 'https://www.hoyolab.com/article/17591460',
showOnHome: true,
},
{
name: "The Recollector's Path",
pos: '50% 40%',
zoom: '200%',
image: 'the_recollectors_path_temp.png',
start: '2023-05-08 10:00:00',
end: '2023-05-22 03:59:59',
color: '#efa7a9',
url: 'https://www.hoyolab.com/article/18031376',
showOnHome: true,
},
{
name: "Divine Ingenuity: Collector's Chapter",
pos: '0% 30%',
zoom: '150%',
image: 'Divine Ingenuity 2 Temp.png',
pos: '0% 20%',
zoom: '200%',
image: 'Divine Ingenuity 2.png',
start: '2023-06-08 10:00:00',
end: '2023-06-29 03:59:59',
color: '#cbfeff',
url: 'https://www.hoyolab.com/article/18699187',
showOnHome: true,
},
{
name: "Adventurer's Trials: Advanced",
pos: '0% 50%',
zoom: '150%',
image: 'Adventurers Trials Advanced Temp.png',
start: '2023-07-20 10:00:00',
end: '2023-07-31 03:59:59',
color: '#fffa86',
url: 'https://www.hoyolab.com/article/19777607',
showOnHome: true,
},
],
[
{
name: 'Brewing Developments',
pos: '0% 20%',
zoom: '250%',
image: 'brewing_developments.jpg',
start: '2023-04-13 10:00:00',
end: '2023-04-24 03:59:59',
color: '#b0f7f1',
url: 'https://www.hoyolab.com/article/17591332',
showOnHome: true,
},
{
name: 'A Parade of Providence',
pos: '40% 20%',
zoom: '100%',
image: 'a_parade_of_providence_full.jpg',
start: '2023-04-27 10:00:00',
end: '2023-05-15 03:59:59',
color: '#e98a4a',
url: 'https://www.hoyolab.com/article/17950597',
showOnHome: true,
},
{
name: 'Overflowing Mastery',
pos: '0% 50%',
image: 'overflowing_mastery.jpg',
start: '2023-05-15 04:00:00',
end: '2023-05-22 03:59:59',
color: '#f5debc',
zoom: '200%',
url: 'https://www.hoyolab.com/article/18031376',
showOnHome: true,
},
{
name: "Duel! The Summoners' Summit!",
pos: '35% 20%',
@ -79,31 +35,31 @@ export const eventsData = [
url: 'https://www.hoyolab.com/article/18699059',
showOnHome: true,
},
],
[
{
name: "The Moongrass' Enlightenment - Nahida Banner",
pos: '10% 15%',
name: 'Feast of the Departed Warriors',
pos: '0% 20%',
zoom: '250%',
image: 'Feast of the Departed Warriors.png',
start: '2023-06-14 10:00:00',
end: '2023-06-26 03:59:59',
color: '#4f7eed',
url: 'https://www.hoyolab.com/article/19277582',
showOnHome: true,
},
{
name: 'Secret Summer Paradise',
pos: '20% 10%',
zoom: '150%',
image: 'the_moongrass_enlightenment_2.jpg',
start: '2023-04-12 06:00:00',
end: '2023-05-02 17:59:59',
color: '#b8db94',
url: 'https://www.hoyolab.com/article/17591331',
image: 'Secret Summer Paradise.jpg',
start: '2023-07-05 06:00:00',
end: '2023-08-16 03:59:59',
color: '#9ceddf',
url: 'https://www.hoyolab.com/article/19771436',
showOnHome: true,
timezoneDependent: true,
},
{
name: 'Immaculate Pulse - Baizhu Banner',
pos: '20% 15%',
zoom: '200%',
image: 'immaculate_pulse_1.jpg',
start: '2023-05-02 18:00:00',
end: '2023-05-23 14:59:59',
color: '#8fdaa0',
url: 'https://www.hoyolab.com/article/18031187',
showOnHome: true,
},
],
[
{
name: 'Tapestry of Golden Flames - Yoimiya Banner',
pos: '10% 15%',
@ -116,31 +72,31 @@ export const eventsData = [
showOnHome: true,
timezoneDependent: true,
},
],
[
{
name: 'Twirling Lotus - Nilou Banner',
name: 'Caution in Confidence - Alhaitham Banner',
pos: '10% 5%',
zoom: '150%',
image: 'Caution in Confidence 2.png',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#5bcbd1',
url: 'https://www.hoyolab.com/article/19181094',
showOnHome: true,
},
{
name: 'Born of Ocean Swell - Eula Banner',
pos: '10% 15%',
zoom: '150%',
image: 'twirling_lotus_2.jpg',
start: '2023-04-12 06:00:00',
end: '2023-05-02 17:59:59',
color: '#b2e0f0',
url: 'https://www.hoyolab.com/article/17591331',
image: 'Born of Ocean Swell 3.jpg',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#A6D6E0',
url: 'https://www.hoyolab.com/article/19771439',
showOnHome: true,
timezoneDependent: true,
},
{
name: 'Adrift in the Harbor - Ganyu Banner',
pos: '10% 15%',
zoom: '150%',
image: 'adrift_in_the_harbor_4.jpg',
start: '2023-05-02 18:00:00',
end: '2023-05-23 14:59:59',
color: '#6994DF',
url: 'https://www.hoyolab.com/article/18031187',
showOnHome: true,
},
],
[
{
name: 'Everbloom Violet - Yae Miko Banner',
pos: '10% 15%',
@ -153,31 +109,31 @@ export const eventsData = [
showOnHome: true,
timezoneDependent: true,
},
],
[
{
name: 'Epitome Invocation - Weapon Banner',
pos: '30% 35%',
name: 'Leaves in the Wind - Kazuha Banner',
pos: '10% 5%',
zoom: '150%',
image: 'epitome_invocation_45.jpg',
start: '2023-04-12 06:00:00',
end: '2023-05-02 17:59:59',
color: '#FFAA4B',
url: 'https://www.hoyolab.com/article/17591331',
image: 'Leaves in the Wind 3.png',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#7edec3',
url: 'https://www.hoyolab.com/article/19181094',
showOnHome: true,
},
{
name: 'Sparkling Steps - Klee Banner',
pos: '10% 15%',
zoom: '150%',
image: 'Sparkling Steps 4.jpg',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#f26c36',
url: 'https://www.hoyolab.com/article/19771439',
showOnHome: true,
timezoneDependent: true,
},
{
name: 'Epitome Invocation - Weapon Banner',
pos: '30% 35%',
zoom: '150%',
image: 'epitome_invocation_46.jpg',
start: '2023-05-02 18:00:00',
end: '2023-05-23 14:59:59',
color: '#FFAA4B',
url: 'https://www.hoyolab.com/article/18031187',
showOnHome: true,
},
],
[
{
name: 'Epitome Invocation - Weapon Banner',
pos: '30% 35%',
@ -190,38 +146,31 @@ export const eventsData = [
showOnHome: true,
timezoneDependent: true,
},
{
name: 'Epitome Invocation - Weapon Banner',
pos: '30% 25%',
zoom: '150%',
image: 'Epitome Invocation 48.png',
start: '2023-06-13 18:00:00',
end: '2023-07-04 14:59:59',
color: '#FFAA4B',
url: 'https://www.hoyolab.com/article/19181094',
showOnHome: true,
},
{
name: 'Epitome Invocation - Weapon Banner',
pos: '30% 35%',
zoom: '150%',
image: 'Epitome Invocation 49.jpg',
start: '2023-07-05 06:00:00',
end: '2023-07-25 17:59:59',
color: '#FFAA4B',
url: 'https://www.hoyolab.com/article/19771439',
showOnHome: true,
timezoneDependent: true,
},
],
[
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-04-01 04:00:00',
end: '2023-04-16 04:00:00',
color: '#4299E1',
description:
"When a character's HP decreases, release a shockwave at the current active character's position, dealing True DMG to nearby opponents. This effect can be triggered once every 3s.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-04-16 04:00:00',
end: '2023-05-01 04:00:00',
color: '#4299E1',
description:
"When the active character's HP decreases, a shockwave will be unleashed at the character's position, dealing True DMG to nearby opponents. This effect can be triggered once every 0.8s.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-05-01 04:00:00',
end: '2023-05-16 04:00:00',
color: '#4299E1',
description:
"After a character triggers a Bloom reaction, all characters' Bloom, Hyperbloom, and Burgeon DMG dealt is increased by 35% for 6s. This effect can be triggered once every 0.1s. Max 4 stacks. Each stack's duration is counted independently.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
@ -232,18 +181,68 @@ export const eventsData = [
description:
'When DMG dealt by Dendro Cores (including DMG from Hyperbloom and Burgeon reactions) hits a character, Elemental Mastery will be increased by 200 for all characters in the party for 4s.',
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-06-01 04:00:00',
end: '2023-06-16 04:00:00',
color: '#4299E1',
description:
"After the character's Normal Attack hits an opponent, this opponent will be afflicted with a Sign of Snaring. After 3s, the Sign will be removed, dealing True DMG to this opponent. After a character's Normal Attack hits an opponent with a Sign of Snaring, the DMG dealt by the Sign's removal will be increased. This DMG can be increased for no more than 9 times.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-06-16 04:00:00',
end: '2023-07-01 04:00:00',
color: '#4299E1',
description:
"After the active character's Normal Attacks hit opponents, the DMG dealt by this character will increase by 12% for 2s. This effect can stack up to 5 times. Each stack's duration is counted independently. This effect can be triggered once every 0.05s. This effect will be canceled when the character leaves the field.will be removed, dealing True DMG to this opponent. After a character's Normal Attack hits an opponent with a Sign of Snaring, the DMG dealt by the Sign's removal will be increased. This DMG can be increased for no more than 9 times.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-07-01 04:00:00',
end: '2023-07-16 04:00:00',
color: '#4299E1',
description:
"After the character's Normal Attack hits an opponent, the Physical or Elemental RES of this opponent will decrease by 6% for 2s, matching the Attribute of that attack. This can stack up to 6 times. RES decreases of different types can co-exist, and their stacks and timers will be independent of each other.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-07-16 04:00:00',
end: '2023-08-01 04:00:00',
color: '#4299E1',
description:
"Within 10s after the character enters the field, the character's Normal, Charged, and Plunging Attacks will deal 30% increased DMG. Their ATK SPD will also be increased by 10%. This effect will be canceled when the character leaves the field.",
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-08-01 04:00:00',
end: '2023-08-16 04:00:00',
color: '#4299E1',
description:
'When a character loses or restores HP, all party members will gain 7.5% increased ATK for 10s. This effect can be triggered once every 0.1s. Max 4 stacks. Each stack will be counted independently.',
},
{
name: 'Spiral Abyss',
image: 'spiral_abyss.jpg',
pos: '50% 20%',
start: '2023-08-16 04:00:00',
end: '2023-09-01 04:00:00',
color: '#4299E1',
description:
"When the active character deals consecutive instances of Elemental DMG of the same Elemental Type or Physical DMG using Normal, Charged, or Plunging Attacks to an opponent, they will gain 1 count stack. 1 stack can be gained every 0.3s. The stacks for every Elemental and Physical DMG will be counted independently. After 6 stacks have been gained, a shockwave will be unleashed at the opponent's position, dealing True DMG and clearing all previously accumulated stacks for this DMG type. Should the active character leave the field, these stacks will be cleared.",
},
],
[
{
name: "Paimon's Bargain - Razor, Amber, and Royal",
pos: '0% 50%',
zoom: '150%',
start: '2023-04-01 04:00:00',
end: '2023-05-01 04:00:00',
color: '#B6A1EA',
image: 'paimon_bargain.png',
description: 'Now selling: Razor, Amber, and Royal Weapons.',
},
{
name: "Paimon's Bargain - Bennett, Lisa, and Blackcliff",
pos: '0% 50%',
@ -254,18 +253,28 @@ export const eventsData = [
image: 'paimon_bargain.png',
description: 'Now selling: Razor, Amber, and Blackcliff Weapons.',
},
{
name: "Paimon's Bargain - Barbara, Kaeya, and Royal",
pos: '0% 50%',
zoom: '150%',
start: '2023-06-01 04:00:00',
end: '2023-07-01 04:00:00',
color: '#B6A1EA',
image: 'paimon_bargain.png',
description: 'Now selling: Barbara, Kaeya, and Royal Weapons.',
},
{
name: "Paimon's Bargain - Fischl, Xiangling, and Blackcliff",
pos: '0% 50%',
zoom: '150%',
start: '2023-07-01 04:00:00',
end: '2023-08-01 04:00:00',
color: '#B6A1EA',
image: 'paimon_bargain.png',
description: 'Now selling: Fischl, Xiangling, and Blackcliff Weapons.',
},
],
[
{
name: 'Battle Pass - Crown of Glory',
pos: '0% 12%',
image: 'crown_of_glory.jpg',
start: '2023-04-12 06:00:00',
end: '2023-05-22 03:59:59',
color: '#c8d18f',
url: 'https://www.hoyolab.com/article/17591460',
timezoneDependent: true,
},
{
name: "Battle Pass - Invoker's Secrets",
pos: '0% 12%',
@ -276,5 +285,15 @@ export const eventsData = [
url: 'https://www.hoyolab.com/article/18699187',
timezoneDependent: true,
},
{
name: 'Battle Pass - Vivid Illumination',
pos: '0% 15%',
image: 'Vivid Illumination.jpg',
start: '2023-07-05 06:00:00',
end: '2023-08-14 03:59:59',
color: '#e0fbf8',
url: 'https://www.hoyolab.com/article/19771440',
timezoneDependent: true,
},
],
];

View file

@ -274,7 +274,7 @@
"Open Genshin Impact in this PC (If you use multiple accounts, please restart the game)",
"Then open the wish history in the game and wait it to load",
"Then open the folder where your game is installed (example: C:\\Games\\Genshin Impact)",
"Then open folder GenshinImpact_Data → webCaches → Cache → Cache_Data",
"Then open folder GenshinImpact_Data → webCaches → 2.13.0.1 → Cache → Cache_Data",
"Right click \"data_2\" file then click \"Open with\" then select Notepad (If you get error like \"The process cannot access the file because it is being used by another process\" please exit the game first)",
"Press CTRL+F then check \"Wrap around\" and select direction \"Up\" then in the input box search for \"e20190909gacha-v2\" (without the quote) then click Find Next",
"Copy all the link from https://webstatic until game_biz=hk4e_global the url looks like this: https://webstatic-sea.hoyoverse.com/genshin/event/e20190909gacha-v2/index.html?.......&game_biz=hk4e_global",
@ -966,7 +966,10 @@
"artifact": "Artifact",
"setPiece": "{piece} Set Bonus",
"recommendedCharacter": "Recommended Characters {piece} Set",
"15AnemoDmgSet": "Anemo +15% set",
"15HydroDmgSet": "Hydro +15% set",
"18ATKSet": "ATK +18% set",
"20HPSet": "HP +18% set",
"20EnergyRechargeSet": "Energy Recharge +20% set",
"25PhysicalDmgSet": "Physical DMG +25% set",
"80EMSet": "Elemental Mastery +80 set",

View file

@ -274,7 +274,7 @@
"Buka Genshin Impact di PC ini (Jika mempunyai beberapa akun, restart dulu game nya)",
"Buka riwayat history di dalam game nya, dan tunggu sampai selesai loading",
"Kemudian buka folder dimana game nya ter-install (contoh: C:\\Games\\Genshin Impact)",
"Kemudian buka folder GenshinImpact_Data → webCaches → Cache → Cache_Data",
"Kemudian buka folder GenshinImpact_Data → webCaches → 2.13.0.1 → Cache → Cache_Data",
"Klik kanan \"data_2\" kemudian klik \"Open with\" kemudian pilih Notepad (Jika kamu mendapatkan error seperti \"The process cannot access the file because it is being used by another process\" silahkan tutup dahulu game nya)",
"Tekan CTRL+F kemudian centang \"Wrap around\" dan pilih direction \"Up\" dan di kotak input nya masukkan \"e20190909gacha-v2\" (tanpa petik) kemudian klik Find Next",
"Copy semua link nya dari https://webstatic sampai game_biz=hk4e_global link nya seperti ini: https://webstatic-sea.hoyoverse.com/genshin/event/e20190909gacha-v2/index.html?.......&game_biz=hk4e_global",

View file

@ -13,25 +13,25 @@
const dispatch = createEventDispatcher();
const featured = {
yoimiya: {
name: 'Yoimiya',
klee: {
name: 'Klee',
rarity: 'legendary',
count: 0,
average: '...',
percentage: '...',
},
yae_miko: {
name: 'Yae Miko',
eula: {
name: 'Eula',
rarity: 'legendary',
count: 0,
average: '...',
percentage: '...',
},
};
const bannerId = 300048;
const image = 'yoimiya-yae.png';
const bannerId = 300050;
const image = 'eula_klee.png';
const width = 800;
const height = 539;
const height = 515;
let loading = true;
let user = '';

View file

@ -66,6 +66,7 @@
'3.5',
'3.6',
'3.7',
'3.8',
].map((e) => ({
label: e,
value: e,

View file

@ -43,9 +43,13 @@
let constellationDiv;
let talentDiv;
const builds = Object.entries(buildData.roles)
.sort((a, b) => b[1].recommended - a[1].recommended)
.map((e) => ({ name: e[0], build: e[1] }));
const builds =
Object.keys(buildData).length > 0
? Object.entries(buildData.roles)
.sort((a, b) => b[1].recommended - a[1].recommended)
.map((e) => ({ name: e[0], build: e[1] }))
: null;
let currentBuild = 0;
const artifactsEn = artifactData;
let artifacts = artifactData;
@ -179,6 +183,12 @@
return 'gladiators_finale';
case '+20%_energy_recharge':
return 'emblem_of_severed_fate';
case '+20%_hp_set':
return 'tenacity_of_the_millelith';
case '+15%_hydro_dmg_set':
return 'heart_of_depth';
case '+15%_anemo_dmg_set':
return 'viridescent_venerer';
case '+25%_physical_dmg':
return 'bloodstained_chivalry';
case '+80_em':
@ -196,6 +206,12 @@
return 'artifact.18ATKSet';
case '+20%_energy_recharge':
return 'artifact.20EnergyRechargeSet';
case '+20%_hp_set':
return 'artifact.20HPSet';
case '+15%_hydro_dmg_set':
return 'artifact.15HydroDmgSet';
case '+15%_anemo_dmg_set':
return 'artifact.15AnemoDmgSet';
case '+25%_physical_dmg':
return 'artifact.25PhysicalDmgSet';
case '+80_em':
@ -230,8 +246,8 @@
});
$: constellationCountTotal = constellationCount + manualCount;
$: buildName = builds[currentBuild].name;
$: build = builds[currentBuild].build;
$: buildName = builds ? builds[currentBuild].name : '';
$: build = builds ? builds[currentBuild].build : '';
</script>
<svelte:head>
@ -470,330 +486,405 @@
</div>
<Ad class="mt-4 max-w-screen-2xl flex justify-center" type="desktop" variant="lb" id="1" />
<Ad class="flex justify-center mt-4" type="mobile" variant="mpu" id="2" />
<div class="flex flex-col text-white px-4 md:px-8 max-w-screen-2xl">
{#if builds.length > 1}
<div class="flex mt-4 items-center">
{#each builds as item, i}
<button class="pill mr-2 {currentBuild === i ? 'active' : ''}" on:click={() => selectBuild(i)}>
{item.name}
{item.build.recommended ? '👍' : ''}
</button>
{/each}
</div>
{/if}
<div class="p-4 mt-2 rounded-xl bg-item flex flex-col">
<h3 class="font-black font-display text-xl">
{buildName}
{$t('characters.build')}
{build.recommended ? '👍' : ''}
</h3>
<p class="whitespace-pre-wrap text-gray-200 character-note">{@html build.note}</p>
{#if build.tip !== ''}
<h4 class="font-black font-display text-lg mt-4">{$t('characters.abilityTip')}</h4>
<p class="whitespace-pre-wrap text-gray-200">{build.tip}</p>
{#if builds}
<div class="flex flex-col text-white px-4 md:px-8 max-w-screen-2xl">
{#if builds.length > 1}
<div class="flex mt-4 items-center">
{#each builds as item, i}
<button class="pill mr-2 {currentBuild === i ? 'active' : ''}" on:click={() => selectBuild(i)}>
{item.name}
{item.build.recommended ? '👍' : ''}
</button>
{/each}
</div>
{/if}
<div class="flex mt-2 -mx-4 flex-wrap">
<div class="mx-4 mt-4">
<h4 class="font-black font-display text-lg">{$t('characters.mainStats')}</h4>
<div class="flex items-center">
<div class="px-2 py-1 mr-3 bg-background rounded-md w-32">
<img class="w-8 h-8 inline mr-1" src="/images/artifacts/adventurer_sands.png" alt="SANDS" />
<span class="font-semibold">{$t('artifact.sands')}</span>
<div class="p-4 mt-2 rounded-xl bg-item flex flex-col">
<h3 class="font-black font-display text-xl">
{buildName}
{$t('characters.build')}
{build.recommended ? '👍' : ''}
</h3>
<p class="whitespace-pre-wrap text-gray-200 character-note">{@html build.note}</p>
{#if build.tip !== ''}
<h4 class="font-black font-display text-lg mt-4">{$t('characters.abilityTip')}</h4>
<p class="whitespace-pre-wrap text-gray-200">{build.tip}</p>
{/if}
<div class="flex mt-2 -mx-4 flex-wrap">
<div class="mx-4 mt-4">
<h4 class="font-black font-display text-lg">{$t('characters.mainStats')}</h4>
<div class="flex items-center">
<div class="px-2 py-1 mr-3 bg-background rounded-md w-32">
<img class="w-8 h-8 inline mr-1" src="/images/artifacts/adventurer_sands.png" alt="SANDS" />
<span class="font-semibold">{$t('artifact.sands')}</span>
</div>
<p>{build.mainStats.sands.join(' / ')}</p>
</div>
<div class="flex items-center mt-1">
<div class="px-2 py-1 mr-3 bg-background rounded-md w-32">
<img class="w-8 h-8 inline mr-1" src="/images/artifacts/adventurer_goblet.png" alt="GOBLET" />
<span class="font-semibold">{$t('artifact.goblet')}</span>
</div>
<p>{build.mainStats.goblet.join(' / ')}</p>
</div>
<div class="flex items-center mt-1">
<div class="px-2 py-1 mr-3 bg-background rounded-md w-32">
<img class="w-8 h-8 inline mr-1" src="/images/artifacts/adventurer_circlet.png" alt="CIRCLET" />
<span class="font-semibold">{$t('artifact.circlet')}</span>
</div>
<p>{build.mainStats.circlet.join(' / ')}</p>
</div>
<p>{build.mainStats.sands.join(' / ')}</p>
</div>
<div class="flex items-center mt-1">
<div class="px-2 py-1 mr-3 bg-background rounded-md w-32">
<img class="w-8 h-8 inline mr-1" src="/images/artifacts/adventurer_goblet.png" alt="GOBLET" />
<span class="font-semibold">{$t('artifact.goblet')}</span>
<div class="mt-4 mx-4">
<h4 class="font-black font-display text-lg">{$t('characters.subStats')}</h4>
<div class="decimal-list">
{#each build.subStats as stat, i}
<p><span class="font-semibold w-4 inline-block">{i + 1}.</span> {stat}</p>
{/each}
</div>
<p>{build.mainStats.goblet.join(' / ')}</p>
</div>
<div class="flex items-center mt-1">
<div class="px-2 py-1 mr-3 bg-background rounded-md w-32">
<img class="w-8 h-8 inline mr-1" src="/images/artifacts/adventurer_circlet.png" alt="CIRCLET" />
<span class="font-semibold">{$t('artifact.circlet')}</span>
<div class="mt-4 mx-4">
<h4 class="font-black font-display text-lg">{$t('characters.talentPriority')}</h4>
<div class="flex items-center">
{#each build.talent as talent, i}
<p class="mr-1">{talent}</p>
{#if i !== build.talent.length - 1}
<Icon className="mr-1" path={mdiChevronRight} />
{/if}
{/each}
</div>
<p>{build.mainStats.circlet.join(' / ')}</p>
</div>
</div>
<div class="mt-4 mx-4">
<h4 class="font-black font-display text-lg">{$t('characters.subStats')}</h4>
<div class="decimal-list">
{#each build.subStats as stat, i}
<p><span class="font-semibold w-4 inline-block">{i + 1}.</span> {stat}</p>
{/each}
</div>
</div>
<div class="mt-4 mx-4">
<h4 class="font-black font-display text-lg">{$t('characters.talentPriority')}</h4>
<div class="flex items-center">
{#each build.talent as talent, i}
<p class="mr-1">{talent}</p>
{#if i !== build.talent.length - 1}
<Icon className="mr-1" path={mdiChevronRight} />
{/if}
{/each}
</div>
</div>
</div>
<div class="flex -mx-4 flex-wrap">
<div class="mt-4 mx-4 -mb-1">
<h4 class="font-black font-display text-lg">{$t('characters.weapons')}</h4>
{#each build.weapons as weapon, i}
<a class="popup flex mb-1" href="/weapons/{weapon.id}">
<div class="popup-container">
<div class="bg-gray-300 text-gray-900 p-2 rounded-md mb-1 shadow-2xl">
<p class="font-bold text-primary text-sm">
{weapons[weapon.id].skill.name}
</p>
<p class="text-gray-900 text-sm break-words" style="filter: brightness(0);">
{@html weapons[weapon.id].skill.description}
</p>
<div class="flex mt-2">
<div class="mr-4">
<p class="font-bold text-primary text-sm">{$t('weapon.atk')}</p>
<p class="text-gray-900 text-sm">{Math.round(weapons[weapon.id].atk[96])}</p>
</div>
{#if weapons[weapon.id].secondary.stats}
<div>
<p class="font-bold text-primary text-sm">
{$t(`weapon.${weapons[weapon.id].secondary.name}`)}
</p>
<p class="text-gray-900 text-sm">
{formatStat(weapons[weapon.id].secondary.stats[96], weapons[weapon.id].secondary.name)}
</p>
<div class="flex -mx-4 flex-wrap">
<div class="mt-4 mx-4 -mb-1">
<h4 class="font-black font-display text-lg">{$t('characters.weapons')}</h4>
{#each build.weapons as weapon, i}
<a class="popup flex mb-1" href="/weapons/{weapon.id}">
<div class="popup-container">
<div class="bg-gray-300 text-gray-900 p-2 rounded-md mb-1 shadow-2xl">
<p class="font-bold text-primary text-sm">
{weapons[weapon.id].skill.name}
</p>
<p class="text-gray-900 text-sm break-words" style="filter: brightness(0);">
{@html weapons[weapon.id].skill.description}
</p>
<div class="flex mt-2">
<div class="mr-4">
<p class="font-bold text-primary text-sm">{$t('weapon.atk')}</p>
<p class="text-gray-900 text-sm">{Math.round(weapons[weapon.id].atk[96])}</p>
</div>
{#if weapons[weapon.id].secondary.stats}
<div>
<p class="font-bold text-primary text-sm">
{$t(`weapon.${weapons[weapon.id].secondary.name}`)}
</p>
<p class="text-gray-900 text-sm">
{formatStat(weapons[weapon.id].secondary.stats[96], weapons[weapon.id].secondary.name)}
</p>
</div>
{/if}
</div>
</div>
</div>
<div class="flex items-center bg-background rounded-md p-1 mr-1">
<p class="w-6 text-center mr-1" style="padding-top: 2px;">{i + 1}</p>
<Icon className={rarityColor[weaponList[weapon.id].rarity]} path={mdiStar} size={0.8} />
<img class="h-8 mr-2 ml-2" src="/images/weapons/{weapon.id}.png" alt={weaponList[weapon.id].name} />
<p class="pl-1 pr-2" style="padding-top: 2px;">
<span>{$t(weaponList[weapon.id].name)}</span>
{#if weapon.refine}
<span class="ml-2 bg-blue-300 rounded-md px-1 text-sm text-gray-900"
>R{weapon.refine.join('-')}</span
>
{/if}
{#if weapon.stack}
<Tooltip title="Stack">
<span class="ml-2 bg-orange-300 rounded-md px-1 text-sm text-gray-900">S{weapon.stack}</span>
</Tooltip>
{/if}
</p>
</div>
</a>
{/each}
</div>
<div class="mt-4 mx-4 -mb-1 md:max-w-screen-sm">
<h4 class="font-black font-display text-lg">{$t('characters.artifacts')}</h4>
{#each build.artifacts as item, i}
<div class="flex mb-1">
<div class="flex items-center justify-center bg-background rounded-md px-1 mr-1">
<p class="w-6 text-center" style="min-width: 1.5rem; padding-top: 2px;">{i + 1}</p>
<div class="flex flex-wrap -mb-1">
{#each item as artifact, i}
{#if item.length > 2 && i === 0}
<div
class="flex items-center justify-center bg-background rounded-md px-2 py-1 mb-1 mr-1"
style="height: 40px;"
>
<p class="text-center whitespace-nowrap text-primary" style="padding-top: 2px;">
{$t('artifact.choose2')}
</p>
</div>
{/if}
<a
class="popup bg-background rounded-md py-1 pl-1 pr-2 mr-1 mb-1 flex items-center"
href={artifact.startsWith('+') ? undefined : `/artifacts/${artifact}`}
>
<div class="popup-container">
<div class="bg-gray-300 text-gray-900 p-2 rounded-md mb-1 shadow-2xl">
{#if !artifact.startsWith('+')}
{#each artifacts[artifact].bonuses as bonus, i}
<div class={i === 1 ? 'mt-2' : ''}>
<p class="font-bold text-primary text-sm">
{$t('artifact.setPiece', { values: { piece: (i + 1) * 2 } })}
</p>
<p class="text-gray-900 text-sm">{bonus}</p>
</div>
{/each}
{:else if artifact === '+18%_atk_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/gladiators_finale"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/gladiators_finale_flower.png"
alt="Gladiator's Finale"
/>
<span class="font-semibold">{$t("Gladiator's Finale")}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 py-1 border-b border-gray-400"
href="/artifacts/shimenawas_reminiscence"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/shimenawas_reminiscence_flower.png"
alt="Shimenawa's Reminiscence"
/>
<span class="font-semibold">{$t("Shimenawa's Reminiscence")}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 py-1 border-b border-gray-400"
href="/artifacts/vermillion_hereafter"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/vermillion_hereafter_flower.png"
alt="Vermillion Hereafter"
/>
<span class="font-semibold">{$t('Vermillion Hereafter')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/echoes_of_an_offering"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/echoes_of_an_offering_flower.png"
alt="Echoes of an Offering"
/>
<span class="font-semibold">{$t('Echoes of an Offering')}</span>
</a>
{:else if artifact === '+20%_energy_recharge'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/emblem_of_severed_fate"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/emblem_of_severed_fate_flower.png"
alt="Emblem of Severed Fate"
/>
<span class="font-semibold">{$t('Emblem of Severed Fate')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 py-1 border-b border-gray-400"
href="/artifacts/the_exile"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/the_exile_flower.png"
alt="The Exile"
/>
<span class="font-semibold">{$t('The Exile')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/scholar"
>
<img class="h-8 ml-1 mr-2" src="/images/artifacts/scholar_flower.png" alt="Scholar" />
<span class="font-semibold">{$t('Scholar')}</span>
</a>
{:else if artifact === '+25%_physical_dmg'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/bloodstained_chivalry"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/bloodstained_chivalry_flower.png"
alt="Bloodstained Chivalry"
/>
<span class="font-semibold">{$t('Bloodstained Chivalry')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/pale_flame"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/pale_flame_flower.png"
alt="Pale Flame"
/>
<span class="font-semibold">{$t('Pale Flame')}</span>
</a>
{:else if artifact === '+20%_hp_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/tenacity_of_the_millelith"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/tenacity_of_the_millelith_flower.png"
alt="Tenacity of the Millelith"
/>
<span class="font-semibold">{$t('Tenacity of the Millelith')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/vourukashas_glow"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/vourukashas_glow_flower.png"
alt="Vourukasha's Glow"
/>
<span class="font-semibold">{$t("Vourukasha's Glow")}</span>
</a>
{:else if artifact === '+15%_anemo_dmg_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/viridescent_venerer"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/viridescent_venerer_flower.png"
alt="Viridescent Venerer"
/>
<span class="font-semibold">{$t('Viridescent Venerer')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/desert_pavilion_chronicle"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/desert_pavilion_chronicle_flower.png"
alt="Desert Pavilion Chronicle"
/>
<span class="font-semibold">{$t('Desert Pavilion Chronicle')}</span>
</a>
{:else if artifact === '+15%_hydro_dmg_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/heart_of_depth"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/heart_of_depth_flower.png"
alt="Heart of Depth"
/>
<span class="font-semibold">{$t('Heart of Depth')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/nymphs_dream"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/nymphs_dream_flower.png"
alt="Nymph's Dream"
/>
<span class="font-semibold">{$t("Nymph's Dream")}</span>
</a>
{:else if artifact === '+80_em'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/gilded_dreams"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/gilded_dreams_flower.png"
alt="Gilded Dreams"
/>
<span class="font-semibold">{$t('Gilded Dreams')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/wanderers_troupe"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/wanderers_troupe_flower.png"
alt="Wanderer's Troupe"
/>
<span class="font-semibold">{$t("Wanderer's Troupe")}</span>
</a>
{:else if artifact === '+15%_healing_bonus_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/ocean-hued_clam"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/ocean-hued_clam_flower.png"
alt="Ocean-Hued Clam"
/>
<span class="font-semibold">{$t('Ocean-Hued Clam')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/maiden_beloved"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/maiden_beloved_flower.png"
alt="Maiden Beloved"
/>
<span class="font-semibold">{$t('Maiden Beloved')}</span>
</a>
{/if}
</div>
</div>
<img
class="h-8 mr-2"
src="/images/artifacts/{getArtifactCommon(artifact)}_flower.png"
alt={artifact}
/>
<span style="padding-top: 2px;">
{$t(getArtifactCommonName(artifact))}
</span>
<span class="ml-2 bg-gray-400 rounded-md px-1 text-sm text-gray-900">
{item.length === 1 ? '4' : '2'}
</span>
</a>
{/each}
</div>
</div>
</div>
<div class="flex items-center bg-background rounded-md p-1 mr-1">
<p class="w-6 text-center mr-1" style="padding-top: 2px;">{i + 1}</p>
<Icon className={rarityColor[weaponList[weapon.id].rarity]} path={mdiStar} size={0.8} />
<img class="h-8 mr-2 ml-2" src="/images/weapons/{weapon.id}.png" alt={weaponList[weapon.id].name} />
<p class="pl-1 pr-2" style="padding-top: 2px;">
<span>{$t(weaponList[weapon.id].name)}</span>
{#if weapon.refine}
<span class="ml-2 bg-blue-300 rounded-md px-1 text-sm text-gray-900"
>R{weapon.refine.join('-')}</span
>
{/if}
{#if weapon.stack}
<Tooltip title="Stack">
<span class="ml-2 bg-orange-300 rounded-md px-1 text-sm text-gray-900">S{weapon.stack}</span>
</Tooltip>
{/if}
</p>
</div>
</a>
{/each}
</div>
<div class="mt-4 mx-4 -mb-1 md:max-w-screen-sm">
<h4 class="font-black font-display text-lg">{$t('characters.artifacts')}</h4>
{#each build.artifacts as item, i}
<div class="flex mb-1">
<div class="flex items-center justify-center bg-background rounded-md px-1 mr-1">
<p class="w-6 text-center" style="min-width: 1.5rem; padding-top: 2px;">{i + 1}</p>
<div class="flex flex-wrap -mb-1">
{#each item as artifact, i}
{#if item.length > 2 && i === 0}
<div
class="flex items-center justify-center bg-background rounded-md px-2 py-1 mb-1 mr-1"
style="height: 40px;"
>
<p class="text-center whitespace-nowrap text-primary" style="padding-top: 2px;">
{$t('artifact.choose2')}
</p>
</div>
{/if}
<a
class="popup bg-background rounded-md py-1 pl-1 pr-2 mr-1 mb-1 flex items-center"
href={artifact.startsWith('+') ? undefined : `/artifacts/${artifact}`}
>
<div class="popup-container">
<div class="bg-gray-300 text-gray-900 p-2 rounded-md mb-1 shadow-2xl">
{#if !artifact.startsWith('+')}
{#each artifacts[artifact].bonuses as bonus, i}
<div class={i === 1 ? 'mt-2' : ''}>
<p class="font-bold text-primary text-sm">
{$t('artifact.setPiece', { values: { piece: (i + 1) * 2 } })}
</p>
<p class="text-gray-900 text-sm">{bonus}</p>
</div>
{/each}
{:else if artifact === '+18%_atk_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/gladiators_finale"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/gladiators_finale_flower.png"
alt="Gladiator's Finale"
/>
<span class="font-semibold">{$t("Gladiator's Finale")}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 py-1 border-b border-gray-400"
href="/artifacts/shimenawas_reminiscence"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/shimenawas_reminiscence_flower.png"
alt="Shimenawa's Reminiscence"
/>
<span class="font-semibold">{$t("Shimenawa's Reminiscence")}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 py-1 border-b border-gray-400"
href="/artifacts/vermillion_hereafter"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/vermillion_hereafter_flower.png"
alt="Vermillion Hereafter"
/>
<span class="font-semibold">{$t('Vermillion Hereafter')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/echoes_of_an_offering"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/echoes_of_an_offering_flower.png"
alt="Echoes of an Offering"
/>
<span class="font-semibold">{$t('Echoes of an Offering')}</span>
</a>
{:else if artifact === '+20%_energy_recharge'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/emblem_of_severed_fate"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/emblem_of_severed_fate_flower.png"
alt="Emblem of Severed Fate"
/>
<span class="font-semibold">{$t('Emblem of Severed Fate')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 py-1 border-b border-gray-400"
href="/artifacts/the_exile"
>
<img class="h-8 ml-1 mr-2" src="/images/artifacts/the_exile_flower.png" alt="The Exile" />
<span class="font-semibold">{$t('The Exile')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/scholar"
>
<img class="h-8 ml-1 mr-2" src="/images/artifacts/scholar_flower.png" alt="Scholar" />
<span class="font-semibold">{$t('Scholar')}</span>
</a>
{:else if artifact === '+25%_physical_dmg'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/bloodstained_chivalry"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/bloodstained_chivalry_flower.png"
alt="Bloodstained Chivalry"
/>
<span class="font-semibold">{$t('Bloodstained Chivalry')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/pale_flame"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/pale_flame_flower.png"
alt="Pale Flame"
/>
<span class="font-semibold">{$t('Pale Flame')}</span>
</a>
{:else if artifact === '+80_em'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/gilded_dreams"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/gilded_dreams_flower.png"
alt="Gilded Dreams"
/>
<span class="font-semibold">{$t('Gilded Dreams')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/wanderers_troupe"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/wanderers_troupe_flower.png"
alt="Wanderer's Troupe"
/>
<span class="font-semibold">{$t("Wanderer's Troupe")}</span>
</a>
{:else if artifact === '+15%_healing_bonus_set'}
<a
class="flex items-center text-primary hover:text-blue-400 pb-1 border-b border-gray-400"
href="/artifacts/ocean-hued_clam"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/ocean-hued_clam_flower.png"
alt="Ocean-Hued Clam"
/>
<span class="font-semibold">{$t('Ocean-Hued Clam')}</span>
</a>
<a
class="flex items-center text-primary hover:text-blue-400 pt-1"
href="/artifacts/maiden_beloved"
>
<img
class="h-8 ml-1 mr-2"
src="/images/artifacts/maiden_beloved_flower.png"
alt="Maiden Beloved"
/>
<span class="font-semibold">{$t('Maiden Beloved')}</span>
</a>
{/if}
</div>
</div>
<img
class="h-8 mr-2"
src="/images/artifacts/{getArtifactCommon(artifact)}_flower.png"
alt={artifact}
/>
<span style="padding-top: 2px;">
{$t(getArtifactCommonName(artifact))}
</span>
<span class="ml-2 bg-gray-400 rounded-md px-1 text-sm text-gray-900">
{item.length === 1 ? '4' : '2'}
</span>
</a>
{/each}
</div>
</div>
</div>
{/each}
{/each}
</div>
</div>
</div>
</div>
</div>
<a
class="mx-4 md:mx-8 px-2 py-1 bg-background hover:bg-item text-primary mt-2 rounded-md inline-block"
href="https://tinyurl.com/genshinbuilds"
target="_blank"
>
{$t('characters.source')}
</a>
<a
class="mx-4 md:mx-8 px-2 py-1 bg-background hover:bg-item text-primary mt-2 rounded-md inline-block"
href="https://tinyurl.com/genshinbuilds"
target="_blank"
>
{$t('characters.source')}
</a>
{/if}
<Ad class="mt-2 max-w-screen-2xl flex justify-center" type="desktop" variant="lb" id="2" />
<Ad type="mobile" variant="lb" id="2" />
<div class="flex flex-col mt-4 text-white px-4 md:px-8 max-w-screen-2xl" bind:this={talentDiv}>

View file

@ -1,6 +1,6 @@
<script context="module">
export async function load({ fetch }) {
const promoted = ['yoimiya', 'yae_miko'];
const promoted = ['eula', 'klee'];
const builds = {};
for (const p of promoted) {
const response = await fetch(`/characters/build/${p}.json`);

View file

@ -94,8 +94,8 @@
},
};
let powershellScript = `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex "&{$((New-Object System.Net.WebClient).DownloadString('https://gist.githubusercontent.com/MadeBaruna/1d75c1d37d19eca71591ec8a31178235/raw/702e34117b07294e6959928963b76cfdafdd94f3/getlink.ps1'))} global"`;
let powershellScriptChina = `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex "&{$((New-Object System.Net.WebClient).DownloadString('https://gist.githubusercontent.com/MadeBaruna/1d75c1d37d19eca71591ec8a31178235/raw/702e34117b07294e6959928963b76cfdafdd94f3/getlink.ps1'))} china"`;
let powershellScript = `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex "&{$((New-Object System.Net.WebClient).DownloadString('https://gist.githubusercontent.com/MadeBaruna/1d75c1d37d19eca71591ec8a31178235/raw/649a9e3a4e88f3bffdd0fe6dd8eeed23737b15da/getlink.ps1'))} global"`;
let powershellScriptChina = `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex "&{$((New-Object System.Net.WebClient).DownloadString('https://gist.githubusercontent.com/MadeBaruna/1d75c1d37d19eca71591ec8a31178235/raw/649a9e3a4e88f3bffdd0fe6dd8eeed23737b15da/getlink.ps1'))} china"`;
let powershellScriptSource = 'https://gist.github.com/MadeBaruna/1d75c1d37d19eca71591ec8a31178235';
let powershellScriptAlt = `iex('Write-Host "Copy the wish history table!";while(1) { $c = Get-Clipboard -TextFormatType Html; if ($c -match "^SourceURL:https:/.+log") { break; }; for($i=5; $i -gt 0; $i--) { Write-Host "\`rChecking in $i" -NoNewline; Sleep 1; }; }; Write-Host " OK"; $m=(((Get-Clipboard -TextFormatType Html) | Select-String "(https:/.+log)").Matches[0].Value);$m; Set-Clipboard -Value $m;')`;
let powershellScriptAlt2 =
@ -902,10 +902,10 @@
</h1>
<div class="mt-4 mb-4 md:flex items-center bg-background rounded-xl p-4 relative">
<img class="h-16 hidden md:block mr-0" src="/images/paimon_faq.png" alt="Paimon" />
<div class="md:ml-4 ">
<div class="md:ml-4">
<p class="text-white font-bold">{$t('wish.import.header.0')}</p>
<p class="text-gray-200 text-sm">{$t('wish.import.header.1')}</p>
<div class="flex items-center mt-2 md:mt-0 bg-background-secondary md:bg-transparent p-2 md:p-0 rounded-xl ">
<div class="flex items-center mt-2 md:mt-0 bg-background-secondary md:bg-transparent p-2 md:p-0 rounded-xl">
<img class="h-16 md:hidden mr-2" src="/images/paimon_faq.png" alt="Paimon" />
<p class="text-yellow-300 text-sm">{$t('wish.import.header.2')}</p>
</div>
@ -1391,7 +1391,7 @@
<div class="flex">
<div class="flex mr-4">
<button
class="text-green-400 border-r border-t-2 border-b-2 border-l-2 border-white border-opacity-25 rounded-l-xl
class="text-green-400 border-r border-t-2 border-b-2 border-l-2 border-white border-opacity-25 rounded-l-xl
px-4 py-2 transition duration-100 focus:border-green-400 hover:border-green-400 focus:outline-none"
on:click={startImport}
>

View file

@ -7,7 +7,7 @@ const IMAGE_CACHE = `cacheimg${IMAGE_CACHE_VER}`;
const IMAGE_URL = `${self.location.origin}/images/`;
const changelog = ['Add Kirara', 'Update banners', 'Update timeline', 'Update achievements'];
const changelog = ['Update achievement', 'Update import on pc', 'Update banners', 'Update timeline'];
const channel = new BroadcastChannel('paimonmoe-sw');

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB