From 0812cfa0c7ba71f66fc8f3d5a14b7d00cb42211d Mon Sep 17 00:00:00 2001 From: downthecrop Date: Sat, 23 Apr 2022 12:55:33 +0000 Subject: [PATCH] Fixes for 'perfect gold' smelting, mining and a prospecting bug for depleted rocks --- .../skill/smithing/FurnaceOptionPlugin.java | 4 ++-- .../familycrest/PerfectGoldSmeltingHandler.kt | 24 ++++++++++++------- .../skill/gather/mining/MiningSkillPulse.kt | 20 ++++++++++++++-- .../skill/gather/mining/ProspectListener.kt | 17 +++++-------- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/Server/src/main/java/core/game/node/entity/skill/smithing/FurnaceOptionPlugin.java b/Server/src/main/java/core/game/node/entity/skill/smithing/FurnaceOptionPlugin.java index 585bd2dd3..765f2a3a0 100644 --- a/Server/src/main/java/core/game/node/entity/skill/smithing/FurnaceOptionPlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/smithing/FurnaceOptionPlugin.java @@ -107,7 +107,7 @@ public final class FurnaceOptionPlugin extends OptionHandler { /** * Represents the ids. */ - private static final int[] IDS = new int[] { 4304, 6189, 11010, 11666, 12100, 12809, 14921, 18497, 26814, 30021, 30510, 36956, 37651 }; + public static final int[] furnaceIDS = new int[] { 4304, 6189, 11010, 11666, 12100, 12809, 14921, 18497, 26814, 30021, 30510, 36956, 37651 }; /** * Constructs a new {@code SmeltUseWithHandler} {@code Object}. @@ -118,7 +118,7 @@ public final class FurnaceOptionPlugin extends OptionHandler { @Override public Plugin newInstance(Object arg) throws Throwable { - for (int i : IDS) { + for (int i : furnaceIDS) { addHandler(i, OBJECT_TYPE, this); } return this; diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/PerfectGoldSmeltingHandler.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/PerfectGoldSmeltingHandler.kt index 901a78caf..074b80505 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/PerfectGoldSmeltingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/PerfectGoldSmeltingHandler.kt @@ -1,10 +1,13 @@ package plugin.quest.members.familycrest +import api.addItem +import api.animate; +import api.removeItem import core.game.interaction.NodeUsageEvent import core.game.interaction.UseWithHandler import core.game.node.entity.skill.Skills -import core.game.node.item.Item +import core.game.node.entity.skill.smithing.FurnaceOptionPlugin import core.game.system.task.Pulse import core.plugin.Initializable import core.plugin.Plugin @@ -15,11 +18,12 @@ import rs09.game.world.GameWorld.Pulser @Initializable class PerfectGoldSmeltingHandler : UseWithHandler(Items.PERFECT_GOLD_ORE_446){ - val furnaceIDs = listOf(2349, 2351, 2353, 2359, 2361, 2363, 2366, 2368, 9467, 11286, 1540, 11710, 11712, 11714, 11666, 11686, 11688, 11692) + + private val furnaceIDs: IntArray = FurnaceOptionPlugin.SmeltUseWithHandler.furnaceIDS; override fun newInstance(arg: Any?): Plugin { - for(furnaces in furnaceIDs){ - addHandler(furnaces, OBJECT_TYPE, this) + for(furnace in furnaceIDs){ + addHandler(furnace, OBJECT_TYPE, this) } return this } @@ -27,16 +31,18 @@ class PerfectGoldSmeltingHandler : UseWithHandler(Items.PERFECT_GOLD_ORE_446){ override fun handle(event: NodeUsageEvent?): Boolean { event ?: return false + val player = event.player - Pulser.submit(object : Pulse(2, event.player) { + Pulser.submit(object : Pulse(2, player) { override fun pulse(): Boolean { - event.player.inventory.remove(Item(446)) - event.player.inventory.add(Item(2365)) - event.player.skills.addExperience(Skills.SMITHING,22.5) + if(removeItem(player,Items.PERFECT_GOLD_ORE_446)){ + animate(player,3243) + addItem(player,Items.PERFECT_GOLD_BAR_2365) + player.skills.addExperience(Skills.SMITHING,22.5) + } return true } }) return true - } } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt index 6a27286ec..3333b3a14 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/MiningSkillPulse.kt @@ -7,8 +7,6 @@ import core.game.container.impl.EquipmentContainer import core.game.content.dialogue.FacialExpression import core.game.content.global.SkillingPets import core.game.node.Node -import core.game.node.scenery.Scenery -import core.game.node.scenery.SceneryBuilder import core.game.node.entity.impl.Animator import core.game.node.entity.npc.drop.DropFrequency import core.game.node.entity.player.Player @@ -18,7 +16,10 @@ import core.game.node.entity.skill.gather.SkillingTool import core.game.node.entity.skill.gather.mining.MiningNode import core.game.node.item.ChanceItem import core.game.node.item.Item +import core.game.node.scenery.Scenery +import core.game.node.scenery.SceneryBuilder import core.game.system.task.Pulse +import core.game.world.map.Location import core.game.world.update.flag.context.Animation import core.tools.RandomFunction import core.tools.StringUtils @@ -37,6 +38,15 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul private var isMiningGems = false private var ticks = 0 protected var resetAnimation = true + + // Perfect Gold Ore in Witchhaven Dungeon (Family Crest) + private val perfectGoldOreLocations = listOf( + Location(2735, 9695, 0), + Location(2737, 9689, 0), + Location(2740, 9684, 0), + Location(2737, 9683, 0), + ) + fun message(type: Int) { if (type == 0) { player.packetDispatch.sendMessage("You swing your pickaxe at the rock...") @@ -67,6 +77,12 @@ class MiningSkillPulse(private val player: Player, private val node: Node) : Pul if (resource == null) { return } + if (resource!!.id == 2099 && + !perfectGoldOreLocations.contains(node.location) ) { + // Perfect Gold Ore Id's outside of Witchhaven + // are replaced with a normal gold rock. + resource = MiningNode.forId(2098) + } if (resource!!.id == 2491) { isMiningEssence = true } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt index 9ef542b2e..e5ee3ff98 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt @@ -1,4 +1,4 @@ -package rs09.game.interaction.`object` +package rs09.game.node.entity.skill.gather.mining import api.* import core.game.node.entity.skill.gather.SkillingResource @@ -14,13 +14,13 @@ class ProspectListener : InteractionListener { override fun defineListeners() { on(SCENERY, "prospect") { player, node -> + val rock = SkillingResource.forId(node.id) + if(rock == null) { + sendMessage(player, "There is no ore currently available in this rock.") + return@on true + } /** Check if the rock contains gems */ if(MiningNode.forId(node.id).identifier == 13.toByte()) { - val rock = SkillingResource.forId(node.asScenery().id) - if(rock == null) { - sendMessage(player, "There is no ore currently available in this rock.") - return@on true - } sendMessage(player,"You examine the rock for ores...") /** Send a simple text string saying it's a gem rock */ player.pulseManager.run(object : Pulse(3) { @@ -32,11 +32,6 @@ class ProspectListener : InteractionListener { } /** If it doesn't contain gems */ else { - val rock = SkillingResource.forId(node.id) - if(rock == null) { - sendMessage(player, "There is no ore currently available in this rock.") - return@on true - } sendMessage(player,"You examine the rock for ores...") /** Get the name of the rock's reward and sends a message to the player */ player.pulseManager.run(object : Pulse(3) {