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; // package content.global.skill.construction.decoration.kitchen;
//
//
import core.cache.def.impl.SceneryDefinition; // import core.cache.def.impl.SceneryDefinition;
import core.game.dialogue.DialoguePlugin; // import core.game.dialogue.DialoguePlugin;
import core.game.interaction.OptionHandler; // import core.game.interaction.OptionHandler;
import core.game.node.Node; // import core.game.node.Node;
import core.game.node.entity.player.Player; // import core.game.node.entity.player.Player;
import core.game.node.item.Item; // import core.game.node.item.Item;
import core.plugin.Initializable; // import core.plugin.Initializable;
import core.plugin.Plugin; // import core.plugin.Plugin;
import core.plugin.ClassScanner; // import core.plugin.ClassScanner;
import org.rs09.consts.Items; // import org.rs09.consts.Items;
//
/** // /**
* Handles the shelves in the kitchen room. // * Handles the shelves in the kitchen room.
* @author Splinter // * @author Splinter
*/ // */
@Initializable // @Initializable
public final class ShelfPlugin extends OptionHandler { // public final class ShelfPlugin extends OptionHandler {
//
@Override // @Override
public Plugin<Object> newInstance(Object arg) throws Throwable { // public Plugin<Object> newInstance(Object arg) throws Throwable {
ClassScanner.definePlugin(new ShelfDialogue()); // ClassScanner.definePlugin(new ShelfDialogue());
for (int i = 13545; i < 13552; i++) { // for (int i = 13545; i < 13552; i++) {
SceneryDefinition.forId(i).getHandlers().put("option:search", this); // SceneryDefinition.forId(i).getHandlers().put("option:search", this);
} // }
return this; // return this;
} // }
//
@Override // @Override
public boolean handle(Player player, Node node, String option) { // public boolean handle(Player player, Node node, String option) {
player.getDialogueInterpreter().open(778341, node.getId()); // player.getDialogueInterpreter().open(778341, node.getId());
return true; // return true;
} // }
//
/** // /**
* Dialogue options for the shelves, what a mess! // * Dialogue options for the shelves, what a mess!
* @author Splinter // * @author Splinter
* @version 1.0 // * @version 1.0
*/ // */
public final class ShelfDialogue extends DialoguePlugin { // public final class ShelfDialogue extends DialoguePlugin {
//
/** // /**
* Constructs a new {@code ShelfDialogue} {@code Object}. // * Constructs a new {@code ShelfDialogue} {@code Object}.
*/ // */
public ShelfDialogue() { // public ShelfDialogue() {
/** // /**
* empty. // * empty.
*/ // */
} // }
//
/** // /**
* Constructs a new {@code ShelfDialogue} {@code Object}. // * Constructs a new {@code ShelfDialogue} {@code Object}.
* @param player the player. // * @param player the player.
*/ // */
public ShelfDialogue(Player player) { // public ShelfDialogue(Player player) {
super(player); // super(player);
} // }
//
@Override // @Override
public DialoguePlugin newInstance(Player player) { // public DialoguePlugin newInstance(Player player) {
return new ShelfDialogue(player); // return new ShelfDialogue(player);
} // }
//
@Override // @Override
public boolean open(Object... args) { // public boolean open(Object... args) {
int id = (int) args[0]; // int id = (int) args[0];
switch (id) { // switch (id) {
case 13545:// wood 1 // case 13545:// wood 1
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup"); // interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup");
stage = 1; // stage = 1;
break; // break;
case 13546:// wood 2 // case 13546:// wood 2
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass"); // interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass");
stage = 1; // stage = 1;
break; // break;
case 13547:// wood 3 // case 13547:// wood 3
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Cake tin"); // interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Cake tin");
stage = 1; // stage = 1;
break; // break;
case 13548:// oak 1 // case 13548:// oak 1
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Bowl"); // interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Clay cup", "Empty beer glass", "Bowl");
stage = 2; // stage = 2;
break; // break;
case 13549:// oak 2 // case 13549:// oak 2
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); // interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options");
stage = 3; // stage = 3;
break; // break;
case 13550:// teak 1 // case 13550:// teak 1
case 13551: // case 13551:
interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options"); // interpreter.sendOptions("Select an Option", "Kettle", "Teapot", "Porcelain cup", "Empty beer glass", "More Options");
stage = 5; // stage = 5;
break; // break;
} // }
return true; // return true;
} // }
//
@Override // @Override
public boolean handle(int interfaceId, int buttonId) { // public boolean handle(int interfaceId, int buttonId) {
if (player.getInventory().freeSlots() < 1) { // if (player.getInventory().freeSlots() < 1) {
player.sendMessage("You need at least one free inventory space to take from the shelves."); // player.sendMessage("You need at least one free inventory space to take from the shelves.");
end(); // end();
return true; // return true;
} // }
switch (stage) { // switch (stage) {
case 1:// all wood shelves // case 1:// all wood shelves
switch (buttonId) { // switch (buttonId) {
case 1: // case 1:
end(); // end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1)); // player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break; // break;
case 2: // case 2:
end(); // end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); // player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break; // break;
case 3: // case 3:
end(); // end();
player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); // player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1));
break; // break;
case 4: // case 4:
end(); // end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); // player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break; // break;
case 5: // case 5:
end(); // end();
player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); // player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1));
break; // break;
} // }
break; // break;
case 2:// Oak shelf #1 // case 2:// Oak shelf #1
switch (buttonId) { // switch (buttonId) {
case 1: // case 1:
end(); // end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1)); // player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break; // break;
case 2: // case 2:
end(); // end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); // player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break; // break;
case 3: // case 3:
end(); // end();
player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1)); // player.getInventory().add(new Item(Items.EMPTY_CUP_7728, 1));
break; // break;
case 4: // case 4:
end(); // end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); // player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break; // break;
case 5: // case 5:
end(); // end();
player.getInventory().add(new Item(Items.BOWL_1923, 1)); // player.getInventory().add(new Item(Items.BOWL_1923, 1));
break; // break;
} // }
break; // break;
case 3:// Oak shelves #2 only // case 3:// Oak shelves #2 only
switch (buttonId) { // switch (buttonId) {
case 1: // case 1:
end(); // end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1)); // player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break; // break;
case 2: // case 2:
end(); // end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); // player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break; // break;
case 3: // case 3:
end(); // end();
player.getInventory().add(new Item(Items.PORCELAIN_CUP_4244, 1)); // player.getInventory().add(new Item(Items.PORCELAIN_CUP_4244, 1));
break; // break;
case 4: // case 4:
end(); // end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); // player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break; // break;
case 5: // case 5:
interpreter.sendOptions("Select an Option", "Bowl", "Cake tin"); // interpreter.sendOptions("Select an Option", "Bowl", "Cake tin");
stage = 4; // stage = 4;
break; // break;
} // }
break; // break;
case 4:// Oak shelves #2 only // case 4:// Oak shelves #2 only
switch (buttonId) { // switch (buttonId) {
case 1: // case 1:
end(); // end();
player.getInventory().add(new Item(Items.BOWL_1923, 1)); // player.getInventory().add(new Item(Items.BOWL_1923, 1));
break; // break;
case 2: // case 2:
end(); // end();
player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1)); // player.getInventory().add(new Item(Items.CAKE_TIN_1887, 1));
break; // break;
} // }
case 5:// teak shelves // case 5:// teak shelves
switch (buttonId) { // switch (buttonId) {
case 1: // case 1:
end(); // end();
player.getInventory().add(new Item(Items.KETTLE_7688, 1)); // player.getInventory().add(new Item(Items.KETTLE_7688, 1));
break; // break;
case 2: // case 2:
end(); // end();
player.getInventory().add(new Item(Items.TEAPOT_7702, 1)); // player.getInventory().add(new Item(Items.TEAPOT_7702, 1));
break; // break;
case 3: // case 3:
end(); // end();
player.getInventory().add(new Item(Items.PORCELAIN_CUP_7735, 1)); // player.getInventory().add(new Item(Items.PORCELAIN_CUP_7735, 1));
break; // break;
case 4: // case 4:
end(); // end();
player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1)); // player.getInventory().add(new Item(Items.BEER_GLASS_1919, 1));
break; // break;
case 5: // case 5:
interpreter.sendOptions("Select an Option", "Bowl", "Pie dish", "Empty pot"); // interpreter.sendOptions("Select an Option", "Bowl", "Pie dish", "Empty pot");
stage = 6; // stage = 6;
break; // break;
} // }
break; // break;
case 6:// teak shelves // case 6:// teak shelves
switch (buttonId) { // switch (buttonId) {
case 1: // case 1:
end(); // end();
player.getInventory().add(new Item(Items.BOWL_1923, 1)); // player.getInventory().add(new Item(Items.BOWL_1923, 1));
break; // break;
case 2: // case 2:
end(); // end();
player.getInventory().add(new Item(Items.PIE_DISH_2313, 1)); // player.getInventory().add(new Item(Items.PIE_DISH_2313, 1));
break; // break;
case 3: // case 3:
end(); // end();
player.getInventory().add(new Item(Items.EMPTY_POT_1931, 1)); // player.getInventory().add(new Item(Items.EMPTY_POT_1931, 1));
break; // break;
} // }
break; // break;
} // }
return true; // return true;
} // }
//
@Override // @Override
public int[] getIds() { // public int[] getIds() {
return new int[] { 778341 }; // return new int[] { 778341 };
} // }
} // }
} // }

View file

@ -684,6 +684,16 @@ fun hasSpaceFor(player: Player, item: Item): Boolean {
return player.inventory.hasSpaceFor(item) 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 * Get the number of ticks passed since server startup
*/ */