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

View file

@ -1,56 +1,80 @@
package content.region.asgarnia.dialogue package content.region.asgarnia.dialogue
import content.global.skill.crafting.TanningProduct import content.global.skill.crafting.TanningProduct
import core.api.amountInInventory
import core.api.inInventory
import core.game.dialogue.DialoguePlugin import core.game.dialogue.DialoguePlugin
import core.game.dialogue.FacialExpression import core.game.dialogue.FacialExpression
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.npc.NPC
import core.plugin.Initializable import core.plugin.Initializable
import org.rs09.consts.Items
import org.rs09.consts.NPCs import org.rs09.consts.NPCs
import core.tools.END_DIALOGUE import core.tools.END_DIALOGUE
/** /**
* Handles the Crafting Guild Tanner's dialogue.
* @author bushtail * @author bushtail
*/ */
@Initializable @Initializable
class TannerDialogue(player: Player? = null) : DialoguePlugin(player) { class TannerDialogue(player: Player? = null) : DialoguePlugin(player) {
override fun newInstance(player: Player) : DialoguePlugin { override fun newInstance(player: Player): DialoguePlugin {
return TannerDialogue(player) return TannerDialogue(player)
} }
override fun open(vararg args: Any?) : Boolean { override fun open(vararg args: Any?): Boolean {
npc = args[0] as NPC npc = args[0] as NPC
npcl(FacialExpression.NEUTRAL, "Greetings friend. I am a manufacturer of leather.") npcl(FacialExpression.NEUTRAL, "Greetings friend. I am a manufacturer of leather.")
stage = 0 stage = 0
return true return true
} }
override fun handle(interfaceId: Int, buttonId: Int) : Boolean { override fun handle(interfaceId: Int, buttonId: Int): Boolean {
when(stage) { when (stage) {
0 -> options("Can I buy some leather then?", "Leather is rather weak stuff.").also{ stage++ } 0 -> {
1 -> when(buttonId) { var hasHides = false
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 } for (tanningProduct in TanningProduct.values()) {
if (inInventory(player, tanningProduct.item)) {
hasHides = true
break
}
} }
10 -> npcl(FacialExpression.FRIENDLY, "Certainly!").also { stage = 30 } if(hasHides) {
20 -> npcl(FacialExpression.NOD_YES, "Normal leather may be quite weak, but it's very cheap - I " + npcl(FacialExpression.FRIENDLY, "I see you have brought me some hides. Would you like me to tan them for you?").also { stage = 10 }
"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++ } } else {
21 -> npcl(FacialExpression.HALF_THINKING, "Alternatively you could try hard leather. It's not so easy " + options("Can I buy some leather?", "Leather is rather weak stuff.").also { stage = 20 }
"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 return true
} }
override fun getIds() : IntArray {
override fun getIds(): IntArray {
return intArrayOf(NPCs.TANNER_804) return intArrayOf(NPCs.TANNER_804)
} }

View file

@ -2,14 +2,14 @@ package content.region.asgarnia.handlers
import content.global.skill.crafting.TanningProduct import content.global.skill.crafting.TanningProduct
import core.api.* import core.api.*
import core.game.interaction.IntType
import core.game.node.entity.skill.Skills import core.game.node.entity.skill.Skills
import core.game.world.map.Location import core.game.world.map.Location
import org.rs09.consts.Items import org.rs09.consts.Items
import org.rs09.consts.NPCs
import org.rs09.consts.Scenery import org.rs09.consts.Scenery
import content.region.asgarnia.dialogue.TheDoorDialogues import content.region.asgarnia.dialogue.TheDoorDialogues
import core.game.interaction.InteractionListener import core.game.interaction.InteractionListener
import core.game.interaction.IntType
import org.rs09.consts.NPCs
/** /**
* @author bushtail * @author bushtail
@ -17,13 +17,18 @@ import org.rs09.consts.NPCs
class CraftingGuildListeners : InteractionListener { class CraftingGuildListeners : InteractionListener {
private val GUILD_DOOR = Scenery.GUILD_DOOR_2647 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() { override fun defineListeners() {
on(GUILD_DOOR, IntType.SCENERY, "open") { player, door -> on(GUILD_DOOR, IntType.SCENERY, "open") { player, door ->
if (player.location == Location.create(2933, 3289, 0)) { if (player.location == Location.create(2933, 3289, 0)) {
if (hasLevelStat(player, Skills.CRAFTING, 40)) { 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)) openDialogue(player, TheDoorDialogues(0))
core.game.global.action.DoorActionHandler.handleAutowalkDoor(player, door.asScenery()) core.game.global.action.DoorActionHandler.handleAutowalkDoor(player, door.asScenery())
return@on true 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() { override fun defineListeners() {
on(IntType.NPC, "trade", "shop"){ player, node -> on(IntType.NPC, "trade", "shop"){ player, node ->
val npc = node as NPC val npc = node as NPC
if (npc.id == 2824) { if (npc.id == 2824 || npc.id == 1041 || npc.id == 804) {
TanningProduct.open(player, 2824) TanningProduct.open(player, npc.id)
return@on true return@on true
} }
if (npc.id == 7601) { if (npc.id == 7601) {