diff --git a/Server/src/main/content/data/EnchantedJewellery.kt b/Server/src/main/content/data/EnchantedJewellery.kt index cb94545e5..23aa3b1bb 100644 --- a/Server/src/main/content/data/EnchantedJewellery.kt +++ b/Server/src/main/content/data/EnchantedJewellery.kt @@ -11,6 +11,7 @@ import core.game.node.entity.player.Player import core.game.node.entity.player.link.TeleportManager import core.game.node.item.Item import core.game.system.task.Pulse +import core.game.world.GameWorld import core.game.world.map.Location import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics @@ -238,35 +239,50 @@ enum class EnchantedJewellery( if (!canTeleport(player, nextJewellery)) { return false } - Pulser.submit(object : Pulse(0) { - private var count = 0 - private var location = getLocation(buttonID) - override fun pulse(): Boolean { - when (count) { - 0 -> { - lock(player,4) - visualize(player, ANIMATION, GRAPHICS) - playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200) - player.impactHandler.disabledTicks = 4 - closeInterface(player) - } - 3 -> { - teleport(player,location) - resetAnimator(player) - if (isLastItemIndex(itemIndex)) { - if (isCrumble) crumbleJewellery(player, item, isEquipped) - } else { - replaceJewellery(player, item, nextJewellery, isEquipped) + val location = getLocation(buttonID) + player.scripts.delay = GameWorld.ticks + 4 + queueScript(player, 0, QueueStrength.SOFT) { stage -> + when (stage) { + 0 -> { + lock(player, 4) + visualize(player, ANIMATION, GRAPHICS) + playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200) + player.impactHandler.disabledTicks = 4 + closeInterface(player) + return@queueScript delayScript(player, 3) + } + 1 -> { + teleport(player, location) + resetAnimator(player) + unlock(player) + player.dispatch(TeleportEvent(TeleportManager.TeleportType.NORMAL, TeleportMethod.JEWELRY, item, location)) + if (isLastItemIndex(itemIndex)) { + if (isSlayerRing(item)) { + if (isEquipped) { + // Remove it now, but only addItemOrDrop the gem after the teleport has procced + removeItem(player, item, Container.INVENTORY) + return@queueScript delayScript(player, 1) + } + // Not equipped -> can replace fluently + replaceSlot(player, item.slot, Item(Items.ENCHANTED_GEM_4155), item) + return@queueScript stopExecuting(player) } - unlock(player) - player.dispatch(TeleportEvent(TeleportManager.TeleportType.NORMAL, TeleportMethod.JEWELRY, item, location)) - return true + // Not slayer ring + if (isCrumble) { + val removeFrom = if (isEquipped) Container.EQUIPMENT else Container.INVENTORY + removeItem(player, item, removeFrom) + } + } else { + replaceJewellery(player, item, nextJewellery, isEquipped) } } - count += 1 - return false + 2 -> { + addItemOrDrop(player, Items.ENCHANTED_GEM_4155) + sendMessage(player, "Your Ring of Slaying reverts back into a regular enchanted gem.") + } } - }) + return@queueScript stopExecuting(player) + } return true } @@ -278,21 +294,6 @@ enum class EnchantedJewellery( } } - private fun crumbleJewellery(player: Player, item: Item, isEquipped: Boolean) { - if (isEquipped) { - removeItem(player, item, Container.EQUIPMENT) - } else { - removeItem(player, item) - } - if (isSlayerRing(item)) { - queueScript(player, 1, QueueStrength.SOFT) { - addItemOrDrop(player, Items.ENCHANTED_GEM_4155) - sendMessage(player, "Your Ring of Slaying reverts back into a regular enchanted gem.") - return@queueScript stopExecuting(player) - } - } - } - private fun isSlayerRing(item: Item): Boolean { return (item.id in RING_OF_SLAYING.ids) } diff --git a/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt b/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt index 9432ea009..074ab27a6 100644 --- a/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt +++ b/Server/src/main/content/global/activity/shootingstar/ShootingStar.kt @@ -49,7 +49,7 @@ class ShootingStar(var level: ShootingStarType = ShootingStarType.values().rando "South-west Varrock mine" to Location.create(3176, 3362, 0), // South-west Varrock mine / Champion's Guild mine "Varrock east bank" to Location.create(3259, 3407, 0), // Varrock east bank / Rune shop "Lumbridge Swamp south-east mine" to Location.create(3227, 3150, 0), // Lumbridge Swamp south-east mine - //"Burgh de Rott bank" to Location.create(3500, 3219, 0), // Burgh de Rott bank (requires quest to enter) + "Burgh de Rott bank" to Location.create(3500, 3219, 0), // Burgh de Rott bank (requires quest to enter) "Canifis Bank" to Location.create(3504, 3487, 0), // Canifis bank "Mos Le'Harmless bank" to Location.create(3687, 2969, 0), // Mos Le'Harmless bank (requires quest to enter but is currently accessible for Slayer) "Gnome stronghold Bank" to Location.create(2460, 3432, 0), // Gnome stronghold bank diff --git a/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt b/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt index 1e993e1bb..a470f3846 100644 --- a/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt +++ b/Server/src/main/content/global/activity/shootingstar/ShootingStarPlugin.kt @@ -97,7 +97,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com fun teleportToStar(player: Player) { val condition: (p: Player) -> Boolean = when (star.location.toLowerCase()) { "canifis bank" -> {p -> requireQuest(p, Quests.PRIEST_IN_PERIL, "to access this.")} - //"burgh de rott bank" -> {p -> hasRequirement(p, Quests.IN_AID_OF_THE_MYREQUE)} //disabled: crash + "burgh de rott bank" -> {p -> hasRequirement(p, Quests.IN_AID_OF_THE_MYREQUE)} "crafting guild" -> {p -> hasLevelStat(p, Skills.CRAFTING, 40)} "lletya bank" -> {p -> hasRequirement(p, Quests.MOURNINGS_END_PART_I)} "jatizso mine" -> {p -> hasRequirement(p, Quests.THE_FREMENNIK_ISLES)} @@ -120,7 +120,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com 1 -> dialogue("WARNING: The star is located in the wilderness.").also { stage++ } 2 -> player.dialogueInterpreter.sendOptions("Teleport to the star?", "Yes", "No").also { stage++ } 3 -> when (buttonID) { - 1 -> end().also { teleportToStar(player) } + 1 -> teleportToStar(player) 2 -> end() } } 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 3da78d55b..723b62b48 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 @@ -97,6 +97,7 @@ public class TeleportManager { if (teleportType != -1) { if (entity instanceof Player) { Player p = (Player) entity; + p.scripts.setDelay(GameWorld.getTicks() + 12); p.getDialogueInterpreter().close(); } }