From c277d76ef417c8c3a2d1ba57ec735ee75a7c49d6 Mon Sep 17 00:00:00 2001 From: Skold <113406182+Skold177@users.noreply.github.com> Date: Mon, 6 Apr 2026 01:35:06 -0400 Subject: [PATCH] [lua] [sql] Marionette Dice Pt. 1 Implements Marionette Dice that buff the player. --- .../actions/mobskills/marionette_dice_15.lua | 20 +++++++++++++ .../actions/mobskills/marionette_dice_2.lua | 27 +++++++++++++++++ .../actions/mobskills/marionette_dice_3.lua | 27 +++++++++++++++++ .../actions/mobskills/marionette_dice_4.lua | 20 +++++++++++++ .../actions/mobskills/marionette_dice_5.lua | 20 +++++++++++++ .../actions/mobskills/marionette_dice_6.lua | 22 ++++++++++++++ scripts/enum/mob_skill.lua | 8 +++++ sql/mob_skills.sql | 29 +++++++++---------- 8 files changed, 158 insertions(+), 15 deletions(-) create mode 100644 scripts/actions/mobskills/marionette_dice_15.lua create mode 100644 scripts/actions/mobskills/marionette_dice_2.lua create mode 100644 scripts/actions/mobskills/marionette_dice_3.lua create mode 100644 scripts/actions/mobskills/marionette_dice_4.lua create mode 100644 scripts/actions/mobskills/marionette_dice_5.lua create mode 100644 scripts/actions/mobskills/marionette_dice_6.lua diff --git a/scripts/actions/mobskills/marionette_dice_15.lua b/scripts/actions/mobskills/marionette_dice_15.lua new file mode 100644 index 00000000000..8d6cdf37376 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_15.lua @@ -0,0 +1,20 @@ +----------------------------------- +-- Marionette Dice (Restore TP) +-- Description: Rolls the dice and recharges the targets abilities. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + target:resetRecasts() + + skill:setMsg(xi.msg.basic.ABILITIES_RECHARGED) + + return 1 +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_2.lua b/scripts/actions/mobskills/marionette_dice_2.lua new file mode 100644 index 00000000000..46068806ed6 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_2.lua @@ -0,0 +1,27 @@ +----------------------------------- +-- Marionette Dice (Restores HP) +-- Description: Rolls the dice and restores 400 to 600 HP to the target. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local healAmount = math.random(400, 600) + local missingHP = target:getMaxHP() - target:getHP() + + if missingHP < healAmount then + healAmount = missingHP + end + + target:addHP(healAmount) + + skill:setMsg(xi.msg.basic.SELF_HEAL_SECONDARY) + + return healAmount +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_3.lua b/scripts/actions/mobskills/marionette_dice_3.lua new file mode 100644 index 00000000000..54395fdb8d6 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_3.lua @@ -0,0 +1,27 @@ +----------------------------------- +-- Marionette Dice (Restore MP) +-- Description: Rolls the dice and restores 200 to 300 MP to the target. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local mpAmount = math.random(200, 300) + local missingMP = target:getMaxMP() - target:getMP() + + if missingMP < mpAmount then + mpAmount = missingMP + end + + target:addMP(mpAmount) + + skill:setMsg(xi.msg.basic.RECOVERS_MP_SECONDARY) + + return mpAmount +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_4.lua b/scripts/actions/mobskills/marionette_dice_4.lua new file mode 100644 index 00000000000..9a6a5226b83 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_4.lua @@ -0,0 +1,20 @@ +----------------------------------- +-- Marionette Dice (Attack Boost) +-- Description: Rolls the dice and gives a 25% attack boost to the target for 30 seconds. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + target:addStatusEffect(xi.effect.ATTACK_BOOST, { power = 25, duration = 30, origin = mob }) + + skill:setMsg(xi.msg.basic.SKILL_GAIN_EFFECT) + + return xi.effect.ATTACK_BOOST +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_5.lua b/scripts/actions/mobskills/marionette_dice_5.lua new file mode 100644 index 00000000000..8afd43b819d --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_5.lua @@ -0,0 +1,20 @@ +----------------------------------- +-- Marionette Dice (Defense Boost) +-- Description: Rolls the dice and gives a 10% defense boost to the target for 30 seconds. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + target:addStatusEffect(xi.effect.DEFENSE_BOOST, { power = 10, duration = 30, origin = mob }) + + skill:setMsg(xi.msg.basic.SKILL_GAIN_EFFECT) + + return xi.effect.DEFENSE_BOOST +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_6.lua b/scripts/actions/mobskills/marionette_dice_6.lua new file mode 100644 index 00000000000..a565185bd77 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_6.lua @@ -0,0 +1,22 @@ +----------------------------------- +-- Marionette Dice (Restore TP) +-- Description: Rolls the dice and restores up to 3000 TP to the target. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + local tpAmount = 3000 - target:getTP() + + target:addTP(tpAmount) + + skill:setMsg(xi.msg.basic.TP_INCREASE) + + return tpAmount +end + +return mobskillObject diff --git a/scripts/enum/mob_skill.lua b/scripts/enum/mob_skill.lua index a2f821cb738..dab28d6d1ad 100644 --- a/scripts/enum/mob_skill.lua +++ b/scripts/enum/mob_skill.lua @@ -650,6 +650,12 @@ xi.mobSkill = RANGED_ATTACK_TENZEN_2 = 1400, -- Tenzen Bow Low SOUL_ACCRETION = 1401, + MARIONETTE_DICE_2 = 1415, + MARIONETTE_DICE_3 = 1416, + MARIONETTE_DICE_4 = 1417, + MARIONETTE_DICE_5 = 1418, + MARIONETTE_DICE_6 = 1419, + ACTINIC_BURST = 1441, HEXIDISCS = 1443, @@ -657,6 +663,8 @@ xi.mobSkill = DAMNATION_DIVE_GHRAH = 1445, SICKLE_SLASH = 1446, + MARIONETTE_DICE_15 = 1457, + REACTOR_COOL = 1463, OPTIC_INDURATION_CHARGE = 1464, OPTIC_INDURATION = 1465, diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index c0cc12c7c48..87b5b85eaef 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -1438,20 +1438,19 @@ INSERT INTO `mob_skills` VALUES (1401,138,'soul_accretion',0,0.0,7.0,2000,1500,4 -- INSERT INTO `mob_skills` VALUES (1411,658,'bai_wing',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1412,1156,'absolute_terror',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1413,660,'horrid_roar',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1414,1158,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1415,1159,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1416,1160,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1417,1161,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1418,1162,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1419,1163,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1420,1164,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1421,1165,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1422,1166,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1423,1167,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1424,1168,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1425,1169,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1426,1170,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1427,1171,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1415,1046,'marionette_dice_2',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1416,1047,'marionette_dice_3',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1417,1048,'marionette_dice_4',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1418,1048,'marionette_dice_5',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1419,1049,'marionette_dice_6',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1420,1164,'marionette_dice_7',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1421,1165,'marionette_dice_8',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1422,1166,'marionette_dice_9',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1423,1167,'marionette_dice_10',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1424,1168,'marionette_dice_11',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1425,1169,'marionette_dice_12',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1426,1170,'marionette_dice_13',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1427,1171,'marionette_dice_14',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1428,1172,'warcry',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1429,1173,'counterstance_4',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1430,1174,'steal',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); @@ -1481,7 +1480,7 @@ INSERT INTO `mob_skills` VALUES (1453,1069,'nutrient_absorption',0,0.0,7.0,2000, -- INSERT INTO `mob_skills` VALUES (1454,1198,'palsy_pollen',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1455,1199,'toxic_spit',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1456,1200,'filamented_hold',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); --- INSERT INTO `mob_skills` VALUES (1457,1201,'marionette_dice',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1457,1201,'marionette_dice_15',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1458,1202,'self-destruct',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (1459,1203,'self-destruct',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (1460,847,'auto_attack_geush',0,0.0,7.0,2000,0,4,4,0,1,0,0,0);