Implement Auchenai Crypts Strategies and TBC Dungeon Contexts#2229
Implement Auchenai Crypts Strategies and TBC Dungeon Contexts#2229Celandriel merged 26 commits intomod-playerbots:test-stagingfrom
Conversation
Master update from Test-staging: Fix ObjectAccessor retrieval, optimize EquipActions, and implement RaidBossHelpers
This reverts commit c86032f.
Master update from Test staging
Update master from Test staging and Core Update
Test staging to master
Test staging to master
|
Alrighty, I fought him 5 times and tried to trigger some different scenarios. I think by having a Paladin healer, that gave me some difficulties because they are definitely the worst healer for this fight, which I think is good for pressure testing.
At the end of the day though, this is still much better than before. I could still clear this encounter, and without a strategy I used to have to make use of Flee a lot and still hope for some good luck on placement. Minor comments: I don't think you need to suppress AvoidAoeAction in your multiplier. I don't think there's any mechanic in the fight that would cause it to be called. Also, not sure if you were intending to keep STAIRS_TOP_POSITION for another purpose but otherwise that can be removed. |
|
Thank you for all the feedback. This is extremely helpful. I'll work on getting actions for ranged bots to keep their distance. That STAIRS_TOP_POSITION was originally there for when the tank wouldn't go to the position in the center of the corridor for some reason. I was attempting a bread crumb method at the time. But yeah, that will be removed. I'll also see if I can get the tank to be faster, it used to be quicker but the tank was pretty erratic especially when it got Shirrak to the correct position. But I will see if I can make it better. I have tested it with warlocks and holy paladins and yeah for some strange reason they are hellbent on completing whatever they are casting before running away from focus fire. Hopefully your suggestion works. I am noticing warriors are still charging back in, I will follow your suggested solution and hope that resolves the issue, |
Celandriel
left a comment
There was a problem hiding this comment.
@flashtate98 Anymore changes incoming?
Yes, I will convert this to draft while I add more actions to this. |
Renamed action names for organization and consistency. Various adjustments. New action for ranged keeping distance from Shirrak to minimize the inhibit magic mechanic
|
New action was added for ranged bots to keep their distance from Shirrak to minimize the inhibit magic mechanic. They will stand at the top of the stairs while the tank drags the boss further down the room he resides in. For some reason, bots selected for focus fire will not interrupt any of their casts to move out of the incoming AOE. However, once they finish, they will then move out of the AOE like they are supposed to. Thankfully, since the ranged bots keep their distance, they are not as affected by inhibit magic, and will almost always escape the AOE even after finishing their casts. At worst, I have seen them take one tick of damage as they were running out. I've done several tests with various ranged classes and it seems to be good now. But if anyone wants to do further testing themselves, that would be most welcome. Any and all further feedback is much appreciated. |
Analysis from Claude shared by Crow: During SPELL_STATE_PREPARING, PlayerbotAI.cpp does: YieldThread(bot, GetReactDelay()); return; // UpdateAIInternal() never runs The entire trigger → action pipeline lives inside UpdateAIInternal(). So no matter how high the action's priority is (ACTION_EMERGENCY + 10), no matter what the trigger returns — none of it executes while a spell is being cast. The call to InterruptNonMeleeSpells is dead code in this scenario, because the action simply never gets invoked. The only things that can interrupt a preparing spell right now are the hardcoded checks already in that block (target died, GO despawned, target full health healed by someone else). Everything else waits until the cast finishes.
brighton-chi
left a comment
There was a problem hiding this comment.
Tested it and works great. Thanks!
| std::list<Creature*> creatureList; | ||
| bot->GetCreatureListWithEntryInGrid(creatureList, static_cast<uint32>(AuchenaiCryptsIDs::NPC_FOCUS_FIRE), 20.0f); |
There was a problem hiding this comment.
Pushed an update. Let me know if its fixed.
| bot->GetHealthPct()>50.0f) | ||
|
|
||
| { |
There was a problem hiding this comment.
Pushed an update. Let me know if its fixed.
|
Codestyle check fails |
8f7d352
into
mod-playerbots:test-staging


Pull Request Description
This PR aims to add bot strategies to the Auchenai Crypts dungeon, specifically for the boss Shirrak the Dead Watcher, as his focus fire mechanic is really annoying to deal with.
Additionally I have added TbcDungeonActionContext.h and TbcDungeonTriggerContext.h for future reference as I add more strategies to TBC dungeons that need it.
A HUGE thank you to @brighton-chi for all his help. This has been a fun learning experience!
Feature Evaluation
Trigger: A 20 yard radius grid search is performed to locate the focus fire trigger NPC
Action: Bots will flee from the trigger NPC using MoveAway with a 5 yard safety buffer
Multiplier: A for loop that prevents bots from running back into the focus fire mechanic while its active.
Tanking: Tanks have a set coordinate to drag the boss to for the duration of the fight.
Minimal, these scripts only execute when Shirrak has been engaged.
How to Test the Changes
Go into Auchenai Crypts (Normal or Heroic) and engage Shirrak the Dead Watcher
Impact Assessment
This logic is only applied to Auchenai Crypts and activates during Shirrak's encounter.
Behavior only applies when in the instance and when engaged with Shirrak.
New dungeon contexts were added (TbcDungeonActionContext and TbcDungeonTriggerContext) to provide a clean and dedicated structure for future TBC dungeon strategies that will be developed. This was done to be in alignment with the existing WOTLK contexts that already exist.
Messages to Translate
Does this change add bot messages to translate?
- - [X] No
- - [ ] Yes (list messages in the table)
AI Assistance
Was AI assistance used while working on this change?
- - [ ] No
- - [X] Yes (explain below)
Gemini was used to help me understand existing code in the module I was referencing and reusing to develop this strategy as I am not a programmer and hardly know anything about C++.
Final Checklist
Notes for Reviewers
If there are any better alternatives that could be used to help improve the strategy in any way, please suggest it. I am very new to this and want to learn and improve.