diff --git a/Server/src/main/content/global/handlers/item/EctophialListener.kt b/Server/src/main/content/global/handlers/item/EctophialListener.kt new file mode 100644 index 000000000..661d0d942 --- /dev/null +++ b/Server/src/main/content/global/handlers/item/EctophialListener.kt @@ -0,0 +1,73 @@ +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.Player +import core.game.node.entity.player.link.TeleportManager.TeleportType +import core.game.node.item.Item +import core.game.world.map.Location +import core.game.world.update.flag.context.Animation +import core.game.world.update.flag.context.Graphics +import org.rs09.consts.Items +import org.rs09.consts.Scenery +import org.rs09.consts.Sounds + +@Suppress("unused") +class EctophialListener : InteractionListener { + private val fillAnimation = Animation(832) + private val emptyAnimation = Animation(9609) + private val emptyGraphics = Graphics(1688) + + private fun refillEctophial(player: Player) { + delayEntity(player, fillAnimation.duration) + animate(player, fillAnimation) + playAudio(player, Sounds.FILL_ECTOPLASM_1132) + if (removeItem(player, Items.ECTOPHIAL_4252)) { + addItem(player, Items.ECTOPHIAL_4251) + sendMessage(player, "You refill the ectophial from the Ectofuntus.") + } + } + + override fun defineListeners() { + onUseWith(IntType.SCENERY, Items.ECTOPHIAL_4252, Scenery.ECTOFUNTUS_5282) { player, _, _ -> + refillEctophial(player) + return@onUseWith true + } + + on(Items.ECTOPHIAL_4251, IntType.ITEM, "empty") { player, node -> + if (!hasRequirement(player, "Ghosts Ahoy")) + return@on true + + if (player.isTeleBlocked) { + sendMessage(player, "A magical force has stopped you from teleporting.") + return@on true + } + delayEntity(player, 10) + queueScript(player, 0, QueueStrength.SOFT) { stage: Int -> + when (stage) { + 0 -> { + sendMessage(player, "You empty the ectoplasm onto the ground around your feet...") + playAudio(player, 4580) + visualize(player, emptyAnimation, emptyGraphics) + replaceSlot(player, node.asItem().slot, Item(Items.ECTOPHIAL_4252), Item(Items.ECTOPHIAL_4251)) + return@queueScript delayScript(player, emptyAnimation.duration) + } + 1 -> { + teleport(player, Location.create(3658, 3517, 0), TeleportType.ECTOPHIAL) + sendMessage(player, "...and the world changes around you.") + return@queueScript delayScript(player, 9) + } + 2 -> { + face(player, Location(3659, 3519, 0)) + refillEctophial(player) + return@queueScript stopExecuting(player) + } + else -> return@queueScript stopExecuting(player) + } + } + return@on true + } + } +} diff --git a/Server/src/main/content/global/handlers/item/withobject/EctophialFillListener.kt b/Server/src/main/content/global/handlers/item/withobject/EctophialFillListener.kt deleted file mode 100644 index d2700ee2c..000000000 --- a/Server/src/main/content/global/handlers/item/withobject/EctophialFillListener.kt +++ /dev/null @@ -1,44 +0,0 @@ -package content.global.handlers.item.withobject - -import core.api.* -import core.game.system.task.Pulse -import core.game.world.update.flag.context.Animation -import org.rs09.consts.Items -import org.rs09.consts.Scenery -import core.game.interaction.IntType -import core.game.interaction.InteractionListener -import org.rs09.consts.Sounds - -/** - * Listener for filling empty ectophial - * @author Byte - */ -@Suppress("unused") -class EctophialFillListener : InteractionListener { - - companion object { - private val ANIMATION = Animation(1652) - } - - override fun defineListeners() { - onUseWith(IntType.SCENERY, Items.ECTOPHIAL_4252, Scenery.ECTOFUNTUS_5282) { player, used, _ -> - lock(player, 5) - animate(player, ANIMATION) - playAudio(player, Sounds.FILL_ECTOPLASM_1132) - - submitIndividualPulse(player, object: Pulse(3) { - override fun pulse(): Boolean { - if (removeItem(player, used)) { - addItem(player, Items.ECTOPHIAL_4251) - sendMessage(player, "You refill the ectophial from the Ectofuntus.") - unlock(player) - return true - } - return false - } - }) - - return@onUseWith true - } - } -} diff --git a/Server/src/main/content/region/misthalin/draynor/quest/anma/AnimalMagnetismPlugin.java b/Server/src/main/content/region/misthalin/draynor/quest/anma/AnimalMagnetismPlugin.java index 4d73d9d2f..0180a2000 100644 --- a/Server/src/main/content/region/misthalin/draynor/quest/anma/AnimalMagnetismPlugin.java +++ b/Server/src/main/content/region/misthalin/draynor/quest/anma/AnimalMagnetismPlugin.java @@ -77,17 +77,6 @@ public final class AnimalMagnetismPlugin extends OptionHandler { case 10500: player.getPacketDispatch().sendMessage("Perhaps you should wait a few hundred years or so?"); break; - case 4251: - case 4252: - if (!hasRequirement(player, "Ghosts Ahoy")) - return true; - if (option.equalsIgnoreCase("empty")) { - handleEctophial(player, (Item) node); - } else { - player.getInventory().remove(node.asItem()); - player.sendMessage("The ectophial disappears as it hits the ground..."); - } - break; case 10492: open(player); break; @@ -123,34 +112,6 @@ public final class AnimalMagnetismPlugin extends OptionHandler { player.getPacketDispatch().sendMessage("You fiddle with the notes."); } - /** - * Handles the ectophial emptying. - * @param player the player. - * @param item the item. - */ - private void handleEctophial(final Player player, final Item item) { - if(teleport(player,Location.create(3658, 3517, 0), TeleportType.ECTOPHIAL)) { - player.getInventory().replace(new Item(4252), item.getSlot()); - player.sendMessage("...and the world changes around you.", 4); - playAudio(player, 4580); - player.sendMessage("You empty the ectoplasm onto the ground around your feet..."); - player.getPulseManager().run(new Pulse(9, player) { - @Override - public boolean pulse() { - player.faceLocation(new Location(3659, 3519, 0)); - if (player.getInventory().containsItem(new Item(4252))) { - player.animate(Animation.create(1652)); - playAudio(player, Sounds.FILL_ECTOPLASM_1132); - player.getInventory().remove(new Item(4252)); - player.getInventory().add(item); - player.sendMessage("You refill the ectophial from the Ectofuntus."); - } - return true; - } - }); - } - } - /** * Handles the hammering of a magnet. * @author Vexia diff --git a/Server/src/main/core/game/node/entity/player/link/TeleportManager.java b/Server/src/main/core/game/node/entity/player/link/TeleportManager.java index 5641766b4..140ecf405 100644 --- a/Server/src/main/core/game/node/entity/player/link/TeleportManager.java +++ b/Server/src/main/core/game/node/entity/player/link/TeleportManager.java @@ -506,13 +506,6 @@ public class TeleportManager { delay++; return false; } - - @Override - public void stop() { - super.stop(); - entity.unlock(); - entity.lock(4); - } }; } },