Add Eula and new weapon

Also update wish tally banners
pull/1/head
Made Baruna 2021-05-18 16:49:34 +08:00
parent 90d087d64d
commit eaf1b7c74d
No known key found for this signature in database
GPG Key ID: 5AA5DA16AA5DCEAD
29 changed files with 2047 additions and 69 deletions

File diff suppressed because it is too large Load Diff

View File

@ -572,6 +572,77 @@ export const characters = {
boss: itemList.shard_of_a_foul_legacy, 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: { fischl: {
name: 'Fischl', name: 'Fischl',
id: 'fischl', id: 'fischl',

View File

@ -635,5 +635,7 @@ export const itemList = {
qingxin: { id: 'qingxin', name: 'Qingxin' }, qingxin: { id: 'qingxin', name: 'Qingxin' },
shadow_of_the_warrior: { id: 'shadow_of_the_warrior', name: 'Shadow of the Warrior' }, shadow_of_the_warrior: { id: 'shadow_of_the_warrior', name: 'Shadow of the Warrior' },
juvenile_jade: { id: 'juvenile_jade', name: 'Juvenile Jade', rarity: 5 }, 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 }
}; };

View File

@ -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,
},
],
},
}; };

View File

@ -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.", "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": { "banner": {
"featured": [ "featured": [
"Zhongli", "Eula"
"Yanfei"
], ],
"summoned": "Summoned", "summoned": "Summoned",
"percentage": "from all {rarity}", "percentage": "from all {rarity}",

View File

@ -17,10 +17,6 @@
"welcome": "Paimon.moe에 어서오세요! 👋", "welcome": "Paimon.moe에 어서오세요! 👋",
"message": "최고의 원신 동반자! 돌파 계산기로 파밍 계획을 도와주고, 할 일 목록과 기원 통계를 통해 진척도를 확인해줍니다.", "message": "최고의 원신 동반자! 돌파 계산기로 파밍 계획을 도와주고, 할 일 목록과 기원 통계를 통해 진척도를 확인해줍니다.",
"banner": { "banner": {
"featured": [
"종려",
"연비"
],
"summoned": "획득", "summoned": "획득",
"percentage": "(모든 {rarity} 중)", "percentage": "(모든 {rarity} 중)",
"avg": "평균 천장", "avg": "평균 천장",

View File

@ -18,10 +18,6 @@
"welcome": "Добро пожаловать на Paimon.moe! 👋", "welcome": "Добро пожаловать на Paimon.moe! 👋",
"message": "Твой лучший компаньон в Genshin Impact! Поможет тебе распланировать что фармить в калькуляторе возвышения, а также отслеживать свой прогресс с помощью счетчика молитв и cписка дел", "message": "Твой лучший компаньон в Genshin Impact! Поможет тебе распланировать что фармить в калькуляторе возвышения, а также отслеживать свой прогресс с помощью счетчика молитв и cписка дел",
"banner": { "banner": {
"featured": [
"Чжун Ли",
"Янь Фэй"
],
"summoned": "Призывов", "summoned": "Призывов",
"percentage": "из всех {rarity}", "percentage": "из всех {rarity}",
"avg": "Среднее число молитв", "avg": "Среднее число молитв",

View File

@ -1,5 +1,5 @@
<script> <script>
import { mdiChevronRight, mdiEarth, mdiLoading, mdiStar } from '@mdi/js'; import { mdiChevronRight, mdiEarth, mdiLoading } from '@mdi/js';
import { onMount, createEventDispatcher, tick } from 'svelte'; import { onMount, createEventDispatcher, tick } from 'svelte';
import { t } from 'svelte-i18n'; import { t } from 'svelte-i18n';
@ -13,21 +13,15 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
const featured = { const featured = {
zhongli: { eula: {
rarity: 'legendary', rarity: 'legendary',
count: 0, count: 0,
average: '...', average: '...',
percentage: '...', percentage: '...',
}, },
yanfei: {
rarity: 'rare',
count: 0,
average: '...',
percentage: '...',
},
}; };
const bannerId = 300012; const bannerId = 300013;
const image = 'zhongliyanfei.png'; const image = 'eula.png';
let loading = true; let loading = true;
let user = ''; let user = '';

View File

@ -3,6 +3,7 @@
const { id } = page.params; const { id } = page.params;
return { id }; return { id };
} }
</script> </script>
<script> <script>
@ -93,7 +94,7 @@
e.percentage = rarity === 5 ? e.count / data.total.legendary : e.count / totalRare; 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; totalGuarantee = e.guaranteed;
totalFeatured = e.count; totalFeatured = e.count;
} }
@ -134,18 +135,13 @@
onMount(() => { onMount(() => {
getData(); getData();
}); });
</script> </script>
<svelte:head> <svelte:head>
<title>Wish Tally - Paimon.moe</title> <title>Wish Tally - Paimon.moe</title>
<meta <meta name="description" content="Genshin Impact Wish Tally average pity percentage from paimon.moe users" />
name="description" <meta property="og:description" content="Genshin Impact Wish Tally average pity percentage from paimon.moe users" />
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> </svelte:head>
<div> <div>
<div class="lg:ml-64 pt-20 lg:pt-8"> <div class="lg:ml-64 pt-20 lg:pt-8">
@ -155,57 +151,59 @@
</p> </p>
</div> </div>
<div class="lg:ml-64 px-8"> <div class="lg:ml-64 px-8">
<div class="flex items-end"> <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 h-64" /> <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} {#if loading}
<Icon className="m-4" path={mdiLoading} color="white" size={2} spin /> <Icon className="m-4" path={mdiLoading} color="white" size={2} spin />
{:else} {:else}
<div class="border border-gray-700 rounded-xl ml-4" style="width: fit-content; height: fit-content;"> <div class="border border-gray-700 rounded-xl ml-4" style="width: fit-content; height: fit-content;">
<table class="text-white"> <table class="text-white">
<tr> <tr>
<td class="px-2 border-b border-r border-gray-700">Last Update</td> <td class="px-2 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-gray-700">{dayjs(data.time).fromNow()}</td>
</tr> </tr>
<tr> <tr>
<td class="px-2 border-b border-r border-gray-700">Wish Total</td> <td class="px-2 border-t 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-gray-700">{numberFormat.format(data.total.all)}</td>
</tr> </tr>
<tr> <tr>
<td class="px-2 border-b border-r border-gray-700">Total User</td> <td class="px-2 border-t 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-gray-700">{numberFormat.format(data.total.users)}</td>
</tr> </tr>
<tr> <tr>
<td class="px-2 border-b border-r border-gray-700">5★ Median</td> <td class="px-2 border-t 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-gray-700">{numberFormat.format(data.median.legendary)}</td>
</tr> </tr>
<tr> <tr>
<td class="px-2 border-b border-r border-gray-700">Total 5★</td> <td class="px-2 border-t border-r border-gray-700">Total 5★</td>
<td class="px-2 border-b border-gray-700"> <td class="px-2 border-t border-gray-700">
{numberFormat.format(data.total.legendary)} {numberFormat.format(data.total.legendary)}
({numberFormat.format((data.total.legendary / data.total.all) * 100)}%) ({numberFormat.format((data.total.legendary / data.total.all) * 100)}%)
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="px-2 border-b border-r border-gray-700">Total 4★</td> <td class="px-2 border-t border-r border-gray-700">Total 4★</td>
<td class="px-2 border-b border-gray-700"> <td class="px-2 border-t border-gray-700">
{numberFormat.format(data.total.rare)} {numberFormat.format(data.total.rare)}
({numberFormat.format((data.total.rare / data.total.all) * 100)}%) ({numberFormat.format((data.total.rare / data.total.all) * 100)}%)
</td> </td>
</tr> </tr>
<tr> {#if id > 300000 && id < 400000}
<td class="px-2 border-r border-gray-700">Won 50:50</td> <tr>
<td class="px-2 border-gray-700"> <td class="px-2 border-t border-r border-gray-700">Won 50:50</td>
{numberFormat.format( <td class="px-2 border-t border-gray-700">
((totalFeatured - totalGuarantee) / (data.total.legendary - totalGuarantee)) * 100, {numberFormat.format(
)}% ((totalFeatured - totalGuarantee) / (data.total.legendary - totalGuarantee)) * 100,
</td> )}%
</tr> </td>
</tr>
{/if}
</table> </table>
</div> </div>
{/if} {/if}
</div> </div>
{#if !loading} {#if !loading}
<div class="flex space-x-4"> <div class="flex flex-col lg:flex-row space-y-4 lg:space-x-4">
<div <div
class="border border-gray-700 rounded-xl mt-4 overflow-hidden" class="border border-gray-700 rounded-xl mt-4 overflow-hidden"
style="width: fit-content; height: fit-content;" style="width: fit-content; height: fit-content;"

View File

@ -143,14 +143,14 @@
guaranteed: item.guaranteed, guaranteed: item.guaranteed,
percentage: percentage:
(item.count / (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, 100,
}; };
} }
} }
// only for standard banner // only for standard banner
if (id === 200002) { if (id === 200001) {
const values = [0, 0]; const values = [0, 0];
for (let i = 0; i < data.list.length; i++) { for (let i = 0; i < data.list.length; i++) {
@ -284,11 +284,18 @@
onMount(() => { onMount(() => {
getData(); getData();
}); });
</script> </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 bg-item rounded-xl px-4 pt-4 pb-2 mb-4 space-y-4">
<div class="flex flex-col xl:flex-row"> <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" /> <div class="h-4 xl:h-0" />
{#if loading} {#if loading}
<Icon className="m-4" path={mdiLoading} color="white" size={2} spin /> <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" class="flex flex-row items-center bg-background rounded-xl py-2 relative px-4 mb-2 flex-1 cursor-pointer"
on:click={toggleLegendaryList} on:click={toggleLegendaryList}
> >
{#if id === 200002} {#if id === 200001}
<table class="flex-1"> <table class="flex-1">
<tr> <tr>
<td <td
@ -645,4 +652,5 @@
@apply -rotate-90; @apply -rotate-90;
} }
} }
</style> </style>

View File

@ -25,17 +25,32 @@
</p> </p>
<div class="px-4 md:px-8"> <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="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']} /> <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']} /> <ItemNew type="character" banner={banners.standard[0]} id={200001} />
<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} />
{#if showOld[0]} {#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="character" banner={banners.characters[9]} id={300010} featured={['venti']} />
<Item <Item
type="weapon" type="weapon"
@ -44,17 +59,17 @@
featured={['skyward_harp', 'lost_prayer_to_the_sacred_winds']} featured={['skyward_harp', 'lost_prayer_to_the_sacred_winds']}
/> />
{:else} {:else}
<Button on:click={() => showOldTally(0)}> <Button on:click={() => showOldTally(1)}>
{$t('wish.tally.show')} {$t('wish.tally.show')}
{banners.characters[9].name} & {banners.weapons[8].name} {banners.characters[9].name} & {banners.weapons[8].name}
</Button> </Button>
<div class="mb-2" /> <div class="mb-2" />
{/if} {/if}
{#if showOld[1]} {#if showOld[2]}
<Item type="character" banner={banners.characters[8]} id={300009} featured={['hu_tao']} /> <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']} /> <Item type="weapon" banner={banners.weapons[7]} id={400008} featured={['wolfs_gravestone', 'staff_of_homa']} />
{:else} {:else}
<Button on:click={() => showOldTally(1)}> <Button on:click={() => showOldTally(2)}>
{$t('wish.tally.show')} {$t('wish.tally.show')}
{banners.characters[8].name} & {banners.weapons[7].name} {banners.characters[8].name} & {banners.weapons[7].name}
</Button> </Button>

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 394 KiB

After

Width:  |  Height:  |  Size: 222 KiB

BIN
static/images/home/eula.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB