diff --git a/Server/src/main/content/global/handlers/iface/MagicBookInterface.java b/Server/src/main/content/global/handlers/iface/MagicBookInterface.java index af5c87baa..6832efb43 100644 --- a/Server/src/main/content/global/handlers/iface/MagicBookInterface.java +++ b/Server/src/main/content/global/handlers/iface/MagicBookInterface.java @@ -14,6 +14,9 @@ import core.game.node.entity.player.link.SpellBookManager.SpellBook; import core.game.world.GameWorld; import core.plugin.Plugin; +import content.data.Quests; +import static core.api.ContentAPIKt.hasRequirement; + /** * Represents the magic book interface handling of non-combat spells. * @author 'Vexia @@ -42,9 +45,44 @@ public final class MagicBookInterface extends ComponentPlugin { ? SpellBook.ANCIENT : SpellBook.LUNAR; + // Snowscape: Allow switching between unlocked spellbooks with the magic interface sort buttons + if (spellBook == SpellBook.MODERN) { + if (button == 65 && swapSpellBook(player, SpellBook.ANCIENT)) { + return true; + } else if (button == 66 && swapSpellBook(player, SpellBook.LUNAR)) { + return true; + } + } else if (spellBook == SpellBook.ANCIENT) { + if (button == 29 && swapSpellBook(player, SpellBook.MODERN)) { + return true; + } else if (button == 31 && swapSpellBook(player, SpellBook.LUNAR)) { + return true; + } + } else if (spellBook == SpellBook.LUNAR) { + if (button == 40 && swapSpellBook(player, SpellBook.MODERN)) { + return true; + } else if (button == 41 && swapSpellBook(player, SpellBook.ANCIENT)) { + return true; + } + } + + SpellListeners.run(button, SpellListener.NONE, SpellUtils.getBookFromInterface(component.getId()),player,null); boolean result = MagicSpell.castSpell(player, spellBook, button, player); return result; } + + // Snowscape custom function + private boolean swapSpellBook(final Player player, SpellBook spellBook) { + if (spellBook == SpellBook.ANCIENT && !hasRequirement(player, Quests.DESERT_TREASURE)) { + return false; + } else if (spellBook == SpellBook.LUNAR && !hasRequirement(player, Quests.LUNAR_DIPLOMACY)) { + return false; + } + player.getSpellBookManager().setSpellBook(spellBook); + player.getSpellBookManager().update(player); + return true; + } } + diff --git a/Server/src/main/content/global/handlers/item/SnowscapeMagesBook.kt b/Server/src/main/content/global/handlers/item/SnowscapeMagesBook.kt deleted file mode 100644 index 886d0a3a0..000000000 --- a/Server/src/main/content/global/handlers/item/SnowscapeMagesBook.kt +++ /dev/null @@ -1,91 +0,0 @@ -package content.global.handlers.item - -import core.api.* -import core.game.node.Node -import core.game.node.entity.player.Player -import core.game.node.entity.player.link.SpellBookManager.SpellBook -//import core.game.node.item.Item -import core.game.interaction.InteractionListener -import core.game.interaction.IntType -import core.game.world.update.flag.context.Animation -import core.game.world.update.flag.context.Graphics -import core.game.dialogue.* -import core.tools.START_DIALOGUE -import org.rs09.consts.Items -import org.rs09.consts.Sounds -import org.rs09.consts.Scenery -import org.rs09.consts.Animations -import content.data.Quests - -//import core.game.component.Component - -/** - * Listener for the Mage's Book from Mage Training Arena. The other spellbooks can be inscribed into the book by using it on the respective altar. - * Operate the book to switch to spellbooks that have been added. - * - */ -class SnowscapeMagesBook : InteractionListener { - - - override fun defineListeners() { - on(Items.MAGES_BOOK_6889, IntType.ITEM, "operate") { player, node -> - if (player.inCombat()) { - player.sendMessage("You cannot concentrate on the book during combat.") - } else { - player.animate(Animation(6299)) - player.graphics(Graphics(1062)) - openDialogue(player, SnowscapeMagesBookDialogue()) - } - return@on true - } - - val altars = intArrayOf(Scenery.ALTAR_6552,Scenery.ALTAR_17010) - - onUseWith(IntType.SCENERY, Items.MAGES_BOOK_6889, *altars) { player, used, with -> - val ancient = (with.getId() == Scenery.ALTAR_6552) - val quest = if (ancient) Quests.DESERT_TREASURE else Quests.LUNAR_DIPLOMACY - val attribute = if (ancient) "/save:snowscape:magesbook:2" else "/save:snowscape:magesbook:3" - - if (hasRequirement(player, quest)){ - setAttribute(player, attribute, true) - sendDialogue(player, "You carefully focus on the magic in the altar, and inscribe it into the book.") - playAudio(player, Sounds.LUNAR_STAT_SPY_3620) - playAudio(player, Sounds.LUNAR_STAT_SPY_IMPACT_3621) - animate(player, Animations.LUNAR_SPELLBOOK_STATSPY_6293) - } - return@onUseWith true - } - } -} - - - - -class SnowscapeMagesBookDialogue : DialogueFile() { - - - override fun handle(componentID: Int, buttonID: Int) { - when (stage) { - START_DIALOGUE -> options("Modern","Ancient","Lunar").also {stage++} - - 1 -> { - end() - if (player == null) return - // This is ordered a little strange, but checking the quest comes first so that access to the spellbook is lost when the quest is released, until it's completed. - if (buttonID == 2 && !hasRequirement(player!!, Quests.DESERT_TREASURE)) return - if (buttonID == 3 && !hasRequirement(player!!, Quests.LUNAR_DIPLOMACY)) return - if (buttonID > 1 && !getAttribute(player!!, "snowscape:magesbook:$buttonID", false)) { - val altarDescription = if (buttonID == 2) "altar in the Pyramid" else "Astral altar" - sendDialogue(player!!, "The book does not contain the knowledge of those spells. Use the book on the $altarDescription to inscribe it.") - return - } - player!!.spellBookManager.setSpellBook(SpellBook.values()[buttonID - 1]) - player!!.spellBookManager.update(player!!) - playAudio(player!!, Sounds.PRAYER_RECHARGE_2674) - sendMessage(player!!, "You retrieve the inscribed knowledge and let it fill your mind.") - - } - - } - } -}