Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/api/hypixel.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { HYPIXEL_API_KEY } from '$env/static/private';
import { isUUID } from '$params/uuid';
import type { HypixelRequestOptions, SkyblockProfile } from '$types/hypixel';
import type { HypixelRequestOptions, SkyBlockProfile } from '$types/hypixel';
import { getUUID } from '$api/mojang';
import { getStoredPlayer, updateStoredPlayerData } from '$mongo/players';
import type { ProfileDetails, StoredPlayer, StoredProfile, StoredProfileMember } from '$mongo/collections';
Expand Down Expand Up @@ -166,7 +166,7 @@ async function getProfileMemberFromUuids(uuid: string, profileUuid: string) {
}

export async function fetchProfiles(uuid: string) {
const response = await hypixelRequest<{ success: boolean; cause?: string; profiles?: SkyblockProfile[] }>({
const response = await hypixelRequest<{ success: boolean; cause?: string; profiles?: SkyBlockProfile[] }>({
endpoint: 'skyblock/profiles',
query: { uuid },
usesApiKey: true
Expand Down
10 changes: 5 additions & 5 deletions src/api/profiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import {
updateStoredProfile,
updateStoredProfileMember
} from '$mongo/profiles';
import type { SkyblockProfile } from '$types/hypixel';
import type { SkyBlockProfile } from '$types/hypixel';
import { getPlayer } from './hypixel';
import { getUsername } from './mojang';

export async function parseProfilesResponse(
requesterUuid: string,
profiles: SkyblockProfile[]
profiles: SkyBlockProfile[]
): Promise<StoredProfile[]> {
requesterUuid = requesterUuid.replace(/-/g, '');
const parsedProfiles: StoredProfile[] = [];
Expand Down Expand Up @@ -61,9 +61,9 @@ export async function parseProfilesResponse(
}

export async function parseProfileMember(
profile: SkyblockProfile,
profile: SkyBlockProfile,
memberId: string,
member: SkyblockProfile['members'][string]
member: SkyBlockProfile['members'][string]
): Promise<Partial<StoredProfileMember>> {
const player = await getPlayer(memberId);

Expand All @@ -86,7 +86,7 @@ export async function parseProfileMember(
};
}

export async function parseProfile(profile: SkyblockProfile): Promise<StoredProfile> {
export async function parseProfile(profile: SkyBlockProfile): Promise<StoredProfile> {
const minions = [];
const memberPromises: Promise<ProfileMemberDetails | null>[] = [];

Expand Down
4 changes: 2 additions & 2 deletions src/components/BasicStats/BasicStats.svelte
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<script lang="ts">
import SkillComponent from '$comp/SkillComponent/SkillComponent.svelte';
import type { SkyblockPlayerSkillStats } from '$types/hypixel';
import type { SkyBlockStatsSkills } from '$types/hypixel';

export let skillData: SkyblockPlayerSkillStats | undefined;
export let skillData: SkyBlockStatsSkills | undefined;

$: skills = skillData?.skills;
</script>
Expand Down
4 changes: 2 additions & 2 deletions src/components/SkillComponent/SkillComponent.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import type { SkyblockSkillData } from '$types/hypixel';
import type { SkyBlockStatsSkillData } from '$types/hypixel';

export let skillData: SkyblockSkillData;
export let skillData: SkyBlockStatsSkillData;
export let skillName: string;

$: maxed = skillData.level === skillData.maxLevel;
Expand Down
4 changes: 3 additions & 1 deletion src/constants/slayers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export const SKYBLOCK_SLAYER_XP_TABLE = {
import type { SlayerBoss } from '$types/raw/profile';

export const SKYBLOCK_SLAYER_XP_TABLE: Record<SlayerBoss, Record<number, number>> = {
zombie: {
1: 5,
2: 15,
Expand Down
4 changes: 2 additions & 2 deletions src/lib/stats.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { StoredProfileMemberData } from '$mongo/collections';
import * as stats from '$stats/index';
import type { HypixelPlayerData, SkyblockProfile } from '$types/hypixel';
import type { HypixelPlayerData, SkyBlockProfile } from '$types/hypixel';

export function getStats(profile: SkyblockProfile, player: HypixelPlayerData, uuid: string): StoredProfileMemberData {
export function getStats(profile: SkyBlockProfile, player: HypixelPlayerData, uuid: string): StoredProfileMemberData {
const userProfile = profile.members[uuid];

const output = {
Expand Down
47 changes: 24 additions & 23 deletions src/lib/stats/skills.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import { getLevelByXp, getXpByLevel } from '$stats/skills/leveling';
import * as constants from '$constants';
import type {
SkyblockPlayerSkillStats,
SkyblockProfile,
SkyblockProfileMember,
SkyBlockProfileMember,
SkyBlockProfile,
HypixelPlayerData,
LevelCaps,
SkyblockSkillName,
SkyblockSkillData
SkyBlockStatsLevelCaps,
SkyBlockStatsSkillName,
SkyBlockStatsSkillData,
SkyBlockStatsSkills
} from '$types/hypixel';
import { getLevelByXp, getXpByLevel } from '$stats/skills/leveling';

function getLevels(
userProfile: Partial<SkyblockProfileMember>,
profileMembers: SkyblockProfile['members'],
userProfile: Partial<SkyBlockProfileMember>,
profileMembers: SkyBlockProfile['members'],
hypixelProfile: HypixelPlayerData,
levelCaps: LevelCaps
): SkyblockPlayerSkillStats {
const skillLevels: Partial<Record<SkyblockSkillName, SkyblockSkillData>> = {};
levelCaps: SkyBlockStatsLevelCaps
): SkyBlockStatsSkills {
const skillLevels: Partial<Record<SkyBlockStatsSkillName, SkyBlockStatsSkillData>> = {};
if (userProfile.player_data && 'experience' in userProfile.player_data) {
const skills = userProfile.player_data.experience;

Expand All @@ -37,7 +37,7 @@ function getLevels(
social: getLevelByXp(socialExperience, { type: 'social' })
});
} else {
const achievementSkills: Record<SkyblockSkillName, number> = {
const achievementSkills: Record<SkyBlockStatsSkillName, number> = {
farming: hypixelProfile.achievements.skyblock_harvester || 0,
mining: hypixelProfile.achievements.skyblock_excavator || 0,
combat: hypixelProfile.achievements.skyblock_combat || 0,
Expand All @@ -52,19 +52,20 @@ function getLevels(
};

for (const skill in achievementSkills) {
skillLevels[skill as SkyblockSkillName] = getXpByLevel(achievementSkills[skill as SkyblockSkillName] as number, {
skill
});
skillLevels[skill as SkyBlockStatsSkillName] = getXpByLevel(
achievementSkills[skill as SkyBlockStatsSkillName] as number,
{ skill }
);
}
}

const getNonCosmeticSkills = (skillLevels: Record<string, SkyblockSkillData>) => {
return (Object.keys(skillLevels) as SkyblockSkillName[]).filter(
const getNonCosmeticSkills = (skillLevels: Record<string, SkyBlockStatsSkillData>) => {
return (Object.keys(skillLevels) as SkyBlockStatsSkillName[]).filter(
(skill) => !constants.SKYBLOCK_COSMETIC_SKILLS.includes(skill)
);
};

const nonCosmeticSkills: SkyblockSkillName[] = getNonCosmeticSkills(skillLevels);
const nonCosmeticSkills: SkyBlockStatsSkillName[] = getNonCosmeticSkills(skillLevels);
const nonCosmeticSkillsCount = Math.max(nonCosmeticSkills.length, 9);

const totalSkillXp = nonCosmeticSkills.reduce((total, skill) => total + (skillLevels[skill]?.xp || 0), 0);
Expand All @@ -80,21 +81,21 @@ function getLevels(

// TODO: Implement this once leaaderboards are implemented
// for (const skill in skillLevels) {
// skillLevels[skill as SkyblockSkillName].rank = 0;
// skillLevels[skill as SkyBlockStatsSkillName].rank = 0;
// }

return {
skills: skillLevels as Record<SkyblockSkillName, SkyblockSkillData>,
skills: skillLevels as Record<SkyBlockStatsSkillName, SkyBlockStatsSkillData>,
averageSkillLevel,
averageSkillLevelWithoutProgress,
totalSkillXp
};
}

export function getSkills(
userProfile: Partial<SkyblockProfileMember>,
userProfile: Partial<SkyBlockProfileMember>,
hypixelProfile: HypixelPlayerData,
profileMembers: SkyblockProfile['members']
profileMembers: SkyBlockProfile['members']
) {
const levelCaps = {
farming:
Expand Down
13 changes: 5 additions & 8 deletions src/lib/stats/slayer.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import type { SlayerBossData, SlayerBoss, SkyBlockProfileMember, SkyBlockStatsSlayers } from '$types/hypixel';
import * as constants from '$constants';
import type { SkyblockProfileMember, SkyblockSlayerBoss, SkyblockPlayerSlayerStats } from '$types/hypixel';

function getSlayerLevel(
slayer: SkyblockProfileMember['slayer']['slayer_bosses'][SkyblockSlayerBoss],
slayerName: SkyblockSlayerBoss
) {
function getSlayerLevel(slayer: SlayerBossData, slayerName: SlayerBoss) {
const xpTable = constants.SKYBLOCK_SLAYER_XP_TABLE[slayerName];

const maxLevel = Object.keys(xpTable).length;
Expand Down Expand Up @@ -44,14 +41,14 @@ function getSlayerLevel(
return Object.assign(constants.SLAYER_INFO[slayerName], { xp, level, maxLevel, xpForNext: null, progress: 1, kills });
}

export function getSlayers(userProfile: Partial<SkyblockProfileMember>): SkyblockPlayerSlayerStats {
const output = { slayers: {} as SkyblockPlayerSlayerStats['slayers'], total_slayer_xp: 0 };
export function getSlayers(userProfile: Partial<SkyBlockProfileMember>): SkyBlockStatsSlayers {
const output = { slayers: {} as SkyBlockStatsSlayers['slayers'], total_slayer_xp: 0 };
if (userProfile.slayer?.slayer_bosses === undefined) {
return output;
}

for (const [slayerName, slayer] of Object.entries(userProfile.slayer.slayer_bosses)) {
output.slayers[slayerName as SkyblockSlayerBoss] = getSlayerLevel(slayer, slayerName as SkyblockSlayerBoss);
output.slayers[slayerName as SlayerBoss] = getSlayerLevel(slayer, slayerName as SlayerBoss);
}

output.total_slayer_xp = Object.values(output.slayers).reduce((a, b) => a + b.xp, 0);
Expand Down
Loading