diff --git a/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt b/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt new file mode 100644 index 000000000..7bfaa1d59 --- /dev/null +++ b/Server/src/main/content/global/handlers/item/EnchantJewelleryTabListener.kt @@ -0,0 +1,85 @@ +package content.global.handlers.item + +import core.api.* +import core.game.interaction.IntType +import core.game.interaction.InteractionListener +import core.game.interaction.QueueStrength +import core.game.node.entity.player.link.audio.Audio +import org.rs09.consts.Items + +class EnchantJewelleryTabListener : InteractionListener { + + private val LVL_1_ENCHANT = mapOf( + Items.SAPPHIRE_RING_1637 to Items.RING_OF_RECOIL_2550, + Items.SAPPHIRE_NECKLACE_1656 to Items.GAMES_NECKLACE8_3853, + Items.SAPPHIRE_AMULET_1694 to Items.AMULET_OF_MAGIC_1727, + Items.SAPPHIRE_BRACELET_11072 to Items.BRACELET_OF_CLAY_11074 + ) + private val LVL_2_ENCHANT = mapOf( + Items.EMERALD_RING_1639 to Items.RING_OF_DUELLING8_2552, + Items.EMERALD_NECKLACE_1658 to Items.BINDING_NECKLACE_5521, + Items.EMERALD_AMULET_1696 to Items.AMULET_OF_DEFENCE_1729, + Items.EMERALD_BRACELET_11076 to Items.CASTLEWAR_BRACE3_11079 + ) + + private val LVL_3_ENCHANT = mapOf( + Items.RUBY_RING_1641 to Items.RING_OF_FORGING_2568, + Items.RUBY_NECKLACE_1660 to Items.DIGSITE_PENDANT_5_11194, + Items.RUBY_AMULET_1698 to Items.AMULET_OF_STRENGTH_1725, + Items.RUBY_BRACELET_11085 to Items.INOCULATION_BRACE_11088 + ) + + private val LVL_4_ENCHANT = mapOf( + Items.DIAMOND_RING_1643 to Items.RING_OF_LIFE_2570, + Items.DIAMOND_NECKLACE_1662 to Items.PHOENIX_NECKLACE_11090, + Items.DIAMOND_AMULET_1700 to Items.AMULET_OF_POWER_1731, + Items.DIAMOND_BRACELET_11092 to Items.FORINTHRY_BRACE5_11095 + ) + + private val LVL_5_ENCHANT = mapOf( + Items.DRAGONSTONE_RING_1645 to Items.RING_OF_WEALTH4_14646, + Items.DRAGON_NECKLACE_1664 to Items.SKILLS_NECKLACE4_11105, + Items.DRAGONSTONE_AMMY_1702 to Items.AMULET_OF_GLORY4_1712, + Items.DRAGON_BRACELET_11115 to Items.COMBAT_BRACELET4_11118 + ) + + private val LVL_6_ENCHANT = mapOf( + Items.ONYX_RING_6575 to Items.RING_OF_STONE_6583, + Items.ONYX_NECKLACE_6577 to Items.BERSERKER_NECKLACE_11128, + Items.ONYX_AMULET_6581 to Items.AMULET_OF_FURY_6585, + Items.ONYX_BRACELET_11130 to Items.REGEN_BRACELET_11133 + ) + + override fun defineListeners() { + on(IntType.ITEM, "break") {player, node -> + delayEntity(player, 1) + queueScript(player, strength = QueueStrength.SOFT) { + + val items = when (node.id) { + 8016 -> LVL_1_ENCHANT //Sapphire + 8017 -> LVL_2_ENCHANT + 8018 -> LVL_3_ENCHANT + 8019 -> LVL_4_ENCHANT + 8020 -> LVL_5_ENCHANT + 8021 -> LVL_6_ENCHANT + else -> return@queueScript stopExecuting(player) + } + + if (inInventory(player, node.id)) { + for (item in player.inventory.toArray()) { + if (item == null) continue + val product = items[item.id] ?: continue + if (removeItem(player, node.id) && (removeItem(player, item.id))) { + addItem(player, product) + playAudio(player, Audio(979), false) + animate(player, 4069, true) + break; + } + } + } + return@queueScript stopExecuting(player) + } + return@on true + } + } +} diff --git a/Server/src/main/content/global/handlers/item/EnchantJewelleryTabOption.kt b/Server/src/main/content/global/handlers/item/EnchantJewelleryTabOption.kt deleted file mode 100644 index 2627555bd..000000000 --- a/Server/src/main/content/global/handlers/item/EnchantJewelleryTabOption.kt +++ /dev/null @@ -1,99 +0,0 @@ -package content.global.handlers.item - -import core.api.log -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.Item -import core.game.world.update.flag.context.Animation -import core.plugin.Initializable -import core.plugin.Plugin -import core.tools.Log -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch -import org.rs09.consts.Items -import core.tools.SystemLogger - -private val LVL_1_ENCHANT = mapOf( - Items.SAPPHIRE_RING_1637 to Item(Items.RING_OF_RECOIL_2550), - Items.SAPPHIRE_NECKLACE_1656 to Item(Items.GAMES_NECKLACE8_3853), - Items.SAPPHIRE_AMULET_1694 to Item(Items.AMULET_OF_MAGIC_1727), - Items.SAPPHIRE_BRACELET_11072 to Item(Items.BRACELET_OF_CLAY_11074) -) -private val LVL_2_ENCHANT = mapOf( - Items.EMERALD_RING_1639 to Item(Items.RING_OF_DUELLING8_2552), - Items.EMERALD_NECKLACE_1658 to Item(Items.BINDING_NECKLACE_5521), - Items.EMERALD_AMULET_1696 to Item(Items.AMULET_OF_DEFENCE_1729), - Items.EMERALD_BRACELET_11076 to Item(Items.CASTLEWAR_BRACE3_11079) -) - -private val LVL_3_ENCHANT = mapOf( - Items.RUBY_RING_1641 to Item(Items.RING_OF_FORGING_2568), - Items.RUBY_NECKLACE_1660 to Item(Items.DIGSITE_PENDANT_5_11194), - Items.RUBY_AMULET_1698 to Item(Items.AMULET_OF_STRENGTH_1725), - Items.RUBY_BRACELET_11085 to Item(Items.INOCULATION_BRACE_11088) -) - -private val LVL_4_ENCHANT = mapOf( - Items.DIAMOND_RING_1643 to Item(Items.RING_OF_LIFE_2570), - Items.DIAMOND_NECKLACE_1662 to Item(Items.PHOENIX_NECKLACE_11090), - Items.DIAMOND_AMULET_1700 to Item(Items.AMULET_OF_POWER_1731), - Items.DIAMOND_BRACELET_11092 to Item(Items.FORINTHRY_BRACE5_11095) -) - -private val LVL_5_ENCHANT = mapOf( - Items.DRAGONSTONE_RING_1645 to Item(14646), - Items.DRAGON_NECKLACE_1664 to Item(Items.SKILLS_NECKLACE4_11105), - Items.DRAGONSTONE_AMMY_1702 to Item(Items.AMULET_OF_GLORY4_1712), - Items.DRAGON_BRACELET_11115 to Item(Items.COMBAT_BRACELET4_11118) -) - - -@Initializable -class EnchantJewelleryTabOption : OptionHandler(){ - override fun handle(player: Player?, node: Node?, option: String?): Boolean { - player ?: return false - - val items = when(node?.id){ - 8016 -> LVL_1_ENCHANT //Sapphire - 8017 -> LVL_2_ENCHANT - 8018 -> LVL_3_ENCHANT - 8019 -> LVL_4_ENCHANT - 8020 -> LVL_5_ENCHANT - else -> null - } - - if(items == null){ - log(this::class.java, Log.WARN, "UNHANDLED ENCHANT ITEM TABLET [ID: ${node?.id}") - return true - } - - player.audioManager.send(979) - player.animator.forceAnimation(Animation(4069)) - - GlobalScope.launch { - for(item in player.inventory.toArray()){ - item ?: continue - if(items.containsKey(item.id)){ - val product = items[item.id] - player.inventory.remove(item) - player.inventory.remove(node as Item) - player.inventory.add(product) - break; - } - } - } - return true - } - - override fun newInstance(arg: Any?): Plugin { - ItemDefinition.forId(8016).handlers["option:break"] = this - ItemDefinition.forId(8017).handlers["option:break"] = this - ItemDefinition.forId(8018).handlers["option:break"] = this - ItemDefinition.forId(8019).handlers["option:break"] = this - ItemDefinition.forId(8020).handlers["option:break"] = this - return this - } - -} \ No newline at end of file