diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfListener.kt b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfListener.kt new file mode 100644 index 000000000..8c8d08de6 --- /dev/null +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfListener.kt @@ -0,0 +1,58 @@ +package content.global.skill.construction.decoration.kitchen + +import core.api.* +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.entity.player.Player +import org.rs09.consts.Items +import org.rs09.consts.Scenery + +class ShelfListener : InteractionListener { + + companion object{ + + const val NEXT = 5 + const val PREV = -5 + + val woodshelf_1_items = listOf( + "Kettle" to Items.KETTLE_7688, + "Teapot" to Items.TEAPOT_7702, + "Clay Cup" to Items.EMPTY_CUP_7728 + ) + + val woodshelf_2_items = woodshelf_1_items + mapOf( + "Empty beer glass" to Items.BEER_GLASS_1919 + ) + + val shelves = mapOf( + Scenery.SHELVES_13545 to woodshelf_1_items + ) + } + override fun defineListeners() { + on(shelves.keys.toIntArray(), IntType.SCENERY, "Search") {player, node -> + searchShelf(player, node.id) + return@on true + } + } + + fun searchShelf(player : Player, shelf_id: Int, offset : Int = 0){ + val shelfItems = shelves[shelf_id]!!.slice(offset..offset+4) + val shelfItemsNames = shelfItems.map { it.first } + val shelfItemsIds = shelfItems.map { it.second } + sendDialogueOptions(player, "Select an Option", *shelfItemsNames.toTypedArray()) + addDialogueAction(player) { p, button -> + val item = shelfItemsIds[button] + if (item < 1000){ + searchShelf(player, shelf_id, offset+item) + } + else{ + if (hasSpaceFor(player, item, 1)){ + addItem(player, item) + } + else{ + sendMessage(player, "You need at least one free inventory space to take from the shelves.") + } + } + } + } +} \ No newline at end of file diff --git a/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java index 9fed7ebce..bf1523f71 100644 --- a/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java +++ b/Server/src/main/content/global/skill/construction/decoration/kitchen/ShelfPlugin.java @@ -1,239 +1,239 @@ -package content.global.skill.construction.decoration.kitchen; - - -import core.cache.def.impl.SceneryDefinition; -import core.game.dialogue.DialoguePlugin; -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 core.plugin.ClassScanner; -import org.rs09.consts.Items; - -/** - * Handles the shelves in the kitchen room. - * @author Splinter - */ -@Initializable -public final class ShelfPlugin extends OptionHandler { - - @Override - public Plugin newInstance(Object arg) throws Throwable { - ClassScanner.definePlugin(new ShelfDialogue()); - for (int i = 13545; i < 13552; i++) { - SceneryDefinition.forId(i).getHandlers().put("option:search", this); - } - return this; - } - - @Override - public boolean handle(Player player, Node node, String option) { - player.getDialogueInterpreter().open(778341, node.getId()); - return true; - } - - /** - * Dialogue options for the shelves, what a mess! - * @author Splinter - * @version 1.0 - */ - public final class ShelfDialogue extends DialoguePlugin { - - /** - * Constructs a new {@code ShelfDialogue} {@code Object}. - */ - public ShelfDialogue() { - /** - * empty. - */ - } - - /** - * Constructs a new {@code ShelfDialogue} {@code Object}. - * @param player the player. - */ - public ShelfDialogue(Player player) { - super(player); - } - - @Override - public DialoguePlugin newInstance(Player player) { - return new ShelfDialogue(player); - } - - @Override - public boolean open(Object... args) { - int id = (int) args[0]; - switch (id) { - case 13545:// wood 1 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup"); - stage = 1; - break; - case 13546:// wood 2 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass"); - stage = 1; - break; - case 13547:// wood 3 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Cake tin"); - stage = 1; - break; - case 13548:// oak 1 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Bowl"); - stage = 2; - break; - case 13549:// oak 2 - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); - stage = 3; - break; - case 13550:// teak 1 - case 13551: - interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); - stage = 5; - break; - } - return true; - } - - @Override - public boolean handle(int interfaceId, int buttonId) { - if (player.getInventory().freeSlots() < 1) { - player.sendMessage("You need at least one free inventory space to take from the shelves."); - end(); - return true; - } - switch (stage) { - case 1:// all wood shelves - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - end(); - player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); - break; - } - break; - case 2:// Oak shelf #1 - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - end(); - player.getInventory().add(new Item(Items.BOWL_1923, 1)); - break; - } - break; - case 3:// Oak shelves #2 only - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.PORCELAIN_CUP_4244, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - interpreter.sendOptions("Select an Option", "Bowl", "Cake tin"); - stage = 4; - break; - } - break; - case 4:// Oak shelves #2 only - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.BOWL_1923, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); - break; - } - case 5:// teak shelves - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.KETTLE_7688, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.PORCELAIN_CUP_7735, 1)); - break; - case 4: - end(); - player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); - break; - case 5: - interpreter.sendOptions("Select an Option", "Bowl", "Pie dish", "Empty pot"); - stage = 6; - break; - } - break; - case 6:// teak shelves - switch (buttonId) { - case 1: - end(); - player.getInventory().add(new Item(Items.BOWL_1923, 1)); - break; - case 2: - end(); - player.getInventory().add(new Item(Items.PIE_DISH_2313, 1)); - break; - case 3: - end(); - player.getInventory().add(new Item(Items.EMPTY_POT_1931, 1)); - break; - } - break; - } - return true; - } - - @Override - public int[] getIds() { - return new int[] { 778341 }; - } - } -} \ No newline at end of file +// package content.global.skill.construction.decoration.kitchen; +// +// +// import core.cache.def.impl.SceneryDefinition; +// import core.game.dialogue.DialoguePlugin; +// 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 core.plugin.ClassScanner; +// import org.rs09.consts.Items; +// +// /** +// * Handles the shelves in the kitchen room. +// * @author Splinter +// */ +// @Initializable +// public final class ShelfPlugin extends OptionHandler { +// +// @Override +// public Plugin newInstance(Object arg) throws Throwable { +// ClassScanner.definePlugin(new ShelfDialogue()); +// for (int i = 13545; i < 13552; i++) { +// SceneryDefinition.forId(i).getHandlers().put("option:search", this); +// } +// return this; +// } +// +// @Override +// public boolean handle(Player player, Node node, String option) { +// player.getDialogueInterpreter().open(778341, node.getId()); +// return true; +// } +// +// /** +// * Dialogue options for the shelves, what a mess! +// * @author Splinter +// * @version 1.0 +// */ +// public final class ShelfDialogue extends DialoguePlugin { +// +// /** +// * Constructs a new {@code ShelfDialogue} {@code Object}. +// */ +// public ShelfDialogue() { +// /** +// * empty. +// */ +// } +// +// /** +// * Constructs a new {@code ShelfDialogue} {@code Object}. +// * @param player the player. +// */ +// public ShelfDialogue(Player player) { +// super(player); +// } +// +// @Override +// public DialoguePlugin newInstance(Player player) { +// return new ShelfDialogue(player); +// } +// +// @Override +// public boolean open(Object... args) { +// int id = (int) args[0]; +// switch (id) { +// case 13545:// wood 1 +// interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup"); +// stage = 1; +// break; +// case 13546:// wood 2 +// interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass"); +// stage = 1; +// break; +// case 13547:// wood 3 +// interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Cake tin"); +// stage = 1; +// break; +// case 13548:// oak 1 +// interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Bowl"); +// stage = 2; +// break; +// case 13549:// oak 2 +// interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); +// stage = 3; +// break; +// case 13550:// teak 1 +// case 13551: +// interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); +// stage = 5; +// break; +// } +// return true; +// } +// +// @Override +// public boolean handle(int interfaceId, int buttonId) { +// if (player.getInventory().freeSlots() < 1) { +// player.sendMessage("You need at least one free inventory space to take from the shelves."); +// end(); +// return true; +// } +// switch (stage) { +// case 1:// all wood shelves +// switch (buttonId) { +// case 1: +// end(); +// player.getInventory().add(new Item(Items.KETTLE_7688, 1)); +// break; +// case 2: +// end(); +// player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); +// break; +// case 3: +// end(); +// player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); +// break; +// case 4: +// end(); +// player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); +// break; +// case 5: +// end(); +// player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); +// break; +// } +// break; +// case 2:// Oak shelf #1 +// switch (buttonId) { +// case 1: +// end(); +// player.getInventory().add(new Item(Items.KETTLE_7688, 1)); +// break; +// case 2: +// end(); +// player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); +// break; +// case 3: +// end(); +// player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); +// break; +// case 4: +// end(); +// player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); +// break; +// case 5: +// end(); +// player.getInventory().add(new Item(Items.BOWL_1923, 1)); +// break; +// } +// break; +// case 3:// Oak shelves #2 only +// switch (buttonId) { +// case 1: +// end(); +// player.getInventory().add(new Item(Items.KETTLE_7688, 1)); +// break; +// case 2: +// end(); +// player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); +// break; +// case 3: +// end(); +// player.getInventory().add(new Item(Items.PORCELAIN_CUP_4244, 1)); +// break; +// case 4: +// end(); +// player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); +// break; +// case 5: +// interpreter.sendOptions("Select an Option", "Bowl", "Cake tin"); +// stage = 4; +// break; +// } +// break; +// case 4:// Oak shelves #2 only +// switch (buttonId) { +// case 1: +// end(); +// player.getInventory().add(new Item(Items.BOWL_1923, 1)); +// break; +// case 2: +// end(); +// player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); +// break; +// } +// case 5:// teak shelves +// switch (buttonId) { +// case 1: +// end(); +// player.getInventory().add(new Item(Items.KETTLE_7688, 1)); +// break; +// case 2: +// end(); +// player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); +// break; +// case 3: +// end(); +// player.getInventory().add(new Item(Items.PORCELAIN_CUP_7735, 1)); +// break; +// case 4: +// end(); +// player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); +// break; +// case 5: +// interpreter.sendOptions("Select an Option", "Bowl", "Pie dish", "Empty pot"); +// stage = 6; +// break; +// } +// break; +// case 6:// teak shelves +// switch (buttonId) { +// case 1: +// end(); +// player.getInventory().add(new Item(Items.BOWL_1923, 1)); +// break; +// case 2: +// end(); +// player.getInventory().add(new Item(Items.PIE_DISH_2313, 1)); +// break; +// case 3: +// end(); +// player.getInventory().add(new Item(Items.EMPTY_POT_1931, 1)); +// break; +// } +// break; +// } +// return true; +// } +// +// @Override +// public int[] getIds() { +// return new int[] { 778341 }; +// } +// } +// } \ No newline at end of file diff --git a/Server/src/main/core/api/ContentAPI.kt b/Server/src/main/core/api/ContentAPI.kt index cca729909..d09093879 100644 --- a/Server/src/main/core/api/ContentAPI.kt +++ b/Server/src/main/core/api/ContentAPI.kt @@ -684,6 +684,16 @@ fun hasSpaceFor(player: Player, item: Item): Boolean { return player.inventory.hasSpaceFor(item) } +/** + * Checks if a player has space for an item + * @param player the player whose inventory to check + * @param item the Item to check against + * @return true if the player's inventory has space for the item + */ +fun hasSpaceFor(player: Player, item: Int, amount: Int): Boolean { + return hasSpaceFor(player, Item(item, amount)) +} + /** * Get the number of ticks passed since server startup */