Start working on implementing new shelves

This commit is contained in:
gregf36665 2024-12-22 16:55:05 +00:00 committed by Syndromeramo
parent 8fea59e1cc
commit a0cd34a1af
3 changed files with 307 additions and 239 deletions

View file

@ -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.")
}
}
}
}
}

View file

@ -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<Object> 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 };
}
}
}
// 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<Object> 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 };
// }
// }
// }

View file

@ -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
*/