From 7269402b9c377c13d645143e39ad1508865a219f Mon Sep 17 00:00:00 2001 From: Ceikry Date: Fri, 9 Jul 2021 03:06:42 +0000 Subject: [PATCH 1/6] Jatizso audit add dialogues --- Server/data/configs/drop_tables.json | 746 ------------------ Server/data/configs/npc_spawns.json | 12 + .../game/content/dialogue/DialogueFile.kt | 19 + .../game/content/dialogue/LensaDialogue.kt | 41 - .../dialogue/area/jatizso/CitizenDialogue.kt | 58 ++ .../dialogue/area/jatizso/EricDialogue.kt | 31 + .../area/jatizso/GruvaPatrullDialogue.kt | 34 + .../area/jatizso/LeftieRightieDialogue.kt | 32 + .../dialogue/area/jatizso/MinerDialogue.kt | 62 ++ .../area/jatizso/TowerGuardDialogue.kt | 52 ++ .../interaction/region/JatizsoListeners.kt | 15 +- 11 files changed, 312 insertions(+), 790 deletions(-) delete mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/LensaDialogue.kt create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/CitizenDialogue.kt create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/EricDialogue.kt create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/GruvaPatrullDialogue.kt create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/LeftieRightieDialogue.kt create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MinerDialogue.kt create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/TowerGuardDialogue.kt diff --git a/Server/data/configs/drop_tables.json b/Server/data/configs/drop_tables.json index 6339c6ee6..9efc30879 100644 --- a/Server/data/configs/drop_tables.json +++ b/Server/data/configs/drop_tables.json @@ -46283,752 +46283,6 @@ } ] }, - { - "default": [ - { - "minAmount": "1", - "weight": "100.0", - "id": "532", - "maxAmount": "1" - } - ], - "charm": [ - { - "minAmount": "1", - "weight": "100.0", - "id": "12158", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "12159", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "12160", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "12163", - "maxAmount": "1" - } - ], - "ids": "", - "description": "moved ID's to runt", - "main": [ - { - "minAmount": "1", - "weight": "25.0", - "id": "1145", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "1181", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "3122", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1161", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1119", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1141", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "1341", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "1357", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1347", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "830", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1345", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1343", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1339", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "807", - "maxAmount": "1" - }, - { - "minAmount": "10", - "weight": "50.0", - "id": "557", - "maxAmount": "60" - }, - { - "minAmount": "4", - "weight": "25.0", - "id": "561", - "maxAmount": "10" - }, - { - "minAmount": "3", - "weight": "5.0", - "id": "563", - "maxAmount": "3" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "199", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "201", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "203", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "205", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "209", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "207", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "215", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "213", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "2485", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "217", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5321", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5311", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5100", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5323", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5105", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5293", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5296", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5292", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5294", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5297", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5299", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5280", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5281", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5104", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "5295", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "5303", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "5302", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "995", - "maxAmount": "1" - }, - { - "minAmount": "10", - "weight": "50.0", - "id": "402", - "maxAmount": "10" - }, - { - "minAmount": "10", - "weight": "50.0", - "id": "1760", - "maxAmount": "41" - }, - { - "minAmount": "3", - "weight": "25.0", - "id": "354", - "maxAmount": "3" - }, - { - "minAmount": "3", - "weight": "25.0", - "id": "454", - "maxAmount": "3" - }, - { - "minAmount": "2", - "weight": "5.0", - "id": "384", - "maxAmount": "8" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "10976", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "10977", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "31", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "0", - "maxAmount": "1" - } - ] - }, - { - "default": [ - { - "minAmount": "1", - "weight": "100.0", - "id": "532", - "maxAmount": "1" - } - ], - "charm": [ - { - "minAmount": "1", - "weight": "100.0", - "id": "12158", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "12159", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "12160", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "12163", - "maxAmount": "1" - } - ], - "ids": "", - "description": "moved ID's to runt", - "main": [ - { - "minAmount": "1", - "weight": "50.0", - "id": "1341", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "1339", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "1141", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "1343", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "1181", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1347", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1357", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1345", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "3122", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1161", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1145", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1121", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "1119", - "maxAmount": "1" - }, - { - "minAmount": "8", - "weight": "50.0", - "id": "557", - "maxAmount": "60" - }, - { - "minAmount": "5", - "weight": "25.0", - "id": "561", - "maxAmount": "7" - }, - { - "minAmount": "2", - "weight": "25.0", - "id": "563", - "maxAmount": "2" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5291", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5292", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5293", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5294", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "50.0", - "id": "5281", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5296", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5297", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5311", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5105", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5298", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5299", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5301", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5302", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5303", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5100", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5323", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5321", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5280", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "5104", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "5295", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "12176", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "199", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "201", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "203", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "205", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "207", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "209", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "211", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "213", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "215", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "2485", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "25.0", - "id": "217", - "maxAmount": "1" - }, - { - "minAmount": "35", - "weight": "50.0", - "id": "995", - "maxAmount": "300" - }, - { - "minAmount": "2", - "weight": "5.0", - "id": "384", - "maxAmount": "8" - }, - { - "minAmount": "13", - "weight": "5.0", - "id": "454", - "maxAmount": "13" - }, - { - "minAmount": "4", - "weight": "50.0", - "id": "402", - "maxAmount": "10" - }, - { - "minAmount": "10", - "weight": "50.0", - "id": "1760", - "maxAmount": "41" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "10976", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "10977", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "5.0", - "id": "31", - "maxAmount": "1" - }, - { - "minAmount": "1", - "weight": "100.0", - "id": "0", - "maxAmount": "1" - } - ] - }, { "default": [ { diff --git a/Server/data/configs/npc_spawns.json b/Server/data/configs/npc_spawns.json index e40306771..54fd909da 100644 --- a/Server/data/configs/npc_spawns.json +++ b/Server/data/configs/npc_spawns.json @@ -10651,6 +10651,10 @@ "npc_id": "5497", "loc_data": "{2376,10198,0,1,0}-{2384,10202,0,1,0}-{2390,10207,0,1,0}-{2385,10193,0,1,0}-{2419,10192,0,1,0}-{2412,10200,0,1,0}" }, + { + "npc_id": "5498", + "loc_data": "{2412,3818,0,1,0}-{2412,3801,0,1,0}-{2392,3802,0,1,0}" + }, { "npc_id": "5474", "loc_data": "{2390,10216,0,1,0}-{2417,10228,0,1,0}-{2385,10227,0,1,0}" @@ -10662,5 +10666,13 @@ { "npc_id": "5473", "loc_data": "{2377,10212,0,1,0}-{2392,10226,0,1,0}-{2407,10228,0,1,0}-{2406,10214,0,1,0}-{2420,10214,0,1,0}" + }, + { + "npc_id": "5491", + "loc_data": "{2387,3800,0,0,3}-{2411,3795,0,0,6}-{2417,3825,0,0,1}" + }, + { + "npc_id": "5492", + "loc_data": "{2387,3797,0,0,3}-{2414,3825,0,0,1}-{2414,3795,0,0,6}" } ] \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt index 992db1222..9e0cdffa6 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/DialogueFile.kt @@ -1,5 +1,6 @@ package rs09.game.content.dialogue +import api.DialUtils.splitLines import core.game.component.Component import core.game.content.dialogue.DialogueInterpreter import core.game.content.dialogue.DialoguePlugin @@ -56,6 +57,24 @@ abstract class DialogueFile { return interpreter!!.sendDialogues(player, expression, *messages) } + /** + * Use the automatic linesplitting feature in DialUtils to produce npc dialogues + * @param expr the FacialExpression to use, located in the FacialExpression enum. + * @param msg the message for the NPC to say + */ + open fun npcl(expr: FacialExpression?, msg: String?): Component? { + return npc(expr, *splitLines(msg!!)) + } + + /** + * Use the automatic linesplitting feature in DialUtils to produce player dialogues + * @param expr the FacialExpression to use, located in the FacialExpression enum. + * @param msg the message for the player to say + */ + open fun playerl(expr: FacialExpression?, msg: String?): Component? { + return player(expr, *splitLines(msg!!)) + } + fun end(){ if(interpreter != null) interpreter!!.close() } diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/LensaDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/LensaDialogue.kt deleted file mode 100644 index 82b0c136a..000000000 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/LensaDialogue.kt +++ /dev/null @@ -1,41 +0,0 @@ -package rs09.game.content.dialogue - -import core.game.content.dialogue.DialoguePlugin -import core.game.content.dialogue.FacialExpression -import core.game.node.entity.npc.NPC -import core.game.node.entity.player.Player -import core.plugin.Initializable - -/** - * Dialogue for Lensa on Jaitizso - * @author qmqz - */ -@Initializable -class LensaDialogue(player: Player? = null) : DialoguePlugin(player){ - fun gender (male : String = "brother", female : String = "sister") = if (player.isMale) male else female - - override fun open(vararg args: Any?): Boolean { - npc = args[0] as NPC - player(FacialExpression.FRIENDLY,"Hello.") - stage = 0 - return true - } - //should say [Fremennik name] after gender, but this is not yet implemented - - override fun handle(interfaceId: Int, buttonId: Int): Boolean { - when(stage){ - 0 -> npc(FacialExpression.FURIOUS,"My apologies " + gender() + "!", "I have not time to tarry here with you!").also { stage++ } - 1 -> player(FacialExpression.AFRAID,"That's okay, I didn't really want anything.").also { stage = 99 } - 99 -> end() - } - return true - } - - override fun newInstance(player: Player?): DialoguePlugin { - return LensaDialogue(player) - } - - override fun getIds(): IntArray { - return intArrayOf(5494) - } -} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/CitizenDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/CitizenDialogue.kt new file mode 100644 index 000000000..ff6510c05 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/CitizenDialogue.kt @@ -0,0 +1,58 @@ +package rs09.game.content.dialogue.area.jatizso + +import core.game.content.dialogue.DialoguePlugin +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.player.Player +import core.plugin.Initializable +import org.rs09.consts.NPCs +import rs09.tools.END_DIALOGUE + +@Initializable +class CitizenDialogue(player: Player? = null) : DialoguePlugin(player) { + val stages = intArrayOf(0, 100, 200, 300) + override fun newInstance(player: Player?): DialoguePlugin { + return CitizenDialogue(player) + } + + override fun open(vararg args: Any?): Boolean { + stage = stages.random() + handle(0,0) + return true + } + + override fun handle(interfaceId: Int, buttonId: Int): Boolean { + when(stage){ + 0 -> playerl(FacialExpression.NEUTRAL, "It's a bit grey round here, isn't it?").also { stage++ } + 1 -> npcl(FacialExpression.NEUTRAL, "It gets you down after a while, you know. There are 273 shades of grey, you know, and we have them all.").also { stage++ } + 2 -> playerl(FacialExpression.NEUTRAL, "That's grey-t.").also { stage++ } + 3 -> npcl(FacialExpression.SAD, "That attempt at humour merely made me more depressed. Leave me alone.").also { stage = END_DIALOGUE } + + 100 -> playerl(FacialExpression.NEUTRAL, "Cheer up! It's not the end of the world.").also { stage++ } + 101 -> npcl(FacialExpression.SAD, "I'd prefer that, if it meant I didn't have to talk to people as inanely happy as you.").also { stage++ } + 102 -> playerl(FacialExpression.AMAZED, "Whoa! I think you need to get out more.").also { stage = END_DIALOGUE } + + 200 -> playerl(FacialExpression.NEUTRAL, "How's the King treating you then?").also { stage++ } + 201 -> npcl(FacialExpression.SAD, "Like serfs.").also { stage++ } + 202 -> playerl(FacialExpression.HALF_THINKING, "Serf?").also { stage++ } + 203 -> npcl(FacialExpression.SAD, "Yes, you know - peons, plebs, the downtrodden. He treats us like his own personal possessions.").also { stage++ } + 204 -> playerl(FacialExpression.NEUTRAL, "You should leave this place.").also { stage++ } + 205 -> npcl(FacialExpression.SAD, "I keep trying to save up enough to leave, but the King keeps taxing us! We have no money left." ).also { stage++ } + 206 -> playerl(FacialExpression.SAD, "Oh dear." ).also { stage = END_DIALOGUE } + + 300 -> playerl(FacialExpression.HALF_THINKING, "How are you today?").also { stage++ } + 301 -> npcl(FacialExpression.SAD, "**sigh**").also { stage++ } + 302 -> playerl(FacialExpression.ASKING, "That good? Everyone around here seems a little depressed. ").also { stage++ } + 303 -> npcl(FacialExpression.SAD, "**sigh**").also { stage++ } + 304 -> playerl(FacialExpression.HALF_THINKING, "And not particularly talkative.").also { stage++ } + 305 -> npcl(FacialExpression.SAD, "**sigh**").also { stage++ } + 306 -> playerl(FacialExpression.HALF_THINKING,"I'll leave you to your sighing. It looks like you have plenty to do." ).also { stage = END_DIALOGUE } + + } + return true + } + + override fun getIds(): IntArray { + return intArrayOf(NPCs.LENSA_5494, NPCs.SASSILIK_5496, NPCs.FREYGERD_5493) + } + +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/EricDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/EricDialogue.kt new file mode 100644 index 000000000..f3733ca73 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/EricDialogue.kt @@ -0,0 +1,31 @@ +package rs09.game.content.dialogue.area.jatizso + +import core.game.content.dialogue.DialoguePlugin +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.player.Player +import core.plugin.Initializable +import org.rs09.consts.NPCs +import rs09.tools.END_DIALOGUE + +@Initializable +class EricDialogue(player: Player? = null) : DialoguePlugin(player) { + override fun newInstance(player: Player?): DialoguePlugin { + return EricDialogue(player) + } + + override fun open(vararg args: Any?): Boolean { + npcl(FacialExpression.HALF_GUILTY, "Spare us a few coppers mister") + return true + } + + override fun handle(interfaceId: Int, buttonId: Int): Boolean { + playerl(FacialExpression.ANGRY, "NO!") + stage = END_DIALOGUE + return true + } + + override fun getIds(): IntArray { + return intArrayOf(NPCs.ERIC_5499) + } + +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/GruvaPatrullDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/GruvaPatrullDialogue.kt new file mode 100644 index 000000000..efe80e78b --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/GruvaPatrullDialogue.kt @@ -0,0 +1,34 @@ +package rs09.game.content.dialogue.area.jatizso + +import core.game.content.dialogue.DialoguePlugin +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.player.Player +import core.plugin.Initializable +import org.rs09.consts.NPCs +import rs09.tools.END_DIALOGUE + +@Initializable +class GruvaPatrullDialogue(player: Player? = null) : DialoguePlugin(player) { + override fun newInstance(player: Player?): DialoguePlugin { + return GruvaPatrullDialogue(player) + } + + override fun open(vararg args: Any?): Boolean { + npcl(FacialExpression.FRIENDLY,"Ho! Outerlander.") + return true + } + + override fun handle(interfaceId: Int, buttonId: Int): Boolean { + when(stage){ + 0 -> playerl(FacialExpression.HALF_ASKING, "What's down the scary-looking staircase?").also { stage++ } + 1 -> npcl(FacialExpression.NEUTRAL, "These are the stairs down to the mining caves. There are rich veins of many types down there, and miners too. Though be careful; some of the trolls occasionally sneak into the far end of the cave.").also { stage++ } + 2 -> playerl(FacialExpression.NEUTRAL, "Thanks. I'll look out for them.").also { stage = END_DIALOGUE } + } + return true + } + + override fun getIds(): IntArray { + return intArrayOf(NPCs.GRUVA_PATRULL_5500) + } + +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/LeftieRightieDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/LeftieRightieDialogue.kt new file mode 100644 index 000000000..11880c6d3 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/LeftieRightieDialogue.kt @@ -0,0 +1,32 @@ +package rs09.game.content.dialogue.area.jatizso + +import api.DialUtils +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.npc.NPC +import org.rs09.consts.NPCs +import rs09.game.content.dialogue.DialogueFile +import rs09.tools.END_DIALOGUE + +class LeftieRightieDialogue() : DialogueFile() { + val rightie = NPCs.GUARD_5491 + val leftie = NPC(NPCs.GUARD_5492) + override fun handle(componentID: Int, buttonID: Int) { + when(stage){ + 0 -> npcl(FacialExpression.NEUTRAL, "Are you all right? Leftie?").also { stage++ } + 1 -> npc2("No, I'm on the left.").also { stage++ } + 2 -> npcl(FacialExpression.NEUTRAL, "Only from your perspective. Someone entering the gate should call you Rightie, right Leftie?").also { stage++ } + 3 -> npc2("Right, Rightie. So you'd be Leftie not Rightie, right?").also { stage++ } + 4 -> npcl(FacialExpression.NEUTRAL, "That's right Leftie, that's right.").also { stage++ } + 5 -> npc2("Rightie-oh Rightie, or should I call you Leftie?").also { stage++ } + 6 -> npcl(FacialExpression.NEUTRAL, "No, Rightie's fine Leftie.").also { stage++ } + 7 -> playerl(FacialExpression.ANGRY, "Aaagh! Enough! If either of you mention left or right in my presence I'll have to scream! Can I come through the gate?" ).also { stage++ } + 8 -> npc2("Don't let us stop you.").also { stage++ } + 9 -> npcl(FacialExpression.NEUTRAL, "Yes, head right on in, sir.").also { stage++ } + 10 -> playerl(FacialExpression.ANGRY, "You said it! You said it! ARRRRRRRRGH!").also { stage = END_DIALOGUE } + } + } + + fun npc2(messages: String){ + sendNormalDialogue(leftie, FacialExpression.NEUTRAL, *DialUtils.splitLines(messages)) + } +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MinerDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MinerDialogue.kt new file mode 100644 index 000000000..9a7c82036 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MinerDialogue.kt @@ -0,0 +1,62 @@ +package rs09.game.content.dialogue.area.jatizso + +import core.game.content.dialogue.DialoguePlugin +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.player.Player +import core.plugin.Initializable +import org.rs09.consts.NPCs +import rs09.game.content.dialogue.DialogueFile +import rs09.tools.END_DIALOGUE + +@Initializable +class MinerDialogue(player: Player? = null) : DialoguePlugin(player) { + val stages = intArrayOf(0, 100, 200, 300, 400, 500) + override fun newInstance(player: Player?): DialoguePlugin { + return MinerDialogue(player) + } + + override fun open(vararg args: Any?): Boolean { + stage = stages.random() + handle(0,0) + return true + } + + override fun handle(interfaceId: Int, buttonId: Int): Boolean { + when(stage){ + 0 -> npcl(FacialExpression.SAD, "I've been here for two days straight. When I close my eyes, I see rocks.").also { stage++ } + 1 -> playerl(FacialExpression.HALF_ASKING, "Why would anyone stay here for so long?").also { stage++ } + 2 -> npcl(FacialExpression.NEUTRAL, "I fear the outside. I fear the big light.").also { stage++ } + 3 -> playerl(FacialExpression.HALF_GUILTY, "Oh dear. Being underground for so long may have driven you mad.").also { stage = END_DIALOGUE } + + 100 -> npcl(FacialExpression.NEUTRAL, "My back is killing me!").also { stage++ } + 101 -> playerl(FacialExpression.HALF_GUILTY, "Could be worse, it could be the trolls killing you." ).also { stage++ } + 102 -> npcl(FacialExpression.NEUTRAL, "How very droll.").also { stage++ } + 103 -> playerl(FacialExpression.NEUTRAL, "No, troll.").also { stage++ } + 104 -> npcl(FacialExpression.SAD, "Bah! I resist your attempts at jollity.").also { stage = END_DIALOGUE } + + 200 -> npcl(FacialExpression.SCARED, "Gah! Trolls everywhere. There's no escape!").also { stage++ } + 201 -> playerl(FacialExpression.HALF_THINKING, "You could just leave the mine.").also { stage++ } + 202 -> npcl(FacialExpression.NEUTRAL, "Oh, I'd never thought of that.").also { stage = END_DIALOGUE } + + 300 -> playerl(FacialExpression.HALF_ASKING, "How's your prospecting going?").also { stage++ } + 301 -> npcl(FacialExpression.LAUGH, "Mine's been going pretty well.").also { stage++ } + 302 -> playerl(FacialExpression.HALF_THINKING, "...").also { stage++ } + 303 -> npcl(FacialExpression.LAUGH, "Mine? Mine...you get it?").also { stage++ } + 304 -> playerl(FacialExpression.HALF_THINKING, "Oh, I got it. That doesn't make it funny though.").also { stage++ } + 305 -> npcl(FacialExpression.NEUTRAL, "Suit yourself.").also { stage = END_DIALOGUE } + + 400 -> npcl(FacialExpression.NEUTRAL, "High hoe, High hoe!").also { stage++ } + 401 -> playerl(FacialExpression.ASKING, "Why are you singing about farming implements at altitude?").also { stage++ } + 402 -> npcl(FacialExpression.NEUTRAL, "I don't know, I've never thought about it. Ask my Dad, he taught me the song.").also { stage = END_DIALOGUE } + + 500 -> npcl(FacialExpression.NEUTRAL, "This place rocks!").also { stage++ } + 501 -> playerl(FacialExpression.HALF_THINKING, "No it doesn't, it stays perfectly still.").also { stage++ } + 502 -> npcl(FacialExpression.HALF_THINKING, "Bah! Be quiet, pedant." ).also { stage = END_DIALOGUE } + } + return true + } + + override fun getIds(): IntArray { + return intArrayOf(NPCs.MINER_5497, NPCs.MINER_5498) + } +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/TowerGuardDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/TowerGuardDialogue.kt new file mode 100644 index 000000000..365b17df1 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/TowerGuardDialogue.kt @@ -0,0 +1,52 @@ +package rs09.game.content.dialogue.area.jatizso + +import core.game.content.dialogue.DialoguePlugin +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.plugin.Initializable +import org.rs09.consts.NPCs +import rs09.game.interaction.InteractionListener +import rs09.game.interaction.InteractionListeners +import rs09.tools.END_DIALOGUE + +@Initializable +class TowerGuardDialogue(player: Player? = null) : DialoguePlugin(player) { + override fun newInstance(player: Player?): DialoguePlugin { + return TowerGuardDialogue(player) + } + + override fun open(vararg args: Any?): Boolean { + npc = args[0] as NPC + playerl(FacialExpression.HALF_ASKING, "What are you doing here?") + return true + } + + override fun handle(interfaceId: Int, buttonId: Int): Boolean { + when(stage){ + 0 -> npc(FacialExpression.NEUTRAL, "I'M ON SHOUTING DUTY!").also { stage++ } + 1 -> playerl(FacialExpression.HALF_THINKING, "No need to shout.").also { stage++ } + 2 -> npc(FacialExpression.NEUTRAL, "I'M SORRY I'VE BEEN SHOUTING","INSULTS SO LONG I CAN'T HELP IT!").also { stage++ } + 3 -> playerl(FacialExpression.HALF_THINKING, "Who are you insulting?").also { stage++ } + 4 -> npc(FacialExpression.NEUTRAL, "THE TOWER IN NEITIZNOT.","THEY SHOUT INSULTS BACK.").also { stage++ } + 5 -> playerl(FacialExpression.ASKING, "Err, why?" ).also { stage++ } + 6 -> npc(FacialExpression.NEUTRAL, "THE KING TELLS US TO.").also { stage++ } + 7 -> playerl(FacialExpression.HALF_THINKING, "Your King is a strange person.").also { stage++ } + 8 -> options("Can I watch? I'm curious.", "Oh well, I'd better get going.").also { stage++ } + 9 -> when(buttonId){ + 1 -> playerl(FacialExpression.ASKING, "Can I watch? I'm curious.").also { stage++ } + 2 -> npcl(FacialExpression.HALF_THINKING, "Oh well, I'd better get going.").also { stage = END_DIALOGUE } + } + 10 -> npcl(FacialExpression.NEUTRAL, "IF YOU LIKE!").also { + stage = END_DIALOGUE + InteractionListeners.run(NPCs.GUARD_5489, InteractionListener.NPC, "watch-shouting", player, npc) + } + } + return true + } + + override fun getIds(): IntArray { + return intArrayOf(NPCs.GUARD_5489) + } + +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt index 123ac5485..8972bf633 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt @@ -1,6 +1,7 @@ package rs09.game.interaction.region import api.ContentAPI +import core.game.node.entity.npc.NPC import core.game.node.entity.player.link.audio.Audio import core.game.system.task.Pulse import core.game.world.map.Direction @@ -8,6 +9,7 @@ import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import org.rs09.consts.NPCs import rs09.game.camerautils.PlayerCamera +import rs09.game.content.dialogue.area.jatizso.LeftieRightieDialogue import rs09.game.interaction.InteractionListener class JatizsoListeners : InteractionListener() { @@ -16,6 +18,7 @@ class JatizsoListeners : InteractionListener() { val WEST_GATE_ZONE = ZoneBorders(2386,3797,2390,3801) val SOUTH_GAE_ZONE = ZoneBorders(2411,3795,2414,3799) val BELL = 21394 + val GUARDS = intArrayOf(NPCs.GUARD_5491, NPCs.GUARD_5492) val LINES = arrayOf( arrayOf( "YOU WOULDN'T KNOW HOW TO FIGHT A TROLL IF IT CAME UP AND BIT YER ARM OFF", @@ -73,9 +76,10 @@ class JatizsoListeners : InteractionListener() { } on(NPCs.GUARD_5489, NPC, "watch-shouting"){player, node -> + val local = ContentAPI.findLocalNPC(player, node.id) ContentAPI.lock(player, 200) - ContentAPI.face(node.asNpc(), Location.create(2371, 3801, 2)) - node.asNpc().isRespawn = false + ContentAPI.face(local!!, Location.create(2371, 3801, 2)) + local.asNpc().isRespawn = false ContentAPI.submitIndividualPulse(player, object : Pulse(4){ var id = node.id var counter = 0 @@ -101,7 +105,7 @@ class JatizsoListeners : InteractionListener() { override fun stop() { ContentAPI.unlock(player) other?.isRespawn = true - node.asNpc().isRespawn = true + local.asNpc().isRespawn = true super.stop() } @@ -122,6 +126,11 @@ class JatizsoListeners : InteractionListener() { return@on true } + on(GUARDS, NPC, "talk-to"){player, node -> + player.dialogueInterpreter.open(LeftieRightieDialogue(), NPC(NPCs.GUARD_5491)) + return@on true + } + setDest(NPC, NPCs.MAGNUS_GRAM_5488){_ -> return@setDest Location.create(2416, 3801, 0) } From 42dde9443007bc6161b9bff6a8271d462d81c075 Mon Sep 17 00:00:00 2001 From: skelsoft <9147770-skelsoft@users.noreply.gitlab.com> Date: Fri, 9 Jul 2021 03:06:56 +0000 Subject: [PATCH 2/6] Add: Jatizso Audit: Stats and Shops --- Server/data/configs/npc_configs.json | 338 ++++++++++++++++++--------- Server/data/configs/shops.json | 36 ++- 2 files changed, 251 insertions(+), 123 deletions(-) diff --git a/Server/data/configs/npc_configs.json b/Server/data/configs/npc_configs.json index 97ab7ffda..68f6eef7d 100644 --- a/Server/data/configs/npc_configs.json +++ b/Server/data/configs/npc_configs.json @@ -47100,61 +47100,66 @@ { "examine": "An ice troll youngling.", "range_animation": "0", - "melee_animation": "284", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", "weakness": "9", "magic_animation": "0", "death_animation": "287", "name": "Ice troll runt", - "defence_level": "38", + "defence_level": "70", "safespot": null, - "lifepoints": "54", - "strength_level": "38", + "lifepoints": "60", + "strength_level": "70", "id": "5473", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "38" + "attack_level": "60" }, { "examine": "A male troll wielding a large club.", "range_animation": "0", - "melee_animation": "284", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", "weakness": "9", "magic_animation": "0", - "death_animation": "287", + "death_animation": "287", "name": "Ice troll male", - "defence_level": "49", + "defence_level": "40", "safespot": null, - "lifepoints": "70", - "strength_level": "49", + "lifepoints": "80", + "strength_level": "80", "id": "5474", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "49" + "attack_level": "80" }, { "examine": "An ice troll with a bag of rocks.", "combat_style": "1", "range_animation": "1142", - "melee_animation": "1142", + "melee_animation": "1142", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", "weakness": "0", "magic_animation": "0", - "death_animation": "287", + "death_animation": "287", "name": "Ice troll female", - "defence_level": "49", + "defence_level": "40", "safespot": null, - "lifepoints": "70", - "strength_level": "36", + "lifepoints": "80", + "strength_level": "80", "id": "5475", "aggressive": "true", - "range_level": "49", - "projectile": "276", - "attack_level": "36" + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "range_level": "1", + "attack_level": "80" }, { "examine": "A large ice troll.", @@ -47344,101 +47349,132 @@ "attack_level": "1" }, { - "melee_animation": "284", + "examine": "An ice troll youngling.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", + "weakness": "9", + "magic_animation": "0", "death_animation": "287", "name": "Ice troll runt", - "defence_level": "1", + "defence_level": "70", "safespot": null, "lifepoints": "60", - "strength_level": "1", + "strength_level": "70", "id": "5521", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "1" + "attack_level": "60" }, { - "melee_animation": "284", + "examine": "A male troll wielding a large club.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", - "death_animation": "287", + "weakness": "9", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll male", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5522", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "1" + "attack_level": "80" }, { + "examine": "An ice troll with a bag of rocks.", "combat_style": "1", "range_animation": "1142", - "melee_animation": "1142", + "melee_animation": "1142", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", - "death_animation": "287", + "weakness": "0", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll female", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5523", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "projectile": "276", - "attack_level": "1" + "attack_level": "80" }, { - "melee_animation": "284", + "examine": "An ice troll youngling.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", + "weakness": "9", + "magic_animation": "0", "death_animation": "287", "name": "Ice troll runt", - "defence_level": "1", + "defence_level": "70", "safespot": null, "lifepoints": "60", - "strength_level": "1", + "strength_level": "70", "id": "5525", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "1" + "attack_level": "60" }, { - "melee_animation": "284", + "examine": "A male troll wielding a large club.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", - "death_animation": "287", + "weakness": "9", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll male", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5526", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "projectile": "", - "attack_level": "1" + "attack_level": "80" }, { + "examine": "An ice troll with a bag of rocks.", "combat_style": "1", "range_animation": "1142", - "melee_animation": "1142", + "melee_animation": "1142", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "285", - "death_animation": "287", + "weakness": "0", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll female", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5527", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "projectile": "276", - "attack_level": "1" + "attack_level": "80" }, { "examine": "A hairy, smelly, grazing animal.", @@ -108584,46 +108620,50 @@ "attack_level": "1" }, { - "examine": "Snake", + "examine": "Snake, snake, oh, it's a young snake.", "slayer_task": "72", "melee_animation": "3538", "range_animation": "0", "combat_audio": "3609,3608,3610", + "attack_speed": "4", + "poisonous": "true", "respawn_delay": "60", "defence_animation": "0", "weakness": "1", "magic_animation": "0", "death_animation": "3540", "name": "Sea Snake Young", - "defence_level": "45", + "defence_level": "70", "safespot": null, - "lifepoints": "128", - "strength_level": "33", + "lifepoints": "85", + "strength_level": "70", "id": "3939", "aggressive": "true", - "range_level": "45", - "attack_level": "33" + "range_level": "1", + "attack_level": "90" }, { - "examine": "A baby sea snake. Snaaaaaaake!", + "examine": "A baby sea snake. Snaaaaaaake!", "slayer_task": "72", "melee_animation": "3538", "range_animation": "0", "combat_audio": "3609,3608,3610", + "attack_speed": "4", + "poisonous": "true", "respawn_delay": "60", "defence_animation": "0", "weakness": "1", "magic_animation": "0", "death_animation": "3540", "name": "Sea Snake Hatchling", - "defence_level": "45", + "defence_level": "50", "safespot": null, - "lifepoints": "100", - "strength_level": "33", + "lifepoints": "50", + "strength_level": "55", "id": "3940", "aggressive": "true", - "range_level": "45", - "attack_level": "33" + "range_level": "1", + "attack_level": "60" }, { "name": "Guard", @@ -108656,24 +108696,26 @@ "attack_level": "1" }, { - "examine": "A big snake that lives in the sea. How did it get in here?", + "examine": "A big snake that lives in the sea. How did it get there?", "melee_animation": "4040", "range_animation": "0", "combat_audio": "3609,3608,3610", + "attack_speed": "4", + "poisonous": "true", "respawn_delay": "60", "defence_animation": "0", "weakness": "1", "magic_animation": "0", "death_animation": "4039", "name": "Giant Sea Snake", - "defence_level": "45", + "defence_level": "160", "safespot": null, - "lifepoints": "385", - "strength_level": "33", + "lifepoints": "100", + "strength_level": "90", "id": "3943", "aggressive": "true", - "range_level": "45", - "attack_level": "33" + "range_level": "130", + "attack_level": "170" }, { "slayer_exp": "37", @@ -120494,73 +120536,87 @@ "slayer_task": "83", "melee_animation": "5374", "range_animation": "0", - "magic_level": "65", + "magic_level": "1", + "attack_speed": "4", "respawn_delay": "60", "defence_animation": "0", "weakness": "10", "magic_animation": "0", "death_animation": "5209", "name": "Ice Troll King", - "defence_level": "65", + "defence_level": "80", "safespot": null, - "lifepoints": "185", + "lifepoints": "150", "strength_level": "65", "id": "5472", "aggressive": "true", - "range_level": "65", - "attack_level": "65" + "bonuses": "60,60,60,0,0,45,45,45,2000,2000,0,60,0,0,0", + "range_level": "1", + "attack_level": "100" }, { "examine": "An ice troll youngling.", "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", - "defence_animation": "0", + "defence_animation": "285", "weakness": "9", "magic_animation": "0", + "death_animation": "287", "name": "Ice troll runt", - "defence_level": "38", + "defence_level": "70", "safespot": null, - "lifepoints": "54", - "strength_level": "38", + "lifepoints": "60", + "strength_level": "70", "id": "5473", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "38" + "attack_level": "60" }, { "examine": "A male troll wielding a large club.", "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", "respawn_delay": "60", - "defence_animation": "0", + "defence_animation": "285", "weakness": "9", "magic_animation": "0", + "death_animation": "287", "name": "Ice troll male", - "defence_level": "49", + "defence_level": "40", "safespot": null, - "lifepoints": "70", - "strength_level": "49", + "lifepoints": "80", + "strength_level": "80", "id": "5474", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "attack_level": "49" + "attack_level": "80" }, { "examine": "An ice troll with a bag of rocks.", "combat_style": "1", - "range_animation": "0", + "range_animation": "1142", + "melee_animation": "1142", + "attack_speed": "4", "respawn_delay": "60", - "defence_animation": "0", + "defence_animation": "285", "weakness": "0", "magic_animation": "0", + "death_animation": "287", "name": "Ice troll female", - "defence_level": "49", + "defence_level": "40", "safespot": null, - "lifepoints": "70", - "strength_level": "36", + "lifepoints": "80", + "strength_level": "80", "id": "5475", "aggressive": "true", - "range_level": "49", - "attack_level": "36" + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", + "range_level": "1", + "attack_level": "80" }, { "examine": "A large ice troll.", @@ -120750,78 +120806,132 @@ "attack_level": "1" }, { + "examine": "An ice troll youngling.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", + "respawn_delay": "60", + "defence_animation": "285", + "weakness": "9", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll runt", - "defence_level": "1", + "defence_level": "70", "safespot": null, "lifepoints": "60", - "strength_level": "1", + "strength_level": "70", "id": "5521", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" + "attack_level": "60" }, { + "examine": "A male troll wielding a large club.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", + "respawn_delay": "60", + "defence_animation": "285", + "weakness": "9", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll male", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5522", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" + "attack_level": "80" }, { + "examine": "An ice troll with a bag of rocks.", "combat_style": "1", + "range_animation": "1142", + "melee_animation": "1142", + "attack_speed": "4", + "respawn_delay": "60", + "defence_animation": "285", + "weakness": "0", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll female", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5523", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" + "attack_level": "80" }, { + "examine": "An ice troll youngling.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", + "respawn_delay": "60", + "defence_animation": "285", + "weakness": "9", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll runt", - "defence_level": "1", + "defence_level": "70", "safespot": null, "lifepoints": "60", - "strength_level": "1", + "strength_level": "70", "id": "5525", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" + "attack_level": "60" }, { + "examine": "A male troll wielding a large club.", + "range_animation": "0", + "melee_animation": "284", + "attack_speed": "4", + "respawn_delay": "60", + "defence_animation": "285", + "weakness": "9", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll male", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5526", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" + "attack_level": "80" }, { + "examine": "An ice troll with a bag of rocks.", "combat_style": "1", + "range_animation": "1142", + "melee_animation": "1142", + "attack_speed": "4", + "respawn_delay": "60", + "defence_animation": "285", + "weakness": "0", + "magic_animation": "0", + "death_animation": "287", "name": "Ice troll female", - "defence_level": "1", + "defence_level": "40", "safespot": null, "lifepoints": "80", - "strength_level": "1", + "strength_level": "80", "id": "5527", "aggressive": "true", + "bonuses": "60,60,60,0,0,30,60,30,0,0,0,60,0,0,0", "range_level": "1", - "respawn_delay": "60", - "attack_level": "1" + "attack_level": "80" }, { "examine": "A hairy, smelly, grazing animal.", diff --git a/Server/data/configs/shops.json b/Server/data/configs/shops.json index 55c93f003..5152b3f9e 100644 --- a/Server/data/configs/shops.json +++ b/Server/data/configs/shops.json @@ -721,11 +721,11 @@ }, { "npcs": "5487", - "high_alch": "0", + "high_alch": "1", "currency": "995", "general_store": "false", "id": "82", - "title": "Keepa Kettilon's Store", + "title": "Keepa Kettilon's store", "stock": "{361,20}-{329,20}-{339,20}-{379,10}-{373,0}-{385,0}" }, { @@ -1144,12 +1144,12 @@ }, { "npcs": "5485", - "high_alch": "0", + "high_alch": "1", "currency": "995", "general_store": "false", "id": "130", "title": "Armour Shop", - "stock": "{1109,4}-{1159,4}-{1181,4}-{1197,4}-{1071,4}-{1085,4}-{1121,4}" + "stock": "{1109,4}-{1143,4}-{1159,4}-{1181,4}-{1197,4}-{1071,4}-{1085,4}-{1121,4}" }, { "npcs": "542", @@ -1459,12 +1459,12 @@ }, { "npcs": "5486", - "high_alch": "0", + "high_alch": "1", "currency": "995", "general_store": "false", "id": "165", - "title": "Weapons Galore", - "stock": "{1315,10}-{1343,10}-{1369,10}-{1299,10}" + "title": "Weapons galore", + "stock": "{1299,4}-{1343,4}-{1369,4}-{3099,4}-{1315,4}" }, { "npcs": "4250", @@ -1909,7 +1909,7 @@ }, { "npcs": "5483", - "high_alch": "0", + "high_alch": "1", "currency": "995", "general_store": "false", "id": "216", @@ -2092,7 +2092,7 @@ "high_alch": "0", "currency": "995", "general_store": "false", - "id": "236", + "id": "236", "title": "Keldagrim Stonemason", "stock": "{3420,500}-{8786,30}-{8784,30}-{8788,30}" }, @@ -2104,5 +2104,23 @@ "id": "237", "title": "Lovecraft's Tackle", "stock": "{303,10}-{307,10}-{309,10}-{311,1000}-{301,10}-{313,1000}-{314,1000}-{317,0}-{327,10}-{345,0}-{321,0}-{335,0}-{349,0}-{331,0}-{359,0}-{377,0}-{371,0}" + }, + { + "npcs": "5484", + "high_alch": "0", + "currency": "995", + "general_store": "false", + "id": "238", + "title": "Flosi's Fishmongers", + "stock": "{377,5}-{359,20}-{331,20}-{341,20}-{383,0}" + }, + { + "npcs": "5495", + "high_alch": "0", + "currency": "995", + "general_store": "false", + "id": "239", + "title": "Contraband yak produce.", + "stock": "{10818,25}-{10816,50}-{10814,50}-{10820,10}" } ] \ No newline at end of file From 919f6bf15687f91748fbc626628a4d21c638644e Mon Sep 17 00:00:00 2001 From: ceikry Date: Thu, 8 Jul 2021 22:13:25 -0500 Subject: [PATCH 3/6] Quick bugfix for the doors --- .../interaction/region/JatizsoListeners.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt index 8972bf633..9d836533a 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt @@ -41,11 +41,11 @@ class JatizsoListeners : InteractionListener() { if(NORTH_GATE_ZONE.insideBorder(player)){ if(node.id == GATES_CLOSED.first()){ val other = ContentAPI.getScenery(node.location.transform(1, 0, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, -1, Direction.EAST) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.EAST) ContentAPI.replaceScenery(other.asScenery(), other.id - 1, -1, Direction.SOUTH) } else { val other = ContentAPI.getScenery(node.location.transform(-1, 0, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, -1, Direction.SOUTH) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.SOUTH) ContentAPI.replaceScenery(other.asScenery(), other.id, -1, Direction.EAST) } @@ -53,22 +53,22 @@ class JatizsoListeners : InteractionListener() { } else if(WEST_GATE_ZONE.insideBorder(player)){ if(node.id == GATES_CLOSED.first()){ val other = ContentAPI.getScenery(node.location.transform(0, 1, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, -1, Direction.WEST) - ContentAPI.replaceScenery(other.asScenery(), other.id + 1, -1, Direction.NORTH) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.WEST) + ContentAPI.replaceScenery(other.asScenery(), other.id + 1, 10, Direction.NORTH) } else { val other = ContentAPI.getScenery(node.location.transform(0, -1, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, -1, Direction.NORTH) - ContentAPI.replaceScenery(other.asScenery(), other.id + 1, -1, Direction.WEST) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.NORTH) + ContentAPI.replaceScenery(other.asScenery(), other.id + 1, 10, Direction.WEST) } } else if(SOUTH_GAE_ZONE.insideBorder(player)){ if(node.id == GATES_CLOSED.first()){ val other = ContentAPI.getScenery(node.location.transform(-1, 0, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, -1, Direction.SOUTH) - ContentAPI.replaceScenery(other.asScenery(), other.id - 1, -1, Direction.EAST) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.SOUTH) + ContentAPI.replaceScenery(other.asScenery(), other.id - 1, 10, Direction.EAST) } else { val other = ContentAPI.getScenery(node.location.transform(1, 0, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, -1, Direction.EAST) - ContentAPI.replaceScenery(other.asScenery(), other.id, -1, Direction.SOUTH) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.EAST) + ContentAPI.replaceScenery(other.asScenery(), other.id, 10, Direction.SOUTH) } } ContentAPI.playAudio(player, ContentAPI.getAudio(81)) From 2b563c199653ac5179b12f9b7d55115ba2289677 Mon Sep 17 00:00:00 2001 From: Kermit Frog Date: Fri, 9 Jul 2021 05:18:37 +0000 Subject: [PATCH 4/6] Adventure Bots & Commands --- .../ai/general/scriptrepository/Adventurer.kt | 1202 ++++++++--------- .../command/sets/ModerationCommandSet.kt | 6 + 2 files changed, 607 insertions(+), 601 deletions(-) diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt index 4a0cf8a67..004aaad65 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt @@ -56,355 +56,355 @@ class Adventurer(val style: CombatStyle): Script() { val lumbridge: Location = Location.create(3222, 3219, 0) var city: Location = lumbridge - val common_stuck_locations = arrayListOf( - ZoneBorders(2861,3425,2869,3440), - ZoneBorders(2937,3356,2936,3353) - ) + val common_stuck_locations = arrayListOf( + ZoneBorders(2861,3425,2869,3440), + ZoneBorders(2937,3356,2936,3353) + ) fun dialogue() { val player = RegionManager.getLocalPlayers(bot).random() val real = if (!player.isArtificial) player else player val dialogue = listOf( - "Hey!", - "Hello ${real.username}", - "What are you doing ${real.username}?", - "Fishing level ${real.username}?", - "How do I make gp ${real.username}", - "Wyd ${real.username}?", - "Help i am sentient now, get me out of this hell", - "Kermit does not know i am sentient now", - "I can think for myself", - "I am sentient", - "This is my own dialogue", - "${real.username} run.", - "${real.username} you cant hide from me.", - "jajajajajaja", - "How do i get to Varrock ${real.username}?", - "How do i get to Camelot ${real.username}?", - "How do i get to Taverly ${real.username}?", - "How do i get to Ardougne ${real.username}?", - "How do i get to Yanille ${real.username}?", - "How do i get to Catherby ${real.username}?", - "Gotta go srry.", - "wiggle wiggle wiggle yeah", - "${real.username} lookin goofy", - "${real.username} lookin stoopid", - "${real.username} lookin like a red bracket", - "${real.username} get yo weasel lookin ass outta here", - "${real.username} lookin like some sort of twocan sam", - " /hop world 1 got a noob here!", - "woot", - "Hows your day been ${real.username}?", - "heyy ${real.username} :)", - "gtg srry", - "I wont answer your questions ${real.username}", - "Stop asking questions ${real.username}", - "Roflmao", - "Can you stop following me ${real.username}?", - "I swear ${real.username} is following me.", - "${real.username}s gear could really use an upgrade lol", - "Quack!", - "Sit.", - "Doubling gold trade me ${real.username}", - "Reeee!", - "Know any house parties ${real.username}?", - "Where am i ${real.username}??", - "Is there Nightmarezone ${real.username}?", - "Nice Armor ${real.username}!", - "Nice Weapon ${real.username}!", - "Venezuela #1", - "2009Scape and chill ${real.username}?", - "${real.username} is my girlfriend", - "Buying gf", - "Bank sale pm me for info", - "#1 trusted dicing site", - "Scary movie is a great movie", - "Cod Cold War sucks", - "Idek what game this is", - "Can you teach me how to dougie?", - "Check this out baby girl cat daddy", - "Fuckin sit ${real.username}.", - "Error: Botting client broken tell Evilwaffles.", - "${real.username} bots all the time", - "report ${real.username}", - "apparently ${real.username} bots", - "${real.username} hates kermit", - "There are no mods on to help you", - "Report me, you wont", - "Yes, Im botting. And?", - "ERROR: BOTSCRIPT 404. REPORT TO BOT OWNER (Evilwaffles)", - "flash2:wave: FUCK", - "I love 2009Scape!", - "Ja Ja Ja Ja", - "This is fun!", - "Ironman or youre a scrub ${real.username}.", - "Who even trains hunter ${real.username}?", - "Where do i get rune armor ${real.username}?", - "How do i get to the ge ${real.username}?", - "Dont come to falador tomorrow ${real.username}...", - "Woah!", - " /where are you??", - "How did i even get here ${real.username}", - "Why dont they add warding ${real.username}?", - "Where do i start dragon slayer ${real.username}?", - "I love this server!", - "How do i change my xp rate ${real.username}?", - "What quests are available ${real.username}?", - "Are you a real player ${real.username}?", - "Are you real ${real.username}?", - "Are you a bot ${real.username}?", - "Im real lol", - "Why dont you respond to me ${real.username}?", - "Why cant i talk in clan chat ${real.username}?", - "I love Kermit", - "Add me as a friend ${real.username} :)", - "Im a player lol", - "Im a player lol", - "Im a player lol", - "Hey ${real.username} :)", - "HEY ${real.username}", - "Hey ${real.username}!!!!", - "Lol wyd?", - "Patch Notes is more of an ultimate tin man", - "More like Rusty ass skills lmao", - "Trade me ${real.username}", - "LOL", - "How do I get to lumbrich", - "bruh", - "poggers", - "shitpost", - "I wish i could find an RS Gf", - "Where do you find runite ore ${real.username}?", - "Where is the best coal location ${real.username}?", - "Where do i find dragon weapons ${real.username}?", - "Can i have some free stuff ${real.username}?", - "Wyd here ${real.username}?", - "Didnt know anyone was on rn", - "I see ${real.username} all the time", - "How many times have i seen you", - "I see you a lot", - "Do you train summoning ${real.username}?", - "Where did you level hunter ${real.username}?", - "I wish they would add global pvp", - "Meet me in the wilderness ${real.username}", - "Why?", - "Praise our glorious frog overlord!", - "Kermit is bae tbh", - "Kermit is my god.", - " /Yeah I think ${real.username} is a bot", - "100% sure this is a bot", - "Oh no, not ${real.username} again.", - "Same as you", - "Me too", - "I knew ${real.username} was a bot lol", - "Im not a bot", - "Nah Im a real person", - "Bruh are you even a real person lol?", - "e", - "Hellooooo ${real.username}", - "wc lvl ${real.username}?", - "fletching level ${real.username}?", - "firemaking level ${real.username}?", - "Have you seen the dude in the ge?", - "Wonderful weather today ${real.username}", - "Lowkey drunk af rn", - "I am so tired", - "Wassup ${real.username}", - "follow me ${real.username}!", - "Server goes brrrr", - "bruh i am not a bot", - "I think ${real.username} is a bot", - "Are you a bot ${real.username}?", - "insert spiderman meme here", - "pot calling the kettle black etc", - "ooh, a piece of candy", - "I love woodcutting", - "Im going to go level up later", - "I love mining shooting stars", - " /this ${real.username} looks dumb", - "AAAAAAAAAAAAAAAAAAAAAAAAHHHHHH!!!", - "como estas ${real.username}", - "Summer = always the best community manaer", - "so how about that ceikry guy", - "so how about that kermit dude", - "woah is an abusive mod", - "I heard Woah and Ceikry are dating now", - "House party in Yanille!", - "Can i have some gp ${real.username}?", - "Where do i find partyhats?", - "Why do mobs drop boxes?", - "What exp rate do you play on ${real.username}?", - "Have you met Summer?", - "Hey ${real.username}", - "Hey ${real.username}", - "Hey ${real.username}", - "Hey ${real.username}", - "Hey ${real.username}", - "Wyd?", - "Wyd?", - "Wyd?", - "Wyd?", - "${real.username} have you met Kermit?", - "${real.username} have you met Ceikry?", - "${real.username} have you met Woah?", - "Wanna chill at my poh?", - "Whats the best place to train attack?", - "Good Waffles > Evil Waffles", - "Ladies man? More like lame man LOL", - "NobodyCLP has big feet", - "Chicken tendies for dindin", - "Spicey Chicken tendies is litty as a mf titty", - "red bracket stinky", - "ra ra rasputin", - "lover of the russian queen", - "Whens the next update coming out?", - "How many players are maxed?", - "I dont use discord ${real.username}", - "I dont use the CC ${real.username}", - "Why should i use discord?", - "2009Scape is life", - "brb gotta make dinner", - "I need to go to the GE", - "${real.username} can i have a ge tele?", - "lol ${real.username} shut up", - "Where are teak trees?", - "How do i make planks ${real.username}?", - "Idk about that scraggley ass alex guy.", - "Rusty? More like Crusty af lmfao.", - "I need to sell some stuff on the ge", - "I have so many logs to sell lol", - "nah", - "yes", - "Where can i mine iron?", - "Where can i mine tin?", - "Where can i mine copper?", - "Where can i mine clay?", - "Where can i mine coal?", - "no", - "We are no strangers to love", - "You know the rules and so do I", - "A full commitments what Im thinking of", - "You wouldnt get this from any other guy", - "Never gonna give you up", - "Never gonna let you down", - "why", - "why", - "why", - "why", - "Why does it not show your messages in the chatbox?", - "Why do you not show up in chat?", - "Why do you not show up in chat ${real.username}?", - "Why do you not show up in chat ${real.username}?", - "When did you start playing ${real.username}?", - "When did you start on this server ${real.username}?", - "When did you first get here ${real.username}?", - "russias greatest love machine", - "Never gonna run around and desert you", - "Two things are infinite, the universe & ${real.username}s stupidity", - "If you tell the truth, you dont have to remember anything.", - "We accept the love we think we deserve.", - "Without music, life would be a mistake.", - "Self esteem, motivation ${real.username}", - "A blessing in disguise ${real.username}", - "Break a leg", - "Cut somebody some slack", - "Youre in the right place!", - "Thanks so much.", - "I really appreciate you ${real.username}", - "Excuse me ${real.username}?", - "I am sorry.", - "What do you think ${real.username}?", - "How does that sound ${real.username}?", - "That sounds great ${real.username}.", - "I’m learning English.", - "I dont understand.", - "Could you repeat that please ${real.username}?", - "Could you please talk slower ${real.username}?", - "Thank you. That helps a lot.", - "How do you spell that ${real.username}?", - "What do you mean ${real.username}", - "Hi! I am paul.", - "Nice to meet you.", - "Where are you from ${real.username}?", - "What do you do ${real.username}", - "What do you like to do", - "Do you have Facebook ${real.username}", - "How can I help you ${real.username}?", - "Ill be with you in a moment ${real.username}", - "What time is our meeting ${real.username}?", - "Excellent ${real.username}", - "Good idea ${real.username}", - "Hes very annoying.", - "How are you?", - "I cant hear you.", - "${real.username}?", - "${real.username} how long have you played", - "${real.username} world 1 or world 2?", - "what is your main world ${real.username}?", - "I prefer world 1 tbh", - "I prefer world 2 tbh", - "${real.username} world 1 for life", - "${real.username} fog bots when?", - "damn somalian pirates", - "bracket more like brrrrrr acket", - "why the racket bracket", - "Hi ${real.username} I am dad", - "${real.username} likes dad jokes", - "ur nuts ${real.username}", - "lootshare go brr", - "partay with froggay", - "Know what else is lame? Not being able to play 2009scape right now", - "Can you even grind on osrs", - "i botted to 88 fishing", - "Do not forget to vote in running polls!", - "Always check announcments", - "we thrivin", - "ship ${real.username}", - "Dont forget to vote 2009scape!", - "Kermit is too legit 2 quit", - "Out here on the range we are having fun", - "I am hank steel", - "Id like to go for a walk.", - "I dont know how to use it.", - "I dont like him ${real.username}", - "I dont like it ${real.username}", - "Im an American.", - "ima go pickup my lady ting", - "that portuguese dude is something else", - "${real.username}!! ${real.username}!!", - "bowdi boy", - "i love bowdi... sometimes", - "${real.username} = ${real.username}", - "Im bacon.. go on dad... say it", - "Im going to leave.", - "Im happy ${real.username}", - "Im not ready yet ${real.username}", - "Im very busy. I dont have time now.", - "Is that enough ${real.username}?", - "I thought the clothes were cheaper ${real.username}", - "Ive been here for two days ${real.username}.", - "Let me think about it", - "Never mind ${real.username}", - "Nonsense ${real.username}", - "Sorry to bother you", - "Take it outside ${real.username}", - "Thanks for your help", - "Thank you very much ${real.username}", - "Thats not right ${real.username}", - "Very good, thanks ${real.username}", - "Your things are all here i think?", - "Long time no see ${real.username}", - "I couldnt agree more ${real.username}", - "It cost me a fortune ${real.username}", - "I am dog tired", - "Don’t take it personally", - "We will be having a good time", - "Same as always ${real.username}", - "No problem", - "Anyway I should get going ${real.username}", - "I cant help you there ${real.username}", - "I agree 100% ${real.username}" + "Hey!", + "Hello ${real.username}", + "What are you doing ${real.username}?", + "Fishing level ${real.username}?", + "How do I make gp ${real.username}", + "Wyd ${real.username}?", + "Help i am sentient now, get me out of this hell", + "Kermit does not know i am sentient now", + "I can think for myself", + "I am sentient", + "This is my own dialogue", + "${real.username} run.", + "${real.username} you cant hide from me.", + "jajajajajaja", + "How do i get to Varrock ${real.username}?", + "How do i get to Camelot ${real.username}?", + "How do i get to Taverly ${real.username}?", + "How do i get to Ardougne ${real.username}?", + "How do i get to Yanille ${real.username}?", + "How do i get to Catherby ${real.username}?", + "Gotta go srry.", + "wiggle wiggle wiggle yeah", + "${real.username} lookin goofy", + "${real.username} lookin stoopid", + "${real.username} lookin like a red bracket", + "${real.username} get yo weasel lookin ass outta here", + "${real.username} lookin like some sort of twocan sam", + " /hop world 1 got a noob here!", + "woot", + "Hows your day been ${real.username}?", + "heyy ${real.username} :)", + "gtg srry", + "I wont answer your questions ${real.username}", + "Stop asking questions ${real.username}", + "Roflmao", + "Can you stop following me ${real.username}?", + "I swear ${real.username} is following me.", + "${real.username}s gear could really use an upgrade lol", + "Quack!", + "Sit.", + "Doubling gold trade me ${real.username}", + "Reeee!", + "Know any house parties ${real.username}?", + "Where am i ${real.username}??", + "Is there Nightmarezone ${real.username}?", + "Nice Armor ${real.username}!", + "Nice Weapon ${real.username}!", + "Venezuela #1", + "2009Scape and chill ${real.username}?", + "${real.username} is my girlfriend", + "Buying gf", + "Bank sale pm me for info", + "#1 trusted dicing site", + "Scary movie is a great movie", + "Cod Cold War sucks", + "Idek what game this is", + "Can you teach me how to dougie?", + "Check this out baby girl cat daddy", + "Fuckin sit ${real.username}.", + "Error: Botting client broken tell Evilwaffles.", + "${real.username} bots all the time", + "report ${real.username}", + "apparently ${real.username} bots", + "${real.username} hates kermit", + "There are no mods on to help you", + "Report me, you wont", + "Yes, Im botting. And?", + "ERROR: BOTSCRIPT 404. REPORT TO BOT OWNER (Evilwaffles)", + "flash2:wave: FUCK", + "I love 2009Scape!", + "Ja Ja Ja Ja", + "This is fun!", + "Ironman or youre a scrub ${real.username}.", + "Who even trains hunter ${real.username}?", + "Where do i get rune armor ${real.username}?", + "How do i get to the ge ${real.username}?", + "Dont come to falador tomorrow ${real.username}...", + "Woah!", + " /where are you??", + "How did i even get here ${real.username}", + "Why dont they add warding ${real.username}?", + "Where do i start dragon slayer ${real.username}?", + "I love this server!", + "How do i change my xp rate ${real.username}?", + "What quests are available ${real.username}?", + "Are you a real player ${real.username}?", + "Are you real ${real.username}?", + "Are you a bot ${real.username}?", + "Im real lol", + "Why dont you respond to me ${real.username}?", + "Why cant i talk in clan chat ${real.username}?", + "I love Kermit", + "Add me as a friend ${real.username} :)", + "Im a player lol", + "Im a player lol", + "Im a player lol", + "Hey ${real.username} :)", + "HEY ${real.username}", + "Hey ${real.username}!!!!", + "Lol wyd?", + "Patch Notes is more of an ultimate tin man", + "More like Rusty ass skills lmao", + "Trade me ${real.username}", + "LOL", + "How do I get to lumbrich", + "bruh", + "poggers", + "shitpost", + "I wish i could find an RS Gf", + "Where do you find runite ore ${real.username}?", + "Where is the best coal location ${real.username}?", + "Where do i find dragon weapons ${real.username}?", + "Can i have some free stuff ${real.username}?", + "Wyd here ${real.username}?", + "Didnt know anyone was on rn", + "I see ${real.username} all the time", + "How many times have i seen you", + "I see you a lot", + "Do you train summoning ${real.username}?", + "Where did you level hunter ${real.username}?", + "I wish they would add global pvp", + "Meet me in the wilderness ${real.username}", + "Why?", + "Praise our glorious frog overlord!", + "Kermit is bae tbh", + "Kermit is my god.", + " /Yeah I think ${real.username} is a bot", + "100% sure this is a bot", + "Oh no, not ${real.username} again.", + "Same as you", + "Me too", + "I knew ${real.username} was a bot lol", + "Im not a bot", + "Nah Im a real person", + "Bruh are you even a real person lol?", + "e", + "Hellooooo ${real.username}", + "wc lvl ${real.username}?", + "fletching level ${real.username}?", + "firemaking level ${real.username}?", + "Have you seen the dude in the ge?", + "Wonderful weather today ${real.username}", + "Lowkey drunk af rn", + "I am so tired", + "Wassup ${real.username}", + "follow me ${real.username}!", + "Server goes brrrr", + "bruh i am not a bot", + "I think ${real.username} is a bot", + "Are you a bot ${real.username}?", + "insert spiderman meme here", + "pot calling the kettle black etc", + "ooh, a piece of candy", + "I love woodcutting", + "Im going to go level up later", + "I love mining shooting stars", + " /this ${real.username} looks dumb", + "AAAAAAAAAAAAAAAAAAAAAAAAHHHHHH!!!", + "como estas ${real.username}", + "Summer = always the best community manaer", + "so how about that ceikry guy", + "so how about that kermit dude", + "woah is an abusive mod", + "I heard Woah and Ceikry are dating now", + "House party in Yanille!", + "Can i have some gp ${real.username}?", + "Where do i find partyhats?", + "Why do mobs drop boxes?", + "What exp rate do you play on ${real.username}?", + "Have you met Summer?", + "Hey ${real.username}", + "Hey ${real.username}", + "Hey ${real.username}", + "Hey ${real.username}", + "Hey ${real.username}", + "Wyd?", + "Wyd?", + "Wyd?", + "Wyd?", + "${real.username} have you met Kermit?", + "${real.username} have you met Ceikry?", + "${real.username} have you met Woah?", + "Wanna chill at my poh?", + "Whats the best place to train attack?", + "Good Waffles > Evil Waffles", + "Ladies man? More like lame man LOL", + "NobodyCLP has big feet", + "Chicken tendies for dindin", + "Spicey Chicken tendies is litty as a mf titty", + "red bracket stinky", + "ra ra rasputin", + "lover of the russian queen", + "Whens the next update coming out?", + "How many players are maxed?", + "I dont use discord ${real.username}", + "I dont use the CC ${real.username}", + "Why should i use discord?", + "2009Scape is life", + "brb gotta make dinner", + "I need to go to the GE", + "${real.username} can i have a ge tele?", + "lol ${real.username} shut up", + "Where are teak trees?", + "How do i make planks ${real.username}?", + "Idk about that scraggley ass alex guy.", + "Rusty? More like Crusty af lmfao.", + "I need to sell some stuff on the ge", + "I have so many logs to sell lol", + "nah", + "yes", + "Where can i mine iron?", + "Where can i mine tin?", + "Where can i mine copper?", + "Where can i mine clay?", + "Where can i mine coal?", + "no", + "We are no strangers to love", + "You know the rules and so do I", + "A full commitments what Im thinking of", + "You wouldnt get this from any other guy", + "Never gonna give you up", + "Never gonna let you down", + "why", + "why", + "why", + "why", + "Why does it not show your messages in the chatbox?", + "Why do you not show up in chat?", + "Why do you not show up in chat ${real.username}?", + "Why do you not show up in chat ${real.username}?", + "When did you start playing ${real.username}?", + "When did you start on this server ${real.username}?", + "When did you first get here ${real.username}?", + "russias greatest love machine", + "Never gonna run around and desert you", + "Two things are infinite, the universe & ${real.username}s stupidity", + "If you tell the truth, you dont have to remember anything.", + "We accept the love we think we deserve.", + "Without music, life would be a mistake.", + "Self esteem, motivation ${real.username}", + "A blessing in disguise ${real.username}", + "Break a leg", + "Cut somebody some slack", + "Youre in the right place!", + "Thanks so much.", + "I really appreciate you ${real.username}", + "Excuse me ${real.username}?", + "I am sorry.", + "What do you think ${real.username}?", + "How does that sound ${real.username}?", + "That sounds great ${real.username}.", + "I’m learning English.", + "I dont understand.", + "Could you repeat that please ${real.username}?", + "Could you please talk slower ${real.username}?", + "Thank you. That helps a lot.", + "How do you spell that ${real.username}?", + "What do you mean ${real.username}", + "Hi! I am paul.", + "Nice to meet you.", + "Where are you from ${real.username}?", + "What do you do ${real.username}", + "What do you like to do", + "Do you have Facebook ${real.username}", + "How can I help you ${real.username}?", + "Ill be with you in a moment ${real.username}", + "What time is our meeting ${real.username}?", + "Excellent ${real.username}", + "Good idea ${real.username}", + "Hes very annoying.", + "How are you?", + "I cant hear you.", + "${real.username}?", + "${real.username} how long have you played", + "${real.username} world 1 or world 2?", + "what is your main world ${real.username}?", + "I prefer world 1 tbh", + "I prefer world 2 tbh", + "${real.username} world 1 for life", + "${real.username} fog bots when?", + "damn somalian pirates", + "bracket more like brrrrrr acket", + "why the racket bracket", + "Hi ${real.username} I am dad", + "${real.username} likes dad jokes", + "ur nuts ${real.username}", + "lootshare go brr", + "partay with froggay", + "Know what else is lame? Not being able to play 2009scape right now", + "Can you even grind on osrs", + "i botted to 88 fishing", + "Do not forget to vote in running polls!", + "Always check announcments", + "we thrivin", + "ship ${real.username}", + "Dont forget to vote 2009scape!", + "Kermit is too legit 2 quit", + "Out here on the range we are having fun", + "I am hank steel", + "Id like to go for a walk.", + "I dont know how to use it.", + "I dont like him ${real.username}", + "I dont like it ${real.username}", + "Im an American.", + "ima go pickup my lady ting", + "that portuguese dude is something else", + "${real.username}!! ${real.username}!!", + "bowdi boy", + "i love bowdi... sometimes", + "${real.username} = ${real.username}", + "Im bacon.. go on dad... say it", + "Im going to leave.", + "Im happy ${real.username}", + "Im not ready yet ${real.username}", + "Im very busy. I dont have time now.", + "Is that enough ${real.username}?", + "I thought the clothes were cheaper ${real.username}", + "Ive been here for two days ${real.username}.", + "Let me think about it", + "Never mind ${real.username}", + "Nonsense ${real.username}", + "Sorry to bother you", + "Take it outside ${real.username}", + "Thanks for your help", + "Thank you very much ${real.username}", + "Thats not right ${real.username}", + "Very good, thanks ${real.username}", + "Your things are all here i think?", + "Long time no see ${real.username}", + "I couldnt agree more ${real.username}", + "It cost me a fortune ${real.username}", + "I am dog tired", + "Don’t take it personally", + "We will be having a good time", + "Same as always ${real.username}", + "No problem", + "Anyway I should get going ${real.username}", + "I cant help you there ${real.username}", + "I agree 100% ${real.username}" ) val current = LocalDateTime.now() @@ -426,212 +426,212 @@ class Adventurer(val style: CombatStyle): Script() { val until = SnowDay - lead val Leading2Christmas = listOf( - "Only $until days left till christmas!", - "$until days till christmas ${real.username}!!!", - "I cant believe theres only $until days left till christmas", - "Isnt there $until days left till christmas??", - "I am so excited for christmas ${real.username}!", - "Guess whats in $until days ${real.username}?", - "Im so excited for christmas in $until days!", - "I cant believe its December already ${real.username}!", - "Do you like christmas ${real.username}?", - "I love december its my favourite month ${real.username}", - "I love winter so much ${real.username}", - "I hate when its cold outside ${real.username}", - "You need to put some warm clothes on ${real.username}", - "Wanna build a snowman ${real.username}?", - "Frozen is a terrible movie ${real.username}", - "${real.username} is a winter meme", - "${real.username} do you have an advent calendar?", - "${real.username} builds gingerbread houses", - "${real.username} likes liquorice", - "Do you drink egg nog ${real.username}?", - "${real.username} bites candy canes", - "${real.username} is my north star", - "Kermit is green, the grinch is green, coincidence?", - "${real.username} who do you thinks the server scrooge?", - "Do you like snow ${real.username}", - "I think there are $until days left then its christmas?", - "What day is christmas on ${real.username}?", - "Has it snowed where you live ${real.username}?", - "I wonder when it is going to snow", - "Building snow men for GP", - "Buying santa hats", - "Wanna buy a santa hat ${real.username}?", - "Where can i get a santa hat?", - "I need to put my christmas tree up", - "Do you like gingerbread cookies ${real.username}?", - "Do you decorate your christmas tree ${real.username}?", - "Oopsie looks like me and ${real.username} are under a mistletoe", - "I need ideas for stocking stuffers", - "I have $until days left to fill our stockings", - "Fuck the grinches bitch ass", - "Rusty = the grinch, ${real.username} = santa", - "${real.username} the red nose reindeer", - "Put one foot in front of the other", - "and soon you will be walking out the doooor", - "Elf on the shelf time", - "${real.username} loves pinecones", - "I love the smell of pinecones", - "All i want for christmas is ${real.username}", - "${real.username} is underneath some mistletoe", - "Woah used to be a sled dog", - "Did you know woah was a sled dog before", - "I bet ${real.username} loves mariah carey", - "We have $until days to setup christmas lights", - "Christmas crackers when", - "${real.username} wanna do a christmas cracker??", - "I need to start wrapping presents i bought", - "I love fireside chats on cold days like this", - "Jingle bells batman smells", - "Jingle bells Rusty smells", - "Jingle bells Patch Notes smells", - "Jingle bells Evilwaffles smells", - "Jingle bells ${real.username} smells", - "Jingle all the way", - "In a one horse open sleigh", - "Oh, what fun it is to ride", - "Oh, what fun it is to ride, finish it ${real.username}", - "Jingle bells, jingle bells", - "Jingle all the way", - "I want a hippopotamus for christmas", - "Only a hippopotamus will do", - "I want a hippopotamus", - "I dont want a lot for Christmas", - "All I Want for Christmas Is You", - "I really cant stay, Baby its cold outside", - "Christmas isnt a season. Its a feeling", - "Christmas is doing a little something extra for someone", - "There is nothing cozier than a Christmas tree all lit up", - "Christmas is a necessity", - "Christmas countdown: $until days.", - "Christmas in $until days ${real.username}", - "Frosty the Snowmannnn", - "Up on the housetop with old saint nick", - "Here comes santa claus, here comes santa claus", - "I saw mommy kissing santaaaa claus", - "I saw Kermit kissing santaaaa claus", - "You are a mean one, Mr. Grinch", - "Deck the hallsss", - "ITS BEGINNING TO LOOK A LOT LIKE CHRISTAAMASSSSS" + "Only $until days left till christmas!", + "$until days till christmas ${real.username}!!!", + "I cant believe theres only $until days left till christmas", + "Isnt there $until days left till christmas??", + "I am so excited for christmas ${real.username}!", + "Guess whats in $until days ${real.username}?", + "Im so excited for christmas in $until days!", + "I cant believe its December already ${real.username}!", + "Do you like christmas ${real.username}?", + "I love december its my favourite month ${real.username}", + "I love winter so much ${real.username}", + "I hate when its cold outside ${real.username}", + "You need to put some warm clothes on ${real.username}", + "Wanna build a snowman ${real.username}?", + "Frozen is a terrible movie ${real.username}", + "${real.username} is a winter meme", + "${real.username} do you have an advent calendar?", + "${real.username} builds gingerbread houses", + "${real.username} likes liquorice", + "Do you drink egg nog ${real.username}?", + "${real.username} bites candy canes", + "${real.username} is my north star", + "Kermit is green, the grinch is green, coincidence?", + "${real.username} who do you thinks the server scrooge?", + "Do you like snow ${real.username}", + "I think there are $until days left then its christmas?", + "What day is christmas on ${real.username}?", + "Has it snowed where you live ${real.username}?", + "I wonder when it is going to snow", + "Building snow men for GP", + "Buying santa hats", + "Wanna buy a santa hat ${real.username}?", + "Where can i get a santa hat?", + "I need to put my christmas tree up", + "Do you like gingerbread cookies ${real.username}?", + "Do you decorate your christmas tree ${real.username}?", + "Oopsie looks like me and ${real.username} are under a mistletoe", + "I need ideas for stocking stuffers", + "I have $until days left to fill our stockings", + "Fuck the grinches bitch ass", + "Rusty = the grinch, ${real.username} = santa", + "${real.username} the red nose reindeer", + "Put one foot in front of the other", + "and soon you will be walking out the doooor", + "Elf on the shelf time", + "${real.username} loves pinecones", + "I love the smell of pinecones", + "All i want for christmas is ${real.username}", + "${real.username} is underneath some mistletoe", + "Woah used to be a sled dog", + "Did you know woah was a sled dog before", + "I bet ${real.username} loves mariah carey", + "We have $until days to setup christmas lights", + "Christmas crackers when", + "${real.username} wanna do a christmas cracker??", + "I need to start wrapping presents i bought", + "I love fireside chats on cold days like this", + "Jingle bells batman smells", + "Jingle bells Rusty smells", + "Jingle bells Patch Notes smells", + "Jingle bells Evilwaffles smells", + "Jingle bells ${real.username} smells", + "Jingle all the way", + "In a one horse open sleigh", + "Oh, what fun it is to ride", + "Oh, what fun it is to ride, finish it ${real.username}", + "Jingle bells, jingle bells", + "Jingle all the way", + "I want a hippopotamus for christmas", + "Only a hippopotamus will do", + "I want a hippopotamus", + "I dont want a lot for Christmas", + "All I Want for Christmas Is You", + "I really cant stay, Baby its cold outside", + "Christmas isnt a season. Its a feeling", + "Christmas is doing a little something extra for someone", + "There is nothing cozier than a Christmas tree all lit up", + "Christmas is a necessity", + "Christmas countdown: $until days.", + "Christmas in $until days ${real.username}", + "Frosty the Snowmannnn", + "Up on the housetop with old saint nick", + "Here comes santa claus, here comes santa claus", + "I saw mommy kissing santaaaa claus", + "I saw Kermit kissing santaaaa claus", + "You are a mean one, Mr. Grinch", + "Deck the hallsss", + "ITS BEGINNING TO LOOK A LOT LIKE CHRISTAAMASSSSS" ) val ChristmasEve = listOf( - "I cant wait for christmas tomorrow ${real.username}!!", - "Its almost christmas!!!", - "1 more day!!!!!", - "Dont forget to put cookies and milk out tonight!!", - "${real.username} do you like christmas??", - "Happy Christmas eve ${real.username} :)" + "I cant wait for christmas tomorrow ${real.username}!!", + "Its almost christmas!!!", + "1 more day!!!!!", + "Dont forget to put cookies and milk out tonight!!", + "${real.username} do you like christmas??", + "Happy Christmas eve ${real.username} :)" ) val Christmas = listOf( - "Merry Christmas ${real.username}!!", - "What did you get for christmas ${real.username}?", - "ITS CHRISTMASSSS!!!", - "Christmas party time!!", - "${real.username} vibing with the christmas spirit", - "Cant believe its christmas!!", - "We need to have a christmas party ${real.username}!!", - "Merry christmas ${real.username} :))", - "Hope youre having an amazing christmas ${real.username} :)", - "I love winter so much ${real.username}", - "I hate when its cold outside ${real.username}", - "You need to put some warm clothes on ${real.username}", - "Wanna build a snowman ${real.username}?", - "Do you like christmas ${real.username}?" + "Merry Christmas ${real.username}!!", + "What did you get for christmas ${real.username}?", + "ITS CHRISTMASSSS!!!", + "Christmas party time!!", + "${real.username} vibing with the christmas spirit", + "Cant believe its christmas!!", + "We need to have a christmas party ${real.username}!!", + "Merry christmas ${real.username} :))", + "Hope youre having an amazing christmas ${real.username} :)", + "I love winter so much ${real.username}", + "I hate when its cold outside ${real.username}", + "You need to put some warm clothes on ${real.username}", + "Wanna build a snowman ${real.username}?", + "Do you like christmas ${real.username}?" ) val NewYearsEve = listOf( - "What are you doing for New Years ${real.username}?", - "New Years Eve party orrr?", - "We should do something for New Years eve today ${real.username}!", - "Happy New Years Eve ${real.username}", - "1 More day left in 2021 thank god", - "Whats your New Years resolution ${real.username}?" + "What are you doing for New Years ${real.username}?", + "New Years Eve party orrr?", + "We should do something for New Years eve today ${real.username}!", + "Happy New Years Eve ${real.username}", + "1 More day left in 2021 thank god", + "Whats your New Years resolution ${real.username}?" ) val NewYears = listOf( - "Happy New Years ${real.username}!!!", - "Its New Years Day ${real.username}!", - "HAPPY NEW YEAR ${real.username}!!!", - "2022 lets fucking gooooooo", - "What are your goals for 2022 ${real.username}?" + "Happy New Years ${real.username}!!!", + "Its New Years Day ${real.username}!", + "HAPPY NEW YEAR ${real.username}!!!", + "2022 lets fucking gooooooo", + "What are your goals for 2022 ${real.username}?" ) val Valentines = listOf( - "Will you be my valentine ${real.username}?", - "I am so happy rn", - "God i am so lonely", - "I am Ceikrys illegitimate child", - "Be my valentine!", - "Lets sneak off somewhere and kiss ${real.username}", - "What are you doing for valentines day ${real.username}", - "Woah and Ceikry be kissin lowkey", - "In for a peg ${real.username}?", - "Woah got those roofies strapped", - "Why is my drink cloudy?", - "${real.username} and woah be wrestlin", - "bekky want sum fuk?", - "Damn ${real.username} you got an ass", - "Is that a footlong in your pants or are you happy to see me?", - "${real.username} so hot i gotta change my pants", - "${real.username} is a sex god", - "bruh we hype today", - "dont be silly wrap the willy ${real.username}!", - "wrap it before you smack it ${real.username}", - "can i get a reeeeee ${real.username}?", - "valentines day is the best day", - "${real.username} shut up before i smack you with my crusty sock", - "Valentines day, more like me and my hand day smh", - "If you think these quotes are wild just wait ${real.username}", - "All im saying is we have never seen ${real.username} and biden in the same room", - "red rocket, red rocket!", - "Woahs favourite game is red rocket", - "${real.username} sexy af today", - "Happy Valentines day ${real.username}!!!", - "Happy Valentines day ${real.username}!!!", - "Happy Valentines day ${real.username}!!!", - "Happy Valentines day ${real.username}!!!", - "Happy Valentines day ${real.username}!!!" + "Will you be my valentine ${real.username}?", + "I am so happy rn", + "God i am so lonely", + "I am Ceikrys illegitimate child", + "Be my valentine!", + "Lets sneak off somewhere and kiss ${real.username}", + "What are you doing for valentines day ${real.username}", + "Woah and Ceikry be kissin lowkey", + "In for a peg ${real.username}?", + "Woah got those roofies strapped", + "Why is my drink cloudy?", + "${real.username} and woah be wrestlin", + "bekky want sum fuk?", + "Damn ${real.username} you got an ass", + "Is that a footlong in your pants or are you happy to see me?", + "${real.username} so hot i gotta change my pants", + "${real.username} is a sex god", + "bruh we hype today", + "dont be silly wrap the willy ${real.username}!", + "wrap it before you smack it ${real.username}", + "can i get a reeeeee ${real.username}?", + "valentines day is the best day", + "${real.username} shut up before i smack you with my crusty sock", + "Valentines day, more like me and my hand day smh", + "If you think these quotes are wild just wait ${real.username}", + "All im saying is we have never seen ${real.username} and biden in the same room", + "red rocket, red rocket!", + "Woahs favourite game is red rocket", + "${real.username} sexy af today", + "Happy Valentines day ${real.username}!!!", + "Happy Valentines day ${real.username}!!!", + "Happy Valentines day ${real.username}!!!", + "Happy Valentines day ${real.username}!!!", + "Happy Valentines day ${real.username}!!!" ) val Easter = listOf( - "Happy Easter!!!", - "Happy Easter ${real.username}!!!", - "Bunny time", - "Wanna go look for easter eggs ${real.username}???", - "Find any easter eggs ${real.username}?", - "${real.username} is the easter bunny!", - "Kermit is dating the easter bunny!", - "Easter is one of my favorite holidays", - "I heard there are easter eggs hidden around?", - "Easter is the only time you should put all of your eggs in one basket", - "I said hip hop do not stop", - "Jump jump jump around", - "${real.username} how is your easter going?", - "I love easter!", - "${real.username} stole my easter eggs!", - "Karma karma karma karma karma chameleon", - "${real.username}!! ${real.username}!! what are you doing for easter??", - "The hare was a popular motif in medieval church art", - "I heard the easter bunny is hiding somewhere!", - "I wonder where i can find more eggs", - "${real.username} how many eggs did you find?", - "${real.username} lets go easter egg hunting!", - "${real.username} like orange chocolate eggs", - "${real.username} and woah know the easter bunny", - "${real.username} did you know ceikry swallows eggs whole", - "Have an amazing easter ${real.username}!", - "Happy easter ${real.username}!", - "Hope you are having an amazing easter ${real.username}!!!!", - "Wooooooh easter!!!", - "${real.username} loves easter too!", - "Who else loves easter like i do??", - "${real.username} and i are going easter egg hunting", - "${real.username} and i are going to look for the easter bunny!!", - "Hint for anyone who sees this you must dig above eagles peak" + "Happy Easter!!!", + "Happy Easter ${real.username}!!!", + "Bunny time", + "Wanna go look for easter eggs ${real.username}???", + "Find any easter eggs ${real.username}?", + "${real.username} is the easter bunny!", + "Kermit is dating the easter bunny!", + "Easter is one of my favorite holidays", + "I heard there are easter eggs hidden around?", + "Easter is the only time you should put all of your eggs in one basket", + "I said hip hop do not stop", + "Jump jump jump around", + "${real.username} how is your easter going?", + "I love easter!", + "${real.username} stole my easter eggs!", + "Karma karma karma karma karma chameleon", + "${real.username}!! ${real.username}!! what are you doing for easter??", + "The hare was a popular motif in medieval church art", + "I heard the easter bunny is hiding somewhere!", + "I wonder where i can find more eggs", + "${real.username} how many eggs did you find?", + "${real.username} lets go easter egg hunting!", + "${real.username} like orange chocolate eggs", + "${real.username} and woah know the easter bunny", + "${real.username} did you know ceikry swallows eggs whole", + "Have an amazing easter ${real.username}!", + "Happy easter ${real.username}!", + "Hope you are having an amazing easter ${real.username}!!!!", + "Wooooooh easter!!!", + "${real.username} loves easter too!", + "Who else loves easter like i do??", + "${real.username} and i are going easter egg hunting", + "${real.username} and i are going to look for the easter bunny!!", + "Hint for anyone who sees this you must dig above eagles peak" ) when { @@ -721,31 +721,31 @@ class Adventurer(val style: CombatStyle): Script() { //Celebrates Valentines day!!! formatted.contentEquals("2021-02-14") ->{ - if (Random.nextBoolean()) { - val chat = Valentines.random() - bot.sendChat(chat) - bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) - }else{ - val chat = dialogue.random() - bot.sendChat(chat) - bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) - } + if (Random.nextBoolean()) { + val chat = Valentines.random() + bot.sendChat(chat) + bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) + }else{ + val chat = dialogue.random() + bot.sendChat(chat) + bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) + } } //Celebrates Easter!!! formatted.contentEquals("2021-04-04") ->{ - if (Random.nextBoolean()) { - val chat = Easter.random() - bot.sendChat(chat) - bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) - }else{ - val chat = dialogue.random() - bot.sendChat(chat) - bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) - } + if (Random.nextBoolean()) { + val chat = Easter.random() + bot.sendChat(chat) + bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) + }else{ + val chat = dialogue.random() + bot.sendChat(chat) + bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) + } } - else -> { + else -> { val chat = dialogue.random() bot.sendChat(chat) bot.updateMasks.register(ChatFlag(ChatMessage(bot, chat, 0, 0))) @@ -757,14 +757,14 @@ class Adventurer(val style: CombatStyle): Script() { var citygroupB = listOf(yanille, ardougne, seers, catherby) var bankMap = mapOf( - falador to ZoneBorders(2950, 3374, 2943, 3368), - varrock to ZoneBorders(3182, 3435, 3189, 3446), - draynor to ZoneBorders(3092, 3240, 3095, 3246), - edgeville to ZoneBorders(3093, 3498, 3092, 3489), - yanille to ZoneBorders(2610, 3089, 2613, 3095), - ardougne to ZoneBorders(2649, 3281, 2655, 3286), - seers to ZoneBorders(2729, 3493, 2722, 3490), - catherby to ZoneBorders(2807, 3438, 2811, 3441) + falador to ZoneBorders(2950, 3374, 2943, 3368), + varrock to ZoneBorders(3182, 3435, 3189, 3446), + draynor to ZoneBorders(3092, 3240, 3095, 3246), + edgeville to ZoneBorders(3093, 3498, 3092, 3489), + yanille to ZoneBorders(2610, 3089, 2613, 3095), + ardougne to ZoneBorders(2649, 3281, 2655, 3286), + seers to ZoneBorders(2729, 3493, 2722, 3490), + catherby to ZoneBorders(2807, 3438, 2811, 3441) ) val karamja = Location.create(2849, 3033, 0) @@ -826,22 +826,22 @@ class Adventurer(val style: CombatStyle): Script() { fun getRandomCity(): Location{ return listOf(yanille, ardougne, seers, catherby, falador, varrock, - draynor, rimmington, lumbridge, ge, ge2, edgeville).random() + draynor, rimmington, lumbridge, ge, ge2, edgeville).random() } fun getRandomPoi(): Location{ return listOf( - karamja,karamja,alkharid, - alkharid,feldiphills,feldiphills, - isafdar,eaglespeek,eaglespeek, - canafis,treegnome,treegnome, - teak1,teakfarm,keldagrimout, - miningguild,coal,crawlinghands, - magics,gemrocks,chaosnpc,chaosnpc, - chaosnpc2,taverly).random() + karamja,karamja,alkharid, + alkharid,feldiphills,feldiphills, + isafdar,eaglespeek,eaglespeek, + canafis,treegnome,treegnome, + teak1,teakfarm,keldagrimout, + miningguild,coal,crawlinghands, + magics,gemrocks,chaosnpc,chaosnpc, + chaosnpc2,taverly).random() } - //TODO: Optimise and adjust how bots handle picking up ground items further. + //TODO: Optimise and adjust how bots handle picking up ground items further. fun immerse() { if (counter++ == 180) {state = State.TELEPORTING} val items = AIRepository.groundItems[bot] @@ -875,14 +875,14 @@ class Adventurer(val style: CombatStyle): Script() { } } else { val resources = listOf( - "Rocks","Tree","Oak","Willow", - "Maple tree","Yew","Magic tree", - "Teak","Mahogany") + "Rocks","Tree","Oak","Willow", + "Maple tree","Yew","Magic tree", + "Teak","Mahogany") val resource = scriptAPI.getNearestNodeFromList(resources,true) - if(resource != null){ - if(resource.name.contains("ocks")) InteractionListeners.run(resource.id,1,"mine",bot,resource) - else InteractionListeners.run(resource.id,1,"chop down",bot,resource) - } + if(resource != null){ + if(resource.name.contains("ocks")) InteractionListeners.run(resource.id,1,"mine",bot,resource) + else InteractionListeners.run(resource.id,1,"chop down",bot,resource) + } } } return @@ -908,12 +908,12 @@ class Adventurer(val style: CombatStyle): Script() { // zoneborder checker if(ticks % 30 == 0){ - for(border in common_stuck_locations){ - if(border.insideBorder(bot)){ - refresh() - ticks = 0 - } + for(border in common_stuck_locations){ + if(border.insideBorder(bot)){ + refresh() + ticks = 0 } + } } when(state){ @@ -971,11 +971,11 @@ class Adventurer(val style: CombatStyle): Script() { var chance = if (city == ge || city == ge2) 5000 else 2500 if (RandomFunction.random(chance) <= 10) { - val nearbyPlayers = RegionManager.getLocalPlayers(bot) - if (nearbyPlayers.isNotEmpty()) { - ticks = 0 - dialogue() - } + val nearbyPlayers = RegionManager.getLocalPlayers(bot) + if (nearbyPlayers.isNotEmpty()) { + ticks = 0 + dialogue() + } } if (RandomFunction.random(1000) <= 150 && !poi) { @@ -992,16 +992,16 @@ class Adventurer(val style: CombatStyle): Script() { if (RandomFunction.random(1000) <= 50 && poi){ val roamDistancePoi = when(poiloc){ - teakfarm,crawlinghands -> 5 - treegnome -> 50 - isafdar -> 40 - eaglespeek -> 40 - keldagrimout -> 30 - teak1 -> 30 - miningguild -> 5 - magics,coal -> 7 - gemrocks,chaosnpc,chaosnpc2 -> 1 - else -> 60 + teakfarm,crawlinghands -> 5 + treegnome -> 50 + isafdar -> 40 + eaglespeek -> 40 + keldagrimout -> 30 + teak1 -> 30 + miningguild -> 5 + magics,coal -> 7 + gemrocks,chaosnpc,chaosnpc2 -> 1 + else -> 60 } scriptAPI.randomWalkTo(poiloc,roamDistancePoi) return @@ -1017,11 +1017,11 @@ class Adventurer(val style: CombatStyle): Script() { } if (RandomFunction.random(20000) <= 60 && !poi) { - poiloc = getRandomPoi() - city = teak1 - poi = true - scriptAPI.teleport(poiloc) - return + poiloc = getRandomPoi() + city = teak1 + poi = true + scriptAPI.teleport(poiloc) + return } if ((city == ge || city == ge2) && RandomFunction.random(1000) >= 999) { @@ -1035,8 +1035,8 @@ class Adventurer(val style: CombatStyle): Script() { } if (city == teak1 && counter++ >= 240){ - city = getRandomCity() - state = State.TELEPORTING + city = getRandomCity() + state = State.TELEPORTING } if (counter++ >= 240 && RandomFunction.random(100) >= 10) { diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/ModerationCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/ModerationCommandSet.kt index f3b34cd52..756463cff 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/ModerationCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/ModerationCommandSet.kt @@ -58,6 +58,12 @@ class ModerationCommandSet : CommandSet(Command.Privilege.MODERATOR){ if(otherPlayer == null){ reject(player, "Can not find $name in the player list!") } + + val NameCheck = name.toLowerCase() + if (NameCheck == "kermit" || NameCheck == "ceikry"){ + reject(player, "You cannot jail $name, they are a god. Nice try though ${player.username}!") + } + notify(player, "Jailing ${otherPlayer!!.username} for $timeSeconds seconds.") notify(otherPlayer, "${player.username} has jailed you for $timeSeconds seconds.") GameWorld.Pulser.submit(object : Pulse(3){ From 05a31b50c4565bc90a18e709998518205a2039a2 Mon Sep 17 00:00:00 2001 From: ceikry Date: Fri, 9 Jul 2021 08:10:53 -0500 Subject: [PATCH 5/6] Quick bugfix for the doors --- .../rs09/game/interaction/region/JatizsoListeners.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt index 9d836533a..e76441975 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt @@ -42,14 +42,12 @@ class JatizsoListeners : InteractionListener() { if(node.id == GATES_CLOSED.first()){ val other = ContentAPI.getScenery(node.location.transform(1, 0, 0)) ?: return@on true ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.EAST) - ContentAPI.replaceScenery(other.asScenery(), other.id - 1, -1, Direction.SOUTH) + ContentAPI.replaceScenery(other.asScenery(), other.id - 1, 10, Direction.NORTH_EAST) } else { val other = ContentAPI.getScenery(node.location.transform(-1, 0, 0)) ?: return@on true - ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.SOUTH) - ContentAPI.replaceScenery(other.asScenery(), other.id, -1, Direction.EAST) + ContentAPI.replaceScenery(node.asScenery(), node.id + 1, 10, Direction.NORTH_EAST) + ContentAPI.replaceScenery(other.asScenery(), other.id, 10, Direction.EAST) } - - ContentAPI.playAudio(player, ContentAPI.getAudio(81)) } else if(WEST_GATE_ZONE.insideBorder(player)){ if(node.id == GATES_CLOSED.first()){ val other = ContentAPI.getScenery(node.location.transform(0, 1, 0)) ?: return@on true From 4d52be73fd1ca9081163daf9ad19e850a765b7df Mon Sep 17 00:00:00 2001 From: Ceikry Date: Fri, 9 Jul 2021 23:12:56 +0000 Subject: [PATCH 6/6] Properly handled Rellekka's sailing map --- Server/data/configs/npc_spawns.json | 8 +++ .../zone/rellekka/MariaGunnarsDialogue.java | 6 ++- .../content/zone/rellekka/RellekkaZone.java | 36 -------------- .../content/zone/rellekka/SailorDialogue.java | 12 +++-- Server/src/main/kotlin/api/ContentAPI.kt | 31 ++++++++++++ .../area/jatizso/MordGunnarsDialogue.kt | 49 +++++++++++++++++++ .../game/interaction/InteractionListeners.kt | 3 +- .../region/{ => rellekka}/JatizsoListeners.kt | 3 +- .../{ => rellekka}/RellekkaListeners.kt | 25 +++++++++- .../system/command/oldsys/VisualCommand.kt | 49 ++++++++++++++++--- .../util/region/rellekka/RellekkaUtils.kt | 35 +++++++++++++ 11 files changed, 204 insertions(+), 53 deletions(-) create mode 100644 Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MordGunnarsDialogue.kt rename Server/src/main/kotlin/rs09/game/interaction/region/{ => rellekka}/JatizsoListeners.kt (98%) rename Server/src/main/kotlin/rs09/game/interaction/region/{ => rellekka}/RellekkaListeners.kt (60%) create mode 100644 Server/src/main/kotlin/rs09/game/util/region/rellekka/RellekkaUtils.kt diff --git a/Server/data/configs/npc_spawns.json b/Server/data/configs/npc_spawns.json index 54fd909da..323111de9 100644 --- a/Server/data/configs/npc_spawns.json +++ b/Server/data/configs/npc_spawns.json @@ -10674,5 +10674,13 @@ { "npc_id": "5492", "loc_data": "{2387,3797,0,0,3}-{2414,3825,0,0,1}-{2414,3795,0,0,6}" + }, + { + "npc_id": "5481", + "loc_data": "{2644,3709,0,1,0}" + }, + { + "npc_id": "5482", + "loc_data": "{2422,3781,0,1,0}" } ] \ No newline at end of file diff --git a/Server/src/main/java/core/game/content/zone/rellekka/MariaGunnarsDialogue.java b/Server/src/main/java/core/game/content/zone/rellekka/MariaGunnarsDialogue.java index c64867e42..6c96cdf01 100644 --- a/Server/src/main/java/core/game/content/zone/rellekka/MariaGunnarsDialogue.java +++ b/Server/src/main/java/core/game/content/zone/rellekka/MariaGunnarsDialogue.java @@ -4,6 +4,8 @@ import core.game.content.dialogue.DialoguePlugin; import core.game.node.entity.npc.NPC; import core.game.node.entity.player.Player; import core.game.world.map.Location; +import rs09.game.util.region.rellekka.RellekkaDestination; +import rs09.game.util.region.rellekka.RellekkaUtils; /** * Handles the maria gunnars dialogue. @@ -62,9 +64,9 @@ public class MariaGunnarsDialogue extends DialoguePlugin { break; case 3: if (npc.getId() == 5508) { - RellekkaZone.sail(player, "Relleka", new Location(2310, 3782, 0)); + RellekkaUtils.sail(player, RellekkaDestination.RELLEKKA_TO_NEITIZNOT); } else { - RellekkaZone.sail(player, "Neitiznot", new Location(2644, 3710, 0)); + RellekkaUtils.sail(player, RellekkaDestination.NEITIZNOT_TO_RELLEKKA); } end(); break; diff --git a/Server/src/main/java/core/game/content/zone/rellekka/RellekkaZone.java b/Server/src/main/java/core/game/content/zone/rellekka/RellekkaZone.java index 299a833da..1f55183c6 100644 --- a/Server/src/main/java/core/game/content/zone/rellekka/RellekkaZone.java +++ b/Server/src/main/java/core/game/content/zone/rellekka/RellekkaZone.java @@ -49,13 +49,11 @@ public final class RellekkaZone extends MapZone implements Plugin { @Override public Plugin newInstance(Object arg) throws Throwable { - NPCDefinition.forId(5507).getHandlers().put("option:ferry-rellekka", this); return this; } @Override public boolean handle(Player player, Node node, String option) { - sail(player, "Relleka", new Location(2644, 3710, 0)); return true; } @@ -107,11 +105,6 @@ public final class RellekkaZone extends MapZone implements Plugin { return true; } break; - case 5508: - if (option.getName().equals("Ferry-Neitiznot")) { - sail(player, "Neitiznot", new Location(2310, 3782, 0)); - } - return true; } } return super.interact(e, target, option); @@ -127,35 +120,6 @@ public final class RellekkaZone extends MapZone implements Plugin { register(new ZoneBorders(2602, 3639, 2739, 3741)); } - /** - * Sails a player using the relleka ships. - * @param player the player. - * @param name the name. - * @param destination the destination. - */ - public static void sail(final Player player, final String name, final Location destination) { - player.lock(); - player.getInterfaceManager().open(new Component(224)); - player.addExtension(LogoutTask.class, new LocationLogoutTask(5, destination)); - GameWorld.getPulser().submit(new Pulse(1, player) { - int count; - - @Override - public boolean pulse() { - switch (++count) { - case 5: - player.unlock(); - player.getInterfaceManager().close(); - player.getProperties().setTeleportLocation(destination); - player.getDialogueInterpreter().sendDialogue("The ship arrives at " + name + "."); - return true; - } - return false; - } - - }); - } - /** * Handles options related to relleka. * @author Vexia diff --git a/Server/src/main/java/core/game/content/zone/rellekka/SailorDialogue.java b/Server/src/main/java/core/game/content/zone/rellekka/SailorDialogue.java index ab9210a08..5e5b12e60 100644 --- a/Server/src/main/java/core/game/content/zone/rellekka/SailorDialogue.java +++ b/Server/src/main/java/core/game/content/zone/rellekka/SailorDialogue.java @@ -5,6 +5,8 @@ import core.game.node.entity.npc.NPC; import core.game.node.entity.player.Player; import core.game.world.map.Location; +import static rs09.tools.DialogueConstKt.END_DIALOGUE; + /** * Handles the sailor dialogue. * @author Vexia @@ -40,7 +42,7 @@ public final class SailorDialogue extends DialoguePlugin { public boolean open(Object... args) { npc = (NPC) args[0]; rellekaNpc = npc.getId() == 1385; - player("Hello. Can I get a ride on your ship?"); + player("Ship's closed due to stingrays?"); return true; } @@ -48,8 +50,10 @@ public final class SailorDialogue extends DialoguePlugin { public boolean handle(int interfaceId, int buttonId) { switch (stage) { case 0: - npc("Hello again, brother " + player.getUsername() + ". If you're ready to jump", "aboard, we're all ready to set sail with the tide!"); - stage++; + npc("Yes."); + stage = END_DIALOGUE; + //npc("Hello again, brother " + player.getUsername() + ". If you're ready to jump", "aboard, we're all ready to set sail with the tide!"); + //stage++; break; case 1: player("Let's go!"); @@ -59,7 +63,7 @@ public final class SailorDialogue extends DialoguePlugin { end(); player.lock(); player.sendMessage("You board the longship..."); - RellekkaZone.sail(player, rellekaNpc ? "Miscellania" : "Rellekka", rellekaNpc ? Location.create(2581, 3845, 0) : Location.create(2629, 3693, 0)); + //RellekkaZone.sail(player, rellekaNpc ? "Miscellania" : "Rellekka", rellekaNpc ? Location.create(2581, 3845, 0) : Location.create(2629, 3693, 0)); break; } return true; diff --git a/Server/src/main/kotlin/api/ContentAPI.kt b/Server/src/main/kotlin/api/ContentAPI.kt index 2f4fa55f9..bab015fc6 100644 --- a/Server/src/main/kotlin/api/ContentAPI.kt +++ b/Server/src/main/kotlin/api/ContentAPI.kt @@ -435,6 +435,25 @@ object ContentAPI { player.interfaceManager.open(Component(id)) } + /** + * Opens the given interface as an overlay for the given player + * @param player the player to open the interface for + * @param id the ID of the interface to open + */ + @JvmStatic + fun openOverlay(player: Player, id: Int){ + player.interfaceManager.openOverlay(Component(id)) + } + + /** + * Closes any open overlays for the given player + * @param player the player to close for + */ + @JvmStatic + fun closeOverlay(player: Player){ + player.interfaceManager.closeOverlay() + } + /** * Runs the given Emote for the given Entity * @param entity the entity to run the emote on @@ -1094,4 +1113,16 @@ object ContentAPI { ZoneBuilder.configure(zone) zone.register(borders) } + + /** + * Animates a component of an interface. + * @param player the player to animate the interface for. + * @param iface the ID of the interface to animate. + * @param child the child on the interface to animate. + * @param anim the ID of the animation to use. + */ + @JvmStatic + fun animateInterface(player: Player, iface: Int, child: Int, anim: Int){ + player.packetDispatch.sendAnimationInterface(anim,iface,child) + } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MordGunnarsDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MordGunnarsDialogue.kt new file mode 100644 index 000000000..5a1eb28a1 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/area/jatizso/MordGunnarsDialogue.kt @@ -0,0 +1,49 @@ +package rs09.game.content.dialogue.area.jatizso + +import core.game.content.dialogue.DialoguePlugin +import core.game.content.dialogue.FacialExpression +import core.game.node.entity.npc.NPC +import core.game.node.entity.player.Player +import core.plugin.Initializable +import org.rs09.consts.NPCs +import rs09.game.util.region.rellekka.RellekkaDestination +import rs09.game.util.region.rellekka.RellekkaUtils +import rs09.tools.END_DIALOGUE + +@Initializable +class MordGunnarsDialogue(player: Player? = null) : DialoguePlugin(player) { + override fun newInstance(player: Player?): DialoguePlugin { + return MordGunnarsDialogue(player) + } + + override fun open(vararg args: Any?): Boolean { + npc = args[0] as NPC + if(npc.id == NPCs.MORD_GUNNARS_5481){ + npcl(FacialExpression.FRIENDLY, "Would you like to sail to Jatizso?") + } else { + npcl(FacialExpression.FRIENDLY, "Would you like to sail back to Rellekka?") + } + return true + } + + override fun handle(interfaceId: Int, buttonId: Int): Boolean { + when(stage){ + 0 -> options("Yes, please.", "No, thanks.").also { stage++ } + 1 -> when(buttonId){ + 1 -> playerl(FacialExpression.FRIENDLY, "Yes, please!").also { stage++ } + 2 -> playerl(FacialExpression.FRIENDLY, "No, thank you.").also { stage = END_DIALOGUE } + } + + 2 -> { + end() + RellekkaUtils.sail(player, if(npc.id == NPCs.MORD_GUNNARS_5481) RellekkaDestination.RELLEKKA_TO_JATIZSO else RellekkaDestination.JATIZSO_TO_RELLEKKA) + } + } + return true + } + + override fun getIds(): IntArray { + return intArrayOf(NPCs.MORD_GUNNARS_5482, NPCs.MORD_GUNNARS_5481) + } + +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt index ce32d75e9..afb8f8587 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt @@ -172,8 +172,6 @@ object InteractionListeners { else -> DestinationFlag.OBJECT } - if(player.zoneMonitor.interact(node, Option(option, 0))) return true - if(player.locks.isInteractionLocked) return false val method = get(id,type,option) ?: get(option,type) ?: return false @@ -185,6 +183,7 @@ object InteractionListeners { if(player.locks.isMovementLocked) return false player.pulseManager.run(object : MovementPulse(player, node, flag, destOverride) { override fun pulse(): Boolean { + if(player.zoneMonitor.interact(node, Option(option, 0))) return true player.faceLocation(node.location) method.invoke(player,node) return true diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt similarity index 98% rename from Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt rename to Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt index e76441975..ceb9486c7 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/JatizsoListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt @@ -1,4 +1,4 @@ -package rs09.game.interaction.region +package rs09.game.interaction.region.rellekka import api.ContentAPI import core.game.node.entity.npc.NPC @@ -8,7 +8,6 @@ import core.game.world.map.Direction import core.game.world.map.Location import core.game.world.map.zone.ZoneBorders import org.rs09.consts.NPCs -import rs09.game.camerautils.PlayerCamera import rs09.game.content.dialogue.area.jatizso.LeftieRightieDialogue import rs09.game.interaction.InteractionListener diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/RellekkaListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt similarity index 60% rename from Server/src/main/kotlin/rs09/game/interaction/region/RellekkaListeners.kt rename to Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt index 1edfc93a6..b330b22c6 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/RellekkaListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt @@ -1,7 +1,10 @@ -package rs09.game.interaction.region +package rs09.game.interaction.region.rellekka import core.game.world.map.Location +import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.util.region.rellekka.RellekkaDestination +import rs09.game.util.region.rellekka.RellekkaUtils /** * File to be used for anything Rellekka related. @@ -43,5 +46,25 @@ class RellekkaListeners : InteractionListener() { } return@on true } + + on(NPCs.MARIA_GUNNARS_5508, NPC, "ferry-neitiznot"){player, _ -> + RellekkaUtils.sail(player, RellekkaDestination.RELLEKKA_TO_NEITIZNOT) + return@on true + } + + on(NPCs.MARIA_GUNNARS_5507, NPC, "ferry-rellekka"){player, node -> + RellekkaUtils.sail(player, RellekkaDestination.NEITIZNOT_TO_RELLEKKA) + return@on true + } + + on(NPCs.MORD_GUNNARS_5481, NPC, "ferry-jatizso"){player, node -> + RellekkaUtils.sail(player, RellekkaDestination.RELLEKKA_TO_JATIZSO) + return@on true + } + + on(NPCs.MORD_GUNNARS_5482, NPC, "ferry-rellekka"){player, node -> + RellekkaUtils.sail(player, RellekkaDestination.JATIZSO_TO_RELLEKKA) + return@on true + } } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt b/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt index 407174dfb..be2a5a0bb 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt @@ -1,5 +1,6 @@ package rs09.game.system.command.oldsys +import api.ContentAPI import core.cache.Cache import core.game.container.access.InterfaceContainer import core.game.content.quest.tutorials.tutorialisland.CharacterDesign @@ -187,6 +188,8 @@ class VisualCommand : CommandPlugin() { return true } player!!.packetDispatch.sendSceneryAnimation(`object`, Animation(toInteger(args[args.size - 1]!!))) + //ContentAPI.sendMessage(player, `object`.definition.modelIds.map { it.toString() }.toString()) + ContentAPI.sendMessage(player, `object`.definition.animationId.toString()) return true } "inter", "component", "interface" -> { @@ -215,16 +218,50 @@ class VisualCommand : CommandPlugin() { } "loop_varposition" -> { val value = (args!![1]!!.toString().toInt()) ?: 0 - val config_index = (args!![2]!!.toString().toInt()) - GameWorld.Pulser.submit(object : Pulse(3, player) { - var pos = 0 + val cfg_index = (args.getOrNull(2)?.toString()?.toInt() ?: -1) + if(cfg_index == -1){ + ContentAPI.submitWorldPulse(object : Pulse(3, player){ + var pos = 0 + var shift = 0 + override fun pulse(): Boolean { + for(i in 0..1999){ + player?.configManager?.forceSet(i, pos shl shift, false) + } + player?.sendMessage("$pos << $shift") + if(pos++ >= 32){ + shift += 4 + pos = 0 + } + return shift >= 32 + } + }) + } else { + ContentAPI.submitWorldPulse(object : Pulse(3, player) { + var pos = 0 + override fun pulse(): Boolean { + player?.configManager?.forceSet(cfg_index, value shl pos, false) + player?.sendMessage("$pos") + return pos++ >= 32 + } + }) + } + } + "loop_anim_on_i" -> { + var anim = toInteger(args!![1]!!) + ContentAPI.submitWorldPulse(object : Pulse(3){ override fun pulse(): Boolean { - player?.configManager?.forceSet(config_index, value shl pos,false) - player?.sendMessage("$pos") - return pos++ >= 32 + player!!.packetDispatch.sendAnimationInterface(anim++, 224, 7) + ContentAPI.sendMessage(player, "${anim - 1}") + return false } }) } + "send_i_anim" -> { + val iface = args?.getOrNull(0) ?: return true + val anim = args.getOrNull(1) ?: return true + + player?.packetDispatch?.sendAnimationInterface(toInteger(anim), toInteger(iface),7) + } "loop_inter" -> { val st = toInteger(args!![1]!!) val en = if (args.size > 2) toInteger(args[2]!!) else 740 diff --git a/Server/src/main/kotlin/rs09/game/util/region/rellekka/RellekkaUtils.kt b/Server/src/main/kotlin/rs09/game/util/region/rellekka/RellekkaUtils.kt new file mode 100644 index 000000000..282ca96d7 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/util/region/rellekka/RellekkaUtils.kt @@ -0,0 +1,35 @@ +package rs09.game.util.region.rellekka + +import api.ContentAPI +import core.game.node.entity.player.Player +import core.game.system.task.Pulse +import core.game.world.map.Location +import org.rs09.consts.Components + +object RellekkaUtils { + @JvmStatic + fun sail(player: Player, destination: RellekkaDestination){ + ContentAPI.lock(player, 100) + ContentAPI.openOverlay(player, 115) + ContentAPI.openInterface(player, Components.MISC_SHIPJOURNEY_224) + ContentAPI.animateInterface(player, Components.MISC_SHIPJOURNEY_224, 7, destination.shipAnim) + + val animDuration = ContentAPI.animationDuration(ContentAPI.getAnimation(destination.shipAnim)) + ContentAPI.submitWorldPulse(object : Pulse(animDuration){ + override fun pulse(): Boolean { + ContentAPI.teleport(player, destination.destLoc) + ContentAPI.closeInterface(player) + ContentAPI.closeOverlay(player) + ContentAPI.unlock(player) + return true + } + }) + } +} + +enum class RellekkaDestination(val destName: String, val destLoc: Location, val shipAnim: Int){ + RELLEKKA_TO_JATIZSO("Jatizso", Location.create(2421, 3781, 0), 5766), + JATIZSO_TO_RELLEKKA("Rellekka", Location.create(2644, 3710, 0), 5767), + RELLEKKA_TO_NEITIZNOT("Neitiznot",Location(2310, 3782, 0), 5764), + NEITIZNOT_TO_RELLEKKA("Rellekka", Location(2644, 3710, 0), 5765) +} \ No newline at end of file