diff --git a/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java b/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java index b1d911271..9f966cb16 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java +++ b/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java @@ -232,7 +232,11 @@ public final class QuestRepository { * @return The stage. */ public int getStage(String name) { - return getStage(QUESTS.get(name)); + var quest = QUESTS.get(name); + if (quest == null) { + return 0; + } + return getStage(quest); } /** diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt new file mode 100644 index 000000000..5364b8b08 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt @@ -0,0 +1,51 @@ +package rs09.game.interaction.`object` + +import api.* +import core.game.node.entity.skill.Skills +import core.game.node.item.Item +import core.game.node.scenery.Scenery +import core.game.node.scenery.SceneryBuilder +import core.game.system.task.Pulse +import org.rs09.consts.Animations +import org.rs09.consts.Items +import rs09.game.interaction.InteractionListener + +class SeaweedNetHandler : InteractionListener { + + override fun defineListeners() { + on(NET, SCENERY, "Take-from"){ player, node -> + if (!isQuestComplete(player, "Swan Song")) + { + sendMessage(player, "You must complete Swan Song first.") + } + else if (!hasSpaceFor(player, Item(Items.SEAWEED_401, 1))) { + sendMessage(player, "You do not have space in your inventory.") + } + else { + submitIndividualPulse(player, object : Pulse() { + private var tick = 0 + override fun pulse(): Boolean { + when(tick++){ + 0 -> { + animate(player, Animations.HUMAN_BURYING_BONES_827) // no idea what animation is supposed to be used, can't even find a video of this content + } + 1 -> { + if (addItem(player, Items.SEAWEED_401)) { + SceneryBuilder.replace(node.asScenery(), Scenery(EMPTY_NET, node.location, node.asScenery().rotation),5) // osrs wiki says 3 second respawn timer + } + return true + } + } + return false + } + }) + } + return@on true + } + } + + companion object { + private const val NET = 14973 + private const val EMPTY_NET = 14972 + } +}