mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-10 10:20:41 -07:00
Start working on implementing new shelves
This commit is contained in:
parent
8fea59e1cc
commit
a0cd34a1af
3 changed files with 307 additions and 239 deletions
|
|
@ -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.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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 };
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue