Skip to content

Base Implementation of Era Dynamis#31

Open
Frankie-hz wants to merge 27 commits intophoenixffxi:betafrom
Frankie-hz:eradyna
Open

Base Implementation of Era Dynamis#31
Frankie-hz wants to merge 27 commits intophoenixffxi:betafrom
Frankie-hz:eradyna

Conversation

@Frankie-hz
Copy link
Copy Markdown

@Frankie-hz Frankie-hz commented Feb 8, 2026

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?

This PR is the base implementation of Era Dynamis entry code, complete spawn mechanics and NPC interactions.

THIS DOES NOT INCLUDE ANY BALANCING

This PR includes all of the following zones.

  • Dynamis-San_dOria
  • Dynamis-Bastok
  • Dynamis-Windurst
  • Dynamis-Jeuno
  • Dynamis-Beaucedine
  • Dynamis-Xarcabard
  • Dynamis-Valkurm
  • Dynamis-Buburimu
  • Dynamis-Qufim
  • Dynamis-Tavnazia

@Frankie-hz Frankie-hz added the hold Do not merge this PR label Feb 8, 2026
@phoenixffxi phoenixffxi deleted a comment from github-actions Bot Feb 8, 2026
@Frankie-hz Frankie-hz force-pushed the eradyna branch 8 times, most recently from 18e2cd4 to cbc294c Compare February 11, 2026 02:49
@Frankie-hz Frankie-hz force-pushed the eradyna branch 2 times, most recently from 4edb0a5 to 66fbd3f Compare March 3, 2026 03:36
@Frankie-hz Frankie-hz removed the hold Do not merge this PR label Mar 8, 2026
@Frankie-hz Frankie-hz force-pushed the eradyna branch 10 times, most recently from 068c550 to 223b9db Compare March 9, 2026 22:47
@Frankie-hz Frankie-hz force-pushed the eradyna branch 7 times, most recently from d4886e5 to 2b7f2b6 Compare March 21, 2026 03:04
Comment thread scripts/globals/dynamis/npc_handlers.lua Outdated
Comment on lines +831 to +865
elseif mobType == 'Normal' then
m:addOverride(mobPath .. '.onMobSpawn', function(mob)
xi.dynamis.onMobSpawn(mob, mobType)
end)

m:addOverride(mobPath .. '.onMobRoam', function(mob)
xi.dynamis.onMobRoam(mob)
end)

m:addOverride(mobPath .. '.onMobDeath', function(mob, player, optParams)
xi.dynamis.onMobDeath(mob, player, optParams)
end)

m:addOverride(mobPath .. '.onMobDespawn', function(mob, player, optParams)
end)
elseif mobType == 'Nightmare' then
m:addOverride(mobPath .. '.onMobSpawn', function(mob)
xi.dynamis.onMobSpawn(mob, mobType)
end)

m:addOverride(mobPath .. '.onMobEngage', function(mob, target)
xi.dynamis.mobOnEngage(mob, target)
end)

m:addOverride(mobPath .. '.onMobRoam', function(mob)
xi.dynamis.onMobRoam(mob)
end)

m:addOverride(mobPath .. '.onMobDeath', function(mob, player, optParams)
xi.dynamis.onMobDeath(mob, player, optParams)
end)

m:addOverride(mobPath .. '.onMobDespawn', function(mob, player, optParams)
end)
end
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Can probably combine these two and add a check in engage for normal mobs to skip

@Frankie-hz Frankie-hz force-pushed the eradyna branch 2 times, most recently from 1dfd923 to d2c9d15 Compare April 14, 2026 21:54
{
['Dynamis-San_dOria'] =
{
{ 'Overlords_Tombstone', 'Boss' },
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

any reason for using 'Boss' or 'Normal' instead of an enum?

Copy link
Copy Markdown
Author

@Frankie-hz Frankie-hz Apr 15, 2026

Choose a reason for hiding this comment

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

No particular reason, it was just the first way I thought of to separate different overrides. I can change it to an enum and condense the code below this as suggested.

Side note: I will need a way to override certain monsters when I get to the balance portion because some mobs mechanics are different from retail vs era. Most likely will just need a separate override for that, it's only a handful of NMs.


-- Special case for SJ zones (7-9)
-- Dynamis - Buburimu (8), Dynamis - Qufim (9)
if zoneID == xi.zone.DYNAMIS_BUBURIMU or zoneID == xi.zone.DYNAMIS_QUFIM then
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Valkurm?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

There is no SJ NPC for Valkurm. It is handled on death of the 3 fly NMs


m:addOverride(mobPath .. '.onMobDespawn', function(mob, player, optParams)
end)
elseif mobType == 'Nightmare' then
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

there's a lot of code repetition here, maybe you could have a single table such as:

{
[xi.dynamisType.STATUE] =
{
onMobEngage = xi.dynamis.onStatueEngage,
}
[...]
}

Then your code can just iterate on the list.

- Fixes unlimited TE multi lockout
- Fixes an issue where the original registrant can bypass the entire lockout
- Fixes infinite while loop is a mob for some reason couldnt spawn
- Moves tav qm logic so it applies after the NPC is invis
- increases capacity var correctly
- Fixes issue where using the glass would constantly set the server var
- Fixes rounding error of vanadiel days causing too fast of a lockout time
- Fixes force spawn mobs to not spawn
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.

3 participants