Skip to content

[sql][lua] Assault Excavation Duty bug fixes and nerfs#10582

Draft
Nobutadas wants to merge 1 commit into
LandSandBoat:basefrom
Nobutadas:assault-excavation-duty-bug-fixes-and-nerfs
Draft

[sql][lua] Assault Excavation Duty bug fixes and nerfs#10582
Nobutadas wants to merge 1 commit into
LandSandBoat:basefrom
Nobutadas:assault-excavation-duty-bug-fixes-and-nerfs

Conversation

@Nobutadas

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?

Fixes bugs and nerfs to correct damage and drop values for Assault Excavation Duty

mob_pools.sql: Sets immunity to Gravity, Bind, Paralyze, Blind, Slow, Poison, Sleeps
Capture: https://www.dropbox.com/scl/fo/chyjx286a6xux8ioa6jtv/AP_LXhnGuYA5ySPV3C_D-mE?rlkey=gwhic96wgoynccxum4jcs885e&st=unm4c7dk&dl=0

mob_skills.sql: Removes text from the mine on death.

Brittle_Rock.lua changes

  • HP is set to average hp per level cap.
  • Damage taken has been significantly nerfed to nearly mimic retail captures. There are a few outliers at uncapped crits and with weapon skills. Magic needs more testing to verify there is not further damage reductions at capped levels.
  • Accounts for hidden twin Brittle Rock.

qiqirn_mine.lua changes
Mines now spawn at correct spots in front of Brittle Rocks.
It almost appears as if mines spawn at the nearest "node," but I couldn't determine what constituted a "node"

Qiqirn_mine.lua
Fixed countdown
Used mob ability instead of directly setting HP to 0

mine_blast.lua
Added Excavation Duty code

Qiqirn_Volcanist.lua and Qiqirn_Ceramist.lua
Nerfed drop rate based on current retail captures.

Captures

https://drive.google.com/file/d/1DH6K-vRMyDOZvkTEE-KGsNcm62BDYUZ-/view?usp=sharing
https://drive.google.com/file/d/1KcLVGKzWgx_n1cvJwsISMJGoS3IWLbHe/view?usp=drive_link
https://www.dropbox.com/s/x08yun3o6mbx1nb/Lebros%20Cavern%20PSC%20-%20Excavation%20Duty.zip?dl=0
https://www.dropbox.com/s/i7fubien5c7eqym/excavation%20duty.rar?dl=0

Videos

Mine behavior: https://youtu.be/0Hf3xBzKC-E

Steps to test these changes

Sign up for Excavation Duty assault and test.

Note

This PR will have a conflict with PR #10558 on scripts\zones\Lebros_Cavern\IDs.lua, so will keep this as draft until that PR is complete.

@Nobutadas
Nobutadas force-pushed the assault-excavation-duty-bug-fixes-and-nerfs branch from f53a413 to d043a0e Compare July 10, 2026 18:17
if math.randomInt(1, 100) <= 40 then -- TODO: More Retail data. Current data is 47/127 for drops.
if player:addTempItem(xi.item.QIQIRN_MINE) then
player:messageSpecial(ID.text.TEMP_ITEM, xi.item.QIQIRN_MINE)
end

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For all Qiqirns

entity.onMobDeath = function(mob, player, optParams)
    if optParams.isKiller or optParams.noKiller then
        if not player then
            return
        end

        if player:hasItem(xi.item.QIQIRN_MINE, xi.inv.TEMPITEMS) then
            return
        end

        if math.randomInt(1, 100) > 40 then -- TODO: More Retail data. Current data is 47/127 for drops.
            return
        end

        if player:addTempItem(xi.item.QIQIRN_MINE) then
            player:messageSpecial(ID.text.TEMP_ITEM, xi.item.QIQIRN_MINE)
        end
    end
end

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed and added a TODO for how it drops.
I need to think about rewriting code in the future instead of shoehorning my changes in.

mob:setMod(xi.mod.UDMGPHYS, reduction)
mob:setMod(xi.mod.UDMGBREATH, reduction)
mob:setMod(xi.mod.UDMGRANGE, -9650) -- TODO: More testing at 50/60/70 cap.
mob:setMod(xi.mod.UDMGMAGIC, -9650) -- TODO: More testing at 50/60/70 cap.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just use the same variable/value on all 4 for now

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will do. I'll update if needed when I get more data.

@Nobutadas Nobutadas Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did a bit more testing for uncapped. -9800 for 50/60/70/uncapped is more accurate based on average dps, not just basic attacks, than having a separate value for uncapped.
Edit: I'm going to do some more testing before I move this PR out of draft stage.

@Nobutadas Nobutadas Jul 11, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reverted back to -9000. LSB's level restriction caused some oddities. If I set to -9800, then it is accurate for a level 99 but a level 75 does 0 damage. If I set at -9000, then it is accurate for a level 50 - 75. This was an odd oversight I missed with level synch.


-- HP varies based on level sync.
-- HP varies within an instance (possibly the rocks have a level that varies).
-- HP varies based on ID: ID 17035289 was higher than the other rocks.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dont use entity id magic numbers in comments

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed.

mob:entityAnimationPacket('mai1') -- Animation: Mine jumps up and explodes.
if mob:getZoneID() == xi.zone.LEBROS_CAVERN then
mob:timer(4000, function(bombArg)
DespawnMob(bombArg:getTargID(), bombArg:getInstance())

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should check if bomArg isnt nil and if its even spawned

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@Xaver-DaRed

Copy link
Copy Markdown
Contributor

have you checked if the skill ids are all the same? usually, theres multiple copies of one same named skill. As an example, you can see @Skold177 recent Photosynthesis PR

@Nobutadas

Copy link
Copy Markdown
Contributor Author

have you checked if the skill ids are all the same? usually, theres multiple copies of one same named skill. As an example, you can see @Skold177 recent Photosynthesis PR

I did. Here's the other mine blast with the same ID but different animation: https://youtu.be/pQ4qCLknQZw

@Nobutadas
Nobutadas force-pushed the assault-excavation-duty-bug-fixes-and-nerfs branch 4 times, most recently from 1217a31 to 0eec89a Compare July 11, 2026 01:53
@Nobutadas
Nobutadas force-pushed the assault-excavation-duty-bug-fixes-and-nerfs branch from 0eec89a to cf8e1f0 Compare July 11, 2026 22:09
@Nobutadas

Copy link
Copy Markdown
Contributor Author

Moved SQL immunities to lua to make them easier to maintain.

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.

2 participants