Add weapons to reruns timeline

pull/1/head
Made Baruna 2022-09-07 17:25:26 +07:00
parent 9bdf631bce
commit f47e902daa
3 changed files with 146 additions and 11 deletions

View File

@ -516,6 +516,7 @@ export const banners = {
timezoneDependent: true,
featured: ['aquila_favonia', 'amos_bow'],
featuredRare: ['the_flute', 'the_bell', 'the_widsith', 'the_stringless', 'favonius_lance'],
version: '1.0',
},
{
name: 'Epitome Invocation',
@ -532,6 +533,7 @@ export const banners = {
'sacrificial_fragments',
'dragons_bane',
],
version: '1.0',
},
{
name: 'Epitome Invocation',
@ -543,6 +545,7 @@ export const banners = {
timezoneDependent: true,
featured: ['skyward_harp', 'memory_of_dust'],
featuredRare: ['the_flute', 'rainslasher', 'eye_of_perception', 'rust', 'favonius_lance'],
version: '1.1',
},
{
name: 'Epitome Invocation',
@ -553,6 +556,7 @@ export const banners = {
color: '#eae5e1',
featured: ['vortex_vanquisher', 'the_unforged'],
featuredRare: ['lions_roar', 'the_bell', 'favonius_codex', 'favonius_warbow', 'dragons_bane'],
version: '1.1',
},
{
name: 'Epitome Invocation',
@ -570,6 +574,7 @@ export const banners = {
'sacrificial_fragments',
'the_stringless',
],
version: '1.2',
},
{
name: 'Epitome Invocation',
@ -580,6 +585,7 @@ export const banners = {
color: '#eae5e1',
featured: ['amos_bow', 'skyward_pride'],
featuredRare: ['sacrificial_sword', 'the_bell', 'dragons_bane', 'eye_of_perception', 'favonius_warbow'],
version: '1.2',
},
{
name: 'Epitome Invocation',
@ -591,6 +597,7 @@ export const banners = {
timezoneDependent: true,
featured: ['primordial_jade_winged-spear', 'primordial_jade_cutter'],
featuredRare: ['the_flute', 'sacrificial_greatsword', 'rust', 'eye_of_perception', 'favonius_lance'],
version: '1.3',
},
{
name: 'Epitome Invocation',
@ -601,6 +608,7 @@ export const banners = {
color: '#eae5e1',
featured: ['wolfs_gravestone', 'staff_of_homa'],
featuredRare: ['lithic_blade', 'lithic_spear', 'lions_roar', 'sacrificial_bow', 'the_widsith'],
version: '1.3',
},
{
name: 'Epitome Invocation',
@ -612,6 +620,7 @@ export const banners = {
timezoneDependent: true,
featured: ['elegy_for_the_end', 'skyward_blade'],
featuredRare: ['the_alley_flash', 'wine_and_song', 'favonius_greatsword', 'favonius_warbow', 'dragons_bane'],
version: '1.4',
},
{
name: 'Epitome Invocation',
@ -622,6 +631,7 @@ export const banners = {
color: '#eae5e1',
featured: ['skyward_harp', 'lost_prayer_to_the_sacred_winds'],
featuredRare: ['alley_hunter', 'favonius_codex', 'favonius_lance', 'sacrificial_greatsword', 'favonius_sword'],
version: '1.4',
},
{
name: 'Epitome Invocation',
@ -633,6 +643,7 @@ export const banners = {
timezoneDependent: true,
featured: ['summit_shaper', 'memory_of_dust'],
featuredRare: ['lithic_blade', 'lithic_spear', 'sacrificial_bow', 'eye_of_perception', 'the_flute'],
version: '1.5',
},
{
name: 'Epitome Invocation',
@ -643,6 +654,7 @@ export const banners = {
color: '#eae5e1',
featured: ['song_of_broken_pines', 'aquila_favonia'],
featuredRare: ['rust', 'sacrificial_fragments', 'dragons_bane', 'rainslasher', 'sacrificial_sword'],
version: '1.5',
},
{
name: 'Epitome Invocation',
@ -654,6 +666,7 @@ export const banners = {
featured: ['lost_prayer_to_the_sacred_winds', 'skyward_pride'],
featuredRare: ['mitternachts_waltz', 'lions_roar', 'the_bell', 'favonius_lance', 'the_widsith'],
timezoneDependent: true,
version: '1.6',
},
{
name: 'Epitome Invocation',
@ -664,6 +677,7 @@ export const banners = {
color: '#eae5e1',
featured: ['freedom-sworn', 'skyward_atlas'],
featuredRare: ['the_alley_flash', 'wine_and_song', 'alley_hunter', 'favonius_greatsword', 'dragons_bane'],
version: '1.6',
},
{
name: 'Epitome Invocation',
@ -675,6 +689,7 @@ export const banners = {
featured: ['mistsplitter_reforged', 'skyward_spine'],
featuredRare: ['favonius_sword', 'sacrificial_greatsword', 'favonius_lance', 'favonius_codex', 'the_stringless'],
timezoneDependent: true,
version: '2.0',
},
{
name: 'Epitome Invocation',
@ -685,6 +700,7 @@ export const banners = {
color: '#eae5e1',
featured: ['thundering_pulse', 'skyward_blade'],
featuredRare: ['sacrificial_sword', 'rainslasher', 'dragons_bane', 'sacrificial_fragments', 'favonius_warbow'],
version: '2.0',
},
{
name: 'Epitome Invocation',
@ -696,6 +712,7 @@ export const banners = {
featured: ['engulfing_lightning', 'the_unforged'],
featuredRare: ['lions_roar', 'the_bell', 'favonius_lance', 'the_widsith', 'sacrificial_bow'],
timezoneDependent: true,
version: '2.1',
},
{
name: 'Epitome Invocation',
@ -706,6 +723,7 @@ export const banners = {
color: '#eae5e1',
featured: ['primordial_jade_cutter', 'everlasting_moonglow'],
featuredRare: ['the_flute', 'favonius_greatsword', 'dragons_bane', 'favonius_codex', 'the_stringless'],
version: '2.1',
},
{
name: 'Epitome Invocation',
@ -717,6 +735,7 @@ export const banners = {
featured: ['polar_star', 'memory_of_dust'],
featuredRare: ['akuoumaru', 'favonius_sword', 'favonius_lance', 'eye_of_perception', 'rust'],
timezoneDependent: true,
version: '2.2',
},
{
name: 'Epitome Invocation',
@ -727,6 +746,7 @@ export const banners = {
color: '#eae5e1',
featured: ['staff_of_homa', 'elegy_for_the_end'],
featuredRare: ['wavebreakers_fin', 'mouuns_moon', 'sacrificial_sword', 'rainslasher', 'the_widsith'],
version: '2.2',
},
{
name: 'Epitome Invocation',
@ -738,6 +758,7 @@ export const banners = {
featured: ['freedom-sworn', 'song_of_broken_pines'],
featuredRare: ['wine_and_song', 'alley_hunter', 'lions_roar', 'sacrificial_greatsword', 'dragons_bane'],
timezoneDependent: true,
version: '2.3',
},
{
name: 'Epitome Invocation',
@ -749,6 +770,7 @@ export const banners = {
featured: ['redhorn_stonethresher', 'skyward_harp'],
featuredRare: ['the_alley_flash', 'mitternachts_waltz', 'the_bell', 'favonius_lance', 'sacrificial_fragments'],
timezoneDependent: true,
version: '2.3',
},
{
name: 'Epitome Invocation',
@ -760,6 +782,7 @@ export const banners = {
featured: ['calamity_queller', 'primordial_jade_winged-spear'],
featuredRare: ['lithic_spear', 'the_flute', 'favonius_greatsword', 'the_widsith', 'favonius_warbow'],
timezoneDependent: true,
version: '2.4',
},
{
name: 'Epitome Invocation',
@ -770,6 +793,7 @@ export const banners = {
color: '#eae5e1',
featured: ['amos_bow', 'vortex_vanquisher'],
featuredRare: ['lithic_blade', 'favonius_sword', 'dragons_bane', 'favonius_codex', 'sacrificial_bow'],
version: '2.4',
},
{
name: 'Epitome Invocation',
@ -781,6 +805,7 @@ export const banners = {
featured: ['kaguras_verity', 'primordial_jade_cutter'],
featuredRare: ['wavebreakers_fin', 'sacrificial_sword', 'rainslasher', 'eye_of_perception', 'the_stringless'],
timezoneDependent: true,
version: '2.5',
},
{
name: 'Epitome Invocation',
@ -791,6 +816,7 @@ export const banners = {
color: '#eae5e1',
featured: ['engulfing_lightning', 'everlasting_moonglow'],
featuredRare: ['akuoumaru', 'mouuns_moon', 'lions_roar', 'favonius_lance', 'sacrificial_fragments'],
version: '2.5',
},
{
name: 'Epitome Invocation',
@ -802,6 +828,7 @@ export const banners = {
featured: ['haran_geppaku_futsu', 'elegy_for_the_end'],
featuredRare: ['the_flute', 'sacrificial_greatsword', 'dragons_bane', 'the_widsith', 'rust'],
timezoneDependent: true,
version: '2.6',
},
{
name: 'Epitome Invocation',
@ -813,6 +840,7 @@ export const banners = {
featured: ['mistsplitter_reforged', 'the_unforged'],
featuredRare: ['favonius_sword', 'the_bell', 'favonius_lance', 'favonius_codex', 'favonius_warbow'],
timezoneDependentEnd: true,
version: '2.6',
},
{
name: 'Epitome Invocation',
@ -830,6 +858,7 @@ export const banners = {
'sacrificial_bow',
],
timezoneDependent: true,
version: '2.7',
},
{
name: 'Epitome Invocation',
@ -840,6 +869,7 @@ export const banners = {
color: '#eae5e1',
featured: ['redhorn_stonethresher', 'memory_of_dust'],
featuredRare: ['lithic_blade', 'lions_roar', 'dragons_bane', 'sacrificial_fragments', 'the_stringless'],
version: '2.7',
},
{
name: 'Epitome Invocation',
@ -851,6 +881,7 @@ export const banners = {
featured: ['freedom-sworn', 'lost_prayer_to_the_sacred_winds'],
featuredRare: ['the_alley_flash', 'mitternachts_waltz', 'rainslasher', 'favonius_lance', 'the_widsith'],
timezoneDependent: true,
version: '2.8',
},
{
name: 'Epitome Invocation',
@ -861,6 +892,7 @@ export const banners = {
color: '#eae5e1',
featured: ['thundering_pulse', 'summit_shaper'],
featuredRare: ['wine_and_song', 'alley_hunter', 'the_flute', 'sacrificial_greatsword', 'dragons_bane'],
version: '2.8',
},
{
name: 'Epitome Invocation',
@ -872,6 +904,7 @@ export const banners = {
featured: ['hunters_path', 'vortex_vanquisher'],
featuredRare: ['favonius_sword', 'the_bell', 'favonius_lance', 'favonius_codex', 'the_stringless'],
timezoneDependent: true,
version: '3.0',
},
],
};

View File

@ -4,6 +4,7 @@
import { banners } from '../../data/banners';
import { characters } from '../../data/characters';
import { weaponList } from '../../data/weaponList';
import Button from '../../components/Button.svelte';
import Icon from '../../components/Icon.svelte';
@ -15,13 +16,19 @@
let length = 0;
let versions = [];
let rows = [[]];
let rowsWep = [[]];
let names = [{ name: '', length: 0 }];
let namesWep = [{ name: '', length: 0 }];
let hovered = -1;
let __rows5;
let __rows4;
let __names5;
let __names4;
let __rowsWep5;
let __rowsWep4;
let __namesWep5;
let __namesWep4;
let sort = false;
@ -101,8 +108,81 @@
__names5 = _names5;
__names4 = _names4;
rows = [..._rows5, new Array(length).fill({ l: '' }), ..._rows4];
names = [..._names5, { name: '', length: 0 }, ..._names4];
rows = [..._rows5, new Array(length).fill({ l: '' }), ..._rows4, new Array(length).fill({ l: '' })];
names = [..._names5, { name: '', length: 0 }, ..._names4, { name: '', length: 0 }];
await processWeapons();
}
async function processWeapons() {
const weaponsBanners = [...banners.weapons];
weaponsBanners.splice(8, 0, banners.weapons[7]);
let _chars5 = {};
let _chars4 = {};
let _rows5 = [];
let _rows4 = [];
let _names5 = [];
let _names4 = [];
let pos5 = 0;
let pos4 = 0;
let len = 0;
for (const banner of weaponsBanners) {
for (const ch of Object.keys(_chars5)) {
_chars5[ch].length++;
_names5[_chars5[ch].pos].length++;
_rows5[_chars5[ch].pos][len] = { l: _chars5[ch].length, m: 15 };
}
for (const ch of Object.keys(_chars4)) {
_chars4[ch].length++;
_names4[_chars4[ch].pos].length++;
_rows4[_chars4[ch].pos][len] = { l: _chars4[ch].length, m: 9 };
}
for (const char of banner.featured) {
if (_chars5[char] === undefined) {
_chars5[char] = {
pos: pos5,
length: 0,
};
_names5[pos5] = { name: weaponList[char].name, length: 0 };
_rows5[pos5] = [...new Array(len).fill({ l: '' }), { char, l: 0 }];
pos5++;
} else {
_rows5[_chars5[char].pos][len] = { char, l: 0 };
_names5[_chars5[char].pos].length = 0;
_chars5[char].length = 0;
}
}
for (const char of banner.featuredRare) {
if (_chars4[char] === undefined) {
_chars4[char] = {
pos: pos4,
length: 0,
};
_names4[pos4] = { name: weaponList[char].name, length: 0 };
_rows4[pos4] = [...new Array(len).fill({ l: '' }), { char, l: 0 }];
pos4++;
} else {
_rows4[_chars4[char].pos][len] = { char, l: 0 };
_names4[_chars4[char].pos].length = 0;
_chars4[char].length = 0;
}
}
len++;
}
__rowsWep5 = _rows5;
__rowsWep4 = _rows4;
__namesWep5 = _names5;
__namesWep4 = _names4;
rowsWep = [..._rows5, new Array(length).fill({ l: '' }), ..._rows4];
namesWep = [..._names5, { name: '', length: 0 }, ..._names4];
await tick();
@ -126,11 +206,15 @@
const _rows4 = [...__rows4].sort((a, b) => b[length - 1].l - a[length - 1].l);
const _names5 = [...__names5].sort((a, b) => b.length - a.length);
const _names4 = [...__names4].sort((a, b) => b.length - a.length);
const _rowsWep5 = [...__rowsWep5].sort((a, b) => b[length - 1].l - a[length - 1].l);
const _rowsWep4 = [...__rowsWep4].sort((a, b) => b[length - 1].l - a[length - 1].l);
const _namesWep5 = [...__namesWep5].sort((a, b) => b.length - a.length);
const _namesWep4 = [...__namesWep4].sort((a, b) => b.length - a.length);
console.log(_rows5);
rows = [..._rows5, new Array(length).fill({ l: '' }), ..._rows4];
names = [..._names5, { name: '', length: 0 }, ..._names4];
rows = [..._rows5, new Array(length).fill({ l: '' }), ..._rows4, new Array(length).fill({ l: '' })];
names = [..._names5, { name: '', length: 0 }, ..._names4, { name: '', length: 0 }];
rowsWep = [..._rowsWep5, new Array(length).fill({ l: '' }), ..._rowsWep4];
namesWep = [..._namesWep5, { name: '', length: 0 }, ..._namesWep4];
}
function getColor(index, max) {
@ -172,7 +256,7 @@
<table class="table-fixed">
<tbody>
<tr>
{#each versions as v, index}
{#each versions as v}
<td class="text-center border border-gray-600 text-white font-bold relative" colspan={v.length}
>{v.version}</td
>
@ -193,7 +277,27 @@
>
{/if}
{/each}
<td class="border border-gray-600 text-white px-2">{$t(names[rowIndex].name)}</td>
<td class="border border-gray-600 text-white px-2 text-xs">{$t(names[rowIndex].name)}</td>
</tr>
{/each}
{#each rowsWep as r, rowIndex}
<tr>
{#each r as col, index}
{#if col.char}
<td on:mouseenter={() => onHover(index)} class="cell {hovered === index ? 'hovered' : ''}">
<img class="w-full h-full" src="/images/weapons/{col.char}.png" alt={col.char} />
</td>
{:else}
<td
on:mouseenter={() => onHover(index)}
class="cell {hovered === index ? 'hovered' : ''}"
style="background: {getColor(col.l, col.m)};">{col.l}</td
>
{/if}
{/each}
<td class="border border-gray-600 text-white px-2 text-xs max-w-[2rem] whitespace-pre-wrap"
>{$t(namesWep[rowIndex].name)}</td
>
</tr>
{/each}
</tbody>

View File

@ -8,11 +8,9 @@ const IMAGE_CACHE = `cacheimg${IMAGE_CACHE_VER}`;
const IMAGE_URL = `${self.location.origin}/images/`;
const changelog = [
'Add character release timeline (Database > Character Reruns)',
'Add character & weapons release timeline (Database > Character Reruns)',
'Add checklist to achievement',
'Update achievement commission list',
'Update wish import instruction for pc',
'Update timeline',
];
const channel = new BroadcastChannel('paimonmoe-sw');