diff --git a/Server/src/main/content/global/handlers/item/CasketListener.kt b/Server/src/main/content/global/handlers/item/CasketListener.kt new file mode 100644 index 000000000..78d7d99be --- /dev/null +++ b/Server/src/main/content/global/handlers/item/CasketListener.kt @@ -0,0 +1,43 @@ +package content.global.handlers.item + +import core.api.* +import core.api.utils.WeightBasedTable +import core.api.utils.WeightedItem +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.node.item.Item +import core.tools.StringUtils +import org.rs09.consts.Items +import java.util.* +import kotlin.collections.ArrayList + +class CasketListener : InteractionListener { + companion object { + val loot = WeightBasedTable.create( + WeightedItem(Items.COINS_995, 20, 640, 55.0, false), + WeightedItem(Items.UNCUT_SAPPHIRE_1623, 1, 1, 32.0, false), + WeightedItem(Items.UNCUT_EMERALD_1621, 1, 1, 16.0, false), + WeightedItem(Items.UNCUT_RUBY_1619, 1, 1, 9.0, false), + WeightedItem(Items.UNCUT_DIAMOND_1617, 1, 1, 2.0, false), + WeightedItem(Items.COSMIC_TALISMAN_1454, 1, 1, 8.0, false), + WeightedItem(Items.LOOP_HALF_OF_A_KEY_987, 1, 1, 1.0, false), + WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985, 1, 1, 1.0, false) + ) + } + + override fun defineListeners() { + on(Items.CASKET_405, IntType.ITEM, "open"){ player, node -> + val casket = node.asItem() + + if(removeItem(player, casket, Container.INVENTORY)) { + val finalLoot : ArrayList = loot.roll() + finalLoot.forEach { player.inventory.add(it) } + player.dialogueInterpreter.sendItemMessage(finalLoot[0], + "You open the casket. Inside you find " + + (if (finalLoot[0].amount > 1) "some" else if (StringUtils.isPlusN(finalLoot[0].name)) "an" else "a") + + " " + finalLoot[0].name.lowercase(Locale.getDefault()) + ".") + } + return@on true + } + } +} diff --git a/Server/src/main/content/global/handlers/item/CasketPlugin.java b/Server/src/main/content/global/handlers/item/CasketPlugin.java deleted file mode 100644 index 5311e87af..000000000 --- a/Server/src/main/content/global/handlers/item/CasketPlugin.java +++ /dev/null @@ -1,78 +0,0 @@ -package content.global.handlers.item; - -import java.util.ArrayList; -import java.util.List; - -import static core.api.ContentAPIKt.*; -import core.cache.def.impl.ItemDefinition; -import core.game.interaction.OptionHandler; -import core.game.node.Node; -import core.game.node.entity.player.Player; -import core.game.node.item.ChanceItem; -import core.game.node.item.Item; -import core.plugin.Initializable; -import core.plugin.Plugin; -import core.tools.RandomFunction; -import core.tools.StringUtils; -import org.rs09.consts.Items; -import core.api.utils.WeightBasedTable; -import core.api.utils.WeightedItem; - -/** - * Represents the casket handling plugin. - * @author 'Vexia - * @version 1.0 - */ -@Initializable -public final class CasketPlugin extends OptionHandler { - - /** - * Represents the casket rewards. - */ - private WeightBasedTable table = WeightBasedTable.create( - new WeightedItem(Items.COINS_995, 20, 640, 55, false), - new WeightedItem(Items.UNCUT_SAPPHIRE_1623, 1, 1, 32, false), - new WeightedItem(Items.UNCUT_EMERALD_1621, 1, 1, 16, false), - new WeightedItem(Items.UNCUT_RUBY_1619, 1, 1, 9, false), - new WeightedItem(Items.UNCUT_DIAMOND_1617, 1, 1, 2, false), - new WeightedItem(Items.COSMIC_TALISMAN_1454, 1, 1, 8, false), - new WeightedItem(Items.LOOP_HALF_OF_A_KEY_987, 1, 1, 1, false), - new WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985, 1, 1, 1, false) - ); - - @Override - public Plugin newInstance(Object arg) throws Throwable { - ItemDefinition.forId(405).getHandlers().put("option:open", this); - return this; - } - - @Override - public boolean handle(Player player, Node node, String option) { - final Item reward = table.roll(player).get(0); - player.getInventory().remove((Item) node); - player.getDialogueInterpreter().sendItemMessage(reward, "You open the casket. Inside you find " + (reward.getAmount() > 1 ? "some" : (StringUtils.isPlusN(reward.getName()) ? "an" : "a")) + " " + reward.getName().toLowerCase() + "."); - addItemOrDrop(player, reward.getId(), reward.getAmount()); - return true; - } - - /** - * Gets the chance item from the array. - * @param items the items. - * @return the chance item. - */ - private ChanceItem getChanceItem(ChanceItem[] items) { - final int chance = RandomFunction.random(100); - final List chances = new ArrayList<>(20); - for (ChanceItem c : items) { - if (chance > c.getChanceRate()) { - chances.add(c); - } - } - return chances.size() == 0 ? items[0] : chances.get(RandomFunction.random(chances.size())); - } - - @Override - public boolean isWalk() { - return false; - } -}