Converted EnchantedGemPlugin to Listener

Converted EnchantedGemDialogue to DialogueFile
This commit is contained in:
bushtail
2022-07-03 06:32:03 +00:00
committed by Ryan
parent c4781e8000
commit 16353eda20
4 changed files with 138 additions and 386 deletions
@@ -1,119 +0,0 @@
package core.game.interaction.item;
import core.cache.def.impl.ItemDefinition;
import core.cache.def.impl.NPCDefinition;
import core.game.content.dialogue.DialoguePlugin;
import rs09.game.content.global.EnchantedJewellery;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.plugin.Plugin;
import rs09.game.node.entity.skill.slayer.SlayerManager;
/**
* Represents the plugin used to handle enchanted jewellery transportation.
* @author 'Vexia
* @version 1.0
*/
@Initializable
public final class EnchantedGemPlugin extends OptionHandler {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
ItemDefinition.forId(4155).getHandlers().put("option:check", this);
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
player.sendMessage("You're assigned to kill " + NPCDefinition.forId((SlayerManager.getInstance(player).getTask().getNpcs()[0])).getName().toLowerCase() + "s; only " + SlayerManager.getInstance(player).getAmount() + " more to go.");
return true;
}
@Override
public boolean isWalk() {
return false;
}
/**
* Represents the jewellery dialogue plugin.
* @author 'Vexia
* @version 1.0
*/
public final class JewelleryDialogue extends DialoguePlugin {
/**
* Represents the id to use.
*/
public static final int ID = 329128389;
/**
* Represents the enchanted jewellery.
*/
private EnchantedJewellery jewellery;
/**
* If the operate option is used.
*/
private boolean operate;
/**
* Represents the item instance.
*/
private Item item;
/**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
*/
public JewelleryDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code EnchantedJewelleryPlugin} {@code Object}.
* @param player the player.
*/
public JewelleryDialogue(final Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new JewelleryDialogue(player);
}
@Override
public boolean open(Object... args) {
item = (Item) args[0];
jewellery = (EnchantedJewellery) args[1];
operate = args.length > 2 && (Boolean) args[2];
if (jewellery == EnchantedJewellery.DIGSITE_PENDANT) {
jewellery.use(player, item, 0, operate);
return true;
}
interpreter.sendOptions("Where would you like to go?", jewellery.getOptions());
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
if (player.getInterfaceManager().isOpened()) {
end();
return true;
}
end();
jewellery.use(player, item, (buttonId - 1), operate);
return true;
}
@Override
public int[] getIds() {
return new int[] { ID };
}
}
}
@@ -1,267 +0,0 @@
package core.game.node.entity.skill.slayer;
import core.cache.def.impl.NPCDefinition;
import core.game.content.dialogue.DialoguePlugin;
import core.game.content.dialogue.FacialExpression;
import core.game.node.entity.player.Player;
import core.game.world.map.Direction;
import core.plugin.Initializable;
import rs09.game.node.entity.skill.slayer.SlayerManager;
/**
* Rerpresents the enchanted gem dialogue.
* @author 'Vexia
* @version 1.0
*/
@Initializable
public final class EnchantedGemDialogue extends DialoguePlugin {
/**
* Represents the id associated with this plugin.
*/
public static final int ID = 77777;
/**
* Constructs a new {@code EnchantedGemDialogue} {@code Object}.
*/
public EnchantedGemDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code EnchantedGemDialogue} {@code Object}.
* @param player the player.
*/
public EnchantedGemDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new EnchantedGemDialogue(player);
}
@Override
public boolean open(Object... args) {
player.faceLocation(player.getLocation().transform(1, 0, 0));
player.setDirection(Direction.EAST);
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "Hello there " + player.getUsername() + ", what can I help you with?");
stage = 0;
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
interpreter.sendOptions("Select an Option", "How am I doing so far?", "Who are you?", "Where are you?", "Got any tips for me?", "Nothing really.");
stage = 2;
break;
case 2:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "How am I doing so far?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Who are you?");
stage = 20;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Where are you?");
stage = 30;
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Got any tips for me?");
stage = 400;
break;
case 5:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Nothing really.");
stage = 99;
break;
}
break;
case 99:
end();
break;
case 10:
if (!SlayerManager.getInstance(player).hasTask()) {
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You need something new to hunt. Come and see me", "When you can and I'll give you a new task.");
stage = 11;
break;
}
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You're currently assigned to kill " + (SlayerManager.getInstance(player).getTask() == Tasks.JAD ? " TzTok-Jad!" : NPCDefinition.forId((SlayerManager.getInstance(player).getTask().getNpcs()[0])).getName().toLowerCase() + "'s;"), "only " + SlayerManager.getInstance(player).getAmount() + " more to go.");
player.varpManager.get(2502).setVarbit(0,SlayerManager.getInstance(player).flags.getTaskFlags() >> 4).send(player);
stage = 11;
break;
case 11:
interpreter.sendOptions("Select an Option", "Who are you?", "Where are you?", "Got any tips for me?", "That's all thanks.");
stage = 12;
break;
case 12:
switch (buttonId) {
case 1:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "My name's " + NPCDefinition.forId(SlayerManager.getInstance(player).getMaster().getNpc()).getName() + ", I'm the Slayer Master best able", "to train you.");
stage = 21;
break;
case 2:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You'll find me in " + masterLocation() + ", I'll be here when you need a", "new task.");
stage = 31;
break;
case 3:
if (!SlayerManager.getInstance(player).hasTask()) {
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You need something new to hunt.");
stage = 99;
break;
}
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, SlayerManager.getInstance(player).getTask().getTip());
stage = 401;
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That's all thanks.");
stage = 99;
break;
case 99:
end();
break;
}
break;
case 20:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "My name's " + NPCDefinition.forId(SlayerManager.getInstance(player).getMaster().getNpc()).getName() + ", I'm the Slayer Master best able", "to train you.");
stage = 21;
break;
case 21:
interpreter.sendOptions("Select an Option", "How am I doing so far?", "Where are you?", "Got any tips for me?", "That's all thanks.");
stage = 25;
break;
case 25:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "How am I doing so far?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You'll find me in " + masterLocation() + ", I'll be here when you need a", "new task.");
stage = 31;
break;
case 3:
if (!SlayerManager.getInstance(player).hasTask()) {
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You need something new to hunt.");
stage = 99;
break;
}
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, SlayerManager.getInstance(player).getTask().getTip());
stage = 401;
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That's all thanks.");
stage = 99;
break;
}
break;
case 30:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You'll find me in " + masterLocation() + ", I'll be here when you need a", "new task.");
stage = 31;
break;
case 31:
interpreter.sendOptions("Select an Option", "How am I doing so far?", "Who are you?", "Got any tips for me?", "That's all thanks.");
stage = 32;
break;
case 32:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "How am I doing so far?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "My name's " + NPCDefinition.forId(SlayerManager.getInstance(player).getMaster().getNpc()).getName() + ", I'm the Slayer Master best able", "to train you.");
stage = 21;
break;
case 3:
if (!SlayerManager.getInstance(player).hasTask()) {
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You need something new to hunt.");
stage = 0;
break;
}
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, SlayerManager.getInstance(player).getTask().getTip());
stage = 401;
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That's all thanks.");
stage = 99;
break;
}
break;
case 400:
if (!SlayerManager.getInstance(player).hasTask()) {
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You need something new to hunt.");
stage = 0;
break;
}
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, SlayerManager.getInstance(player).getTask().getTip());
stage = 401;
break;
case 401:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Great, thanks!");
stage = 403;
break;
case 403:
interpreter.sendOptions("Select an Option", "How am I doing so far?", "Who are you?", "Where are you?", "That's all thanks.");
stage = 404;
break;
case 404:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "How am I doing so far?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "My name's " + NPCDefinition.forId(SlayerManager.getInstance(player).getMaster().getNpc()).getName() + ", I'm the Slayer Master best able", "to train you.");
stage = 21;
break;
case 3:
interpreter.sendDialogues(SlayerManager.getInstance(player).getMaster().getNpc(), FacialExpression.HALF_GUILTY, "You'll find me in " + masterLocation() + ", I'll be here when you need a", "new task.");
stage = 31;
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That's all thanks.");
stage = 99;
break;
}
break;
}
return true;
}
/**
* Method used to get the masters location.
* @return the location.
*/
public String masterLocation() {
if (SlayerManager.getInstance(player).getMaster().getNpc() == Master.MAZCHNA.getNpc())
return "Canifis";
else if (SlayerManager.getInstance(player).getMaster().getNpc() == Master.TURAEL.getNpc())
return "Taverley";
else if (SlayerManager.getInstance(player).getMaster().getNpc() == Master.CHAELDAR.getNpc())
return "Zanaris";
else if (SlayerManager.getInstance(player).getMaster().getNpc() == Master.VANNAKA.getNpc())
return "Edgeville dungeon";
else if (SlayerManager.getInstance(player).getMaster().getNpc() == Master.DURADEL.getNpc())
return "Shilo village";
else if(SlayerManager.getInstance(player).getMaster() == null) {
return "the Gnome Stronghold";
}
return null;
}
@Override
public int[] getIds() {
return new int[] { ID };
}
}
+72
View File
@@ -22,6 +22,7 @@ import core.game.node.entity.player.link.emote.Emotes
import core.game.node.entity.player.link.quest.QuestRepository
import core.game.node.entity.skill.Skills
import core.game.node.entity.skill.gather.SkillingTool
import core.game.node.entity.skill.slayer.Tasks
import core.game.node.entity.skill.summoning.familiar.BurdenBeast
import core.game.node.item.GroundItem
import core.game.node.item.GroundItemManager
@@ -41,6 +42,7 @@ import core.game.world.update.flag.chunk.AnimateObjectUpdateFlag
import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics
import org.rs09.consts.Items
import org.rs09.consts.NPCs
import rs09.game.content.dialogue.DialogueFile
import rs09.game.content.dialogue.SkillDialogueHandler
import rs09.game.content.global.GlobalKillCounter
@@ -1589,6 +1591,15 @@ fun getPathableRandomLocalCoordinate(target: Entity, radius: Int, center: Locati
return target.location
}
/**
* Returns the player's active slayer task.
* @author bushtail
* @param player the player whose task we are checking.
* @return the slayer task.
*/
fun getSlayerTask(player : Player) : Tasks? {
return SlayerManager.getInstance(player).task
}
/**
* Returns the name of the player's active slayer task.
@@ -1609,3 +1620,64 @@ fun getSlayerTaskName(player : Player) : String {
fun getSlayerTaskKillsRemaining(player : Player) : Int {
return SlayerManager.getInstance(player).amount
}
/**
* Returns the player's slayer master as npc.
* @author bushtail
* @param player the player whose master we are checking.
* @return the slayer master as NPC.
*/
fun getSlayerMaster(player : Player) : NPC {
return findNPC(SlayerManager.getInstance(player).master?.npc as Int) as NPC
}
/**
* Returns the player's slayer master location as string.
* @author bushtail
* @param player the player whose master we are checking.
* @return the slayer master location as String.
*/
fun getSlayerMasterLocation(player : Player) : String {
return when(getSlayerMaster(player).id) {
NPCs.CHAELDAR_1598 -> "Zanaris"
NPCs.DURADEL_8275 -> "Shilo Village"
NPCs.MAZCHNA_8274 -> "Canifis"
NPCs.TURAEL_8273 -> "Taverly"
NPCs.VANNAKA_1597 -> "Edgeville Dungeon"
else -> "The Backrooms"
}
}
/**
* Returns the player's slayer task tip as String.
* @author bushtail
* @param player the player whose task tip we are checking.
* @return the task tip as String.
*/
fun getSlayerTip(player : Player) : Array<out String> {
return if(hasSlayerTask(player)) {
SlayerManager.getInstance(player).task?.tip!!
} else {
arrayOf("You need something new to hunt.")
}
}
/**
* Returns the player's slayer task flags as Int.
* @author bushtail
* @param player the player whose task flags we are checking.
* @return the task flags as Int.
*/
fun getSlayerTaskFlags(player : Player) : Int {
return SlayerManager.getInstance(player).flags.taskFlags
}
/**
* Returns whether or not the player has a task.
* @author bushtail
* @param player the player whose task we are checking.
* @return has task as Boolean.
*/
fun hasSlayerTask(player : Player) : Boolean {
return SlayerManager.getInstance(player).hasTask()
}
@@ -0,0 +1,66 @@
package rs09.game.interaction.item
import api.*
import core.game.content.dialogue.FacialExpression
import core.game.node.entity.skill.slayer.Tasks
import org.rs09.consts.Items
import rs09.game.content.dialogue.DialogueFile
import rs09.game.content.dialogue.IfTopic
import rs09.game.content.dialogue.Topic
import rs09.game.interaction.InteractionListener
import rs09.tools.END_DIALOGUE
class EnchantedGemListener : InteractionListener {
override fun defineListeners() {
on(Items.ENCHANTED_GEM_4155, ITEM, "activate") { player, _ ->
openDialogue(player, EnchantedGemDialogue())
return@on true
}
}
}
class EnchantedGemDialogue() : DialogueFile() {
var firstRun = true
override fun handle(interfaceId: Int, buttonId: Int) {
npc = getSlayerMaster(player!!)
when(stage) {
0 -> npcl(FacialExpression.FRIENDLY, "Hello there ${player!!.username}, what can I help you with?").also { stage++ }
1 -> showTopics(
Topic(FacialExpression.ASKING, "How am I doing so far?", 100),
Topic(FacialExpression.HALF_ASKING, "Who are you?", 200),
Topic(FacialExpression.HALF_ASKING, "Where are you?", 300),
Topic(FacialExpression.FRIENDLY, "Got any tips for me?", 400),
IfTopic(FacialExpression.FRIENDLY, "Nothing really.", END_DIALOGUE, firstRun),
IfTopic(FacialExpression.HAPPY, "That's all thanks.", END_DIALOGUE, !firstRun)
)
100 -> {
firstRun = false
if(!hasSlayerTask(player!!)) {
npcl(FacialExpression.HALF_THINKING, "You need something new to hunt. Come and see me when you can and I'll give you a new task.").also { stage = 1 }
} else {
if(getSlayerTask(player!!) == Tasks.JAD) {
npcl(FacialExpression.FRIENDLY, "You're currently assigned to kill TzTok-Jad!")
} else {
npcl(FacialExpression.FRIENDLY, "You're currently assigned to kill ${getSlayerTaskName(player!!)}s; only ${getSlayerTaskKillsRemaining(player!!)} more to go.")
}
setVarbit(player!!, 2502, 0, getSlayerTaskFlags(player!!))
stage = 1
}
}
200 -> {
firstRun = false
npcl(FacialExpression.HAPPY, "My name's ${getSlayerMaster(player!!).name}, I'm the Slayer Master best able to train you.").also { stage = 1 }
}
300 -> {
firstRun = false
npcl(FacialExpression.HAPPY, "You'll find me in ${getSlayerMasterLocation(player!!)}, I'll be here when you need a new task.").also { stage = 1 }
}
400 -> {
firstRun = false
npc(FacialExpression.FRIENDLY, *getSlayerTip(player!!))
stage++
}
401 -> player(FacialExpression.HAPPY, "Great, thanks!").also { stage = 1 }
}
}
}