mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-09 16:45:44 -07:00
Players are now rescued out of the unimplemented high-level Bounty Hunter crater
This commit is contained in:
parent
e31397b42f
commit
64fa1d89c3
1 changed files with 75 additions and 0 deletions
|
|
@ -0,0 +1,75 @@
|
||||||
|
package content.minigame.bountyhunter.handlers
|
||||||
|
|
||||||
|
import core.api.*
|
||||||
|
import core.game.node.entity.Entity
|
||||||
|
import core.game.node.entity.npc.NPC
|
||||||
|
import core.game.node.entity.player.Player
|
||||||
|
import core.game.system.task.Pulse
|
||||||
|
import core.game.world.map.Location
|
||||||
|
import core.game.world.map.zone.ZoneBorders
|
||||||
|
import org.rs09.consts.NPCs
|
||||||
|
import core.game.dialogue.DialogueFile
|
||||||
|
import core.game.world.GameWorld
|
||||||
|
|
||||||
|
class UnimplementedCraterArea : MapArea {
|
||||||
|
override fun defineAreaBorders(): Array<ZoneBorders> {
|
||||||
|
return arrayOf(
|
||||||
|
ZoneBorders(3200, 5632, 3391, 5823)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areaEnter(entity: Entity) {
|
||||||
|
if (entity is Player && (
|
||||||
|
defineAreaBorders()[0].insideBorder(entity)
|
||||||
|
)) {
|
||||||
|
kickThemOut(entity)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun kickThemOut(entity: Player) {
|
||||||
|
val watchdog = NPC(NPCs.BANKER_6538)
|
||||||
|
watchdog.isNeverWalks = true
|
||||||
|
watchdog.isWalks = false
|
||||||
|
watchdog.location = entity.location
|
||||||
|
watchdog.init()
|
||||||
|
entity.lock()
|
||||||
|
|
||||||
|
runTask(watchdog, 1) {
|
||||||
|
watchdog.moveStep()
|
||||||
|
watchdog.face(entity)
|
||||||
|
openDialogue(entity, UnimplementedCraterDialogue(), watchdog)
|
||||||
|
GameWorld.Pulser.submit(object : Pulse() {
|
||||||
|
override fun pulse(): Boolean {
|
||||||
|
if (getAttribute(entity, "teleporting-away", false))
|
||||||
|
return true
|
||||||
|
if (!entity.isActive)
|
||||||
|
poofClear(watchdog)
|
||||||
|
if (entity.dialogueInterpreter.dialogue == null || entity.dialogueInterpreter.dialogue.file == null)
|
||||||
|
openDialogue(entity, UnimplementedCraterDialogue(), watchdog)
|
||||||
|
return !watchdog.isActive || !entity.isActive
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UnimplementedCraterDialogue : DialogueFile() {
|
||||||
|
override fun handle(componentID: Int, buttonID: Int) {
|
||||||
|
when(stage) {
|
||||||
|
0 -> npcl(core.game.dialogue.FacialExpression.WORRIED, "This is unimplemented content, and you are now stuck. Don't worry, I'll get you out of here!").also { stage++ }
|
||||||
|
1 -> {
|
||||||
|
end()
|
||||||
|
visualize(npc!!, 1818, 343)
|
||||||
|
sendGraphics(342, player!!.location)
|
||||||
|
setAttribute(player!!, "teleporting-away", true)
|
||||||
|
runTask(player!!, 3) {
|
||||||
|
poofClear(npc!!)
|
||||||
|
teleport(player!!, Location.create(3179, 3685, 0))
|
||||||
|
unlock(player!!)
|
||||||
|
removeAttribute(player!!, "teleporting-away")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue