Converted tanners to Kotlin

Fixed snake hide tanning
Fixed interaction with Canifis tanner
This commit is contained in:
thelemir 2024-05-31 09:49:31 +00:00 committed by Ryan
parent 66b1efdaa3
commit da6f05f8ce
9 changed files with 202 additions and 300 deletions

View file

@ -1,136 +0,0 @@
package content.global.handlers.iface;
import core.game.dialogue.DialoguePlugin;
import content.global.skill.crafting.TanningProduct;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.plugin.Initializable;
import core.game.node.item.Item;
/**
* Represents the ellis dialogue plugin.
* @author 'Vexia
* @version 1.0
*/
@Initializable
public final class EllisDialogue extends DialoguePlugin {
/**
* Constructs a new {@code EllisDialogue} {@code Object}.
*/
public EllisDialogue() {
/**
* empty.
*/
}
/**
* Constructs a new {@code EllisDialogue} {@code Object}.
* @param player the player.
*/
public EllisDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new EllisDialogue(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
npc("Greetings friend I am a manufacturer of leather.");
stage = 0;
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
player.getInventory().refresh();
Item items[] = player.getInventory().toArray();
for (int i = 0; i < items.length; i++) {
if (items[i] == null) {
continue;
}
if (TanningProduct.forItemId(items[i].getId()) != null) {
npc("I see you have brought me some hides.", "Would you like me to tan them for you?");
stage = 100;
return true;
}
}
options("Can I buy some leather?", "Leather is rather weak stuff.");
stage = 1;
break;
case 1:
switch (buttonId) {
case 1:
player("Can I buy some leather then?");
stage = 10;
break;
case 2:
player("Leather is rather weak stuff.");
stage = 3000;
break;
}
break;
case 10:
npc("I make leather from animal hides. Bring me some cowhides", "and one gold coin per hide, and I'll tan them into soft", "leather for you.");
stage = 2000;
break;
case 2000:
end();
break;
case 3000:
npc("Normal leather may be quite weak, but it's very cheap - I", "make it from cowhides for only 1 gp per hide - and it's so", "easy to craft that anyone can work with it.");
stage = 3001;
break;
case 3001:
npc("Alternatively you could try hard leather. It's not so easy", "to craft, but I only charge 3 gp per cowhide to prepare it,", "and it makes much sturdier armour.");
stage = 3002;
break;
case 3002:
player("Thanks; I'll bear it in mind.");
stage = 3003;
break;
case 3003:
end();
break;
case 100:
options("Yes please.", "No thanks.");
stage = 101;
break;
case 101:
switch (buttonId) {
case 1:
player("Yes please.");
stage = 210;
break;
case 2:
player("No thanks.");
stage = 200;
break;
}
break;
case 210:
end();
TanningProduct.open(player, 2824);
break;
case 200:
npc("Very well, sir, as you wish.");
stage = 201;
break;
case 201:
end();
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { 2824 };
}
}

View file

@ -15,7 +15,7 @@ public enum TanningProduct {
SOFT_LEATHER(1, 1739, 1741),
HARD_LEATHER(2, 1739, 1743),
SNAKESKIN(3, 6287, 6289),
SNAKESKIN2(4, 6287, 6289),
SNAKESKIN2(4, 7801, 6289),
GREEN_DHIDE(5, 1753, 1745),
BLUEDHIDE(6, 1751, 2505),
REDDHIDE(7, 1749, 2507),
@ -120,9 +120,9 @@ public enum TanningProduct {
} else if (def == HARD_LEATHER) {
coins = 3;
} else if (def == SNAKESKIN) {
coins = 20;
} else if (def == SNAKESKIN2) {
coins = 15;
} else if (def == SNAKESKIN2) {
coins = 20;
} else {
coins = 20;
}

View file

@ -1,56 +1,80 @@
package content.region.asgarnia.dialogue
import content.global.skill.crafting.TanningProduct
import core.api.amountInInventory
import core.api.inInventory
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.game.node.entity.npc.NPC
import core.plugin.Initializable
import org.rs09.consts.Items
import org.rs09.consts.NPCs
import core.tools.END_DIALOGUE
/**
* Handles the Crafting Guild Tanner's dialogue.
* @author bushtail
*/
@Initializable
class TannerDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun newInstance(player: Player) : DialoguePlugin {
override fun newInstance(player: Player): DialoguePlugin {
return TannerDialogue(player)
}
override fun open(vararg args: Any?) : Boolean {
override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC
npcl(FacialExpression.NEUTRAL, "Greetings friend. I am a manufacturer of leather.")
stage = 0
return true
}
override fun handle(interfaceId: Int, buttonId: Int) : Boolean {
when(stage) {
0 -> options("Can I buy some leather then?", "Leather is rather weak stuff.").also{ stage++ }
1 -> when(buttonId) {
1 -> player(FacialExpression.ASKING,"Can I buy some leather then?").also{ stage = 10 }
2 -> player(FacialExpression.SUSPICIOUS, "Leather is rather weak stuff.").also { stage = 20 }
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when (stage) {
0 -> {
var hasHides = false
for (tanningProduct in TanningProduct.values()) {
if (inInventory(player, tanningProduct.item)) {
hasHides = true
break
}
}
if(hasHides) {
npcl(FacialExpression.FRIENDLY, "I see you have brought me some hides. Would you like me to tan them for you?").also { stage = 10 }
} else {
options("Can I buy some leather?", "Leather is rather weak stuff.").also { stage = 20 }
}
}
10 -> npcl(FacialExpression.FRIENDLY, "Certainly!").also { stage = 30 }
20 -> npcl(FacialExpression.NOD_YES, "Normal leather may be quite weak, but it's very cheap - I " +
"make it from cowhides for only 1 gp per hide - and it's so easy to craft that anyone can work with it.").also{ stage++ }
21 -> npcl(FacialExpression.HALF_THINKING, "Alternatively you could try hard leather. It's not so easy " +
"to craft, but I only charge 3 gp per cowhide to prepare it, and it makes much sturdier armour.").also{ stage++ }
22 -> npcl(FacialExpression.FRIENDLY, "I can also tan snake hides and dragonhides, suitable for crafting" +
"into the highest quality armour for rangers.").also{ stage++ }
23 -> player(FacialExpression.NEUTRAL, "Thanks, I'll bear it in mind.").also { stage = END_DIALOGUE }
30 -> {
end()
TanningProduct.open(player, npc.id)
10 -> options("Yes please.", "No thanks.").also { stage++ }
11 -> when (buttonId) {
1 -> playerl(FacialExpression.HAPPY, "Yes please.").also { stage = 12 }
2 -> playerl(FacialExpression.NEUTRAL, "No thanks.").also { stage = 13 }
}
12 -> end().also { TanningProduct.open(player, NPCs.TANNER_804) }
13 -> npcl(FacialExpression.FRIENDLY, "Very well, @g[sir,madam], as you wish.").also { stage = END_DIALOGUE }
20 -> when (buttonId) {
1 -> playerl(FacialExpression.ASKING, "Can I buy some leather?").also { stage = 21 }
2 -> playerl(FacialExpression.SUSPICIOUS, "Leather is rather weak stuff.").also { stage = 22 }
}
21 -> npcl(FacialExpression.FRIENDLY, "I make leather from animal hides. Bring me some cowhides and one gold coin per hide, and I'll tan them into soft leather for you.").also { stage = END_DIALOGUE }
22 -> npcl(FacialExpression.NOD_YES, "Normal leather may be quite weak, but it's very cheap - I make it from cowhides for only 1 gp per hide - and it's so easy to craft that anyone can work with it.").also { stage++ }
23 -> npcl(FacialExpression.HALF_THINKING, "Alternatively you could try hard leather. It's not so easy to craft, but I only charge 3 gp per cowhide to prepare it, and it makes much sturdier armour.").also { stage++ }
24 -> npcl(FacialExpression.FRIENDLY, "I can also tan snake hides and dragonhides, suitable for crafting into the highest quality armour for rangers.").also { stage++ }
25 -> playerl(FacialExpression.NEUTRAL, "Thanks, I'll bear it in mind.").also { stage = END_DIALOGUE }
}
return true
}
override fun getIds() : IntArray {
override fun getIds(): IntArray {
return intArrayOf(NPCs.TANNER_804)
}

View file

@ -2,14 +2,14 @@ package content.region.asgarnia.handlers
import content.global.skill.crafting.TanningProduct
import core.api.*
import core.game.interaction.IntType
import core.game.node.entity.skill.Skills
import core.game.world.map.Location
import org.rs09.consts.Items
import org.rs09.consts.NPCs
import org.rs09.consts.Scenery
import content.region.asgarnia.dialogue.TheDoorDialogues
import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import org.rs09.consts.NPCs
/**
* @author bushtail
@ -17,13 +17,18 @@ import org.rs09.consts.NPCs
class CraftingGuildListeners : InteractionListener {
private val GUILD_DOOR = Scenery.GUILD_DOOR_2647
private val REQUIRED_ITEMS = intArrayOf(Items.BROWN_APRON_1757, Items.CRAFTING_CAPE_9780, Items.CRAFTING_CAPET_9781)
private val APRON = Items.BROWN_APRON_1757
private val CAPE = Items.CRAFTING_CAPE_9780
override fun defineListeners() {
on(GUILD_DOOR, IntType.SCENERY, "open") { player, door ->
if (player.location == Location.create(2933, 3289, 0)) {
if (hasLevelStat(player, Skills.CRAFTING, 40)) {
if (anyInEquipment(player, *REQUIRED_ITEMS)) {
if (inEquipment(player, APRON)) {
openDialogue(player, TheDoorDialogues(0))
core.game.global.action.DoorActionHandler.handleAutowalkDoor(player, door.asScenery())
return@on true
} else if (inEquipment(player, CAPE)) {
openDialogue(player, TheDoorDialogues(0))
core.game.global.action.DoorActionHandler.handleAutowalkDoor(player, door.asScenery())
return@on true
@ -46,4 +51,4 @@ class CraftingGuildListeners : InteractionListener {
return@on true
}
}
}
}

View file

@ -0,0 +1,75 @@
package content.region.desert.alkharid.dialogue
import content.global.skill.crafting.TanningProduct
import core.api.inInventory
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
import core.game.node.entity.player.Player
import core.game.node.entity.npc.NPC
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import org.rs09.consts.NPCs
/**
* Handles Ellis's dialogue.
*/
@Initializable
class EllisDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC
npcl(FacialExpression.FRIENDLY, "Greetings friend. I am a manufacturer of leather.").also { stage = 0 }
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when (stage) {
0 -> {
var hasHides = false
for (tanningProduct in TanningProduct.values()) {
if (inInventory(player, tanningProduct.item)) {
hasHides = true
break
}
}
if(hasHides) {
npcl(FacialExpression.FRIENDLY, "I see you have brought me some hides. Would you like me to tan them for you?").also { stage = 10 }
} else {
options("Can I buy some leather?", "Leather is rather weak stuff.").also { stage = 20 }
}
}
10 -> options("Yes please.", "No thanks.").also { stage++ }
11 -> when (buttonId) {
1 -> playerl(FacialExpression.HAPPY, "Yes please.").also { stage = 12 }
2 -> playerl(FacialExpression.NEUTRAL, "No thanks.").also { stage = 13 }
}
12 -> end().also { TanningProduct.open(player, NPCs.ELLIS_2824) }
13 -> npcl(FacialExpression.FRIENDLY, "Very well, @g[sir,madam], as you wish.").also { stage = END_DIALOGUE }
20 -> when (buttonId) {
1 -> playerl(FacialExpression.ASKING, "Can I buy some leather?").also { stage = 21 }
2 -> playerl(FacialExpression.SUSPICIOUS, "Leather is rather weak stuff.").also { stage = 22 }
}
21 -> npcl(FacialExpression.FRIENDLY, "I make leather from animal hides. Bring me some cowhides and one gold coin per hide, and I'll tan them into soft leather for you.").also { stage = END_DIALOGUE }
22 -> npcl(FacialExpression.NOD_YES, "Normal leather may be quite weak, but it's very cheap - I make it from cowhides for only 1 gp per hide - and it's so easy to craft that anyone can work with it.").also { stage++ }
23 -> npcl(FacialExpression.HALF_THINKING, "Alternatively you could try hard leather. It's not so easy to craft, but I only charge 3 gp per cowhide to prepare it, and it makes much sturdier armour.").also { stage++ }
24 -> npcl(FacialExpression.FRIENDLY, "I can also tan snake hides and dragonhides, suitable for crafting into the highest quality armour for rangers.").also { stage++ }
25 -> playerl(FacialExpression.NEUTRAL, "Thanks, I'll bear it in mind.").also { stage = END_DIALOGUE }
}
return true
}
override fun newInstance(player: Player?): DialoguePlugin {
return EllisDialogue(player)
}
override fun getIds(): IntArray {
return intArrayOf(NPCs.ELLIS_2824)
}
}

View file

@ -1,30 +0,0 @@
package content.region.desert.alkharid.handlers;
import core.cache.def.impl.NPCDefinition;
import core.plugin.Initializable;
import content.global.skill.crafting.TanningProduct;
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.plugin.Plugin;
/**
* @author 'Vexia
*/
@Initializable
public class TanningNPC extends OptionHandler {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
NPCDefinition.forId(1041).getHandlers().put("option:trade", this);
return this;
}
@Override
public boolean handle(Player player, Node node, String option) {
TanningProduct.open(player, ((NPC) node).getId());
return true;
}
}

View file

@ -1,103 +0,0 @@
package content.region.morytania.canifis.dialogue;
import core.game.dialogue.DialoguePlugin;
import core.game.dialogue.FacialExpression;
import core.plugin.Initializable;
import content.global.skill.crafting.TanningProduct;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
/**
* Handles the SbottDialogue dialogue.
* @author 'Vexia
*/
@Initializable
public class SbottDialogue extends DialoguePlugin {
public SbottDialogue() {
}
public SbottDialogue(Player player) {
super(player);
}
@Override
public DialoguePlugin newInstance(Player player) {
return new SbottDialogue(player);
}
@Override
public boolean open(Object... args) {
npc = (NPC) args[0];
interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Hello stranger. Would you like to me to tan any hides for", "you?");
stage = 0;
return true;
}
@Override
public boolean handle(int interfaceId, int buttonId) {
switch (stage) {
case 0:
// interpreter.sendDialogues(npc, FacialExpression.NORMAL,
// "Soft leather - 2 gp per hide","Hard leather - 5 gp per hide","Snakeskins - 25 gp per hide","Dragon leather - 45 gp per hide.");
interpreter.sendDialogues(npc, FacialExpression.HAPPY, "Soft leather - 1 gp per hide", "Hard leather - 3 gp per hide", "Snakeskins - 20 gp per hide", "Dragon leather - 20 gp per hide.");
stage = 1;
break;
case 1:
player.getInventory().refresh();
Item items[] = player.getInventory().toArray();
for (int i = 0; i < items.length; i++) {
if (items[i] == null) {
continue;
}
if (TanningProduct.forItemId(items[i].getId()) != null) {
interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "I see you have brought me some hides.", "Would you like me to tan them for you?");
stage = 100;
return true;
}
}
interpreter.sendDialogues(player, FacialExpression.HALF_GUILTY, "No thanks, I haven't any hides.");
stage = 2;
break;
case 2:
end();
break;
case 100:
interpreter.sendOptions("Select an Option", "Yes please.", "No thanks.");
stage = 101;
break;
case 101:
switch (buttonId) {
case 1:
interpreter.sendDialogues(player, FacialExpression.HAPPY, "Yes please.");
stage = 210;
break;
case 2:
interpreter.sendDialogues(player, FacialExpression.NEUTRAL, "No thanks.");
stage = 200;
break;
}
break;
case 210:
end();
TanningProduct.open(player, 2824);
break;
case 200:
interpreter.sendDialogues(npc, FacialExpression.FRIENDLY, "Very well, sir, as you wish.");
stage = 201;
break;
case 201:
end();
break;
}
return true;
}
@Override
public int[] getIds() {
return new int[] { 1041 };
}
}

View file

@ -0,0 +1,67 @@
package content.region.morytania.canifis.dialogue
import content.global.skill.crafting.TanningProduct
import core.api.inInventory
import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression
import core.game.node.entity.player.Player
import core.game.node.entity.npc.NPC
import core.plugin.Initializable
import core.tools.END_DIALOGUE
import org.rs09.consts.NPCs
/**
* Handles Sbott's dialogue.
*/
@Initializable
class SbottDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC
npcl(FacialExpression.HAPPY, "Hello stranger. Would you like to me to tan any hides for you?").also { stage = 0 }
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when (stage) {
//0 -> npc(FacialExpression.HAPPY, "Soft leather - 2 gp per hide", "Hard leather - 5 gp per hide", "Snakeskins - 25 gp per hide", "Dragon leather - 45 gp per hide.").also { stage++ }
0 -> npc(FacialExpression.HAPPY, "Soft leather - 1 gp per hide", "Hard leather - 3 gp per hide", "Snakeskins - 20 gp per hide", "Dragon leather - 20 gp per hide.").also { stage++ }
1 -> {
var hasHides = false
for (tanningProduct in TanningProduct.values()) {
if (inInventory(player, tanningProduct.item)) {
hasHides = true
break
}
}
if(hasHides) {
npcl(FacialExpression.FRIENDLY, "I see you have brought me some hides. Would you like me to tan them for you?").also { stage = 10 }
} else {
playerl(FacialExpression.HALF_GUILTY, "No thanks, I haven't any hides.").also { stage = END_DIALOGUE }
}
}
10 -> options("Yes please.", "No thanks.").also { stage++ }
11 -> when (buttonId) {
1 -> playerl(FacialExpression.HAPPY, "Yes please.").also { stage = 12 }
2 -> playerl(FacialExpression.NEUTRAL, "No thanks.").also { stage = 13 }
}
12 -> end().also { TanningProduct.open(player, NPCs.SBOTT_1041) }
13 -> npcl(FacialExpression.FRIENDLY, "Very well, @g[sir,madam], as you wish.").also { stage = END_DIALOGUE }
}
return true
}
override fun newInstance(player: Player?): DialoguePlugin {
return SbottDialogue(player)
}
override fun getIds(): IntArray {
return intArrayOf(NPCs.SBOTT_1041)
}
}

View file

@ -126,8 +126,8 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe
override fun defineListeners() {
on(IntType.NPC, "trade", "shop"){ player, node ->
val npc = node as NPC
if (npc.id == 2824) {
TanningProduct.open(player, 2824)
if (npc.id == 2824 || npc.id == 1041 || npc.id == 804) {
TanningProduct.open(player, npc.id)
return@on true
}
if (npc.id == 7601) {