From 61711a6736d2cfa183aa7c8bdc1dc5cf1228f2d5 Mon Sep 17 00:00:00 2001 From: Skold <113406182+Skold177@users.noreply.github.com> Date: Tue, 21 Apr 2026 00:06:10 -0400 Subject: [PATCH] [lua] [sql] H2H Mobskills Implements H2H Mobskills --- scripts/actions/mobskills/ascetics_fury.lua | 21 ++++++----- scripts/actions/mobskills/asuran_fists.lua | 15 +++++--- scripts/actions/mobskills/backhand_blow.lua | 36 ++++++++++++++++++ scripts/actions/mobskills/combo.lua | 6 ++- scripts/actions/mobskills/dragon_blow.lua | 33 +++++++++++++++++ scripts/actions/mobskills/dragon_kick.lua | 14 ++++--- scripts/actions/mobskills/final_heaven.lua | 9 +++-- scripts/actions/mobskills/final_paradise.lua | 34 +++++++++++++++++ scripts/actions/mobskills/howling_fist.lua | 17 +++++---- scripts/actions/mobskills/maru_kala.lua | 34 +++++++++++++++++ scripts/actions/mobskills/one_inch_punch.lua | 34 +++++++++++++++++ scripts/actions/mobskills/raging_fists.lua | 34 +++++++++++++++++ scripts/actions/mobskills/shijin_spiral.lua | 37 +++++++++++++++++++ scripts/actions/mobskills/shoulder_tackle.lua | 36 ++++++++++++++++++ scripts/actions/mobskills/spinning_attack.lua | 14 +++---- .../actions/mobskills/spinning_attack_pot.lua | 32 ++++++++++++++++ .../actions/mobskills/stringing_pummel.lua | 36 ++++++++++++++++++ scripts/actions/mobskills/tornado_kick.lua | 35 ++++++++++++++++++ scripts/actions/mobskills/victory_smite.lua | 9 +++-- sql/mob_skills.sql | 35 ++++++++++-------- 20 files changed, 460 insertions(+), 61 deletions(-) create mode 100644 scripts/actions/mobskills/backhand_blow.lua create mode 100644 scripts/actions/mobskills/dragon_blow.lua create mode 100644 scripts/actions/mobskills/final_paradise.lua create mode 100644 scripts/actions/mobskills/maru_kala.lua create mode 100644 scripts/actions/mobskills/one_inch_punch.lua create mode 100644 scripts/actions/mobskills/raging_fists.lua create mode 100644 scripts/actions/mobskills/shijin_spiral.lua create mode 100644 scripts/actions/mobskills/shoulder_tackle.lua create mode 100644 scripts/actions/mobskills/spinning_attack_pot.lua create mode 100644 scripts/actions/mobskills/stringing_pummel.lua create mode 100644 scripts/actions/mobskills/tornado_kick.lua diff --git a/scripts/actions/mobskills/ascetics_fury.lua b/scripts/actions/mobskills/ascetics_fury.lua index bec96d46441..b69ddc9ecd5 100644 --- a/scripts/actions/mobskills/ascetics_fury.lua +++ b/scripts/actions/mobskills/ascetics_fury.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Ascetics Fury -- Family: Humanoid Hand to Hand Weaponskill --- Description: Hand To Hand Weapon Skill +-- Description: Delivers a twofold attack. Chance of critical hit varies with TP. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -13,14 +13,17 @@ end mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} - params.baseDamage = mob:getWeaponDmg() - params.numHits = 1 - params.fTP = { 2.6, 2.6, 2.6 } -- TODO: Capture fTPs - params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.HTH - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 -- TODO: Capture shadowBehavior - params.canCrit = true - params.criticalChance = { 0.1, 0.3, 0.5 } -- TODO: Capture actual crit rate + params.baseDamage = mob:getWeaponDmg() + params.numHits = 2 + params.fTP = { 1.0, 1.0, 1.0 } + params.attackMultiplier = { 1.5, 1.5, 1.5 } + --params.str_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + --params.vit_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + params.canCrit = true + params.criticalChance = { 0.1, 0.2, 0.4 } local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/asuran_fists.lua b/scripts/actions/mobskills/asuran_fists.lua index 9f5b17c1f16..a90af8a839a 100644 --- a/scripts/actions/mobskills/asuran_fists.lua +++ b/scripts/actions/mobskills/asuran_fists.lua @@ -18,12 +18,15 @@ end mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} - params.baseDamage = mob:getWeaponDmg() - params.numHits = 8 - params.fTP = { 0.8, 0.8, 0.8 } - params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.HTH - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_8 + params.baseDamage = mob:getWeaponDmg() + params.numHits = 8 + params.fTP = { 1.0, 1.0, 1.0 } + --params.str_wSC = 0.1 -- TODO: Capture if mobskill weaponskills have wSC. + --params.vit_wSC = 0.1 -- TODO: Capture if mobskill weaponskills have wSC. + params.accuracyModifier = { 0, 30, 60 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_8 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/backhand_blow.lua b/scripts/actions/mobskills/backhand_blow.lua new file mode 100644 index 00000000000..dc0963a7c2d --- /dev/null +++ b/scripts/actions/mobskills/backhand_blow.lua @@ -0,0 +1,36 @@ +----------------------------------- +-- Backhand Blow +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Deals critical damage. Critical rate 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.3 -- TODO: Capture if mobskill weaponskills have wSC. + --params.dex_wSC = 0.3 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + params.canCrit = true + params.criticalChance = { 0.4, 0.6, 0.8 } + + 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/combo.lua b/scripts/actions/mobskills/combo.lua index b2934ba675b..28ab6642d47 100644 --- a/scripts/actions/mobskills/combo.lua +++ b/scripts/actions/mobskills/combo.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Combo -- Family: Humanoid Hand to Hand Weaponskill --- Description: Delivers a 3 hit attack +-- Description: Delivers a three-fold attack. Damage varies with TP. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -15,7 +15,9 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) params.baseDamage = mob:getWeaponDmg() params.numHits = 3 - params.fTP = { 1.0, 1.0, 1.0 } + params.fTP = { 1.0, 1.5, 2.0 } + --params.str_wSC = 0.2 -- TODO: Capture if mobskill weaponskills have wSC. + --params.dex_wSC = 0.2 -- TODO: Capture if mobskill weaponskills have wSC. params.attackType = xi.attackType.PHYSICAL params.damageType = xi.damageType.HTH params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_3 diff --git a/scripts/actions/mobskills/dragon_blow.lua b/scripts/actions/mobskills/dragon_blow.lua new file mode 100644 index 00000000000..ac6f2c75b3c --- /dev/null +++ b/scripts/actions/mobskills/dragon_blow.lua @@ -0,0 +1,33 @@ +----------------------------------- +-- Dragon Blow +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a twofold 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 = { 3.675, 7.0, 10.4375 } + --params.dex_wSC = 0.85 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + 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/dragon_kick.lua b/scripts/actions/mobskills/dragon_kick.lua index 049a3b94e12..4c1c61820ee 100644 --- a/scripts/actions/mobskills/dragon_kick.lua +++ b/scripts/actions/mobskills/dragon_kick.lua @@ -1,7 +1,8 @@ ----------------------------------- -- Dragon Kick -- Family: Humanoid Hand to Hand Weaponskill --- Description: +-- Description: Delivers a twofold attack. Damage varies with TP. +-- TODO: Effected by Kick Attacks bonuses? ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -14,12 +15,13 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} params.baseDamage = mob:getWeaponDmg() - params.numHits = 1 -- TODO: Capture numHits - params.fTP = { 3.0, 3.0, 3.0 } -- TODO: Capture fTPs + params.numHits = 2 + params.fTP = { 2.0, 2.5, 3.5 } + --params.str_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + --params.vit_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.BLUNT -- TODO: Should this be xi.damageType.HTH? - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 -- TODO: Capture shadowBehavior - -- TODO: Does Kick Attack modifiers apply to this? + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/final_heaven.lua b/scripts/actions/mobskills/final_heaven.lua index 8bbd51deaae..292f6f4aac3 100644 --- a/scripts/actions/mobskills/final_heaven.lua +++ b/scripts/actions/mobskills/final_heaven.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Final Heaven -- Family: Humanoid Hand to Hand Weaponskill --- Description: Caestus/Spharai: Temporarily enhances Subtle Blow effect +-- Description: Delivers a twofold attack. Caestus/Spharai: Subtle Blow +10. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -14,11 +14,12 @@ 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.numHits = 2 + params.fTP = { 3.0, 3.0, 3.0 } + --params.vit_wSC = 0.6 -- TODO: Capture if mobskill weaponskills have wSC. params.attackType = xi.attackType.PHYSICAL params.damageType = xi.damageType.HTH - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_1 -- TODO: Capture shadowBehavior + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/final_paradise.lua b/scripts/actions/mobskills/final_paradise.lua new file mode 100644 index 00000000000..b3f0e7a17bf --- /dev/null +++ b/scripts/actions/mobskills/final_paradise.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Final Paradise +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a twofold attack. Paradise 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.vit_wSC = 0.6 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + 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) + skill:setMsg(xi.msg.basic.MOTE_OF_PARADISE) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/howling_fist.lua b/scripts/actions/mobskills/howling_fist.lua index 6f716ab09e8..ae3442d53f9 100644 --- a/scripts/actions/mobskills/howling_fist.lua +++ b/scripts/actions/mobskills/howling_fist.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Howling Fist -- Family: Humanoid Hand to Hand Weaponskill --- Description: Damage varies with TP. +-- Description: Delivers a twofold attack. Damage varies with TP. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -13,12 +13,15 @@ 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 } -- TODO: Capture fTPs - params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.HTH - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 + params.baseDamage = mob:getWeaponDmg() + params.numHits = 2 + params.fTP = { 2.5, 2.75, 3.0 } + params.attackMultiplier = { 1.5, 1.5, 1.5 } + --params.str_wSC = 0.2 -- TODO: Capture if mobskill weaponskills have wSC. + --params.vit_wSC = 0.5 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/maru_kala.lua b/scripts/actions/mobskills/maru_kala.lua new file mode 100644 index 00000000000..e932111d63d --- /dev/null +++ b/scripts/actions/mobskills/maru_kala.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Maru Kala +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a twofold 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 = { 3.125, 7.25, 11.5 } + --params.str_wSC = 0.4175 -- TODO: Capture if mobskill weaponskills have wSC. + --params.dex_wSC = 0.4175 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + 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/one_inch_punch.lua b/scripts/actions/mobskills/one_inch_punch.lua new file mode 100644 index 00000000000..d3ad4dcac2a --- /dev/null +++ b/scripts/actions/mobskills/one_inch_punch.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- One Inch Punch +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a twofold attack that ignores target's defense. Amount ignored 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.vit_wSC = 0.4 -- TODO: Capture if mobskill weaponskills have wSC. + params.ignoreDefense = { 0.0, 0.3, 0.5 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + 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/raging_fists.lua b/scripts/actions/mobskills/raging_fists.lua new file mode 100644 index 00000000000..6f1f5fa69bf --- /dev/null +++ b/scripts/actions/mobskills/raging_fists.lua @@ -0,0 +1,34 @@ +----------------------------------- +-- Raging Fists +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a fivefold 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 = 5 + params.fTP = { 1.0, 1.5, 2.0 } + --params.str_wSC = 0.2 -- TODO: Capture if mobskill weaponskills have wSC. + --params.dex_wSC = 0.2 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_5 + + 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/shijin_spiral.lua b/scripts/actions/mobskills/shijin_spiral.lua new file mode 100644 index 00000000000..3905a8395e8 --- /dev/null +++ b/scripts/actions/mobskills/shijin_spiral.lua @@ -0,0 +1,37 @@ +----------------------------------- +-- Shijin Spiral +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a fivefold attack that inflicts Plague. +----------------------------------- +---@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 = 5 + params.fTP = { 1.0625, 1.0625, 1.0625 } + --params.dex_wSC = 0.85 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackMultiplier = { 1.05, 1.05, 1.05 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_5 + + 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) + + local duration = xi.mobskills.calculateDuration(skill:getTP(), 18, 24) + xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.PLAGUE, 5, 3, duration) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/shoulder_tackle.lua b/scripts/actions/mobskills/shoulder_tackle.lua new file mode 100644 index 00000000000..2bde41c562a --- /dev/null +++ b/scripts/actions/mobskills/shoulder_tackle.lua @@ -0,0 +1,36 @@ +----------------------------------- +-- Shoulder Tackle +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a twofold attack that stuns target. +----------------------------------- +---@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.vit_wSC = 0.3 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + 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) + + local duration = xi.mobskills.calculateDuration(skill:getTP(), 2, 6) + xi.mobskills.mobStatusEffectMove(mob, target, xi.effect.STUN, 1, 0, duration) + end + + return info.damage +end + +return mobskillObject diff --git a/scripts/actions/mobskills/spinning_attack.lua b/scripts/actions/mobskills/spinning_attack.lua index e3727b69f89..11975b69eb1 100644 --- a/scripts/actions/mobskills/spinning_attack.lua +++ b/scripts/actions/mobskills/spinning_attack.lua @@ -1,8 +1,7 @@ ----------------------------------- -- Spinning Attack --- Family: Magic Pot --- Description: Spins into targets in a fan-shaped area of effect. Additional Effect: Knockback --- TODO: Make lua file: "spinning_attack_magic_pot" and "spinning_attack_hth" +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a twofold area attack. TODO : Radius varies with TP. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -15,11 +14,12 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) local params = {} params.baseDamage = mob:getWeaponDmg() - params.numHits = 1 - params.fTP = { 1.5, 1.5, 1.5 } + params.numHits = 2 + params.fTP = { 1.0, 1.0, 1.0 } + --params.str_wSC = 0.35 -- TODO: Capture if mobskill weaponskills have wSC. params.attackType = xi.attackType.PHYSICAL - params.damageType = xi.damageType.BLUNT - params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_3 -- TODO: Capture fTPs + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_2 local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/scripts/actions/mobskills/spinning_attack_pot.lua b/scripts/actions/mobskills/spinning_attack_pot.lua new file mode 100644 index 00000000000..859e977c9d0 --- /dev/null +++ b/scripts/actions/mobskills/spinning_attack_pot.lua @@ -0,0 +1,32 @@ +----------------------------------- +-- Spinning Attack +-- Family: Magic Pot +-- Description: Spins into targets in a fan-shaped area of effect. Additional Effect: Knockback +----------------------------------- +---@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.5, 1.5, 1.5 } + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.BLUNT + 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/stringing_pummel.lua b/scripts/actions/mobskills/stringing_pummel.lua new file mode 100644 index 00000000000..10658a13770 --- /dev/null +++ b/scripts/actions/mobskills/stringing_pummel.lua @@ -0,0 +1,36 @@ +----------------------------------- +-- Stringing Pummel +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a sixfold attack. Chance of critical hit 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 = 6 + params.fTP = { 0.75, 0.75, 0.75 } + --params.str_wSC = 0.32 -- TODO: Capture if mobskill weaponskills have wSC. + --params.vit_wSC = 0.32 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_6 + params.canCrit = true + params.criticalChance = { 0.15, 0.30, 0.45 } + + 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/tornado_kick.lua b/scripts/actions/mobskills/tornado_kick.lua new file mode 100644 index 00000000000..6481328145e --- /dev/null +++ b/scripts/actions/mobskills/tornado_kick.lua @@ -0,0 +1,35 @@ +----------------------------------- +-- Tornado Kick +-- Family: Humanoid Hand to Hand Weaponskill +-- Description: Delivers a threefold attack. Damage varies with TP. +-- TODO: Effected by Kick Attacks bonuses? +----------------------------------- +---@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 = { 2.25, 2.75, 3.5 } + --params.str_wSC = 0.32 -- TODO: Capture if mobskill weaponskills have wSC. + --params.vit_wSC = 0.32 -- TODO: Capture if mobskill weaponskills have wSC. + params.attackType = xi.attackType.PHYSICAL + params.damageType = xi.damageType.HTH + 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/victory_smite.lua b/scripts/actions/mobskills/victory_smite.lua index a7248ac7c26..2917bf8fb6a 100644 --- a/scripts/actions/mobskills/victory_smite.lua +++ b/scripts/actions/mobskills/victory_smite.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Victory Smite -- Family: Humanoid Hand to Hand Weaponskill --- Description: Delivers a fourfold attack. +-- Description: Delivers a fourfold attack. Chance of critical hit varies with TP. ----------------------------------- ---@type TMobSkill local mobskillObject = {} @@ -15,12 +15,13 @@ mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) params.baseDamage = mob:getWeaponDmg() params.numHits = 4 - params.fTP = { 2.25, 2.25, 2.25 } -- TODO: Capture fTPs + params.fTP = { 2.25, 2.25, 2.25 } + --params.str_wSC = 0.6 -- TODO: Capture if mobskill weaponskills have wSC. params.attackType = xi.attackType.PHYSICAL params.damageType = xi.damageType.HTH params.shadowBehavior = xi.mobskills.shadowBehavior.NUMSHADOWS_4 - -- params.canCrit = true - -- params.criticalChance = { 0.0, 0.0, 0.0 } -- TODO: Capture crit rate + params.canCrit = true + params.criticalChance = { 0.1, 0.25, 0.45 } local info = xi.mobskills.mobPhysicalMove(mob, target, skill, action, params) diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index 02049cc577e..482e3252d33 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -43,18 +43,21 @@ SET @SKILLFLAG_ALWAYS_ANIMATE = 256; -- Table contents for `mob_skills` -- -INSERT INTO `mob_skills` VALUES (1,16,'combo',0,0.0,5.0,2000,0,4,0,0,0,8,0,0); --- INSERT INTO `mob_skills` VALUES (2,??,'shoulder_tackle' --- INSERT INTO `mob_skills` VALUES (3,??,'one_inch_punch' -INSERT INTO `mob_skills` VALUES (4,19,'backhand_blow',0,0.0,5.0,2000,0,4,0,0,0,6,0,0); --- INSERT INTO `mob_skills` VALUES (5,??,'raging_fists' --- INSERT INTO `mob_skills` VALUES (6,??,'spinning_attack' -INSERT INTO `mob_skills` VALUES (7,22,'howling_fist',0,0.0,5.0,2000,0,4,0,0,0,1,8,0); -INSERT INTO `mob_skills` VALUES (9,24,'asuran_fists',0,0.0,5.0,2000,0,4,0,0,0,9,3,0); -INSERT INTO `mob_skills` VALUES (10,25,'final_heaven',0,0.0,5.0,2000,0,4,0,0,0,13,11,0); -INSERT INTO `mob_skills` VALUES (11,26,'ascetics_fury',0,0.0,5.0,2000,0,4,0,0,0,11,1,0); -INSERT INTO `mob_skills` VALUES (14,29,'victory_smite',0,0.0,5.0,2000,0,4,0,0,0,13,12,0); --- INSERT INTO `mob_skills` VALUES (15,??,'shijin_spiral' +INSERT INTO `mob_skills` VALUES (1,16,'combo',0,0.0,7.0,2000,0,4,0,0,0,8,0,0); +INSERT INTO `mob_skills` VALUES (2,17,'shoulder_tackle',0,0.0,7.0,2000,0,4,0,0,0,5,8,0); +INSERT INTO `mob_skills` VALUES (3,18,'one_inch_punch',0,0.0,7.0,2000,0,4,0,0,0,2,0,0); +INSERT INTO `mob_skills` VALUES (4,19,'backhand_blow',0,0.0,7.0,2000,0,4,0,0,0,6,0,0); +INSERT INTO `mob_skills` VALUES (5,20,'raging_fists',0,0.0,7.0,2000,0,4,0,0,0,8,0,0); +INSERT INTO `mob_skills` VALUES (6,21,'spinning_attack',1,0.0,7.0,2000,0,4,0,0,0,3,8,0); +INSERT INTO `mob_skills` VALUES (7,22,'howling_fist',0,0.0,7.0,2000,0,4,0,0,0,1,8,0); +INSERT INTO `mob_skills` VALUES (8,23,'dragon_kick',0,0.0,7.0,2000,0,4,0,0,0,12,0,0); +INSERT INTO `mob_skills` VALUES (9,24,'asuran_fists',0,0.0,7.0,2000,0,4,0,0,0,9,3,0); +INSERT INTO `mob_skills` VALUES (10,25,'final_heaven',0,0.0,7.0,2000,0,4,0,0,0,13,11,0); +INSERT INTO `mob_skills` VALUES (11,26,'ascetics_fury',0,0.0,7.0,2000,0,4,0,0,0,11,1,0); +INSERT INTO `mob_skills` VALUES (12,27,'stringing_pummel',0,0.0,7.0,2000,0,4,0,0,0,9,3,0); +INSERT INTO `mob_skills` VALUES (13,28,'tornado_kick',0,0.0,7.0,2000,0,4,0,0,0,7,8,6); +INSERT INTO `mob_skills` VALUES (14,29,'victory_smite',0,0.0,7.0,2000,0,4,0,0,0,13,12,0); +INSERT INTO `mob_skills` VALUES (15,30,'shijin_spiral',0,0.0,7.0,2000,0,4,0,0,0,11,5,0); INSERT INTO `mob_skills` VALUES (16,31,'wasp_sting',0,0.0,7.0,2000,0,4,0,0,0,4,0,0); INSERT INTO `mob_skills` VALUES (17,32,'viper_bite',0,0.0,7.0,2000,0,4,0,0,0,4,0,0); INSERT INTO `mob_skills` VALUES (18,33,'shadowstitch',0,0.0,7.0,2000,0,4,0,0,0,5,0,0); @@ -254,10 +257,10 @@ INSERT INTO `mob_skills` VALUES (224,1,'exenterator',0,0.0,7.0,2000,0,4,0,0,0,12 INSERT INTO `mob_skills` VALUES (225,233,'chant_du_cygne',0,0.0,7.0,2000,0,4,0,0,0,13,10,0); INSERT INTO `mob_skills` VALUES (226,237,'requiescat',0,0.0,7.0,2000,0,4,0,0,0,9,4,0); INSERT INTO `mob_skills` VALUES (227,12,'knights_of_rotund',0,0.0,7.0,2000,0,4,0,0,0,11,0,0); --- INSERT INTO `mob_skills` VALUES (228,??,'final_paradise' +INSERT INTO `mob_skills` VALUES (228,25,'final_paradise',0,0.0,7.0,2000,0,4,0,0,0,13,0,0); INSERT INTO `mob_skills` VALUES (229,1,'fast_blade_ii',0,0.0,7.0,2000,0,4,0,0,0,11,0,0); --- INSERT INTO `mob_skills` VALUES (230,??,'dragon_blow' --- INSERT INTO `mob_skills` VALUES (231,??,'maru_kala' +INSERT INTO `mob_skills` VALUES (230,22,'dragon_blow',0,0.0,7.0,2000,0,4,0,0,0,10,0,0); +INSERT INTO `mob_skills` VALUES (231,25,'maru_kala',0,0.0,7.0,2000,0,4,0,0,0,10,6,2); INSERT INTO `mob_skills` VALUES (232,41,'ruthless_stroke',0,0.0,7.0,2000,0,4,0,0,0,12,8,3); INSERT INTO `mob_skills` VALUES (233,12,'imperator',0,0.0,7.0,2000,0,4,0,0,0,10,6,2); -- INSERT INTO `mob_skills` VALUES (234,??,'dagda' @@ -545,7 +548,7 @@ INSERT INTO `mob_skills` VALUES (517,816,'numbing_noise',4,0.0,10.0,2000,1500,4, INSERT INTO `mob_skills` VALUES (518,817,'nimble_snap',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (519,818,'cyclotail',1,0.0,10.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (520,264,'double_ray',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (521,265,'spinning_attack',4,0.0,10.0,2000,1500,4,0,0,1,0,0,0); +INSERT INTO `mob_skills` VALUES (521,265,'spinning_attack_pot',4,0.0,10.0,2000,1500,4,0,0,1,0,0,0); INSERT INTO `mob_skills` VALUES (522,266,'spectral_barrier',0,0.0,7.0,2000,1500,1,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (523,267,'mysterious_light',1,0.0,10.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (524,268,'mind_drain',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0);