Add Eula and new weapon
Also update wish tally banners
1841
src/data/characterData/eula.json
Normal file
|
@ -572,6 +572,77 @@ export const characters = {
|
|||
boss: itemList.shard_of_a_foul_legacy,
|
||||
},
|
||||
},
|
||||
eula: {
|
||||
name: 'Eula',
|
||||
id: 'eula',
|
||||
rarity: 5,
|
||||
element: elements.cryo,
|
||||
weapon: weapons.claymore,
|
||||
sex: 'female',
|
||||
nation: 'mondstadt',
|
||||
ascension: [
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.shivada_jade_chunk, amount: 1 },
|
||||
{ item: itemList.none, amount: null },
|
||||
{ item: itemList.dandelion_seed, amount: 3 },
|
||||
{ item: itemList.damaged_mask, amount: 3 },
|
||||
],
|
||||
mora: 20000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.shivada_jade_fragment, amount: 3 },
|
||||
{ item: itemList.crystalline_bloom, amount: 2 },
|
||||
{ item: itemList.dandelion_seed, amount: 10 },
|
||||
{ item: itemList.damaged_mask, amount: 15 },
|
||||
],
|
||||
mora: 40000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.shivada_jade_fragment, amount: 6 },
|
||||
{ item: itemList.crystalline_bloom, amount: 4 },
|
||||
{ item: itemList.dandelion_seed, amount: 20 },
|
||||
{ item: itemList.stained_mask, amount: 12 },
|
||||
],
|
||||
mora: 60000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.shivada_jade_chunk, amount: 3 },
|
||||
{ item: itemList.crystalline_bloom, amount: 8 },
|
||||
{ item: itemList.dandelion_seed, amount: 30 },
|
||||
{ item: itemList.stained_mask, amount: 18 },
|
||||
],
|
||||
mora: 80000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.shivada_jade_chunk, amount: 6 },
|
||||
{ item: itemList.crystalline_bloom, amount: 12 },
|
||||
{ item: itemList.dandelion_seed, amount: 45 },
|
||||
{ item: itemList.ominous_mask, amount: 12 },
|
||||
],
|
||||
mora: 100000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.shivada_jade_gemstone, amount: 6 },
|
||||
{ item: itemList.crystalline_bloom, amount: 20 },
|
||||
{ item: itemList.dandelion_seed, amount: 60 },
|
||||
{ item: itemList.ominous_mask, amount: 24 },
|
||||
],
|
||||
mora: 120000,
|
||||
},
|
||||
],
|
||||
stats: { hp: 12296, atk: 318, def: 698 },
|
||||
material: {
|
||||
book: [itemList.teachings_of_resistance, itemList.guide_to_resistance, itemList.philosophies_of_resistance],
|
||||
material: [itemList.damaged_mask, itemList.stained_mask, itemList.ominous_mask],
|
||||
boss: itemList.dragon_lords_crown,
|
||||
},
|
||||
},
|
||||
fischl: {
|
||||
name: 'Fischl',
|
||||
id: 'fischl',
|
||||
|
|
|
@ -635,5 +635,7 @@ export const itemList = {
|
|||
qingxin: { id: 'qingxin', name: 'Qingxin' },
|
||||
shadow_of_the_warrior: { id: 'shadow_of_the_warrior', name: 'Shadow of the Warrior' },
|
||||
juvenile_jade: { id: 'juvenile_jade', name: 'Juvenile Jade', rarity: 5 },
|
||||
bloodjade_branch: { id: 'bloodjade_branch', name: 'Bloodjade Branch', rarity: 5 }
|
||||
bloodjade_branch: { id: 'bloodjade_branch', name: 'Bloodjade Branch', rarity: 5 },
|
||||
crystalline_bloom: { id: 'crystalline_bloom', name: 'Crystalline Bloom', rarity: 5 },
|
||||
dragon_lords_crown: { id: 'dragon_lords_crown', name: "Dragon Lord's Crown", rarity: 5 }
|
||||
};
|
||||
|
|
|
@ -6374,5 +6374,63 @@ export const weaponList = {
|
|||
},
|
||||
],
|
||||
},
|
||||
|
||||
song_of_broken_pines: {
|
||||
name: "Song of Broken Pines",
|
||||
id: 'song_of_broken_pines',
|
||||
rarity: 5,
|
||||
atk: 46,
|
||||
secondary: 'Physical DMG Bonus',
|
||||
type: weapons.claymore,
|
||||
source: 'wish',
|
||||
ascension: [
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.tile_of_decarabians_tower, amount: 5 },
|
||||
{ item: itemList.heavy_horn, amount: 5 },
|
||||
{ item: itemList.damaged_mask, amount: 3 },
|
||||
],
|
||||
mora: 10000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.debris_of_decarabians_city, amount: 5 },
|
||||
{ item: itemList.heavy_horn, amount: 18 },
|
||||
{ item: itemList.damaged_mask, amount: 12 },
|
||||
],
|
||||
mora: 20000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.debris_of_decarabians_city, amount: 9 },
|
||||
{ item: itemList.black_bronze_horn, amount: 9 },
|
||||
{ item: itemList.stained_mask, amount: 9 },
|
||||
],
|
||||
mora: 30000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.fragment_of_decarabians_epic, amount: 5 },
|
||||
{ item: itemList.black_bronze_horn, amount: 18 },
|
||||
{ item: itemList.stained_mask, amount: 14 },
|
||||
],
|
||||
mora: 45000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.fragment_of_decarabians_epic, amount: 9 },
|
||||
{ item: itemList.black_crystal_horn, amount: 14 },
|
||||
{ item: itemList.ominous_mask, amount: 9 },
|
||||
],
|
||||
mora: 55000,
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ item: itemList.scattered_piece_of_decarabians_dream, amount: 6 },
|
||||
{ item: itemList.black_crystal_horn, amount: 27 },
|
||||
{ item: itemList.ominous_mask, amount: 18 },
|
||||
],
|
||||
mora: 65000,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
|
@ -19,8 +19,7 @@
|
|||
"message": "Your best Genshin Impact companion! Help you plan what to farm with ascension calculator, also track your progress with todo and wish counter.",
|
||||
"banner": {
|
||||
"featured": [
|
||||
"Zhongli",
|
||||
"Yanfei"
|
||||
"Eula"
|
||||
],
|
||||
"summoned": "Summoned",
|
||||
"percentage": "from all {rarity}",
|
||||
|
|
|
@ -17,10 +17,6 @@
|
|||
"welcome": "Paimon.moe에 어서오세요! 👋",
|
||||
"message": "최고의 원신 동반자! 돌파 계산기로 파밍 계획을 도와주고, 할 일 목록과 기원 통계를 통해 진척도를 확인해줍니다.",
|
||||
"banner": {
|
||||
"featured": [
|
||||
"종려",
|
||||
"연비"
|
||||
],
|
||||
"summoned": "획득",
|
||||
"percentage": "(모든 {rarity} 중)",
|
||||
"avg": "평균 천장",
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
"welcome": "Добро пожаловать на Paimon.moe! 👋",
|
||||
"message": "Твой лучший компаньон в Genshin Impact! Поможет тебе распланировать что фармить в калькуляторе возвышения, а также отслеживать свой прогресс с помощью счетчика молитв и cписка дел",
|
||||
"banner": {
|
||||
"featured": [
|
||||
"Чжун Ли",
|
||||
"Янь Фэй"
|
||||
],
|
||||
"summoned": "Призывов",
|
||||
"percentage": "из всех {rarity}",
|
||||
"avg": "Среднее число молитв",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { mdiChevronRight, mdiEarth, mdiLoading, mdiStar } from '@mdi/js';
|
||||
import { mdiChevronRight, mdiEarth, mdiLoading } from '@mdi/js';
|
||||
import { onMount, createEventDispatcher, tick } from 'svelte';
|
||||
|
||||
import { t } from 'svelte-i18n';
|
||||
|
@ -13,21 +13,15 @@
|
|||
const dispatch = createEventDispatcher();
|
||||
|
||||
const featured = {
|
||||
zhongli: {
|
||||
eula: {
|
||||
rarity: 'legendary',
|
||||
count: 0,
|
||||
average: '...',
|
||||
percentage: '...',
|
||||
},
|
||||
yanfei: {
|
||||
rarity: 'rare',
|
||||
count: 0,
|
||||
average: '...',
|
||||
percentage: '...',
|
||||
},
|
||||
};
|
||||
const bannerId = 300012;
|
||||
const image = 'zhongliyanfei.png';
|
||||
const bannerId = 300013;
|
||||
const image = 'eula.png';
|
||||
|
||||
let loading = true;
|
||||
let user = '';
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
const { id } = page.params;
|
||||
return { id };
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
@ -93,7 +94,7 @@
|
|||
e.percentage = rarity === 5 ? e.count / data.total.legendary : e.count / totalRare;
|
||||
}
|
||||
|
||||
if (banner.featured.includes(e.name)) {
|
||||
if (id !== '200001' && banner.featured.includes(e.name)) {
|
||||
totalGuarantee = e.guaranteed;
|
||||
totalFeatured = e.count;
|
||||
}
|
||||
|
@ -134,18 +135,13 @@
|
|||
onMount(() => {
|
||||
getData();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Wish Tally - Paimon.moe</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Genshin Impact Wish Tally average pity percentage from paimon.moe users"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Genshin Impact Wish Tally average pity percentage from paimon.moe users"
|
||||
/>
|
||||
<meta name="description" content="Genshin Impact Wish Tally average pity percentage from paimon.moe users" />
|
||||
<meta property="og:description" content="Genshin Impact Wish Tally average pity percentage from paimon.moe users" />
|
||||
</svelte:head>
|
||||
<div>
|
||||
<div class="lg:ml-64 pt-20 lg:pt-8">
|
||||
|
@ -155,57 +151,59 @@
|
|||
</p>
|
||||
</div>
|
||||
<div class="lg:ml-64 px-8">
|
||||
<div class="flex items-end">
|
||||
<img src="/images/banners/{banner.name} {banner.image}.png" alt={banner.name} class="rounded-xl h-64" />
|
||||
<div class="flex flex-col lg:flex-row items-end">
|
||||
<img src="/images/banners/{banner.name} {banner.image}.png" alt={banner.name} class="rounded-xl w-full h-auto lg:h-64 lg:w-auto" />
|
||||
{#if loading}
|
||||
<Icon className="m-4" path={mdiLoading} color="white" size={2} spin />
|
||||
{:else}
|
||||
<div class="border border-gray-700 rounded-xl ml-4" style="width: fit-content; height: fit-content;">
|
||||
<table class="text-white">
|
||||
<tr>
|
||||
<td class="px-2 border-b border-r border-gray-700">Last Update</td>
|
||||
<td class="px-2 border-b border-gray-700">{dayjs(data.time).fromNow()}</td>
|
||||
<td class="px-2 border-r border-gray-700">Last Update</td>
|
||||
<td class="px-2 border-gray-700">{dayjs(data.time).fromNow()}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-2 border-b border-r border-gray-700">Wish Total</td>
|
||||
<td class="px-2 border-b border-gray-700">{numberFormat.format(data.total.all)}</td>
|
||||
<td class="px-2 border-t border-r border-gray-700">Wish Total</td>
|
||||
<td class="px-2 border-t border-gray-700">{numberFormat.format(data.total.all)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-2 border-b border-r border-gray-700">Total User</td>
|
||||
<td class="px-2 border-b border-gray-700">{numberFormat.format(data.total.users)}</td>
|
||||
<td class="px-2 border-t border-r border-gray-700">Total User</td>
|
||||
<td class="px-2 border-t border-gray-700">{numberFormat.format(data.total.users)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-2 border-b border-r border-gray-700">5★ Median</td>
|
||||
<td class="px-2 border-b border-gray-700">{numberFormat.format(data.median.legendary)}</td>
|
||||
<td class="px-2 border-t border-r border-gray-700">5★ Median</td>
|
||||
<td class="px-2 border-t border-gray-700">{numberFormat.format(data.median.legendary)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-2 border-b border-r border-gray-700">Total 5★</td>
|
||||
<td class="px-2 border-b border-gray-700">
|
||||
<td class="px-2 border-t border-r border-gray-700">Total 5★</td>
|
||||
<td class="px-2 border-t border-gray-700">
|
||||
{numberFormat.format(data.total.legendary)}
|
||||
({numberFormat.format((data.total.legendary / data.total.all) * 100)}%)
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-2 border-b border-r border-gray-700">Total 4★</td>
|
||||
<td class="px-2 border-b border-gray-700">
|
||||
<td class="px-2 border-t border-r border-gray-700">Total 4★</td>
|
||||
<td class="px-2 border-t border-gray-700">
|
||||
{numberFormat.format(data.total.rare)}
|
||||
({numberFormat.format((data.total.rare / data.total.all) * 100)}%)
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-2 border-r border-gray-700">Won 50:50</td>
|
||||
<td class="px-2 border-gray-700">
|
||||
{numberFormat.format(
|
||||
((totalFeatured - totalGuarantee) / (data.total.legendary - totalGuarantee)) * 100,
|
||||
)}%
|
||||
</td>
|
||||
</tr>
|
||||
{#if id > 300000 && id < 400000}
|
||||
<tr>
|
||||
<td class="px-2 border-t border-r border-gray-700">Won 50:50</td>
|
||||
<td class="px-2 border-t border-gray-700">
|
||||
{numberFormat.format(
|
||||
((totalFeatured - totalGuarantee) / (data.total.legendary - totalGuarantee)) * 100,
|
||||
)}%
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{#if !loading}
|
||||
<div class="flex space-x-4">
|
||||
<div class="flex flex-col lg:flex-row space-y-4 lg:space-x-4">
|
||||
<div
|
||||
class="border border-gray-700 rounded-xl mt-4 overflow-hidden"
|
||||
style="width: fit-content; height: fit-content;"
|
||||
|
|
|
@ -143,14 +143,14 @@
|
|||
guaranteed: item.guaranteed,
|
||||
percentage:
|
||||
(item.count /
|
||||
(type === 'character' && id !== 200002 && i === 1 ? data.total.rare : data.total.legendary)) *
|
||||
(type === 'character' && id !== 200001 && i === 1 ? data.total.rare : data.total.legendary)) *
|
||||
100,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// only for standard banner
|
||||
if (id === 200002) {
|
||||
if (id === 200001) {
|
||||
const values = [0, 0];
|
||||
|
||||
for (let i = 0; i < data.list.length; i++) {
|
||||
|
@ -284,11 +284,18 @@
|
|||
onMount(() => {
|
||||
getData();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<div class="flex flex-col bg-item rounded-xl px-4 pt-4 pb-2 mb-4 space-y-4">
|
||||
<div class="flex flex-col xl:flex-row">
|
||||
<img src="/images/banners/{banner.name} {banner.image}.png" alt={banner.name} class="rounded-xl xl:h-64 xl:mr-4" />
|
||||
<a href="/wish/tally/{id}">
|
||||
<img
|
||||
src="/images/banners/{banner.name} {banner.image}.png"
|
||||
alt={banner.name}
|
||||
class="rounded-xl xl:h-64 xl:mr-4"
|
||||
/>
|
||||
</a>
|
||||
<div class="h-4 xl:h-0" />
|
||||
{#if loading}
|
||||
<Icon className="m-4" path={mdiLoading} color="white" size={2} spin />
|
||||
|
@ -298,7 +305,7 @@
|
|||
class="flex flex-row items-center bg-background rounded-xl py-2 relative px-4 mb-2 flex-1 cursor-pointer"
|
||||
on:click={toggleLegendaryList}
|
||||
>
|
||||
{#if id === 200002}
|
||||
{#if id === 200001}
|
||||
<table class="flex-1">
|
||||
<tr>
|
||||
<td
|
||||
|
@ -645,4 +652,5 @@
|
|||
@apply -rotate-90;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -25,17 +25,32 @@
|
|||
</p>
|
||||
|
||||
<div class="px-4 md:px-8">
|
||||
<ItemNew type="character" banner={banners.characters[12]} id={300013} featured={['eula']} />
|
||||
<ItemNew
|
||||
type="weapon"
|
||||
banner={banners.weapons[11]}
|
||||
id={400012}
|
||||
featured={['song_of_broken_pines', 'aquila_favonia']}
|
||||
/>
|
||||
<ItemNew type="character" banner={banners.characters[11]} id={300012} featured={['zhongli', 'yanfei']} />
|
||||
<ItemNew type="weapon" banner={banners.weapons[10]} id={400011} featured={['summit_shaper', 'memory_of_dust']} />
|
||||
<Item type="character" banner={banners.characters[10]} id={300011} featured={['tartaglia', 'rosaria']} />
|
||||
<Item
|
||||
type="weapon"
|
||||
banner={banners.weapons[9]}
|
||||
id={400010}
|
||||
featured={['skyward_harp', 'lost_prayer_to_the_sacred_winds']}
|
||||
/>
|
||||
<Item type="character" banner={banners.standard[0]} id={200002} />
|
||||
<ItemNew type="character" banner={banners.standard[0]} id={200001} />
|
||||
{#if showOld[0]}
|
||||
<Item type="character" banner={banners.characters[10]} id={300011} featured={['tartaglia', 'rosaria']} />
|
||||
<Item
|
||||
type="weapon"
|
||||
banner={banners.weapons[9]}
|
||||
id={400010}
|
||||
featured={['skyward_harp', 'lost_prayer_to_the_sacred_winds']}
|
||||
/>
|
||||
{:else}
|
||||
<Button on:click={() => showOldTally(0)}>
|
||||
{$t('wish.tally.show')}
|
||||
{banners.characters[10].name} & {banners.weapons[9].name}
|
||||
</Button>
|
||||
<div class="mb-2" />
|
||||
{/if}
|
||||
{#if showOld[1]}
|
||||
<Item type="character" banner={banners.characters[9]} id={300010} featured={['venti']} />
|
||||
<Item
|
||||
type="weapon"
|
||||
|
@ -44,17 +59,17 @@
|
|||
featured={['skyward_harp', 'lost_prayer_to_the_sacred_winds']}
|
||||
/>
|
||||
{:else}
|
||||
<Button on:click={() => showOldTally(0)}>
|
||||
<Button on:click={() => showOldTally(1)}>
|
||||
{$t('wish.tally.show')}
|
||||
{banners.characters[9].name} & {banners.weapons[8].name}
|
||||
</Button>
|
||||
<div class="mb-2" />
|
||||
{/if}
|
||||
{#if showOld[1]}
|
||||
{#if showOld[2]}
|
||||
<Item type="character" banner={banners.characters[8]} id={300009} featured={['hu_tao']} />
|
||||
<Item type="weapon" banner={banners.weapons[7]} id={400008} featured={['wolfs_gravestone', 'staff_of_homa']} />
|
||||
{:else}
|
||||
<Button on:click={() => showOldTally(1)}>
|
||||
<Button on:click={() => showOldTally(2)}>
|
||||
{$t('wish.tally.show')}
|
||||
{banners.characters[8].name} & {banners.weapons[7].name}
|
||||
</Button>
|
||||
|
|
BIN
static/images/characters/eula.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
static/images/characters/full/eula.png
Normal file
After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 394 KiB After Width: | Height: | Size: 222 KiB |
BIN
static/images/home/eula.png
Normal file
After Width: | Height: | Size: 140 KiB |
BIN
static/images/items/crystalline_bloom.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
static/images/items/dragon_lords_crown.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
static/images/skills/eula/constellation_1.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
static/images/skills/eula/constellation_2.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
static/images/skills/eula/constellation_3.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
static/images/skills/eula/constellation_4.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
static/images/skills/eula/constellation_5.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
static/images/skills/eula/constellation_6.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
static/images/skills/eula/talent_1.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
static/images/skills/eula/talent_2.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
static/images/skills/eula/talent_3.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
static/images/skills/eula/talent_4.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
static/images/skills/eula/talent_5.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
static/images/skills/eula/talent_6.png
Normal file
After Width: | Height: | Size: 1 KiB |