From 0a6fa91b3d60248d6bc822a3e40ae924b0e2356a Mon Sep 17 00:00:00 2001 From: Dallan Atwood Date: Sun, 26 Jan 2025 12:56:07 -0700 Subject: [PATCH] [Lua] WSNM Quest Exploit Fix Fixes a possible exploit in the quest logic that could allow players to bypass "breaking" their weapons if someone else were to spawn the NM. Added logic to ensure the player has the key item required --- scripts/quests/bastok/Inheritance.lua | 4 +++- scripts/quests/bastok/Shoot_First_Ask_Questions_Later.lua | 4 +++- scripts/quests/bastok/The_Walls_of_Your_Mind.lua | 4 +++- scripts/quests/bastok/The_Weight_of_Your_Limits.lua | 4 +++- scripts/quests/jeuno/Axe_the_Competition.lua | 4 +++- scripts/quests/outlands/Bugi_Soden.lua | 4 +++- scripts/quests/outlands/Cloak_and_Dagger.lua | 4 +++- scripts/quests/outlands/The_Potential_Within.lua | 4 +++- scripts/quests/sandoria/Methods_Create_Madness.lua | 4 +++- scripts/quests/sandoria/Old_Wounds.lua | 4 +++- scripts/quests/sandoria/Souls_in_Shadow.lua | 4 +++- scripts/quests/windurst/Blood_and_Glory.lua | 4 +++- scripts/quests/windurst/From_Saplings_Grow.lua | 4 +++- scripts/quests/windurst/Orastery_Woes.lua | 4 +++- 14 files changed, 42 insertions(+), 14 deletions(-) diff --git a/scripts/quests/bastok/Inheritance.lua b/scripts/quests/bastok/Inheritance.lua index 8a3d1b08b3c..85167626678 100644 --- a/scripts/quests/bastok/Inheritance.lua +++ b/scripts/quests/bastok/Inheritance.lua @@ -132,7 +132,9 @@ quest.sections = ['Maharaja'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/bastok/Shoot_First_Ask_Questions_Later.lua b/scripts/quests/bastok/Shoot_First_Ask_Questions_Later.lua index c9a09ca84af..ab717868ca7 100644 --- a/scripts/quests/bastok/Shoot_First_Ask_Questions_Later.lua +++ b/scripts/quests/bastok/Shoot_First_Ask_Questions_Later.lua @@ -136,7 +136,9 @@ quest.sections = ['Beet_Leafhopper'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/bastok/The_Walls_of_Your_Mind.lua b/scripts/quests/bastok/The_Walls_of_Your_Mind.lua index ba11ab65234..fed121c3b24 100644 --- a/scripts/quests/bastok/The_Walls_of_Your_Mind.lua +++ b/scripts/quests/bastok/The_Walls_of_Your_Mind.lua @@ -133,7 +133,9 @@ quest.sections = ['Bodach'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/bastok/The_Weight_of_Your_Limits.lua b/scripts/quests/bastok/The_Weight_of_Your_Limits.lua index 918ae1d3ecf..489c6325132 100644 --- a/scripts/quests/bastok/The_Weight_of_Your_Limits.lua +++ b/scripts/quests/bastok/The_Weight_of_Your_Limits.lua @@ -133,7 +133,9 @@ quest.sections = ['Greenman'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/jeuno/Axe_the_Competition.lua b/scripts/quests/jeuno/Axe_the_Competition.lua index ea6d3f7e03a..51b5b6af03c 100644 --- a/scripts/quests/jeuno/Axe_the_Competition.lua +++ b/scripts/quests/jeuno/Axe_the_Competition.lua @@ -132,7 +132,9 @@ quest.sections = ['Yallery_Brown'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/outlands/Bugi_Soden.lua b/scripts/quests/outlands/Bugi_Soden.lua index 5413f203154..95df70620cc 100644 --- a/scripts/quests/outlands/Bugi_Soden.lua +++ b/scripts/quests/outlands/Bugi_Soden.lua @@ -132,7 +132,9 @@ quest.sections = ['Megapod_Megalops'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/outlands/Cloak_and_Dagger.lua b/scripts/quests/outlands/Cloak_and_Dagger.lua index cccf5f7bd5b..43f494c8483 100644 --- a/scripts/quests/outlands/Cloak_and_Dagger.lua +++ b/scripts/quests/outlands/Cloak_and_Dagger.lua @@ -135,7 +135,9 @@ quest.sections = ['Baronial_Bat'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/outlands/The_Potential_Within.lua b/scripts/quests/outlands/The_Potential_Within.lua index 7e8b1ef877d..9a1cbb23d60 100644 --- a/scripts/quests/outlands/The_Potential_Within.lua +++ b/scripts/quests/outlands/The_Potential_Within.lua @@ -132,7 +132,9 @@ quest.sections = ['Kettenkaefer'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/sandoria/Methods_Create_Madness.lua b/scripts/quests/sandoria/Methods_Create_Madness.lua index 0fb7785d77a..a5822d2d7b9 100644 --- a/scripts/quests/sandoria/Methods_Create_Madness.lua +++ b/scripts/quests/sandoria/Methods_Create_Madness.lua @@ -139,7 +139,9 @@ quest.sections = ['Water_Leaper'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/sandoria/Old_Wounds.lua b/scripts/quests/sandoria/Old_Wounds.lua index 438bfdf42b1..4129b507c25 100644 --- a/scripts/quests/sandoria/Old_Wounds.lua +++ b/scripts/quests/sandoria/Old_Wounds.lua @@ -135,7 +135,9 @@ quest.sections = ['Girtablulu'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/sandoria/Souls_in_Shadow.lua b/scripts/quests/sandoria/Souls_in_Shadow.lua index ef36ee61577..83a4e054fb5 100644 --- a/scripts/quests/sandoria/Souls_in_Shadow.lua +++ b/scripts/quests/sandoria/Souls_in_Shadow.lua @@ -135,7 +135,9 @@ quest.sections = ['Mokumokuren'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/windurst/Blood_and_Glory.lua b/scripts/quests/windurst/Blood_and_Glory.lua index cc32cd843f0..cbd5e9a28e3 100644 --- a/scripts/quests/windurst/Blood_and_Glory.lua +++ b/scripts/quests/windurst/Blood_and_Glory.lua @@ -135,7 +135,9 @@ quest.sections = ['Cailleach_Bheur'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/windurst/From_Saplings_Grow.lua b/scripts/quests/windurst/From_Saplings_Grow.lua index f9e3e2e367d..bf507157ac1 100644 --- a/scripts/quests/windurst/From_Saplings_Grow.lua +++ b/scripts/quests/windurst/From_Saplings_Grow.lua @@ -134,7 +134,9 @@ quest.sections = ['Stolas'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, }, diff --git a/scripts/quests/windurst/Orastery_Woes.lua b/scripts/quests/windurst/Orastery_Woes.lua index fd298dc755c..c3fa3307e45 100644 --- a/scripts/quests/windurst/Orastery_Woes.lua +++ b/scripts/quests/windurst/Orastery_Woes.lua @@ -134,7 +134,9 @@ quest.sections = ['Eldhrimnir'] = { onMobDeath = function(mob, player, optParams) - player:setLocalVar('killed_wsnm', 1) + if player:hasKeyItem(xi.ki.MAP_TO_THE_ANNALS_OF_TRUTH) then + player:setLocalVar('killed_wsnm', 1) + end end, }, },