From 34168826a5c7d4fde4069213764142b58e039882 Mon Sep 17 00:00:00 2001 From: WinterSolstice8 <60417494+wintersolstice8@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:41:26 -0600 Subject: [PATCH] [lua] [sql] Implement Hyakume --- scripts/zones/Ranguemont_Pass/IDs.lua | 1 + .../zones/Ranguemont_Pass/mobs/Hecteyes.lua | 6 +++ .../zones/Ranguemont_Pass/mobs/Hyakume.lua | 50 +++++++++++++++++++ sql/mob_groups.sql | 2 +- sql/mob_spawn_points.sql | 2 +- 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/scripts/zones/Ranguemont_Pass/IDs.lua b/scripts/zones/Ranguemont_Pass/IDs.lua index 81d35be729a..36e79ae6721 100644 --- a/scripts/zones/Ranguemont_Pass/IDs.lua +++ b/scripts/zones/Ranguemont_Pass/IDs.lua @@ -33,6 +33,7 @@ zones[xi.zone.RANGUEMONT_PASS] = mob = { GLOOM_EYE = GetFirstID('Gloom_Eye'), + HYAKUME = GetFirstID('Hyakume'), TAISAIJIN_PH = { 17457213, -- -18.325 1.830 -114.932 diff --git a/scripts/zones/Ranguemont_Pass/mobs/Hecteyes.lua b/scripts/zones/Ranguemont_Pass/mobs/Hecteyes.lua index e33c2b114da..c671f3337f3 100644 --- a/scripts/zones/Ranguemont_Pass/mobs/Hecteyes.lua +++ b/scripts/zones/Ranguemont_Pass/mobs/Hecteyes.lua @@ -2,6 +2,8 @@ -- Area: Ranguemont Pass -- Mob: Hecteyes ----------------------------------- +local ID = zones[xi.zone.RANGUEMONT_PASS] +----------------------------------- ---@type TMobEntity local entity = {} @@ -9,4 +11,8 @@ entity.onMobDeath = function(mob, player, optParams) xi.regime.checkRegime(player, mob, 606, 2, xi.regime.type.GROUNDS) end +entity.onMobDespawn = function(mob) + xi.mob.phOnDespawn(mob, ID.mob.HYAKUME, 20, 1) -- Seems to be pure lottery +end + return entity diff --git a/scripts/zones/Ranguemont_Pass/mobs/Hyakume.lua b/scripts/zones/Ranguemont_Pass/mobs/Hyakume.lua index 2706f6d1785..8a93141fc19 100644 --- a/scripts/zones/Ranguemont_Pass/mobs/Hyakume.lua +++ b/scripts/zones/Ranguemont_Pass/mobs/Hyakume.lua @@ -2,9 +2,59 @@ -- Area: Ranguemont Pass -- NM: Hyakume ----------------------------------- +local ID = zones[xi.zone.RANGUEMONT_PASS] +----------------------------------- ---@type TMobEntity local entity = {} +-- TODO: This might be able to spawn off itself in a spawn slot +-- TODO: figure out Dread Spikes, they don't seem to be traditional drain spikes (resists are not dmg * 1/(2^X)) +-- TODO: better proc rate of Curse. Current data: 19 procs over (436 normal hits + 25 crits) = 19/(432+25) = 4.1%~ = probably 5%?. Confidence interval = 2.327%~5.988%. +-- Curse data collected on ilvl 119 character +-- TODO: More spawn points +entity.phList = +{ + [ID.mob.HYAKUME - 7] = ID.mob.HYAKUME, -- PH is 0x4D +} + +entity.onMobInitialize = function(mob) + mob:addImmunity(xi.immunity.DARK_SLEEP) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.PETRIFY) + mob:addImmunity(xi.immunity.BIND) + mob:addImmunity(xi.immunity.GRAVITY) + mob:addImmunity(xi.immunity.TERROR) + mob:addImmunity(xi.immunity.PLAGUE) + mob:addImmunity(xi.immunity.TERROR) + mob:setMobMod(xi.mobMod.ADD_EFFECT, 1) +end + +entity.onMobSpawn = function(mob) + mob:setMod(xi.mod.STORETP, 85) -- 8 hits to 1k tp + mob:setMod(xi.mod.DOUBLE_ATTACK, 10) -- from capture + mob:setMobMod(xi.mobMod.BASE_DAMAGE_MULTIPLIER, 150) -- Guessed + mob:setMagicCastingEnabled(false) -- Has MP, doesn't cast spells + + mob:setAggressive(true) -- Enable aggro + mob:setMobMod(xi.mobMod.DETECTION, xi.detects.HEARING) -- Set sound aggro +end + +entity.onAdditionalEffect = function(mob, target, damage) + local pTable = + { + chance = 5, + effectId = xi.effect.CURSE_I, + power = 13, -- 12.5% max HP/MP down exactly. We don't support float here (yet) so use 13%. + duration = 64, -- Guessed. there was an 8~ second resist and a 16~ second resist. Could be 32 seconds? + } + + return xi.combat.action.executeAddEffectEnfeeblement(mob, target, pTable) +end + +entity.onMobMobskillChoose = function(mob, target, skillId) + return xi.mobSkill.HEX_EYE +end + entity.onMobDeath = function(mob, player, optParams) xi.hunts.checkHunt(mob, player, 344) xi.magian.onMobDeath(mob, player, optParams, set{ 778 }) diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index 67535ea5664..8624ee21bae 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -11818,7 +11818,7 @@ INSERT INTO `mob_groups` VALUES (27,1267,166,'Evil_Weapon',720,0,799,0,0,0,NULL) INSERT INTO `mob_groups` VALUES (28,4041,166,'Tros',0,128,0,3000,2000,0,NULL); INSERT INTO `mob_groups` VALUES (29,2633,166,'Metallic_Slime',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (30,0,166,'Arcus_Blades',0,128,0,0,0,0,NULL); -INSERT INTO `mob_groups` VALUES (31,6883,166,'Hyakume',0,32,0,0,0,0,'WOTG'); +INSERT INTO `mob_groups` VALUES (31,6883,166,'Hyakume',0,32,0,2900,2900,0,'WOTG'); -- MP is guessed -- Curilla Unleashed INSERT INTO `mob_groups` VALUES (32,0,166,'Harnessed_Smilodon',0,128,0,0,0,0,NULL); diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index ea47e9aa827..55fb7244a57 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -59166,7 +59166,7 @@ INSERT INTO `mob_spawn_points` VALUES (17457232,0,'Hecteyes','Hecteyes',18,31,34 INSERT INTO `mob_spawn_points` VALUES (17457233,0,'Hecteyes','Hecteyes',18,31,34,166.758,3.504,-56.162,146); INSERT INTO `mob_spawn_points` VALUES (17457234,0,'Stirge','Stirge',12,30,33,98.000,24.000,-184.000,8); INSERT INTO `mob_spawn_points` VALUES (17457235,0,'Stirge','Stirge',12,30,33,78.999,23.490,-182.105,127); -INSERT INTO `mob_spawn_points` VALUES (17457236,0,'Hyakume','Hyakume',31,0,0,144.098,2.525,-63.542,3); +INSERT INTO `mob_spawn_points` VALUES (17457236,0,'Hyakume','Hyakume',31,43,43,144.098,2.525,-63.542,3); INSERT INTO `mob_spawn_points` VALUES (17457237,0,'Seeker_Bats','Seeker Bats',9,25,28,150.930,24.106,-194.463,69); INSERT INTO `mob_spawn_points` VALUES (17457238,0,'Seeker_Bats','Seeker Bats',9,25,28,158.639,23.630,-206.317,127); INSERT INTO `mob_spawn_points` VALUES (17457239,0,'Seeker_Bats','Seeker Bats',9,25,28,160.597,23.678,-195.648,121);