First phase of TzHaar rewrite

This commit is contained in:
Syndromeramo 2025-10-07 13:41:10 +00:00 committed by Ryan
parent c135877680
commit 7a23f6f0a3
4 changed files with 86 additions and 204 deletions

View file

@ -0,0 +1,49 @@
package content.region.karamja.tzhaar.handlers
import core.api.openNpcShop
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
import core.game.dialogue.Topic
import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import org.rs09.consts.NPCs
@Initializable
class TzHaarDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun open(vararg args: Any): Boolean {
npc = args[0] as NPC
npcl(FacialExpression.HALF_GUILTY, "Can I help you JalYt-Ket-${player.username}?").also { stage = 0 }
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when (stage) {
0 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "What do you have to trade?", 10, true),
Topic(FacialExpression.HALF_GUILTY, "What did you call me?", 20),
Topic(FacialExpression.HALF_GUILTY, "No I'm fine thanks.", END_DIALOGUE),
)
10 -> end().also { openNpcShop(player, npc.id) }
20 -> npcl(FacialExpression.HALF_GUILTY, "Are you not JalYt-Ket?").also { stage++ }
21 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "What's a 'JalYt-Ket'?", 22),
Topic(FacialExpression.HALF_GUILTY, "I guess so...", 25),
Topic(FacialExpression.HALF_GUILTY, "No I'm not!", END_DIALOGUE)
)
22 -> npcl(FacialExpression.HALF_GUILTY, "That what you are... you tough and strong no?").also { stage++ }
23 -> playerl(FacialExpression.HALF_GUILTY, "Well yes I suppose I am...").also { stage++ }
24 -> npcl(FacialExpression.HALF_GUILTY, "Then you JalYt-Ket!").also { stage = END_DIALOGUE }
25 -> npcl(FacialExpression.HALF_GUILTY, "Well then, no problems.").also { stage = END_DIALOGUE }
}
return true
}
override fun getIds(): IntArray {
return intArrayOf(NPCs.TZHAAR_HUR_TEL_2620, NPCs.TZHAAR_HUR_LEK_2622, NPCs.TZHAAR_MEJ_ROH_2623)
}
}

View file

@ -1,203 +0,0 @@
package content.region.karamja.tzhaar.handlers;
import core.cache.def.impl.SceneryDefinition;
import core.game.activity.ActivityManager;
import core.game.dialogue.DialoguePlugin;
import core.game.interaction.OptionHandler;
import core.game.node.Node;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.scenery.Scenery;
import core.game.world.map.Location;
import core.plugin.Initializable;
import core.plugin.Plugin;
/**
* Represents the plugin used for tzhaar city.
* @author 'Vexia
* @version 1.0
*/
@Initializable
public final class TzhaarCityPlugin extends OptionHandler {
/**
* Represents the locations to use.
*/
private static final Location[] LOCATIONS = new Location[] { Location.create(2480, 5175, 0), Location.create(2866, 9571, 0) };
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
SceneryDefinition.forId(31284).getHandlers().put("option:enter", this); //karamja cave.
SceneryDefinition.forId(9359).getHandlers().put("option:enter", this); //tzhaar exit
SceneryDefinition.forId(9356).getHandlers().put("option:enter", this);
SceneryDefinition.forId(9369).getHandlers().put("option:pass", this);
SceneryDefinition.forId(31292).getHandlers().put("option:go-through", this); //unimplemented door near fairy ring
new TzhaarDialogue().init();
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
int id = ((Scenery) node).getId();
switch (option) {
case "enter":
switch (id) {
case 31284:
player.getProperties().setTeleportLocation(LOCATIONS[0]);
break;
case 9359:
player.getProperties().setTeleportLocation(LOCATIONS[1]);
break;
case 9356:
if (player.getFamiliarManager().hasFamiliar()) {
player.getPacketDispatch().sendMessage("You can't enter this with a follower.");
break;
}
ActivityManager.start(player, "fight caves", false);
break;
}
break;
case "pass":
switch (id) {
case 9369:
ActivityManager.start(player, "fight pits", false);
break;
}
break;
case "go-through":
switch (id) {
case 31292:
return false;
}
break;
}
return true;
}
/**
* Represents the dialogue plugin used for the tzhaar npcs.
* @author 'Vexia
* @version 1.0
*/
public static final class TzhaarDialogue extends DialoguePlugin {
/**
* Constructs a new {@code TzhaarDialogue} {@code Object}.
*/
public TzhaarDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code TzhaarDialogue} {@code Object}.
* @param player the player.
*/
public TzhaarDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new TzhaarDialogue(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
npc("Can I help you JalYt-Ket-" + player.getUsername() + "?");
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
options("What do you have to trade?", "What did you call me?", "No I'm fine thanks.");
stage = 1;
break;
case 1:
switch (buttonId) {
case 1:
end();
npc.openShop(player);
break;
case 2:
player("What did you call me?");
stage = 20;
break;
case 3:
player("No I'm fine thanks.");
stage = 30;
break;
}
break;
case 10:
break;
case 20:
npc("Are you not JalYt-Ket?");
stage = 21;
break;
case 21:
options("What's a 'JalYt-Ket'?", "I guess so...", "No I'm not!");
stage = 22;
break;
case 22:
switch (buttonId) {
case 1:
player("What's a 'JalYt-Ket'?");
stage = 100;
break;
case 2:
player("I guess so...");
stage = 120;
break;
case 3:
player("No I'm not!");
stage = 130;
break;
}
break;
case 100:
npc("That what you are... you tough and strong no?");
stage = 101;
break;
case 101:
player("Well yes I suppose I am...");
stage = 102;
break;
case 102:
npc("Then you JalYt-Ket!");
stage = 103;
break;
case 103:
end();
break;
case 120:
npc("Well then, no problems.");
stage = 121;
break;
case 121:
end();
break;
case 130:
end();
break;
case 23:
end();
break;
case 30:
end();
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { 2620, 2622, 2623 };
}
}
}

View file

@ -62,7 +62,7 @@ public final class TzhaarFightCavesPlugin extends ActivityPlugin {
* @param player The player.
*/
public TzhaarFightCavesPlugin(Player player) {
super("fight caves", true, true, true, ZoneRestriction.CANNON, ZoneRestriction.RANDOM_EVENTS);
super("fight caves", true, true, true, ZoneRestriction.CANNON, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.FOLLOWERS);
super.player = player;
}

View file

@ -0,0 +1,36 @@
package content.region.karamja.tzhaar.handlers
import core.api.sendNPCDialogueLines
import core.api.teleport
import core.game.activity.ActivityManager
import core.game.dialogue.FacialExpression
import core.game.interaction.IntType
import core.game.interaction.InteractionListener
import core.game.world.map.Location
import org.rs09.consts.NPCs
class TzhaarListeners : InteractionListener {
override fun defineListeners() {
on(intArrayOf(31284, 9359, 9356), IntType.SCENERY, "enter") { player, node ->
when (node.id) {
31284 -> teleport(player, Location.create(2480, 5175, 0))
9359 -> teleport(player, Location.create(2866, 9571, 0))
9356 -> {
if (player.familiarManager.hasFamiliar()) {
sendNPCDialogueLines(player, NPCs.TZHAAR_MEJ_JAL_2617, FacialExpression.ANGRY, false, "No Kimit-Zil in the cave! This is a fight for YOU,", "not your friends!")
} else ActivityManager.start(player, "fight caves", false)
}
}
return@on true
}
on(9369, IntType.SCENERY, "pass") { player, _ ->
ActivityManager.start(player, "fight pits", false)
return@on true
}
on(31292, IntType.SCENERY, "go-through") { _, _ ->
return@on false
}
}
}