diff --git a/scripts/assaults/Periqia/requiem.lua b/scripts/assaults/Periqia/requiem.lua new file mode 100644 index 00000000000..612d2b63103 --- /dev/null +++ b/scripts/assaults/Periqia/requiem.lua @@ -0,0 +1,69 @@ +----------------------------------- +-- Assault: Requiem +-- Instance 5602 +-- Objective: Defeat all 18 Undeads +----------------------------------- +local ID = zones[xi.zone.PERIQIA] +----------------------------------- + +local content = InstanceAssault:new( +{ + zoneID = xi.zone.PERIQIA, + assaultID = xi.assault.mission.REQUIEM, + instanceID = xi.assault.instance.REQUIEM, + assaultArea = xi.assault.assaultArea.PERIQIA, + requiredOrders = xi.ki.PERIQIA_ASSAULT_ORDERS, + + runeOfReleasePos = { x = -489.999, y = -9.694, z = -328.999, rot = 0 }, + ancientBoxPos = { x = -490.000, y = -9.961, z = -326.000, rot = 0 }, + releasePos = { x = 5, z = 9 }, + + suggestedLevel = 70, + basePoints = 1000, + requiredProgress = 18, + + entranceParams = + { + instanceID = xi.assault.instance.REQUIEM, + entryEvent = { 143, 32, -4, 0, 70, 3, 1 }, + confirmEvent = { 143, 4 }, + memberEvent = { 147, 0 }, + }, +}) + +content.mobs = +{ + { baseID = ID.mob.REQUIEM_UNDEAD_OFFSET, offset = 22 }, +} + +content.loot = +{ + appraisalReward = + { + { + { itemId = xi.item.UNAPPRAISED_GLOVES, weight = 2500 }, + { itemId = xi.item.UNAPPRAISED_AXE, weight = 2500 }, + { itemId = xi.item.UNAPPRAISED_POLEARM, weight = 2500 }, + { itemId = xi.item.UNAPPRAISED_BOX, weight = 2500 }, + }, + }, + + bonusLoot = + { + { + { itemId = xi.item.REMEDY, weight = 10000 }, + }, + + { + { itemId = xi.item.HI_POTION_P3, weight = 5000 }, + { itemId = xi.item.REMEDY, weight = 5000 }, + }, + + { + { itemId = xi.item.HI_POTION_P3, weight = 1000 }, + { itemId = xi.item.NONE, weight = 9000 }, + }, + }, +} + +return content:register() diff --git a/scripts/zones/Caedarva_Mire/npcs/_273.lua b/scripts/zones/Caedarva_Mire/npcs/_273.lua index 23fd9782511..2380741426a 100644 --- a/scripts/zones/Caedarva_Mire/npcs/_273.lua +++ b/scripts/zones/Caedarva_Mire/npcs/_273.lua @@ -3,24 +3,19 @@ -- Door: Runic Seal -- !pos -353 -3 -20 79 ----------------------------------- -local ID = zones[xi.zone.CAEDARVA_MIRE] ------------------------------------ ---@type TNpcEntity local entity = {} entity.onTrigger = function(player, npc) - if not xi.instance.onTrigger(player, npc, xi.zone.PERIQIA) then - player:messageSpecial(ID.text.NOTHING_HAPPENS) - end + xi.assault.onRunicTrigger(player, npc, xi.zone.PERIQIA) end entity.onEventUpdate = function(player, csid, option, npc) xi.assault.onAssaultUpdate(player, csid, option, npc) - xi.instance.onEventUpdate(player, csid, option, npc) end entity.onEventFinish = function(player, csid, option, npc) - xi.instance.onEventFinish(player, csid, option, npc) + xi.assault.onEventFinish(player, csid, option, npc) end return entity diff --git a/scripts/zones/Periqia/IDs.lua b/scripts/zones/Periqia/IDs.lua index 1a4c6721a88..7f339671906 100644 --- a/scripts/zones/Periqia/IDs.lua +++ b/scripts/zones/Periqia/IDs.lua @@ -52,36 +52,7 @@ zones[xi.zone.PERIQIA] = mob = { - [xi.assault.mission.SEAGULL_GROUNDED] = - { - MOBS_START = - { - EXCALIAC = 17006593, 17006594, 17006595, 17006596, 17006597, 17006598, 17006599, 17006600, 17006601, - 17006602, 17006603, 17006604, 17006605, 17006606, 17006607, 17006608, 17006610, 17006611, - }, - }, - [xi.assault.mission.REQUIEM] = - { - MOBS_START = - { - 17006612, 17006613, 17006614, 17006615, 17006616, 17006617, 17006619, 17006620, 17006621, - 17006623, 17006625, 17006626, 17006627, 17006628, 17006630, 17006631, 17006633, 17006634, - }, - }, - -- Shades of Vengeance - [79] = - { - K23H1LAMIA1 = 17006754, - K23H1LAMIA2 = 17006755, - K23H1LAMIA3 = 17006756, - K23H1LAMIA4 = 17006757, - K23H1LAMIA5 = 17006758, - K23H1LAMIA6 = 17006759, - K23H1LAMIA7 = 17006760, - K23H1LAMIA8 = 17006761, - K23H1LAMIA9 = 17006762, - K23H1LAMIA10 = 17006763, - } + REQUIEM_UNDEAD_OFFSET = GetFirstID('Putrid_Immortal_Guard'), }, npc = diff --git a/scripts/zones/Periqia/instances/requiem.lua b/scripts/zones/Periqia/instances/requiem.lua deleted file mode 100644 index d170b016f91..00000000000 --- a/scripts/zones/Periqia/instances/requiem.lua +++ /dev/null @@ -1,68 +0,0 @@ ------------------------------------ --- Assault: Requiem --- TODO: random the chest locations ------------------------------------ -local ID = zones[xi.zone.PERIQIA] ------------------------------------ -local instanceObject = {} - -instanceObject.afterInstanceRegister = function(player) - local instance = player:getInstance() - - player:messageSpecial(ID.text.ASSAULT_32_START, 32) - player:messageSpecial(ID.text.TIME_TO_COMPLETE, instance:getTimeLimit()) -end - -instanceObject.onInstanceCreated = function(instance) - for i, v in pairs(ID.mob[32]) do - SpawnMob(v, instance) - end - - GetNPCByID(ID.npc.RUNE_OF_RELEASE, instance):setPos(-489.346, -9.78, -326.579, 90) - GetNPCByID(ID.npc.ANCIENT_LOCKBOX, instance):setPos(-491.96, -9.668, -322.733, 90) -end - -instanceObject.onInstanceCreatedCallback = function(player, instance) - if instance then - player:setInstance(instance) - player:setPos(0, 0, 0, 0, instance:getZone():getID()) - end -end - -instanceObject.onInstanceTimeUpdate = function(instance, elapsed) - xi.instance.updateInstanceTime(instance, elapsed, ID.text) -end - -instanceObject.onInstanceFailure = function(instance) - local chars = instance:getChars() - - for i, v in pairs(chars) do - v:messageSpecial(ID.text.MISSION_FAILED, 10, 10) - v:startEvent(102) - end -end - -instanceObject.onInstanceProgressUpdate = function(instance, progress) - if progress >= 18 then - instance:complete() - end -end - -instanceObject.onInstanceComplete = function(instance) - local chars = instance:getChars() - - for i, v in pairs(chars) do - v:messageSpecial(ID.text.RUNE_UNLOCKED_POS, 5, 9) - end - - GetNPCByID(ID.npc.RUNE_OF_RELEASE, instance):setStatus(xi.status.NORMAL) - GetNPCByID(ID.npc.ANCIENT_LOCKBOX, instance):setStatus(xi.status.NORMAL) -end - -instanceObject.onEventUpdate = function(player, csid, option, npc) -end - -instanceObject.onEventFinish = function(player, csid, option, npc) -end - -return instanceObject diff --git a/scripts/zones/Periqia/mobs/Batteilant_Bhoot.lua b/scripts/zones/Periqia/mobs/Batteilant_Bhoot.lua index dd38689e0ce..e062b9a7491 100644 --- a/scripts/zones/Periqia/mobs/Batteilant_Bhoot.lua +++ b/scripts/zones/Periqia/mobs/Batteilant_Bhoot.lua @@ -5,6 +5,12 @@ ---@type TMobEntity local entity = {} +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.NO_LINK, 1) + mob:setMaxMP(4000) + mob:setHP(4000) +end + entity.onMobDespawn = function(mob) local instance = mob:getInstance() if not instance then diff --git a/scripts/zones/Periqia/mobs/Darkling_Draugar.lua b/scripts/zones/Periqia/mobs/Darkling_Draugar.lua index 1904b1eec72..ac998a65d66 100644 --- a/scripts/zones/Periqia/mobs/Darkling_Draugar.lua +++ b/scripts/zones/Periqia/mobs/Darkling_Draugar.lua @@ -5,6 +5,12 @@ ---@type TMobEntity local entity = {} +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.NO_LINK, 1) + mob:setMaxMP(4075) + mob:setHP(4075) +end + entity.onMobDespawn = function(mob) local instance = mob:getInstance() if not instance then diff --git a/scripts/zones/Periqia/mobs/Draconic_Draugar.lua b/scripts/zones/Periqia/mobs/Draconic_Draugar.lua index 34d77bdc47c..11d8cf37af3 100644 --- a/scripts/zones/Periqia/mobs/Draconic_Draugar.lua +++ b/scripts/zones/Periqia/mobs/Draconic_Draugar.lua @@ -5,11 +5,23 @@ ---@type TMobEntity local entity = {} -entity.onMobEngage = function(mob, target) +entity.onMobSpawn = function(mob) local instance = mob:getInstance() - local mobID = mob:getID() + local petId = mob:getID() + 1 + local pet = GetMobByID(petId, instance) + mob:setMobMod(xi.mobMod.NO_LINK, 1) + mob:setMaxMP(4150) + mob:setHP(4150) + if pet then + mob:setPet(pet) + end +end - SpawnMob(mobID + 1, instance):updateEnmity(target) +entity.onMobFight = function(mob, target) + local pet = GetMobByID(mob:getID() + 1, mob:getInstance()) + if pet and pet:getCurrentAction() == xi.action.category.ROAMING then + pet:updateEnmity(target) + end end entity.onMobDespawn = function(mob) diff --git a/scripts/zones/Periqia/mobs/Putrid_Immortal_Guard.lua b/scripts/zones/Periqia/mobs/Putrid_Immortal_Guard.lua index ad4c665fbb7..4886eb0bace 100644 --- a/scripts/zones/Periqia/mobs/Putrid_Immortal_Guard.lua +++ b/scripts/zones/Periqia/mobs/Putrid_Immortal_Guard.lua @@ -5,6 +5,12 @@ ---@type TMobEntity local entity = {} +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.NO_LINK, 1) + mob:setMaxMP(4400) + mob:setHP(4400) +end + entity.onMobDespawn = function(mob) local instance = mob:getInstance() if not instance then diff --git a/scripts/zones/Periqia/npcs/Ancient_Lockbox.lua b/scripts/zones/Periqia/npcs/Ancient_Lockbox.lua deleted file mode 100644 index 6c27969fed3..00000000000 --- a/scripts/zones/Periqia/npcs/Ancient_Lockbox.lua +++ /dev/null @@ -1,104 +0,0 @@ ------------------------------------ --- Area: Periqia --- Ancient Lockbox ------------------------------------ ----@type TNpcEntity -local entity = {} - -entity.onTrigger = function(player, npc) - local qItem = - { - [xi.assault.mission.SEAGULL_GROUNDED] = - { - { - { itemId = xi.item.UNAPPRAISED_BOX, weight = 400 }, - { itemId = xi.item.UNAPPRAISED_SWORD, weight = 200 }, - { itemId = xi.item.UNAPPRAISED_POLEARM, weight = 200 }, - { itemId = xi.item.UNAPPRAISED_GLOVES, weight = 200 }, - }, - }, - - [xi.assault.mission.REQUIEM] = - { - { - { itemId = xi.item.UNAPPRAISED_BOX, weight = 400 }, - { itemId = xi.item.UNAPPRAISED_GLOVES, weight = 200 }, - { itemId = xi.item.UNAPPRAISED_POLEARM, weight = 200 }, - { itemId = xi.item.UNAPPRAISED_AXE, weight = 200 }, - }, - }, - - [xi.assault.mission.SHOOTING_DOWN_THE_BARON] = - { - { - { itemId = xi.item.UNAPPRAISED_BOW, weight = 600 }, - { itemId = xi.item.UNAPPRAISED_BOX, weight = 400 }, - }, - }, - } - - local regItem = - { - [xi.assault.mission.SEAGULL_GROUNDED] = - { - { - { itemId = xi.item.HI_RERAISER, weight = 700 }, - { itemId = 0, weight = 300 }, - }, - - { - { itemId = xi.item.HI_POTION_TANK, weight = 100 }, - { itemId = xi.item.HI_ETHER_TANK, weight = 100 }, - { itemId = 0, weight = 800 }, - }, - - { - { itemId = xi.item.HI_POTION_P3, weight = 530 }, - { itemId = 0, weight = 470 }, - }, - }, - - [xi.assault.mission.REQUIEM] = - { - { - { itemId = xi.item.HI_POTION_P3, weight = 500 }, - { itemId = 0, weight = 500 }, - }, - - { - { itemId = xi.item.HI_ETHER_TANK, weight = 100 }, - { itemId = 0, weight = 900 }, - }, - - { - { itemId = xi.item.HI_RERAISER, weight = 500 }, - { itemId = 0, weight = 500 }, - }, - }, - - [xi.assault.mission.SHOOTING_DOWN_THE_BARON] = - { - { - { itemId = xi.item.HI_POTION_P2, weight = 850 }, - { itemId = 0, weight = 150 }, - }, - { - { itemId = xi.item.HI_POTION_P3, weight = 50 }, - { itemId = 0, weight = 950 }, - }, - { - { itemId = xi.item.HI_POTION_TANK, weight = 400 }, - { itemId = 0, weight = 600 }, - }, - { - { itemId = xi.item.HI_RERAISER, weight = 200 }, - { itemId = 0, weight = 800 }, - }, - }, - } - - local area = player:getCurrentAssault() - xi.appraisal.assaultChestTrigger(player, npc, qItem[area], regItem[area]) -end - -return entity diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index 1ef2de7d573..e46d8f096b7 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -13618,29 +13618,29 @@ INSERT INTO `mob_spawn_points` VALUES (17006610,0,'Debaucher','Debaucher',3,77,7 INSERT INTO `mob_spawn_points` VALUES (17006611,0,'Debaucher','Debaucher',3,77,79,-472.284,-10.180,-65.855,118,NULL,NULL); -- Requiem assault entrance @ -470 -9.695 -325 rot 192 -INSERT INTO `mob_spawn_points` VALUES (17006612,0,'Putrid_Immortal_Guard','Putrid Immortal Guard',5,77,78,-434.051,-5.076,-260.724,0,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006613,0,'Putrid_Immortal_Guard','Putrid Immortal Guard',5,77,78,-455.689,-8.171,-265.212,60,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006614,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-510.939,-16.193,-178.466,86,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006615,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-508.779,-16.297,-175.037,110,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006616,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-509.631,-18.504,-142.899,5,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006617,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-504.532,-15.733,-143.145,146,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006618,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-504.532,-15.733,-143.145,146,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006619,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-544.832,-16.103,-142.699,253,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006620,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-535.468,-15.760,-142.838,238,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006621,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-531.053,-16.308,-209.619,254,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006622,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-531.053,-16.308,-209.619,254,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006623,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-536.109,-15.914,-209.807,181,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006624,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-536.109,-15.914,-209.807,181,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006625,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-389.755,-16.314,-340.165,26,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006626,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-380.747,-16.141,-339.757,227,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006627,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-421.740,-15.771,-414.019,85,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006628,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-410.189,-18.512,-417.184,128,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006629,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-410.189,-18.512,-417.184,128,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006630,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-380.327,-15.837,-372.303,69,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006631,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-373.480,-17.073,-377.010,128,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006632,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-373.480,-17.073,-377.010,128,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006633,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-345.461,-15.811,-330.613,116,NULL,NULL); -INSERT INTO `mob_spawn_points` VALUES (17006634,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-348.444,-17.535,-337.023,129,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006612,0,'Putrid_Immortal_Guard','Putrid Immortal Guard',5,77,78,-457.040,-4,-246.077,0,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006613,0,'Putrid_Immortal_Guard','Putrid Immortal Guard',5,77,78,-408.519,-4,-251.947,60,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006614,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-504.290,-16,-173.434,86,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006615,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-500.721,-16,-179.234,110,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006616,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-500.316,-16,-152.359,5,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006617,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-497.619,-15,-151.957,146,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006618,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-497.312,-15,-151.963,146,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006619,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-536.161,-15,-149.194,253,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006620,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-543.870,-15,-143.138,238,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006621,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-544.212,-16,-218.202,254,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006622,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-544.248,-16,-219.370,254,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006623,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-537.587,-15,-222.606,181,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006624,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-541.089,-16,-220.088,181,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006625,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-390.345,-16,-342.977,26,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006626,0,'Batteilant_Bhoot','Batteilant Bhoot',6,77,78,-375.967,-16,-341.988,227,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006627,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-429.400,-16,-406.097,85,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006628,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-424.283,-15,-416.811,128,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006629,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-421.279,-15,-412.320,128,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006630,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-380.364,-16,-368.956,69,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006631,0,'Draconic_Draugar','Draconic Draugar',8,77,78,-380.809,-15,-372.245,128,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006632,0,'Draugars_Wyvern','Draugar\'s Wyvern',9,77,78,-380.089,-15,-369.237,128,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006633,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-339.267,-15,-344.779,116,NULL,NULL); +INSERT INTO `mob_spawn_points` VALUES (17006634,0,'Darkling_Draugar','Darkling Draugar',7,77,78,-347.896,-15,-331.318,129,NULL,NULL); -- Saving Private Ryaff entrance @ 20 -15.643 548 rot 64 INSERT INTO `mob_spawn_points` VALUES (17006635,0,'Cursed_Chigoe','Cursed Chigoe',10,77,78,-58.320,-15.850,571.903,196,NULL,NULL);