From 5fe5925e877db3aecba23fad127b34bcc59e83c1 Mon Sep 17 00:00:00 2001 From: Skold <113406182+Skold177@users.noreply.github.com> Date: Sun, 5 Apr 2026 22:43:29 -0400 Subject: [PATCH] [lua] [sql] Moblin Fantocciniman + Marionette Dice Adds the remaining Marionette Dice and codes Moblin Fanocciniman for the ENM Pulling the Strings --- .../actions/mobskills/marionette_dice_10.lua | 20 +++ .../actions/mobskills/marionette_dice_11.lua | 27 ++++ .../actions/mobskills/marionette_dice_12.lua | 27 ++++ .../actions/mobskills/marionette_dice_14.lua | 18 +++ .../actions/mobskills/marionette_dice_7.lua | 18 +++ .../actions/mobskills/marionette_dice_8.lua | 22 +++ .../actions/mobskills/marionette_dice_9.lua | 20 +++ .../Mine_Shaft_2716/pulling_the_strings.lua | 24 ++- scripts/enum/mob_skill.lua | 8 + scripts/zones/Mine_Shaft_2716/IDs.lua | 1 + .../zones/Mine_Shaft_2716/mobs/Fantoccini.lua | 20 +++ .../mobs/Moblin_Fantocciniman.lua | 146 ++++++++++++++++++ sql/mob_groups.sql | 2 +- sql/mob_pools.sql | 2 +- sql/mob_skills.sql | 29 ++-- sql/mob_spawn_points.sql | 6 +- 16 files changed, 367 insertions(+), 23 deletions(-) create mode 100644 scripts/actions/mobskills/marionette_dice_10.lua create mode 100644 scripts/actions/mobskills/marionette_dice_11.lua create mode 100644 scripts/actions/mobskills/marionette_dice_12.lua create mode 100644 scripts/actions/mobskills/marionette_dice_14.lua create mode 100644 scripts/actions/mobskills/marionette_dice_7.lua create mode 100644 scripts/actions/mobskills/marionette_dice_8.lua create mode 100644 scripts/actions/mobskills/marionette_dice_9.lua create mode 100644 scripts/zones/Mine_Shaft_2716/mobs/Fantoccini.lua create mode 100644 scripts/zones/Mine_Shaft_2716/mobs/Moblin_Fantocciniman.lua diff --git a/scripts/actions/mobskills/marionette_dice_10.lua b/scripts/actions/mobskills/marionette_dice_10.lua new file mode 100644 index 00000000000..8afd43b819d --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_10.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_11.lua b/scripts/actions/mobskills/marionette_dice_11.lua new file mode 100644 index 00000000000..46068806ed6 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_11.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_12.lua b/scripts/actions/mobskills/marionette_dice_12.lua new file mode 100644 index 00000000000..54395fdb8d6 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_12.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_14.lua b/scripts/actions/mobskills/marionette_dice_14.lua new file mode 100644 index 00000000000..48b8574780b --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_14.lua @@ -0,0 +1,18 @@ +----------------------------------- +-- Marionette Dice (Job Ability or Spell) +-- Description: Rolls the dice and orders the target to use a 2-hour ability based on its' job. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + skill:setMsg(xi.msg.basic.USES) + + return 0 +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_7.lua b/scripts/actions/mobskills/marionette_dice_7.lua new file mode 100644 index 00000000000..6d46a0a2a01 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_7.lua @@ -0,0 +1,18 @@ +----------------------------------- +-- Marionette Dice (Job Ability or Spell) +-- Description: Rolls the dice and orders the target to use a spell or ability based on its' job. +----------------------------------- +---@type TMobSkill +local mobskillObject = {} + +mobskillObject.onMobSkillCheck = function(target, mob, skill) + return 0 +end + +mobskillObject.onMobWeaponSkill = function(mob, target, skill, action) + skill:setMsg(xi.msg.basic.USES) + + return 0 +end + +return mobskillObject diff --git a/scripts/actions/mobskills/marionette_dice_8.lua b/scripts/actions/mobskills/marionette_dice_8.lua new file mode 100644 index 00000000000..79cee1ff13f --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_8.lua @@ -0,0 +1,22 @@ +----------------------------------- +-- Marionette Dice (Restore TP) +-- Description: Rolls the dice and restores up to 3000 TP to the pet. Orders them to use a weaponskill. +----------------------------------- +---@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/actions/mobskills/marionette_dice_9.lua b/scripts/actions/mobskills/marionette_dice_9.lua new file mode 100644 index 00000000000..9a6a5226b83 --- /dev/null +++ b/scripts/actions/mobskills/marionette_dice_9.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/battlefields/Mine_Shaft_2716/pulling_the_strings.lua b/scripts/battlefields/Mine_Shaft_2716/pulling_the_strings.lua index 82eb0833816..2e625a23307 100644 --- a/scripts/battlefields/Mine_Shaft_2716/pulling_the_strings.lua +++ b/scripts/battlefields/Mine_Shaft_2716/pulling_the_strings.lua @@ -66,19 +66,34 @@ content.groups = { { mineshaftID.mob.MOBLIN_FANTOCCINIMAN, - mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 2, }, { mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 7, - mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 9, }, { mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 14, + }, + }, + }, + + { + mobIds = + { + { + mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 2, + }, + + { + mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 9, + }, + + { mineshaftID.mob.MOBLIN_FANTOCCINIMAN + 16, }, }, + allDeath = utils.bind(content.handleAllMonstersDefeated, content), }, @@ -144,7 +159,7 @@ local function getLootPool(battlefield) if type(lootPool) == 'table' then lootPool = utils.randomEntry(lootPool) -- 20 percent chance to drop an additional attachment if the initiator is a PUP. - if key == xi.job.PUP and math.random(100) <= 20 then + if key == xi.job.PUP and math.random(1, 100) <= 20 then local bonusAttachment = lootTables[key] if type(bonusAttachment) == 'table' then bonusLootPool = utils.randomEntry(bonusAttachment) @@ -156,7 +171,8 @@ local function getLootPool(battlefield) local lootTable = { { - { itemId = xi.item.SACK_OF_LITTLE_WORM_MULCH, weight = 10000 }, + { itemId = xi.item.NONE, weight = 5000 }, + { itemId = xi.item.SACK_OF_LITTLE_WORM_MULCH, weight = 5000 }, }, { diff --git a/scripts/enum/mob_skill.lua b/scripts/enum/mob_skill.lua index 03856276b34..a91dd4a406b 100644 --- a/scripts/enum/mob_skill.lua +++ b/scripts/enum/mob_skill.lua @@ -659,6 +659,14 @@ xi.mobSkill = MARIONETTE_DICE_4 = 1417, MARIONETTE_DICE_5 = 1418, MARIONETTE_DICE_6 = 1419, + MARIONETTE_DICE_7 = 1420, + MARIONETTE_DICE_8 = 1421, + MARIONETTE_DICE_9 = 1422, + MARIONETTE_DICE_10 = 1423, + MARIONETTE_DICE_11 = 1424, + MARIONETTE_DICE_12 = 1425, + + MARIONETTE_DICE_14 = 1427, ACTINIC_BURST = 1441, diff --git a/scripts/zones/Mine_Shaft_2716/IDs.lua b/scripts/zones/Mine_Shaft_2716/IDs.lua index b3b801b2acb..e0ba3c96e1e 100644 --- a/scripts/zones/Mine_Shaft_2716/IDs.lua +++ b/scripts/zones/Mine_Shaft_2716/IDs.lua @@ -32,6 +32,7 @@ zones[xi.zone.MINE_SHAFT_2716] = TRIKOTRAK_DIALOGUE = 7840, -- Bg! Pnch! Kck! SWIPOSTIK_DIALOGUE = 7848, -- Bug's! Smash's up's this's one's! BUGBBY_DIALOGUE = 7855, -- Ugh. + HO_HO = 7866, -- Ho-Ho, ho-ho! Time for goodebyongo! }, mob = { diff --git a/scripts/zones/Mine_Shaft_2716/mobs/Fantoccini.lua b/scripts/zones/Mine_Shaft_2716/mobs/Fantoccini.lua new file mode 100644 index 00000000000..cbcfdb3a7cd --- /dev/null +++ b/scripts/zones/Mine_Shaft_2716/mobs/Fantoccini.lua @@ -0,0 +1,20 @@ +---@type TMobEntity +local entity = {} +----------------------------------- +local ID = zones[xi.zone.MINE_SHAFT_2716] +----------------------------------- + +entity.onMobDeath = function(mob, player, optParams) + if optParams.isKiller or optParams.noKiller then + local moblinFantoccini = GetMobByID(mob:getID() - 2) + if moblinFantoccini and moblinFantoccini:isAlive() then + moblinFantoccini:messageText(moblinFantoccini, ID.text.HO_HO + 8) -- No-no, no-no! Papa bought me that, you know! + mob:timer(1000, function(mobArg) + moblinFantoccini:messageText(moblinFantoccini, ID.text.HO_HO + 9) -- No-no, no-no! Not how it's 'sposed to go! + DespawnMob(mob:getID() - 2) + end) + end + end +end + +return entity diff --git a/scripts/zones/Mine_Shaft_2716/mobs/Moblin_Fantocciniman.lua b/scripts/zones/Mine_Shaft_2716/mobs/Moblin_Fantocciniman.lua new file mode 100644 index 00000000000..33030a4e28c --- /dev/null +++ b/scripts/zones/Mine_Shaft_2716/mobs/Moblin_Fantocciniman.lua @@ -0,0 +1,146 @@ +----------------------------------- +-- Area: Mine Shaft 2716 +-- ENM : Automaton Assault +-- Mob: Moblin Fantocciniman +----------------------------------- +---@type TMobEntity +local entity = {} +----------------------------------- +local ID = zones[xi.zone.MINE_SHAFT_2716] +----------------------------------- + +local marionetteDice = +{ + -- Main target: Player. + [ 1] = xi.mobSkill.MARIONETTE_DICE_2, -- Restore HP to Player + [ 2] = xi.mobSkill.MARIONETTE_DICE_3, -- Restore MP to Player + [ 3] = xi.mobSkill.MARIONETTE_DICE_4, -- Attack Boost to Player + [ 4] = xi.mobSkill.MARIONETTE_DICE_5, -- Defense Boost to Player + [ 5] = xi.mobSkill.MARIONETTE_DICE_6, -- TP Boost to Player + [ 6] = xi.mobSkill.MARIONETTE_DICE_15, -- Reset job abilities for Player + + -- Main target: Fantoccini. + [ 7] = xi.mobSkill.MARIONETTE_DICE_7, -- Fantoccini uses a job ability or casts a spell + [ 8] = xi.mobSkill.MARIONETTE_DICE_8, -- Fantoccini TP Boost + [ 9] = xi.mobSkill.MARIONETTE_DICE_9, -- Fantoccini Attack Boost + [10] = xi.mobSkill.MARIONETTE_DICE_10, -- Fantoccini Defense Boost + [11] = xi.mobSkill.MARIONETTE_DICE_11, -- Restore HP to Fantoccini + [12] = xi.mobSkill.MARIONETTE_DICE_12, -- Restore MP to Fantoccini + [13] = xi.mobSkill.MARIONETTE_DICE_14, -- Fantoccini uses 2-hour ability +} + +entity.onMobInitialize = function(mob) + mob:addImmunity(xi.immunity.SILENCE) + mob:addImmunity(xi.immunity.BIND) + mob:addImmunity(xi.immunity.GRAVITY) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.DARK_SLEEP) +end + +entity.onMobSpawn = function(mob) + mob:setAutoAttackEnabled(false) + mob:setMobAbilityEnabled(false) + mob:setBehavior(xi.behavior.STANDBACK) +end + +entity.onMobEngage = function(mob, target) + local currentTime = GetSystemTime() + mob:messageText(mob, ID.text.HO_HO) -- Ho-Ho, ho-ho! Time for goodebyongo! + mob:setLocalVar('marionetteDiceTime', currentTime + math.random(10, 15)) +end + +entity.onMobFight = function(mob, target) + local currentTime = GetSystemTime() + + if currentTime >= mob:getLocalVar('marionetteDiceTime') then + mob:messageText(mob, ID.text.HO_HO + 2) -- Roly-poly, roly-poly♪ + + local randomRoll = math.random(1, #marionetteDice) + if randomRoll >= 7 then + local fantoccini = GetMobByID(mob:getID() + 2) + if fantoccini and fantoccini:isAlive() then + mob:useMobAbility(marionetteDice[randomRoll], fantoccini, 0, true) + end + else + mob:useMobAbility(marionetteDice[randomRoll], target, 0, true) + end + + mob:setLocalVar('marionetteDiceTime', currentTime + math.random(25, 30)) + end + + if mob:getLocalVar('moblinAttacked') == 1 then + return + end + + if mob:getHPP() < 100 then + mob:messageText(mob, ID.text.HO_HO + 11) -- Ow-ow, ow-ow! You make me mad now! + mob:setLocalVar('moblinAttacked', 1) + mob:setAutoAttackEnabled(true) + mob:setMobAbilityEnabled(true) + mob:setBehavior(xi.behavior.NONE) + end +end + +entity.onMobWeaponSkill = function(mob, target, skill, action) + local skillUsed = skill:getID() + + -- If the skill used is not Marionette Dice, return. + if + skillUsed < xi.mobSkill.MARIONETTE_DICE_2 or + skillUsed > xi.mobSkill.MARIONETTE_DICE_15 + then + return + end + + -- If the Marionette Dice is good for the moblin, play emote 3, if its good for the player, play 1. + -- We use a 5 second timer to delay the emote usage and to emulate the look of retail. 5 seconds looks excellent. + if + skillUsed >= xi.mobSkill.MARIONETTE_DICE_7 and + skillUsed < xi.mobSkill.MARIONETTE_DICE_15 + then + mob:timer(5000, function(mobArg) + mobArg:useMobAbility(xi.mobSkill.MOBLIN_EMOTE_3) + + local fantoccini = GetMobByID(mobArg:getID() + 2) + + if not fantoccini then + return + end + + if skillUsed == xi.mobSkill.MARIONETTE_DICE_7 then + mobArg:messageText(mobArg, ID.text.HO_HO + 5) -- Go-go, go-go! (Fantoccini uses a job ability or casts a spell) + fantoccini:setLocalVar('diceRoll', 7) + elseif skillUsed == xi.mobSkill.MARIONETTE_DICE_8 then + mobArg:messageText(mobArg, ID.text.HO_HO + 6) -- Ha-ha, ha-ha! (Fantoccini uses a weaponskill) + fantoccini:setLocalVar('diceRoll', 8) + elseif skillUsed == xi.mobSkill.MARIONETTE_DICE_14 then + mobArg:messageText(mobArg, ID.text.HO_HO + 7) -- Yay-yay, yay-yay! Not your lucky day! (Fantoccini uses a 2-hour ability) + fantoccini:setLocalVar('diceRoll', 14) + end + end) + else + mob:timer(5000, function(mobArg) + mobArg:useMobAbility(xi.mobSkill.MOBLIN_EMOTE_1) + end) + end +end + +entity.onMobDisengage = function(mob) + mob:messageText(mob, ID.text.HO_HO + 12) -- Ho-ho, ho-ho! Goodebyongo! +end + +entity.onMobDeath = function(mob, player, optParams) + if optParams.isKiller or optParams.noKiller then + mob:messageText(mob, ID.text.HO_HO + 10) -- Huff-huff, huff-huff... You play too rough... + + local mobId = mob:getID() + for i = 2, 5 do + local otherMob = GetMobByID(mobId + i) + if otherMob and otherMob:isAlive() then + otherMob:addStatusEffect(xi.effect.TERROR, { duration = 900, origin = mob }) + end + end + end +end + +return entity diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index d21d76a43f7..dd0c75f15be 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -555,7 +555,7 @@ INSERT INTO `mob_groups` VALUES (6,4057,13,'Twilotak',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (7,2707,13,'Moblin_Wisewoman',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (8,2688,13,'Moblin_Clergyman',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (9,569,13,'Bugboy',0,128,0,19500,0,0,NULL); -INSERT INTO `mob_groups` VALUES (10,2693,13,'Moblin_Fantocciniman',0,128,0,0,0,0,NULL); +INSERT INTO `mob_groups` VALUES (10,2693,13,'Moblin_Fantocciniman',0,128,0,3800,0,0,NULL); INSERT INTO `mob_groups` VALUES (11,1296,13,'Fantoccini',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (12,1299,13,'Fantoccini_Monster',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (13,1300,13,'Fantoccini_Wyvern',0,128,0,0,0,0,NULL); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index 25c631e567f..550a8109a81 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -2748,7 +2748,7 @@ INSERT INTO `mob_pools` VALUES (2689,'Moblin_Coalman','Moblin_Coalman',184,0x000 INSERT INTO `mob_pools` VALUES (2690,'Moblin_Draftsman','Moblin_Draftsman',184,0x0000B30200000000000000000000000000000000,4,4,5,240,100,0,1,0,1,0,0,0,86,131,0,0,2,0,0,184,184,1,15); INSERT INTO `mob_pools` VALUES (2691,'Moblin_Dustman','Moblin_Dustman',184,0x0000B80200000000000000000000000000000000,5,5,4,240,100,0,1,1,1,16,0,0,997,129,0,0,3,0,256,184,184,0,12); INSERT INTO `mob_pools` VALUES (2692,'Moblin_Engineman','Moblin_Engineman',184,0x0000B70200000000000000000000000000000000,4,4,5,240,100,0,1,0,1,0,0,0,0,133,0,0,2,0,0,184,184,2,17); -INSERT INTO `mob_pools` VALUES (2693,'Moblin_Fantocciniman','Moblin_Fantocciniman',184,0x0000B30200000000000000000000000000000000,1,1,4,240,100,0,1,0,1,16,0,0,6,2177,0,0,0,0,0,184,184,0,12); +INSERT INTO `mob_pools` VALUES (2693,'Moblin_Fantocciniman','Moblin_Fantocciniman',184,0x0000B30200000000000000000000000000000000,1,1,4,240,100,0,1,0,1,16,0,0,6,131,0,0,0,0,0,184,184,0,12); INSERT INTO `mob_pools` VALUES (2694,'Moblin_Gasman','Moblin_Gasman',184,0x0000B00200000000000000000000000000000000,3,3,3,240,100,0,1,0,1,0,0,0,186,131,0,0,20,0,0,184,184,1,15); INSERT INTO `mob_pools` VALUES (2695,'Moblin_Groundman','Moblin_Groundman',184,0x0000B90200000000000000000000000000000000,5,5,4,240,100,0,1,0,1,0,0,0,271,133,0,0,3,0,0,184,184,2,20); INSERT INTO `mob_pools` VALUES (2696,'Moblin_Gurneyman','Moblin_Gurneyman',184,0x0000BB0200000000000000000000000000000000,3,4,3,240,100,0,1,0,1,0,0,0,290,131,0,0,20,0,0,184,184,1,17); diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index de464c002de..37e6846909f 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -1438,19 +1438,20 @@ 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 (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 (1414,1046,'marionette_dice_1',0,0.0,15.0,2000,1500,4,4,0,0,0,0,0); -- Unused +INSERT INTO `mob_skills` VALUES (1415,1046,'marionette_dice_2',0,0.0,15.0,2000,1500,4,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1416,1047,'marionette_dice_3',0,0.0,15.0,2000,1500,4,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1417,1048,'marionette_dice_4',0,0.0,15.0,2000,1500,4,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1418,1048,'marionette_dice_5',0,0.0,15.0,2000,1500,4,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1419,1049,'marionette_dice_6',0,0.0,15.0,2000,1500,4,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1420,1050,'marionette_dice_7',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1421,1051,'marionette_dice_8',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1422,1052,'marionette_dice_9',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1423,1052,'marionette_dice_10',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1424,1053,'marionette_dice_11',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1425,1053,'marionette_dice_12',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); +-- INSERT INTO `mob_skills` VALUES (1426,1054,'marionette_dice_13',0,0.0,15.0,2000,1500,65,4,0,0,0,0,0); -- Unused +INSERT INTO `mob_skills` VALUES (1427,1054,'marionette_dice_14',0,0.0,15.0,2000,1500,65,4,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); @@ -1480,7 +1481,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_15',0,0.0,15.0,2000,1500,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1457,1046,'marionette_dice_15',0,0.0,15.0,2000,1500,4,4,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); diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index 7262e42c025..fb7354e703d 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -2750,19 +2750,19 @@ INSERT INTO `mob_spawn_points` VALUES (16830503,0,'Bugboy','Bugboy',9,80,80,20.1 INSERT INTO `mob_spawn_points` VALUES (16830505,0,'Bugboy','Bugboy',9,80,80,500.362,-118.468,16.365,64); -- Pulling the Strings -INSERT INTO `mob_spawn_points` VALUES (16830507,0,'Moblin_Fantocciniman','Moblin Fantocciniman',10,60,60,-460.744,121.500,9.581,64); +INSERT INTO `mob_spawn_points` VALUES (16830507,0,'Moblin_Fantocciniman','Moblin Fantocciniman',10,62,62,-460.744,121.500,9.581,64); INSERT INTO `mob_spawn_points` VALUES (16830509,0,'Fantoccini','Fantoccini',11,55,55,-460.877,120.524,3.321,40); INSERT INTO `mob_spawn_points` VALUES (16830510,0,'Fantoccini_Monster','Fantoccini Monster',12,49,49,-458.769,121.532,19.387,39); INSERT INTO `mob_spawn_points` VALUES (16830511,0,'Fantoccini_Wyvern','Fantoccini Wyvern',13,49,49,0.000,0.000,0.000,0); INSERT INTO `mob_spawn_points` VALUES (16830512,0,'Fantoccini_Avatar','Fantoccini Avatar',14,49,49,-461.058,119.431,-14.295,192); INSERT INTO `mob_spawn_points` VALUES (16830513,0,'Fantoccini_Automaton','Fantoccini Automaton',15,49,49,-461.140,121.491,8.490,63); -INSERT INTO `mob_spawn_points` VALUES (16830514,0,'Moblin_Fantocciniman','Moblin Fantocciniman',10,60,60,16.000,1.704,26.000,64); +INSERT INTO `mob_spawn_points` VALUES (16830514,0,'Moblin_Fantocciniman','Moblin Fantocciniman',10,62,62,16.000,1.704,26.000,64); INSERT INTO `mob_spawn_points` VALUES (16830516,0,'Fantoccini','Fantoccini',11,55,55,20.000,1.532,20.000,40); INSERT INTO `mob_spawn_points` VALUES (16830517,0,'Fantoccini_Monster','Fantoccini Monster',12,49,49,21.213,1.532,19.324,39); INSERT INTO `mob_spawn_points` VALUES (16830518,0,'Fantoccini_Wyvern','Fantoccini Wyvern',13,49,49,0.000,0.000,0.000,0); INSERT INTO `mob_spawn_points` VALUES (16830519,0,'Fantoccini_Avatar','Fantoccini Avatar',14,49,49,18.924,-0.569,-14.358,192); INSERT INTO `mob_spawn_points` VALUES (16830520,0,'Fantoccini_Automaton','Fantoccini Automaton',15,49,49,20.773,1.532,18.013,63); -INSERT INTO `mob_spawn_points` VALUES (16830521,0,'Moblin_Fantocciniman','Moblin Fantocciniman',10,60,60,500.144,-119.946,1.794,64); +INSERT INTO `mob_spawn_points` VALUES (16830521,0,'Moblin_Fantocciniman','Moblin Fantocciniman',10,62,62,500.144,-119.946,1.794,64); INSERT INTO `mob_spawn_points` VALUES (16830523,0,'Fantoccini','Fantoccini',11,55,55,500.503,-120.500,-3.613,40); INSERT INTO `mob_spawn_points` VALUES (16830524,0,'Fantoccini_Monster','Fantoccini Monster',12,49,49,501.182,-118.468,19.328,39); INSERT INTO `mob_spawn_points` VALUES (16830525,0,'Fantoccini_Wyvern','Fantoccini Wyvern',13,49,49,0.000,0.000,0.000,0);