From 722eba980fa467e2d0fec65014690214e6c35657 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 26 Jun 2026 21:05:37 -0700 Subject: [PATCH 1/7] Only call UseSentry if SENTRY_DSN is set --- apps/web/Program.cs | 6 +++++- apps/web/Startup.cs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/web/Program.cs b/apps/web/Program.cs index 238932dde..0b388f8e9 100644 --- a/apps/web/Program.cs +++ b/apps/web/Program.cs @@ -14,7 +14,11 @@ private static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { - webBuilder.UseSentry(); + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("SENTRY_DSN"))) + { + webBuilder.UseSentry(); + } + webBuilder.UseStartup(); }); } diff --git a/apps/web/Startup.cs b/apps/web/Startup.cs index dc568f4d8..9fe17c6d6 100644 --- a/apps/web/Startup.cs +++ b/apps/web/Startup.cs @@ -194,7 +194,7 @@ public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider, } else { - app.UseExceptionHandler("/Error"); + app.UseExceptionHandler("/error"); app.UseForwardedHeaders(); app.UseStaticFilesWithCaching(); } From 091b238528ecb3ddb049beaec2731defe157c0db Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 26 Jun 2026 21:06:21 -0700 Subject: [PATCH 2/7] Add extra encounters for Naigtal/Val world bosses --- apps/tool/Data/ExtraEncounters.cs | 18 +++++++++++++++++ apps/tool/Data/ExtraItemDrops.cs | 32 +++++++++++++++++++++++++++++- apps/tool/Data/InstanceBonusIds.cs | 7 +++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/apps/tool/Data/ExtraEncounters.cs b/apps/tool/Data/ExtraEncounters.cs index 133468804..301e6b339 100644 --- a/apps/tool/Data/ExtraEncounters.cs +++ b/apps/tool/Data/ExtraEncounters.cs @@ -368,5 +368,23 @@ public static partial class Hardcoded } }, #endregion Legion + + #region Midnight + // Midnight > Midnight (world bosses) + { + 1312, + new[] + { + new ExtraEncounter("Nexus Captain Leth'ir") + { + AfterEncounter = 2782, // Cragpine + }, + new ExtraEncounter("Imperator Pertinax") + { + AfterEncounter = 2782, // Cragpine + }, + } + }, + #endregion Midnight }; } diff --git a/apps/tool/Data/ExtraItemDrops.cs b/apps/tool/Data/ExtraItemDrops.cs index 4e5f698db..506614cbe 100644 --- a/apps/tool/Data/ExtraItemDrops.cs +++ b/apps/tool/Data/ExtraItemDrops.cs @@ -102,6 +102,23 @@ public static partial class Hardcoded new(87413, RaidDifficultiesNormalHeroic), // Plans: Gauntlets of Unbound Devotion ]; + private static readonly List NaigtalValWorldBosses = + [ + new(275221, RaidDifficultiesNormal), // Beast Collector's Cudgel [1h mace] + new(275220, RaidDifficultiesNormal), // Imperator's Voidedged Cutlass [1h sword] + new(275217, RaidDifficultiesNormal), // Nexus-Captain's Phaseblade [1h sword] + new(275216, RaidDifficultiesNormal), // Phaseblade's Edges [warglaive] + new(275222, RaidDifficultiesNormal), // Base Commander's Decapitator [2h sword] + new(275219, RaidDifficultiesNormal), // Pertinax's Beast Prod [stave] + new(275223, RaidDifficultiesNormal), // Phasebolt Thrower [gun] + new(275218, RaidDifficultiesNormal), // Mertei's Command Baton [wand] + + new(275224, RaidDifficultiesNormalHeroic), // Mertei's Adjutant Leggings [cloth] + new(275225, RaidDifficultiesNormalHeroic), // Toxic Voidscythe Spaulders [leather] + new(275226, RaidDifficultiesNormalHeroic), // Shredclaw Handler's Grips [mail] + new(275227, RaidDifficultiesNormalHeroic), // Leth'ir's Dress Sabatons [plate] + ]; + /* * The first number in each block is the JournalEncounter ID. If the encounter has been added * via ExtraEncounters, the number should be 1_(4 digit instance ID)_(0-based encounter index). @@ -2895,8 +2912,21 @@ public static partial class Hardcoded new(232655, RaidDifficultiesAll), // Vatwork Janitor's Wasteband ] }, - #endregion + + #region Midnight + // Midnight > Midnight > Nexus Captain Leth'ir + { + 1_1312_0, + NaigtalValWorldBosses + }, + + // Midnight > Midnight > Imperator Pertinax + { + 1_1312_1, + NaigtalValWorldBosses + }, + #endregion Midnight }; } diff --git a/apps/tool/Data/InstanceBonusIds.cs b/apps/tool/Data/InstanceBonusIds.cs index 6ed031a00..71257cefc 100644 --- a/apps/tool/Data/InstanceBonusIds.cs +++ b/apps/tool/Data/InstanceBonusIds.cs @@ -149,6 +149,12 @@ public static partial class Hardcoded { 17, 13470 }, // LFR }; + private static readonly Dictionary MidnightWorldBoss = new() + { + { 14, 13471 }, // Normal + { 15, 13472 }, // Heroic + }; + public static readonly Dictionary> InstanceBonusIds = new() { { 369, MopSiege }, // Siege of Orgrimmar @@ -233,6 +239,7 @@ public static partial class Hardcoded { 1302, WarWithinRaid }, // Manaforge Omega // Midnight + { 1312, MidnightWorldBoss }, { 1314, MidnightRaid }, // The Dreamrift { 1307, MidnightRaid }, // The Voidspire { 1308, MidnightRaid }, // March on Quel'Danas From f728994630119368a89666a87aa4d3583d274101 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 26 Jun 2026 21:06:49 -0700 Subject: [PATCH 3/7] Add ItemFlags.BoundToAccount --- apps/frontend/enums/item-flags.ts | 18 ++++++++++-------- apps/frontend/types/data/item/item.ts | 3 +++ apps/tool/Enums/WowItemFlags1.cs | 1 + apps/tool/Tools/DumpsTool.cs | 4 ++++ apps/tool/Tools/JournalTool.cs | 3 +++ packages/csharp-lib/Enums/WowItemFlags.cs | 17 +++++++++-------- 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/apps/frontend/enums/item-flags.ts b/apps/frontend/enums/item-flags.ts index 4cda717f8..239f40a87 100644 --- a/apps/frontend/enums/item-flags.ts +++ b/apps/frontend/enums/item-flags.ts @@ -1,10 +1,12 @@ +/* prettier-ignore */ export enum ItemFlags { - Cosmetic = 0b00_00_00_01, - CannotTransmogToThisItem = 0b00_00_00_10, - AllianceOnly = 0b00_00_01_00, - HordeOnly = 0b00_00_10_00, - LookingForRaidDifficulty = 0b00_01_00_00, - HeroicDifficulty = 0b00_10_00_00, - MythicDifficulty = 0b01_00_00_00, - Openable = 0b10_00_00_00, + Cosmetic = 0b0000_0000_0000_0001, + CannotTransmogToThisItem = 0b0000_0000_0000_0010, + AllianceOnly = 0b0000_0000_0000_0100, + HordeOnly = 0b0000_0000_0000_1000, + LookingForRaidDifficulty = 0b0000_0000_0001_0000, + HeroicDifficulty = 0b0000_0000_0010_0000, + MythicDifficulty = 0b0000_0000_0100_0000, + Openable = 0b0000_0000_1000_0000, + BoundToAccount = 0b0000_0001_0000_0000, } diff --git a/apps/frontend/types/data/item/item.ts b/apps/frontend/types/data/item/item.ts index 97ba9030c..b20b7a006 100644 --- a/apps/frontend/types/data/item/item.ts +++ b/apps/frontend/types/data/item/item.ts @@ -56,6 +56,9 @@ export class ItemDataItem { return this._appearances; } + get boundToAccount(): boolean { + return (this.flags & ItemFlags.BoundToAccount) > 0; + } get cosmetic(): boolean { return (this.flags & ItemFlags.Cosmetic) > 0; } diff --git a/apps/tool/Enums/WowItemFlags1.cs b/apps/tool/Enums/WowItemFlags1.cs index f14a22bd0..a1e7fd7a5 100644 --- a/apps/tool/Enums/WowItemFlags1.cs +++ b/apps/tool/Enums/WowItemFlags1.cs @@ -5,4 +5,5 @@ public enum WowItemFlags1 { HasLootTable = 0x4, HeroicTooltip = 0x8, + BoundToAccount = 0x8_000_000, } diff --git a/apps/tool/Tools/DumpsTool.cs b/apps/tool/Tools/DumpsTool.cs index ed515a0b9..ac052840b 100644 --- a/apps/tool/Tools/DumpsTool.cs +++ b/apps/tool/Tools/DumpsTool.cs @@ -1055,6 +1055,10 @@ private async Task ImportItems(WowDbContext context) { dbItem.Flags |= WowItemFlags.Openable; } + if (itemSparse.Flags1.HasFlag(WowItemFlags1.BoundToAccount)) + { + dbItem.Flags |= WowItemFlags.BoundToAccount; + } if (itemSparse.ItemNameDescriptionID is 1641 or 13932 or 14101) { dbItem.Flags |= WowItemFlags.LookingForRaidDifficulty; diff --git a/apps/tool/Tools/JournalTool.cs b/apps/tool/Tools/JournalTool.cs index 18677add9..460d69aab 100644 --- a/apps/tool/Tools/JournalTool.cs +++ b/apps/tool/Tools/JournalTool.cs @@ -357,6 +357,9 @@ await context.WowPet OrderIndex = -i, }; + ToolContext.Logger.Information("[{instance}] Added extra encounter {id}/{name}", + instanceId, encounterId, extraEncounter.Name); + if (extraEncounter.AfterEncounter.HasValue) { for (int j = 0; j < encountersByInstanceId[instanceId].Count; j++) diff --git a/packages/csharp-lib/Enums/WowItemFlags.cs b/packages/csharp-lib/Enums/WowItemFlags.cs index 33f111763..3f52ab56f 100644 --- a/packages/csharp-lib/Enums/WowItemFlags.cs +++ b/packages/csharp-lib/Enums/WowItemFlags.cs @@ -3,12 +3,13 @@ [Flags] public enum WowItemFlags : short { - Cosmetic = 0b00_00_00_01, - CannotTransmogToThisItem = 0b00_00_00_10, - AllianceOnly = 0b00_00_01_00, - HordeOnly = 0b00_00_10_00, - LookingForRaidDifficulty = 0b00_01_00_00, - HeroicDifficulty = 0b00_10_00_00, - MythicDifficulty = 0b01_00_00_00, - Openable = 0b10_00_00_00, + Cosmetic = 0b0000_0000_0000_0001, + CannotTransmogToThisItem = 0b0000_0000_0000_0010, + AllianceOnly = 0b0000_0000_0000_0100, + HordeOnly = 0b0000_0000_0000_1000, + LookingForRaidDifficulty = 0b0000_0000_0001_0000, + HeroicDifficulty = 0b0000_0000_0010_0000, + MythicDifficulty = 0b0000_0000_0100_0000, + Openable = 0b0000_0000_1000_0000, + BoundToAccount = 0b0000_0001_0000_0000, } From ec58b737b5ed4674bbabab144a582fa2e8124f59 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 26 Jun 2026 21:07:13 -0700 Subject: [PATCH 4/7] Don't show AH icon for journal items that are warbound --- apps/frontend/components/journal/JournalItem.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/components/journal/JournalItem.svelte b/apps/frontend/components/journal/JournalItem.svelte index 2747cb95c..8e7dff1b5 100644 --- a/apps/frontend/components/journal/JournalItem.svelte +++ b/apps/frontend/components/journal/JournalItem.svelte @@ -202,7 +202,7 @@ {/if} - {#if [BindType.NotBound, BindType.OnEquip].includes(dataItem.bindType)} + {#if [BindType.NotBound, BindType.OnEquip].includes(dataItem.bindType) && !dataItem.boundToAccount}
Date: Fri, 26 Jun 2026 21:18:03 -0700 Subject: [PATCH 5/7] Fix up some slot usage --- .../character-table/CharacterTableHead.svelte | 15 ++++++++++++--- .../frontend/components/common/TableIcon.svelte | 17 +++++++++-------- .../items/convertible/ClassTable.svelte | 4 ++-- .../components/lockouts/Lockouts.svelte | 8 ++++---- .../professions/overview/Table.svelte | 4 ++-- .../professions/patron-orders/Table.svelte | 4 ++-- .../under-construction/UnderConstruction.svelte | 12 +++++++++--- 7 files changed, 40 insertions(+), 24 deletions(-) diff --git a/apps/frontend/components/character-table/CharacterTableHead.svelte b/apps/frontend/components/character-table/CharacterTableHead.svelte index 31063d4ed..44f2c1d68 100644 --- a/apps/frontend/components/character-table/CharacterTableHead.svelte +++ b/apps/frontend/components/character-table/CharacterTableHead.svelte @@ -1,5 +1,13 @@ - - + + {@render children?.()} diff --git a/apps/frontend/components/items/convertible/ClassTable.svelte b/apps/frontend/components/items/convertible/ClassTable.svelte index 718506e5e..40c91b5bf 100644 --- a/apps/frontend/components/items/convertible/ClassTable.svelte +++ b/apps/frontend/components/items/convertible/ClassTable.svelte @@ -72,7 +72,7 @@ {#if data} - + {#snippet headText()}
{#if modifier === AppearanceModifier.LookingForRaid} @@ -85,7 +85,7 @@ {stats.percent.toFixed(0)} %
-
+ {/snippet} {#each convertibleTypes as inventoryType (inventoryType)} diff --git a/apps/frontend/components/lockouts/Lockouts.svelte b/apps/frontend/components/lockouts/Lockouts.svelte index 04f30f09e..2f68e904d 100644 --- a/apps/frontend/components/lockouts/Lockouts.svelte +++ b/apps/frontend/components/lockouts/Lockouts.svelte @@ -78,7 +78,7 @@ - + {#snippet headText()} GroupedONLY characters with lockout - + {/snippet} - + {#snippet headTop(colspan)} {#if browserState.current.lockouts.grouped} {/if} - + {/snippet} {#each allLockouts as instanceDifficulty, index (instanceDifficulty)} - + {#snippet headText()} {profession.name.split('|')[0]} - + {/snippet} {#if profession.slug === 'archaeology'} Ugh diff --git a/apps/frontend/components/professions/patron-orders/Table.svelte b/apps/frontend/components/professions/patron-orders/Table.svelte index 5a4125a57..72d5a144d 100644 --- a/apps/frontend/components/professions/patron-orders/Table.svelte +++ b/apps/frontend/components/professions/patron-orders/Table.svelte @@ -56,10 +56,10 @@ {#if profession} - + {#snippet headText()} {profession.name.split('|')[0]} - + {/snippet}
diff --git a/apps/frontend/shared/components/under-construction/UnderConstruction.svelte b/apps/frontend/shared/components/under-construction/UnderConstruction.svelte index eac9f9ca3..82a71562e 100644 --- a/apps/frontend/shared/components/under-construction/UnderConstruction.svelte +++ b/apps/frontend/shared/components/under-construction/UnderConstruction.svelte @@ -1,4 +1,8 @@ - +
- + {#if children} + {@render children()} + {:else} This area is under construction and probably doesn't work very well, please be patient! - + {/if}
From 3cac6bc896ca34c58d822210fbef830803ffcba1 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 26 Jun 2026 23:12:29 -0700 Subject: [PATCH 6/7] Add Darkspear Dash holiday --- apps/frontend/data/holidays.ts | 8 +++++++- apps/frontend/enums/holiday.ts | 1 + .../shared/stores/db/enums/db-thing-content-type.ts | 1 + apps/frontend/user-home/components/everything/data.ts | 5 +++++ apps/tool/Enums/DbThingContentType.cs | 1 + 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/frontend/data/holidays.ts b/apps/frontend/data/holidays.ts index 168c0486e..557606acc 100644 --- a/apps/frontend/data/holidays.ts +++ b/apps/frontend/data/holidays.ts @@ -44,6 +44,7 @@ export const holidayIds: Record = { [Holiday.Brewfest]: [[19]], [Holiday.ChildrensWeek]: [[13]], [Holiday.DarkmoonFaire]: [[1]], + [Holiday.DarkspearDash]: [[458]], [Holiday.DayOfTheDead]: [[81]], [Holiday.HallowsEnd]: [[16]], [Holiday.LoveIsInTheAir]: [[9]], @@ -117,6 +118,11 @@ export const fancyHolidays: FancyHoliday[] = [ shortName: '🎡', everything: 'darkmoon-faire', }, + { + holiday: Holiday.DarkspearDash, + shortName: '🧌', + everything: 'darkspear-dash', + }, { holiday: Holiday.DayOfTheDead, shortName: '💀', @@ -139,7 +145,7 @@ export const fancyHolidays: FancyHoliday[] = [ }, { holiday: Holiday.MidsummerFireFestival, - shortName: 'Midsummer', + shortName: '🌞', everything: 'midsummer-fire-festival', }, { diff --git a/apps/frontend/enums/holiday.ts b/apps/frontend/enums/holiday.ts index fe8870cbc..de8bb1c17 100644 --- a/apps/frontend/enums/holiday.ts +++ b/apps/frontend/enums/holiday.ts @@ -3,6 +3,7 @@ export enum Holiday { Brewfest, ChildrensWeek, DarkmoonFaire, + DarkspearDash, DayOfTheDead, HallowsEnd, LoveIsInTheAir, diff --git a/apps/frontend/shared/stores/db/enums/db-thing-content-type.ts b/apps/frontend/shared/stores/db/enums/db-thing-content-type.ts index ecf0301a8..c8ee71453 100644 --- a/apps/frontend/shared/stores/db/enums/db-thing-content-type.ts +++ b/apps/frontend/shared/stores/db/enums/db-thing-content-type.ts @@ -1,4 +1,5 @@ export enum DbThingContentType { Item = 1, Pet = 2, + Title = 3, } diff --git a/apps/frontend/user-home/components/everything/data.ts b/apps/frontend/user-home/components/everything/data.ts index 749567d15..01a1a2878 100644 --- a/apps/frontend/user-home/components/everything/data.ts +++ b/apps/frontend/user-home/components/everything/data.ts @@ -24,6 +24,11 @@ export const everythingData: Record = { achievementsKey: ['world-events', 'darkmoon-faire'], vendorsKey: ['world-events', 'darkmoon-faire'], }, + 'darkspear-dash': { + name: 'Darkspear Dash', + tag: 'event:darkspear-dash', + vendorsKey: ['world-events', 'darkspear-dash'], + }, 'day-of-the-dead': { name: 'Day of the Dead', tag: 'event:day-of-the-dead', diff --git a/apps/tool/Enums/DbThingContentType.cs b/apps/tool/Enums/DbThingContentType.cs index d91681a4e..e12f49d5d 100644 --- a/apps/tool/Enums/DbThingContentType.cs +++ b/apps/tool/Enums/DbThingContentType.cs @@ -4,4 +4,5 @@ public enum DbThingContentType { Item = 1, Pet = 2, + Title = 3, } From bf0a5a5744d59214f55f496fb7de32c0ad6bd6d7 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 26 Jun 2026 23:27:27 -0700 Subject: [PATCH 7/7] Add and use ChildrenProp type --- .../components/character-table/CharacterTableHead.svelte | 7 ++++--- .../components/collectible/CollectibleCount.svelte | 5 ++--- apps/frontend/components/common/TableIcon.svelte | 5 ++--- apps/frontend/shared/components/GenericTooltip.svelte | 7 +++---- apps/frontend/shared/components/forms/CheckboxInput.svelte | 6 ++---- apps/frontend/shared/components/links/SpellLink.svelte | 7 +++---- .../shared/components/links/WowheadTransmogSetLink.svelte | 5 ++--- .../components/under-construction/UnderConstruction.svelte | 4 ++-- apps/frontend/types/props.ts | 6 ++++++ 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/apps/frontend/components/character-table/CharacterTableHead.svelte b/apps/frontend/components/character-table/CharacterTableHead.svelte index 44f2c1d68..1f6ca0c8f 100644 --- a/apps/frontend/components/character-table/CharacterTableHead.svelte +++ b/apps/frontend/components/character-table/CharacterTableHead.svelte @@ -1,9 +1,10 @@ - {@render children()} + {@render children?.()} diff --git a/apps/frontend/shared/components/links/WowheadTransmogSetLink.svelte b/apps/frontend/shared/components/links/WowheadTransmogSetLink.svelte index d6232fca1..034e12137 100644 --- a/apps/frontend/shared/components/links/WowheadTransmogSetLink.svelte +++ b/apps/frontend/shared/components/links/WowheadTransmogSetLink.svelte @@ -1,10 +1,9 @@