Skip to content

fix(Scripts/BlackTemple): Match boss ids to DBC and save Illidan's gate state - #28317

Open
brighton-chi wants to merge 2 commits into
azerothcore:masterfrom
brighton-chi:fix/black-temple-boss-ids
Open

brighton-chi wants to merge 2 commits into
azerothcore:masterfrom
brighton-chi:fix/black-temple-boss-ids

Conversation

@brighton-chi

Copy link
Copy Markdown
Contributor

Changes Proposed:

This PR proposes changes to:

  • Core (units, players, creatures, game systems).
  • Scripts (bosses, spell scripts, creature scripts).
  • Database (SAI, creatures, etc).

Black Temple's boss state ids drift from DungeonEncounter.dbc at the end. Slot 8 holds Akama's event that opens the gate to Illidan's summit, so Illidan sits in slot 9 while the DBC has him at 8. Since #27818, .instance getbossstate names each slot after its DBC encounter, so Akama's event shows up as "Illidan Stormrage" and Illidan as "Unknown".

The gate event isn't an encounter, so it moves out of the boss states into persistent data, the way Ulduar and Culling of Stratholme keep their events. Illidan is now 8 and the boss count is 9, same as the DBC. Akama's gossip conditions read boss state 8 to pick his text before and after the scene, so a world update points them at the gate's saved value, exposed through GetData(DATA_ILLIDAN_GATE).

This also changes what happens after a restart. Until now the gate opened on load whenever the Council was dead, even if nobody had talked to Akama yet. Now it only opens if Akama's scene opened it before the restart. If the Council is dead and the gate is still shut, Akama is sent back down to his spot by the Council so the scene can still be done, since his spawn point is on the summit behind the gate.

Decisions:

  • The gate no longer has a door row, so OnGameObjectCreate closes it explicitly unless the saved value says it was opened. Its spawn in the DB is open, and the door row was the only thing keeping it shut.
  • Akama is moved back from JustRespawned, which runs on his first update after he spawns. Reset also runs on evade, and the instance's create hooks run while he's still being added to the map. He's only moved while Illidan isn't done.
  • DATA_AKAMA_ILLIDAN keeps its name with a new value, so every lookup by it stays as is. The gate gets DATA_ILLIDAN_GATE.

Worth a close look: npc_akama_illidan in boss_illidan.cpp (the new JustRespawned, and the scene now saving the gate and opening it itself) and OnGameObjectCreate in instance_black_temple.cpp. The header changes are just the new numbering. The world update only moves Akama's four gossip conditions (menu 8713) from boss state 8 to the gate data.

AI-assisted Pull Requests

Important

Using AI tools to prepare pull requests is allowed, but it must be disclosed and it must follow our AC guidelines for AI Agentic Engineering (link below).

You are expected to fully understand the changes you submit and to be able to explain and justify them when maintainers ask.

  • AI tools (e.g. Claude, ChatGPT, or similar) were used entirely or partially to prepare this pull request. If checked, specify which tools and models below.
    • Tools/models used: Claude Code (Claude Opus 5.5 for the analysis, design and this description, Claude Sonnet 5.5 for the code changes)
  • I have read and understood the AC guidelines for AI Agentic Engineering

Issues Addressed:

  • Closes

SOURCE:

The changes have been validated through:

  • Live research (checked on live servers, e.g Classic WotLK, Retail, etc.)
  • Sniffs (remember to share them with the open source community!)
  • Video evidence, knowledge databases or other public sources (e.g forums, Wowhead, etc.)
  • The changes promoted by this pull request come partially or entirely from another project (cherry-pick). Cherry-picks must be committed using the proper --author tag in order to be accepted, thus crediting the original authors, unless otherwise unable to be found

Tests Performed:

This PR has been:

  • Tested in-game by the author.
  • Tested in-game by other community members/someone else other than the author/has been live on production servers.
  • This pull request requires further testing and may have edge cases to be tested.

How to Test the Changes:

  • This pull request can be tested by following the reproduction steps provided in the linked issue
  • This pull request requires further testing. Provide steps to test your changes. If it requires any specific setup e.g multiple players please specify it as well.
  1. Enter a new Black Temple instance. The gate to Illidan's summit is shut and Akama stands on the summit. .instance getbossstate lists 0 to 8 under the DBC names, 8 being Illidan Stormrage.
  2. Kill the Illidari Council and restart the server before talking to Akama. The gate is still shut, and Akama shows up by the Council room, walks to his spot, says his lines and can be talked to. His gossip reads "The time has come…" with "I'm ready, Akama."
  3. Talk to him. He walks to the gate, plays the scene and the gate opens. Back on the summit his gossip reads "Be wary, friends…" with "We're ready to face Illidan."
  4. Restart again. The gate is open, Akama is back on the summit with the same post-gate gossip, and talking to him starts Illidan.

Known Issues and TODO List:

How to Test AzerothCore PRs

When a PR is ready to be tested, it will be marked as [WAITING TO BE TESTED].

You can help by testing PRs and writing your feedback here on the PR's page on GitHub. Follow the instructions here:

http://www.azerothcore.org/wiki/How-to-test-a-PR

REMEMBER: when testing a PR that changes something generic (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but especially check that the PR does not cause any regression (i.e. introducing new bugs).

For example: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but we should test Y and Z as well.

brighton-chi and others added 2 commits October 29, 2026 21:26
Black Temple kept Akama's gate event in boss slot 8, the
DungeonEncounter.dbc index for Illidan, so Illidan sat in slot 9.

Move the gate event to persistent data and number Illidan 8. The gate
now opens on load only if Akama's scene opened it, and Akama is sent
back down to his spot by the Council when the Council is dead and the
gate is still shut.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions

Akama's gossip menu 8713 picked its text and option by boss state 8,
which was the gate event and is now Illidan. After the gate scene he
showed the pre-gate text again.

Expose the gate's persistent value through GetData(DATA_ILLIDAN_GATE)
and point the four conditions rows at it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brighton-chi

Copy link
Copy Markdown
Contributor Author

Self-review — fix/black-temple-boss-ids → master

Outcome 2 findings — 1 fixed, 1 dismissed — final round clean

Reviewed 869c9931f (fix/black-temple-boss-ids vs azerothcore/master, merge-base diff — 4 files, +52 −17)

By Claude Code (desktop app), claude-opus-5-5 — self-review v1.0, 2026-10-29

Tested in-game by the author the four "How to Test" steps on a fresh instance before the round 1 fix — all pass; after it, Akama's gossip text and option with the Council dead before the scene, after the scene, and after a restart with the gate open — all correct; an Illidan wipe not tested, and its step dropped from the PR's test steps

Review details (2 rounds)

Intent Make Black Temple's boss state ids match DungeonEncounter.dbc (Illidan Stormrage at 8, 9 boss slots) by moving Akama's gate-opening event out of the boss states into instance persistent data, keeping the gate to Illidan's summit shut until Akama's scene opens it, across restarts too, and keeping Akama reachable when the Council is dead but the scene hasn't played.

Project rules .agents/docs/self-review-rules.md found and applied, with .agents/docs/code-review.md on top

Diff 008e1dd3bc72fb5f0ba34bcae5d5c69c52ffeeb3

Metadata cd5c9804d6c34d1977710e20c458eaf5c2114fe5 (commit subjects only; no PR open yet)

Round 1 — e0ca1b7df, 1 finding

  1. conditions rows for gossip menu 8713 (Akama 23089, base conditions.sql :6773, :6774, :8888, :8889) still check boss state 8, which is now Illidan. After the gate scene, Akama shows the pre-gate text 10960 and "I'm ready, Akama." Text 10835 and "We're ready to face Illidan." can no longer appear → fixed in 869c9931f: GetData(DATA_ILLIDAN_GATE) plus a pending_db_world update moving the 4 rows to instance data 18

Round 2 — 869c9931f, round 1 fix and new commit subject, 1 finding

  1. black_temple.h:37-38 (from e0ca1b7df, outside the delta) — BT lockouts saved under the old numbering with the Council dead and Illidan alive load the old gate value as Illidan's state, so Akama's event can be out of step until the lockout resets → dismissed: no characters SQL by design, as in the Ulduar (fix(Scripts/Ulduar): Match boss ids to DungeonEncounter.dbc #28079) and ToC (fix(Scripts/TrialOfTheCrusader): Use boss states and reset the champion kill counter #28117) id changes; the PR's Known Issues note names these saves

@github-actions github-actions Bot added DB related to the SQL database Script Refers to C++ Scripts for the Core file-cpp Used to trigger the matrix build labels Oct 30, 2026
@coderabbitai

coderabbitai Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 993b459 and 869c993.

Files selected for processing: 4
  • data/sql/updates/pending_db_world/rev_1793327916730492900.sql
  • src/server/scripts/Outland/BlackTemple/black_temple.h
  • src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
  • src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

Walkthrough

The Black Temple scripts now track Illidan gate completion separately from Akama’s encounter state. The instance restores the gate state from persistent data, and Akama’s respawn and gossip logic use that state. The door sequence records gate completion and opens the gate. The SQL condition rows now use the gate data identifier.

Priority: Normal

Merge Risk: Minimal · up to 869c9

No actionable merge-blocking issue is established. Existing lockouts retain the disclosed compatibility limitation until reset.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DB related to the SQL database file-cpp Used to trigger the matrix build Script Refers to C++ Scripts for the Core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant