From 531765355324ac3e2ad56c994a63b7300420e2fe Mon Sep 17 00:00:00 2001 From: WinterSolstice8 <60417494+wintersolstice8@users.noreply.github.com> Date: Tue, 5 May 2026 15:33:04 -0600 Subject: [PATCH] [lua] [sql] Improve Hundredfaced Hapool Ja --- scripts/enum/mob_skill.lua | 2 + scripts/zones/Mamook/IDs.lua | 25 ++++---- .../Mamook/mobs/Hundredfaced_Hapool_Ja.lua | 58 +++++++++++++++---- sql/mob_pools.sql | 4 +- 4 files changed, 65 insertions(+), 24 deletions(-) diff --git a/scripts/enum/mob_skill.lua b/scripts/enum/mob_skill.lua index 13ad8bfeb11..2f7181cde97 100644 --- a/scripts/enum/mob_skill.lua +++ b/scripts/enum/mob_skill.lua @@ -851,6 +851,8 @@ xi.mobSkill = FORCEFUL_BLOW = 1731, -- Used with Mamool's weapons break. + FIRESPIT = 1733, + LAVA_SPIT = 1785, GATES_OF_HADES = 1790, diff --git a/scripts/zones/Mamook/IDs.lua b/scripts/zones/Mamook/IDs.lua index 6b09dd68d3c..febf0de506e 100644 --- a/scripts/zones/Mamook/IDs.lua +++ b/scripts/zones/Mamook/IDs.lua @@ -29,18 +29,19 @@ zones[xi.zone.MAMOOK] = }, mob = { - ZIZZY_ZILLAH = GetFirstID('Zizzy_Zillah'), - FIREDANCE_MAGMAAL_JA = GetFirstID('Firedance_Magmaal_Ja'), - GULOOL_JA_JA = GetFirstID('Gulool_Ja_Ja'), - CHAMROSH = GetFirstID('Chamrosh'), - IRIRI_SAMARIRI = GetFirstID('Iriri_Samariri'), - POROGGO_CASANOVA = GetFirstID('Poroggo_Casanova'), - MAMOOL_JA = GetFirstID('Mamool_Ja'), - MIKILULU = GetFirstID('Mikilulu'), - MIKIRURU = GetFirstID('Mikiruru'), - NIKILULU = GetFirstID('Nikilulu'), - MIKILURU = GetFirstID('Mikiluru'), - MIKIRULU = GetFirstID('Mikirulu'), + ZIZZY_ZILLAH = GetFirstID('Zizzy_Zillah'), + FIREDANCE_MAGMAAL_JA = GetFirstID('Firedance_Magmaal_Ja'), + GULOOL_JA_JA = GetFirstID('Gulool_Ja_Ja'), + CHAMROSH = GetFirstID('Chamrosh'), + IRIRI_SAMARIRI = GetFirstID('Iriri_Samariri'), + POROGGO_CASANOVA = GetFirstID('Poroggo_Casanova'), + MAMOOL_JA = GetFirstID('Mamool_Ja'), + MIKILULU = GetFirstID('Mikilulu'), + MIKIRURU = GetFirstID('Mikiruru'), + NIKILULU = GetFirstID('Nikilulu'), + MIKILURU = GetFirstID('Mikiluru'), + MIKIRULU = GetFirstID('Mikirulu'), + HUNDRED_FACE_HAPOOL_JA = GetFirstID('Hundredfaced_Hapool_Ja'), }, npc = { diff --git a/scripts/zones/Mamook/mobs/Hundredfaced_Hapool_Ja.lua b/scripts/zones/Mamook/mobs/Hundredfaced_Hapool_Ja.lua index afc1991ed37..e20dce9af14 100644 --- a/scripts/zones/Mamook/mobs/Hundredfaced_Hapool_Ja.lua +++ b/scripts/zones/Mamook/mobs/Hundredfaced_Hapool_Ja.lua @@ -4,15 +4,22 @@ ----------------------------------- mixins = { require('scripts/mixins/job_special') } ----------------------------------- +local ID = zones[xi.zone.MAMOOK] +----------------------------------- ---@type TMobEntity local entity = {} -entity.onMobSpawn = function(mob) - local hundredfacedHapoolJa = mob:getID() +entity.onMobInitialize = function(mob) + -- only the main copy gets the listener + if mob:getID() ~= ID.mob.HUNDRED_FACE_HAPOOL_JA then + return + end + mob:addListener('MAGIC_USE', 'SPAWN_CLONES', function(mobArg, target, spell, action) - local spellId = spell:getID() - local mainMob = GetMobByID(hundredfacedHapoolJa) - local hateTarget = mainMob and mainMob:getTarget() + local hundredfacedHapoolJa = ID.mob.HUNDRED_FACE_HAPOOL_JA + local spellId = spell:getID() + local mainMob = GetMobByID(hundredfacedHapoolJa) + local hateTarget = mainMob and mainMob:getTarget() -- Utsusemi: Ichi (3 clones) if hateTarget then @@ -50,18 +57,49 @@ entity.onMobSpawn = function(mob) end) end +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.SPECIAL_SKILL, 0) + mob:setMobMod(xi.mobMod.NO_STANDBACK, 1) +end + entity.onMobEngage = function(mob, target) - mob:castSpell(xi.magic.spell.UTSUSEMI_SAN, mob) + -- Clone mobs cast a spell on engage + if mob:getID() ~= ID.mob.HUNDRED_FACE_HAPOOL_JA then + mob:castSpell() + end +end + +entity.onMobMobskillChoose = function(mob, target, skillId) + return xi.mobSkill.FIRESPIT +end + +entity.onMobWeaponSkill = function(mob, target, skill, action) + -- Clones queue a mob ability when the main one does + if mob:getID() == ID.mob.HUNDRED_FACE_HAPOOL_JA then + for i = 1, 4 do + local clone = GetMobByID(ID.mob.HUNDRED_FACE_HAPOOL_JA + i) + + if clone then + clone:useMobAbility() + end + end + end end entity.onMobDeath = function(mob, player, optParams) - local hundredfacedHapoolJa = mob:getID() - for i = 1, 4 do DespawnMob(hundredfacedHapoolJa + i) end + if mob:getID() == ID.mob.HUNDRED_FACE_HAPOOL_JA then + for i = 1, 4 do + DespawnMob(ID.mob.HUNDRED_FACE_HAPOOL_JA + i) + end + end end entity.onMobDespawn = function(mob) - local hundredfacedHapoolJa = mob:getID() - for i = 1, 4 do DespawnMob(hundredfacedHapoolJa + i) end + if mob:getID() == ID.mob.HUNDRED_FACE_HAPOOL_JA then + for i = 1, 4 do + DespawnMob(ID.mob.HUNDRED_FACE_HAPOOL_JA + i) + end + end end return entity diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index 4993e92ca25..9f47df1004f 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -2063,7 +2063,7 @@ INSERT INTO `mob_pools` VALUES (2004,'Huginn','Huginn',55,0x0000BC01000000000000 INSERT INTO `mob_pools` VALUES (2005,'Humegutter_Adzjbadj','Humegutter_Adzjbadj',189,0x0000170400000000000000000000000000000000,1,1,2,240,100,0,1,0,1,2,0,32,0,159,0,0,0,0,0,334,334,3,20); INSERT INTO `mob_pools` VALUES (2006,'Hume_Automaton','Hume_Automaton',149,0x0500D40400000000000000000000000000000000,7,7,4,280,100,0,0,0,0,18,0,0,1749,1027,0,0,4,0,0,2,149,1,17); INSERT INTO `mob_pools` VALUES (2007,'Humnox_Drumbelly','Humnox_Drumbelly',373,0x0000410400000000000000000000000000000000,10,10,2,240,100,0,1,0,1,2,0,32,0,159,0,0,6,0,0,373,373,3,20); -INSERT INTO `mob_pools` VALUES (2008,'Hundredfaced_Hapool_Ja','Hundredfaced_Hapool_Ja',176,0x0600530600000000000000000000000000000000,13,13,10,280,100,0,1,1,1,2,0,32,0,159,4,0,7,0,0,176,176,3,12); +INSERT INTO `mob_pools` VALUES (2008,'Hundredfaced_Hapool_Ja','Hundredfaced_Hapool_Ja',176,0x0600530600000000000000000000000000000000,13,13,1,480,100,0,1,1,1,2,0,32,0,159,4,0,7,0,0,176,176,3,12); INSERT INTO `mob_pools` VALUES (2009,'Hundredscar_Hajwaj','Hundredscar_Hajwaj',189,0x0000FB0300000000000000000000000000000000,1,1,5,240,100,0,1,0,1,2,0,32,0,155,0,0,0,0,0,334,334,1,15); INSERT INTO `mob_pools` VALUES (2010,'Hunter_Antlion','Hunter_Antlion',26,0x0000430500000000000000000000000000000000,1,1,7,240,100,0,1,0,1,0,0,0,260,1155,0,0,0,0,0,26,26,1,12); INSERT INTO `mob_pools` VALUES (2011,'Huntfly','Huntfly',113,0x0000C00100000000000000000000000000000000,4,4,2,240,100,0,1,0,1,18,6144,0,395,1671,0,0,1,0,0,997,375,3,20); @@ -7119,7 +7119,7 @@ INSERT INTO `mob_pools` VALUES (7054,'Leviathan_Prime_TSTBW','Leviathan_Prime',4 INSERT INTO `mob_pools` VALUES (7055,'Armoury_Crate','Armoury_Crate',183,0x0000C00300000000000000000000000000000000,1,0,0,240,100,1024,0,0,0,80,0,0,0,131,8,0,0,0,0,0,183,1,12); -- Mamook (cont.) - Utsusemi clones of Hundredfaced_Hapool_Ja -INSERT INTO `mob_pools` VALUES (7056,'Hundredfaced_clone','Hundredfaced_Hapool_Ja',176,0x0600530600000000000000000000000000000000,13,13,10,280,100,0,1,1,1,2,0,32,0,159,4,0,7,0,0,176,176,3,12); +INSERT INTO `mob_pools` VALUES (7056,'Hundredfaced_clone','Hundredfaced_Hapool_Ja',176,0x0600530600000000000000000000000000000000,13,13,1,480,100,0,1,1,1,2,0,32,0,159,4,0,7,0,0,176,176,3,12); -- Grand Palace of Hu'Xzoi - Escort Quest for PM 8-2 INSERT INTO `mob_pools` VALUES (7057,'Quasilumin','Quasilumin',507,0x0000150400000000000000000000000000000000,1,0,0,240,100,0,0,0,0,64,0,8,0,129,0,0,0,2,0,0,507,0,12);