diff --git a/scripts/enum/item.lua b/scripts/enum/item.lua index 424d56d8f22..85fcbffcd4b 100644 --- a/scripts/enum/item.lua +++ b/scripts/enum/item.lua @@ -937,6 +937,7 @@ xi.item = DEED_OF_PLACIDITY = 1851, HIGH_QUALITY_PHUABO_ORGAN = 1852, THIRD_VIRTUE = 1856, + QUADAV_PARTS = 1866, YAGUDO_HEADDRESS_CUTTING = 1867, GOBLIN_COIF_CUTTING = 1868, DEED_OF_SENSIBILITY = 1870, @@ -5001,9 +5002,11 @@ xi.item = PINEAL_HAT = 15181, WALKURE_MASK = 15185, MAATS_CAP = 15194, + QUADAV_BARBUT = 15201, YAGUDO_HEADGEAR = 15202, GOBLIN_COIF = 15203, GADZRADDS_HELM = 15214, + DAVHUS_BARBUT = 15215, TSOO_HAJAS_HEADGEAR = 15216, CHOPLIXS_COIF = 15217, ENTRANCING_RIBBON = 15218, diff --git a/scripts/quests/otherAreas/An_Affable_Adamantking.lua b/scripts/quests/otherAreas/An_Affable_Adamantking.lua new file mode 100644 index 00000000000..a694dac5bd3 --- /dev/null +++ b/scripts/quests/otherAreas/An_Affable_Adamantking.lua @@ -0,0 +1,314 @@ +----------------------------------- +-- An Affable Adamantking +----------------------------------- +-- Log ID: 4, Quest ID: 107 +-- Beadeaux Zone : !pos -45 24 60 147 +-- Peshi Yohnts : !pos -6 -6 -145 241 +-- Beastmen's Banner : !pos 10 25 -50 148 +----------------------------------- +-- !addquest 4 107 +-- !addItem 885 -- Turtle Shell +-- !addItem 1637 -- Bugard Leather +-- !addItem 15201 -- Quadav Barbut +----------------------------------- +local qulunDomeID = zones[xi.zone.QULUN_DOME] +local windurstWoodsID = zones[xi.zone.WINDURST_WOODS] +----------------------------------- + +local quest = Quest:new(xi.quest.log_id.OTHER_AREAS, xi.quest.id.otherAreas.AN_AFFABLE_ADAMANTKING) + +quest.reward = +{ + title = xi.title.BRONZE_QUADAV, + item = xi.item.DAVHUS_BARBUT +} + +quest.sections = +{ + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_AVAILABLE and + player:getQuestStatus(xi.quest.log_id.OTHER_AREAS, xi.quest.id.otherAreas.A_GENEROUS_GENERAL) ~= xi.questStatus.QUEST_ACCEPTED and + player:getQuestStatus(xi.quest.log_id.OTHER_AREAS, xi.quest.id.otherAreas.AN_UNDERSTANDING_OVERLORD) ~= xi.questStatus.QUEST_ACCEPTED and + player:getQuestStatus(xi.quest.log_id.OTHER_AREAS, xi.quest.id.otherAreas.A_MORAL_MANIFEST) ~= xi.questStatus.QUEST_ACCEPTED and + player:getVar('BstHeadGearQuest_Conquest') < NextConquestTally() and + not player:hasItem(xi.item.DAVHUS_BARBUT) and + player:getMainLvl() >= 60 + end, + + [xi.zone.QULUN_DOME] = + { + onZoneIn = + { + function(player, prevZone) + local pos = player:getPos() + if + pos.x >= 0 and + pos.y >= 20 and + pos.z >= 55 and + pos.x <= 6 and + pos.y <= 25 and + pos.z <= 65 + then + return 60 + end + end, + }, + + onEventFinish = + { + [60] = function(player, csid, option, npc) + if option == 0 then + quest:begin(player) -- begin quest + elseif option == 1 then + player:setVar('BstHeadGearQuest_Conquest', NextConquestTally()) -- if player declines they must wait until next conquest tally + end + end, + }, + }, + }, + + { + check = function(player, status, vars) + return status == xi.questStatus.QUEST_ACCEPTED + end, + + [xi.zone.WINDURST_WOODS] = + { + ['Peshi_Yohnts'] = + { + onTrigger = function(player, npc) + local prog = quest:getVar(player, 'Prog') + local partsWait = quest:getVar(player, 'partsWait') + if prog == 0 then + return quest:progressEvent(710) -- tells player what items are needed + elseif prog == 1 then + return quest:event(711):importantOnce() -- reminder to get bugard leather and turtle shell or cancel quest + elseif + prog >= 2 and + partsWait ~= 0 -- player is currently waiting for parts + then + if + partsWait <= os.time() and + not quest:getMustZone(player) + then + return quest:progressEvent(715) -- ready to go + else + return quest:event(713):importantOnce() -- player must wait till vana midnight and zone + end + elseif prog == 3 then + return quest:event(714):importantOnce() -- Get another part for 100000 gil or give up + end + end, + + onTrade = function(player, npc, trade) + if + npcUtil.tradeHas(trade, { { xi.item.SQUARE_OF_BUGARD_LEATHER, 1 }, { xi.item.TURTLE_SHELL, 1 } }) and + trade:getGil() == 10000 and + trade:getItemCount() == 3 and + quest:getVar(player, 'Prog') == 1 + then + return quest:progressEvent(712) + end + end, + }, + + onEventFinish = + { + [710] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 1) -- both options return 0 + end, + + [711] = function(player, csid, option, npc) + if option == 100 then + player:messageSpecial(windurstWoodsID.text.QUEST_CANCELED) + quest:setVar(player, 'Prog', 0) -- reset progress + player:delQuest(quest.areaId, quest.questId) + player:setVar('BstHeadGearQuest_Conquest', 0) -- player can accept other headgear quests upon cancelling without conquest wait + end + end, + + [712] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 2) + quest:setVar(player, 'partsWait', getVanaMidnight()) + player:confirmTrade() + player:delGil(10000) + quest:setMustZone(player) + end, + + [714] = function(player, csid, option, npc) + if option == 0 then + if player:getGil() > 100000 then + quest:setVar(player, 'partsWait', getVanaMidnight()) + player:delGil(100000) + quest:setMustZone(player) + else + player:messageSpecial(windurstWoodsID.text.NOT_HAVE_ENOUGH_GIL) + end + elseif option == 100 then + player:messageSpecial(zones[player:getZoneID()].text.QUEST_CANCELED) + quest:setVar(player, 'Prog', 0) + player:delQuest(quest.areaId, quest.questId) + player:setVar('BstHeadGearQuest_Conquest', 0) -- player can accept other headgear quests upon cancelling + end + end, + + [715] = function(player, csid, option, npc) + if npcUtil.giveItem(player, xi.item.QUADAV_PARTS) then -- only progress vars if player receives parts + if quest:getVar(player, 'Prog') == 2 then + quest:setVar(player, 'Prog', 3) -- only progress if current prog is 2, otherwise player is already at, or beyond, Prog 3 + end + + quest:setVar(player, 'partsWait', 0) + end + end, + }, + }, + + [xi.zone.QULUN_DOME] = + { + onZoneIn = + { + function(player, prevZone) + local pos = player:getPos() + if + pos.x >= 0 and + pos.y >= 20 and + pos.z >= 55 and + pos.x <= 6 and + pos.y <= 25 and + pos.z <= 65 and + quest:getVar(player, 'Prog') == 3 and + player:getEquipID(xi.slot.HEAD) == xi.item.QUADAV_BARBUT + then + return 61 -- Give player seeker bats ki to plant + end + end, + }, + + ['Beastmens_Banner'] = + { + onTrigger = function(player, npc) + local engaged = GetNPCByID(qulunDomeID.npc.BEASTMENS_BANNER):getLocalVar('engaged') + if + player:getEquipID(xi.slot.HEAD) == xi.item.QUADAV_BARBUT and + player:hasKeyItem(xi.ki.ORCISH_SEEKER_BATS) + then + if + engaged < os.time() and -- if engaged 3min timer has passed + engaged ~= 1 -- if not currently engaged + then + return quest:progressEvent(62) -- trigger fight + end + elseif quest:getVar(player, 'Prog') == 5 then + return quest:progressEvent(63) -- congratulate player on fight + end + end, + + onTrade = function(player, npc, trade) + if + npcUtil.tradeHasExactly(trade, { xi.item.QUADAV_BARBUT }) and + quest:getVar(player, 'Prog') == 6 + then + return quest:progressEvent(64) -- reward player with Da'Vhu's Barbut + end + end, + }, + + ['Diamond_Quadav'] = + { + onMobDeath = function(mob, player, optParams) + if qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET == mob:getID() then + for i = qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 1, qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 6 do + DespawnMob(i) + end + + player:delKeyItem(xi.ki.ORCISH_SEEKER_BATS) + GetNPCByID(qulunDomeID.npc.BEASTMENS_BANNER):setLocalVar('engaged', os.time()) -- no time gate after death + mob:setLocalVar('died', 1) -- set died so despawn doesn't trigger 3 min timer + quest:setVar(player, 'Prog', 5) + end + end, + }, + + onEventFinish = + { + [61] = function(player, csid, option, npc) + npcUtil.giveKeyItem(player, xi.ki.ORCISH_SEEKER_BATS) + quest:setVar(player, 'Prog', 4) + end, + + [62] = function(player, csid, option, npc) + if + npcUtil.popFromQM(player, npc, { + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET, + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 1, + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 2, + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 3, + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 4, + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 5, + qulunDomeID.mob.AFFABLE_ADAMANTKING_OFFSET + 6, + }, { claim = true, hide = 0 }) + then + GetNPCByID(qulunDomeID.npc.BEASTMENS_BANNER):setLocalVar('engaged', 1) + end + end, + + [63] = function(player, csid, option, npc) + quest:setVar(player, 'Prog', 6) + end, + + [64] = function(player, csid, option, npc) + if player:getFreeSlotsCount() > 0 then + if quest:complete(player) then-- quest is marked complete, additional reward upon zoning w/ CS + player:setCharVar('affableZone', 1) + player:setVar('BstHeadGearQuest_Conquest', NextConquestTally()) + player:confirmTrade() + end + else + player:messageSpecial(qulunDomeID.text.ITEM_CANNOT_BE_OBTAINED, xi.item.DAVHUS_BARBUT) + end + end, + }, + }, + }, + + { + check = function(player, status, vars) + return status == xi.questStatus.COMPLETED + end, + + [xi.zone.QULUN_DOME] = + { + onZoneIn = + { + function(player, prevZone) + local pos = player:getPos() + if + pos.x >= 0 and + pos.y >= 20 and + pos.z >= 55 and + pos.x <= 6 and + pos.y <= 25 and + pos.z <= 65 and + player:getCharVar('affableZone') == 1 and + player:getEquipID(xi.slot.HEAD) == xi.item.DAVHUS_BARBUT + then + return 65 + end + end, + }, + + onEventFinish = + { + [65] = function(player, csid, option, npc) + if npcUtil.giveItem(player, xi.item.GOLD_BEASTCOIN) then + player:setCharVar('affableZone', 0) + end + end, + } + }, + }, +} + +return quest diff --git a/scripts/zones/Qulun_Dome/DefaultActions.lua b/scripts/zones/Qulun_Dome/DefaultActions.lua index 490b7e6a5ee..651941eef5c 100644 --- a/scripts/zones/Qulun_Dome/DefaultActions.lua +++ b/scripts/zones/Qulun_Dome/DefaultActions.lua @@ -1,7 +1,8 @@ local ID = zones[xi.zone.QULUN_DOME] return { - ['_440'] = { messageSpecial = ID.text.IT_SEEMS_TO_BE_LOCKED_BY_POWERFUL_MAGIC }, - ['Magicite'] = { messageSpecial = ID.text.THE_MAGICITE_GLOWS_OMINOUSLY }, - ['qm1'] = { messageSpecial = ID.text.YOU_FIND_NOTHING }, + ['_440'] = { messageSpecial = ID.text.IT_SEEMS_TO_BE_LOCKED_BY_POWERFUL_MAGIC }, + ['Magicite'] = { messageSpecial = ID.text.THE_MAGICITE_GLOWS_OMINOUSLY }, + ['qm1'] = { messageSpecial = ID.text.YOU_FIND_NOTHING }, + ['Beastmens_Banner'] = { messageSpecial = ID.text.NOTHING_OUT_OF_ORDINARY }, } diff --git a/scripts/zones/Qulun_Dome/IDs.lua b/scripts/zones/Qulun_Dome/IDs.lua index 39f2e8e88f9..ab56c3258d2 100644 --- a/scripts/zones/Qulun_Dome/IDs.lua +++ b/scripts/zones/Qulun_Dome/IDs.lua @@ -33,6 +33,7 @@ zones[xi.zone.QULUN_DOME] = }, npc = { + BEASTMENS_BANNER = GetFirstID('Beastmens_Banner'), }, } diff --git a/scripts/zones/Qulun_Dome/mobs/DePha_Unscarred.lua b/scripts/zones/Qulun_Dome/mobs/DePha_Unscarred.lua new file mode 100644 index 00000000000..fab62f67f89 --- /dev/null +++ b/scripts/zones/Qulun_Dome/mobs/DePha_Unscarred.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Area: Qulun_Dome +-- NM: De'Pha Unscarred +-- Note: QNM for An Affable Adamantking +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn +end + +entity.onMobEngage = function(mob, target) +end + +entity.onMobDeath = function(mob, player, optParams) +end + +entity.onMobDespawn = function(mob) +end + +return entity diff --git a/scripts/zones/Qulun_Dome/mobs/Diamond_Quadav.lua b/scripts/zones/Qulun_Dome/mobs/Diamond_Quadav.lua index a3ddff2a2fd..5389dec0aa8 100644 --- a/scripts/zones/Qulun_Dome/mobs/Diamond_Quadav.lua +++ b/scripts/zones/Qulun_Dome/mobs/Diamond_Quadav.lua @@ -1,7 +1,7 @@ ----------------------------------- -- Area: Qulun_Dome -- NM: Diamond Quadav --- Note: PH for Za Dha Adamantking PH +-- Note: PH for Za Dha Adamantking PH, QNM for An Affable Adamantking -- TODO: messages should be zone-wide ----------------------------------- mixins = { require('scripts/mixins/job_special') } @@ -13,6 +13,7 @@ entity.onMobInitialize = function(mob) -- the quest version of this NM doesn't drop gil if mob:getID() >= ID.mob.DIAMOND_QUADAV + 2 then mob:setMobMod(xi.mobMod.GIL_MAX, -1) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn end end @@ -46,6 +47,11 @@ entity.onMobDespawn = function(mob) mob:setRespawnTime(math.random(75600, 86400)) SetServerVariable('[PH]Za_Dha_Adamantking', kills + 1) end + elseif + nqId == ID.mob.AFFABLE_ADAMANTKING_OFFSET and + mob:getLocalVar('died') ~= 1 -- check for idle despawn to trigger timer + then + GetNPCByID(ID.npc.BEASTMENS_BANNER):setLocalVar('engaged', os.time() + 180) -- 3 min wait from despawn end end diff --git a/scripts/zones/Qulun_Dome/mobs/HuRhe_Marrowgorger.lua b/scripts/zones/Qulun_Dome/mobs/HuRhe_Marrowgorger.lua new file mode 100644 index 00000000000..c80341392df --- /dev/null +++ b/scripts/zones/Qulun_Dome/mobs/HuRhe_Marrowgorger.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Area: Qulun_Dome +-- NM: Hu'Rhe Marrowgorger +-- Note: QNM for An Affable Adamantking +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn +end + +entity.onMobEngage = function(mob, target) +end + +entity.onMobDeath = function(mob, player, optParams) +end + +entity.onMobDespawn = function(mob) +end + +return entity diff --git a/scripts/zones/Qulun_Dome/mobs/KaGhi_Trovetaker.lua b/scripts/zones/Qulun_Dome/mobs/KaGhi_Trovetaker.lua new file mode 100644 index 00000000000..b69c8ecdc1b --- /dev/null +++ b/scripts/zones/Qulun_Dome/mobs/KaGhi_Trovetaker.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Area: Qulun_Dome +-- NM: Ka'Ghi Trovetaker +-- Note: QNM for An Affable Adamantking +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn +end + +entity.onMobEngage = function(mob, target) +end + +entity.onMobDeath = function(mob, player, optParams) +end + +entity.onMobDespawn = function(mob) +end + +return entity diff --git a/scripts/zones/Qulun_Dome/mobs/MuZha_Infernoblade.lua b/scripts/zones/Qulun_Dome/mobs/MuZha_Infernoblade.lua new file mode 100644 index 00000000000..d6243285f49 --- /dev/null +++ b/scripts/zones/Qulun_Dome/mobs/MuZha_Infernoblade.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Area: Qulun_Dome +-- NM: Mu'Zha Infernoblade +-- Note: QNM for An Affable Adamantking +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn +end + +entity.onMobEngage = function(mob, target) +end + +entity.onMobDeath = function(mob, player, optParams) +end + +entity.onMobDespawn = function(mob) +end + +return entity diff --git a/scripts/zones/Qulun_Dome/mobs/NoBhu_Unyielding.lua b/scripts/zones/Qulun_Dome/mobs/NoBhu_Unyielding.lua new file mode 100644 index 00000000000..fd9c75455dd --- /dev/null +++ b/scripts/zones/Qulun_Dome/mobs/NoBhu_Unyielding.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Area: Qulun_Dome +-- NM: No'Bhu Unyeilding +-- Note: QNM for An Affable Adamantking +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn +end + +entity.onMobEngage = function(mob, target) +end + +entity.onMobDeath = function(mob, player, optParams) +end + +entity.onMobDespawn = function(mob) +end + +return entity diff --git a/scripts/zones/Qulun_Dome/mobs/SoHyu_Quakemaker.lua b/scripts/zones/Qulun_Dome/mobs/SoHyu_Quakemaker.lua new file mode 100644 index 00000000000..fdbd73be3aa --- /dev/null +++ b/scripts/zones/Qulun_Dome/mobs/SoHyu_Quakemaker.lua @@ -0,0 +1,23 @@ +----------------------------------- +-- Area: Qulun_Dome +-- NM: So'Hyu Quakemaker +-- Note: QNM for An Affable Adamantking +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.IDLE_DESPAWN, 180) -- 3 min despawn +end + +entity.onMobEngage = function(mob, target) +end + +entity.onMobDeath = function(mob, player, optParams) +end + +entity.onMobDespawn = function(mob) +end + +return entity diff --git a/scripts/zones/Windurst_Woods/IDs.lua b/scripts/zones/Windurst_Woods/IDs.lua index 0b2d097c482..7f39ede63ad 100644 --- a/scripts/zones/Windurst_Woods/IDs.lua +++ b/scripts/zones/Windurst_Woods/IDs.lua @@ -35,6 +35,7 @@ zones[xi.zone.WINDURST_WOODS] = GP_OBTAINED = 7268, -- Obtained: guild points. NOT_HAVE_ENOUGH_GP = 7269, -- You do not have enough guild points. RENOUNCE_CRAFTSMAN = 7285, -- You have successfully renounced your status as a [craftsman/artisan/adept] of the [Carpenters'/Blacksmiths'/Goldsmiths'/Weavers'/Tanners'/Boneworkers'/Alchemists'/Culinarians'] Guild. + QUEST_CANCELED = 7453, -- The quest has been canceled! VALERIANO_SHOP_DIALOG = 7579, -- Halfling philosophers and heroine beauties, welcome to the Troupe Valeriano show! And how gorgeous and green this fair town is! RAKOHBUUMA_OPEN_DIALOG = 7676, -- To expel those who would subvert the law and order of Windurst Woods... To protect the Mithra populace from all manner of threats and dangers... That is the job of us guards. RETTO_MARUTTO_DIALOG = 7992, -- Allo-allo! If you're after boneworking materials, then make sure you buy them herey in Windurst! We're the cheapest in the whole wide worldy! diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index a99a0d91eeb..ba822957950 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -53806,13 +53806,13 @@ INSERT INTO `mob_spawn_points` VALUES (17383440,'Adaman_Quadav','Adaman Quadav', INSERT INTO `mob_spawn_points` VALUES (17383441,'Ruby_Quadav','Ruby Quadav',5,276.362,42.624,93.686,127); INSERT INTO `mob_spawn_points` VALUES (17383442,'Diamond_Quadav','Diamond Quadav',7,277.930,42.625,96.177,127); INSERT INTO `mob_spawn_points` VALUES (17383443,'ZaDha_Adamantking','Za\'Dha Adamantking',8,281.000,43.000,96.000,127); -INSERT INTO `mob_spawn_points` VALUES (17383444,'Diamond_Quadav','Diamond Quadav',7,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17383445,'MuZha_Infernoblade','Mu\'Zha Infernoblade',9,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17383446,'HuRhe_Marrowgorger','Hu\'Rhe Marrowgorger',10,166.130,-0.500,-20.914,127); -INSERT INTO `mob_spawn_points` VALUES (17383447,'DePha_Unscarred','De\'Pha Unscarred',11,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17383448,'SoHyu_Quakemaker','So\'Hyu Quakemaker',12,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17383449,'KaGhi_Trovetaker','Ka\'Ghi Trovetaker',13,0.000,0.000,0.000,0); -INSERT INTO `mob_spawn_points` VALUES (17383450,'NoBhu_Unyielding','No\'Bhu Unyielding',14,0.000,0.000,0.000,0); +INSERT INTO `mob_spawn_points` VALUES (17383444,'Diamond_Quadav','Diamond Quadav',7,21,25.75,-43,114); +INSERT INTO `mob_spawn_points` VALUES (17383445,'MuZha_Infernoblade','Mu\'Zha Infernoblade',9,21.5,25.75,-45.5,118); +INSERT INTO `mob_spawn_points` VALUES (17383446,'HuRhe_Marrowgorger','Hu\'Rhe Marrowgorger',10,21.125, 25.5,-47.5,122); +INSERT INTO `mob_spawn_points` VALUES (17383447,'DePha_Unscarred','De\'Pha Unscarred',11,20.5,25.5,-50,128); +INSERT INTO `mob_spawn_points` VALUES (17383448,'SoHyu_Quakemaker','So\'Hyu Quakemaker',12,17.5,25.5,-39.5,90); +INSERT INTO `mob_spawn_points` VALUES (17383449,'KaGhi_Trovetaker','Ka\'Ghi Trovetaker',13,14.25,25.5,-39,86); +INSERT INTO `mob_spawn_points` VALUES (17383450,'NoBhu_Unyielding','No\'Bhu Unyielding',14,10.5,25.25,-38.75,82); -- ------------------------------------------------------------ -- Davoi (Zone 149)