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
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?")
stage = 545
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?")
stage = 540
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?")
stage = 535
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?")
stage = 530
return true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem
import core.game.node.entity.impl.Animator
import core.game.node.entity.npc.NPC
@@ -56,8 +57,8 @@ class ManniDialogue(player: Player? = null) : core.game.dialogue.DialoguePlugin(
return true
}
}
else if(player?.getAttribute("fremtrials:manni-vote",false) == true){
npc("e have my vote!")
else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0 && player?.getAttribute("fremtrials:manni-vote",false) == true) {
npc("Ye have my vote!")
stage = 1000
return true
}
@@ -49,7 +49,7 @@ class OlafTheBard(player: Player? = null) : DialoguePlugin(player){
stage = 98
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?")
stage = 0
return true
@@ -65,7 +65,7 @@ class PeerTheSeerDialogue(player: Player? = null) : core.game.dialogue.DialogueP
stage = 110
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?")
stage = 120
return true
@@ -75,7 +75,7 @@ class PeerTheSeerDialogue(player: Player? = null) : core.game.dialogue.DialogueP
stage = 150
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?")
stage = 50
return true
@@ -1,5 +1,6 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials
import content.data.Quests
import core.api.*
import core.game.node.entity.impl.Animator
import core.game.node.entity.player.Player
@@ -102,7 +103,7 @@ class SeersHouseListeners : InteractionListener {
if(!player.getAttribute("PeerStarted",false)){
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.")
return@on true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem
import core.game.node.entity.player.Player
import core.game.node.item.Item
@@ -37,7 +38,7 @@ class SigliTheHuntsman(player: Player? = null) : DialoguePlugin(player){
stage = 150
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!")
stage = 1000
return true
@@ -52,7 +53,7 @@ class SigliTheHuntsman(player: Player? = null) : DialoguePlugin(player){
stage = 180
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?")
stage = 0
return true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
@@ -28,7 +29,7 @@ class SigmundDialogue (player: Player? = null) : DialoguePlugin(player) {
stage = 50
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!")
stage = 60
return true
@@ -48,7 +49,7 @@ class SigmundDialogue (player: Player? = null) : DialoguePlugin(player) {
stage = 25
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!")
stage = 1
return true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem
import core.game.node.entity.player.Player
import core.plugin.Initializable
@@ -52,7 +53,7 @@ class SwensenTheNavigator(player: Player? = null) : DialoguePlugin(player){
stage = 140
return true
}
else if(player.questRepository.hasStarted(Quests.THE_FREMENNIK_TRIALS)){
else if (getQuestStage(player, Quests.THE_FREMENNIK_TRIALS) > 0) {
player("Hello!")
stage = 0
return true
@@ -210,8 +210,8 @@ class TFTInteractionListeners : InteractionListener {
return@on true
}
on(SWENSEN_LADDER, IntType.SCENERY, "climb"){ player, _ ->
if(!getAttribute(player,"fremtrials:swensen-accepted",false)){
on(SWENSEN_LADDER, IntType.SCENERY, "climb-down") { player, _ ->
if (!getAttribute(player,"fremtrials:swensen-accepted",false)) {
sendNPCDialogue(player,1283,"Where do you think you're going?", core.game.dialogue.FacialExpression.ANGRY)
}
return@on true
@@ -1,6 +1,7 @@
package content.region.fremennik.rellekka.quest.thefremenniktrials
import core.api.addItem
import core.api.getQuestStage
import core.api.removeItem
import core.game.node.entity.player.Player
import core.plugin.Initializable
@@ -45,7 +46,7 @@ class ThorvaldDialogue(player: Player? = null) : core.game.dialogue.DialoguePlug
stage = 0
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?")
stage = 160
return true
@@ -55,12 +56,12 @@ class ThorvaldDialogue(player: Player? = null) : core.game.dialogue.DialoguePlug
stage = 250
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.")
stage = 1000
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)!!) {
options("What do I have to do again?", "Who is my opponent?", "Can't I do something else?")
stage = 100
@@ -77,7 +77,12 @@ class PriestInPerilUseListener : InteractionListener {
}
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)
sendMessage(player, "You swap the golden key for the iron key.")
setAttribute(player, "/save:priest_in_peril:key", true)