Skip to content

[lua][sql] Implement Imperial Agent Rescue Assault#10747

Open
whiskeyhughes wants to merge 12 commits into
LandSandBoat:basefrom
whiskeyhughes:Implement-Imperial-Agent-Rescue-assault
Open

[lua][sql] Implement Imperial Agent Rescue Assault#10747
whiskeyhughes wants to merge 12 commits into
LandSandBoat:basefrom
whiskeyhughes:Implement-Imperial-Agent-Rescue-assault

Conversation

@whiskeyhughes

Copy link
Copy Markdown
Contributor

I affirm:

  • I understand that if I do not agree to the following points by completing the checkboxes my PR will be ignored.
  • I understand I should leave resolving conversations to the LandSandBoat team so that reviewers won't miss what was said.
  • I have read and understood the Contributing Guide and the Code of Conduct.
  • I have tested my code and the things my code has changed since the last commit in the PR and will test after any later commits.

What does this pull request do?

Implements the Imperial Agent Rescue Assault using the modern InstanceAssault framework.

This implementation follows the same modern Assault structure and conventions used in CriticalXI's recent Assault implementation (#10364) to keep the content consistent with the current framework.

Changes

  • Port Imperial Agent Rescue to the modern InstanceAssault framework.
  • Remove the legacy instance implementation.
  • Add Dilapidated Gate mechanics and Warder interactions and make Gate not targetable.
  • Add the Brujeel rescue sequence with randomized Pot Hatch selection.
  • Integrate Assault completion with the modern framework.
  • Add mission-specific Warder skill lists.
  • Update the Bhaflau Thickets Runic Seal for the modern Assault entry flow.

Steps to test these changes

Setup

  1. Grant the required mission progress:
    !addmission 4 3
    
  2. Grant the required key item:
    !addkeyitem PSC_WILDCAT_BADGE
    
  3. Register for the Imperial Agent Rescue Assault.
  4. Enter through the Runic Seal in Bhaflau Thickets.

Verify Assault Initialization

  • Verify the Assault instance is created successfully.
  • Verify all expected Warders, Dilapidated Gates, Pot Hatches, and Brujeel are present.

Verify Gate Mechanics

Each gate should be tested using at least one of the following methods.

Positioning is important: Stand directly against the Dilapidated Gate (the gate itself is not targetable). The Warder must target you so that its TP move passes through you and hits the gate.

Verify the following:

  • Staff Toss (WHM Warder) destroys a gate in one hit if the attack misses the player and strikes the gate.
  • Axe Throw (BST Warder) destroys a gate in one hit if the attack misses the player and strikes the gate.
  • Firespit damages the gate, and after four successful hits, destroys it.

After a gate is destroyed:

  • Verify the corresponding cell door opens.
  • Verify progression continues normally.

Verify Rescue Sequence

  • Verify only one Pot Hatch triggers the rescue event.
  • Verify the incorrect Pot Hatches do nothing, except open.
  • Verify Brujeel appears from the correct Pot Hatch.
  • Verify Brujeel's dialogue sequence plays completely.
  • Verify Brujeel disappears after the sequence.

Verify Completion

  • Verify the Rune of Release appears.
  • Verify the Ancient Lockbox appears.
  • Verify the Assault completes successfully.
  • Verify Assault Points and rewards are granted.

Tested

  • Assault registration via Runic Seal
  • Instance creation
  • Dilapidated Gate mechanics
  • Brujeel rescue sequence
  • Rune of Release spawn
  • Assault completion and rewards and failure
  • Entry/exit flow

Tested successfully on both:

  • Single map server configuration
  • Multi-zone map server configuration

@whiskeyhughes
whiskeyhughes force-pushed the Implement-Imperial-Agent-Rescue-assault branch from acce596 to 5c65098 Compare July 17, 2026 04:47
@whiskeyhughes
whiskeyhughes force-pushed the Implement-Imperial-Agent-Rescue-assault branch from 5c65098 to 53ecc78 Compare July 17, 2026 04:48
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
Comment thread scripts/assaults/Mamool_Ja_Training_Grounds/imperial_agent_rescue.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
@Xaver-DaRed

Copy link
Copy Markdown
Contributor

In truth, all this should be rewriten aswell
imagen

This is unmaintainable. The moment theres an ID shift, the assault will break. So I would start with rewriting this based on the GetFirstID() and GetTableOfIDs() pattern and then go from there.

@whiskeyhughes

Copy link
Copy Markdown
Contributor Author

Thanks for the feedback, that is much cleaner!

I went through the review feedback and cleaned up the implementation quite a bit.

The biggest change was removing the hardcoded mob and gate IDs. Those are now built from GetTableOfIDs() / GetFirstID() patterns, so the Assault should be much less likely to break if entity IDs shift later.

I also replaced the raw spell and mob skill IDs with enums, added the missing Axe Throw and Stave Toss enums, and corrected Firespit to use the 1733 version that this Assault’s skill lists actually use.

The Warder logic was split into separate BST, NIN, and WHM modules to get rid of the repeated job checks. The shared Mamool_Ja_Warder.lua file is now just a small dispatcher, since these mobs still resolve through the shared spawn name. Shared gate damage and spawn behavior were moved into globals/warder.lua.

I tested the full flow afterward:

  • BST pets spawn and engage
  • NIN Warders stay in melee range
  • WHM buff behavior works
  • Firespit builds gate damage correctly
  • Axe Throw and Stave Toss can break gates
  • the rescue pot is still randomly selected
  • the Assault completes normally

This should address the ID maintainability, enum, and job-specific script concerns from the review.

Comment thread scripts/zones/Mamool_Ja_Training_Grounds/IDs.lua Outdated
Comment thread scripts/assaults/Mamool_Ja_Training_Grounds/imperial_agent_rescue.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/mobs/Mamool_Ja_Warder_bst.lua Outdated
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/globals/zoneUtil.lua
Comment thread scripts/zones/Mamool_Ja_Training_Grounds/npcs/_jul.lua Outdated
@whiskeyhughes

Copy link
Copy Markdown
Contributor Author

I’ve addressed all of the review feedback, pushed the requested changes, and tested everything ingame. I believe all review comments are now resolved, but please let me know if I missed anything. Thanks again for taking the time to review and give feedback, it was incredibly helpful!

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants