Fixed softlock in Priest in Peril and The Fremennik Trials

This commit is contained in:
Player Name
2025-02-16 10:03:20 +00:00
committed by Ryan
parent 053254b504
commit be76ca143b
11 changed files with 32 additions and 21 deletions
@@ -43,22 +43,22 @@ class ChieftanBrundt(player: Player? = null) : DialoguePlugin(player){
stage = 500 stage = 500
return true return true
} }
else if(player.getAttribute("fremtrials:votes",0) >= 7){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player.getAttribute("fremtrials:votes",0) >= 7) {
npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?") npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?")
stage = 545 stage = 545
return true return true
} }
else if(player.getAttribute("fremtrials:votes",0) in 3..6){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player.getAttribute("fremtrials:votes",0) in 3..6) {
npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?") npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?")
stage = 540 stage = 540
return true return true
} }
else if(player.getAttribute("fremtrials:votes",0) == 1){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player.getAttribute("fremtrials:votes",0) == 1) {
npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?") npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?")
stage = 535 stage = 535
return true return true
} }
else if(player.getAttribute("fremtrials:votes",-1) == 0){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player.getAttribute("fremtrials:votes",-1) == 0) {
npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?") npcl(FacialExpression.HAPPY," Greetings again outerlander! How goes your attempts to gain votes with the council of elders?")
stage = 530 stage = 530
return true return true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem import core.api.removeItem
import core.game.node.entity.impl.Animator import core.game.node.entity.impl.Animator
import core.game.node.entity.npc.NPC import core.game.node.entity.npc.NPC
@@ -56,8 +57,8 @@ class ManniDialogue(player: Player? = null) : core.game.dialogue.DialoguePlugin(
return true return true
} }
} }
else if(player?.getAttribute("fremtrials:manni-vote",false) == true){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player?.getAttribute("fremtrials:manni-vote",false) == true) {
npc("e have my vote!") npc("Ye have my vote!")
stage = 1000 stage = 1000
return true return true
} }
@@ -49,7 +49,7 @@ class OlafTheBard(player: Player? = null) : DialoguePlugin(player){
stage = 98 stage = 98
return true return true
} }
else if(player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){ else if(getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0){
npc("Hello? Yes? You want something outerlander?") npc("Hello? Yes? You want something outerlander?")
stage = 0 stage = 0
return true return true
@@ -65,7 +65,7 @@ class PeerTheSeerDialogue(player: Player? = null) : core.game.dialogue.DialogueP
stage = 110 stage = 110
return true return true
} }
else if(player.getAttribute("fremtrials:peer-vote",false)){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player.getAttribute("fremtrials:peer-vote",false)) {
npcl(core.game.dialogue.FacialExpression.SAD,"Uuuh... What was that dark presence I felt?") npcl(core.game.dialogue.FacialExpression.SAD,"Uuuh... What was that dark presence I felt?")
stage = 120 stage = 120
return true return true
@@ -75,7 +75,7 @@ class PeerTheSeerDialogue(player: Player? = null) : core.game.dialogue.DialogueP
stage = 150 stage = 150
return true return true
} }
else if(player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){ else if(getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0){
npcl(core.game.dialogue.FacialExpression.SAD,"Uuuh... What was that dark presence I felt?") npcl(core.game.dialogue.FacialExpression.SAD,"Uuuh... What was that dark presence I felt?")
stage = 50 stage = 50
return true return true
@@ -1,5 +1,6 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials package content.region.fremennik.rellekka.quest.thefremenniktrials
import content.data.Quests
import core.api.* import core.api.*
import core.game.node.entity.impl.Animator import core.game.node.entity.impl.Animator
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
@@ -102,7 +103,7 @@ class SeersHouseListeners : InteractionListener {
if(!player.getAttribute("PeerStarted",false)){ if(!player.getAttribute("PeerStarted",false)){
sendDialogue(player,"You should probably talk to the owner of this home.") sendDialogue(player,"You should probably talk to the owner of this home.")
} }
if(getAttribute(player, "fremtrials:peer-vote", false)) if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && getAttribute(player, "fremtrials:peer-vote", false))
{ {
sendDialogue(player, "I don't need to go through that again.") sendDialogue(player, "I don't need to go through that again.")
return@on true return@on true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem import core.api.removeItem
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.item.Item import core.game.node.item.Item
@@ -37,7 +38,7 @@ class SigliTheHuntsman(player: Player? = null) : DialoguePlugin(player){
stage = 150 stage = 150
return true return true
} }
else if(player?.getAttribute("fremtrials:sigli-vote",false)!!){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player?.getAttribute("fremtrials:sigli-vote",false)!!) {
npc("You have my vote!") npc("You have my vote!")
stage = 1000 stage = 1000
return true return true
@@ -52,7 +53,7 @@ class SigliTheHuntsman(player: Player? = null) : DialoguePlugin(player){
stage = 180 stage = 180
return true return true
} }
else if(player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){ else if(getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0){
npc("What do you want outerlander?") npc("What do you want outerlander?")
stage = 0 stage = 0
return true return true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem import core.api.removeItem
import core.game.dialogue.DialoguePlugin import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression import core.game.dialogue.FacialExpression
@@ -28,7 +29,7 @@ class SigmundDialogue (player: Player? = null) : DialoguePlugin(player) {
stage = 50 stage = 50
return true return true
} }
else if(!player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) <= 0) {
playerl(FacialExpression.HAPPY,"Hello there!") playerl(FacialExpression.HAPPY,"Hello there!")
stage = 60 stage = 60
return true return true
@@ -48,7 +49,7 @@ class SigmundDialogue (player: Player? = null) : DialoguePlugin(player) {
stage = 25 stage = 25
return true return true
} }
else if(!player?.getAttribute("fremtrials:sigmund-vote",false)!!){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && !player?.getAttribute("fremtrials:sigmund-vote",false)!!) {
playerl(FacialExpression.HAPPY,"Hello there!") playerl(FacialExpression.HAPPY,"Hello there!")
stage = 1 stage = 1
return true return true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem import core.api.removeItem
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.plugin.Initializable import core.plugin.Initializable
@@ -52,7 +53,7 @@ class SwensenTheNavigator(player: Player? = null) : DialoguePlugin(player){
stage = 140 stage = 140
return true return true
} }
else if(player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0) {
player("Hello!") player("Hello!")
stage = 0 stage = 0
return true return true
@@ -210,8 +210,8 @@ class TFTInteractionListeners : InteractionListener {
return@on true return@on true
} }
on(SWENSEN_LADDER, IntType.SCENERY, "climb"){ player, _ -> on(SWENSEN_LADDER, IntType.SCENERY, "climb-down") { player, _ ->
if(!getAttribute(player,"fremtrials:swensen-accepted",false)){ if (!getAttribute(player,"fremtrials:swensen-accepted",false)) {
sendNPCDialogue(player,1283,"Where do you think you're going?", core.game.dialogue.FacialExpression.ANGRY) sendNPCDialogue(player,1283,"Where do you think you're going?", core.game.dialogue.FacialExpression.ANGRY)
} }
return@on true return@on true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem import core.api.removeItem
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.plugin.Initializable import core.plugin.Initializable
@@ -45,7 +46,7 @@ class ThorvaldDialogue(player: Player? = null) : core.game.dialogue.DialoguePlug
stage = 0 stage = 0
return true return true
} }
else if(player!!.getAttribute("fremtrials:thorvald-vote", false)!!){ else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player!!.getAttribute("fremtrials:thorvald-vote", false)!!) {
playerl(core.game.dialogue.FacialExpression.FRIENDLY, "So can I count on your vote at the council of elders now Thorvald?") playerl(core.game.dialogue.FacialExpression.FRIENDLY, "So can I count on your vote at the council of elders now Thorvald?")
stage = 160 stage = 160
return true return true
@@ -55,12 +56,12 @@ class ThorvaldDialogue(player: Player? = null) : core.game.dialogue.DialoguePlug
stage = 250 stage = 250
return true return true
} }
else if(!player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){ else if(getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) == 0){
npcl(core.game.dialogue.FacialExpression.ANNOYED, "Leave me be, outerlander. I have nothing to say to the likes of you.") npcl(core.game.dialogue.FacialExpression.ANNOYED, "Leave me be, outerlander. I have nothing to say to the likes of you.")
stage = 1000 stage = 1000
return true return true
} }
else if (!player!!.getAttribute("fremtrials:thorvald-vote", false)!!) { else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && !player!!.getAttribute("fremtrials:thorvald-vote", false)!!) {
if (player!!.getAttribute("fremtrials:warrior-accepted", false)!!) { if (player!!.getAttribute("fremtrials:warrior-accepted", false)!!) {
options("What do I have to do again?", "Who is my opponent?", "Can't I do something else?") options("What do I have to do again?", "Who is my opponent?", "Can't I do something else?")
stage = 100 stage = 100
@@ -77,7 +77,12 @@ class PriestInPerilUseListener : InteractionListener {
} }
onUseWith(IntType.SCENERY, Items.GOLDEN_KEY_2944, Scenery.MONUMENT_3499) { player, used, _ -> onUseWith(IntType.SCENERY, Items.GOLDEN_KEY_2944, Scenery.MONUMENT_3499) { player, used, _ ->
if (!getAttribute(player, "priest_in_peril:key", false) && removeItem(player, used)) { // See GL #2112 and sources therein for why we do it this way
val hasNeverGrabbedKey = !getAttribute(player, "priest_in_peril:key", false)
val needsKeyForQuestStage = getQuestStage(player, Quests.PRIEST_IN_PERIL) <= 15
val hasTotallyLostKey = !hasAnItem(player, Items.IRON_KEY_2945, true).exists()
val giveNewKey = hasNeverGrabbedKey || (needsKeyForQuestStage && hasTotallyLostKey)
if (giveNewKey && removeItem(player, used)) {
addItem(player, Items.IRON_KEY_2945) addItem(player, Items.IRON_KEY_2945)
sendMessage(player, "You swap the golden key for the iron key.") sendMessage(player, "You swap the golden key for the iron key.")
setAttribute(player, "/save:priest_in_peril:key", true) setAttribute(player, "/save:priest_in_peril:key", true)