From 13125a56267f2a88ed0a38833ea6bc1a7e64775c Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 27 Mar 2022 17:48:35 -0500 Subject: Add harp --- src/lib/APITypes.d.ts | 37 +++++++++++---- src/lib/sections/Harp.svelte | 70 +++++++++++++++++++++++++++++ src/routes/player/[player]/[profile].svelte | 28 ++++++++---- 3 files changed, 118 insertions(+), 17 deletions(-) create mode 100644 src/lib/sections/Harp.svelte (limited to 'src') diff --git a/src/lib/APITypes.d.ts b/src/lib/APITypes.d.ts index 5b14842..8986f9a 100644 --- a/src/lib/APITypes.d.ts +++ b/src/lib/APITypes.d.ts @@ -5,14 +5,13 @@ export interface CleanMemberProfile { } export interface CleanMemberProfilePlayer extends CleanPlayer { + // The profile name may be different for each player, so we put it here profileName: string firstJoin: number lastSave: number purse: number stats: StatItem[] - rawHypixelStats: { - [key: string]: number - } + rawHypixelStats: { [key: string]: number } minions: CleanMinion[] fairySouls: FairySouls inventories?: Inventories @@ -21,6 +20,8 @@ export interface CleanMemberProfilePlayer extends CleanPlayer { zones: Zone[] collections: Collection[] slayers: SlayerData + pets: PetsData + harp: HarpData } export interface CleanMember extends CleanBasicMember { @@ -242,12 +243,30 @@ export interface CleanBasicMember { } export interface Bank { - balance?: number; - history: BankHistoryItem[]; + balance?: number + history: BankHistoryItem[] } export interface BankHistoryItem { - change: number; - total: number; - timestamp: number; - name: string; + change: number + total: number + timestamp: number + name: string +} + + +export interface HarpSong { + id: string + /** A number between 0 and 1 representing the user's best completion */ + progress: number + completions: number + perfectCompletions: number +} + +export interface HarpData { + selected: { + id: string + timestamp: number + } | null + claimedMelodysHair: boolean + songs: HarpSong[] } diff --git a/src/lib/sections/Harp.svelte b/src/lib/sections/Harp.svelte new file mode 100644 index 0000000..438f354 --- /dev/null +++ b/src/lib/sections/Harp.svelte @@ -0,0 +1,70 @@ + + +
+

Claimed Melody's hair:

+ {#if data.member.harp.selected} +

+ Selected song: + {toTitleCase(cleanId(data.member.harp.selected.id))} + + {millisecondsToTime(Date.now() - data.member.harp.selected.timestamp)} ago + +

+ {/if} +
+
+ {#each data.member.harp.songs as song} +
+

{toTitleCase(cleanId(song.id))}

+
+ {#if song.completions} +

Completions: {song.completions}

+

Perfect completions: {song.perfectCompletions}

+ {:else} +

Progress: {Math.floor(song.progress * 100)}%

+ {/if} +
+
+ {/each} +
+ + diff --git a/src/routes/player/[player]/[profile].svelte b/src/routes/player/[player]/[profile].svelte index 4d4761b..ce27635 100644 --- a/src/routes/player/[player]/[profile].svelte +++ b/src/routes/player/[player]/[profile].svelte @@ -48,6 +48,7 @@ import { cleanId } from '$lib/utils' import Head from '$lib/Head.svelte' import Toc from '$lib/Toc.svelte' + import Harp from '$lib/sections/Harp.svelte' export let data: CleanMemberProfile export let pack: MatcherFile @@ -61,12 +62,13 @@ if (data.member.stats?.find(s => s.category === 'fishing')) categories.push('fishing') if (data.member.stats?.find(s => s.category === 'races')) categories.push('races') categories.push('misc') - categories.push('minions') - if (data.member.slayers) categories.push('slayers') + if (data.member.minions.some(m => m.levels.some(l => l))) categories.push('minions') + if (data.member.slayers && data.member.slayers.xp > 0) categories.push('slayers') categories.push('zones') if (data.member.collections && data.member.collections.length > 0) categories.push('collections') if (data.profile.bank.balance !== undefined) categories.push('bank') + if (data.member.harp.selected !== null) categories.push('harp') categories.push('leaderboards') } @@ -160,12 +162,14 @@ {/if} {/each} {/if} -
- -

Minions

- -
-
+ {#if categories.includes('minions')} +
+ +

Minions

+ +
+
+ {/if} {#if categories.includes('slayers')}
@@ -196,6 +200,14 @@
{/if} + {#if categories.includes('harp')} +
+ +

Harp

+ +
+
+ {/if}

Leaderboards

-- cgit