Removed inauthentic pets

Removed option to obtain inauthentic TzRek-Jad pet
This commit is contained in:
Syndromeramo
2025-08-31 08:41:06 +00:00
committed by Ryan
parent 36267b7a67
commit f39e432432
12 changed files with 167 additions and 727 deletions
@@ -1,103 +0,0 @@
package content.data.skill;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.world.repository.Repository;
/**
* Represents the skilling pets obtained randomly.
* @author Empathy
*
*/
public enum SkillingPets {
BABY_RED_CHINCHOMPA(new Item(14823), "Baby Chinchompa", Skills.HUNTER),
BABY_GREY_CHINCHOMPA(new Item(14824), "Baby Chinchompa", Skills.HUNTER),
BEAVER(new Item(14821), "Beaver", Skills.WOODCUTTING),
GOLEM(new Item(14822), "Rock Golem", Skills.MINING),
HERON(new Item(14827), "Heron", Skills.FISHING);
/**
* The pet item drop.
*/
private final Item pet;
/**
* The name.
*/
private final String name;
/**
* The skill.
*/
private final int skill;
/**
* Constructs a new {@code SkillingPets} object.
* @param skill The skill id.
* @param pet The pet item.
*/
SkillingPets(Item pet, String name, int skill) {
this.pet = pet;
this.name = name;
this.skill = skill;
}
/**
* Checks the pet drop.
* @param player The player.
* @param pet The pet drop to check.
*/
public static void checkPetDrop(Player player, SkillingPets pet) {
if (pet == null) {
return;
}
int defaultChance = 15000;
int newChance = (defaultChance / player.getSkills().getStaticLevel(pet.getSkill()) * 55);
int outOf = (newChance > defaultChance ? defaultChance : newChance);
int getChance = outOf;
if (getChance != 1) {
return;
}
if (player.hasItem(pet.getPet())) {
return;
}
if (player.getFamiliarManager().hasFamiliar() && player.getInventory().isFull()) {
return;
}
if (player.getFamiliarManager().hasFamiliar()) {
if (player.getFamiliarManager().getFamiliar().getName().equalsIgnoreCase(pet.getName())) {
return;
}
player.getInventory().add(pet.getPet());
player.sendNotificationMessage("You feel something weird sneaking into your backpack.");
} else {
player.getFamiliarManager().summon(pet.getPet(), true);
player.sendNotificationMessage("You have a funny feeling like you're being followed.");
}
Repository.sendNews(player.getUsername() + " has found a " + pet.getPet().getName() + "!");
}
/**
* @return the pet
*/
public Item getPet() {
return pet;
}
/**
* @return the pet name.
*/
public String getName() {
return name;
}
/**
* @return the skill.
*/
public int getSkill() {
return skill;
}
}
@@ -1,6 +1,5 @@
package content.global.skill.gather.fishing package content.global.skill.gather.fishing
import content.data.skill.SkillingPets
import content.global.skill.fishing.Fish import content.global.skill.fishing.Fish
import content.global.skill.fishing.FishingOption import content.global.skill.fishing.FishingOption
import content.global.skill.skillcapeperks.SkillcapePerks import content.global.skill.skillcapeperks.SkillcapePerks
@@ -124,7 +123,6 @@ class FishingPulse(player: Player?, npc: NPC, private val option: FishingOption?
updateSkillTask() updateSkillTask()
} }
player.dispatch(ResourceProducedEvent(fish!!.id, 1, node!!)) player.dispatch(ResourceProducedEvent(fish!!.id, 1, node!!))
SkillingPets.checkPetDrop(player, SkillingPets.HERON)
val item = fish!! val item = fish!!
if (isActive(SkillcapePerks.GREAT_AIM, player) && RandomFunction.random(100) <= 5) { if (isActive(SkillcapePerks.GREAT_AIM, player) && RandomFunction.random(100) <= 5) {
addItemOrDrop(player, item.id) addItemOrDrop(player, item.id)
@@ -1,6 +1,5 @@
package content.global.skill.gather.mining package content.global.skill.gather.mining
import content.data.skill.SkillingPets
import content.data.skill.SkillingTool import content.data.skill.SkillingTool
import content.global.skill.skillcapeperks.SkillcapePerks import content.global.skill.skillcapeperks.SkillcapePerks
import content.global.activity.shootingstar.StarBonus import content.global.activity.shootingstar.StarBonus
@@ -67,7 +66,6 @@ class MiningListener : InteractionListener {
rewardAmount = calculateRewardAmount(player, isEssence, reward) // calculate amount rewardAmount = calculateRewardAmount(player, isEssence, reward) // calculate amount
player.dispatch(ResourceProducedEvent(reward, rewardAmount, node)) player.dispatch(ResourceProducedEvent(reward, rewardAmount, node))
SkillingPets.checkPetDrop(player, SkillingPets.GOLEM) // roll for pet
// Reward mining experience // Reward mining experience
val experience = resource!!.experience * rewardAmount val experience = resource!!.experience * rewardAmount
@@ -3,7 +3,6 @@ package content.global.skill.gather.mining
import core.api.* import core.api.*
import core.game.event.ResourceProducedEvent import core.game.event.ResourceProducedEvent
import core.cache.def.impl.ItemDefinition import core.cache.def.impl.ItemDefinition
import content.data.skill.SkillingPets
import core.game.node.Node import core.game.node.Node
import core.game.node.entity.impl.Animator import core.game.node.entity.impl.Animator
import core.game.node.entity.npc.drop.DropFrequency import core.game.node.entity.npc.drop.DropFrequency
@@ -132,7 +131,6 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul
rewardAmount = calculateRewardAmount(reward) // calculate amount rewardAmount = calculateRewardAmount(reward) // calculate amount
player.dispatch(ResourceProducedEvent(reward, rewardAmount, node)) player.dispatch(ResourceProducedEvent(reward, rewardAmount, node))
SkillingPets.checkPetDrop(player, SkillingPets.GOLEM) // roll for pet
// Reward mining experience // Reward mining experience
val experience = resource!!.experience * rewardAmount val experience = resource!!.experience * rewardAmount
@@ -1,6 +1,5 @@
package content.global.skill.gather.woodcutting package content.global.skill.gather.woodcutting
import content.data.skill.SkillingPets
import content.data.skill.SkillingTool import content.data.skill.SkillingTool
import content.data.tables.BirdNest import content.data.tables.BirdNest
import content.global.skill.farming.FarmingPatch.Companion.forObject import content.global.skill.farming.FarmingPatch.Companion.forObject
@@ -109,7 +108,6 @@ class WoodcuttingListener : InteractionListener {
if (reward > 0) { if (reward > 0) {
rewardAmount = calculateRewardAmount(player, reward) // calculate amount rewardAmount = calculateRewardAmount(player, reward) // calculate amount
SkillingPets.checkPetDrop(player, SkillingPets.BEAVER) // roll for pet
//add experience //add experience
val experience: Double = calculateExperience(player, resource, rewardAmount) val experience: Double = calculateExperience(player, resource, rewardAmount)
@@ -8,7 +8,6 @@ import core.game.event.ResourceProducedEvent;
import core.cache.def.impl.ItemDefinition; import core.cache.def.impl.ItemDefinition;
import core.game.container.impl.EquipmentContainer; import core.game.container.impl.EquipmentContainer;
import core.game.dialogue.FacialExpression; import core.game.dialogue.FacialExpression;
import content.data.skill.SkillingPets;
import core.game.node.entity.impl.Animator; import core.game.node.entity.impl.Animator;
import core.game.node.entity.impl.Projectile; import core.game.node.entity.impl.Projectile;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
@@ -157,7 +156,6 @@ public class WoodcuttingSkillPulse extends Pulse {
if (reward > 0) { if (reward > 0) {
reward = calculateReward(reward); // calculate rewards reward = calculateReward(reward); // calculate rewards
rewardAmount = calculateRewardAmount(reward); // calculate amount rewardAmount = calculateRewardAmount(reward); // calculate amount
SkillingPets.checkPetDrop(player, SkillingPets.BEAVER); // roll for pet
//add experience //add experience
double experience = calculateExperience(resource.reward, rewardAmount); double experience = calculateExperience(resource.reward, rewardAmount);
@@ -1,6 +1,5 @@
package content.global.skill.hunter; package content.global.skill.hunter;
import content.data.skill.SkillingPets;
import core.game.node.entity.skill.SkillPulse; import core.game.node.entity.skill.SkillPulse;
import core.game.node.entity.skill.Skills; import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
@@ -95,13 +94,6 @@ public final class TrapDismantlePulse extends SkillPulse<Scenery> {
if (wrapper.getType().getSettings().clear(wrapper, 1)) { if (wrapper.getType().getSettings().clear(wrapper, 1)) {
instance.deregister(wrapper); instance.deregister(wrapper);
if (wrapper.isCaught()) { if (wrapper.isCaught()) {
if (wrapper.getType().equals(Traps.BOX_TRAP)) {
for (int i : wrapper.getReward().getNpcIds()) {
if (i == 5080 || i == 5079) {
SkillingPets.checkPetDrop(player, i == 5080 ? SkillingPets.BABY_RED_CHINCHOMPA : SkillingPets.BABY_GREY_CHINCHOMPA);
}
}
}
player.getSkills().addExperience(Skills.HUNTER, wrapper.getReward().getExperience(), true); player.getSkills().addExperience(Skills.HUNTER, wrapper.getReward().getExperience(), true);
} }
player.getPacketDispatch().sendMessage("You dismantle the trap."); player.getPacketDispatch().sendMessage("You dismantle the trap.");
@@ -1,6 +1,5 @@
package content.global.skill.hunter; package content.global.skill.hunter;
import content.data.skill.SkillingPets;
import core.game.node.entity.npc.NPC; import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.entity.skill.Skills; import core.game.node.entity.skill.Skills;
@@ -123,8 +122,4 @@ public class TrapNode {
return objectIds; return objectIds;
} }
public SkillingPets getPet() {
return null;
}
} }
@@ -55,31 +55,6 @@ public enum Pets {
*/ */
TERRIER(12512, 12513, -1, 6958, 6959, -1, 0.0033333333333333, 4, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 526), TERRIER_1(12700, 12701, -1, 7237, 7238, -1, 0.0033333333333333, 4, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 526), TERRIER_2(12702, 12703, -1, 7239, 7240, -1, 0.0033333333333333, 4, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 526), TERRIER(12512, 12513, -1, 6958, 6959, -1, 0.0033333333333333, 4, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 526), TERRIER_1(12700, 12701, -1, 7237, 7238, -1, 0.0033333333333333, 4, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 526), TERRIER_2(12702, 12703, -1, 7239, 7240, -1, 0.0033333333333333, 4, 2132, 2134, 2136, 2138, 10816, 9986, 9978, 526),
/**
* A creeping hand pet.
*/
//CREEPING_HAND(14652, -1, -1, 8619, -1, -1, 0.0033333333333333, 4, 1059),
/**
* Minitrice pet.
*/
//MINITRICE(14653, -1, -1, 8620, -1, -1, 0.0033333333333333, 4, 225),
/**
* Baby basilisk pet.
*/
//BABY_BASILISK(14654, -1, -1, 8621, -1, -1, 0.0033333333333333, 4, 221),
/**
* Baby kurask pet.
*/
//BABY_KURASK(14655, -1, -1, 8622, -1, -1, 0.0033333333333333, 4, 526),
/**
* Abyssal minion pet.
*/
//ABYSSAL_MINION(14651, -1, -1, 8624, -1, -1, 0.0033333333333333, 4, 592),
/** /**
* Gecko pet. * Gecko pet.
*/ */
@@ -1,313 +0,0 @@
package content.region.karamja.tzhaar.handlers;
import core.game.dialogue.DialogueInterpreter;
import core.game.dialogue.DialoguePlugin;
import core.game.dialogue.FacialExpression;
import core.game.node.entity.npc.NPC;
import core.game.node.item.Item;
import core.plugin.Initializable;
import core.game.node.entity.player.Player;
import core.game.world.GameWorld;
/**
* Handles the TzHaarMejJal dialogue.
* @author 'Vexia
* @author Empathy
* @author Logg
*/
@Initializable
public class TzHaarMejJah extends DialoguePlugin {
private static final Item APPEARANCE_FEE = new Item(6529, 8000); // 8000 tokkul, about the same as you get from failing jad
public TzHaarMejJah() {
}
public TzHaarMejJah(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new TzHaarMejJah(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "You want help JalYt-Ket-" + player.getUsername() + "?");
stage = 0;
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
if (GameWorld.getSettings().getJad_practice_enabled()) {
if (player.getAttribute("fc_practice_jad", false)) {
interpreter.sendOptions("Select an Option", player.getInventory().containItems(6570) ? "I have a fire cape here." : "What is this place?", "What did you call me?", "About my challenge...", "No I'm fine thanks.");
} else {
interpreter.sendOptions("Select an Option", player.getInventory().containItems(6570) ? "I have a fire cape here." : "What is this place?", "What did you call me?", "I want to challenge Jad directly.", "No I'm fine thanks.");
}
} else {
interpreter.sendOptions("Select an Option", player.getInventory().containItems(6570) ? "I have a fire cape here." : "What is this place?", "What did you call me?", "No I'm fine thanks.");
}
stage = 1;
break;
case 1:
switch (buttonId) {
case 1:
if (player.getInventory().containItems(6570)) {
interpreter.open(DialogueInterpreter.getDialogueKey("firecape-exchange"), npc);
break;
}
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What is this place?");
stage = 10;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What did you call me?");
stage = 20;
break;
case 3:
if (GameWorld.getSettings().getJad_practice_enabled()) {
if (player.getAttribute("fc_practice_jad", false)) {
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "About my challenge...");
stage = 64;
} else {
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "The challenge is too long.", "I want to challenge Jad directly.");
stage = 50;
}
} else {
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No I'm fine thanks.");
stage = 30;
}
break;
case 4:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No I'm fine thanks.");
stage = 30;
break;
}
break;
case 10:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "This is the fight caves, TzHaar-Xil made it for practice,", "but many JalYt come here to fight too.", "Just enter the cave and make sure you're prepared.");
stage = 11;
break;
case 11:
interpreter.sendOptions("Select an Option", "Are there any rules?", "Ok thanks.");
stage = 12;
break;
case 12:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Are there any rules?");
stage = 14;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Ok thanks.");
stage = 13;
break;
}
break;
case 13:
end();
break;
case 14:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Rules? Survival is the only rule in there.");
stage = 15;
break;
case 15:
interpreter.sendOptions("Select an Option", "Do I win anything?", "Sounds good.");
stage = 16;
break;
case 16:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Do I win anything?");
stage = 17;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Sounds good.");
stage = 13;
break;
}
break;
case 17:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "You ask a lot of questions.", "Might give you TokKul if you last long enough.");
stage = 18;
break;
case 18:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "...");
stage = 19;
break;
case 19:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Before you ask, TokKul is like your Coins.");
stage = 500;
break;
case 500:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Gold is like you JalYt, soft and easily broken, we use", "hard rock forged in fire like TzHaar!");
stage = 501;
break;
case 501:
end();
break;
case 20:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "Are you not JalYt-Ket?");
stage = 21;
break;
case 21:
interpreter.sendOptions("Select an Option", "What's a 'JalYt-Ket'?", "I guess so...", "No I'm not!");
stage = 22;
break;
case 22:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "What's a 'JalYt-Ket'?");
stage = 100;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "I guess so...");
stage = 200;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No I'm not!");
stage = 300;
break;
}
break;
case 100:
interpreter.sendDialogues(npc, FacialExpression.HALF_GUILTY, "That what you are... you tough and strong no?");
stage = 101;
break;
case 101:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Well yes I suppose I am...");
stage = 102;
break;
case 102:
end();
break;
case 200:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "I guess so....");
stage = 201;
break;
case 201:
end();
break;
case 300:
end();
break;
case 30:
end();
break;
case 50:
interpreter.sendDialogues(npc, FacialExpression.DISGUSTED_HEAD_SHAKE, "I thought you strong and tough", "but you want skip endurance training?");
stage = 57;
break;
case 57:
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "Maybe you not JalYt-Ket afterall.");
stage = 58;
break;
case 58:
interpreter.sendOptions("Select an Option", "I don't have time for it, man.", "No, I'm JalYt-Ket!");
stage = 51;
break;
case 51:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "I don't have time for it, man.");
stage = 52;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No, I'm JalYt-Ket! I swear!", "I'll do the training properly.");
stage = 30;
break;
}
break;
case 52:
interpreter.sendDialogues(npc, FacialExpression.DISGUSTED_HEAD_SHAKE, "JalYt, you know you not get reward","if you not do training properly, ok?");
stage = 56;
break;
case 56:
interpreter.sendOptions("Select an Option", "That's okay, I don't need a reward.", "Oh, nevermind then.");
stage = 53;
break;
case 53:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That's okay, I don't need a reward.");
stage = 54;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Oh, nevermind then.");
stage = 30;
break;
}
break;
case 54:
interpreter.sendDialogues(player, FacialExpression.NEUTRAL, "I just wanna fight the big guy.");
stage = 55;
break;
case 55:
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "Okay JalYt.","TzTok-Jad not show up for just anyone.");
stage = 59;
break;
case 59:
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "You give 8000 TokKul, TzTok-Jad know you serious.", "You get it back if you victorious.");
stage = 60;
break;
case 60:
interpreter.sendOptions("Select an Option", "That's fair, here's 8000 TokKul.", "I don't have that much on me, but I'll go get it.", "TzTok-Jad must be old and tired to not just accept my challenge.");
stage = 61;
case 61:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "That's fair, here's 8000 TokKul.");
if (!player.getInventory().containsItem(APPEARANCE_FEE)) {
stage = 62;
break;
}
if (player.getInventory().remove(APPEARANCE_FEE)) {
stage = 69;
} else {
stage = 62;
}
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "I don't have that much on me, but I'll go get it.");
stage = 30;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "TzTok-Jad must be old and tired", "to not just accept my challenge.");
stage = 63;
break;
}
break;
case 62:
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "JalYt, you not have the TokKul.", "You come back when you are serious.");
stage = 30;
break;
case 63:
interpreter.sendDialogues(npc, FacialExpression.ANGRY, "JalYt-Mor, you the old and tired one.", "You the one not want to do proper training.");
stage = 30;
break;
case 64:
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "TzTok-Jad is waiting for you.", "Do not make TzTok-Jad wait long.");
stage = 30;
break;
case 69:
interpreter.sendDialogues(npc, FacialExpression.NEUTRAL, "Okay JalYt. Enter cave when you are prepared.", "You find TzTok-Jad waiting for JalYt challenger.");
player.setAttribute("fc_practice_jad", true);
stage = 30;
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { DialogueInterpreter.getDialogueKey("tzhaar-mej"), 2617 };
}
}
@@ -0,0 +1,167 @@
package content.region.karamja.tzhaar.handlers
import core.api.*
import core.game.dialogue.*
import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.game.node.item.Item
import core.game.world.GameWorld.settings
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import org.rs09.consts.Items
import org.rs09.consts.NPCs
/**
* Handles the TzHaarMejJal dialogue.
* @author 'Vexia
* @author Empathy
* @author Logg
*/
@Initializable
class TzHaarMejJal(player: Player? = null) : DialoguePlugin(player){
override fun open(vararg args: Any): Boolean {
npc = args[0] as NPC
npcl(FacialExpression.HALF_GUILTY, "You want help JalYt-Ket-${player.username}?").also { stage = 0 }
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when (stage) {
0 -> showTopics(
if (inInventory(player, Items.FIRE_CAPE_6570)) {
Topic(FacialExpression.HALF_GUILTY, "I have a fire cape here.", 100)
} else {
Topic(FacialExpression.HALF_GUILTY, "What is this place?", 10)
},
Topic(FacialExpression.HALF_GUILTY, "What did you call me?", 20),
IfTopic(FacialExpression.HALF_GUILTY, "About my challenge...", 50, getAttribute(player, "fc_practice_jad", false) && settings!!.jad_practice_enabled),
IfTopic("I want to challenge Jad directly.", 30, !getAttribute(player, "fc_practice_jad", false) && settings!!.jad_practice_enabled, skipPlayer = true),
Topic(FacialExpression.HALF_GUILTY, "No I'm fine thanks.", END_DIALOGUE)
)
10 -> npc(FacialExpression.HALF_GUILTY,
"This is the fight caves, TzHaar-Xil made it for practice,",
"but many JalYt come here to fight too.",
"Just enter the cave and make sure you're prepared."
).also { stage++ }
11 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "Are there any rules?", 12),
Topic(FacialExpression.HALF_GUILTY, "Ok thanks.", END_DIALOGUE)
)
12 -> npcl(FacialExpression.HALF_GUILTY, "Rules? Survival is the only rule in there.").also { stage++ }
13 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "Do I win anything?", 14),
Topic(FacialExpression.HALF_GUILTY, "Sounds good.", END_DIALOGUE)
)
14 -> npc(FacialExpression.HALF_GUILTY,
"You ask a lot of questions.",
"Might give you TokKul if you last long enough."
).also { stage++ }
15 -> playerl(FacialExpression.HALF_GUILTY, "...").also { stage ++ }
16 -> npcl(FacialExpression.HALF_GUILTY, "Before you ask, TokKul is like your Coins.").also { stage++ }
17 -> npc(FacialExpression.HALF_GUILTY,
"Gold is like you JalYt, soft and easily broken, we use",
"hard rock forged in fire like TzHaar!"
).also{ stage = END_DIALOGUE }
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...", END_DIALOGUE),
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 = END_DIALOGUE }
30 -> player(FacialExpression.HALF_GUILTY,
"The challenge is too long.",
"I want to challenge Jad directly."
).also { stage++ }
31 -> npc(FacialExpression.DISGUSTED_HEAD_SHAKE,
"I thought you strong and tough",
"but you want skip endurance training?"
).also { stage++ }
32 -> npcl(FacialExpression.NEUTRAL, "Maybe you not JalYt-Ket afterall.").also { stage++ }
33 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "I don't have time for it, man.", 35),
Topic("No, I'm JalYt-Ket!", 34, skipPlayer = true)
)
34 -> player(FacialExpression.HALF_GUILTY,
"No, I'm JalYt-Ket! I swear!",
"I'll do the training properly."
).also { stage = END_DIALOGUE }
35 -> npc(FacialExpression.DISGUSTED_HEAD_SHAKE,
"JalYt, you know you not get reward",
"if you not do training properly, ok?"
).also { stage++ }
36 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "That's okay, I don't need a reward.", 37),
Topic(FacialExpression.HALF_GUILTY, "Oh, nevermind then.", END_DIALOGUE)
)
37 -> playerl(FacialExpression.NEUTRAL, "I just wanna fight the big guy.").also { stage++ }
38 -> npc(FacialExpression.NEUTRAL,
"Okay JalYt.",
"TzTok-Jad not show up for just anyone."
).also { stage++ }
39 -> npc(FacialExpression.NEUTRAL,
"You give 8000 TokKul, TzTok-Jad know you serious.",
"You get it back if you victorious."
).also { stage++ }
40 -> showTopics(
Topic(FacialExpression.HALF_GUILTY, "That's fair, here's 8000 TokKul.", 41),
Topic(FacialExpression.HALF_GUILTY, "I don't have that much on me, but I'll go get it.", END_DIALOGUE),
Topic("TzTok-Jad must be old and tired to not just accept my challenge.", 42, skipPlayer = true)
)
41 -> if (removeItem(player, Item(Items.TOKKUL_6529, 8000))) {
npc(FacialExpression.NEUTRAL,
"Okay JalYt. Enter cave when you are prepared.",
"You find TzTok-Jad waiting for JalYt challenger."
)
.also { setAttribute(player, "fc_practice_jad", true) }
.also { stage = END_DIALOGUE }
} else npc(FacialExpression.NEUTRAL,
"JalYt, you not have the TokKul.",
"You come back when you are serious."
).also { stage = END_DIALOGUE }
42 -> player(FacialExpression.HALF_GUILTY,
"TzTok-Jad must be old and tired",
"to not just accept my challenge."
).also { stage++ }
43 -> npc(FacialExpression.ANGRY,
"JalYt-Mor, you the old and tired one.",
"You the one not want to do proper training."
).also { stage = END_DIALOGUE }
50 -> npc(FacialExpression.NEUTRAL,
"TzTok-Jad is waiting for you.",
"Do not make TzTok-Jad wait long."
).also { stage = END_DIALOGUE }
100 -> sendDialogueOptions(player, "Sell your fire cape?", "Yes, sell it for 8,000 TokKul.", "No, keep it.").also { stage++ }
101 -> when (buttonId) {
1 -> npcl(FacialExpression.OLD_NORMAL, "Hand your cape here, young JalYte.").also { stage++ }
2 -> end()
}
102 -> end().also { if (removeItem(player, Items.FIRE_CAPE_6570)) addItem(player, Items.TOKKUL_6529, 8000) }
}
return true
}
override fun newInstance(player: Player): DialoguePlugin {
return TzHaarMejJal(player)
}
override fun getIds(): IntArray {
return intArrayOf(NPCs.TZHAAR_MEJ_JAL_2617)
}
}
@@ -1,263 +0,0 @@
package content.region.karamja.tzhaar.handlers;
import core.cache.def.impl.NPCDefinition;
import core.game.dialogue.DialogueInterpreter;
import core.game.dialogue.DialoguePlugin;
import core.game.dialogue.FacialExpression;
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.item.Item;
import core.game.world.repository.Repository;
import core.plugin.Plugin;
import core.plugin.ClassScanner;
import core.plugin.Initializable;
import core.tools.RandomFunction;
/**
* Handles everything in regards to jad pet.
* @author Empathy
*
*/
@Initializable
public class TzRekJadNPC extends OptionHandler {
/**
* The tzhaar mej id.
*/
private static final int TZHAAR_MEJ_ID = 2617;
/**
* The firecape item.
*/
private static final Item FIRECAPE = new Item(6570);
/**
* The tokkul item.
*/
private static final Item TOKKUL = new Item(6529);
/**
* The jad item.
*/
private static final Item JAD_PET = new Item(14828);
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
NPCDefinition.forId(TZHAAR_MEJ_ID).getHandlers().put("option:exchange fire cape", this);
ClassScanner.definePlugins(new TzhaarMejJalDialogue(), new TzRekJadDialogue());
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
switch (option) {
case "exchange fire cape":
player.getDialogueInterpreter().open(DialogueInterpreter.getDialogueKey(player.getInventory().containsItem(FIRECAPE) ? "firecape-exchange" : "tzhaar-mej"), node.asNpc());
break;
}
return true;
}
/**
* Handles the TzhaarMejJal Dialogue to gamble for jad pet.
* @author Empathy
*
*/
public final class TzhaarMejJalDialogue extends DialoguePlugin {
/**
* Constructs a new {@code TzhaarMejJalDialogue} {@code Object}.
*/
public TzhaarMejJalDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code TzhaarMejJalDialogue} {@code Object}.
*
* @param player the player.
*/
public TzhaarMejJalDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new TzhaarMejJalDialogue(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "I have a fire cape here.");
stage = 0;
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
interpreter.sendOptions("Sell your fire cape?", "Yes, sell it for 8,000 TokKul.", "No, keep it.", "Bargain for TzRek-Jad.");
stage = 1;
break;
case 1:
switch(buttonId) {
case 1:
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, player.getInventory().containsItems(FIRECAPE) ? "Hand your cape here, young JalYte." : "You not have firecape, JalYt.");
stage = 10;
break;
case 2:
end();
break;
case 3:
interpreter.sendOptions("Sacrifice your firecape?", "Yes, I know I won't get my cape back.", "No, I like my cape!");
stage = 20;
break;
}
break;
case 10:
if (player.getInventory().containsItem(FIRECAPE)) {
if (player.getInventory().remove(FIRECAPE)) {
TOKKUL.setAmount(8000);
player.getInventory().add(TOKKUL);
TOKKUL.setAmount(1);
}
}
end();
break;
case 20:
switch (buttonId) {
case 1:
if (player.hasItem(JAD_PET)) {
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Best you train one TzRek-Jad only.");
stage = 21;
break;
}
if (player.getFamiliarManager().hasFamiliar()) {
if (player.getFamiliarManager().getFamiliar().getId() == 8650) {
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Best you train one TzRek-Jad only.");
stage = 21;
break;
}
}
if (player.getInventory().remove(FIRECAPE)) {
int r = RandomFunction.getRandom(200);
if (r == 1) {
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "You lucky. Better train him good else TzTok-Jad find", "you, JalYt.");
if (!player.getFamiliarManager().hasFamiliar()) {
player.getFamiliarManager().summon(JAD_PET, true);
player.sendNotificationMessage("You have a funny feeling like you're being followed.");
} else if (player.getInventory().freeSlots() > 0) {
player.getInventory().add(JAD_PET);
player.sendNotificationMessage("You feel something weird sneaking into your backpack.");
}
Repository.sendNews(player.getUsername() + " now commands a miniature TzTok-Jad!");
} else {
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "You not lucky. Maybe next time, JalYt.");
}
}
stage = 21;
break;
case 2:
end();
break;
}
break;
case 21:
end();
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { DialogueInterpreter.getDialogueKey("firecape-exchange") };
}
}
/**
* Handles the TzRekJad dialogue.
* @author Empathy
*
*/
public final class TzRekJadDialogue extends DialoguePlugin {
/**
* Constructs a new {@code TzRekJadDialogue} {@code Object}.
*/
public TzRekJadDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code TzRekJadDialogue} {@code Object}.
*
* @param player the player.
*/
public TzRekJadDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new TzRekJadDialogue(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
int i = RandomFunction.getRandom(1);
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, i == 1 ? "Do you miss your people?" : "Are you hungry?");
stage = (i == 1 ? 0 : 5);
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Mej-TzTok-Jad Kot-Kl!");
stage = 1;
break;
case 1:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No.. I don't think so.");
stage = 2;
break;
case 2:
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Jal-Zek Kl?");
stage = 3;
break;
case 3:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No, no, I wouldn't hurt you.");
stage = 4;
break;
case 4:
end();
break;
case 5:
interpreter.sendDialogues(npc, FacialExpression.OLD_NORMAL, "Kl-Kra!");
stage = 6;
break;
case 6:
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "Ooookay...");
stage = 4;
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { 8650 };
}
}
}