From a3ae784c135dfb682f1031650fe90b77ce18d923 Mon Sep 17 00:00:00 2001 From: Skold <113406182+Skold177@users.noreply.github.com> Date: Wed, 13 May 2026 12:19:21 -0400 Subject: [PATCH] Khimaira Audit Audits the HNM Khimaira --- .../actions/mobskills/fossilizing_breath.lua | 2 +- scripts/actions/mobskills/fulmination.lua | 2 +- scripts/actions/mobskills/roar_khimaira.lua | 18 +++ scripts/actions/mobskills/thunderstrike.lua | 2 +- scripts/enum/mob_skill.lua | 10 ++ scripts/zones/Caedarva_Mire/mobs/Khimaira.lua | 118 ++++++++++++++++++ sql/mob_groups.sql | 2 +- sql/mob_pools.sql | 2 +- sql/mob_resistances.sql | 2 +- sql/mob_skills.sql | 16 +-- 10 files changed, 160 insertions(+), 14 deletions(-) create mode 100644 scripts/actions/mobskills/roar_khimaira.lua diff --git a/scripts/actions/mobskills/fossilizing_breath.lua b/scripts/actions/mobskills/fossilizing_breath.lua index 2461abcacd8..19a02ca9644 100644 --- a/scripts/actions/mobskills/fossilizing_breath.lua +++ b/scripts/actions/mobskills/fossilizing_breath.lua @@ -3,7 +3,7 @@ -- Description: Petrifies targets within a fan-shaped area. -- Type: Breath -- Ignores Shadows --- Range: Unknown cone +-- Range: 15.0 yalms ----------------------------------- ---@type TMobSkill local mobskillObject = {} diff --git a/scripts/actions/mobskills/fulmination.lua b/scripts/actions/mobskills/fulmination.lua index 0b038cbb5fb..457955bdcff 100644 --- a/scripts/actions/mobskills/fulmination.lua +++ b/scripts/actions/mobskills/fulmination.lua @@ -27,7 +27,7 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) -- TODO: Capture power/durations xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.PARALYSIS, 40, 0, 60) - xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, 4) + xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, math.random(6, 10)) end return info.damage diff --git a/scripts/actions/mobskills/roar_khimaira.lua b/scripts/actions/mobskills/roar_khimaira.lua new file mode 100644 index 00000000000..61cbeab33e6 --- /dev/null +++ b/scripts/actions/mobskills/roar_khimaira.lua @@ -0,0 +1,18 @@ +----------------------------------- +-- Khimaira Roar (Emote) +-- Description: Khimaira roars at the sky. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + skill:setMsg(xi.msg.basic.NONE) + + return 0 +end + +return mobskillObject diff --git a/scripts/actions/mobskills/thunderstrike.lua b/scripts/actions/mobskills/thunderstrike.lua index 142a757d61e..c3e8b5c12f2 100644 --- a/scripts/actions/mobskills/thunderstrike.lua +++ b/scripts/actions/mobskills/thunderstrike.lua @@ -25,7 +25,7 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) if xi.mobskills.processDamage(mob, target, skill, action, info) then target:takeDamage(info.damage, mob, info.attackType, info.damageType) - xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, 4) -- TODO: Capture duration + xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, math.random(6, 10)) end return info.damage diff --git a/scripts/enum/mob_skill.lua b/scripts/enum/mob_skill.lua index c4c5399878e..6f18da2fabc 100644 --- a/scripts/enum/mob_skill.lua +++ b/scripts/enum/mob_skill.lua @@ -1065,6 +1065,16 @@ xi.mobSkill = -- HUNDRED_FISTS = 2020, + TENEBROUS_MIST = 2022, + THUNDERSTRIKE = 2023, + TOURBILLION = 2024, + DREADSTORM = 2025, + FOSSILIZING_BREATH = 2026, + PLAGUE_SWIPE = 2027, + FULMINATION = 2028, + + ROAR_KHIMAIRA = 2030, + DAZE = 2066, KNOCKOUT = 2067, diff --git a/scripts/zones/Caedarva_Mire/mobs/Khimaira.lua b/scripts/zones/Caedarva_Mire/mobs/Khimaira.lua index 360afd4cd10..e3a9b7df053 100644 --- a/scripts/zones/Caedarva_Mire/mobs/Khimaira.lua +++ b/scripts/zones/Caedarva_Mire/mobs/Khimaira.lua @@ -10,9 +10,102 @@ mixins = ---@type TMobEntity local entity = {} +entity.spawnPoints = +{ + { x = 574.944, y = -20.250, z = 398.044 }, + { x = 575.081, y = -20.212, z = 401.917 }, + { x = 575.150, y = -20.193, z = 403.854 }, + { x = 575.061, y = -20.024, z = 407.646 }, + { x = 574.860, y = -19.789, z = 411.398 }, + { x = 574.437, y = -19.764, z = 413.376 }, + { x = 573.270, y = -19.806, z = 417.435 }, + { x = 574.290, y = -19.406, z = 420.032 }, + { x = 577.499, y = -18.565, z = 421.169 }, + { x = 578.716, y = -18.258, z = 420.995 }, + { x = 579.607, y = -18.103, z = 417.676 }, + { x = 579.958, y = -18.266, z = 414.169 }, + { x = 579.595, y = -18.665, z = 412.226 }, + { x = 578.869, y = -19.463, z = 408.341 }, + { x = 586.698, y = -17.777, z = 404.160 }, + { x = 587.057, y = -17.693, z = 406.042 }, + { x = 586.263, y = -17.534, z = 408.917 }, + { x = 585.373, y = -17.456, z = 411.840 }, + { x = 584.688, y = -17.619, z = 413.423 }, + { x = 583.317, y = -17.946, z = 416.588 }, + { x = 585.758, y = -17.501, z = 416.037 }, + { x = 588.960, y = -16.903, z = 414.743 }, + { x = 590.375, y = -16.657, z = 414.253 }, + { x = 593.206, y = -16.164, z = 413.272 }, + { x = 593.708, y = -16.131, z = 411.042 }, + { x = 593.377, y = -16.228, z = 409.615 }, + { x = 593.064, y = -16.349, z = 406.841 }, + { x = 593.448, y = -16.318, z = 404.230 }, + { x = 593.640, y = -16.302, z = 402.924 }, + { x = 594.297, y = -16.220, z = 399.705 }, + { x = 595.293, y = -16.128, z = 396.851 }, + { x = 597.986, y = -15.990, z = 395.816 }, + { x = 599.332, y = -15.921, z = 395.298 }, + { x = 601.327, y = -15.944, z = 396.589 }, + { x = 610.253, y = -15.740, z = 396.727 }, + { x = 611.305, y = -15.711, z = 397.986 }, + { x = 613.410, y = -15.652, z = 400.505 }, + { x = 613.496, y = -15.615, z = 403.029 }, + { x = 613.338, y = -15.598, z = 404.292 }, + { x = 611.835, y = -15.628, z = 405.258 }, + { x = 602.027, y = -15.916, z = 405.037 }, + { x = 601.369, y = -15.900, z = 406.213 }, + { x = 601.264, y = -15.800, z = 409.571 }, + { x = 602.410, y = -15.722, z = 411.917 }, + { x = 604.808, y = -15.665, z = 413.252 }, + { x = 606.333, y = -15.641, z = 413.605 }, + { x = 610.690, y = -15.612, z = 413.052 }, + { x = 610.845, y = -15.621, z = 412.200 }, + { x = 606.722, y = -15.664, z = 411.476 }, + { x = 598.476, y = -15.750, z = 410.028 }, +} + +entity.onMobInitialize = function(mob) + xi.mob.updateNMSpawnPoint(mob) + + mob:addImmunity(xi.immunity.PETRIFY) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.DARK_SLEEP) + mob:addImmunity(xi.immunity.TERROR) + mob:addImmunity(xi.immunity.PLAGUE) + + mob:setMobMod(xi.mobMod.GIL_MIN, 30000) + mob:setMobMod(xi.mobMod.GIL_MAX, 30000) +end + +entity.onMobRoam = function(mob) + if mob:isFollowingPath() then + return + end + + local currentTime = GetSystemTime() + + if currentTime < mob:getLocalVar('roarTimer') then + return + end + + mob:useMobAbility(xi.mobSkill.ROAR_KHIMAIRA) + mob:setLocalVar('roarTimer', currentTime + math.random(150, 210)) +end + entity.onMobSpawn = function(mob) mob:setMobMod(xi.mobMod.NO_MOVE, 0) mob:setMobMod(xi.mobMod.AOE_HIT_ALL, 1) + + mob:setMobMod(xi.mobMod.WEAPON_BONUS, 53) -- 140 total weapon damage. + mob:setMod(xi.mod.ATT, 681) -- 740 total attack. + mob:setMod(xi.mod.DEF, 520) -- 570 total defense. + mob:setMod(xi.mod.STORETP, 80) -- 10 hits to 1000 TP. + + mob:setMod(xi.mod.UDMGBREATH, -5000) + mob:setMod(xi.mod.UDMGMAGIC, -2500) + + mob:setMod(xi.mod.CURSE_MEVA, 1000) + mob:setLocalVar('roarTimer', GetSystemTime() + math.random(150, 210)) end entity.onMobFight = function(mob, target) @@ -51,6 +144,30 @@ entity.onMobFight = function(mob, target) end end +entity.onMobMobskillChoose = function(mob, target, skillId) + local skillList = + { + xi.mobSkill.TENEBROUS_MIST, + xi.mobSkill.THUNDERSTRIKE, + xi.mobSkill.TOURBILLION, + xi.mobSkill.DREADSTORM, + } + + if target:isInfront(mob, 128) then + table.insert(skillList, xi.mobSkill.FOSSILIZING_BREATH) + end + + if target:isBehind(mob) then + table.insert(skillList, xi.mobSkill.PLAGUE_SWIPE) + end + + if mob:getHPP() <= 37 then + table.insert(skillList, xi.mobSkill.FULMINATION) + end + + return skillList[math.random(1, #skillList)] +end + entity.onMobDisengage = function(mob) mob:setMobMod(xi.mobMod.NO_MOVE, 0) end @@ -63,6 +180,7 @@ end entity.onMobDespawn = function(mob) mob:setRespawnTime(math.random(48, 72) * 3600) -- 48 to 72 hours, in 1-hour increments + xi.mob.updateNMSpawnPoint(mob) end return entity diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index 5d2ca2acb3f..bca53708e86 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -4581,7 +4581,7 @@ INSERT INTO `mob_groups` VALUES (55,3331,79,'Ravin_Raven',0,128,2078,0,0,0,NULL) INSERT INTO `mob_groups` VALUES (56,2349,79,'Lamia_No27',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (57,2752,79,'Moshdahn',0,128,0,25000,0,0,NULL); INSERT INTO `mob_groups` VALUES (58,3704,79,'Soulflayer',300,0,2030,0,0,0,NULL); -INSERT INTO `mob_groups` VALUES (59,2220,79,'Khimaira',0,128,1437,72000,0,0,NULL); +INSERT INTO `mob_groups` VALUES (59,2220,79,'Khimaira',0,128,1437,76000,0,0,NULL); INSERT INTO `mob_groups` VALUES (60,4221,79,'Verdelet',0,128,2578,22000,0,0,NULL); INSERT INTO `mob_groups` VALUES (61,4063,79,'Tyger',0,128,2508,48000,0,0,NULL); INSERT INTO `mob_groups` VALUES (62,2489,79,'Mahjlaef_the_Paintorn',0,128,1576,37000,0,0,NULL); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index a09c31695ae..2e06b7dfe0d 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -2275,7 +2275,7 @@ INSERT INTO `mob_pools` VALUES (2216,'Khadem_Quemquoma','Khadem_Quemquoma',460,0 INSERT INTO `mob_pools` VALUES (2217,'Khalamari','Khalamari',325,0x0000100200000000000000000000000000000000,1,1,6,240,100,0,0,0,0,2,0,0,1,135,0,0,0,0,0,802,269,3,16); INSERT INTO `mob_pools` VALUES (2218,'Khalkotaur','Khalkotaur',217,0x0000500500000000000000000000000000000000,1,2,1,240,100,0,1,1,0,2,0,0,0,133,0,0,0,0,0,922,240,2,13); INSERT INTO `mob_pools` VALUES (2219,'Kharon','Kharon',416,0x0000DE0600000000000000000000000000000000,8,8,3,240,100,0,0,0,0,2,0,32,0,157,0,0,220,0,0,868,89,2,13); -INSERT INTO `mob_pools` VALUES (2220,'Khimaira','Khimaira',67,0x00000D0700000000000000000000000000000000,1,1,7,320,125,1024,1,1,0,2,6150,0,73,645,0,0,0,0,0,168,168,2,34); +INSERT INTO `mob_pools` VALUES (2220,'Khimaira','Khimaira',67,0x00000D0700000000000000000000000000000000,1,1,7,210,100,1024,1,1,0,2,6150,0,73,645,0,0,0,0,0,168,168,2,34); INSERT INTO `mob_pools` VALUES (2221,'Khimaira_13','Khimaira_13',67,0x00000D0700000000000000000000000000000000,1,1,7,320,100,1024,1,1,0,16,6144,0,1,667,0,0,0,0,0,779,168,1,30); INSERT INTO `mob_pools` VALUES (2222,'Khimaira_14X','Khimaira_14X',67,0x00000D0700000000000000000000000000000000,1,1,7,320,100,1024,1,1,0,0,6144,0,1,155,0,0,0,0,0,168,168,1,30); INSERT INTO `mob_pools` VALUES (2223,'Khromasoul_Bhurborlor','Khromasoul_Bhurborlor',163,0x0000A80600000000000000000000000000000000,7,7,2,230,100,0,1,1,1,2,6144,32,1161,157,4,0,4,0,0,308,308,2,20); diff --git a/sql/mob_resistances.sql b/sql/mob_resistances.sql index fd29d5ad515..08fd13824d7 100644 --- a/sql/mob_resistances.sql +++ b/sql/mob_resistances.sql @@ -206,7 +206,7 @@ INSERT INTO `mob_resistances` VALUES (164,'Hydra',0,0,0,-1250,0,0,0,0,0,0,0,0,0, INSERT INTO `mob_resistances` VALUES (165,'Imp',0,2500,0,0,0,0,0,0,0,0,0,0,0,-1,-1,2,-1,-1,-1,-2,6,-1,-1,2,-1,-1,-2,6,6); INSERT INTO `mob_resistances` VALUES (166,'Imp - Jakko',0,2500,0,0,0,0,0,0,0,0,0,0,0,-1,-1,2,-1,-1,-1,-2,6,-1,-1,2,-1,-1,-2,6,6); INSERT INTO `mob_resistances` VALUES (167,'Karakul',0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,-1,1,-2,-2,-1,-1,1,1,-1,1,-2,-1,-1,-1); -INSERT INTO `mob_resistances` VALUES (168,'Khimaira',0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,5,4,6,1,4,1,1,1,5,4,1,4,1,1); +INSERT INTO `mob_resistances` VALUES (168,'Khimaira',0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,8,7,9,5,7,5,1,1,5,4,1,4,1,1); INSERT INTO `mob_resistances` VALUES (169,'Kindred',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,0,0,-2,0,0); INSERT INTO `mob_resistances` VALUES (170,'Ladybug',0,2500,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,4,4,0,0,0,0,4,4); INSERT INTO `mob_resistances` VALUES (171,'Lamiae',0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-2,-1,-1,-2,3,-2,2,-2,-2,-1,-1,3,-2,2,2); diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index 87ee20e2d1a..c8f08ee607c 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -2050,15 +2050,15 @@ INSERT INTO `mob_skills` VALUES (2016,124,'dark_shot',0,0.0,22.0,2000,0,4,4,0,0, -- INSERT INTO `mob_skills` VALUES (2019,1763,'.',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (2020,436,'hundred_fists',0,0.0,7.0,2000,0,1,4,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (2021,438,'eraser',0,0.0,7.0,2000,0,16,4,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2022,1367,'tenebrous_mist',1,0.0,13.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2023,1368,'thunderstrike',1,0.0,13.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2024,1371,'tourbillion',1,0.0,18.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2025,1369,'dreadstorm',1,0.0,13.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2026,1381,'fossilizing_breath',4,0.0,12.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2027,1382,'plague_swipe',4,0.0,12.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2028,1386,'fulmination',1,0.0,32.0,2000,3000,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2022,1367,'tenebrous_mist',1,0.0,14.0,2000,1600,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2023,1368,'thunderstrike',2,0.0,7.0,2000,1200,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2024,1371,'tourbillion',2,10.0,14.0,2000,1600,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2025,1369,'dreadstorm',1,0.0,10.0,2000,2000,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2026,1381,'fossilizing_breath',4,0.0,15.0,2000,2400,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2027,1382,'plague_swipe',2,0.0,7.0,2000,800,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2028,1386,'fulmination',1,0.0,30.0,2000,3000,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (2029,1773,'.',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (2030,1774,'.',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2030,1370,'roar_khimaira',0,0.0,7.0,2000,0,1,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (2031,433,'reactive_shield',0,0.0,7.0,2000,0,16,4,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (2032,1383,'roller_chain',1,0.0,10.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (2033,1384,'choke_chain',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0);