diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TalismanHandler.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt similarity index 70% rename from Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TalismanHandler.kt rename to Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt index 13a1bbe70..958182f34 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TalismanHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt @@ -1,21 +1,54 @@ package rs09.game.content.quest.members.thefremenniktrials -import core.cache.def.impl.ItemDefinition -import core.game.interaction.OptionHandler -import core.game.node.Node import core.game.node.entity.Entity import core.game.node.entity.player.Player -import core.game.node.item.Item import core.game.system.task.Pulse -import rs09.game.world.GameWorld import core.game.world.map.Location import core.plugin.Initializable -import core.plugin.Plugin +import org.rs09.consts.Items +import rs09.game.interaction.InteractionListener +import rs09.game.world.GameWorld.Pulser import kotlin.math.abs import kotlin.math.atan2 @Initializable -class TalismanHandler : OptionHandler() { +class HunterTalismanListener : InteractionListener() { + + val TALISMAN = Items.HUNTERS_TALISMAN_3696 + + override fun defineListeners() { + + on(TALISMAN,ITEM,"locate"){player,_ -> + var locationString = player?.getAttribute("fremtrials:draugen-loc","none") + if(locationString == "none"){ + val newLoc = possibleLocations.random() + player?.setAttribute("/save:fremtrials:draugen-loc","${newLoc.x},${newLoc.y}") + locationString = "${newLoc.x},${newLoc.y}" + } + val locationComponents = locationString?.split(",") + val draugenLoc = Location(Integer.parseInt(locationComponents?.get(0)),Integer.parseInt(locationComponents?.get(1))) + + if(player.location?.withinDistance(draugenLoc,5)!!){ + player.dialogueInterpreter.sendDialogue("The Draugen is nearby, be careful!") + Pulser.submit(DraugenPulse(player)) + } else { + val neededDirection = draugenLoc.getDirection(player as Entity) + player.sendMessage("The talisman pulls you to the $neededDirection") + } + return@on true + } + + } + + class DraugenPulse(val player: Player?) : Pulse(){ + var count = 0 + override fun pulse(): Boolean { + when(count++){ + 3 -> Draugen(player).init().also { return true } + } + return false + } + } val possibleLocations = listOf(Location(2625,3608), Location(2602,3628), @@ -67,54 +100,4 @@ class TalismanHandler : OptionHandler() { fun diff(x: Double,y: Double): Double{ return abs(x - y) } - - override fun fireEvent(identifier: String?, vararg args: Any?): Any { - return Unit - } - - override fun handle(player: Player?, node: Node?, option: String?): Boolean { - - class DraugenPulse(player: Player?) : Pulse(){ - var count = 0 - override fun pulse(): Boolean { - when(count++){ - 3 -> Draugen(player).init().also { return true } - } - return false - } - } - - var item: Item? = Item(0) - if(node is Item){ - item = node - } else { - return false - } - if(item.id == 3696){ - var locationString = player?.getAttribute("fremtrials:draugen-loc","none") - if(locationString == "none"){ - val newLoc = possibleLocations.random() - player?.setAttribute("/save:fremtrials:draugen-loc","${newLoc.x},${newLoc.y}") - locationString = "${newLoc.x},${newLoc.y}" - } - val locationComponents = locationString?.split(",") - val draugenLoc = Location(Integer.parseInt(locationComponents?.get(0)),Integer.parseInt(locationComponents?.get(1))) - - if(player?.location?.withinDistance(draugenLoc,5)!!){ - player.dialogueInterpreter.sendDialogue("The Draugen is nearby, be careful!") - GameWorld.submit(DraugenPulse(player)) - } else { - val neededDirection = draugenLoc.getDirection(player as Entity) - player.sendMessage("The talisman pulls you to the $neededDirection") - } - return true - } - return false - } - - override fun newInstance(arg: Any?): Plugin { - ItemDefinition.forId(3696).handlers["option:locate"] = this - return this - } - } \ No newline at end of file