From 22552385544ec041b1ead14b8994003d0de5aa5b Mon Sep 17 00:00:00 2001 From: Player Name Date: Mon, 29 Jan 2024 09:48:28 +0000 Subject: [PATCH] Fixed issue preventing some dragonstone jewellery teleports working at level 30 wilderness --- .../core/game/world/map/zone/ZoneMonitor.java | 41 ++++++++++++++++--- .../game/world/map/zone/ZoneMonitorTests.kt | 4 +- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/Server/src/main/core/game/world/map/zone/ZoneMonitor.java b/Server/src/main/core/game/world/map/zone/ZoneMonitor.java index cd48aff49..c592b398c 100644 --- a/Server/src/main/core/game/world/map/zone/ZoneMonitor.java +++ b/Server/src/main/core/game/world/map/zone/ZoneMonitor.java @@ -13,6 +13,9 @@ import core.game.world.map.Location; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Set; + +import org.rs09.consts.Items; /** * Handles the zones for an entity. @@ -20,6 +23,35 @@ import java.util.List; */ public final class ZoneMonitor { + /** + * The set of dragonstone teleport jewellery, which allow teleporting from up to and including level 30 wildy. + * Used to check if a player can teleport from 20 < level <= 30 wildy, see canTeleportByDragonstoneJewellery. + * Note: the check is based on the nextJewellery (see EnchantedJewellery.kt), so this list should not contain the (4) items, and should contain the empty ones. + * @author Player Name + */ + static final Set DRAGONSTONE_TELEPORT_JEWELLERY = Set.of( + Items.AMULET_OF_GLORY_1704, + Items.AMULET_OF_GLORY1_1706, + Items.AMULET_OF_GLORY2_1708, + Items.AMULET_OF_GLORY3_1710, + Items.AMULET_OF_GLORYT_10362, + Items.AMULET_OF_GLORYT1_10360, + Items.AMULET_OF_GLORYT2_10358, + Items.AMULET_OF_GLORYT3_10356, + Items.SKILLS_NECKLACE_11113, + Items.SKILLS_NECKLACE1_11111, + Items.SKILLS_NECKLACE2_11109, + Items.SKILLS_NECKLACE3_11107, + Items.COMBAT_BRACELET_11126, + Items.COMBAT_BRACELET1_11124, + Items.COMBAT_BRACELET2_11122, + Items.COMBAT_BRACELET3_11120, + Items.RING_OF_WEALTH_14638, + Items.RING_OF_WEALTH1_14640, + Items.RING_OF_WEALTH2_14642, + Items.RING_OF_WEALTH3_14644 + ); + /** * The entity. */ @@ -203,7 +235,7 @@ public final class ZoneMonitor { * @return {@code True} if so. */ public boolean teleport(int type, Node node) { - if (type != -1 && entity.isTeleBlocked() && !canTeleportByGlory(type, node)) { + if (type != -1 && entity.isTeleBlocked() && !canTeleportByDragonstoneJewellery(type, node)) { if (entity.isPlayer()) { entity.asPlayer().sendMessage("A magical force has stopped you from teleporting."); } @@ -218,14 +250,13 @@ public final class ZoneMonitor { } /** - * Checks if a player can teleport with a glory in >= 1 <= 30 wilderness level + * Checks if a player can teleport with a dragonstone jewellery piece in >= 1 <= 30 wilderness level * @return {@code True} if so. */ - private boolean canTeleportByGlory(int type, Node node) { - if (type != 1 || !node.asItem().getName().contains("Amulet of glory")) { + private boolean canTeleportByDragonstoneJewellery(int type, Node node) { + if (type != 1 || !DRAGONSTONE_TELEPORT_JEWELLERY.contains(node.asItem().getId())) { return false; } - if (entity.timers.getTimer("teleblock") != null) return false; diff --git a/Server/src/test/kotlin/core/game/world/map/zone/ZoneMonitorTests.kt b/Server/src/test/kotlin/core/game/world/map/zone/ZoneMonitorTests.kt index f0b99839c..a1e733564 100644 --- a/Server/src/test/kotlin/core/game/world/map/zone/ZoneMonitorTests.kt +++ b/Server/src/test/kotlin/core/game/world/map/zone/ZoneMonitorTests.kt @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test class ZoneMonitorTests { - val GLORIES = intArrayOf(1710, 1708, 1706, 1712) + val GLORIES = intArrayOf(1710, 1708, 1706, 1704) init { TestUtils.preTestSetup() @@ -91,4 +91,4 @@ class ZoneMonitorTests { } -} \ No newline at end of file +}