Refactored Seer NPC

This commit is contained in:
GregF 2024-04-15 00:20:29 +00:00 committed by Ryan
parent a342f91156
commit 24b314426e
3 changed files with 157 additions and 154 deletions

View file

@ -0,0 +1,70 @@
package content.region.kandarin.seers.dialogue
import content.region.kandarin.seers.diary.SeerDiaryDialogue
import core.api.isQuestInProgress
import core.api.openDialogue
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
import org.rs09.consts.NPCs
import core.game.dialogue.Topic
@Initializable
class SeerDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun getIds(): IntArray {
return intArrayOf(NPCs.SEER_388)
}
companion object {
const val OTHER_TOPIC = 10
const val DIARY = 20
const val SC_QUEST = 30
const val MANY_GREETINGS = 60
const val POWER = 70
}
override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC
npcl(FacialExpression.WORRIED, "Uh, what was that dark force? I've never sensed anything like it...").also { stage = START_DIALOGUE } // https://www.youtube.com/watch?v=mYsxit46rGo May 14 2010
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when (stage) {
START_DIALOGUE ->
npcl(FacialExpression.NEUTRAL, "Anyway, sorry about that.").also { stage++ }
START_DIALOGUE+1 ->
showTopics(
Topic("Talk about something else.", OTHER_TOPIC, true),
Topic("Talk about achievement diary.", DIARY, true)
)
DIARY -> openDialogue(player, SeerDiaryDialogue(), npc)
OTHER_TOPIC -> if (isQuestInProgress(player, "Scorpion Catcher", 1, 99)) {
npcl(FacialExpression.FURIOUS, "Not implemented").also { stage = END_DIALOGUE }
}
else{
showTopics(
Topic("Many greetings.", MANY_GREETINGS),
Topic("I seek knowledge and power!", POWER)
)
}
MANY_GREETINGS -> npcl(FacialExpression.NEUTRAL,
"Remember, whenever you set out to do something, something else must be done first.").also { stage = END_DIALOGUE }
POWER -> npcl(FacialExpression.NEUTRAL, "Knowledge comes from experience, power comes from battleaxes.").also { stage = END_DIALOGUE }
}
return true
}
}

View file

@ -1,154 +0,0 @@
package content.region.kandarin.seers.dialogue;
import core.game.dialogue.DialoguePlugin;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.link.diary.AchievementDiary;
import core.game.node.entity.player.link.diary.DiaryType;
import core.plugin.Initializable;
import core.game.node.entity.player.Player;
/**
* Handles the SeerDialoguePlugin dialogue.
*
* @author 'afaroutdude
*/
@Initializable
public class SeerDialoguePlugin extends DialoguePlugin {
public SeerDialoguePlugin() {
}
public SeerDialoguePlugin(Player player) {
super(player);
}
@Override
public int[] getIds() {
return new int[]{388};
}
@Override
public DialoguePlugin newInstance(Player player) {
return new SeerDialoguePlugin(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
// npc("Uh, what was that dark force? I've never sensed", "anything like it..."); // https://www.youtube.com/watch?v=mYsxit46rGo May 14 2010
// npc("Anyway, sorry about that.");
options("Talk about something else.", "Talk about achievement diary.");
stage = 0;
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
int level = 0;
switch (stage) {
case 999:
end();
break;
case 0:
switch (buttonId) {
case 1:
npc("Many greetings.");
stage = 1;
break;
case 2:
if (AchievementDiary.canReplaceReward(player, DiaryType.SEERS_VILLAGE, 0)) {
player("I seem to have lost my seers' headband...");
stage = 80;
break;
}
else if (AchievementDiary.hasClaimedLevelRewards(player, DiaryType.SEERS_VILLAGE, 0)) {
player("Can you remind me what my headband does?");
stage = 90;
break;
}
else if (AchievementDiary.canClaimLevelRewards(player, DiaryType.SEERS_VILLAGE, 0)) {
player("Hi. I've completed the Easy tasks in my Achievement", "Diary.");
stage = 200;
break;
}
else {
player("Hi! Can you help me out with the Achievement Diary", "tasks?");
stage = 101;
break;
}
}
break;
case 80:
AchievementDiary.grantReplacement(player, DiaryType.SEERS_VILLAGE, 0);
npc("Here's your replacement. Please be more careful.");
stage = 999;
break;
case 90:
npc("Your headband marks you as an honourary seer.", "Geoffrey - who works in the field to the", "south - will give you free flax every day.");
stage = 999;
break;
case 100:
npc("I certainly do - we have a set of tasks spanning Seers'", "Village, Catherby, Hemenster and the Sinclair Mansion.", "Just complete the tasks listed in the Achievement Diary", "and they will be ticked off automatically.");
stage = 999;
break;
case 101:
npc("I'm afraid not. It is important that adventurers", "complete the tasks unaided. That way, only the truly", "worthy collect the spoils.");
stage = 999;
break;
case 200:
npc("Well done, adventurer. You are clearly a " + (player.isMale() ? "man" : "woman") + "of", "great wisdom. I have a gift for you.");
stage++;
break;
case 201:
if (!AchievementDiary.flagRewarded(player, DiaryType.SEERS_VILLAGE, 0)) {
npc("Come back when you have two free inventory slots.");
stage = 999;
} else {
interpreter.sendItemMessage(AchievementDiary.getRewards(DiaryType.SEERS_VILLAGE, 0)[0], "The seer hands you a strange-looking headband and a", "rusty lamp.");
stage++;
}
break;
case 202:
npc("You are now an honourary seer and Geoffrey - who", "works in the field to the south - will give you free flax", "every day. Don't call him 'Geoffrey' though: he prefers", "to be known as 'Flax'.");
stage++;
break;
case 203:
player("Flax? What sort of name is that for a person.");
stage++;
break;
case 204:
npc("I know, I know. The poor boy is a simple soul - he just", "really loves picking flax. A little too much, I fear.");
stage=999;
break;
case 1:
options("Many greetings.", "I seek knowledge and power!");
stage = 2;
break;
case 2:
switch (buttonId) {
case 1:
player("Many greetings.");
stage = 10;
break;
case 2:
player("I seek knowledge and power!");
stage = 20;
break;
}
break;
case 10:
npc("Remember, whenever you set out to do something,", "something else must be done first.");
stage = 999;
break;
case 20:
npc("Knowledge comes from experience, power", "comes from battleaxes.");
stage = 999;
break;
}
return true;
}
}

View file

@ -0,0 +1,87 @@
package content.region.kandarin.seers.diary
import core.api.sendItemDialogue
import core.game.dialogue.DialogueFile
import core.game.dialogue.FacialExpression
import core.game.node.entity.player.link.diary.AchievementDiary
import core.game.node.entity.player.link.diary.DiaryType
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
class SeerDiaryDialogue : DialogueFile() {
companion object {
const val LOST_HEAD_BAND = 20
const val HEAD_BAND_HELP = 30
const val CLAIM_HEAD_BAND = 40
const val ASK_FOR_HELP = 50
}
override fun handle(componentID: Int, buttonID: Int) {
when (stage) {
START_DIALOGUE ->{
if (AchievementDiary.canReplaceReward(player, DiaryType.SEERS_VILLAGE, 0)) {
playerl(FacialExpression.SAD, "I seem to have lost my seers' headband...").also {
stage = LOST_HEAD_BAND
}
} else if (AchievementDiary.hasClaimedLevelRewards(player, DiaryType.SEERS_VILLAGE, 0)) {
playerl(FacialExpression.ASKING, "Can you remind me what my headband does?").also {
stage = HEAD_BAND_HELP
}
} else if (AchievementDiary.canClaimLevelRewards(player, DiaryType.SEERS_VILLAGE, 0)) {
playerl(
FacialExpression.HAPPY,
"Hi. I've completed the Easy tasks in my Achievement Diary."
).also {
stage = CLAIM_HEAD_BAND
}
} else {
playerl(FacialExpression.ASKING, "Do you have an Achievement Diary for me?").also {
stage = ASK_FOR_HELP
}
}
}
LOST_HEAD_BAND -> {
if (AchievementDiary.grantReplacement(player, DiaryType.SEERS_VILLAGE, 0))
npcl(FacialExpression.ANNOYED, "Here's your replacement. Please be more careful.").also {
stage = END_DIALOGUE
}
else
// This line is just guessed
npcl(FacialExpression.HALF_GUILTY, "It seems your inventory is full").also { stage = END_DIALOGUE }
}
HEAD_BAND_HELP -> npcl(FacialExpression.NEUTRAL, "Your headband marks you as an honourary seer. Geoffrey - who works in the field to the south - will give you free flax every day.").also {
stage = END_DIALOGUE
}
// This has to be npc otherwise wordwrap goes wrong and extends to 5 lines
ASK_FOR_HELP -> npc(FacialExpression.HAPPY, "I certainly do - we have a set of tasks spanning Seers'", "Village, Catherby, Hemenster and the Sinclair Mansion.",
"Just complete the tasks listed in the Achievement Diary", "and they will be ticked off automatically.").also { stage++ }
ASK_FOR_HELP + 1 -> playerl(FacialExpression.ASKING, "Hi! Can you help me out with the Achievement Diary tasks?").also { stage++ }
ASK_FOR_HELP + 2 -> npcl(FacialExpression.SAD,
"I'm afraid not. It is important that adventurers complete the tasks unaided. That way, only the truly worthy collect the spoils.").also {
stage = END_DIALOGUE
}
CLAIM_HEAD_BAND -> npcl(FacialExpression.HAPPY, "Well done, adventurer. You are clearly a "+(if (player!!.isMale) "man" else "woman")+" of great wisdom. I have a gift for you.").also { stage++ }
CLAIM_HEAD_BAND + 1 -> {
if (!AchievementDiary.flagRewarded(player, DiaryType.SEERS_VILLAGE, 0)) {
npcl(FacialExpression.NEUTRAL, "Come back when you have two free inventory slots.").also {
stage = END_DIALOGUE
}
} else {
sendItemDialogue(player!!, AchievementDiary.getRewards(DiaryType.SEERS_VILLAGE, 0)[0],
"The seer hands you a strange-looking headband and a rusty lamp.").also { stage++ }
}
}
CLAIM_HEAD_BAND + 2 -> npcl(FacialExpression.HAPPY, "You are now an honourary seer and Geoffrey - who works in the field to the south - will give you free flax every day. Don't call him 'Geoffrey' though: he prefers to be known as 'Flax'.").also { stage++ }
CLAIM_HEAD_BAND + 3 -> playerl(FacialExpression.ASKING, "Flax? What sort of name is that for a person?").also { stage++ }
CLAIM_HEAD_BAND + 4 -> npcl(FacialExpression.NEUTRAL, "I know, I know. The poor boy is a simple soul - he just really loves picking flax. A little too much, I fear.").also {
stage = END_DIALOGUE
}
}
}
}