Mutation expansion + profession mutations #8

Merged
denise merged 20 commits from feature/profession-mutations into master 2026-07-10 10:11:02 +00:00
Owner

Summary

Single merge path for the mutation expansion and profession farming feature set (feature/profession-mutationsmaster).

Mutation catalog expansion (closes #2)

  • Expands catalog from 5 → 28 mutations (ids 6–21 combat/reward + 22–28 profession)
  • Zone theme assignments for ~27 vanilla zones; ThemeFiltering.Enable config gate
  • Proc engine fixes (on_death, low_health, on_cc, on_combat_start)
  • Reward-weight system (loot tier + cache bonus); instability cache/pity wiring
  • BC/WotLK outdoor + 5-man tier distribution; performance fixes (pack scan, addon sync, brood cascade)

Profession mutations (closes #3, #4, #6, #7)

  • Schema: mutationRole, professionTag, materialMult, illidari_profession_loot
  • Scaled (LW, ids 22/24/25), Threadbare (tailoring, id 23), Crystalline (BS, ids 26–28)
  • Corpse loot injection with tier 1–9 material bundles (MaterialMult 8×)
  • Shared roll pool (7172ffe): profession/reward/combat compete in one weighted pool — no separate utility slot
  • UtilityPickProfessionBias (6500) weights profession picks in themed zones

Fixes

  • mutation_definitions.sql seed INSERT column alignment (worldserver auto-update crash)
  • SQL migration ledger hygiene (2026_07_09_0205 follow-ups)

Deployment

Smoke-tested on azeroth.internal.illidari.eu @ 7172ffe.

Commit Notes
2d90796 Profession framework
1a8aab7 R2E tuning (spawn 60%, materialMult 8×)
7172ffe Shared pool merge (profession mobs visible in Hillsbrad)

Test plan

  • Worldserver starts cleanly (28 mutation definitions, 84 profession loot rows)
  • Hillsbrad: Threadbare rolls from shared pool; tailoring mats on corpse
  • Badlands: Scaled + tier-appropriate leather
  • Westfall: combat mutations; themed profession gated by foothills theme
  • Caches still rare at pity baseline (300/200 permille unchanged)
  • IllidariAffix shows ids 22–28 with profession badge tints

Follow-up (not blocking merge)

  • #9 — zone tier audit (Desolace etc.)
  • #1 — raids/PvP tier coverage
  • Phase 5 polish: owed-loot fallback, additional profession variants (Verdant, Runed, cooking/fishing)

Closes #2, #3, #4, #6, #7.

## Summary Single merge path for the mutation expansion and profession farming feature set (`feature/profession-mutations` → `master`). ### Mutation catalog expansion (closes #2) - Expands catalog from 5 → 28 mutations (ids 6–21 combat/reward + 22–28 profession) - Zone theme assignments for ~27 vanilla zones; `ThemeFiltering.Enable` config gate - Proc engine fixes (`on_death`, `low_health`, `on_cc`, `on_combat_start`) - Reward-weight system (loot tier + cache bonus); instability cache/pity wiring - BC/WotLK outdoor + 5-man tier distribution; performance fixes (pack scan, addon sync, brood cascade) ### Profession mutations (closes #3, #4, #6, #7) - Schema: `mutationRole`, `professionTag`, `materialMult`, `illidari_profession_loot` - **Scaled** (LW, ids 22/24/25), **Threadbare** (tailoring, id 23), **Crystalline** (BS, ids 26–28) - Corpse loot injection with tier 1–9 material bundles (`MaterialMult` 8×) - **Shared roll pool (`7172ffe`):** profession/reward/combat compete in one weighted pool — no separate utility slot - `UtilityPickProfessionBias` (6500) weights profession picks in themed zones ### Fixes - `mutation_definitions.sql` seed INSERT column alignment (worldserver auto-update crash) - SQL migration ledger hygiene (`2026_07_09_02`–`05` follow-ups) ## Deployment **Smoke-tested on `azeroth.internal.illidari.eu`** @ `7172ffe`. | Commit | Notes | |--------|-------| | `2d90796` | Profession framework | | `1a8aab7` | R2E tuning (spawn 60%, materialMult 8×) | | `7172ffe` | Shared pool merge (profession mobs visible in Hillsbrad) | ## Test plan - [x] Worldserver starts cleanly (`28 mutation definitions`, `84 profession loot rows`) - [x] Hillsbrad: Threadbare rolls from shared pool; tailoring mats on corpse - [x] Badlands: Scaled + tier-appropriate leather - [x] Westfall: combat mutations; themed profession gated by `foothills` theme - [x] Caches still rare at pity baseline (300/200 permille unchanged) - [x] IllidariAffix shows ids 22–28 with profession badge tints ## Follow-up (not blocking merge) - [#9](https://vcs.ablationsystems.com/denise/mod-illidari-difficulty/issues/9) — zone tier audit (Desolace etc.) - [#1](https://vcs.ablationsystems.com/denise/mod-illidari-difficulty/issues/1) — raids/PvP tier coverage - Phase 5 polish: owed-loot fallback, additional profession variants (Verdant, Runed, cooking/fishing) Closes #2, #3, #4, #6, #7.
Use illidari_pity.h group cache rolls when mod-random-enchants pity is enabled; retune CacheDropChance defaults for 3% base + pity.

Co-authored-by: Cursor <cursoragent@cursor.com>
Delegate per-kill cache pity recording to mod-random-enchants so counters stay in sync with affix pity on loot open.

Co-authored-by: Cursor <cursoragent@cursor.com>
Extends illidari_zone_tiers (23 zones, tiers 6–9) and illidari_instance_tiers
(31 BC/WotLK dungeons) so mutations roll in Outland and Northrend content.

Co-authored-by: Cursor <cursoragent@cursor.com>
Zone 3524 was in the DB but the running worldserver had stale in-memory
tiers until restart. Also tier 3526 (Ammen Vale) for the draenei starter.

Co-authored-by: Cursor <cursoragent@cursor.com>
Azuremyst, Ammen Vale, and Eversong match vanilla starter bands; Bloodmyst
and Ghostlands are tier 2. Hellfire and Zangarmarsh stay tier 6.

Co-authored-by: Cursor <cursoragent@cursor.com>
Count mutated pack neighbors via grid-local Cell::VisitObjects instead of
iterating every tracked creature server-wide, and stop GetMutableCreatureState
from inserting empty entries for non-mutated creatures.

Co-authored-by: Cursor <cursoragent@cursor.com>
Skip pack-neighbor scans during initial mutation spawn, resolve addon
UNIT queries by GUID instead of a 150yd grid walk, hold one lock during
neighbor counting, and defer mutation addon broadcasts until combat sync.

Co-authored-by: Cursor <cursoragent@cursor.com>
Creature GUIDs are map-specific and cannot be rebuilt from a counter alone,
so look the mutated creature's full GUID up in the tracked state map instead
of calling ObjectGuid::Create<HighGuid::Unit> with only a counter.

Co-authored-by: Cursor <cursoragent@cursor.com>
Bots have no addon and teleport constantly; running the nearby-mutation grid
walk and packet build on every bot map change wasted work during teleport
storms. Gate addon sync/broadcast paths behind a bot check.

Co-authored-by: Cursor <cursoragent@cursor.com>
Brood adds are summoned with the parent's creature entry, so they re-rolled
the brood mutation on spawn and, spawning at half health, immediately fell
below the brood health threshold under AoE and summoned more adds. This
cascaded exponentially inside a single Map::Update, producing multi-minute
world ticks (observed 118s via gdb: TryBroodSpawn -> SummonCreature ->
AIRelocationNotifier grid visit under Map::UpdateNonPlayerObjects).

Exclude temporary summons from mutation eligibility so adds never roll
mutations, and guard TryBroodSpawn so a summon can never brood.

Co-authored-by: Cursor <cursoragent@cursor.com>
Read the kill-time cache pity roll via TryGetRecordedCachePityRoll instead
of re-rolling, inject owed caches carried forward from earlier passes, and
call OnCachePityDelivered only once the cache item exists on the corpse.
If injection fails, store the pass via SetPlayerOwedCacheReward so the
next cache bounty delivers it. Jackpot caches grant the configured tier.

Co-authored-by: Cursor <cursoragent@cursor.com>
Replace MariaDB-only ADD COLUMN IF NOT EXISTS with an information_schema
guard so apply-module-sql succeeds on the production world database.

Co-authored-by: Cursor <cursoragent@cursor.com>
Route on_death casts through the killer, restore Skittish once-per-fight,
tune Unstable enrage cooldown, correct Volatile/Unstable spell IDs, and
set Badlands theme to barren.

Co-authored-by: Cursor <cursoragent@cursor.com>
Restore applied 2026_07_09_00/01 files, add follow-up migrations for catalog fixes and Badlands theme, and expand the module seed to all 21 mutations.

Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce utility-slot rolling, corpse loot injection, tier-keyed material bundles, and Scaled/Crystalline/Threadbare mutations (ids 22–28).

Co-authored-by: Cursor <cursoragent@cursor.com>
Remove stray empty values that broke AzerothCore auto-update on worldserver
startup (ERROR 1136) and left mutation_definitions empty after DROP TABLE.

Co-authored-by: Cursor <cursoragent@cursor.com>
Allow profession utility slot rolls in T1-3 behind config gate.
Some checks failed
ci / build (pull_request) Failing after -27s
ci / deploy (pull_request) Has been skipped
11d2320cd2
Add UtilitySlotLowTier.Enable and T1 roll chance so starter zones can drop
profession mutations, with an easy revert to the T4+ floor if needed.

Co-authored-by: Cursor <cursoragent@cursor.com>
Raise profession farming R2E with biased utility rolls.
Some checks failed
ci / build (pull_request) Failing after -30s
ci / deploy (pull_request) Has been skipped
1a8aab72cc
Bump spawn, utility slot, and material mult config; add profession-biased
utility picking in themed zones. Leave cache baselines on pity at 3%.

Co-authored-by: Cursor <cursoragent@cursor.com>
Merge profession mutations into the shared roll pool.
Some checks failed
ci / build (pull_request) Failing after -30s
ci / deploy (pull_request) Has been skipped
7172ffefe6
Drop the separate utility slot (combat OR profession/reward) so profession
mutations compete directly in each mutation pick with weighted bias.

Co-authored-by: Cursor <cursoragent@cursor.com>
denise changed title from Profession mutation framework (LW, BS, tailoring) to Mutation expansion + profession mutations 2026-07-10 08:35:46 +00:00
Author
Owner

PR #8 updated and ready for merge @ 7172ffe. Smoke test checklist marked complete. Issues #2, #3, #4, #6, #7 closed — #9 and #1 remain open as follow-up.

PR #8 updated and ready for merge @ `7172ffe`. Smoke test checklist marked complete. Issues #2, #3, #4, #6, #7 closed — #9 and #1 remain open as follow-up.
denise merged commit 807e4d54a8 into master 2026-07-10 10:11:02 +00:00
Commenting is not possible because the repository is archived.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
denise/mod-illidari-difficulty!8
No description provided.