From 4bbda63ed209905ec4e4a084abed60af47af6442 Mon Sep 17 00:00:00 2001 From: Ryan <2804894-ryannathans@users.noreply.gitlab.com> Date: Sat, 12 Mar 2022 15:20:21 +0000 Subject: [PATCH] fixed several bugs in barlak bone exchange --- Server/src/main/kotlin/api/ContentAPI.kt | 15 ++ .../region/dorgeshuun/BarlakDialogue.kt | 149 +++++++++--------- 2 files changed, 93 insertions(+), 71 deletions(-) diff --git a/Server/src/main/kotlin/api/ContentAPI.kt b/Server/src/main/kotlin/api/ContentAPI.kt index 4d3c9b1e7..0894d2833 100644 --- a/Server/src/main/kotlin/api/ContentAPI.kt +++ b/Server/src/main/kotlin/api/ContentAPI.kt @@ -1278,6 +1278,7 @@ fun getQP(player: Player): Int{ /** * Gets the stage for the given quest for the given player */ + fun questStage(player: Player, quest: String): Int{ return player.questRepository.getStage(quest) } @@ -1285,6 +1286,7 @@ fun questStage(player: Player, quest: String): Int{ /** * Sets the stage for the given quest for the given player */ + fun setQuestStage(player: Player, quest: String, stage: Int) { player.questRepository.setStage(QuestRepository.getQuests()[quest]!!, stage) } @@ -1292,6 +1294,7 @@ fun setQuestStage(player: Player, quest: String, stage: Int) { /** * Check if a quest is complete */ + fun isQuestComplete(player: Player, quest: String): Boolean { return player.questRepository.getStage(quest) == 100 } @@ -1324,6 +1327,7 @@ fun registerMapZone(zone: MapZone, borders: ZoneBorders){ * @param child the child on the interface to animate. * @param anim the ID of the animation to use. */ + fun animateInterface(player: Player, iface: Int, child: Int, anim: Int){ player.packetDispatch.sendAnimationInterface(anim,iface,child) } @@ -1392,6 +1396,7 @@ fun getMasteredSkillNames(player: Player): List { * @author ceik * @author James Triantafylos */ + fun dumpContainer(player: Player, container: core.game.container.Container) { val bank = player.bank container.toArray().filterNotNull().forEach { item -> @@ -1415,4 +1420,14 @@ fun dumpContainer(player: Player, container: core.game.container.Container) { } container.update() bank.update() +} + +/** + * Returns a boolean indicating if the player has a house. + * @param player the player. + * @return boolean indicating presence of house. + */ + +fun hasHouse(player: Player): Boolean { + return player.houseManager.hasHouse() } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/dorgeshuun/BarlakDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/dorgeshuun/BarlakDialogue.kt index 8714e8bf6..4462bfe0f 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/dorgeshuun/BarlakDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/dorgeshuun/BarlakDialogue.kt @@ -1,5 +1,3 @@ -@file:Suppress("UNUSED_PARAMETER") - package rs09.game.content.dialogue.region.dorgeshuun import api.* import core.game.content.dialogue.DialoguePlugin @@ -19,17 +17,14 @@ import java.text.NumberFormat @Initializable class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ - var pask = FacialExpression.ASKING - var pfr = FacialExpression.FRIENDLY - var pneu = FacialExpression.NEUTRAL + private var pask = FacialExpression.ASKING + private var pfr = FacialExpression.FRIENDLY + private var pneu = FacialExpression.NEUTRAL + private var nhap = FacialExpression.OLD_HAPPY + private var ntalk1 = FacialExpression.OLD_CALM_TALK1 + private var ntalk2 = FacialExpression.OLD_CALM_TALK2 - var nhap = FacialExpression.OLD_HAPPY - var ntalk1 = FacialExpression.OLD_CALM_TALK1 - var ntalk2 = FacialExpression.OLD_CALM_TALK2 - - var f = NumberFormat.getIntegerInstance() - var curItem = 0 - var toAddFromBank = 0 + private var curItem = 0 val sets = arrayOf( intArrayOf(Items.LONG_BONE_10976, 1000, 1500, Skills.CONSTRUCTION), @@ -42,36 +37,37 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ override fun open(vararg args: Any?): Boolean { npc = args[0] as NPC - - if (player.skills.getStaticLevel(Skills.CONSTRUCTION) >= 30 && player.houseManager.hasHouse()) { - if (player.inventory.contains(Items.LONG_BONE_10976, 1)) { - curItem = 0 - npcl(nhap, "Those bones! Those are exactly the sort of thing I need! Will you sell them?").also { stage = 0 } - } else if (player.inventory.contains(Items.CURVED_BONE_10977, 1)) { - curItem = 1 - npcl(nhap, "Those bones! Those are exactly the sort of thing I need! Will you sell them?").also { stage = 0 } - } else if (player.inventory.contains(Items.PERFECT_SHELL_10995, 1)) { - curItem = 5 - npc(ntalk2, "That giant shell... what is it?").also { stage = 120 } - } else if (player.inventory.contains(Items.TORTOISE_SHELL_7939, 1)) { - curItem = 4 - npc(ntalk2, "That giant shell... what is it?").also { stage = 100 } - } else if (player.inventory.contains(Items.PERFECT_SNAIL_SHELL_10996, 1)) { - curItem = 3 - npc(ntalk1, "That giant shell... what is it?").also { stage = 60 } - } else if (player.inventory.contains(Items.SNAIL_SHELL_7800, 1)) { - curItem = 2 - npc(ntalk1, "That giant shell... what is it?").also { stage = 50 } - } else { - npc(nhap, "Bones!").also { stage = 150 } - } + val playerMeetsBoneReqs = getDynLevel(player, Skills.CONSTRUCTION) >= 30 && hasHouse(player) + if (!playerMeetsBoneReqs) { + sendMessage(player, "You require at least level 30 construction and a house to speak to Barlak about bones.") + } + if (playerMeetsBoneReqs && inInventory(player, Items.LONG_BONE_10976, 1)) { + curItem = 0 + npcl(nhap, "Those bones! Those are exactly the sort of thing I need! Will you sell them?").also { stage = 0 } + } else if (playerMeetsBoneReqs && inInventory(player, Items.CURVED_BONE_10977, 1)) { + curItem = 1 + npcl(nhap, "Those bones! Those are exactly the sort of thing I need! Will you sell them?").also { stage = 0 } + } else if (inInventory(player, Items.PERFECT_SHELL_10995, 1)) { + curItem = 5 + npc(ntalk2, "That giant shell... what is it?").also { stage = 120 } + } else if (inInventory(player, Items.TORTOISE_SHELL_7939, 1)) { + curItem = 4 + npc(ntalk2, "That giant shell... what is it?").also { stage = 100 } + } else if (inInventory(player, Items.PERFECT_SNAIL_SHELL_10996, 1)) { + curItem = 3 + npc(ntalk1, "That giant shell... what is it?").also { stage = 60 } + } else if (inInventory(player, Items.SNAIL_SHELL_7800, 1)) { + curItem = 2 + npc(ntalk1, "That giant shell... what is it?").also { stage = 50 } + } else if (playerMeetsBoneReqs) { + npc(nhap, "Bones!").also { stage = 150 } } return true } override fun handle(interfaceId: Int, buttonId: Int): Boolean { when(stage){ - 0 -> npcl(ntalk1, "I'll give you " + f.format(gibMeDaCoinz(curItem)) + " gp for the bones you're carrying and for any you have in your bank.").also { stage++ } + 0 -> npcl(ntalk1, "I'll give you ${getTotalCoinsForCurItem()} gp for the bones you're carrying and for any you have in your bank.").also { stage++ } 1 -> npcl(ntalk2, "I'll try to teach you something about Construction as well, but it's highly technical so you won't understand if you don't already have level 30 Construction.").also { stage++ } 2 -> options("Okay.", "No, I'll keep the bones.").also { stage++ } 3 -> when (buttonId) { @@ -80,31 +76,31 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ } 10 -> { - doDaMaffBish() + exchange() npc(ntalk1, "Thanks! Now, let me explain...").also { stage = 999 } } 50 -> player(pfr, "It's a giant snail shell!").also { stage++ } 51 -> npcl(ntalk1, "Hmm... I think I might be able to make something out of them.").also { stage++ } - 52 -> npcl(ntalk2, "I'll give you " + f.format(gibMeDaCoinz(curItem)) + " gp for the snail shells you're carrying.").also { stage++ } + 52 -> npcl(ntalk2, "I'll give you ${getTotalCoinsForCurItem()} gp for the snail shells you're carrying.").also { stage++ } 53 -> options("Okay.", "No. I'll keep the bones.").also { stage++ } 54 -> when (buttonId) { 1 -> player(pfr, "Okay.").also { stage = 55 } 2 -> player(pneu, "No thanks.").also { stage = 99 } } 55 -> { - doDaMaffBish() + exchange() npcl(ntalk1, "Thanks. If you find any more shells like these, please bring them to me!").also { stage = 99 } } 60 -> player(pfr, "It's a giant snail shell!").also { stage++ } 61 -> { - when (player.inventory.getAmount(Items.PERFECT_SNAIL_SHELL_10996)) { + when (amountInInventory(player, Items.PERFECT_SNAIL_SHELL_10996)) { 1 -> npcl(ntalk2, "Hmm... I think I might be able to make something out of them, especially that perfect one.").also { stage++ } else -> npcl(ntalk1, "Hmm... I think I might be able to make something out of them, especially those perfect ones.").also { stage = 70 } } } - 62 -> npcl(ntalk2, "I'll give you " + f.format(gibMeDaCoinz(curItem)) + " gp for the snail shell you're carrying, and I'll try to give you some advice on Crafting while I'm at it.").also { stage++ } + 62 -> npcl(ntalk2, "I'll give you ${getTotalCoinsForCurItem()} gp for the snail shell you're carrying, and I'll try to give you some advice on Crafting while I'm at it.").also { stage++ } 63 -> options("Okay.", "No. I'll keep the bones.").also { stage++ } 64 -> when (buttonId) { 1 -> player(pfr, "Okay.").also { stage = 65 } @@ -112,10 +108,10 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ } 65 -> { npcl(ntalk2, "Thanks! Now, I don't think I could use that for Construction, but maybe I could make something...").also { stage = 1000 } - doDaMaffBish() + exchange() } - 70 -> npcl(ntalk2, "I'll give you " + f.format(gibMeDaCoinz(curItem)) + " gp for the snail shells you're carrying, and I'll try to give you some advice on Crafting while I'm at it.").also { stage++ } + 70 -> npcl(ntalk2, "I'll give you ${getTotalCoinsForCurItem()} gp for the snail shells you're carrying, and I'll try to give you some advice on Crafting while I'm at it.").also { stage++ } 71 -> options("Okay.", "No. I'll keep the bones.").also { stage++ } 72 -> when (buttonId) { 1 -> player(pfr, "Okay.").also { stage = 75 } @@ -123,12 +119,12 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ } 75 -> { npcl(ntalk2, "Thanks! Now, I don't think I could use that for Construction, but maybe I could make something...").also { stage = 1000 } - doDaMaffBish() + exchange() } 100 -> player(pfr, "It's a giant battle tortoise shell!").also { stage++ } 101 -> npcl(ntalk1, "Hmm... I think I might be able to make something out of them.").also { stage++ } - 102 -> npcl(ntalk2, "I'll give you " + f.format(gibMeDaCoinz(curItem)) + " gp for the tortoise shells you're carrying.").also { stage++ } + 102 -> npcl(ntalk2, "I'll give you ${getTotalCoinsForCurItem()} gp for the tortoise shells you're carrying.").also { stage++ } 103 -> options("Okay.", "No. I'll keep the bones.").also { stage++ } 104 -> when (buttonId) { 1 -> player(pfr, "Okay.").also { stage = 105 } @@ -136,17 +132,17 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ } 105 -> { npcl(ntalk2, "Thanks. If you find any more shells like these, please bring them to me!").also { stage = 130 } - doDaMaffBish() + exchange() } - 120 -> player(pfr, "It's a giant battle tortoise shell!").also { stage++ } + 120 -> player(pfr, "It's a perfect shell!").also { stage++ } 121 -> { - when (player.inventory.getAmount(Items.PERFECT_SHELL_10995)) { + when (amountInInventory(player, Items.PERFECT_SHELL_10995)) { 1 -> npcl(ntalk2, "Hmm... I think I might be able to make something out of them, especially that perfect one.").also { stage++ } - else -> npcl(ntalk1, "Hmm... I think I might be able to make something out of them, especially those perfect ones.").also { stage = 130 } + else -> npcl(ntalk1, "Hmm... I think I might be able to make something out of them, especially those perfect ones.").also { stage++ } } } - 122 -> npcl(ntalk2, "I'll give you " + f.format(gibMeDaCoinz(curItem)) + " gp for the tortoise shell you're carrying, and I'll try to give you some advice on Crafting while I'm at it.").also { stage++ } + 122 -> npcl(ntalk2, "I'll give you ${getTotalCoinsForCurItem()} gp for the perfect shell you're carrying, and I'll try to give you some advice on Crafting while I'm at it.").also { stage++ } 123 -> options("Okay.", "No. I'll keep the bones.").also { stage++ } 124 -> when (buttonId) { 1 -> player(pfr, "Okay.").also { stage = 125 } @@ -154,14 +150,14 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ } 125 -> { npcl(ntalk2, "Thanks! Now, I don't think I could use that for Construction, but maybe I could make something...").also { stage = 1001 } - doDaMaffBish() + exchange() } 130 -> { - if (player.inventory.contains(Items.SNAIL_SHELL_7800, 1)) { + if (inInventory(player, Items.SNAIL_SHELL_7800, 1)) { curItem = 2 npc(ntalk1, "That giant shell... what is it?").also { stage = 50 } - } else if (player.inventory.contains(Items.PERFECT_SNAIL_SHELL_10996, 1)) { + } else if (inInventory(player, Items.PERFECT_SNAIL_SHELL_10996, 1)) { curItem = 3 npc(ntalk1, "That giant shell... what is it?").also { stage = 60 } } else { @@ -202,32 +198,43 @@ class BarlakDialogue(player: Player? = null) : DialoguePlugin(player){ } return true } - private fun wotItem(): Item { - return Item(sets[curItem][0]) + + + private fun exchange() { + val item = getItemForCurItem() + val numToExchange = getNumToExchange() + removeAll(player, item, Container.INVENTORY) + removeAll(player, item, Container.BANK) + addItemOrDrop(player, Items.COINS_995, getCoinsForCurItem() * numToExchange) + rewardXP(player, getSkillForCurItem(), (getXpForCurItem() * numToExchange).toDouble()) } - private fun doDaMaffBish() { - addItemOrDrop(player, 995, gibMeDaCoinz(curItem)) - removeAll(player, wotItem(), Container.INVENTORY) - if (inBank(player, sets[curItem][0], 1)) { - removeAll(player, wotItem(), Container.BANK) - } - player.skills.addExperience(gibMeDaSkill(curItem), gibMeDaExp(curItem).toDouble()) + private fun getNumToExchange(): Int { + val itemId = getItemIdForCurItem() + return amountInInventory(player, itemId) + amountInBank(player, itemId) } - private fun gibMeDaCoinz(a: Int): Int { - if (inBank(player, sets[curItem][0], 1)) { - toAddFromBank = amountInBank(player, sets[curItem][0]) - } else { - toAddFromBank = 0 - } - return (player.inventory.getAmount(sets[curItem][0]) * sets[curItem][1]) + (toAddFromBank * sets[curItem][1]) + private fun getTotalCoinsForCurItem(): Int { + return getCoinsForCurItem() * getNumToExchange() } - private fun gibMeDaExp(a: Int): Int { + private fun getItemForCurItem(): Item { + return Item(getItemIdForCurItem()) + } + + private fun getItemIdForCurItem(): Int { + return sets[curItem][0] + } + + private fun getCoinsForCurItem(): Int { + return sets[curItem][1] + } + + private fun getXpForCurItem(): Int { return sets[curItem][2] } - private fun gibMeDaSkill(a: Int): Int { + + private fun getSkillForCurItem(): Int { return sets[curItem][3] }