From 13fcc0aa8f2e7303a8703cd0d763e596d336d45a Mon Sep 17 00:00:00 2001 From: ThrisStraizo <45871917+ThrisStraizo@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:51:50 -0800 Subject: [PATCH] SAM AF3 Audit This PR audits the SAM AF3 fight for levels/hp/dmg/immunities and general behavior. This PR also adds the missing flavor message after completing the battlefield. --- .../outlands/SAM_AF3_A_Thief_in_Norg.lua | 5 +++- scripts/zones/Waughroon_Shrine/IDs.lua | 1 + .../zones/Waughroon_Shrine/mobs/Ayakashi.lua | 3 -- scripts/zones/Waughroon_Shrine/mobs/Gaki.lua | 14 ++++++++- scripts/zones/Waughroon_Shrine/mobs/Onibi.lua | 19 ++++++++++++ scripts/zones/Waughroon_Shrine/mobs/Onki.lua | 7 +++-- .../zones/Waughroon_Shrine/mobs/Rasetsu.lua | 10 ++++++- sql/mob_groups.sql | 8 ++--- sql/mob_pools.sql | 2 +- sql/mob_spawn_points.sql | 30 +++++++++---------- 10 files changed, 70 insertions(+), 29 deletions(-) create mode 100644 scripts/zones/Waughroon_Shrine/mobs/Onibi.lua diff --git a/scripts/quests/outlands/SAM_AF3_A_Thief_in_Norg.lua b/scripts/quests/outlands/SAM_AF3_A_Thief_in_Norg.lua index 813fce284c2..17da4eb6182 100644 --- a/scripts/quests/outlands/SAM_AF3_A_Thief_in_Norg.lua +++ b/scripts/quests/outlands/SAM_AF3_A_Thief_in_Norg.lua @@ -7,6 +7,8 @@ -- Phoochuchu : !pos -4 -4 69 249 -- _6i8 (Door) : !pos 70 7 2 234 ----------------------------------- +local waughroonID = zones[xi.zone.WAUGHROON_SHRINE] +----------------------------------- local quest = Quest:new(xi.questLog.OUTLANDS, xi.quest.id.outlands.A_THIEF_IN_NORG) @@ -200,7 +202,8 @@ quest.sections = [32001] = function(player, csid, option, npc) if player:getLocalVar('battlefieldWin') == xi.battlefield.id.THIEF_IN_NORG then - npcUtil.giveKeyItem(player, xi.ki.CHARRED_HELM) + player:messageSpecial(waughroonID.text.CHARM_DAMAGED, xi.ki.CHARRED_HELM, xi.item.BANISHING_CHARM) + player:addKeyItem(xi.ki.CHARRED_HELM) quest:setVar(player, 'Prog', 7) end end, diff --git a/scripts/zones/Waughroon_Shrine/IDs.lua b/scripts/zones/Waughroon_Shrine/IDs.lua index fd701503a1f..aef0c643b98 100644 --- a/scripts/zones/Waughroon_Shrine/IDs.lua +++ b/scripts/zones/Waughroon_Shrine/IDs.lua @@ -30,6 +30,7 @@ zones[xi.zone.WAUGHROON_SHRINE] = PARTY_MEMBERS_HAVE_FALLEN = 7577, -- All party members have fallen in battle. Now leaving the battlefield. THE_PARTY_WILL_BE_REMOVED = 7584, -- If all party members' HP are still zero after # minute[/s], the party will be removed from the battlefield. ENTERING_THE_BATTLEFIELD_FOR = 7605, -- Entering the battlefield for [The Rank 2 Final Mission/The Worm's Turn/Grimshell Shocktroopers/On My Way/A Thief in Norg!?/3, 2, 1.../Shattering Stars (RDM)/Shattering Stars (THF)/Shattering Stars (BST)/Birds of a Feather/Crustacean Conundrum/Grove Guardians/The Hills are Alive/Royal Jelly/The Final Bout/Up in Arms/Copycat/Operation Desert Swarm/Prehistoric Pigeons/The Palborough Project/Shell Shocked/Beyond Infinity/The Worm's Tail/Grimshell Shocktroopers/A Feast Most Dire/A.M.A.N. Trove (Mars)/A.M.A.N. Trove (Venus)/Invitation from Naji/Invitation from Naji and Co.]! + CHARM_DAMAGED = 7684, -- The has been badly damaged... You obtain a . COUNTDOWN_OFFSET = 7689, -- 60......... YOU_DECIDED_TO_SHOW_UP = 7698, -- So, you decided to show up. Now it's time to see what you're really made of, heh heh heh. LOOKS_LIKE_YOU_WERENT_READY = 7699, -- Looks like you weren't ready for me, were you? Now go home, wash your face, and come back when you think you've got what it takes. diff --git a/scripts/zones/Waughroon_Shrine/mobs/Ayakashi.lua b/scripts/zones/Waughroon_Shrine/mobs/Ayakashi.lua index 18cdb04fb4e..1dd41f055eb 100644 --- a/scripts/zones/Waughroon_Shrine/mobs/Ayakashi.lua +++ b/scripts/zones/Waughroon_Shrine/mobs/Ayakashi.lua @@ -7,7 +7,4 @@ mixins = { require('scripts/mixins/families/avatar') } ---@type TMobEntity local entity = {} -entity.onMobDeath = function(mob, player, optParams) -end - return entity diff --git a/scripts/zones/Waughroon_Shrine/mobs/Gaki.lua b/scripts/zones/Waughroon_Shrine/mobs/Gaki.lua index 909a33f67cc..d1e74eedba3 100644 --- a/scripts/zones/Waughroon_Shrine/mobs/Gaki.lua +++ b/scripts/zones/Waughroon_Shrine/mobs/Gaki.lua @@ -8,7 +8,19 @@ mixins = { require('scripts/mixins/job_special') } ---@type TMobEntity local entity = {} -entity.onMobDeath = function(mob, player, optParams) +entity.onMobInitialize = function(mob) + mob:addImmunity(xi.immunity.DARK_SLEEP) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.SILENCE) + mob:addImmunity(xi.immunity.TERROR) +end + +entity.onMobSpawn = function(mob) + mob:setMagicCastingEnabled(false) +end + +entity.onMobEngage = function(mob) + mob:setMagicCastingEnabled(true) -- Gaki will not cast spells until engaged end return entity diff --git a/scripts/zones/Waughroon_Shrine/mobs/Onibi.lua b/scripts/zones/Waughroon_Shrine/mobs/Onibi.lua new file mode 100644 index 00000000000..2d5d8f876e0 --- /dev/null +++ b/scripts/zones/Waughroon_Shrine/mobs/Onibi.lua @@ -0,0 +1,19 @@ +----------------------------------- +-- Area: Waughroon Shrine +-- Mob: Gaki +-- a Thief in Norg BCNM Fight +----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- +---@type TMobEntity +local entity = {} + +entity.onMobSpawn = function(mob) + mob:setMagicCastingEnabled(false) +end + +entity.onMobEngage = function(mob) + mob:setMagicCastingEnabled(true) -- This will prevent Gaki from using blaze spikes before the fight starts +end + +return entity diff --git a/scripts/zones/Waughroon_Shrine/mobs/Onki.lua b/scripts/zones/Waughroon_Shrine/mobs/Onki.lua index 56aa5ae0ea5..52fc46164ec 100644 --- a/scripts/zones/Waughroon_Shrine/mobs/Onki.lua +++ b/scripts/zones/Waughroon_Shrine/mobs/Onki.lua @@ -10,9 +10,10 @@ local entity = {} entity.onMobInitialize = function(mob) xi.pet.setMobPet(mob, 1, 'Onibi') -end - -entity.onMobDeath = function(mob, player, optParams) + mob:addImmunity(xi.immunity.DARK_SLEEP) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.SILENCE) + mob:addImmunity(xi.immunity.TERROR) end return entity diff --git a/scripts/zones/Waughroon_Shrine/mobs/Rasetsu.lua b/scripts/zones/Waughroon_Shrine/mobs/Rasetsu.lua index abd66b8e57d..88af370659c 100644 --- a/scripts/zones/Waughroon_Shrine/mobs/Rasetsu.lua +++ b/scripts/zones/Waughroon_Shrine/mobs/Rasetsu.lua @@ -8,7 +8,15 @@ mixins = { require('scripts/mixins/job_special') } ---@type TMobEntity local entity = {} -entity.onMobDeath = function(mob, player, optParams) +entity.onMobInitialize = function(mob) + mob:addImmunity(xi.immunity.DARK_SLEEP) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.SILENCE) + mob:addImmunity(xi.immunity.TERROR) +end + +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.BASE_DAMAGE_MULTIPLIER, 150) end return entity diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index e5e9e28d6f5..61fa2f6c317 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -10643,10 +10643,10 @@ INSERT INTO `mob_groups` VALUES (3,2304,144,'KuJhu_Graniteskin',0,128,0,0,0,0,NU INSERT INTO `mob_groups` VALUES (4,3491,144,'SaNha_Soulsaver',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (5,929,144,'DaShu_Knightslayer',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (6,1777,144,'GoBha_Slaughterer',0,128,0,0,0,0,NULL); -INSERT INTO `mob_groups` VALUES (7,1447,144,'Gaki',0,128,0,0,0,0,NULL); -INSERT INTO `mob_groups` VALUES (8,3325,144,'Rasetsu',0,128,0,0,0,0,NULL); -INSERT INTO `mob_groups` VALUES (9,2983,144,'Onki',0,128,0,0,0,0,NULL); -INSERT INTO `mob_groups` VALUES (10,2981,144,'Onibi',0,128,0,0,0,0,NULL); +INSERT INTO `mob_groups` VALUES (7,1447,144,'Gaki',0,128,0,6000,6000,0,NULL); +INSERT INTO `mob_groups` VALUES (8,3325,144,'Rasetsu',0,128,0,7000,3500,0,NULL); +INSERT INTO `mob_groups` VALUES (9,2983,144,'Onki',0,128,0,3000,6000,0,NULL); +INSERT INTO `mob_groups` VALUES (10,2981,144,'Onibi',0,128,0,800,2000,0,NULL); INSERT INTO `mob_groups` VALUES (11,304,144,'Ayakashi',0,128,0,0,0,0,NULL); INSERT INTO `mob_groups` VALUES (12,4838,144,'Maat_rdm',0,128,0,2300,1000,0,NULL); INSERT INTO `mob_groups` VALUES (13,4839,144,'Maat_thf',0,128,2917,2300,0,0,NULL); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index 419036125d3..73faafa4f8b 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -3036,7 +3036,7 @@ INSERT INTO `mob_pools` VALUES (2977,'Omphuabo','Omphuabo',194,0x000082040000000 INSERT INTO `mob_pools` VALUES (2978,'Omxzomit','Omxzomit',269,0x0000100200000000000000000000000000000000,7,1,7,200,100,0,0,0,1,0,0,0,0,1153,0,0,0,0,0,269,269,2,13); INSERT INTO `mob_pools` VALUES (2979,'Omyovra','Omyovra',271,0x00007C0400000000000000000000000000000000,4,8,7,240,100,1032,1,1,0,2,0,0,0,3205,13,0,0,24,1024,271,271,1,13); INSERT INTO `mob_pools` VALUES (2980,'One-eyed_Gwajboj','One-eyed_Gwajboj',189,0x0000750200000000000000000000000000000000,7,7,3,240,100,0,1,0,1,2,0,32,0,1181,0,0,4,0,0,334,334,2,17); -INSERT INTO `mob_pools` VALUES (2981,'Onibi','Onibi',102,0x0000080000000000000000000000000000000000,4,5,12,240,100,0,1,0,1,16,0,0,1446,1155,0,0,2,0,0,102,102,1,8); +INSERT INTO `mob_pools` VALUES (2981,'Onibi','Onibi',102,0x0000080000000000000000000000000000000000,4,1,12,240,100,0,1,0,1,16,36,0,1446,1155,16,0,17,0,0,102,102,1,8); INSERT INTO `mob_pools` VALUES (2982,'Oni_Carcass','Oni_Carcass',86,0x0000400100000000000000000000000000000000,1,1,5,240,100,0,1,0,0,2,0,0,178,1669,0,0,0,0,0,86,86,2,34); INSERT INTO `mob_pools` VALUES (2983,'Onki','Onki',358,0x0000E80200000000000000000000000000000000,15,15,4,240,100,0,1,0,1,18,6160,0,2674,1153,0,0,143,0,0,358,358,0,15); INSERT INTO `mob_pools` VALUES (2984,'Onryo','Onryo',121,0x0000700100000000000000000000000000000000,1,4,12,240,100,0,1,0,0,2,0,0,7,1157,0,0,28,0,0,121,121,2,9); diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index 9ee1c2815a7..5434292dad0 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -51623,21 +51623,21 @@ INSERT INTO `mob_spawn_points` VALUES (17367057,0,'DaShu_Knightslayer','Da\'Shu INSERT INTO `mob_spawn_points` VALUES (17367058,0,'GoBha_Slaughterer','Go\'Bha Slaughterer',6,68,68,221.194,-59.900,136.246,128); -- A Thief in Norg!? -INSERT INTO `mob_spawn_points` VALUES (17367059,0,'Gaki','Gaki',7,66,67,-177.354,59.769,-144.000,130); -INSERT INTO `mob_spawn_points` VALUES (17367060,0,'Rasetsu','Rasetsu',8,66,67,-177.354,59.696,-142.000,130); -INSERT INTO `mob_spawn_points` VALUES (17367061,0,'Onki','Onki',9,66,67,-177.354,59.770,-140.000,130); -INSERT INTO `mob_spawn_points` VALUES (17367062,0,'Onibi','Onibi',10,66,67,-177.352,59.770,-139.998,130); -INSERT INTO `mob_spawn_points` VALUES (17367063,0,'Ayakashi','Ayakashi',11,66,67,-182.116,59.641,-139.434,0); -INSERT INTO `mob_spawn_points` VALUES (17367064,0,'Gaki','Gaki',7,66,67,22.646,-0.230,15.982,130); -INSERT INTO `mob_spawn_points` VALUES (17367065,0,'Rasetsu','Rasetsu',8,66,67,22.646,-0.304,17.982,130); -INSERT INTO `mob_spawn_points` VALUES (17367066,0,'Onki','Onki',9,66,67,22.646,-0.230,19.982,130); -INSERT INTO `mob_spawn_points` VALUES (17367067,0,'Onibi','Onibi',10,66,67,22.646,-0.230,19.982,130); -INSERT INTO `mob_spawn_points` VALUES (17367068,0,'Ayakashi','Ayakashi',11,66,67,18.130,-0.202,17.401,0); -INSERT INTO `mob_spawn_points` VALUES (17367069,0,'Gaki','Gaki',7,66,67,222.641,-60.230,136.000,130); -INSERT INTO `mob_spawn_points` VALUES (17367070,0,'Rasetsu','Rasetsu',8,66,67,222.641,-60.303,138.000,130); -INSERT INTO `mob_spawn_points` VALUES (17367071,0,'Onki','Onki',9,66,67,222.641,-60.229,140.000,130); -INSERT INTO `mob_spawn_points` VALUES (17367072,0,'Onibi','Onibi',10,66,67,222.641,-60.229,140.001,130); -INSERT INTO `mob_spawn_points` VALUES (17367073,0,'Ayakashi','Ayakashi',11,66,67,0.000,0.000,0.000,0); +INSERT INTO `mob_spawn_points` VALUES (17367059,0,'Gaki','Gaki',7,62,62,-177.354,59.769,-144.000,130); +INSERT INTO `mob_spawn_points` VALUES (17367060,0,'Rasetsu','Rasetsu',8,63,63,-177.354,59.696,-142.000,130); +INSERT INTO `mob_spawn_points` VALUES (17367061,0,'Onki','Onki',9,61,61,-177.354,59.770,-140.000,130); +INSERT INTO `mob_spawn_points` VALUES (17367062,0,'Onibi','Onibi',10,55,55,-177.352,59.770,-139.998,130); +INSERT INTO `mob_spawn_points` VALUES (17367063,0,'Ayakashi','Ayakashi',11,59,59,-182.116,59.641,-139.434,0); +INSERT INTO `mob_spawn_points` VALUES (17367064,0,'Gaki','Gaki',7,62,62,22.646,-0.230,15.982,130); +INSERT INTO `mob_spawn_points` VALUES (17367065,0,'Rasetsu','Rasetsu',8,63,63,22.646,-0.304,17.982,130); +INSERT INTO `mob_spawn_points` VALUES (17367066,0,'Onki','Onki',9,61,61,22.646,-0.230,19.982,130); +INSERT INTO `mob_spawn_points` VALUES (17367067,0,'Onibi','Onibi',10,55,55,22.646,-0.230,19.982,130); +INSERT INTO `mob_spawn_points` VALUES (17367068,0,'Ayakashi','Ayakashi',11,59,59,18.130,-0.202,17.401,0); +INSERT INTO `mob_spawn_points` VALUES (17367069,0,'Gaki','Gaki',7,62,62,222.641,-60.230,136.000,130); +INSERT INTO `mob_spawn_points` VALUES (17367070,0,'Rasetsu','Rasetsu',8,63,63,222.641,-60.303,138.000,130); +INSERT INTO `mob_spawn_points` VALUES (17367071,0,'Onki','Onki',9,61,61,222.641,-60.229,140.000,130); +INSERT INTO `mob_spawn_points` VALUES (17367072,0,'Onibi','Onibi',10,55,55,222.641,-60.229,140.001,130); +INSERT INTO `mob_spawn_points` VALUES (17367073,0,'Ayakashi','Ayakashi',11,59,59,0.000,0.000,0.000,0); -- Shattering Stars INSERT INTO `mob_spawn_points` VALUES (17367074,0,'Maat','Maat',12,70,70,-177.000,60.000,-141.000,130); -- Maat (RDM arena 1)