Skip to content
Merged

Deploy #1820

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
7 changes: 7 additions & 0 deletions apps/frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions apps/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"chart.js": "^4.5.1",
"chartjs-adapter-luxon": "^1.3.1",
"luxon": "^3.7.2",
"minisearch": "^7.2.0",
"tippy.js": "^6.3.7"
},
"devDependencies": {
Expand Down
1 change: 1 addition & 0 deletions apps/frontend/scss/global.scss
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
@import "error";
@import "forms";
@import "hacks";
@import "images";
@import "landing-page";
@import "options";
@import "reputation";
Expand Down
13 changes: 13 additions & 0 deletions apps/frontend/scss/images.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.crafting-quality-2,
.crafting-quality-13 {
scale: 1.3;
}
.crafting-quality-4 {
scale: 0.8;
}
.crafting-quality-5 {
scale: 0.7;
}
.crafting-quality-14 {
scale: 1.1;
}
36 changes: 20 additions & 16 deletions apps/frontend/shared/components/images/CraftedQualityIcon.svelte
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
<script lang="ts">
let { quality }: { quality: number } = $props();
import type { ImageProps } from '@/types/props';
import type { MakeOptional } from '@/types/utility';

import WowthingImage from './sources/WowthingImage.svelte';

type Props = MakeOptional<ImageProps, 'size'> & { quality: number };
let { quality, size = 24, ...imageProps }: Props = $props();
</script>

<style lang="scss">
img {
--shadow-color: rgba(70, 70, 70, 0.5);

height: 26px;
margin-top: var(--image-margin-top, 0);
.crafted-quality-2,
.crafted-quality-13 {
scale: 1.3;
}
.crafted-quality-2 {
height: 24px;
.crafted-quality-4 {
scale: 0.8;
}
.crafted-quality-5 {
//--shadow-color: rgb(255, 127, 0, 0.3);

height: 22px;
scale: 0.7;
}
</style>

{#if quality > 0}
<img
src="https://img.wowthing.org/misc/crafting-{quality}.png"
alt="Crafted Quality {quality}"
class="crafted-quality-{quality} drop-shadow"
loading="lazy"
<WowthingImage
cls="drop-shadow crafting-quality-{quality}"
name="crafting_quality_{quality}"
border={0}
{size}
--image-border-width={0}
{...imageProps}
/>
{/if}
5 changes: 3 additions & 2 deletions apps/frontend/shared/components/images/RaceIcon.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@
let race = $derived(
characterRace || wowthingData.static.characterRaceById.get(character?.raceId || raceId)
);
let derivedGender = $derived(character?.gender || gender || 0);
let tooltip = $derived(
`${Gender[character?.gender || gender]} ${getGenderedName(race?.name ?? 'Unknown', character?.gender ?? 0)}`
`${Gender[derivedGender]} ${getGenderedName(race?.name ?? 'Unknown', derivedGender)}`
);
</script>

<WowthingImage name="race_{race.id}_{character?.gender ?? 0}" {size} {border} {tooltip} />
<WowthingImage name="race_{race.id}_{derivedGender}" {size} {border} {tooltip} />
27 changes: 12 additions & 15 deletions apps/frontend/shared/components/images/sources/WowthingImage.svelte
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
<script lang="ts">
import Image from '../Image.svelte'
import type { ImageProps } from '@/types/props';

export let border = 0
export let cls: string = undefined
export let lazy = true
export let name: string
export let size: number
export let tooltip: string = undefined
import Image from '../Image.svelte';

const actualSize = size + (border * 2)
type Props = ImageProps & {
lazy?: boolean;
name: string;
};

$: {
if (name === 'currency/0') {
name = 'item/135464' // Bulging Sack of Gold
}
}
let { border = 0, cls, lazy = true, name, size, tooltip }: Props = $props();

let derivedName = $derived(name === 'currency/0' ? 'item/135464' : name);
let derivedSize = $derived(size + border * 2);
</script>

<Image
src="https://img.wowthing.org/{size}/{name}.webp"
src="https://img.wowthing.org/{size}/{derivedName}.webp"
alt={name}
size={actualSize}
size={derivedSize}
{cls}
{lazy}
{tooltip}
Expand Down
10 changes: 10 additions & 0 deletions apps/frontend/shared/stores/data/static/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ export class DataStatic {
public professionAbilityByAbilityId = new Map<number, StaticDataProfessionAbilityInfo>();
public professionAbilityByItemId = new Map<number, StaticDataProfessionAbilityInfo>();
public professionAbilityBySpellId = new Map<number, StaticDataProfessionAbilityInfo>();
public professionAbilityPreviousRank = new Map<number, [abilityId: number, spellId: number]>();
public professionBySkillLineId = new Map<number, [StaticDataProfession, number]>();
public professionBySlug = new Map<string, StaticDataProfession>();
public requiredProfessionByItemId = new Map<number, number>();
Expand Down Expand Up @@ -238,6 +239,7 @@ export class DataStatic {
)
);

let previousAbility: [number, number] = [ability.id, ability.spellId];
for (const [extraAbilityId, extraSpellId] of ability.extraRanks || []) {
const extraItemId = spellToItem[extraSpellId];
if (extraItemId) {
Expand All @@ -251,6 +253,9 @@ export class DataStatic {
extraSpellId
)
);

this.professionAbilityPreviousRank.set(extraAbilityId, previousAbility);
previousAbility = [extraAbilityId, extraSpellId];
}
}
}
Expand All @@ -262,6 +267,11 @@ export class DataStatic {
for (const itemId of abililtyInfo.itemIds || []) {
this.professionAbilityByItemId.set(itemId, abililtyInfo);
}

for (const [extraAbilityId, extraSpellId] of abililtyInfo.ability?.extraRanks || []) {
this.professionAbilityByAbilityId.set(extraAbilityId, abililtyInfo);
this.professionAbilityBySpellId.set(extraSpellId, abililtyInfo);
}
}

for (const childCategory of category?.children || []) {
Expand Down
14 changes: 0 additions & 14 deletions apps/frontend/types/character-race.ts

This file was deleted.

9 changes: 9 additions & 0 deletions apps/frontend/types/character/character.svelte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,15 @@ export class Character implements ContainsItems, HasNameAndRealm {
for (const profession of Object.values(this.professions)) {
for (const abilityId of profession.knownRecipes) {
allKnown.add(abilityId);

let previousAbility: [number, number];
while (
(previousAbility = wowthingData.static.professionAbilityPreviousRank.get(
previousAbility?.[0] || abilityId
))
) {
allKnown.add(previousAbility[0]);
}
}
}
return allKnown;
Expand Down
1 change: 1 addition & 0 deletions apps/frontend/types/character/profession.svelte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export class CharacterProfession {

syncSet(subProfession.knownRecipes, subKnownRecipes);
}

syncSet(this.knownRecipes, allKnownRecipes);
}

Expand Down
1 change: 0 additions & 1 deletion apps/frontend/types/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
export * from './account';
export * from './achievement-data';
export * from './background-image';
export * from './character-race';
export * from './covenant';
export * from './difficulty-data';
export * from './dungeon';
Expand Down
7 changes: 7 additions & 0 deletions apps/frontend/types/props.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,10 @@ export type SortableProps = {
getSortState: (prefix?: string) => number;
setSortState: (prefix?: string) => void;
};

export type ImageProps = {
size: number;
border?: number;
cls?: string;
tooltip?: string;
};
1 change: 1 addition & 0 deletions apps/frontend/types/utility.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
7 changes: 5 additions & 2 deletions apps/frontend/utils/get-progress.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import find from 'lodash/find';
import { covenantFeatureOrder, covenantMap } from '@/data/covenant';
import { factionIdMap } from '@/data/faction';
import { garrisonBuildingIcon, garrisonTrees, garrisonUnlockQuests } from '@/data/garrison';
import { GarrisonType } from '@/enums/garrison-type';
import { ProgressDataType } from '@/enums/progress-data-type';
import { QuestStatus } from '@/enums/quest-status';
import { wowthingData } from '@/shared/stores/data';
Expand Down Expand Up @@ -56,7 +57,7 @@ export default function getProgress(

let skipRequiredQuests = false;
if (category.name === 'Garrisons' && group.name === 'Pet Quest') {
const garrison = character.garrisons?.[2];
const garrison = character.garrisons?.[GarrisonType.WarlordsOfDraenor];
if (garrison?.level === 3) {
skipRequiredQuests = true;
}
Expand Down Expand Up @@ -479,7 +480,8 @@ export default function getProgress(
}

case ProgressDataType.WodGarrison: {
const garrison = character.garrisons?.[2];
const garrison = character.garrisons?.[GarrisonType.WarlordsOfDraenor];
if (character.name === 'Momokan') console.log(garrison);

// Garrison level
if (data.value === undefined) {
Expand All @@ -490,6 +492,7 @@ export default function getProgress(
if (
checkCharacterQuestIds(character.id, garrisonUnlockQuests)
) {
have = 1;
total = 3;
} else {
have = -1;
Expand Down
43 changes: 26 additions & 17 deletions apps/web/Controllers/ApiController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ await _context.Users

timer.AddPoint("Accounts");

// Warbank
PlayerWarbankItem[] warbankItems = [];
if (!apiResult.Public)
{
Expand All @@ -218,23 +219,7 @@ await _context.Users

timer.AddPoint("Warbank");

var guilds = await _context.PlayerGuild
.Where(pg => pg.UserId == apiResult.User.Id)
.ToArrayAsync();

Dictionary<int, PlayerGuildItem[]> guildItemsMap = new();
if (!apiResult.Public)
{
int[] guildIds = guilds.Select(g => g.Id).ToArray();
var guildItems = await _context.PlayerGuildItem
.Where(pgi => guildIds.Contains(pgi.GuildId))
.ToArrayAsync();
guildItemsMap = guildItems
.ToGroupedDictionary(pgi => pgi.GuildId);
}

timer.AddPoint("Guilds");

// Characters
var characterQuery = _context.PlayerCharacter
.Where(c => c.Account.UserId == apiResult.User.Id)
.Where(c => c.ClassId > 0 && c.RaceId > 0 && c.Level > 0);
Expand Down Expand Up @@ -284,8 +269,32 @@ await _context.Users
.Select(character => character.Id)
.ToArray();

var guildIds = characters
.Where(character => character.GuildId != null)
.Select(character => character.GuildId)
.Distinct()
.ToArray();

timer.AddPoint("Characters");

// Guilds
var guilds = await _context.PlayerGuild
.Where(pg => pg.UserId == apiResult.User.Id &&
guildIds.Contains(pg.Id))
.ToArrayAsync();

Dictionary<int, PlayerGuildItem[]> guildItemsMap = new();
if (!apiResult.Public)
{
var guildItems = await _context.PlayerGuildItem
.Where(pgi => guildIds.Contains(pgi.GuildId))
.ToArrayAsync();
guildItemsMap = guildItems
.ToGroupedDictionary(pgi => pgi.GuildId);
}

timer.AddPoint("Guilds");

var itemQuery = _context.PlayerCharacterItem
.AsNoTracking()
.Where(pci => characterIds.Contains(pci.CharacterId));
Expand Down
Loading