From 2747eb61ec0237fa1607bf5a6985e68f62e52030 Mon Sep 17 00:00:00 2001 From: Zerken Date: Thu, 31 Aug 2023 08:23:39 +0000 Subject: [PATCH] Implemented a new Teleport zone restriction and added a check to the teleport manager to see if the player is teleport zone restricted The firemaking cape will no longer be deleted when logging out in a darkzone The Stronghold of Security Gift of Peace, Grain of Plenty, and Box of Health will now add coins to already existing stack of coins if inventory is full The Cradle of Life will now unlock emotes from all previous Stronghold of Security levels if completed (This was added for older accounts which have completed the stronghold of security but are missing the emotes) Implemented an Entrana allowed item check If skillcape perks are active then the player is allowed to bring the runecrafting cape(s) to entrana The teleport block in fishing trawler now only applies while on the boat and is cleared upon logout/leave Fixed an issue where you could teleport out of the sunk fishing trawler Fixed an issue where a logout listener was not being removed after failing the fishing trawler causing the player to be teleported to port khazard after their next login Added a check to to see if the player has items banned on entrana Blue dragon scales have had their respawn timer corrected to 18 seconds Fixed the warriors guild cyclops room logout listener to properly be removed when leaving Players will no longer get stuck if logging out during agility obstacles Enchanted jewellery teleports now close any open interface Players can no longer complete the Falador medium diary goal of pickpocketing a guard without 40 thieving --- Server/data/configs/ground_spawns.json | 2 +- .../main/content/data/EnchantedJewellery.kt | 1 + .../global/skill/agility/WildernessCourse.kt | 2 +- .../skill/skillcapeperks/SkillcapePerks.kt | 18 +++++++------- .../FishingTrawlerInteractionHandler.kt | 5 ++-- .../fishingtrawler/FishingTrawlerSession.kt | 24 +++++++++---------- .../wguild/cyclopes/CyclopesRoom.java | 2 +- .../falador/diary/FaladorAchievementDiary.kt | 4 +++- .../stronghold/BoxOfHealthDialogue.java | 13 ++++------ .../stronghold/CradleOfLifeDialogue.java | 7 ++++-- .../stronghold/GiftOfPeaceDialogue.java | 12 ++++------ .../stronghold/GrainOfPlentyDialogue.java | 11 ++++----- .../core/cache/def/impl/ItemDefinition.java | 5 ++++ .../entity/player/link/TeleportManager.java | 5 ++-- .../game/world/map/zone/ZoneRestriction.java | 5 ++++ .../game/world/map/zone/impl/DarkZone.java | 12 ++++++---- 16 files changed, 71 insertions(+), 57 deletions(-) diff --git a/Server/data/configs/ground_spawns.json b/Server/data/configs/ground_spawns.json index adfa66cf9..82cb70661 100644 --- a/Server/data/configs/ground_spawns.json +++ b/Server/data/configs/ground_spawns.json @@ -49,7 +49,7 @@ }, { "item_id": "243", - "loc_data": "{1,2910,9809,0,196610}-{1,2908,9805,0,196610}-{1,2902,9806,0,196610}-{1,2906,9796,0,196610}-{1,2905,9801,0,196610}" + "loc_data": "{1,2910,9809,0,30}-{1,2908,9805,0,30}-{1,2902,9806,0,30}-{1,2906,9796,0,30}-{1,2905,9801,0,30}" }, { "item_id": "245", diff --git a/Server/src/main/content/data/EnchantedJewellery.kt b/Server/src/main/content/data/EnchantedJewellery.kt index f2558d8a7..a913e9a88 100644 --- a/Server/src/main/content/data/EnchantedJewellery.kt +++ b/Server/src/main/content/data/EnchantedJewellery.kt @@ -225,6 +225,7 @@ enum class EnchantedJewellery( visualize(player, ANIMATION, GRAPHICS) playGlobalAudio(player.location, Sounds.TELEPORT_ALL_200) player.impactHandler.disabledTicks = 4 + closeInterface(player) } 3 -> { teleport(player,location) diff --git a/Server/src/main/content/global/skill/agility/WildernessCourse.kt b/Server/src/main/content/global/skill/agility/WildernessCourse.kt index d9bc44b36..ab6644421 100644 --- a/Server/src/main/content/global/skill/agility/WildernessCourse.kt +++ b/Server/src/main/content/global/skill/agility/WildernessCourse.kt @@ -176,7 +176,7 @@ class WildernessCourse val fail = AgilityHandler.hasFailed(player, 1, 0.3) val origLoc = player.location registerLogoutListener(player, "steppingstone"){p -> - teleport(p, origLoc) + player.location = origLoc } submitWorldPulse(object : Pulse(2, player){ var counter = 0 diff --git a/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt b/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt index 6e3cbe0f6..dbf5d06d8 100644 --- a/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt +++ b/Server/src/main/content/global/skill/skillcapeperks/SkillcapePerks.kt @@ -10,9 +10,10 @@ import core.game.world.map.zone.impl.DarkZone import core.plugin.Initializable import core.game.world.GameWorld import content.global.skill.farming.* -import core.api.getAttribute -import core.api.sendDialogue -import core.api.hasRequirement +import core.api.* +import core.cache.def.impl.ItemDefinition +import org.rs09.consts.Items +import org.rs09.consts.Sounds enum class SkillcapePerks(val attribute: String, val effect: ((Player) -> Unit)? = null) { BAREFISTED_SMITHING("cape_perks:barefisted-smithing"), @@ -257,12 +258,13 @@ enum class SkillcapePerks(val attribute: String, val effect: ((Player) -> Unit)? fun sendAltar(player: Player,altar: Altar){ end() - if (altar == Altar.DEATH && !hasRequirement(player, "Mourning's End Part II")) - return - else if (altar == Altar.ASTRAL && !hasRequirement(player, "Lunar Diplomacy")) - return - else if (altar == Altar.BLOOD && !hasRequirement(player, "Legacy of Seergaze")) + if (altar == Altar.DEATH && !hasRequirement(player, "Mourning's End Part II")) return + if (altar == Altar.ASTRAL && !hasRequirement(player, "Lunar Diplomacy")) return + if (altar == Altar.BLOOD && !hasRequirement(player, "Legacy of Seergaze")) return + if (altar == Altar.LAW && !ItemDefinition.canEnterEntrana(player)) { + sendItemDialogue(player, Items.SARADOMIN_SYMBOL_8055, "No weapons or armour are permitted on holy Entrana.") return + } var endLoc = if (altar == Altar.ASTRAL) Location.create(2151, 3864, 0) else altar.ruin.end diff --git a/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerInteractionHandler.kt b/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerInteractionHandler.kt index 85e5793f0..8a74870f1 100644 --- a/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerInteractionHandler.kt +++ b/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerInteractionHandler.kt @@ -1,9 +1,9 @@ package content.minigame.fishingtrawler +import core.api.clearLogoutListener import core.game.activity.ActivityManager import core.game.node.entity.player.Player import core.game.node.entity.skill.Skills -import core.game.node.item.GroundItemManager import core.game.node.item.Item import core.game.system.task.Pulse import core.game.world.map.Location @@ -14,7 +14,6 @@ import core.game.interaction.InteractionListener import core.game.interaction.IntType import core.game.system.command.sets.FISHING_TRAWLER_LEAKS_PATCHED import core.game.system.command.sets.STATS_BASE -import core.tools.colorize import kotlin.math.ceil /** @@ -89,6 +88,8 @@ class FishingTrawlerInteractionHandler : InteractionListener { player.dialogueInterpreter.sendDialogue("You climb onto the floating barrel and begin to kick your way to the","shore.","You make it to the shore tired and weary.") player.appearance.setDefaultAnimations() player.appearance.sync() + clearLogoutListener(player, "ft-logout") + player.locks.unlockTeleport() return@on true } diff --git a/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerSession.kt b/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerSession.kt index 097480e4e..6e78ee35d 100644 --- a/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerSession.kt +++ b/Server/src/main/content/minigame/fishingtrawler/FishingTrawlerSession.kt @@ -1,6 +1,5 @@ package content.minigame.fishingtrawler -import core.api.LogoutListener import core.api.MapArea import core.api.getRegionBorders import core.api.* @@ -24,7 +23,6 @@ import org.rs09.consts.Items import core.game.system.command.sets.FISHING_TRAWLER_GAMES_WON import core.game.system.command.sets.FISHING_TRAWLER_SHIPS_SANK import core.game.system.command.sets.STATS_BASE -import core.tools.SystemLogger import core.tools.secondsToTicks import core.tools.ticksToSeconds import java.util.concurrent.TimeUnit @@ -43,7 +41,7 @@ private const val HOLE_SOUTH_Y = 23 private const val LEAKING_ID = 2167 private const val PATCHED_ID = 2168 -class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : LogoutListener, MapArea { +class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : MapArea { constructor(region: DynamicRegion, activity: FishingTrawlerActivity) : this(activity) {this.region = region; this.base = region.baseLocation} var players: ArrayList = ArrayList() var netRipped = false @@ -80,7 +78,12 @@ class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : Logo updateOverlay(player) player.properties.teleportLocation = base.transform(36,24,0) player.setAttribute("ft-session",this) - registerTimer (player, spawnTimer("teleblock", timeLeft)) + registerLogoutListener(player, "ft-logout") { + val session = player.getAttribute("ft-session",null) ?: return@registerLogoutListener + player.location = Location.create(2667, 3161, 0) + session.players.remove(player) + player.locks.unlockTeleport() + } } zone.register(getRegionBorders(region.id)) } @@ -104,7 +107,6 @@ class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : Logo player.appearance.setAnimations(Animation(188)) player.properties.teleportLocation = session.base.transform(36,24,0) player.incrementAttribute("/save:$STATS_BASE:$FISHING_TRAWLER_SHIPS_SANK") - removeTimer(player, "teleblock") } return true } @@ -136,6 +138,9 @@ class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : Logo session.isActive = false session.swapBoatType(7755) session.zone.unregister(getRegionBorders(session.region.id)) + for(player in session.players) { + player.locks.lockTeleport(1000000) + } } if(RandomFunction.random(100) <= 9){ @@ -148,6 +153,7 @@ class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : Logo player.interfaceManager.closeOverlay() player.properties.teleportLocation = Location.create(2666, 3162, 0) player.incrementAttribute("/save:$STATS_BASE:$FISHING_TRAWLER_GAMES_WON") + clearLogoutListener(player, "ft-logout") } session.zone.unregister(getRegionBorders(session.region.id)) } @@ -278,18 +284,12 @@ class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : Logo FishingTrawlerOverlay.sendUpdate(player, ((waterAmount / 500.0) * 100).toInt(), netRipped, fishAmount, TimeUnit.SECONDS.toMinutes(ticksToSeconds(timeLeft).toLong()).toInt() + 1) } - override fun logout(player: Player) { - val session = player.getAttribute("ft-session",null) ?: return - player.location = Location.create(2667, 3161, 0) - session.players.remove(player) - } - override fun defineAreaBorders(): Array { return arrayOf() } override fun getRestrictions(): Array { - return arrayOf(ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.RANDOM_EVENTS) + return arrayOf(ZoneRestriction.CANNON, ZoneRestriction.FIRES, ZoneRestriction.RANDOM_EVENTS, ZoneRestriction.TELEPORT) } override fun areaEnter(entity: Entity) { diff --git a/Server/src/main/content/region/asgarnia/burthorpe/handlers/wguild/cyclopes/CyclopesRoom.java b/Server/src/main/content/region/asgarnia/burthorpe/handlers/wguild/cyclopes/CyclopesRoom.java index cc8872e31..98111f7c1 100644 --- a/Server/src/main/content/region/asgarnia/burthorpe/handlers/wguild/cyclopes/CyclopesRoom.java +++ b/Server/src/main/content/region/asgarnia/burthorpe/handlers/wguild/cyclopes/CyclopesRoom.java @@ -129,7 +129,7 @@ public final class CyclopesRoom extends MapZone implements Plugin { @Override public void configure() { - super.register(new ZoneBorders(2838, 3534, 2876, 3556)); + super.register(new ZoneBorders(2838, 3534, 2876, 3556, 2)); } @Override diff --git a/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt b/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt index 4ace71016..4578a23ee 100644 --- a/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt +++ b/Server/src/main/content/region/asgarnia/falador/diary/FaladorAchievementDiary.kt @@ -13,10 +13,12 @@ import content.region.asgarnia.falador.dialogue.RisingSunInnBartenderDialogue import content.global.handlers.iface.FairyRing import content.global.skill.crafting.lightsources.LightSources import content.global.skill.farming.FarmingPatch +import core.api.getStatLevel import core.game.diary.AreaDiaryTask import core.game.diary.DiaryEventHookBase import core.game.diary.DiaryLevel import core.game.event.* +import core.game.node.entity.skill.Skills class FaladorAchievementDiary : DiaryEventHookBase(DiaryType.FALADOR) { companion object { @@ -152,7 +154,7 @@ class FaladorAchievementDiary : DiaryEventHookBase(DiaryType.FALADOR) { } } - if (event.option == "pickpocket" && (event.target.id in FALADOR_GUARD && inBorders(player, FALADOR_GENERAL_AREA))) { + if (event.option == "pickpocket" && (event.target.id in FALADOR_GUARD && inBorders(player, FALADOR_GENERAL_AREA) && getStatLevel(player, Skills.THIEVING) >= 40)) { finishTask( player, DiaryLevel.MEDIUM, diff --git a/Server/src/main/content/region/misthalin/barbvillage/stronghold/BoxOfHealthDialogue.java b/Server/src/main/content/region/misthalin/barbvillage/stronghold/BoxOfHealthDialogue.java index 47dc6d842..3647f087d 100644 --- a/Server/src/main/content/region/misthalin/barbvillage/stronghold/BoxOfHealthDialogue.java +++ b/Server/src/main/content/region/misthalin/barbvillage/stronghold/BoxOfHealthDialogue.java @@ -1,9 +1,12 @@ package content.region.misthalin.barbvillage.stronghold; +import core.api.Container; import core.game.dialogue.DialoguePlugin; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.emote.Emotes; -import core.game.node.item.Item; +import org.rs09.consts.Items; + +import static core.api.ContentAPIKt.addItem; /** * Represents the dialogue plugin used for the box of health. @@ -12,11 +15,6 @@ import core.game.node.item.Item; */ public final class BoxOfHealthDialogue extends DialoguePlugin { - /** - * Represents the coins to recieve. - */ - private static final Item COINS = new Item(995, 5000); - /** * Constructs a new {@code BoxOfHealth} {@code Object}. */ @@ -50,13 +48,12 @@ public final class BoxOfHealthDialogue extends DialoguePlugin { public boolean handle(int interfaceId, int buttonId) { switch (stage) { case 0: - if (player.getInventory().freeSlots() == 0) { + if (!addItem(player, Items.COINS_995, 5000, Container.INVENTORY)) { player.getPacketDispatch().sendMessage("You don't have enough inventory space."); end(); break; } stage = 1; - player.getInventory().add(COINS); interpreter.sendDialogue("...congratulations adventurer, you have been deemed worthy of this", "reward. You have also unlocked the Idea emote!"); player.getEmoteManager().unlock(Emotes.IDEA); player.getSavedData().getGlobalData().getStrongHoldRewards()[2] = true; diff --git a/Server/src/main/content/region/misthalin/barbvillage/stronghold/CradleOfLifeDialogue.java b/Server/src/main/content/region/misthalin/barbvillage/stronghold/CradleOfLifeDialogue.java index 193bfb984..9ff2f0255 100644 --- a/Server/src/main/content/region/misthalin/barbvillage/stronghold/CradleOfLifeDialogue.java +++ b/Server/src/main/content/region/misthalin/barbvillage/stronghold/CradleOfLifeDialogue.java @@ -43,8 +43,11 @@ public final class CradleOfLifeDialogue extends DialoguePlugin { @Override public boolean open(Object... args) { - if (player.getSavedData().getGlobalData().getStrongHoldRewards()[3]) { - player.getEmoteManager().unlock(Emotes.STOMP); + if (player.getSavedData().getGlobalData().getStrongHoldRewards()[3] && player.getSavedData().getGlobalData().getStrongHoldRewards()[2] && player.getSavedData().getGlobalData().getStrongHoldRewards()[1] && player.getSavedData().getGlobalData().getStrongHoldRewards()[0]) { + // Unlocks emotes for older accounts who don't have the previous level emotes + player.getEmoteManager().unlock(Emotes.FLAP); + player.getEmoteManager().unlock(Emotes.SLAP_HEAD); + player.getEmoteManager().unlock(Emotes.IDEA); } if (player.getInventory().freeSlots() == 0) { player.getPacketDispatch().sendMessage("You don't have enough inventory space."); diff --git a/Server/src/main/content/region/misthalin/barbvillage/stronghold/GiftOfPeaceDialogue.java b/Server/src/main/content/region/misthalin/barbvillage/stronghold/GiftOfPeaceDialogue.java index 93d9d33fb..1adee0589 100644 --- a/Server/src/main/content/region/misthalin/barbvillage/stronghold/GiftOfPeaceDialogue.java +++ b/Server/src/main/content/region/misthalin/barbvillage/stronghold/GiftOfPeaceDialogue.java @@ -1,9 +1,13 @@ package content.region.misthalin.barbvillage.stronghold; +import core.api.Container; import core.game.dialogue.DialoguePlugin; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.emote.Emotes; import core.game.node.item.Item; +import org.rs09.consts.Items; + +import static core.api.ContentAPIKt.addItem; /** * Represents the gift of peace dialogue plugin. @@ -12,11 +16,6 @@ import core.game.node.item.Item; */ public final class GiftOfPeaceDialogue extends DialoguePlugin { - /** - * Represents the coins item. - */ - private static final Item COINS = new Item(995, 2000); - /** * Constructs a new {@code GiftOfPeaceDialogue} {@code Object}. */ @@ -50,14 +49,13 @@ public final class GiftOfPeaceDialogue extends DialoguePlugin { public boolean handle(int interfaceId, int buttonId) { switch (stage) { case 0: - if (player.getInventory().freeSlots() == 0) { + if (!addItem(player, Items.COINS_995, 2000, Container.INVENTORY)) { player.getPacketDispatch().sendMessage("You don't have enough inventory space."); end(); break; } interpreter.sendDialogue("...congratulations adventurer, you have been deemed worthy of this", "reward. You have also unlocked the Flap emote!"); stage = 1; - player.getInventory().add(COINS); player.getEmoteManager().unlock(Emotes.FLAP); player.getSavedData().getGlobalData().getStrongHoldRewards()[0] = true; break; diff --git a/Server/src/main/content/region/misthalin/barbvillage/stronghold/GrainOfPlentyDialogue.java b/Server/src/main/content/region/misthalin/barbvillage/stronghold/GrainOfPlentyDialogue.java index 05a585c6c..8cef49bf4 100644 --- a/Server/src/main/content/region/misthalin/barbvillage/stronghold/GrainOfPlentyDialogue.java +++ b/Server/src/main/content/region/misthalin/barbvillage/stronghold/GrainOfPlentyDialogue.java @@ -1,9 +1,13 @@ package content.region.misthalin.barbvillage.stronghold; +import core.api.Container; import core.game.dialogue.DialoguePlugin; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.emote.Emotes; import core.game.node.item.Item; +import org.rs09.consts.Items; + +import static core.api.ContentAPIKt.addItem; /** * Represents the grain of plenty dialogue plugin. @@ -12,10 +16,6 @@ import core.game.node.item.Item; */ public final class GrainOfPlentyDialogue extends DialoguePlugin { - /** - * Represents the coins item. - */ - private static final Item COINS = new Item(995, 3000); /** * Constructs a new {@code GrainOfPlenty} {@code Object}. @@ -50,7 +50,7 @@ public final class GrainOfPlentyDialogue extends DialoguePlugin { public boolean handle(int interfaceId, int buttonId) { switch (stage) { case 0: - if (player.getInventory().freeSlots() == 0) { + if (!addItem(player, Items.COINS_995, 3000, Container.INVENTORY)) { player.getPacketDispatch().sendMessage("You don't have enough inventory space."); end(); break; @@ -58,7 +58,6 @@ public final class GrainOfPlentyDialogue extends DialoguePlugin { player.getSavedData().getGlobalData().getStrongHoldRewards()[1] = true; interpreter.sendDialogue("...congratualtions adventurer, you have been deemed worthy of this", "reward. You have also unlocked the Slap Head emote!"); stage = 1; - player.getInventory().add(COINS); player.getEmoteManager().unlock(Emotes.SLAP_HEAD); break; case 1: diff --git a/Server/src/main/core/cache/def/impl/ItemDefinition.java b/Server/src/main/core/cache/def/impl/ItemDefinition.java index 8588d8527..dd38ea0d1 100644 --- a/Server/src/main/core/cache/def/impl/ItemDefinition.java +++ b/Server/src/main/core/cache/def/impl/ItemDefinition.java @@ -1,5 +1,6 @@ package core.cache.def.impl; +import core.ServerConstants; import core.api.EquipmentSlot; import core.cache.Cache; import core.cache.def.Definition; @@ -10,6 +11,7 @@ import core.game.node.entity.player.Player; import core.game.node.entity.skill.Skills; import core.game.node.item.Item; import core.game.node.item.ItemPlugin; +import core.game.world.GameWorld; import core.net.packet.PacketRepository; import core.net.packet.out.WeightUpdate; import core.plugin.Plugin; @@ -615,6 +617,9 @@ public class ItemDefinition extends Definition { if (i == null) { continue; } + if (GameWorld.getSettings().getSkillcape_perks() && i.getId() == Items.RUNECRAFT_CAPE_9765 || i.getId() == Items.RUNECRAFT_CAPET_9766) { + continue; + } if (!i.getDefinition().isAllowedOnEntrana()) { return false; } 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 d6382f529..2bbbd4c02 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 @@ -1,14 +1,13 @@ package core.game.node.entity.player.link; -import content.region.wilderness.handlers.WildernessObeliskPlugin; import core.ServerConstants; import core.game.node.entity.Entity; import core.game.node.entity.impl.Animator.Priority; import core.game.node.entity.player.Player; -import core.game.node.entity.player.link.audio.Audio; import core.game.system.task.Pulse; import core.game.world.GameWorld; import core.game.world.map.Location; +import core.game.world.map.zone.ZoneRestriction; import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Graphics; import org.rs09.consts.Sounds; @@ -100,7 +99,7 @@ public class TeleportManager { if (!entity.getZoneMonitor().teleport(teleportType, null)) { return false; } - if (teleportType != -1 && entity.isTeleBlocked()) { + if (teleportType != -1 && (entity.isTeleBlocked() || entity.getZoneMonitor().isRestricted(ZoneRestriction.TELEPORT))) { if (entity.isPlayer()) entity.asPlayer().sendMessage("A magical force has stopped you from teleporting."); return false; diff --git a/Server/src/main/core/game/world/map/zone/ZoneRestriction.java b/Server/src/main/core/game/world/map/zone/ZoneRestriction.java index 036e43ad1..f73b50014 100644 --- a/Server/src/main/core/game/world/map/zone/ZoneRestriction.java +++ b/Server/src/main/core/game/world/map/zone/ZoneRestriction.java @@ -34,6 +34,11 @@ public enum ZoneRestriction { * Do not spawn a grave if a player dies here */ GRAVES, + + /** + * No teleporting allowed. + */ + TELEPORT, ; /** diff --git a/Server/src/main/core/game/world/map/zone/impl/DarkZone.java b/Server/src/main/core/game/world/map/zone/impl/DarkZone.java index 6cf4c4ab8..1340dcde2 100644 --- a/Server/src/main/core/game/world/map/zone/impl/DarkZone.java +++ b/Server/src/main/core/game/world/map/zone/impl/DarkZone.java @@ -6,6 +6,7 @@ import core.game.event.UseWithEvent; import core.game.component.Component; import content.data.LightSource; import core.game.interaction.Option; +import core.game.interaction.QueueStrength; import core.game.node.Node; import core.game.node.entity.Entity; import core.game.node.entity.combat.CombatStyle; @@ -21,8 +22,7 @@ import org.jetbrains.annotations.NotNull; import core.api.Event; import core.game.world.GameWorld; -import static core.api.ContentAPIKt.getItemName; -import static core.api.ContentAPIKt.runTask; +import static core.api.ContentAPIKt.*; /** * Handles a dark area. @@ -156,9 +156,11 @@ public final class DarkZone extends MapZone implements EventHook{ public void updateOverlay(Player player) { LightSource source = LightSource.getActiveLightSource(player); if(SkillcapePerks.isActive(SkillcapePerks.CONSTANT_GLOW,player)){ - if(player.getInterfaceManager().getOverlay().getId() == DARKNESS_OVERLAY.getId()) - player.getInterfaceManager().closeOverlay(); - return; + queueScript(player, 1, QueueStrength.SOFT, false, (Integer stage) -> { + if(player.getInterfaceManager().getOverlay().getId() == DARKNESS_OVERLAY.getId()) + player.getInterfaceManager().closeOverlay(); + return stopExecuting(player); + }); } int overlay = -1; if (player.getInterfaceManager().getOverlay() != null) {