From 43c99c3c78b6e1720726e1bf104880bc253675da Mon Sep 17 00:00:00 2001 From: sruon Date: Sun, 20 Apr 2025 02:19:22 -0600 Subject: [PATCH] Divine Interference Co-Authored-By: ampitere <166072302+ampitere@users.noreply.github.com> Co-Authored-By: siknoz <78240569+siknoz@users.noreply.github.com> --- documentation/monster_tp_moves.txt | 2 +- ...ivine_jugement.lua => divine_judgment.lua} | 5 +- scripts/actions/mobskills/perfect_defense.lua | 8 +- scripts/enum/item.lua | 4 + scripts/enum/mob_skills.lua | 8 + scripts/globals/instance.lua | 25 +- scripts/globals/quests.lua | 2 +- .../quests/ahtUrhgan/Divine_Interference.lua | 245 ++++++++++++++++++ scripts/zones/Aht_Urhgan_Whitegate/IDs.lua | 1 + scripts/zones/Aht_Urhgan_Whitegate/Zone.lua | 1 + .../zones/Mount_Zhayolm/DefaultActions.lua | 1 + scripts/zones/Mount_Zhayolm/IDs.lua | 1 + scripts/zones/Nyzul_Isle/IDs.lua | 7 +- .../instances/waking_the_colossus.lua | 81 ++++++ .../mobs/{Alexander.lua => Alexander_NP.lua} | 0 .../zones/Nyzul_Isle/mobs/Alexander_WTC.lua | 107 ++++++++ sql/instance_entities.sql | 16 ++ sql/instance_list.sql | 2 +- sql/mob_groups.sql | 6 +- sql/mob_pools.sql | 6 +- sql/mob_skill_lists.sql | 6 +- sql/mob_skills.sql | 2 +- sql/mob_spawn_points.sql | 10 +- sql/mob_spell_lists.sql | 32 ++- sql/npc_list.sql | 14 +- 25 files changed, 553 insertions(+), 39 deletions(-) rename scripts/actions/mobskills/{divine_jugement.lua => divine_judgment.lua} (84%) create mode 100644 scripts/quests/ahtUrhgan/Divine_Interference.lua create mode 100644 scripts/zones/Nyzul_Isle/instances/waking_the_colossus.lua rename scripts/zones/Nyzul_Isle/mobs/{Alexander.lua => Alexander_NP.lua} (100%) create mode 100644 scripts/zones/Nyzul_Isle/mobs/Alexander_WTC.lua diff --git a/documentation/monster_tp_moves.txt b/documentation/monster_tp_moves.txt index 0361c373137..106b9a140a5 100644 --- a/documentation/monster_tp_moves.txt +++ b/documentation/monster_tp_moves.txt @@ -1891,7 +1891,7 @@ 1888 Divine Spear 1889 Gospel of the Lost 1890 Void of Repentance - 1891 Divine Judgement + 1891 Divine Judgment 1892 . 1893 . 1894 Snatch Morsel diff --git a/scripts/actions/mobskills/divine_jugement.lua b/scripts/actions/mobskills/divine_judgment.lua similarity index 84% rename from scripts/actions/mobskills/divine_jugement.lua rename to scripts/actions/mobskills/divine_judgment.lua index 3715f54d9a0..72500b3c2f0 100644 --- a/scripts/actions/mobskills/divine_jugement.lua +++ b/scripts/actions/mobskills/divine_judgment.lua @@ -11,9 +11,10 @@ mobskillObject.onMobSkillCheck = function(target, mob, skill) end mobskillObject.onMobWeaponSkill = function(target, mob, skill) - local damage = mob:getWeaponDmg() * 9 + local damage = mob:getWeaponDmg() * 8 + local dmgMod = 2.5 - damage = xi.mobskills.mobMagicalMove(mob, target, skill, damage, xi.element.LIGHT, 3, xi.mobskills.magicalTpBonus.NO_EFFECT) + damage = xi.mobskills.mobMagicalMove(mob, target, skill, damage, xi.element.LIGHT, dmgMod, xi.mobskills.magicalTpBonus.NO_EFFECT) damage = xi.mobskills.mobFinalAdjustments(damage, mob, skill, target, xi.attackType.MAGICAL, xi.damageType.LIGHT, xi.mobskills.shadowBehavior.WIPE_SHADOWS) target:takeDamage(damage, mob, xi.attackType.MAGICAL, xi.damageType.LIGHT) diff --git a/scripts/actions/mobskills/perfect_defense.lua b/scripts/actions/mobskills/perfect_defense.lua index 9783c72ba9f..687e2ab6068 100644 --- a/scripts/actions/mobskills/perfect_defense.lua +++ b/scripts/actions/mobskills/perfect_defense.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Perfect Defense -- --- Description: Reduces damage taken and greatly increases resistance to most status xi.effect. +-- Description: Reduces damage taken and greatly increases resistance to most status effects. -- Type: Enhancing -- Can be dispelled: No -- Range: Self @@ -19,7 +19,11 @@ mobskillObject.onMobSkillCheck = function(target, mob, skill) end mobskillObject.onMobWeaponSkill = function(target, mob, skill) - xi.mobskills.mobBuffMove(mob, xi.effect.PERFECT_DEFENSE, 1, 0, skill:getParam()) + local power = 10000 + local duration = 10 + local tick = 3 + + xi.mobskills.mobBuffMove(mob, xi.effect.PERFECT_DEFENSE, power, tick, duration) skill:setMsg(xi.msg.basic.USES) return xi.effect.PERFECT_DEFENSE diff --git a/scripts/enum/item.lua b/scripts/enum/item.lua index 74e94bac423..7104cd49bd5 100644 --- a/scripts/enum/item.lua +++ b/scripts/enum/item.lua @@ -1621,6 +1621,7 @@ xi.item = MOG_KUPON_AW_ABS = 2802, SQUARE_OF_SHAGREEN = 2824, IMPERIAL_TOPAZ = 2840, + SLAB_OF_PLUMBAGO = 2860, KINGDOM_WAYSTONE = 2862, REPUBLIC_WAYSTONE = 2863, EYE_OF_VERTHANDI = 2881, @@ -4122,10 +4123,12 @@ xi.item = ACCURA_CAPE = 11532, NEXUS_CAPE = 11538, FOURTH_DIVISION_MANTLE = 11545, + COLOSSUSS_MANTLE = 11547, ORISON_CAPE = 11554, FERINE_MANTLE = 11555, FYLGJA_TORQUE = 11579, MERCENARY_MAJOR_CHARM = 11588, + COLOSSUSS_TORQUE = 11590, RAVAGERS_GORGET = 11591, TANTRA_NECKLACE = 11592, GOETIA_CHAIN = 11593, @@ -6088,6 +6091,7 @@ xi.item = WILHELMS_EARRING = 16036, HELENUSS_EARRING = 16037, CASSANDRAS_EARRING = 16038, + COLOSSUSS_EARRING = 16058, AMIR_PUGGAREE = 16062, YIGIT_TURBAN = 16064, STORM_TURBAN = 16066, diff --git a/scripts/enum/mob_skills.lua b/scripts/enum/mob_skills.lua index 693ccc374f0..8732bf4f9a5 100644 --- a/scripts/enum/mob_skills.lua +++ b/scripts/enum/mob_skills.lua @@ -173,6 +173,14 @@ xi.mobSkill = BILGESTORM = 2118, THUNDRIS_SHRIEK = 2119, + RADIANT_SACRAMENT = 2141, + MEGA_HOLY = 2142, + PERFECT_DEFENSE = 2143, + DIVINE_SPEAR = 2144, + GOSPEL_OF_THE_LOST = 2145, + VOID_OF_REPENTANCE = 2146, + DIVINE_JUDGMENT = 2147, + HELL_SCISSORS = 2221, QUEASYSHROOM_2 = 2232, diff --git a/scripts/globals/instance.lua b/scripts/globals/instance.lua index 27a315e5589..df001178e85 100644 --- a/scripts/globals/instance.lua +++ b/scripts/globals/instance.lua @@ -156,11 +156,11 @@ xi.instance.lookup = [xi.zone.NYZUL_ISLE] = { - { 7700, { 405, 58, -6, 0, 99, 5, 0 }, { 116, 1 }, { 411, 5 } }, -- Path of Darkness - { 7701, { 405, 59, -10, 0, 99, 5, 0 }, { 116, 1 }, { 411, 5 } }, -- Nashmeira's Plea - -- Waking the Colossus / Divine Interference + { 7700, { 405, 58, -6, 0, 99, 5, 0 }, { 116, 1 }, { 411, 5 } }, -- Path of Darkness + { 7701, { 405, 59, -10, 0, 99, 5, 0 }, { 116, 1 }, { 411, 5 } }, -- Nashmeira's Plea + { 7702, { 405, 60, -34, 0, 99, 5, 1, 0, 14 }, { 116, 1 }, { 411, 5 } }, -- Waking the Colossus/Divine Interference -- Forging a New Myth - { 7704, { 405, 51, -4, 0, 75, 5, 1 }, { 116, 2 }, { 411, 5 } }, -- Nyzul Isle Investigation + { 7704, { 405, 51, -4, 0, 75, 5, 1 }, { 116, 2 }, { 411, 5 } }, -- Nyzul Isle Investigation }, [xi.zone.EVERBLOOM_HOLLOW] = @@ -293,6 +293,19 @@ xi.instance.lookup = }, } +local getInstanceName = function(player, instanceId) + return switch (instanceId) : caseof + { + [7702] = function() + if player:getQuestStatus(xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.DIVINE_INTERFERENCE) >= xi.questStatus.QUEST_ACCEPTED then + return 1 -- Divine Interference + else + return 0 -- Waking the Colossus + end + end, + } +end + -- Party leader registering local checkRegistryReqs = function(player, instanceId) local instanceObj = GetCachedInstanceScript(instanceId) @@ -352,6 +365,10 @@ xi.instance.onTrigger = function(player, npc, instanceZoneID) if hasValidEntry then player:setLocalVar('INSTANCE_ID', instanceId) + if instanceTriggerArgs[8] ~= nil then + instanceTriggerArgs[8] = getInstanceName(player, instanceId) + end + player:startEvent(unpack(instanceTriggerArgs)) return true diff --git a/scripts/globals/quests.lua b/scripts/globals/quests.lua index 6262317fb25..bdb00a0b3c6 100644 --- a/scripts/globals/quests.lua +++ b/scripts/globals/quests.lua @@ -676,7 +676,7 @@ xi.quest.id = FORGING_A_NEW_MYTH = 72, COMING_FULL_CIRCLE = 73, WAKING_THE_COLOSSUS = 74, - DIVINE_INTERFERANCE = 75, + DIVINE_INTERFERENCE = 75, -- + Converted THE_RIDER_COMETH = 76, UNWAVERING_RESOLVE = 77, A_STYGIAN_PACT = 78, diff --git a/scripts/quests/ahtUrhgan/Divine_Interference.lua b/scripts/quests/ahtUrhgan/Divine_Interference.lua new file mode 100644 index 00000000000..6fcea659810 --- /dev/null +++ b/scripts/quests/ahtUrhgan/Divine_Interference.lua @@ -0,0 +1,245 @@ +----------------------------------- +-- Divine Interference +----------------------------------- +-- Log ID: 6, Quest ID: 75 +-- Naja Salaheem, !pos 22.700 -8.804 -45.591 50 +-- Imperial Whitegate, !pos 152.8295 -2.2 0.0613 50 +-- Acid-Eaten Door, !pos 271.9045 -32 -88 61 +-- Blank Lamp, !pos 209.3953 0.05 20.0207 72 +-- Runic Seal, !pos 125.4569 0 19.9914 72 +-- Naja Salaheem, !pos 22.700 -8.804 -45.591 50 +----------------------------------- +local ahtUrhganID = zones[xi.zone.AHT_URHGAN_WHITEGATE] +----------------------------------- + +local quest = Quest:new(xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.DIVINE_INTERFERENCE) + +quest.reward = +{ + title = xi.title.HEIR_OF_THE_BLESSED_RADIANCE, + item = { xi.item.IMPERIAL_GOLD_PIECE } +} + +local rewardItems = +{ + [0] = xi.item.COLOSSUSS_MANTLE, + [1] = xi.item.COLOSSUSS_EARRING, + [2] = xi.item.COLOSSUSS_TORQUE, +} + +local function getRewardMask(player) + local rewardMask = 0 + + for bitNum, itemId in pairs(rewardItems) do + if player:hasItem(itemId) then + rewardMask = utils.mask.setBit(rewardMask, bitNum, true) + end + end + + if player:hasSpell(xi.magic.spell.ALEXANDER) then + rewardMask = utils.mask.setBit(rewardMask, 4, true) + end + + return rewardMask +end + +local function giveQuestReward(player, eventOption) + local wasRewarded = true + + if eventOption <= 3 then + wasRewarded = npcUtil.giveItem(player, rewardItems[eventOption - 1]) + elseif eventOption == 4 then + npcUtil.giveCurrency(player, 'gil', 10000) + elseif eventOption == 5 then + player:addSpell(xi.magic.spell.ALEXANDER) + player:messageSpecial(ahtUrhganID.text.ALEXANDER_UNLOCKED, 0, 0, 1) + end + + return wasRewarded +end + +quest.sections = +{ + -- Section: Quest available + { + check = function(player, status, vars) + if + status == xi.questStatus.QUEST_AVAILABLE and + player:getCurrentMission(xi.mission.log_id.TOAU) == xi.mission.id.toau.ETERNAL_MERCENARY and + player:hasCompletedQuest(xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.WAKING_THE_COLOSSUS) and + quest:getVar(player, 'Timer') == 0 + then + return true + end + + return false + end, + + [xi.zone.AHT_URHGAN_WHITEGATE] = + { + ['Imperial_Whitegate'] = + { + onTrigger = function(player, npc) + if quest:getVar(player, 'Prog') == 1 then + return quest:progressEvent(931, xi.besieged.getMercenaryRank(player), 0, 0, 0, 0, 0, 0, 0, 0) + end + end, + }, + + onTriggerAreaEnter = + { + [13] = function(player, triggerArea) + if quest:getVar(player, 'Prog') == 0 then + return quest:progressEvent(930, xi.besieged.getMercenaryRank(player), 0, 0, 0, 0, 0, 0, 0, 0) + end + end, + }, + + onEventFinish = + { + [930] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 1) + end, + + [931] = function(player, csid, option, npc) + if option == 1 then + quest:begin(player) + end + end, + }, + }, + }, + + -- Section: Quest accepted + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_ACCEPTED + end, + + [xi.zone.ALZADAAL_UNDERSEA_RUINS] = + { + ['blank_lamp'] = + { + onTrigger = function(player, npc) + if + quest:getVar(player, 'Prog') == 2 and + player:hasKeyItem(xi.ki.LIGHTNING_CELL) + then + return quest:progressEvent(308) + end + end, + }, + + onZoneIn = function(player, prevZone) + if + quest:getVar(player, 'Prog') == 4 and + not player:hasKeyItem(xi.ki.WHISPER_OF_RADIANCE) + then + return 309 + end + end, + + onEventFinish = + { + [308] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 3) + end, + + [309] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.WHISPER_OF_RADIANCE) + end, + }, + }, + + [xi.zone.MOUNT_ZHAYOLM] = + { + ['Acid-eaten_Door'] = + { + onTrigger = function(player, npc) + if quest:getVar(player, 'Prog') == 1 then + return quest:progressEvent(157) + end + end, + + onTrade = function(player, npc, trade) + if + quest:getVar(player, 'Prog') >= 2 and + npcUtil.tradeHasExactly(trade, { { xi.item.SLAB_OF_PLUMBAGO, 3 } }) and + not player:hasKeyItem(xi.ki.LIGHTNING_CELL) + then + return quest:progressEvent(158) + end + end, + }, + + onEventFinish = + { + [157] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 2) + end, + + [158] = function(player, csid, option, npc) + if npcUtil.giveKeyItem(player, xi.ki.LIGHTNING_CELL) then + player:confirmTrade() + end + end, + }, + } + }, + + -- Section: Complete quest + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_ACCEPTED and player:hasKeyItem(xi.ki.WHISPER_OF_RADIANCE) + end, + + [xi.zone.AHT_URHGAN_WHITEGATE] = + { + ['Naja_Salaheem'] = + { + onTrigger = function(player, npc) + return quest:progressEvent(932, xi.besieged.getMercenaryRank(player), 0, 0, 0, 0, 0, 0, getRewardMask(player), 0) + end, + }, + + onEventFinish = + { + [932] = function(player, csid, option, npc) + if giveQuestReward(player, option) then + quest:complete(player) + player:delKeyItem(xi.ki.WHISPER_OF_RADIANCE) + quest:setTimedVar(player, 'Timer', NextJstDay()) + end + end, + }, + }, + }, + + -- Section: Repeat quest + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_COMPLETED and quest:getVar(player, 'Timer') == 0 + end, + + [xi.zone.AHT_URHGAN_WHITEGATE] = + { + ['Imperial_Whitegate'] = + { + onTrigger = function(player, npc) + return quest:progressEvent(931, xi.besieged.getMercenaryRank(player), 0, 0, 0, 0, 0, 0, 0, 0) + end, + }, + + onEventFinish = + { + [931] = function(player, csid, option, npc) + player:delQuest(xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.DIVINE_INTERFERENCE) + quest:begin(player) + quest:setVar(player, 'Prog', 1) + end, + }, + }, + }, +} + +return quest diff --git a/scripts/zones/Aht_Urhgan_Whitegate/IDs.lua b/scripts/zones/Aht_Urhgan_Whitegate/IDs.lua index 681865f4448..8310a416fb1 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/IDs.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/IDs.lua @@ -81,6 +81,7 @@ zones[xi.zone.AHT_URHGAN_WHITEGATE] = ZASSHAL_DIALOG = 11029, -- 'ang about. Looks like the permit you got was the last one I 'ad, so it might take me a bit o' time to scrounge up some more. 'ere, don't gimme that look. I'll be restocked before you know it. SECOND_LIEUTENANT = 12055, -- has been promoted to Second Lieutenant! PROMOTION_CHIEF_SERGEANT = 12359, -- has been promoted to Chief Sergeant! + ALEXANDER_UNLOCKED = 12387, -- You have gained the ability to summon Alexander! HOPES_REST = 13139, -- Our hopes rest upon your able shoulders, noble adventurer. ALREADY_IN_POSSESSION = 13145, -- Oh, it seems you are already in possession of one. In that case, you will not be requiring another. APPRECIATE_MORE = 13146, -- I appreciate you bringing me more . However, I'm afraid I can only accept up to for each [day/days]. After all, we need to travel light. diff --git a/scripts/zones/Aht_Urhgan_Whitegate/Zone.lua b/scripts/zones/Aht_Urhgan_Whitegate/Zone.lua index 06d2b0d1f79..3f1860263f9 100644 --- a/scripts/zones/Aht_Urhgan_Whitegate/Zone.lua +++ b/scripts/zones/Aht_Urhgan_Whitegate/Zone.lua @@ -17,6 +17,7 @@ zoneObject.onInitialize = function(zone) zone:registerCuboidTriggerArea(10, -89, 0.0, -8, -71, 0.0, 8) -- Balrahn Way zone:registerCuboidTriggerArea(11, 22, 1.0, -100, 24.5, 3.0, -98) -- The Prankster zone:registerCuboidTriggerArea(12, 25, -7.0, -127, 30, -5.0, -123) -- The Prankster + zone:registerCuboidTriggerArea(13, 30, -7.0, -51, 39, -5.0, -40) -- Waking the Colossus/Divine Interference end zoneObject.onZoneIn = function(player, prevZone) diff --git a/scripts/zones/Mount_Zhayolm/DefaultActions.lua b/scripts/zones/Mount_Zhayolm/DefaultActions.lua index 2caebc064a8..bbba8268aaa 100644 --- a/scripts/zones/Mount_Zhayolm/DefaultActions.lua +++ b/scripts/zones/Mount_Zhayolm/DefaultActions.lua @@ -2,6 +2,7 @@ local ID = zones[xi.zone.MOUNT_ZHAYOLM] return { ['_1p7'] = { event = 13 }, + ['Acid-eaten_Door'] = { special = ID.text.ACID_EATEN_DOOR }, ['blank11'] = { special = ID.text.NOTHING_HAPPENS }, ['Sprightly_Footsteps'] = { special = ID.text.NOTHING_OUT_OF_ORDINARY }, ['Warhorse_Hoofprint'] = { special = ID.text.WARHORSE_HOOFPRINT }, diff --git a/scripts/zones/Mount_Zhayolm/IDs.lua b/scripts/zones/Mount_Zhayolm/IDs.lua index 91b093bf04c..6c228a6110c 100644 --- a/scripts/zones/Mount_Zhayolm/IDs.lua +++ b/scripts/zones/Mount_Zhayolm/IDs.lua @@ -38,6 +38,7 @@ zones[xi.zone.MOUNT_ZHAYOLM] = PUTRID_ODOR = 7573, -- A putrid odor threatens to overwhelm you... STIFLING_STENCH = 7577, -- A stifling stench pervades the air... DRAWS_NEAR = 7593, -- Something draws near! + ACID_EATEN_DOOR = 7842, -- The door's coarse, discolored surface gives off a pungent chemical odor... HOMEPOINT_SET = 8742, -- Home point set! UNITY_WANTED_BATTLE_INTERACT = 8800, -- Those who have accepted % must pay # Unity accolades to participate. The content for this Wanted battle is #. [Ready to begin?/You do not have the appropriate object set, so your rewards will be limited.] }, diff --git a/scripts/zones/Nyzul_Isle/IDs.lua b/scripts/zones/Nyzul_Isle/IDs.lua index 358b543edb5..38b1c964d03 100644 --- a/scripts/zones/Nyzul_Isle/IDs.lua +++ b/scripts/zones/Nyzul_Isle/IDs.lua @@ -127,6 +127,7 @@ zones[xi.zone.NYZUL_ISLE] = ACCEPT_THY_DESTRUCTION = 7556, -- Accept thy destruction... Wish for eternity...yearn for immortality... Sense thy transience...know thy insignificance... OMEGA_SPAM = 7557, -- OOOOOOO SHALL_KNOW_OBLIVION = 7558, -- I am...Alexander... The fearful...shall be embraced... The bold...shall know oblivion... + LIGHTNING_CELL_SPARKS = 7566, -- The % begins to crackle and emit sparks! }, mob = @@ -149,9 +150,13 @@ zones[xi.zone.NYZUL_ISLE] = NAJA_SALAHEEM = GetFirstID('Naja_Salaheem'), -- Instance ID: 59 - Nashmeiras Plea - ALEXANDER = GetFirstID('Alexander'), + ALEXANDER = GetFirstID('Alexander_NP'), RAUBAHN = GetFirstID('Raubahn'), RAZFAHD = GetFirstID('Razfahd'), + + -- Instance ID: 60 - Waking the Colossus/Divine Interference + ALEXANDER_WTC = GetFirstID('Alexander_WTC'), + ALEXANDER_IMAGE = GetTableOfIDs('Alexander_Image'), }, npc = diff --git a/scripts/zones/Nyzul_Isle/instances/waking_the_colossus.lua b/scripts/zones/Nyzul_Isle/instances/waking_the_colossus.lua new file mode 100644 index 00000000000..0461449baf5 --- /dev/null +++ b/scripts/zones/Nyzul_Isle/instances/waking_the_colossus.lua @@ -0,0 +1,81 @@ +----------------------------------- +-- Waking the Colossus/Divine Interference +-- !instance 7702 +----------------------------------- +local ID = zones[xi.zone.NYZUL_ISLE] +----------------------------------- +local instanceObject = {} + +instanceObject.registryRequirements = function(player) + return player:hasKeyItem(xi.ki.LIGHTNING_CELL) and + xi.quest.getVar(player, xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.DIVINE_INTERFERENCE, 'Prog') >= 3 +end + +instanceObject.entryRequirements = function(player) + return player:hasKeyItem(xi.ki.LIGHTNING_CELL) and + xi.quest.getVar(player, xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.DIVINE_INTERFERENCE, 'Prog') >= 3 +end + +instanceObject.onInstanceCreated = function(instance) + SpawnMob(ID.mob.ALEXANDER_WTC, instance) +end + +instanceObject.onInstanceCreatedCallback = function(player, instance) + xi.instance.onInstanceCreatedCallback(player, instance) + + -- Kill the Nyzul Isle update spam + for _, v in ipairs(player:getParty()) do + if v:getZoneID() == instance:getEntranceZoneID() then + v:updateEvent(405, 3, 3, 3, 3, 3, 3, 3) + end + end +end + +instanceObject.afterInstanceRegister = function(player) + local instance = player:getInstance() + player:messageSpecial(ID.text.TIME_TO_COMPLETE, instance:getTimeLimit()) + + player:delKeyItem(xi.ki.LIGHTNING_CELL) + player:messageSpecial(ID.text.LIGHTNING_CELL_SPARKS, xi.ki.LIGHTNING_CELL) +end + +instanceObject.onInstanceTimeUpdate = function(instance, elapsed) + xi.instance.updateInstanceTime(instance, elapsed, ID.text) +end + +instanceObject.onInstanceFailure = function(instance) + local chars = instance:getChars() + + for _, v in pairs(chars) do + v:messageSpecial(ID.text.MISSION_FAILED, 10, 10) + v:startEvent(1) + end +end + +instanceObject.onInstanceProgressUpdate = function(instance, progress) + if progress == 1 then + instance:complete() + end +end + +instanceObject.onInstanceComplete = function(instance) + local chars = instance:getChars() + + for _, v in pairs(chars) do + v:startEvent(1) + xi.quest.setVar(v, xi.questLog.AHT_URHGAN, xi.quest.id.ahtUrhgan.DIVINE_INTERFERENCE, 'Prog', 4) + end +end + +instanceObject.onEventFinish = function(player, csid, option, npc) + local instance = player:getInstance() + local chars = instance:getChars() + + if csid == 1 then + for _, v in pairs(chars) do + v:setPos(180, -0.05, 20, 0, xi.zone.ALZADAAL_UNDERSEA_RUINS) + end + end +end + +return instanceObject diff --git a/scripts/zones/Nyzul_Isle/mobs/Alexander.lua b/scripts/zones/Nyzul_Isle/mobs/Alexander_NP.lua similarity index 100% rename from scripts/zones/Nyzul_Isle/mobs/Alexander.lua rename to scripts/zones/Nyzul_Isle/mobs/Alexander_NP.lua diff --git a/scripts/zones/Nyzul_Isle/mobs/Alexander_WTC.lua b/scripts/zones/Nyzul_Isle/mobs/Alexander_WTC.lua new file mode 100644 index 00000000000..ce392fcf8f4 --- /dev/null +++ b/scripts/zones/Nyzul_Isle/mobs/Alexander_WTC.lua @@ -0,0 +1,107 @@ +----------------------------------- +-- Area: Nyzul Isle (Waking the Colossus / Divine Interference) +-- Mob: Alexander +----------------------------------- +local ID = zones[xi.zone.NYZUL_ISLE] +----------------------------------- +---@type TMobEntity +local entity = {} + +entity.onMobInitialize = function(mob) + mob:addImmunity(xi.immunity.GRAVITY) + mob:addImmunity(xi.immunity.BIND) + mob:addImmunity(xi.immunity.SILENCE) + mob:addImmunity(xi.immunity.DARK_SLEEP) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.PETRIFY) +end + +entity.onMobSpawn = function(mob) + mob:addListener('WEAPONSKILL_STATE_ENTER', 'WS_START_MSG', function(mobArg, skillID) + local skillMessage = + { + [xi.mobSkill.RADIANT_SACRAMENT] = { ID.text.OFFER_THY_WORSHIP }, + [xi.mobSkill.MEGA_HOLY] = { ID.text.OPEN_THINE_EYES }, + [xi.mobSkill.PERFECT_DEFENSE] = { ID.text.CEASE_THY_STRUGGLES }, + [xi.mobSkill.DIVINE_SPEAR] = { ID.text.RELEASE_THY_SELF }, + [xi.mobSkill.GOSPEL_OF_THE_LOST] = { ID.text.BASK_IN_MY_GLORY }, + [xi.mobSkill.VOID_OF_REPENTANCE] = { ID.text.REPENT_THY_IRREVERENCE }, + [xi.mobSkill.DIVINE_JUDGMENT] = { ID.text.ACCEPT_THY_DESTRUCTION, ID.text.OMEGA_SPAM }, + } + + if skillMessage[skillID] then + for _, message in ipairs(skillMessage[skillID]) do + mobArg:showText(mobArg, message) + end + end + + if skillID == xi.mobSkill.VOID_OF_REPENTANCE then + -- Spawn first available Alexander_Image + for _, mobId in ipairs(ID.mob.ALEXANDER_IMAGE) do + local image = GetMobByID(mobId, mob:getInstance()) + if image and not image:isSpawned() then + image:setSpawn(mob:getXPos() + math.random(-2, 2), mob:getYPos() + math.random(-2, 2), mob:getZPos() + math.random(-2, 2), mob:getRotPos()) + image:spawn() + + local target = mob:getTarget() + if target then + image:updateEnmity(target) + end + + return + end + end + end + end) +end + +entity.onMobEngage = function(mob, target) + mob:showText(mob, ID.text.SHALL_BE_JUDGED) +end + +entity.onMobFight = function(mob, target) + -- BG Wiki: 'He will use this ability at 50% of his HP and several times again as his health decreases.' + -- ffxiclopedia: 'Alexander will use this ability as his next TP move once its HP falls below 50%.' + if + mob:getHPP() <= 50 and + mob:getTP() >= 1000 and + mob:getLocalVar('DivineJudgement') == 0 + then + mob:setLocalVar('DivineJudgement', 1) + mob:useMobAbility(xi.mobSkill.DIVINE_JUDGMENT) + end + + -- ffxiclopedia: 'In addition to this, it's possible he'll use it several times again at low (5%?) HP.' + -- Per same wiki, may use Perfect Defense as a regular skill at 10%..Assuming same % for both skills. + local skillList = mob:getMobMod(xi.mobMod.SKILL_LIST) + if mob:getHPP() <= 10 and skillList == 784 then + mob:setMobMod(xi.mobMod.SKILL_LIST, 785) -- Alexander_LowHP + end + + local drawInTable = + { + conditions = + { + mob:checkDistance(target) > 20, + }, + position = mob:getPos(), + } + utils.drawIn(target, drawInTable) +end + +entity.onMobDeath = function(mob, player, optParams) + if optParams.isKiller then + mob:showText(mob, ID.text.SHALL_KNOW_OBLIVION) + end +end + +entity.onMobDespawn = function(mob) + local instance = mob:getInstance() + if not instance then + return + end + + instance:setProgress(instance:getProgress() + 1) +end + +return entity diff --git a/sql/instance_entities.sql b/sql/instance_entities.sql index 222a1abb4cd..62e0544356b 100644 --- a/sql/instance_entities.sql +++ b/sql/instance_entities.sql @@ -1949,6 +1949,22 @@ INSERT INTO `instance_entities` VALUES (7701,17093481); INSERT INTO `instance_entities` VALUES (7701,17093482); INSERT INTO `instance_entities` VALUES (7701,17093483); +-- Waking the Colossus/Divine Intereference +-- mobs +INSERT INTO `instance_entities` VALUES (7702,17093148); -- Alexander_WTC +INSERT INTO `instance_entities` VALUES (7702,17093149); -- Alexander_Image +INSERT INTO `instance_entities` VALUES (7702,17093150); -- Alexander_Image +INSERT INTO `instance_entities` VALUES (7702,17093151); -- Alexander_Image +-- npcs +INSERT INTO `instance_entities` VALUES (7702,17093419); -- Gilded Doors +INSERT INTO `instance_entities` VALUES (7702,17093420); -- Gilded Doors +INSERT INTO `instance_entities` VALUES (7702,17093421); -- _k5w +INSERT INTO `instance_entities` VALUES (7702,17093422); -- Gilded Gateway +INSERT INTO `instance_entities` VALUES (7702,17093423); -- Test_Actor +INSERT INTO `instance_entities` VALUES (7702,17093424); -- Weather +INSERT INTO `instance_entities` VALUES (7702,17093425); -- GOAL_SW +INSERT INTO `instance_entities` VALUES (7702,17093440); -- Rune_of_Transfer + -- Nyzul Isle Investigation -- npcs INSERT INTO `instance_entities` VALUES (7704,17092609); -- Chests diff --git a/sql/instance_list.sql b/sql/instance_list.sql index 28d6260a2a6..f3ce13ea865 100644 --- a/sql/instance_list.sql +++ b/sql/instance_list.sql @@ -137,7 +137,7 @@ INSERT INTO `instance_list` VALUES (7600,'silver_sea_remnants',76,72,100,340.000 -- NYZUL_ISLE (zoneID: 77, starting id: 7700) INSERT INTO `instance_list` VALUES (7700,'path_of_darkness',77,72,30,500.000,0.000,-572.000,192,143,143,143,143); INSERT INTO `instance_list` VALUES (7701,'nashmeiras_plea',77,72,45,-444.000,-4.000,420.000,127,143,143,143,143); --- INSERT INTO `instance_list` VALUES (7702,'waking_the_colossus',77,72,30,0.000,0.000,0.000,0,-1,-1,-1,-1); +INSERT INTO `instance_list` VALUES (7702,'waking_the_colossus',77,72,15,-444.000,-4.000,420.000,127,187,187,187,187); -- INSERT INTO `instance_list` VALUES (7703,'forging_a_new_myth',77,72,30,0.000,0.000,0.000,0,-1,-1,-1,-1); INSERT INTO `instance_list` VALUES (7704,'nyzul_isle_investigation',77,72,30,-20.000,-4.000,-20.000,196,-1,-1,-1,-1); -- INSERT INTO `instance_list` VALUES (7705,'nyzul_isle_uncharted_survey',77,72,30,0.000,0.000,0.000,0,-1,-1,-1,-1); diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index b7df6f39610..b5581acca97 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -4057,12 +4057,12 @@ INSERT INTO `mob_groups` VALUES (287,2066,77,'Imperial_Gear',0,128,0,0,0,75,75,0 INSERT INTO `mob_groups` VALUES (288,2067,77,'Imperial_Gears',0,128,0,0,0,75,75,0); INSERT INTO `mob_groups` VALUES (289,2800,77,'Naja_Salaheem',0,128,0,1000,0,75,75,1); INSERT INTO `mob_groups` VALUES (290,3332,77,'Razfahd',0,128,0,0,0,76,76,0); -INSERT INTO `mob_groups` VALUES (291,82,77,'Alexander',0,128,0,0,0,80,80,0); +INSERT INTO `mob_groups` VALUES (291,82,77,'Alexander_NP',0,128,0,0,0,80,80,0); INSERT INTO `mob_groups` VALUES (292,3327,77,'Raubahn',0,128,0,0,0,80,80,0); INSERT INTO `mob_groups` VALUES (293,4489,77,'Zahak',0,128,0,0,0,0,0,0); INSERT INTO `mob_groups` VALUES (294,334,77,'Balrahn',0,128,0,0,0,0,0,0); -INSERT INTO `mob_groups` VALUES (295,82,77,'Alexander',0,128,0,0,0,0,0,0); -INSERT INTO `mob_groups` VALUES (296,0,77,'Alexander_Image',0,128,0,0,0,0,0,0); +INSERT INTO `mob_groups` VALUES (295,7087,77,'Alexander_WTC',0,128,0,30000,0,80,80,0); +INSERT INTO `mob_groups` VALUES (296,7088,77,'Alexander_Image',0,128,0,2050,0,70,70,0); INSERT INTO `mob_groups` VALUES (297,0,77,'Moon_Rabbit',0,128,0,0,0,0,0,0); INSERT INTO `mob_groups` VALUES (298,0,77,'Unlucky_Beak',0,128,0,0,0,0,0,0); INSERT INTO `mob_groups` VALUES (299,0,77,'Fortune_Ram',0,128,0,0,0,0,0,0); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index 0ad9d694099..830834bc7c2 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -135,7 +135,7 @@ INSERT INTO `mob_pools` VALUES (78,'Akrab','Akrab',217,0x00001C01000000000000000 INSERT INTO `mob_pools` VALUES (79,'Akselloak','Akselloak',232,0x0000160100000000000000000000000000000000,1,1,7,240,100,0,1,0,0,0,0,0,395,133,0,0,0,0,0,232,232); INSERT INTO `mob_pools` VALUES (80,'Alastor_Antlion','Alastor_Antlion',357,0x0000440500000000000000000000000000000000,4,4,7,240,100,0,0,0,1,2,712,0,0,3,0,0,132,0,128,357,357); INSERT INTO `mob_pools` VALUES (81,'Albino_Antlion','Albino_Antlion',26,0x0000430500000000000000000000000000000000,1,1,6,240,100,0,1,1,0,18,0,0,1,129,0,0,0,0,0,26,26); -INSERT INTO `mob_pools` VALUES (82,'Alexander','Alexander',33,0x00002A0700000000000000000000000000000000,3,3,11,240,100,0,1,1,0,34,0,32,1,1179,0,0,214,0,0,784,33); +INSERT INTO `mob_pools` VALUES (82,'Alexander_NP','Alexander',33,0x00002A0700000000000000000000000000000000,7,7,11,240,100,0,1,1,0,34,0,32,1,1179,0,0,214,0,0,784,33); INSERT INTO `mob_pools` VALUES (83,'Alfard','Alfard',164,0x0000050700000000000000000000000000000000,1,6,6,240,100,1024,0,0,0,2,0,32,0,1183,0,0,0,0,0,976,164); INSERT INTO `mob_pools` VALUES (84,'Alfons','Alfons',149,0x01000D014D104D204D304D404D50406118700000,1,1,0,0,100,0,0,0,0,0,0,0,0,3,0,0,0,0,0,149,149); INSERT INTO `mob_pools` VALUES (85,'Alklha','Alklha',87,0x0000A40100000000000000000000000000000000,1,1,6,240,100,0,1,1,1,2,0,32,7098,1179,0,0,0,0,0,87,87); @@ -7165,6 +7165,10 @@ INSERT INTO `mob_pools` VALUES (7084,'Vanquished_Einherjar_thf','Vanquished_Einh INSERT INTO `mob_pools` VALUES (7085,'Vanquished_Einherjar_drk','Vanquished_Einherjar',88,0x0000DE0600000000000000000000000000000000,8,8,3,240,100,0,1,1,1,2,0,0,0,3,0,0,535,0,0,88,88); INSERT INTO `mob_pools` VALUES (7086,'Hrungnir_clone','Hrungnir',135,0x0000B00100000000000000000000000000000000,1,1,11,320,100,0,1,1,1,18,0,0,0,3,0,0,0,0,0,2048,135); +-- Waking the Colossus/Divine Interference +INSERT INTO `mob_pools` VALUES (7087,'Alexander_WTC','Alexander',33,0x00002A0700000000000000000000000000000000,7,7,11,240,100,0,1,1,0,18,0,0,1,0,0,0,546,0,0,784,33); +INSERT INTO `mob_pools` VALUES (7088,'Alexander_Image','Alexander_Image',33,0x00002B0700000000000000000000000000000000,7,7,11,240,100,0,1,1,0,26,0,0,1,1665,16,0,547,0,0,0,33); + -- ------------------------------------------------------------ -- Start of Ambuscade section -- NOTE: The mobs are changed every update in the DATs, so using out-of-date diff --git a/sql/mob_skill_lists.sql b/sql/mob_skill_lists.sql index b9dc6a790fd..1fdbb833bfc 100644 --- a/sql/mob_skill_lists.sql +++ b/sql/mob_skill_lists.sql @@ -2663,16 +2663,16 @@ INSERT INTO `mob_skill_lists` VALUES ('Alexander',784,2142); -- Mega Holy INSERT INTO `mob_skill_lists` VALUES ('Alexander',784,2144); -- Divine Spear "My divine flames...shall melt thy flesh...sear thy bones...unshackle thy soul..." INSERT INTO `mob_skill_lists` VALUES ('Alexander',784,2145); -- Gospel of the Lost "Bask in my Glory" INSERT INTO `mob_skill_lists` VALUES ('Alexander',784,2146); -- Void of Repentance "Repent thy irreverence..." --- Divine Judgement (2147) is forced once by mobscript at 50% HP. +-- Divine Judgment (2147) is forced once by mobscript at 50% HP. -- Per wiki, Alexander may use Perfect Defense (2143) as a regular skill at 10% --- From info on both wiki's, I am assuming this is also the case for Divine Judgement. +-- From info on both wiki's, I am assuming this is also the case for Divine Judgment. INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2141); -- Radiant Sacrament "Offer thy worship..." INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2142); -- Mega Holy "My radiance...shall guide thee..." INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2143); -- Perfect Defense "Cease thy struggles..." INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2144); -- Divine Spear "My divine flames...shall melt thy flesh...sear thy bones...unshackle thy soul..." INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2145); -- Gospel of the Lost "Bask in my Glory" INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2146); -- Void of Repentance "Repent thy irreverence..." -INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2147); -- Divine Judgement "Accept thy destruction..." +INSERT INTO `mob_skill_lists` VALUES ('Alexander_LowHP',785,2147); -- Divine Judgment "Accept thy destruction..." INSERT INTO `mob_skill_lists` VALUES ('Alkonost',786,576); -- back heel INSERT INTO `mob_skill_lists` VALUES ('Alkonost',786,578); -- nihlity song -- INSERT INTO `mob_skill_lists` VALUES ('Alkonost',786,579); -- choke breath diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index 9363be97d01..bb9cf6d531c 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -2161,7 +2161,7 @@ INSERT INTO `mob_skills` VALUES (2143,1467,'perfect_defense',1,0.0,10.0,2000,100 INSERT INTO `mob_skills` VALUES (2144,1470,'divine_spear',1,0.0,10.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (2145,1466,'gospel_of_the_lost',0,0.0,7.0,2000,1500,1,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (2146,1469,'void_of_repentance',0,0.0,10.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (2147,1468,'divine_judgement',1,0.0,10.0,2000,1000,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (2147,1468,'divine_judgment',1,0.0,10.0,2000,1000,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (2148,1464,'eagle_eye_shot',0,0.0,7.0,2000,1500,4,2,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (2149,1463,'chi_blast',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); -- INSERT INTO `mob_skills` VALUES (2150,1894,'snatch_morsel',0,0.0,7.0,2000,1500,4,0,0,0,0,0,0); diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index 404cfc0854c..05e76b22bff 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -19598,14 +19598,14 @@ INSERT INTO `mob_spawn_points` VALUES (17093140,'Imperial_Gears','Imperial Gears INSERT INTO `mob_spawn_points` VALUES (17093141,'Imperial_Gears','Imperial Gears',288,0.000,0.000,0.000,0); INSERT INTO `mob_spawn_points` VALUES (17093142,'Naja_Salaheem','Naja Salaheem',289,503.107,-0.230,-545.704,111); INSERT INTO `mob_spawn_points` VALUES (17093143,'Razfahd','Razfahd',290,-486.500,-4.449,420.000,0); -INSERT INTO `mob_spawn_points` VALUES (17093144,'Alexander','Alexander',291,-486.500,-4.449,420.000,0); +INSERT INTO `mob_spawn_points` VALUES (17093144,'Alexander_NP','Alexander',291,-486.500,-4.449,420.000,0); INSERT INTO `mob_spawn_points` VALUES (17093145,'Raubahn','Raubahn',292,-481.075,-4.500,423.191,0); INSERT INTO `mob_spawn_points` VALUES (17093146,'Zahak','Zahak',293,0.000,0.000,0.000,0); INSERT INTO `mob_spawn_points` VALUES (17093147,'Balrahn','Balrahn',294,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17093148,'Alexander','Alexander',295,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17093149,'Alexander_Image','Alexander Image',296,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17093150,'Alexander_Image','Alexander Image',296,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17093151,'Alexander_Image','Alexander Image',296,0.000,0.000,0.000,0); +INSERT INTO `mob_spawn_points` VALUES (17093148,'Alexander_WTC','Alexander',295,-483.716,-3.950,419.987,0); +INSERT INTO `mob_spawn_points` VALUES (17093149,'Alexander_Image','Alexander Image',296,-483.716,-3.950,419.987,0); +INSERT INTO `mob_spawn_points` VALUES (17093150,'Alexander_Image','Alexander Image',296,-483.716,-3.950,419.987,0); +INSERT INTO `mob_spawn_points` VALUES (17093151,'Alexander_Image','Alexander Image',296,-483.716,-3.950,419.987,0); INSERT INTO `mob_spawn_points` VALUES (17093152,'Moon_Rabbit','Moon Rabbit',297,0.000,0.000,0.000,0); INSERT INTO `mob_spawn_points` VALUES (17093153,'Moon_Rabbit','Moon Rabbit',297,0.000,0.000,0.000,0); INSERT INTO `mob_spawn_points` VALUES (17093154,'Moon_Rabbit','Moon Rabbit',297,0.000,0.000,0.000,0); diff --git a/sql/mob_spell_lists.sql b/sql/mob_spell_lists.sql index 1bdbbacb070..d44a82aec77 100644 --- a/sql/mob_spell_lists.sql +++ b/sql/mob_spell_lists.sql @@ -2328,12 +2328,12 @@ INSERT INTO `mob_spell_lists` VALUES ('Amnaf_blu',212,641,1,255); -- hysteric_ba -- Raubahn (213) INSERT INTO `mob_spell_lists` VALUES ('Raubahn',213,557,1,255); -- eyes_on_me (1~255) --- Alexander (214) -INSERT INTO `mob_spell_lists` VALUES ('Alexander',214,22,1,255); -- holy_ii (1~255) -INSERT INTO `mob_spell_lists` VALUES ('Alexander',214,25,1,255); -- dia_iii (1~255) -INSERT INTO `mob_spell_lists` VALUES ('Alexander',214,31,1,255); -- banish_iv (1~255) -INSERT INTO `mob_spell_lists` VALUES ('Alexander',214,35,1,255); -- diaga_iii (1~255) -INSERT INTO `mob_spell_lists` VALUES ('Alexander',214,40,1,255); -- banishga_iii (1~255) +-- Alexander_NP (214) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_NP',214,22,1,255); -- holy_ii (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_NP',214,25,1,255); -- dia_iii (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_NP',214,31,1,255); -- banish_iv (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_NP',214,35,1,255); -- diaga_iii (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_NP',214,40,1,255); -- banishga_iii (1~255) -- Amun (215) INSERT INTO `mob_spell_lists` VALUES ('Amun',215,148,1,255); -- fire_v (1~255) @@ -5581,7 +5581,25 @@ INSERT INTO `mob_spell_lists` VALUES ('Gilagoge_Tlugvi',545,58,1,255); -- Para INSERT INTO `mob_spell_lists` VALUES ('Gilagoge_Tlugvi',545,59,1,255); -- Silence (1~255) INSERT INTO `mob_spell_lists` VALUES ('Gilagoge_Tlugvi',545,112,1,255); -- Flash (1~255) --- Next Available: 546 +-- Alexander_WTC (546) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,22,1,255); -- Holy II (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,25,1,255); -- Dia III (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,31,1,255); -- Banish IV (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,35,1,255); -- Diaga III (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,40,1,255); -- Banishga III (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,46,1,255); -- Protect IV (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,51,1,255); -- Shell IV (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,128,1,255); -- Protectra IV (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_WTC',546,133,1,255); -- Shellra IV (1~255) + +-- Alexander Image (547) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,21,1,255); -- Holy (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,30,1,255); -- Banish III (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,34,1,255); -- Diaga II (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,40,1,255); -- Banishga III (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,112,1,255); -- Flash (1~255) + +-- Next Available: 548 /*!40000 ALTER TABLE `mob_spell_lists` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/npc_list.sql b/sql/npc_list.sql index 883bef0e4b4..ce82ea90cf9 100644 --- a/sql/npc_list.sql +++ b/sql/npc_list.sql @@ -7239,11 +7239,11 @@ INSERT INTO `npc_list` VALUES (17072355,'blank','',0,0.000,0.000,0.000,0,40,40,0 INSERT INTO `npc_list` VALUES (17072356,'blank','',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00001B0700000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072357,'blank','',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x00001B0700000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072358,'blank','',0,0.000,0.000,0.000,0,40,40,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072359,'_k5y','',0,-508.762,-5.000,420.034,1,40,40,9,0,0,0,6147,0x0200000000000000000000000000000000000000,0,'TOAU',0); +INSERT INTO `npc_list` VALUES (17072359,'_k5y','',0,-508.762,-5.000,420.034,65537,40,40,9,0,0,0,6147,0x00003400000000000000000000000000000000000,0,'TOAU',0); INSERT INTO `npc_list` VALUES (17072360,'blank_lamp','',235,206.550,-1.500,20.050,32769,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',1); INSERT INTO `npc_list` VALUES (17072361,'Odin','Odin',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000250700000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072362,'Odin','Odin',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x0000260700000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072363,'blank','',128,206.536,0.050,20.053,21,40,40,0,0,0,0,2075,0x0000E30500000000000000000000000000000000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17072363,'blank','',128,206.536,0.050,20.053,1,40,40,0,0,0,0,2075,0x0000E30500000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072364,'Balrahn_Eidolon','Balrahn Eidolon',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01001D01C710C320C330C340C350006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072365,'Ramblix','Ramblix',161,343.021,-3.999,-623.027,0,40,40,0,0,0,6,27,0x0000550000000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072366,'Goblin_Footprint','Goblin Footprint',161,343.021,-3.999,-623.027,1,40,40,0,0,0,0,3,0x0000340000000000000000000000000000000000,0,'TOAU',0); @@ -7252,17 +7252,17 @@ INSERT INTO `npc_list` VALUES (17072368,'Ghatsad','Ghatsad',0,0.000,0.000,0.000, INSERT INTO `npc_list` VALUES (17072369,'Abda-Lurabda','Abda-Lurabda',0,0.000,0.000,0.000,0,40,40,0,1,0,6,25,0x010004057D107D2000300F400F50006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072370,'Rishfee','Rishfee',0,0.000,0.000,0.000,0,40,40,0,0,0,6,27,0x01000601A510A520AB30A540AB50776100700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072371,'Amnaf','Amnaf',0,0.000,0.000,0.000,0,40,40,0,0,0,6,25,0x01000B02A510A520AB30A540AB50776100700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072372,'Shahayl','Shahayl',10,145.787,0.000,31.166,14,40,40,0,0,0,0,27,0x01000C01A510A520AB30A540AB50776100700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17072372,'Shahayl','Shahayl',10,145.787,0.000,31.166,21,40,40,0,0,0,0,27,0x01000C01A510A520AB30A540AB50776100700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072373,'blank','',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072374,'Gessho','Gessho',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2075,0x0000064700000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072375,'csnpc','Travialce',0,0.000,0.000,0.000,0,50,50,0,1,0,6,25,0x010005038A10AB20AB301B401B50006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17072374,'Gessho','Gessho',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2075,0x00000006,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17072375,'Travialce','Travialce',0,0.000,0.000,0.000,0,50,50,0,1,0,6,25,0x010005038A10AB20AB301B401B50006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072376,'Mnejing','Mnejing',0,0.000,0.000,0.000,0,50,50,0,2,0,6,27,0x00000D0600000000000000000000000000000000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072377,'Ovjang','Ovjang',0,0.000,0.000,0.000,0,50,50,0,2,0,6,27,0x0000070600000000000000000000000000000000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072378,'csnpc','Rodin-Comidin',0,0.000,0.000,0.000,0,50,50,0,1,0,6,27,0x01000D0500100520173017401750006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17072378,'Rodin-Comidin','Rodin-Comidin',0,0.000,0.000,0.000,0,50,50,0,1,0,6,27,0x01000D0500100520173017401750006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072379,'blank','',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000C00300000000000000000000000000000000,0,'TOAU',1); INSERT INTO `npc_list` VALUES (17072380,'blank','',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,'TOAU',1); INSERT INTO `npc_list` VALUES (17072381,'csnpc','Raubahn',0,0.000,0.000,0.000,0,50,50,0,0,0,6,29,0x01000901A510A520AB30A540AB50776100700000,32,'TOAU',1); -INSERT INTO `npc_list` VALUES (17072382,'csnpc','Ghatsad',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010003087D107D2000300F400F50006000700000,32,'TOAU',1); +INSERT INTO `npc_list` VALUES (17072382,'Ghatsad','Ghatsad',0,0.000,0.000,0.000,0,50,50,0,0,0,6,25,0x010003087D107D2000300F400F50006000700000,32,'TOAU',1); INSERT INTO `npc_list` VALUES (17072383,'qm','???',0,0.000,0.000,0.000,0,50,50,0,0,0,2,2051,0x0000340000000000000000000000000000000000,0,NULL,1); INSERT INTO `npc_list` VALUES (17072384,'csnpc','Tenzen',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000A20500000000000000000000000000000000,32,NULL,1); INSERT INTO `npc_list` VALUES (17072385,'Iroha','Iroha',0,0.000,0.000,0.000,0,50,50,0,0,0,6,27,0x0000910900000000000000000000000000000000,32,NULL,1);