diff --git a/src/routes/wish/_summaryItem.svelte b/src/routes/wish/_summaryItem.svelte index 73b6b107..53f94b6f 100644 --- a/src/routes/wish/_summaryItem.svelte +++ b/src/routes/wish/_summaryItem.svelte @@ -3,10 +3,18 @@ import { mdiStar } from '@mdi/js'; import Icon from '../../components/Icon.svelte'; + import { onMount } from 'svelte'; export let avg; export let type; + const legendaryStr = JSON.stringify(avg.legendary.pulls); + let legendary = JSON.parse(legendaryStr); + let legendaryBackup = JSON.parse(legendaryStr); + let dropit = false; + let stop = false; + let running = true; + let numberFormat = Intl.NumberFormat('en', { maximumFractionDigits: 1, minimumFractionDigits: 0, @@ -17,6 +25,47 @@ return `color: hsl(${hue}, 100%, 60%);`; } + async function suprize() { + const randomOrder = [...Array(legendary.length).keys()]; + for (let i = randomOrder.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [randomOrder[i], randomOrder[j]] = [randomOrder[j], randomOrder[i]]; + } + + let time = 2000; + for (const index of randomOrder) { + legendary[index].name = 'Qiqi'; + await sleep(time); + time = Math.max(100, time - 100); + } + + running = false; + await sleep(20000); + if (stop) return; + wow(); + } + + async function wow() { + if (running) return; + dropit = true; + await sleep(3000); + dropit = false; + legendary = legendaryBackup; + } + + function stopit() { + stop = true; + wow(); + } + + function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + + onMount(() => { + if (type.id === 'character-event' && Math.random() > 0.5) suprize(); + }); + $: textSize = avg.legendary.total > 20 ? 'text-sm' : 'text-base'; @@ -81,12 +130,12 @@ - {#if avg.legendary.pulls.length > 0} -