server icon indicating copy to clipboard operation
server copied to clipboard

Implement Hundredfaced Hapool Ja (Mamook)

Open CatsEyeXI opened this issue 3 years ago • 9 comments

I affirm:

  • [x] I have paid attention to this example and will edit again if need be to not break the formatting, or I will be ignored
  • [x] I have read and understood the Contributing Guide
  • [x] I've 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?

As it stands, on server init, the NM will be up along with his 4 'clones' by default. However according to FFXIClopedia, and confirmed by me research in retail, the clones spawn only when NM uses Utsusemi.

Steps to test these changes

engage mob, wait until it uses utsusemi, and clones should spawn around him, rather than being pre-spawned

CatsEyeXI avatar Oct 04 '22 21:10 CatsEyeXI

Everything relating to the mob's actions appears to be working properly now. My issue is converting this to a scripted spawn now. I've updated the spawntype value to 128 - "Scripted", and added the logic to onMobDespawn... but now the mob won't pop unless done manually... what am i missing?

CatsEyeXI avatar Oct 05 '22 02:10 CatsEyeXI

everything is working in this current state, however i did find the need for the static ID entry. if this is not correct or if any additional changes required let me know. thanks!

https://media.tenor.com/re_Txs4OUToAAAAd/tab-tab-key.gif

CatsEyeXI avatar Oct 05 '22 03:10 CatsEyeXI

We're trying to move away from hard-coded IDs, since shifts are a major pain for us, downstream, and players. You can get the mob-object for a mob by asking the zone for it, you can see me doing it here for FSA: https://github.com/LandSandBoat/server/blob/base/scripts/zones/Batallia_Downs/Zone.lua#L32-L44

and here in a module: https://github.com/LandSandBoat/server/blob/base/modules/custom/lua/conquest_regional_npcs_always_up.lua

It might look something like this:

zone_object.onInitialize = function(zone)
    xi.helm.initZone(zone, xi.helm.type.LOGGING)

    local hundredFacedHapoolJaID = zone:queryEntitiesByName("Hundredfaced_Hapool_Ja")[1]:getID()
    UpdateNMSpawnPoint(hundredFacedHapoolJaID)
    SpawnMob(hundredFacedHapoolJaID)
end

This is also the idea behind DYNAMIC_LOOKUP. This works especially well for NMs because they tend to have unique names in a zone that we don't have to disambiguate for any reason.

zach2good avatar Oct 05 '22 08:10 zach2good

Everything relating to the mob's actions appears to be working properly now. My issue is converting this to a scripted spawn now. I've updated the spawntype value to 128 - "Scripted", and added the logic to onMobDespawn... but now the mob won't pop unless done manually... what am i missing?

His helpers spawned by his shadows would be type scripted, he himself would not be since he's a timed pop. If initial pop is randomized (like HNM timers tend to be for example) we'd init his time in the zone lua and then re-random every time his corpse despawns. The clones aren't the same ID and shouldn't have the same group so that they can be different spawn type and diff loot pool than the main NM.

TeoTwawki avatar Oct 05 '22 12:10 TeoTwawki

Once this PR lands: https://github.com/LandSandBoat/server/pull/2882 it'll be safe for you to just use the table entry: HUNDREDFACED_HAPOOL_JA = DYNAMIC_LOOKUP,

zach2good avatar Oct 05 '22 12:10 zach2good

Oooh. Very fancy. I'll give it a shot.

CatsEyeXI avatar Oct 05 '22 12:10 CatsEyeXI

Everything relating to the mob's actions appears to be working properly now. My issue is converting this to a scripted spawn now. I've updated the spawntype value to 128 - "Scripted", and added the logic to onMobDespawn... but now the mob won't pop unless done manually... what am i missing?

His helpers spawned by his shadows would be type scripted, he himself would not be since he's a timed pop. If initial pop is randomized (like HNM timers tend to be for example) we'd init his time in the zone lua and then re-random every time his corpse despawns. The clones aren't the same ID and shouldn't have the same group so that they can be different spawn type and diff loot pool than the main NM.

I honestly don't know if his initial spawn is randomized, I guess that would need retail verification at some point? Additionally, i couldn't find any information anywhere regarding his windows, so i used the value of 72 hrs already in the DB. If it's ok with you, I think I'll set him to pop on server init, then set with his corpse despawns.

CatsEyeXI avatar Oct 05 '22 13:10 CatsEyeXI

everything tested working with dynamic lookup, anything need to be done regarding these debug messages? i believe these only print when there is no entry present in nm_spawn_points...

image

CatsEyeXI avatar Oct 05 '22 17:10 CatsEyeXI

We have a new CI rule, you'll need to rename hundredfaced_hapool_ja => hundredfacedHapoolJa, or else CI will start to fail when this eventually merges

https://github.com/LandSandBoat/server/pull/2894

zach2good avatar Oct 06 '22 14:10 zach2good