diff --git a/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMine.kt b/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMine.kt index e217953a7..4daced756 100644 --- a/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMine.kt +++ b/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMine.kt @@ -34,6 +34,7 @@ class HauntedMine : Quest(Quests.HAUNTED_MINE,73 ,72 ,2 ,382, 0, 1, 11) { const val attributeKilledTreusDayth = "/save:quest:hauntedmine-killedtreusdayth" // True after you've killed Treus Dayth. const val attributeKeyMentioned = "/save:quest:hauntedmine-keymentioned" // True after the player asks about a way into the mines. + const val attributeZealotKeyReturned = "/save:quest:hauntedmine-zealotkeyreturned" // True after you return the zealot's key after the quest. Note that this should not reset after quest completion } // Quest Journal ref: https://youtu.be/CD77NeKz1J4?si=AxNEg5YZU5oJ3T11&t=231 diff --git a/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMineListeners.kt b/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMineListeners.kt index 829c956f2..97a644071 100644 --- a/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMineListeners.kt +++ b/Server/src/main/content/region/morytania/quest/hauntedmine/HauntedMineListeners.kt @@ -23,6 +23,7 @@ class HauntedMineListeners : InteractionListener { return@onUseWith true } + // you should not be able to pickpocket the key after the quest, but that should be taken care of by clearing the attributeKeyMentioned when the quest finishes. on(NPCs.ZEALOT_1528, IntType.NPC, "pickpocket"){ player, node -> if(getAttribute(player, attributeKeyMentioned, false) && !player.inventory.containsItem(Item(Items.ZEALOTS_KEY_4078))){ player.lock() diff --git a/Server/src/main/content/region/morytania/quest/hauntedmine/ZealotDialogue.kt b/Server/src/main/content/region/morytania/quest/hauntedmine/ZealotDialogue.kt index 876757fd7..54044ec61 100644 --- a/Server/src/main/content/region/morytania/quest/hauntedmine/ZealotDialogue.kt +++ b/Server/src/main/content/region/morytania/quest/hauntedmine/ZealotDialogue.kt @@ -1,9 +1,8 @@ package content.region.morytania.quest.hauntedmine import content.data.Quests -import content.region.kandarin.quest.murdermystery.MurderMystery.Companion.attributeAskPoisonAnna -import content.region.kandarin.quest.murdermystery.MurderMystery.Companion.attributePoisonClue import content.region.morytania.quest.hauntedmine.HauntedMine.Companion.attributeKeyMentioned +import content.region.morytania.quest.hauntedmine.HauntedMine.Companion.attributeZealotKeyReturned import core.api.* import core.game.dialogue.* import core.game.node.entity.player.Player @@ -30,11 +29,18 @@ class ZealotDialogue (player: Player? = null) : DialoguePlugin(player) { // message on why you should appreciate this bespoke, small-batch, hand-crafted dialogue. >:( class ZealotDialogueFile : DialogueFile() { override fun handle(componentID: Int, buttonID: Int) { - when (getQuestStage(player!!, Quests.MURDER_MYSTERY)) { + when (getQuestStage(player!!, Quests.HAUNTED_MINE)) { + + // dialogue before/during the quest + in 0..99 -> when (stage) { + 0 -> playerl( + FacialExpression.NEUTRAL, "Hello there." + ).also { + if (getQuestStage(player!!, Quests.HAUNTED_MINE) == 0) { + stage = 1 + } else stage = 89 + } - // dialogue before starting the quest - 0 -> when (stage) { - 0 -> playerl(FacialExpression.NEUTRAL, "Hello there.").also { stage++ } 1 -> npcl(FacialExpression.NEUTRAL, "State thy allegiance stranger.").also { stage++ } 2 -> showTopics( Topic("I follow the path of Saradomin.", 3, true), @@ -444,40 +450,130 @@ class ZealotDialogueFile : DialogueFile() { ).also { stage = END_DIALOGUE } 88 -> playerl(FacialExpression.NEUTRAL, "I hope it goes well. Goodbye.").also { stage = END_DIALOGUE } - } - // dialogue after the quest is in progress - in 1..99 -> when (stage) { - 0 -> playerl(FacialExpression.NEUTRAL, "Quest in progress").also { stage = END_DIALOGUE } -/* - // these are here so i can copy them - 0 -> playerl(FacialExpression.NEUTRAL, "").also { stage++ } - 0 -> npcl(FacialExpression.NEUTRAL, "").also { stage++ } - 0 -> showTopics( - Topic("", 0, true), - Topic("", 0, true), - Topic("", 0, true), - Topic("", 0, true), + // break point where if we've already started the quest + 89 -> npcl( + FacialExpression.NEUTRAL, + "Hello again. I'm afraid I'm rather preoccupied. What was it you wanted?" + ).also { + stage = if (getAttribute(player!!, attributeKeyMentioned, false)) { + 90 + } else 91 + } + + 90 -> showTopics( + Topic(FacialExpression.NEUTRAL, "Can you explain the history of these mines again?", 32), + Topic("Is there any other way into the mines?", 44, true), + Topic("How does a lost artefact that was only legendary help?", 77, true), + Topic("Why was everyone in the mines slaughtered?", 80, true), ) - */ + 91 -> showTopics( + Topic(FacialExpression.NEUTRAL, "Can you explain the history of these mines again?", 32), + Topic("Where is the second entrance to the mines?", 48, true), + Topic("Can I borrow your key?", 63, true), + Topic("How does a lost artefact that was only legendary help?", 77, true), + Topic("Why was everyone in the mines slaughtered?", 80, true), + ) } // dialogue after the quest is completed 100 -> when (stage) { - 0 -> playerl(FacialExpression.NEUTRAL, "Quest complete").also { stage = END_DIALOGUE } -/* - // these are here so i can copy them - 0 -> playerl(FacialExpression.NEUTRAL, "").also { stage++ } - 0 -> npcl(FacialExpression.NEUTRAL, "").also { stage++ } 0 -> showTopics( - Topic("", 0, true), - Topic("", 0, true), - Topic("", 0, true), - Topic("", 0, true), + Topic("I've done it, I've managed to recreate the salve amulet!", 1, true), + Topic(FacialExpression.NEUTRAL, "What powers does the salve amulet have?", 23), + ) + // check if the zealot's key has been returned. + 1 -> playerl( + FacialExpression.NEUTRAL, + "I've done it, I've managed to recreate the salve amulet!" + ).also { + stage = if (!getAttribute(player!!, attributeZealotKeyReturned, false)) { + 2 + } else 19 + } + + 2 -> npcl( + FacialExpression.NEUTRAL, + "That hardly seems likely. There is no way you could have made it to the bottom of the mines without the key which is in my possession." + ).also { stage++ } + + 3 -> showTopics( + Topic("I found another way down.", 4, true), + Topic("Correction, the key that was in your possession.", 6, true), + Topic("Fine, don't believe me.", 18, true), ) - */ + 4 -> playerl(FacialExpression.NEUTRAL, "I, er... found another way down.").also { stage++ } + 5 -> npcl( + FacialExpression.NEUTRAL, + "Mock me not, this is a serious task I am undertaking. I don't have the time for your halfwitted attempt at humour." + ).also { stage = END_DIALOGUE } + + 6 -> playerl( + FacialExpression.NEUTRAL, + "Correction, the key that was in your possession." + ).also { stage++ } + + 7 -> npcl(FacialExpression.NEUTRAL, "My key, where is it? You stole it?").also { stage++ } + 8 -> npcl(FacialExpression.NEUTRAL, "Return that key to me now!").also { + stage = if (player!!.inventory.contains(Items.ZEALOTS_KEY_4078, 1)) { + 10 + } else 16 + } + + 10 -> showTopics( + Topic("Ok, I've finished with it now anyway.", 11, true), + Topic("Actually maybe I'll just keep hold of it for now.", 14, true), + ) + + 11 -> playerl(FacialExpression.NEUTRAL, "Ok, I've finished with it now anyway.").also { stage++ } + 12 -> npcl( + FacialExpression.NEUTRAL, + "Good, maybe all is not lost, despite your apparent lack of common sense." + ).also { stage++ } + // remove the key and set an attribute that it's been returned. + 13 -> playerl(FacialExpression.NEUTRAL, "Er... you're welcome?").also { stage = END_DIALOGUE }.also { + removeItem( + player!!, Items.ZEALOTS_KEY_4078 + ) + }.also { setAttribute(player!!, attributeZealotKeyReturned, true) } + + 14 -> playerl( + FacialExpression.NEUTRAL, + "Actually maybe I'll just keep hold of it for now." + ).also { stage++ } + + 15 -> npcl( + FacialExpression.NEUTRAL, + "Meddling fool, there are bigger things at stake here than you and your petty thieving intellect can understand." + ).also { stage = END_DIALOGUE } + + 16 -> playerl(FacialExpression.NEUTRAL, "I seem to have misplaced it, sorry.").also { stage++ } + 17 -> npcl( + FacialExpression.NEUTRAL, + "Arrrrrrrgh, you're unbelievable. Get out of my sight." + ).also { stage++ } + + 18 -> playerl(FacialExpression.NEUTRAL, "Fine, don't believe me.").also { stage = END_DIALOGUE } + 19 -> npcl( + FacialExpression.NEUTRAL, + "Then it is fortunate for us that Saradomin has guided you. Success certainly doesn't seem likely to have stemmed from rational behaviour on your part." + ).also { stage++ } + + 20 -> playerl( + FacialExpression.NEUTRAL, + "You still haven't forgiven me for borrowing your key have you?" + ).also { stage++ } + + 21 -> npcl(FacialExpression.NEUTRAL, "Borrowed!? You stole it!").also { stage++ } + 22 -> playerl(FacialExpression.NEUTRAL, "I'd better be going now.").also { stage = END_DIALOGUE } + 23 -> npcl( + FacialExpression.NEUTRAL, + "From what I have heard they would be put to best use in the slaying of the evil undead, the zombies and skeletons that walk this land." + ).also { stage++ } + + 24 -> playerl(FacialExpression.NEUTRAL, "Thanks for the tip.").also { stage = END_DIALOGUE } } } }