From 92ea6a1886bf5015c4c6a1da28474166c31bcbef Mon Sep 17 00:00:00 2001 From: Skold177 <113406182+Skold177@users.noreply.github.com> Date: Sun, 25 Jan 2026 23:29:03 -0500 Subject: [PATCH] [lua] [sql] HNM Serket Audit, Scorpion TP Moves Updates the HNM Serket with captures from retail. Updates Scorpion TP moves based off JP Wiki, Jimmys sheet, and some of my own testing. --- scripts/actions/mobskills/critical_bite.lua | 11 +++++---- scripts/actions/mobskills/death_scissors.lua | 10 ++++---- scripts/actions/mobskills/earthbreaker.lua | 6 ++--- scripts/actions/mobskills/evasion.lua | 3 +-- scripts/actions/mobskills/mandible_bite.lua | 9 ++++---- scripts/actions/mobskills/poison_sting.lua | 13 ++++++----- scripts/actions/mobskills/stasis.lua | 23 +++++++++++-------- scripts/actions/mobskills/venom_sting.lua | 15 ++++++------ scripts/enum/mob_skill.lua | 7 ++++++ .../zones/Garlaige_Citadel/mobs/Serket.lua | 22 ++++++++++++++++++ sql/mob_groups.sql | 2 +- sql/mob_pools.sql | 2 +- sql/mob_skills.sql | 14 +++++------ 13 files changed, 85 insertions(+), 52 deletions(-) diff --git a/scripts/actions/mobskills/critical_bite.lua b/scripts/actions/mobskills/critical_bite.lua index 95e36465876..07c430cb0b9 100644 --- a/scripts/actions/mobskills/critical_bite.lua +++ b/scripts/actions/mobskills/critical_bite.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Critical Bite -- --- Description: Deals damage to a single target. +-- Description: Deals damage to a single target. Additional Effect : Knockback (7) -- Type: Physical -- Utsusemi/Blink absorb: 1 shadow -- Range: Melee, used by Nightmare Scorpions, KV, Serket @@ -15,10 +15,11 @@ end mobskillObject.onMobWeaponSkill = function(target, mob, skill) local numhits = 1 - local accmod = 1 - local ftp = 6 - local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.NO_EFFECT) - local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.PIERCING, info.hitslanded) + local accmod = 1 + local ftp = 2 + local params = { canCrit = true } + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.ATK_VARIES, 1.5, 1.5, 1.5, params) + local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.PIERCING, info.hitslanded) target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.PIERCING) return dmg diff --git a/scripts/actions/mobskills/death_scissors.lua b/scripts/actions/mobskills/death_scissors.lua index 48f0430bb98..da5414427d3 100644 --- a/scripts/actions/mobskills/death_scissors.lua +++ b/scripts/actions/mobskills/death_scissors.lua @@ -10,13 +10,13 @@ mobskillObject.onMobSkillCheck = function(target, mob, skill) return 0 end --- TODO: can crit mobskillObject.onMobWeaponSkill = function(target, mob, skill) local numhits = 1 - local accmod = 1 - local ftp = 4 - local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.ATK_VARIES, 2.5, 2.5, 2.5) - local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) + local accmod = 1 + local ftp = 4 + local params = { canCrit = true } + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.ATK_VARIES, 2.5, 2.5, 2.5, params) + local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.SLASHING) return dmg diff --git a/scripts/actions/mobskills/earthbreaker.lua b/scripts/actions/mobskills/earthbreaker.lua index 9ed1a603b10..d4359703cb4 100644 --- a/scripts/actions/mobskills/earthbreaker.lua +++ b/scripts/actions/mobskills/earthbreaker.lua @@ -13,13 +13,11 @@ mobskillObject.onMobSkillCheck = function(target, mob, skill) end mobskillObject.onMobWeaponSkill = function(target, mob, skill) - local damage = mob:getWeaponDmg() * 6 - - damage = xi.mobskills.mobMagicalMove(mob, target, skill, damage, xi.element.EARTH, 1, xi.mobskills.magicalTpBonus.NO_EFFECT) + local damage = xi.mobSkills.mobMagicalMove(mob , target, skill, mob:getMainLvl() + 2, xi.element.EARTH, 4, xi.mobskills.magicalTpBonus.NO_EFFECT) damage = xi.mobskills.mobFinalAdjustments(damage, mob, skill, target, xi.attackType.MAGICAL, xi.damageType.EARTH, xi.mobskills.shadowBehavior.WIPE_SHADOWS) target:takeDamage(damage, mob, xi.attackType.MAGICAL, xi.damageType.EARTH) - xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, 8) + xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, 10) return damage end diff --git a/scripts/actions/mobskills/evasion.lua b/scripts/actions/mobskills/evasion.lua index 9a926f5f833..a290f0fe3e5 100644 --- a/scripts/actions/mobskills/evasion.lua +++ b/scripts/actions/mobskills/evasion.lua @@ -5,7 +5,6 @@ -- Type: Enhancing -- Utsusemi/Blink absorb: N/A -- Range: Self --- Notes: 25% Evasion Boost. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -15,7 +14,7 @@ mobskillObject.onMobSkillCheck = function(target, mob, skill) end mobskillObject.onMobWeaponSkill = function(target, mob, skill) - local power = 25 + local power = 50 local duration = 180 skill:setMsg(xi.mobskills.mobBuffMove(mob, xi.effect.EVASION_BOOST, power, 0, duration)) diff --git a/scripts/actions/mobskills/mandible_bite.lua b/scripts/actions/mobskills/mandible_bite.lua index a0264cf5557..0e3616dded4 100644 --- a/scripts/actions/mobskills/mandible_bite.lua +++ b/scripts/actions/mobskills/mandible_bite.lua @@ -14,10 +14,11 @@ end mobskillObject.onMobWeaponSkill = function(target, mob, skill) local numhits = 1 - local accmod = 1 - local ftp = 2 - local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.ATK_VARIES, 1.5, 1.5, 1.5) - local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.PIERCING, info.hitslanded) + local accmod = 1 + local ftp = 1.5 + local params = { canCrit = true } + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.ATK_VARIES, 1.5, 1.5, 1.5, params) + local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.PIERCING, info.hitslanded) target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.PIERCING) return dmg end diff --git a/scripts/actions/mobskills/poison_sting.lua b/scripts/actions/mobskills/poison_sting.lua index d80d015f3b5..f0c9e3332b9 100644 --- a/scripts/actions/mobskills/poison_sting.lua +++ b/scripts/actions/mobskills/poison_sting.lua @@ -11,15 +11,16 @@ end mobskillObject.onMobWeaponSkill = function(target, mob, skill) local numhits = 1 - local accmod = 1 - local ftp = 2.5 - local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.NO_EFFECT) - local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) - local power = mob:getMainLvl() / 10 + 3 + local accmod = 1 + local ftp = 1 + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.NO_EFFECT) + local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) + local power = math.floor(mob:getMainLvl() / 10) + 3 + + target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.SLASHING) xi.mobskills.mobPhysicalStatusEffectMove(mob, target, skill, xi.effect.POISON, power, 3, 60) - target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.SLASHING) return dmg end diff --git a/scripts/actions/mobskills/stasis.lua b/scripts/actions/mobskills/stasis.lua index 0f1ed3ccefb..d70c774e5fe 100644 --- a/scripts/actions/mobskills/stasis.lua +++ b/scripts/actions/mobskills/stasis.lua @@ -1,9 +1,9 @@ ----------------------------------- -- Stasis --- Description: Paralyzes targets in an area of effect. +-- Description: Deals physical damage to a single target. Additional Effect : Paralysis, Enmity Reset -- Type: Enfeebling --- Utsusemi/Blink absorb: Ignores shadows --- Range: 10' radial +-- Utsusemi/Blink absorb: 1 shadow +-- Range: Melee ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -13,18 +13,21 @@ mobskillObject.onMobSkillCheck = function(target, mob, skill) end mobskillObject.onMobWeaponSkill = function(target, mob, skill) - local shadows = xi.mobskills.shadowBehavior.NUMSHADOWS_1 - -- local dmg = xi.mobskills.mobFinalAdjustments(10, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.BLUNT, shadows) + local numhits = 1 + local accmod = 1 + local ftp = 1.5 + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.NO_EFFECT) + local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) - mob:resetEnmity(target) + target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.SLASHING) - if xi.mobskills.mobPhysicalHit(skill) then - skill:setMsg(xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.PARALYSIS, 40, 0, 60)) + xi.mobskills.mobPhysicalStatusEffectMove(mob, target, skill, xi.effect.PARALYSIS, 20, 0, 20) - return xi.effect.PARALYSIS + if xi.mobskills.mobPhysicalHit(skill) then + target:resetEnmity(mob) end - return shadows + return dmg end return mobskillObject diff --git a/scripts/actions/mobskills/venom_sting.lua b/scripts/actions/mobskills/venom_sting.lua index 0381075ad34..cead2c2c89c 100644 --- a/scripts/actions/mobskills/venom_sting.lua +++ b/scripts/actions/mobskills/venom_sting.lua @@ -1,6 +1,6 @@ ----------------------------------- -- Venom Sting --- Deals Water damage to targets in a fan-shaped area of effect. Additional effect: Poison +-- Deals physical damage to a single target. Additional Effect: Poison ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -11,14 +11,15 @@ end mobskillObject.onMobWeaponSkill = function(target, mob, skill) local numhits = 1 - local accmod = 1 - local ftp = 3.3 - local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.NO_EFFECT) - local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) - - xi.mobskills.mobPhysicalStatusEffectMove(mob, target, skill, xi.effect.POISON, 100, 3, 60) + local accmod = 1 + local ftp = 2 + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, numhits, accmod, ftp, xi.mobskills.physicalTpBonus.NO_EFFECT) + local dmg = xi.mobskills.mobFinalAdjustments(info.dmg, mob, skill, target, xi.attackType.PHYSICAL, xi.damageType.SLASHING, info.hitslanded) target:takeDamage(dmg, mob, xi.attackType.PHYSICAL, xi.damageType.SLASHING) + + xi.mobskills.mobPhysicalStatusEffectMove(mob, target, skill, xi.effect.POISON, 100, 3, 30) + return dmg end diff --git a/scripts/enum/mob_skill.lua b/scripts/enum/mob_skill.lua index 68950d3cc70..30d338eca31 100644 --- a/scripts/enum/mob_skill.lua +++ b/scripts/enum/mob_skill.lua @@ -265,7 +265,14 @@ xi.mobSkill = CHARM = 710, + VENOM_BREATH_1 = 717, JUMP_1 = 718, + CRITICAL_BITE = 719, + VENOM_STING_1 = 720, + STASIS = 721, + VENOM_STORM_1 = 722, + EARTHBREAKER_1 = 723, + EVASION = 724, DEATH_TRAP = 729, -- Lockpicked coffer mimics only MEIKYO_SHISUI_1 = 730, -- Tenzen, etc... diff --git a/scripts/zones/Garlaige_Citadel/mobs/Serket.lua b/scripts/zones/Garlaige_Citadel/mobs/Serket.lua index bb87ac8b5fa..770bd66929b 100644 --- a/scripts/zones/Garlaige_Citadel/mobs/Serket.lua +++ b/scripts/zones/Garlaige_Citadel/mobs/Serket.lua @@ -67,12 +67,15 @@ entity.onMobInitialize = function(mob) mob:setMobMod(xi.mobMod.GIL_MIN, 20000) mob:setMobMod(xi.mobMod.GIL_MAX, 20000) + mob:setMobMod(xi.mobMod.MAGIC_COOL, 60) mob:addImmunity(xi.immunity.DARK_SLEEP) mob:addImmunity(xi.immunity.LIGHT_SLEEP) mob:addImmunity(xi.immunity.POISON) end entity.onMobSpawn = function(mob) + mob:setMod(xi.mod.REGEN, 10) + mob:setMobMod(xi.mobMod.BASE_DAMAGE_MULTIPLIER, 150) mob:setLocalVar('[rage]timer', 1800) -- 30 minutes end @@ -89,6 +92,25 @@ entity.onMobFight = function(mob, target) utils.drawIn(target, drawInTable) end +entity.onMobMobskillChoose = function(mob, target, skillId) + local skillList = + { + xi.mobSkill.VENOM_STING_1, + xi.mobSkill.VENOM_STORM_1, + xi.mobSkill.VENOM_BREATH_1, + xi.mobSkill.CRITICAL_BITE, + xi.mobSkill.EARTHBREAKER_1, + xi.mobSkill.STASIS, + xi.mobSkill.EVASION, + } + + return skillList[math.random(1, #skillList)] +end + +entity.onMobSpellChoose = function(mob, target, spellId) + return xi.magic.spell.BINDGA +end + entity.onMobDeath = function(mob, player, optParams) player:addTitle(xi.title.SERKET_BREAKER) end diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index 8e9fa0f986d..c822ecb2c07 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -13534,7 +13534,7 @@ INSERT INTO `mob_groups` VALUES (37,1831,200,'Guardian_Statue',0,128,1245,0,0,0, INSERT INTO `mob_groups` VALUES (38,2478,200,'Magic_Jug',300,0,1566,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (39,5888,200,'Frogamander',7200,0,3087,7000,0,0,'WOTG'); INSERT INTO `mob_groups` VALUES (40,6463,200,'Donjon_Bat',300,0,461,0,0,0,'ABYSSEA'); -INSERT INTO `mob_groups` VALUES (41,3549,200,'Serket',0,128,2203,50000,0,0,NULL); +INSERT INTO `mob_groups` VALUES (41,3549,200,'Serket',0,128,2203,40000,0,0,NULL); INSERT INTO `mob_groups` VALUES (42,2664,200,'Mimic',0,128,1690,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (43,5531,200,'Light_Elemental',0,128,1521,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (44,5147,200,'Roly-Poly',0,128,0,0,9999,0,NULL); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index 4952a4df4ca..84f9fb8c25c 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -3605,7 +3605,7 @@ INSERT INTO `mob_pools` VALUES (3545,'Sentry_Lizard','Sentry_Lizard',174,0x00004 INSERT INTO `mob_pools` VALUES (3546,'Sentry_Sapling','Sentry_Sapling',216,0x0000880100000000000000000000000000000000,1,1,0,0,100,0,0,0,0,0,0,0,0,3,0,0,0,0,0,216,216,NULL,NULL); INSERT INTO `mob_pools` VALUES (3547,'Seps','Seps',198,0x0000D10600000000000000000000000000000000,1,1,6,240,100,0,0,0,0,2,0,32,0,159,8,0,0,0,0,928,198,3,24); INSERT INTO `mob_pools` VALUES (3548,'Serjeant_Tombstone','Serjeant_Tombstone',93,0x0000200400000000000000000000000000000000,4,4,12,240,100,0,1,0,1,0,6800,0,4516,129,0,0,2,0,0,93,93,0,15); -INSERT INTO `mob_pools` VALUES (3549,'Serket','Serket',273,0x00001C0100000000000000000000000000000000,1,5,7,280,125,0,0,0,0,2,0,32,0,159,0,0,46,0,0,273,273,3,19); +INSERT INTO `mob_pools` VALUES (3549,'Serket','Serket',273,0x00001C0100000000000000000000000000000000,1,5,7,270,125,0,0,0,0,2,0,32,0,159,0,0,46,0,0,273,273,3,19); INSERT INTO `mob_pools` VALUES (3550,'Serpopard_Ishtar','Serpopard_Ishtar',80,0x00004C0100000000000000000000000000000000,1,1,12,240,100,0,0,0,1,2,0,0,0,3,0,0,0,0,0,80,80,2,43); INSERT INTO `mob_pools` VALUES (3551,'Serra','Serra',197,0x00005D0100000000000000000000000000000000,1,14,7,240,100,0,1,0,0,2,0,0,0,133,0,0,0,0,0,709,197,2,32); INSERT INTO `mob_pools` VALUES (3552,'Sevenskewer_Krugglug','Sevenskewer_Krugglug',189,0x00006C0200000000000000000000000000000000,1,1,2,240,100,0,1,1,1,0,0,0,0,3,0,0,0,0,0,334,334,NULL,NULL); diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index cc4f4f1713e..be525317e30 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -741,14 +741,14 @@ INSERT INTO `mob_skills` VALUES (710,438,'charm',0,0.0,18.0,2000,0,4,4,0,0,0,0,0 -- INSERT INTO `mob_skills` VALUES (714,458,'camouflage',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (715,459,'barrage',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (716,460,'shadowbind',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (717,92,'venom_breath',4,0.0,20.0,2000,1500,4,0,0,0,0,0,0); -- hnm only +INSERT INTO `mob_skills` VALUES (717,92,'venom_breath',4,0.0,20.0,2000,2000,4,0,0,0,0,0,0); -- hnm only INSERT INTO `mob_skills` VALUES (718,204,'jump',0,0.0,9.5,2000,0,4,4,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (719,94,'critical_bite',0,0.0,7.0,2000,1500,4,0,0,5,0,0,0); -INSERT INTO `mob_skills` VALUES (720,95,'venom_sting',0,0.0,10.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (721,97,'stasis',0,0.0,9.0,2000,1500,4,0,0,0,0,0,0); -- hnm only -INSERT INTO `mob_skills` VALUES (722,98,'venom_storm',1,0.0,40.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (723,99,'earthbreaker',1,0.0,40.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (724,100,'evasion',0,0.0,9.0,2000,1500,1,0,0,0,0,0,0); -- hnm only +INSERT INTO `mob_skills` VALUES (719,94,'critical_bite',0,0.0,7.0,2000,800,4,0,0,5,0,0,0); +INSERT INTO `mob_skills` VALUES (720,95,'venom_sting',0,0.0,10.0,2000,800,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (721,97,'stasis',0,0.0,9.0,2000,1200,4,0,0,0,0,0,0); -- hnm only +INSERT INTO `mob_skills` VALUES (722,98,'venom_storm',1,0.0,40.0,2000,800,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (723,99,'earthbreaker',1,0.0,40.0,2000,800,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (724,100,'evasion',0,0.0,9.0,2000,800,1,0,0,0,0,0,0); -- hnm only INSERT INTO `mob_skills` VALUES (725,60,'impale',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (726,61,'drain_whip',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (727,63,'bad_breath',1,0.0,40.0,2000,1500,4,0,0,0,0,0,0);