• Knack117 released this 2026-05-13 03:02:30 +00:00 | 0 commits to main since this release

    How this release works

    Source code for this server build lives on the main branch on this repo (normal git push), not inside the ZIP of the release. The Releases page is for downloadable client binaries (MPQs + patched Wow.exe) and release notes, so players can grab a matching client bundle without cloning the repo.

    Client binaries (attached)

    These four files are attached to this release for convenience:

    File Purpose
    patch-enUS-4.MPQ DBC + GlueXML (Paragon class, rune cost / reagent mirroring, etc.)
    patch-enUS-5.MPQ FrameXML / Lua (Paragon UI, runes, spellbook, tooltips, …)
    patch-enUS-6.MPQ ParagonAdvancement addon
    Wow.exe 3.3.5a build 12340, MPQ signature check patched

    They are byte-identical to v0.7.23-paragon-rune-ui-elvui-client — there was no client rebuild for v0.7.24; they were re-uploaded here so latest still ships a full client bundle in one click.

    Server (what changed in git / main)

    • Paragon tester: .paragon tester bis hunter, expanded bis gems, AGI bow vs ranged weapons, ranged for spi/hybrid.
    • .learn all mounts: RBAC 916 + data/sql/updates/db_auth/2026_05_12_00.sql.
    • Cast-time mount spells: movement / combat behavior; cancel mount cast on combat enter.
    • MaxPrimaryTradeSkill: default 11 in config + WorldConfig.

    Rebuild worldserver from main and apply the auth migration (or full DB import).

    Downloads
  • Knack117 released this 2026-05-12 23:20:13 +00:00 | 5 commits to main since this release

    Server: ships with commit [\87219cb](https://github.com/Dawnforger/Fractured/commit/87219cb) on \main.

    Paragon (core + world SQL):

    • Multidot Devouring Plague (separate DoTs per target) plus \skilllineability_dbc\ / script alignment.
    • Warrior stance and DK presence clone spells for Character Advancement; spellbook \SkillLineAbility\ rows and aura / shapeshift attribute fixes.
    • Apply world updates \2026_05_12_02\ … \2026_05_12_07\ from \modules/mod-paragon/data/sql/db-world/updates/\ (in order).

    Client bundle (this release):

    • \patch-enUS-4.MPQ\ — DBC + GlueXML (rebuilt with current \Spell.dbc, \SkillLineAbility.dbc, \SpellShapeshiftForm.dbc).
    • \patch-enUS-5.MPQ\ — Paragon FrameXML overrides.
    • \patch-enUS-6.MPQ\ — ParagonAdvancement addon.
    • \Wow.exe\ — MPQ signature bypass (3.3.5a build 12340).

    See CLIENT-PATCHES.md for install order and troubleshooting.

    Downloads
  • Knack117 released this 2026-05-12 23:20:13 +00:00 | 5 commits to main since this release

    Server: matches [\main\ @ \87219cb](https://github.com/Dawnforger/Fractured/commit/87219cb) (Paragon multidot DP, stance/presence clones, advancement SLA + world SQL through \2026_05_12_07).

    Client bundle (this release):

    • \patch-enUS-4.MPQ\ — Paragon DBC + GlueXML (refreshed bake).
    • \patch-enUS-5.MPQ\ — FrameXML overrides: ParagonRuneCost from stock \Spell.dbc\ column 226 (fixes wrong DK rune costs / grey bars), ElvUI action-bar usability via \LibActionButton-1.0-ElvUI, rune simulator + click guards, etc.
    • \patch-enUS-6.MPQ\ — ParagonAdvancement addon.
    • \Wow.exe\ — MPQ signature bypass (3.3.5a build 12340).

    Install order and troubleshooting: CLIENT-PATCHES.md.

    Downloads
  • Knack117 released this 2026-05-12 08:49:38 +00:00 | 6 commits to main since this release

    Paragon Runeforging support — buy it from the Character Advancement panel and apply rune enchants from anywhere in the world.

    This release pairs the server-side runeforging carve-outs (commit da17074) with the client patches that add a Runeforging tab to the Character Advancement panel and a substitute Runeforging UI for the Paragon class. Plus a bunch of stability/UX fixes for the Overview tab.

    Server-side (modules/mod-paragon + AzerothCore core)

    Runeforging works for Paragons. Three carve-outs land together:

    • Spell.cpp — bypass the SpellFocusObject GO proximity check when a Paragon casts a SKILL_RUNEFORGING (776) spell. No need to fly back to Acherus or find the nearest Eastern Plaguelands anvil. Stock DK behaviour is unchanged (the bypass is gated on getClass() == CLASS_PARAGON, not the IsClass context hook).
    • Player.cpp — skip the Paragon class-skill cascade block for skill 776, so the rune-enchant SLA cascade actually fires.
    • Paragon_Essence.cpp — treat the rune-enchant cluster as a meta-skill: cascade them like passives so they stick as panel_spell_children (cleaned up by the standard refund path), whitelist them in the active-children prune pass, force-attach them in PanelLearnSpellChain, and add a login-time fixup so existing Paragons who bought Runeforging before this change get the 8 basic runes retro-granted on next login.

    Overview snapshot fix. PushSpellSnapshot no longer filters SPELL_ATTR0_DO_NOT_DISPLAY. Runeforging itself is hidden in the DBC but is a real panel purchase that must show in the Overview tab — characters whose only buy was Runeforging used to see an empty Overview.

    The two advanced runes (Stoneskin Gargoyle, Nerubian Carapace) are intentionally excluded from the auto-grant — retail gates them behind heroic dungeon / raid item drops.

    No SQL migration required.

    What changed (patch-enUS-5.MPQ)

    Interface\FrameXML\ParagonRuneforgeMenu.lua — New substitute Runeforging UI. Wow.exe's hardcoded runeforging frame is gated on playerClass == "DEATHKNIGHT" and silently no-ops for class 12, so we ship our own. It auto-opens the standard tradeskill window via DoTradeSkill under the hood, then issues CastSpellByID(53428) and watches for TRADE_SKILL_SHOW to fire the engrave for the rune the player picked.

    The same engrave path is used by the Character Advancement Runeforge tab (see patch-6), with the tradeskill window hidden off-screen for stealth-mode panel-initiated engraves.

    Interface\\FrameXML\\RuneFrame.lua and ComboFrame.lua are byte-equivalent to v0.7.20 modulo the new ParagonRuneforgeMenu append; the auto-generated ParagonRuneCost / ParagonComboGen tables ship inlined at the head of those files via the build script.

    What changed (patch-enUS-6.MPQ — ParagonAdvancement addon)

    Runeforge tab. New class-style tab for Paragons who own Runeforging (53428). Lists the 8 basic runes with tooltips, supports left-click to engrave (via stealth-mode DoTradeSkill), and respects the standard talent-pane tab UX. Selectable only when Runeforging is known.

    Right-click refund from the Overview tab. Right-clicking a learned spell or talent on the Overview tab queues it for refund. Refund hint is included in the tooltip; queued tiles dim and the Overview header re-renders so you can see what you've staged.

    Drag guard. Spells and talents that aren't actually known (or are pending unlearn / refund) can no longer be dragged to the action bars from the Overview tab. Stops the silent "ghost spell on the bar" failure mode.

    Tradeskill window stealth mode. When the Runeforge tab triggers an engrave, the stock TradeSkillFrame is repositioned off-screen and re-anchored after the engrave fires. No more brief popup flash.

    Overview tab fix. Corrected a Lua syntax error (PA.State:GetPendingTalentRank and ... — invalid because : requires immediate parens; nil-guards must use .) that was silently failing the entire Overview.lua file load on some characters, leaving the Overview tab blank.

    Compatibility

    • Wow.exe is byte-identical to v0.7.20 and re-uploaded only so this Release page stays self-contained for fresh installs (sha256 d9bec84d42a181f2f1c4b5da2312f1c76e6961726fe811d54d2f141a0d773d9d).
    • patch-enUS-4.MPQ (DBC + GlueXML) is byte-identical to v0.7.20.
    • Plain DK clients are unaffected — the runeforging carve-outs are class-gated on CLASS_PARAGON.

    Install

    Copy all four files into your ChromieCraft 3.3.5a directory:

    • patch-enUS-4.MPQ, patch-enUS-5.MPQ, patch-enUS-6.MPQ -> Data\\enUS\\
    • Wow.exe -> game root

    If you only have v0.7.20 installed, you can drop in just the new patch-enUS-5.MPQ and patch-enUS-6.MPQWow.exe and patch-enUS-4.MPQ are unchanged.

    Downloads
  • Knack117 released this 2026-05-12 03:17:37 +00:00 | 7 commits to main since this release

    Summary

    Server-side batch following v0.7.18, mostly Paragon-gated with a few server-wide quality-of-life changes the design discussion explicitly called for:

    • Cross-class stance / form / presence / aspect exclusivity. New IsFracturedExclusiveStanceSpell() (Unit.cpp / Unit.h) treats the union of warrior stances + druid forms (combat AND utility — Travel, Aquatic, Flight, Swift Flight) + Ghost Wolf + base Stealth + Shadowform + Metamorphosis + DK Presences + Hunter Aspects (combat AND utility — Cheetah, Pack) as mutually exclusive. Aura::CanStackWith (SpellAuras.cpp) refuses to stack two from the set, dropping the older aura via the same _RemoveNoStackAurasDueToAura path Battle Elixirs use. Plugs the stock-AC gap where DK Presences and Hunter Aspects (regular auras, just rendered in the stance bar) coexisted with engine-shapeshifts.
    • Stances / Presences / Aspects cancellable like Druid forms. SpellInfoCorrections.cpp now zeroes CategoryEntry on warrior stances, DK presences, and every rank of every hunter aspect (moves them out of SpellCategory 47 "Combat States", which gates the client's right-click / /cancelaura UX), AND clears AttributesEx6 bit 0x1000 on warrior stances + DK presences (a second client-UI gate surfaced via DBC diff — aspects don't have it set). Action-bar swap behavior is unchanged: warrior stances and druid forms still swap bars, presences and aspects continue to leave the bar alone.
    • Hunter ammo soft-fail (server-wide). Both SPELL_FAILED_NO_AMMO returns in Spell::CheckCast are now break;, so ranged + thrown abilities cast through with zero ammo. _ApplyAmmoBonuses continues to gate the actual arrow / bullet DPS bonus on a non-empty stack, so equipping ammo still pays off — you just stop being completely neutered when you run out. New programmatic block in SpellInfoCorrections.cpp mirrors the client-side Spell.dbc patch and sets EquippedItemClass = -1 on every Hunter-family spell whose EquippedItemSubClassMask includes Bow / Gun / Crossbow (skipping a small DENYLIST of Quiver / Ammo Pouch passive haste auras + Aynasha's Bow + Legendary Bow Haste). Server log: >> Fractured: dropped EquippedItemClass on 196 hunter shot abilities.
    • Feral Cat scaling (cat-only, bear unchanged). StatSystem.cpp UpdateAttackPowerAndDamage FORM_CAT branch doubles AGI's contribution to attack power (1.0 → 2.0). SpellAuraEffects.cpp Master Shapeshifter FORM_CAT branch doubles the talent's bonus before triggering 48420: rank 1 2% → 4%, rank 2 4% → 8% crit chance in Cat Form. FORM_BEAR / FORM_DIREBEAR / FORM_MOONKIN / FORM_TREE branches all left untouched so bear stays "already fine" per the resident Feral expert.
    • Pestilence spreads / refreshes Devouring Plague for Paragon casters. spell_dk.cpp spell_dk_pestilence::HandleScriptEffect now also spreads (and Glyph-of-Disease refreshes) Priest Devouring Plague when the caster is a Paragon. Stock DKs cannot cast Devouring Plague at all, so this branch is a no-op for them.
    • Dancing Rune Weapon: Paragon copies melee, not casts. spell_dk_dancing_rune_weapon::CheckProc for Paragon callers now requires eventInfo.GetDamageInfo() and spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE, so the ghostly weapon copies cross-class melee strikes (Hamstring, Sinister Strike, Heart Strike, Frost Strike, …) and auto-attacks instead of re-casting nukes. Stock DK gating is untouched.
    • Maelstrom Weapon: drop Arcane Blast from the allowlist. SpellInfo.cpp and spell_shaman.cpp allowlists now match Fireball and Frostbolt only — Arcane Blast stacked with its own self-buff was too potent.

    Server commit: b882637
    Default config flag still: Paragon.WildcardFamilyMatching = 1 (.reload config to toggle).

    patch-enUS-5.MPQ (UI / Lua patches), patch-enUS-6.MPQ (Paragon Advancement addon) and Wow.exe are byte-identical to v0.7.18 and re-attached for one-click install. patch-enUS-4.MPQ is updated — the new Spell.dbc carries the cancel/right-click fix for stances + presences, the hunter-ammo EquippedItemClass = -1 patch, the Cat Form / Master Shapeshifter / Pestilence tooltip annotations, and inherits the prior runes / reagents / stances / presences-cancel patches.


    Net effect

    • All classes: warrior stances, druid forms, presences and aspects no longer stack across the boundary. Switching aspects no longer requires dropping bear form first; Hunter Hawk and Cheetah are now an actual choice. Right-click on the buff icon (or /cancelaura) drops warrior stances, DK presences and hunter aspects the same way it already drops druid forms.
    • Hunters: "Ammo needs to be in the paper doll ammo slot before it can be fired" is gone. Empty quiver no longer bricks Steady Shot / Aimed / Multi / Auto Shot / etc. Equipping ammo continues to grant the per-shot DPS bonus.
    • Paragon Druids (cat builds): ~2× AGI → AP scaling and a doubled cat-only Master Shapeshifter crit bonus. If field reports still flag cat as weak after this lands, the next levers (per BALANCE-TODO.md) are bumping the AGI multiplier to 2.5×, then bumping the Master Shapeshifter cat multiplier to 3×.
    • Paragon DKs: Pestilence now spreads and refreshes Devouring Plague (Priest disease) the same way it spreads Blood Plague / Frost Fever. Dancing Rune Weapon copies cross-class melee strikes only — no more re-casting Mage spells off the ghostly weapon.
    • Paragon Shamans: Maelstrom Weapon still procs from any weapon (v0.7.17 behavior) and still grants its bonus to Mage Fireball / Frostbolt cross-class — Arcane Blast removed from the list.

    DB migration

    None this release.

    Deploy

    1. Pull main (commit b882637).
    2. docker compose build ac-worldserver
    3. docker compose up -d ac-worldserver
    4. Drop the new patch-enUS-4.MPQ into Data\enUS\ (or run the launcher).
    Downloads
  • Knack117 released this 2026-05-12 03:17:37 +00:00 | 7 commits to main since this release

    Client-bundle update — fixes ElvUI rune cooldown tracking and action-button usability for the Paragon class. No server-side code changes since v0.7.19.

    What changed (patch-enUS-5.MPQ)

    Interface\FrameXML\RuneFrame.lua — Expose the Paragon rune simulator state as globals so other addons can mirror it. The 3.3.5 client never publishes rune state for class != DEATHKNIGHT, so addons that try GetRuneCooldown / GetRuneType on a Paragon get nothing useful. The new exports are:

    • _G.PARAGON_RUNE_DURATION — rune cooldown in seconds (matches server RUNE_BASE_COOLDOWN)
    • _G.paragonRuneCD[1..6] — per-engine-slot GetTime() expiry timestamps; 0 means ready
    • _G.ParagonRune_GetSlotType(slot) — resolves to BLOOD / UNHOLY / FROST / DEATH with a static BBUUFF fallback when the engine returns nothing

    Interface\FrameXML\PlayerFrame.lua — Extend the existing action-button usability enforcer to also drive LibActionButton-1.0 buttons (used by ElvUI ActionBars, Bartender4, Dominos, etc.):

    • The 100ms OnUpdate floor now also iterates LibStub(LibActionButton-1.0).activeButtons and applies the correct usable / not-usable shade using each button's _state_action and button.config.colors
    • A delayed LAB.RegisterCallback(OnButtonUsable) hook (registered on PLAYER_LOGIN / ADDON_LOADED) fires immediately after every LibActionButton UpdateUsable, so engine repaints get corrected on the same frame instead of after up to a 100ms delay

    Without this, ElvUI's bars stayed permanently lit on rune-cost spells because Blizzard's IsUsableAction() lies for class 12, and our previous enforcer only painted the stock ActionButton1..12 / MultiBar*Button* buttons (which ElvUI hides off-screen).

    What changed (ElvUI addon — local install only, not in this MPQ bundle)

    ElvUI\Libraries\oUF\elements\runes.lua — Wrap GetRuneCooldown / GetRuneType to dispatch off UnitClass(player). Paragon characters now read from the new _G.paragonRuneCD / _G.ParagonRune_GetSlotType globals instead of the engine APIs, plus a 10 fps poller drives Update / UpdateType whenever a rune state, expiry, or type changes. DK clients see zero behavior change.

    These ElvUI source changes ship as part of the patched-ElvUI install in the Fractured client bundle, not in patch-enUS-5.MPQ itself.

    Compatibility

    • Plain DK clients are unaffected — every wrapped API still falls through to the engine when UnitClass(player) ~= PARAGON.
    • Plain action-button addons that aren't on LibActionButton-1.0 are unaffected — the LAB hook is gated on LibStub(LibActionButton-1.0, true) returning non-nil.
    • Wow.exe, patch-enUS-4.MPQ, and patch-enUS-6.MPQ are byte-identical to v0.7.19 and re-uploaded only so this Release page stays self-contained for fresh installs.

    Install

    Copy all four files into your ChromieCraft 3.3.5a directory:

    • patch-enUS-4.MPQ, patch-enUS-5.MPQ, patch-enUS-6.MPQ -> Data\enUS\
    • Wow.exe -> game root

    If you only have v0.7.19 installed, you can drop in just the new patch-enUS-5.MPQ — the other three files are unchanged.

    Downloads
  • Knack117 released this 2026-05-11 23:11:14 +00:00 | 9 commits to main since this release

    Summary

    Three Paragon fixes plus a panel catalog bug:

    • Weapon-narrow proc allowlist (refines v0.7.17). Maelstrom Weapon (51528) still procs from any weapon a Paragon equips, but the bypass is now an explicit allowlist (IsParagonWeaponSubclassWildcardSpell) instead of a blanket "any weapon-class proc". This restores correct gating on weapon-specialization talents like Hack and Slash, Sword Specialization, and Mace Specialization — those once again only fire from the weapon types they were designed for.
    • Talent ability-rank cascade. Talents that grant abilities via SPELL_EFFECT_LEARN_SPELL (most visibly Mangle) no longer get stuck at rank 1. A new helper walks the rank chain and learns each rank up to the player's level, both when the talent is first purchased and every time the player levels up. Fixes the long-standing "Paragon talent grants only the rank-1 baseline" issue caused by Player::learnSkillRewardedSpells being intentionally disabled for Paragon's class skill lines.
    • Riding-skill gate for flight forms. Flight Form (33943) now requires Expert Riding (34090); Swift Flight Form (40120) requires Artisan Riding (34091). Buying or auto-cascading either form correctly waits for the matching riding skill — no more 280% flying handed out alongside 150% riding.
    • Savage Defense (62600) on the Druid Feral spell tab. The panel-data bake (tools/_gen_paragon_advancement_spells_lua.py) was dropping every passive spell up front, even when the trainer explicitly sells it. The bake now carves out a small PASSIVE_TRAINER_ALLOWLIST so legitimate trainer-taught passives survive that filter, and Savage Defense surfaces on the Druid Feral spell tab at level 40 (matching trainer 33's stock learn level).

    Server commit: 999f7e9
    Default config flag still: Paragon.WildcardFamilyMatching = 1 (.reload config to toggle).

    patch-enUS-4.MPQ (DBC stance bypass) and patch-enUS-5.MPQ (tooltip / Lua patches) are byte-identical to v0.7.17 and re-attached for one-click install. patch-enUS-6.MPQ is updated (Paragon Advancement addon, now showing Savage Defense and the regenerated Druid Feral spell list).


    Net effect

    • Paragon Druids who purchase the Mangle talent automatically learn every Mangle rank their level qualifies for, on level-up too. Same plumbing applies to any other talent whose rank uses SPELL_EFFECT_LEARN_SPELL.
    • Paragon Druids who buy Flight Form on the panel only get it once they actually have Expert Riding; Swift Flight Form requires Artisan Riding. The cascade can no longer push past a rank the player isn't trained for.
    • Paragon Druids can buy Savage Defense (62600) on the Character Advancement panel for 1 AE under the Feral tab.
    • Weapon-specialization talents (Hack and Slash, Sword Specialization, Mace Specialization, Two-Handed Weapon Specialization, etc.) once again proc only off the weapon types they were authored for. Maelstrom Weapon's any-weapon behavior is unchanged from v0.7.17.

    DB migration

    mod-paragon ships 2026_05_11_05.sql which INSERT IGNOREs (62600, 1) into paragon_spell_ae_cost. The base file (base/paragon_spell_ae_cost.sql) was regenerated alongside, so fresh deployments already have the row. The dbimport container picks the migration up automatically on the next docker compose up -d --build.

    Deploy

    1. Pull main (commit 999f7e9).
    2. docker compose build ac-worldserver ac-db-import
    3. docker compose up -d (this also reruns ac-db-import, applying 2026_05_11_05.sql).
    4. Drop the new patch-enUS-6.MPQ into Data\enUS\ (or run the launcher).
    Downloads
  • Knack117 released this 2026-05-11 22:20:30 +00:00 | 10 commits to main since this release

    Summary

    Paragon weapon-class wildcard: cross-class proc talents (most visibly Maelstrom Weapon) now fire from any weapon a Paragon has equipped, not just the talent's stock subclass mask.

    Server commit: 7c57abd
    Default config flag still: Paragon.WildcardFamilyMatching = 1 (.reload config to toggle).

    No client changes this release — patch-enUS-4/5/6.MPQ and Wow.exe are byte-identical to the v0.7.16 attachments and are re-attached for one-click install.


    What changed

    For Paragon casters, the EquippedItemSubClassMask gate is now bypassed in three independent places that all sit on the proc path:

    1. Player::HasItemFitToSpellRequirements — talent-attach check at item-equip / login. Without this, a passive talent aura like Maelstrom Weapon (51528-51532) never even applies for a Paragon wielding a non-stock weapon.
    2. Player::CheckAttackFitToAuraRequirement — per-swing attackType↔aura match used by the proc engine.
    3. Aura::IsProcTriggeredOnEvent (SpellAuras.cpp:2254) — per-event proc evaluator that calls Item::IsFitToSpellRequirements again, independently of the previous two. This was the proc-killing gate before this commit: talent attached, swing matched, but this evaluator returned 0 charges for any weapon outside the stock subclass mask, so no stack was ever applied.

    All three bypasses are gated on:

    • IsParagonWildcardCaller(this) — player class 12 + the existing config flag.
    • spellInfo->EquippedItemClass == ITEM_CLASS_WEAPON. ITEM_CLASS_ARMOR (shield) gates are deliberately untouched — Shield Specialization / Shield Block / etc. still need an actual shield equipped.

    Each bypass also requires some weapon to be in the relevant slot (MAINHAND / OFFHAND / RANGED). Unarmed Paragons do not auto-activate every weapon-gated talent in the game.

    Net effect

    For a Paragon character with Maelstrom Weapon talented, the proc fires from every melee weapon — 1H sword, polearm, spear, fist, dagger, staff, 2H weapons, axes, maces, etc. Stock Shamans (and every other non-Paragon class) are byte-identical to before.

    Other weapon-class proc talents inherit the same wildcard for free (Sword Specialization, Mace Specialization, Two-Handed Weapon Specialization, etc.) — a Paragon will see those proc / be active off whatever weapon they wield, which is consistent with the wildcard identity of the class.

    Caveat — ranged-weapon auto-attacks

    The talent's stock ProcFlags (0xC00014) only fire on melee swings + melee abilities (DONE_MELEE_AUTO_ATTACK | DONE_SPELL_MELEE_DMG_CLASS | DONE_OFFHAND_ATTACK | DONE_MAINHAND_ATTACK). Ranged auto-attacks (bow / gun / crossbow / wand) fire PROC_FLAG_DONE_RANGED_AUTO_ATTACK (0x40), which the proc engine never matches against this talent, so the new weapon-subclass bypass is moot for those weapons specifically. Adding ranged-auto-attack support would require a Paragon-only ProcFlags expansion at the proc engine layer — deferred until requested.

    Deploy

    1. Pull main (commit 7c57abd).
    2. docker compose build ac-worldserver
    3. docker compose restart ac-worldserver

    No DB migration this round.

    Downloads
  • Knack117 released this 2026-05-11 18:55:27 +00:00 | 11 commits to main since this release

    Summary

    Paragon cross-class talent expansion pass + Warrior stance bypass (server and client) + Mirror Image now mimics the caster's spellbook instead of stock Frostbolt / Fire Blast.

    Server commit: e649402
    Default config flag still: Paragon.WildcardFamilyMatching = 1 (.reload config to toggle).


    Talent expansions (Paragon owners only — stock classes unchanged)

    • Cold Snap (11958) — resets cooldown of any Frost-school spell.
    • Nature's Swiftness (17116, 16188) + Predator's Swiftness (69369) — instant-cast on any Nature-school spell.
    • Vampiric Embrace (15286) — leech-heals from any single-target Shadow-school spell.
    • Fingers of Frost (44543/44545) + Frostbite (11071/12496/12497) — proc from any Frost-school chill effect (DK Howling Blast / Icy Touch / Chains of Ice, Hunter Frost Trap, Shaman Frost Shock, cross-class chill auras applying SPELL_AURA_MOD_DECREASE_SPEED).
    • Maelstrom Weapon (53817) — now also affects Mage Fireball (133), Frostbolt (116), and Arcane Blast (30451) at every rank, both for the cast-time/cost spellmod and for stack consumption on cast.

    Warrior stance bypass

    • Server: SpellInfo::CheckShapeshift returns SPELL_CAST_OK whenever a Paragon caster hits any Stances != 0 spell (no SpellFamilyName gate). Stock classes still see the regular form rules.
    • Client (patch-enUS-4.MPQ): Stances zeroed on every SPELLFAMILY_WARRIOR Spell.dbc row (105 spells) so the engine's pre-cast "Must be in Battle/Defensive/Berserker Stance" check stops eating CMSG_CAST_SPELL packets. Server bypass enforces the actual decision; stock Warriors still see the server-side stance error mid-cast if they actually click while out of stance.
    • Client (patch-enUS-5.MPQ): Lua tooltip post-processor recolors and appends (Paragon: bypassed) to the "Requires Stance" line on Warrior abilities. Action-bar UseAction wrapper routes stance-gated Warrior spell clicks through CastSpellByName so the stance-zero DBC + server bypass actually run instead of the engine's local IsUsableSpell path firing the error sound.

    Mirror Image

    • npc_pet_mage_mirror_image rebuilds its spell list from the Paragon owner's spellbook on InitializeAI and JustEngagedWith (the second pass + events.Reset() clears stale events the CasterAI base scheduler may have queued from the stock 59637/59638 entries before the rebuild ran).
    • Curated filter keeps single-target damaging spells (instant, cast-time, or channeled) with a base cooldown ≤ 10 s. The "damaging" definition includes SPELL_EFFECT_TRIGGER_MISSILE and SPELL_AURA_PERIODIC_TRIGGER_SPELL, so Arcane Missiles qualifies. Rejects passives, AoE, melee/ranged weapon strikes, item/reagent/stance/equip-gated, and lower spell ranks.
    • UpdateAI picks a random spell from the curated list per cast (so each image's rotation is independent and varied) and reschedules the next pick by the actually-cast spell's cast/channel duration + 750 ms breather, so a 5 s Arcane Missiles channel waits its full duration before re-rolling rather than visually looping across four images.
    • Tooltip on Mirror Image (55342) appends a Paragon line noting the random-spellbook behavior.

    Engine helpers

    • Unit::IsParagonWildcardCaller / Unit::ParagonFamilyMatches used by Spell.cpp, SpellInfo.cpp, Player.cpp, SpellAuraEffects.cpp, and the spell scripts.
    • SpellInfo::CheckShapeshift signature gains an optional caster pointer; all call sites updated.

    SQL migrations (auto-applied by DBUpdater)

    Under modules/mod-paragon/data/sql/db-world/updates/:

    • 2026_05_11_01.sql — Vampiric Embrace spell_proc relax + script gate (spell_pri_vampiric_embrace::CheckProc enforces stock for non-Paragon).
    • 2026_05_11_02.sql — Maelstrom Weapon spell_proc relax (initial; superseded by _04 for the stack-consumption fix below).
    • 2026_05_11_03.sql — Fingers of Frost / Frostbite spell_proc relax + spell_script_names binding.
    • 2026_05_11_04.sql — Maelstrom Weapon spell_proc fixup: restore SpellPhaseMask=1 (CAST) and AttributesMask=8 (PROC_ATTR_REQ_SPELLMOD); previous _02 set 8/0 which silently dropped every proc event.

    Diagnostics

    The chatty [paragon-diag] Mirror Image probe / kept / cast / engage logs from the debugging session were demoted from LOG_INFO to LOG_DEBUG, so production logs are quiet but the probes remain available if regressions need reproducing.

    Client patches

    • patch-enUS-4.MPQ — DBC bake now also runs _patch_spell_dbc_stances.py (zeros Stances on every SPELLFAMILY_WARRIOR row).
    • patch-enUS-5.MPQPlayerFrame.lua adds the spell-tooltip post-processor (Warrior stance / Maelstrom Weapon / Mirror Image) and a Warrior-stance UseAction wrapper.
    • patch-enUS-6.MPQ — unchanged from v0.7.15.
    • Wow.exe — unchanged from v0.7.15.

    Deploy

    1. Pull main (commit e649402).
    2. docker compose build ac-worldserver ac-db-import
    3. docker compose up -d ac-db-import (applies the four new SQL migrations).
    4. docker compose restart ac-worldserver.
    5. Players replace Data/enUS/patch-enUS-4.MPQ and Data/enUS/patch-enUS-5.MPQ with the assets attached to this release. patch-enUS-6.MPQ and Wow.exe are unchanged from v0.7.15 and only need to be (re)installed by anyone who skipped the previous release.
    Downloads
  • Knack117 released this 2026-05-11 05:25:18 +00:00 | 12 commits to main since this release

    Summary

    Server / core + mod-paragon only — no client MPQ or Wow.exe changes.

    Engine

    • CONFIG_PARAGON_WILDCARD_FAMILY / Paragon.WildcardFamilyMatching (default on; .reload config to toggle).
    • SpellInfo::IsAffected / IsAffectedBySpellMod accept optional listener unit; Paragon listeners bypass SpellFamilyName equality (flag masks still apply).
    • SpellMgr::CanSpellTriggerProcOnEvent passes proc aura owner into IsAffected.
    • Player::IsAffectedBySpellmod passes this so talent SpellMods (e.g. 69369 cast-time mod) can apply cross-family for Paragon.
    • ParagonFamilyMatches helper + used for Nourish healing-taken gate and Shred/Maul bleed mechanic gate in Unit.cpp.

    Predatory Strikes / Predator's Swiftness

    • Spell::prepare: Paragon with aura 69369 gets instant cast on non-channeled Nature spells with base cast < 10s (any family); buff removed on use.
    • spell_paragon_predatory_strikes on talents 16972 / 16974 / 16975 + spell_proc rows (migration 2026_05_11_00.sql).

    Deploy

    1. Pull main (commit a1c9172).
    2. Rebuild worldserver (e.g. \docker compose build ac-worldserver).
    3. Restart worldserver so DBUpdater applies the new SQL under mod-paragon.
    Downloads