diff --git a/Server/src/main/java/core/game/content/quest/free/demonslayer/DemonSlayerCutscene.java b/Server/src/main/java/core/game/content/quest/free/demonslayer/DemonSlayerCutscene.java index 6de56ef71..d9cae6508 100644 --- a/Server/src/main/java/core/game/content/quest/free/demonslayer/DemonSlayerCutscene.java +++ b/Server/src/main/java/core/game/content/quest/free/demonslayer/DemonSlayerCutscene.java @@ -177,7 +177,7 @@ public final class DemonSlayerCutscene extends CutscenePlugin { @Override public void register() { - register(new ZoneBorders(3222, 3364, 3234, 3375)); + //register(new ZoneBorders(3222, 3364, 3234, 3375)); try { new DarkWizardNPC().newInstance(null); new DelrithNPC().newInstance(null); diff --git a/Server/src/main/kotlin/api/ContentAPI.kt b/Server/src/main/kotlin/api/ContentAPI.kt index 00c566340..b7e64eb69 100644 --- a/Server/src/main/kotlin/api/ContentAPI.kt +++ b/Server/src/main/kotlin/api/ContentAPI.kt @@ -751,6 +751,10 @@ fun setAttribute(entity: Entity, attribute: String, value: T) { entity.setAttribute(attribute, value) } +fun removeAttribute(entity: Entity, attribute: String) { + entity.removeAttribute(attribute) +} + /** * Locks the given entity for the given number of ticks * @param entity the entity to lock diff --git a/Server/src/main/kotlin/api/MapArea.kt b/Server/src/main/kotlin/api/MapArea.kt index 0a1945695..8dea8a4a4 100644 --- a/Server/src/main/kotlin/api/MapArea.kt +++ b/Server/src/main/kotlin/api/MapArea.kt @@ -11,7 +11,7 @@ import core.game.world.map.zone.ZoneRestriction * Interface that allows a class to define a map area. * Optionally-overridable methods include [getRestrictions], [areaEnter], [areaLeave] and [entityStep] */ -interface MapArea { +interface MapArea : ContentInterface { var zone: MapZone get(){ return zoneMaps[this.javaClass.simpleName + "MapArea"]!! @@ -29,4 +29,4 @@ interface MapArea { companion object { val zoneMaps = HashMap() } -} \ No newline at end of file +} diff --git a/Server/src/main/kotlin/rs09/game/content/quest/free/demonslayer/DSCutsceneTrigger.kt b/Server/src/main/kotlin/rs09/game/content/quest/free/demonslayer/DSCutsceneTrigger.kt new file mode 100644 index 000000000..54a48a987 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/quest/free/demonslayer/DSCutsceneTrigger.kt @@ -0,0 +1,28 @@ +package rs09.game.content.quest.free.demonslayer + +import api.* +import core.game.world.map.zone.ZoneBorders +import core.game.content.activity.ActivityManager +import core.game.node.entity.Entity +import core.game.node.entity.player.Player +import org.rs09.consts.Items + +class DSCutsceneTrigger : MapArea { + + override fun defineAreaBorders() : Array { + return arrayOf(ZoneBorders(3222, 3364, 3234, 3375)) + } + + override fun areaEnter(entity: Entity) { + if (entity !is Player) return + + val quest = entity.questRepository.getQuest("Demon Slayer") + val alreadyInCutscene = getAttribute(entity, "demon-slayer:cutscene", false) + val hasSilverlight = inInventory(entity, Items.SILVERLIGHT_2402) || inEquipment(entity, Items.SILVERLIGHT_2402) + + if (quest.getStage(entity) == 30 && !alreadyInCutscene && hasSilverlight) { + ActivityManager.start(entity, "Demon Slayer Cutscene", false) + setAttribute(entity, "demon-slayer:cutscene", true) + } + } +}