From 44986d4730646fa2e3bd64698ef894fc51e7bfe0 Mon Sep 17 00:00:00 2001 From: Skold <113406182+Skold177@users.noreply.github.com> Date: Sat, 25 Apr 2026 16:27:33 -0400 Subject: [PATCH] Great Katana Mobskills Implements Great Katana Mobskills --- scripts/actions/mobskills/tachi_ageha.lua | 35 ++++++++++++++ scripts/actions/mobskills/tachi_enpi.lua | 33 +++++++++++++ scripts/actions/mobskills/tachi_fudo.lua | 34 ++++++++++++++ scripts/actions/mobskills/tachi_gekko.lua | 19 ++++---- scripts/actions/mobskills/tachi_goten.lua | 46 ++++++++++++++++++ scripts/actions/mobskills/tachi_hobaku.lua | 35 ++++++++++++++ scripts/actions/mobskills/tachi_jinpu.lua | 46 ++++++++++++++++++ scripts/actions/mobskills/tachi_kagero.lua | 46 ++++++++++++++++++ scripts/actions/mobskills/tachi_kaiten.lua | 7 +-- scripts/actions/mobskills/tachi_kasha.lua | 15 +++--- scripts/actions/mobskills/tachi_koki.lua | 47 +++++++++++++++++++ scripts/actions/mobskills/tachi_mumei.lua | 34 ++++++++++++++ scripts/actions/mobskills/tachi_rana.lua | 34 ++++++++++++++ scripts/actions/mobskills/tachi_shoha.lua | 34 ++++++++++++++ scripts/actions/mobskills/tachi_suikawari.lua | 33 +++++++++++++ scripts/actions/mobskills/tachi_yukikaze.lua | 15 +++--- sql/mob_skills.sql | 32 ++++++------- 17 files changed, 503 insertions(+), 42 deletions(-) create mode 100644 scripts/actions/mobskills/tachi_ageha.lua create mode 100644 scripts/actions/mobskills/tachi_enpi.lua create mode 100644 scripts/actions/mobskills/tachi_fudo.lua create mode 100644 scripts/actions/mobskills/tachi_goten.lua create mode 100644 scripts/actions/mobskills/tachi_hobaku.lua create mode 100644 scripts/actions/mobskills/tachi_jinpu.lua create mode 100644 scripts/actions/mobskills/tachi_kagero.lua create mode 100644 scripts/actions/mobskills/tachi_koki.lua create mode 100644 scripts/actions/mobskills/tachi_mumei.lua create mode 100644 scripts/actions/mobskills/tachi_rana.lua create mode 100644 scripts/actions/mobskills/tachi_shoha.lua create mode 100644 scripts/actions/mobskills/tachi_suikawari.lua diff --git a/scripts/actions/mobskills/tachi_ageha.lua b/scripts/actions/mobskills/tachi_ageha.lua new file mode 100644 index 00000000000..a7ede4a0df0 --- /dev/null +++ b/scripts/actions/mobskills/tachi_ageha.lua @@ -0,0 +1,35 @@ +----------------------------------- +-- Tachi: Ageha +-- Family: Humanoid Great Katana Weaponskill +-- Description: Lowers target's defense. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 2.8, 2.8, 2.8 } + -- params.chr_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + 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.DEFENSE_DOWN, 25, 0, math.floor(6 * skill:getTP() / 100)) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_enpi.lua b/scripts/actions/mobskills/tachi_enpi.lua new file mode 100644 index 00000000000..d162a66c006 --- /dev/null +++ b/scripts/actions/mobskills/tachi_enpi.lua @@ -0,0 +1,33 @@ +----------------------------------- +-- Tachi: Enpi +-- Family: Humanoid Great Katana Weaponskill +-- Description: Delivers a two-hit attack. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 2 + params.fTP = { 1.0, 1.5, 2.0 } + -- params.str_wSC = 0.3 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_fudo.lua b/scripts/actions/mobskills/tachi_fudo.lua new file mode 100644 index 00000000000..6881c7aad10 --- /dev/null +++ b/scripts/actions/mobskills/tachi_fudo.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Tachi: Fudo +-- Family: Humanoid Great Katana Weaponskill +-- Description: Deals double damage. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 3.75, 4.75, 5.75 } + -- params.str_wSC = 0.6 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackMultiplier = { 2.0, 2.0, 2.0 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_gekko.lua b/scripts/actions/mobskills/tachi_gekko.lua index b732e38c338..6d9599b498a 100644 --- a/scripts/actions/mobskills/tachi_gekko.lua +++ b/scripts/actions/mobskills/tachi_gekko.lua @@ -1,32 +1,33 @@ ----------------------------------- -- Tachi: Gekko -- Family: Humanoid Great Katana Weaponskill --- Description: Silences target. Damage varies with TP. +-- Description: Silences target. Damage varies with TP. ----------------------------------- ---@type TMobSkill local mobskillObject = {} mobskillObject.onMobSkillCheck = function(target, mob, skill) - mob:messageBasic(xi.msg.basic.READIES_WS, 0, 691 + 256) return 0 end mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} - params.baseDamage = mob:getWeaponDmg() - params.numHits = 1 - params.fTP = { 2.5, 2.5, 2.5 } -- TODO: Capture fTPs - params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.SLASHING - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 1.5625, 1.88, 2.5 } + -- params.str_wSC = 0.75 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackMultiplier = { 2.0, 2.0, 2.0 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) 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.SILENCE, 1, 0, 60) + xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.SILENCE, 1, 0, 45) end return info.damage diff --git a/scripts/actions/mobskills/tachi_goten.lua b/scripts/actions/mobskills/tachi_goten.lua new file mode 100644 index 00000000000..d2c89fcf784 --- /dev/null +++ b/scripts/actions/mobskills/tachi_goten.lua @@ -0,0 +1,46 @@ +----------------------------------- +-- Tachi: Goten +-- Family: Humanoid Great Katana Weaponskill +-- Description: Deals lightning elemental damage. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 1.0, 1.0, 1.0 } + -- params.str_wSC = 0.3 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.hybridSkill = true + params.hybridSkillElement = xi.element.THUNDER + params.hybridAttackType = xi.attackType.MAGICAL + params.hybridDamageType = xi.damageType.THUNDER + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + local totalDamage = 0 + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + if info.damage > 0 then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + totalDamage = totalDamage + info.damage + end + + if info.hybridDamage > 0 and target:getHP() > 0 then + target:takeDamage(info.hybridDamage, mob, info.hybridAttackType, info.hybridDamageType) + totalDamage = totalDamage + info.hybridDamage + end + end + + return totalDamage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_hobaku.lua b/scripts/actions/mobskills/tachi_hobaku.lua new file mode 100644 index 00000000000..51c4e9ffb7f --- /dev/null +++ b/scripts/actions/mobskills/tachi_hobaku.lua @@ -0,0 +1,35 @@ +----------------------------------- +-- Tachi: Hobaku +-- Family: Humanoid Great Katana Weaponskill +-- Description: Stuns target. Chance of stun varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 1.0, 1.0, 1.0 } + -- params.str_wSC = 0.3 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + 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, 3) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_jinpu.lua b/scripts/actions/mobskills/tachi_jinpu.lua new file mode 100644 index 00000000000..c44cbebb38f --- /dev/null +++ b/scripts/actions/mobskills/tachi_jinpu.lua @@ -0,0 +1,46 @@ +----------------------------------- +-- Tachi: Jinpu +-- Family: Humanoid Great Katana Weaponskill +-- Description: Delivers a two-fold attack that deals wind elemental damage. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 2 + params.fTP = { 1.0, 1.0, 1.0 } + -- params.str_wSC = 0.4 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.hybridSkill = true + params.hybridSkillElement = xi.element.WIND + params.hybridAttackType = xi.attackType.MAGICAL + params.hybridDamageType = xi.damageType.WIND + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + local totalDamage = 0 + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + if info.damage > 0 then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + totalDamage = totalDamage + info.damage + end + + if info.hybridDamage > 0 and target:getHP() > 0 then + target:takeDamage(info.hybridDamage, mob, info.hybridAttackType, info.hybridDamageType) + totalDamage = totalDamage + info.hybridDamage + end + end + + return totalDamage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_kagero.lua b/scripts/actions/mobskills/tachi_kagero.lua new file mode 100644 index 00000000000..9c70573ae30 --- /dev/null +++ b/scripts/actions/mobskills/tachi_kagero.lua @@ -0,0 +1,46 @@ +----------------------------------- +-- Tachi: Kagero +-- Family: Humanoid Great Katana Weaponskill +-- Description: Deals fire elemental damage. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 1.0, 1.0, 1.0 } + -- params.str_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.hybridSkill = true + params.hybridSkillElement = xi.element.FIRE + params.hybridAttackType = xi.attackType.MAGICAL + params.hybridDamageType = xi.damageType.FIRE + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + local totalDamage = 0 + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + if info.damage > 0 then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + totalDamage = totalDamage + info.damage + end + + if info.hybridDamage > 0 and target:getHP() > 0 then + target:takeDamage(info.hybridDamage, mob, info.hybridAttackType, info.hybridDamageType) + totalDamage = totalDamage + info.hybridDamage + end + end + + return totalDamage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_kaiten.lua b/scripts/actions/mobskills/tachi_kaiten.lua index 6626eeaf9f0..477715d1e6b 100644 --- a/scripts/actions/mobskills/tachi_kaiten.lua +++ b/scripts/actions/mobskills/tachi_kaiten.lua @@ -1,7 +1,7 @@ ----------------------------------- --- Tachi:Kaiten +-- Tachi: Kaiten -- Family: Humanoid Great Katana Weaponskill --- Description: Amanomurakumo/Totsukanotsurugi: Temporarily increases amount of TP stored with each hit. +-- Description: Delivers a single-hit attack. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -15,7 +15,8 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) params.baseDamage = mob:getWeaponDmg() params.numHits = 1 - params.fTP = { 2.5, 2.5, 2.5 } -- TODO: Capture fTPs + params.fTP = { 3.0, 3.0, 3.0 } + -- params.str_wSC = 0.6 -- TODO: Capture if mobskill weaponskills have wSC. params.attackType = xi.attackType.PHYSICAL params.damageType = xi.damageType.SLASHING params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 diff --git a/scripts/actions/mobskills/tachi_kasha.lua b/scripts/actions/mobskills/tachi_kasha.lua index d1f45948a91..ed49aec95d1 100644 --- a/scripts/actions/mobskills/tachi_kasha.lua +++ b/scripts/actions/mobskills/tachi_kasha.lua @@ -7,19 +7,20 @@ local mobskillObject = {} mobskillObject.onMobSkillCheck = function(target, mob, skill) - mob:messageBasic(xi.msg.basic.READIES_WS, 0, 692 + 256) return 0 end mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} - params.baseDamage = mob:getWeaponDmg() - params.numHits = 1 - params.fTP = { 3.5, 3.5, 3.5 } -- TODO: Capture fTPs - params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.SLASHING - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 1.56, 1.88, 2.5 } + -- params.str_wSC = 0.75 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackMultiplier = { 1.5, 1.5, 1.5 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/tachi_koki.lua b/scripts/actions/mobskills/tachi_koki.lua new file mode 100644 index 00000000000..18f651bfa90 --- /dev/null +++ b/scripts/actions/mobskills/tachi_koki.lua @@ -0,0 +1,47 @@ +----------------------------------- +-- Tachi: Koki +-- Family: Humanoid Great Katana Weaponskill +-- Description: Deals light elemental damage. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 0.5, 0.75, 1.0 } + -- params.str_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + -- params.mnd_wSC = 0.3 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.hybridSkill = true + params.hybridSkillElement = xi.element.LIGHT + params.hybridAttackType = xi.attackType.MAGICAL + params.hybridDamageType = xi.damageType.LIGHT + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + local totalDamage = 0 + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + if info.damage > 0 then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + totalDamage = totalDamage + info.damage + end + + if info.hybridDamage > 0 and target:getHP() > 0 then + target:takeDamage(info.hybridDamage, mob, info.hybridAttackType, info.hybridDamageType) + totalDamage = totalDamage + info.hybridDamage + end + end + + return totalDamage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_mumei.lua b/scripts/actions/mobskills/tachi_mumei.lua new file mode 100644 index 00000000000..7311079e937 --- /dev/null +++ b/scripts/actions/mobskills/tachi_mumei.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Tachi: Mumei +-- Family: Humanoid Great Katana Weaponskill +-- Description: Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 3.66, 7.33, 11.0 } + -- params.str_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + -- params.dex_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_rana.lua b/scripts/actions/mobskills/tachi_rana.lua new file mode 100644 index 00000000000..af41e488157 --- /dev/null +++ b/scripts/actions/mobskills/tachi_rana.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Tachi: Rana +-- Family: Humanoid Great Katana Weaponskill +-- Description: Delivers a threefold attack. Accuracy varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 3 + params.fTP = { 1.0, 1.0, 1.0 } + -- params.str_wSC = 0.35 -- TODO: Capture if mobskill weaponskills have wSC. + params.accuracyModifier = { 0, 30, 60 } -- TODO: Verify exact number. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_3 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_shoha.lua b/scripts/actions/mobskills/tachi_shoha.lua new file mode 100644 index 00000000000..0c35176ea4c --- /dev/null +++ b/scripts/actions/mobskills/tachi_shoha.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Tachi: Shoha +-- Family: Humanoid Great Katana Weaponskill +-- Description: Delivers a two-hit attack. Damage varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 2 + params.fTP = { 1.375, 2.1875, 2.6875 } + -- params.str_wSC = 0.85 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackMultiplier = { 1.375, 1.375, 1.375 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_suikawari.lua b/scripts/actions/mobskills/tachi_suikawari.lua new file mode 100644 index 00000000000..5c42c341d7b --- /dev/null +++ b/scripts/actions/mobskills/tachi_suikawari.lua @@ -0,0 +1,33 @@ +----------------------------------- +-- Tachi: Suikawari +-- Family: Humanoid Great Katana Weaponskill +-- Description: Number of watermelons sliced varies with TP. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local params = {} + + params.baseDamage = mob:getWeaponDmg() + params.numHits = 2 + params.fTP = { 1.0, 1.5, 2.0 } + -- params.str_wSC = 0.6 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + + local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) + + if xi.mobskills.processDamage(mob, target, skill, action, info) then + target:takeDamage(info.damage, mob, info.attackType, info.damageType) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/tachi_yukikaze.lua b/scripts/actions/mobskills/tachi_yukikaze.lua index 1fceec7c0b4..0b917b9dedb 100644 --- a/scripts/actions/mobskills/tachi_yukikaze.lua +++ b/scripts/actions/mobskills/tachi_yukikaze.lua @@ -7,19 +7,20 @@ local mobskillObject = {} mobskillObject.onMobSkillCheck = function(target, mob, skill) - mob:messageBasic(xi.msg.basic.READIES_WS, 0, 690 + 256) return 0 end mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} - params.baseDamage = mob:getWeaponDmg() - params.numHits = 1 - params.fTP = { 3.0, 3.0, 3.0 } - params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.SLASHING - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 + params.baseDamage = mob:getWeaponDmg() + params.numHits = 1 + params.fTP = { 1.5625, 1.88, 2.5 } + -- params.str_wSC = 0.75 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackMultiplier = { 1.33, 1.33, 1.33 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.SLASHING + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index e17fd2ebbb6..a471fb9317e 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -180,22 +180,22 @@ INSERT INTO `mob_skills` VALUES (139,162,'blade_yu',0,0.0,7.0,2000,0,4,0,0,0,5,4 INSERT INTO `mob_skills` VALUES (140,163,'blade_hi',0,0.0,7.0,2000,0,4,0,0,0,14,9,0); INSERT INTO `mob_skills` VALUES (141,164,'blade_shun',0,0.0,7.0,2000,0,4,0,0,0,11,8,0); INSERT INTO `mob_skills` VALUES (142,160,'zesho_meppo',0,0.0,7.0,2000,0,4,0,0,0,11,7,5); --- INSERT INTO `mob_skills` VALUES (144,??,'tachi_enpi' --- INSERT INTO `mob_skills` VALUES (145,??,'tachi_hobaku' --- INSERT INTO `mob_skills` VALUES (146,??,'tachi_goten' --- INSERT INTO `mob_skills` VALUES (147,??,'tachi_kagero' --- INSERT INTO `mob_skills` VALUES (148,??,'tachi_jinpu' --- INSERT INTO `mob_skills` VALUES (149,??,'tachi_koki' --- INSERT INTO `mob_skills` VALUES (150,??,'tachi_yukikaze' --- INSERT INTO `mob_skills` VALUES (151,??,'tachi_gekko' --- INSERT INTO `mob_skills` VALUES (152,??,'tachi_kasha' --- INSERT INTO `mob_skills` VALUES (153,??,'tachi_kaiten' --- INSERT INTO `mob_skills` VALUES (154,??,'tachi_rana' --- INSERT INTO `mob_skills` VALUES (155,??,'tachi_ageha' --- INSERT INTO `mob_skills` VALUES (156,??,'tachi_fudo' --- INSERT INTO `mob_skills` VALUES (157,??,'tachi_shoha' --- INSERT INTO `mob_skills` VALUES (158,??,'tachi_suikawari' --- INSERT INTO `mob_skills` VALUES (159,??,'tachi_mumei' +INSERT INTO `mob_skills` VALUES (144,166,'tachi_enpi',0,0.0,7.0,2000,0,4,0,0,0,1,4,0); +INSERT INTO `mob_skills` VALUES (145,167,'tachi_hobaku',0,0.0,7.0,2000,0,4,0,0,0,7,0,0); +INSERT INTO `mob_skills` VALUES (146,168,'tachi_goten',0,0.0,7.0,2000,0,4,0,0,0,1,8,0); +INSERT INTO `mob_skills` VALUES (147,169,'tachi_kagero',0,0.0,7.0,2000,0,4,0,0,0,3,0,0); +INSERT INTO `mob_skills` VALUES (148,170,'tachi_jinpu',0,0.0,7.0,2000,0,4,0,0,0,4,6,0); +INSERT INTO `mob_skills` VALUES (149,171,'tachi_koki',0,0.0,7.0,2000,0,4,0,0,0,5,8,0); +INSERT INTO `mob_skills` VALUES (150,172,'tachi_yukikaze',0,0.0,7.0,2000,0,4,0,0,0,7,6,0); +INSERT INTO `mob_skills` VALUES (151,173,'tachi_gekko',0,0.0,7.0,2000,0,4,0,0,0,10,5,0); +INSERT INTO `mob_skills` VALUES (152,174,'tachi_kasha',0,0.0,7.0,2000,0,4,0,0,0,11,2,0); +INSERT INTO `mob_skills` VALUES (153,175,'tachi_kaiten',0,0.0,7.0,2000,0,4,0,0,0,13,12,0); +INSERT INTO `mob_skills` VALUES (154,176,'tachi_rana',0,0.0,7.0,2000,0,4,0,0,0,9,7,0); +INSERT INTO `mob_skills` VALUES (155,177,'tachi_ageha',0,0.0,7.0,2000,0,4,0,0,0,2,4,0); +INSERT INTO `mob_skills` VALUES (156,178,'tachi_fudo',0,0.0,7.0,2000,0,4,0,0,0,13,10,0); +INSERT INTO `mob_skills` VALUES (157,179,'tachi_shoha',0,0.0,7.0,2000,0,4,0,0,0,12,2,0); +INSERT INTO `mob_skills` VALUES (158,175,'tachi_suikawari',0,0.0,7.0,2000,0,4,0,0,0,11,0,0); +INSERT INTO `mob_skills` VALUES (159,175,'tachi_mumei',0,0.0,7.0,2000,0,4,0,0,0,11,7,5); INSERT INTO `mob_skills` VALUES (160,76,'shining_strike',0,0.0,7.0,2000,0,4,0,0,0,8,0,0); INSERT INTO `mob_skills` VALUES (161,77,'seraph_strike',0,0.0,7.0,2000,0,4,0,0,0,8,0,0); INSERT INTO `mob_skills` VALUES (162,78,'brainshaker',0,0.0,7.0,2000,0,4,0,0,0,7,5,0);