From e315bf8b83cde1958a14ff19fde3e431104597ae Mon Sep 17 00:00:00 2001 From: ceikry Date: Wed, 14 Jul 2021 17:26:15 -0500 Subject: [PATCH] Everything star sprite done EXCEPT cooldown on teleport --- Server/build.gradle | 2 +- .../{ConstLib-1.1.jar => ConstLib-1.2.jar} | Bin 414030 -> 414050 bytes .../entity/player/link/TeleportManager.java | 22 +---- .../shootingstar/ShootingStarMiningPulse.kt | 27 ++++++ .../shootingstar/StarSpriteDialogue.kt | 82 +++++++++++++++++- .../game/interaction/item/StarRingListener.kt | 78 +++++++++++++++++ 6 files changed, 189 insertions(+), 22 deletions(-) rename Server/libs/{ConstLib-1.1.jar => ConstLib-1.2.jar} (97%) create mode 100644 Server/src/main/kotlin/rs09/game/interaction/item/StarRingListener.kt diff --git a/Server/build.gradle b/Server/build.gradle index 9f11df2fc..cc0a72780 100644 --- a/Server/build.gradle +++ b/Server/build.gradle @@ -28,7 +28,7 @@ dependencies { implementation 'io.github.classgraph:classgraph:4.8.98' implementation 'org.jetbrains.kotlin:kotlin-reflect' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' - implementation files("libs/ConstLib-1.1.jar") + implementation files("libs/ConstLib-1.2.jar") implementation files("libs/PrimitiveExtensions-1.0.jar") } diff --git a/Server/libs/ConstLib-1.1.jar b/Server/libs/ConstLib-1.2.jar similarity index 97% rename from Server/libs/ConstLib-1.1.jar rename to Server/libs/ConstLib-1.2.jar index 8e0af0c6e96a69c1ab8a27ce04b0f3564f3ff3cb..e8679d1368774cad9a3b78b931ceec8539db2dd9 100644 GIT binary patch delta 9599 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 M0o0-gA|oUFU(TyYi~s-t delta 9594 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 GuKXYPkW3u_ diff --git a/Server/src/main/java/core/game/node/entity/player/link/TeleportManager.java b/Server/src/main/java/core/game/node/entity/player/link/TeleportManager.java index bed9736b9..d3933cfe2 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/TeleportManager.java +++ b/Server/src/main/java/core/game/node/entity/player/link/TeleportManager.java @@ -668,25 +668,7 @@ public class TeleportManager { @Override public void start() { - player = ((Player) entity); - if (TutorialSession.getExtension(player).getStage() < TutorialSession.MAX_STAGE) { - stop(); - return; - } - if (player.getSavedData().getGlobalData().getMinigameTeleportDelay() > System.currentTimeMillis()) { - long milliseconds = player.getSavedData().getGlobalData().getMinigameTeleportDelay() - System.currentTimeMillis(); - int minutes = (int) Math.round(milliseconds / 60000); - if (minutes > 30) { - player.getSavedData().getGlobalData().setMinigameTeleportDelay(System.currentTimeMillis() + 600000); - milliseconds = player.getSavedData().getGlobalData().getMinigameTeleportDelay() - System.currentTimeMillis(); - minutes = (int) Math.round(milliseconds / 60000); - } - if (minutes != 0) { - player.getPacketDispatch().sendMessage("You need to wait another " + minutes + " " + (minutes == 1 ? "minute" : "minutes") + " to use the finder again."); - stop(); - return; - } - } + super.start(); } @@ -694,7 +676,7 @@ public class TeleportManager { public void stop() { super.stop(); entity.getAnimator().forceAnimation(new Animation(-1)); - player.graphics(new Graphics(-1)); + entity.graphics(new Graphics(-1)); } }; } diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarMiningPulse.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarMiningPulse.kt index dac8fa0a3..b51717e83 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarMiningPulse.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarMiningPulse.kt @@ -1,5 +1,6 @@ package rs09.game.content.global.worldevents.shootingstar +import api.ContentAPI import core.game.content.global.worldevents.shootingstar.ScoreboardManager import core.game.node.`object`.Scenery import core.game.node.entity.player.Player @@ -7,8 +8,11 @@ import core.game.node.entity.skill.SkillPulse import core.game.node.entity.skill.Skills import core.game.node.entity.skill.gather.SkillingTool import core.game.node.item.Item +import core.tools.RandomFunction +import org.rs09.consts.Items import rs09.game.world.GameWorld import rs09.game.world.repository.Repository +import rs09.tools.stringtools.colorize /** * The pulse used to handle mining shooting stars. @@ -71,9 +75,32 @@ class ShootingStarMiningPulse(player: Player?, node: Scenery?, val star: Shootin if (ShootingStarOptionHandler.getStarDust(player) < 200) { player.inventory.add(Item(ShootingStarOptionHandler.STAR_DUST, 1)) } + if(!ContentAPI.inInventory(player, Items.ANCIENT_BLUEPRINT_14651) && !ContentAPI.inBank(player, Items.ANCIENT_BLUEPRINT_14651)){ + rollBlueprint(player) + } return false } + fun rollBlueprint(player: Player){ + val chance = when(star.level){ + ShootingStarType.LEVEL_9 -> 250 + ShootingStarType.LEVEL_8 -> 500 + ShootingStarType.LEVEL_7 -> 750 + ShootingStarType.LEVEL_6 -> 1000 + ShootingStarType.LEVEL_5 -> 2000 + ShootingStarType.LEVEL_4 -> 3000 + ShootingStarType.LEVEL_3 -> 4000 + ShootingStarType.LEVEL_2 -> 5000 + ShootingStarType.LEVEL_1 -> 10000 + } + + if(RandomFunction.roll(chance)){ + ContentAPI.addItemOrDrop(player, Items.ANCIENT_BLUEPRINT_14651, 1) + ContentAPI.sendMessage(player, colorize("%RWhile mining the star you find an ancient-looking blueprint.")) + ContentAPI.sendNews("${player.username} found an Ancient Blueprint while mining a shooting star!") + } + } + override fun message(type: Int) { when (type) { 0 -> player.packetDispatch.sendMessage("You swing your pickaxe at the rock...") diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/StarSpriteDialogue.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/StarSpriteDialogue.kt index 2944989b0..6c368f65a 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/StarSpriteDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/StarSpriteDialogue.kt @@ -1,9 +1,18 @@ package rs09.game.content.global.worldevents.shootingstar +import api.Container +import api.ContentAPI 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.game.node.item.Item +import core.tools.RandomFunction +import org.rs09.consts.Items +import rs09.game.node.entity.state.newsys.states.ShootingStarState +import rs09.tools.END_DIALOGUE +import rs09.tools.secondsToTicks +import rs09.tools.stringtools.colorize import java.util.concurrent.TimeUnit /** @@ -55,6 +64,12 @@ class StarSpriteDialogue(player: Player? = null) : DialoguePlugin(player) { if (player.getSavedData().getGlobalData().getStarSpriteDelay() > System.currentTimeMillis() || !player.getInventory().contains(ShootingStarOptionHandler.STAR_DUST, 1)) { npc("Hello, strange creature.") stage = 0 + } else if (ContentAPI.inInventory(player, Items.ANCIENT_BLUEPRINT_14651) && !ContentAPI.getAttribute(player, "star-ring:bp-shown", false)) { + npcl(FacialExpression.NEUTRAL, "I see you got ahold of a blueprint of those silly old rings we used to make.") + stage = 1000 + } else if (ContentAPI.inInventory(player, Items.ANCIENT_BLUEPRINT_14651) && ContentAPI.getAttribute(player, "star-ring:bp-shown", false)) { + playerl(FacialExpression.HALF_ASKING, "So about those rings...") + stage = 2000 } else { npc("Thank you for helping me out of here.") stage = 50 @@ -166,6 +181,7 @@ class StarSpriteDialogue(player: Player? = null) : DialoguePlugin(player) { } 41 -> end() 50 -> { + val wearingRing = ContentAPI.inEquipment(player, Items.RING_OF_THE_STAR_SPRITE_14652) val dust = if (player.getInventory().getAmount(ShootingStarOptionHandler.STAR_DUST) > 200) 200 else player.getInventory().getAmount(ShootingStarOptionHandler.STAR_DUST) if (player.getInventory().remove(Item(ShootingStarOptionHandler.STAR_DUST, dust))) { val cosmicRunes = (Math.ceil(0.76 * dust) * AMPLIFIER).toInt() @@ -178,11 +194,61 @@ class StarSpriteDialogue(player: Player? = null) : DialoguePlugin(player) { player.getInventory().add(Item(COINS, coins), player) npc("I have rewarded you by making it so you can mine", "extra ore for the next 15 minutes. Also, have $cosmicRunes", "cosmic runes, $astralRunes astral runes, $goldOre gold ore and $coins", "coins.") player.getSavedData().getGlobalData().setStarSpriteDelay(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)) - player.registerState("shooting-star").init() + player.registerState("shooting-star")?.init() + + if(wearingRing){ + val item = intArrayOf(Items.COSMIC_RUNE_564, Items.ASTRAL_RUNE_9075, Items.GOLD_ORE_445, Items.COINS_995).random() + val amount = when(item){ + Items.COSMIC_RUNE_564 -> cosmicRunes + Items.ASTRAL_RUNE_9075 -> astralRunes + Items.GOLD_ORE_445 -> goldOre + Items.COINS_995 -> coins + else -> 0 + } + rollForRingBonus(player, item, amount) + } + } + + if(!ContentAPI.inInventory(player, Items.ANCIENT_BLUEPRINT_14651) && !ContentAPI.inBank(player, Items.ANCIENT_BLUEPRINT_14651) && RandomFunction.roll(500)){ + ContentAPI.addItemOrDrop(player, Items.ANCIENT_BLUEPRINT_14651, 1) + ContentAPI.sendMessage(player, colorize("%RThe Star Sprite dropped what looks like some ancient piece of paper and you pick it up.")) + ContentAPI.sendNews("${player.username} found an Ancient Blueprint while mining a shooting star!") } stage = 52 } 52 -> end() + + //Inauthentic ring-based dialogue + 1000 -> playerl(FacialExpression.ASKING, "Oh, you mean this?").also { stage++ } + 1001 -> player.dialogueInterpreter.sendItemMessage(Items.ANCIENT_BLUEPRINT_14651, "You show the blueprint to the Star Sprite.").also { stage++ } + 1002 -> npcl(FacialExpression.ASKING, "Yeah, that's the one, alright!").also { stage++ } + 1003 -> npcl(FacialExpression.NEUTRAL, "I'll tell you what.. if you can get ahold of the resources needed to make one, I'm sure me or one of my kin would craft it for you.").also { stage++ } + 1004 -> playerl(FacialExpression.ASKING, "You'd just do that for me? For free?").also { stage++ } + 1005 -> npcl(FacialExpression.NEUTRAL, "I don't see why not. We used to make these for fun and hand them out to adventurers all the time.").also { stage++ } + 1006 -> playerl(FacialExpression.ASKING, "Well, thanks! So.. what do we need to make one?").also { stage++ } + 1007 -> npcl(FacialExpression.NEUTRAL, "Looking at the blueprint here...").also { stage++ } + 1008 -> npcl(FacialExpression.NEUTRAL, "Yes, it seems we need a ring mould, a gold bar, a cut dragonstone and 200 stardust. Oh, and make sure to bring this blueprint with you.").also { stage++ } + 1009 -> playerl(FacialExpression.FRIENDLY, "Thanks, I'll get right on it!").also { stage++ } + 1010 -> playerl(FacialExpression.ASKING, "So just to make sure I've got it right, I need a ring mould, a gold bar, a cut dragonstone and 200 stardust, as well as this blueprint?").also { stage++ } + 1011 -> npcl(FacialExpression.NEUTRAL, "Yeah, you've got it, human. Any of my kin should be able to do this for you.").also { stage++; ContentAPI.setAttribute(player, "/save:star-ring:bp-shown", true) } + 1012 -> playerl(FacialExpression.FRIENDLY, "Thanks!").also { stage = END_DIALOGUE } + + 2000 -> npcl(FacialExpression.NEUTRAL, "Yes, did you bring the components to make it, human?").also { stage++ } + 2001 -> if(ContentAPI.inInventory(player, Items.DRAGONSTONE_1615,1) && ContentAPI.inInventory(player, Items.RING_MOULD_1592, 1) && ContentAPI.inInventory(player, Items.STARDUST_13727, 200) && ContentAPI.inInventory(player, Items.GOLD_BAR_2357, 1)){ + playerl(FacialExpression.FRIENDLY, "Yes, I have them right here, friend.").also { stage++ } + } else { + playerl(FacialExpression.HALF_GUILTY, "I'm afraid not, what did I need again?").also { stage = 2100 } + } + 2002 -> npcl(FacialExpression.NEUTRAL, "Excellent, give me just a moment here...").also { stage++ } + 2003 -> sendDialogue("You watch as the Star Sprite casts some strange spell.").also { stage++ } + 2004 -> if(ContentAPI.removeItem(player, Items.GOLD_BAR_2357, Container.INVENTORY) && ContentAPI.removeItem(player, Items.DRAGONSTONE_1615, Container.INVENTORY) && ContentAPI.removeItem(player, Item(Items.STARDUST_13727, 200), Container.INVENTORY)){ + ContentAPI.addItem(player, Items.RING_OF_THE_STAR_SPRITE_14652) + player.dialogueInterpreter.sendItemMessage(Items.RING_OF_THE_STAR_SPRITE_14652, "The Star Sprite hands you a strange ring.").also { stage++ } + } else end() + 2005 -> npcl(FacialExpression.NEUTRAL, "There you go, I hope you enjoy it!").also { stage++ } + 2006 -> playerl(FacialExpression.FRIENDLY, "Thank you!").also { stage = END_DIALOGUE } + + 2100 -> npcl(FacialExpression.NEUTRAL, "A ring mould, a cut dragonstone, a gold bar and 200 stardust.").also { stage = END_DIALOGUE } } return true } @@ -191,4 +257,18 @@ class StarSpriteDialogue(player: Player? = null) : DialoguePlugin(player) { return intArrayOf(8091) } + fun rollForRingBonus(player: Player, bonusId: Int, bonusBaseAmt: Int){ + if(RandomFunction.roll(3)){ + val state = player.states["shooting-star"] as? ShootingStarState ?: return + state.ticksLeft += secondsToTicks(TimeUnit.MINUTES.toSeconds(5).toInt()) + ContentAPI.sendMessage(player, colorize("%RYour ring shines dimly as if imbued with energy.")) + } else if(RandomFunction.roll(5)){ + ContentAPI.addItem(player, bonusId, bonusBaseAmt) + ContentAPI.sendMessage(player, colorize("%RYour ring shines brightly as if surging with energy and then fades out.")) + } else if(RandomFunction.roll(25)){ + player.savedData.globalData.starSpriteDelay = 0L + ContentAPI.sendMessage(player, colorize("%RYour ring vibrates briefly as if surging with power, and then stops.")) + } + } + } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/StarRingListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/StarRingListener.kt new file mode 100644 index 000000000..4bf1e3d36 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/interaction/item/StarRingListener.kt @@ -0,0 +1,78 @@ +package rs09.game.interaction.item + +import api.ContentAPI +import core.game.node.entity.player.Player +import core.game.node.entity.player.link.TeleportManager +import core.game.node.entity.skill.Skills +import core.game.world.map.Location +import org.rs09.consts.Items +import rs09.game.content.dialogue.DialogueFile +import rs09.game.content.global.worldevents.WorldEvents +import rs09.game.content.global.worldevents.shootingstar.ShootingStar +import rs09.game.content.global.worldevents.shootingstar.ShootingStarEvent +import rs09.game.interaction.InteractionListener + +class StarRingListener : InteractionListener(){ + + val RING = Items.RING_OF_THE_STAR_SPRITE_14652 + + override fun defineListeners() { + on(RING, ITEM, "rub", "operate"){player, node -> + val star = WorldEvents.get("shooting-stars") as? ShootingStarEvent + + if(star == null) ContentAPI.sendDialogue(player, "There is currently no active star.").also { return@on true } + + val condition: (Player) -> Boolean = when(star?.star!!.location.toLowerCase()){ + "canifis bank" -> { p -> p.questRepository.isComplete("Priest in Peril")} + "crafting guild" -> {p -> ContentAPI.hasLevelStat(p, Skills.CRAFTING, 40) } + "south crandor mining site" -> {p -> p.questRepository.isComplete("Dragon Slayer")} + else -> {_ -> true} + } + + if(!condition.invoke(player) || player.skullManager.isWilderness){ + ContentAPI.sendDialogue(player, "Magical forces prevent your teleportation.") + return@on true + } + + val shouldWarn = when(star.star.location){ + "North Edgeville mining site", + "Southern wilderness mine", + "Pirates' Hideout mine", + "Lava Maze mining site", + "Mage Arena bank" -> true + else -> false + } + + ContentAPI.openDialogue(player, RingDialogue(shouldWarn, star.star)) + + return@on true + } + } + + internal class RingDialogue(val shouldWarn: Boolean, val star: ShootingStar) : DialogueFile(){ + override fun handle(componentID: Int, buttonID: Int) { + if(shouldWarn){ + when(stage) { + 0 -> dialogue("WARNING: That mining site is located in the wilderness.").also { stage++ } + 1 -> player!!.dialogueInterpreter.sendOptions("Continue?","Yes","No").also { stage++ } + 2 -> when(buttonID){ + 1 -> teleport(player!!, star).also { end() } + 2 -> end() + } + } + } else { + when(stage){ + 0 -> player!!.dialogueInterpreter.sendOptions("Teleport to the Star?", "Yes", "No").also { stage++ } + 1 -> when(buttonID){ + 1 -> teleport(player!!, star).also { end() } + 2 -> end() + } + } + } + } + + fun teleport(player: Player, star: ShootingStar){ + ContentAPI.teleport(player, star.crash_locations[star.location]!!.transform(0, -1, 0), TeleportManager.TeleportType.MINIGAME) + } + } +} \ No newline at end of file