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,
},
},
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',

View File

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

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

View File

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

View File

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

View File

@ -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 = '';

View File

@ -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;"

View File

@ -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>

View File

@ -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>

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