Rewrote the barrows reward chest for authenticity

Removed inauthentic potions
Remove the inauthentic restriction that the chest may only be looted after all brothers have been killed
Each brother killed now awards an additional roll for the chest
This commit is contained in:
Player Name
2023-09-09 01:26:33 +00:00
committed by Ryan
parent 42f0b7c3b2
commit 7383454728
@@ -16,14 +16,11 @@ import core.api.utils.WeightedItem
/** /**
* The reward chest. * The reward chest.
* @author Ceikry * @author Ceikry
* and slightly kermit * @author kermit
* @author Player Name
*/ */
object RewardChest { object RewardChest {
/** private val REGULAR_DROPS = WeightBasedTable.create(
* The low profit drop table.
*/
private val DROP_TABLE = WeightBasedTable.create(
//Weighted total = 3050
WeightedItem(Items.COINS_995, 1, 5306, 950.0), WeightedItem(Items.COINS_995, 1, 5306, 950.0),
WeightedItem(Items.MIND_RUNE_558, 60, 60, 300.0), WeightedItem(Items.MIND_RUNE_558, 60, 60, 300.0),
WeightedItem(Items.MIND_RUNE_558, 100, 850, 300.0), WeightedItem(Items.MIND_RUNE_558, 100, 850, 300.0),
@@ -32,40 +29,17 @@ object RewardChest {
WeightedItem(Items.DEATH_RUNE_560, 70, 230, 300.0), WeightedItem(Items.DEATH_RUNE_560, 70, 230, 300.0),
WeightedItem(Items.BLOOD_RUNE_565, 35, 230, 300.0), WeightedItem(Items.BLOOD_RUNE_565, 35, 230, 300.0),
WeightedItem(Items.BOLT_RACK_4740, 35, 280, 300.0), WeightedItem(Items.BOLT_RACK_4740, 35, 280, 300.0),
//Weight total = 975
WeightedItem(Items.SUPER_DEFENCE2_165, 1, 1, 325.0),
WeightedItem(Items.PRAYER_POTION2_141, 1, 1, 325.0),
WeightedItem(Items.RESTORE_POTION2_129, 1, 1, 325.0),
//Weight total = 53
WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985, 1, 1, 25.0), WeightedItem(Items.TOOTH_HALF_OF_A_KEY_985, 1, 1, 25.0),
WeightedItem(Items.LOOP_HALF_OF_A_KEY_987, 1, 1, 25.0), WeightedItem(Items.LOOP_HALF_OF_A_KEY_987, 1, 1, 25.0),
WeightedItem(Items.DRAGON_MED_HELM_1149, 1, 1, 3.0), WeightedItem(Items.DRAGON_MED_HELM_1149, 1, 1, 3.0)
//Weight total = 120 BARROWS ITEMS V
WeightedItem(4708, 1, 1, 5.0),
WeightedItem(4710, 1, 1, 5.0),
WeightedItem(4712, 1, 1, 5.0),
WeightedItem(4714, 1, 1, 5.0),
WeightedItem(4716, 1, 1, 5.0),
WeightedItem(4718, 1, 1, 5.0),
WeightedItem(4720, 1, 1, 5.0),
WeightedItem(4722, 1, 1, 5.0),
WeightedItem(4724, 1, 1, 5.0),
WeightedItem(4726, 1, 1, 5.0),
WeightedItem(4728, 1, 1, 5.0),
WeightedItem(4730, 1, 1, 5.0),
WeightedItem(4732, 1, 1, 5.0),
WeightedItem(4734, 1, 1, 5.0),
WeightedItem(4736, 1, 1, 5.0),
WeightedItem(4738, 1, 1, 5.0),
WeightedItem(4745, 1, 1, 5.0),
WeightedItem(4747, 1, 1, 5.0),
WeightedItem(4749, 1, 1, 5.0),
WeightedItem(4751, 1, 1, 5.0),
WeightedItem(4753, 1, 1, 5.0),
WeightedItem(4755, 1, 1, 5.0),
WeightedItem(4757, 1, 1, 5.0),
WeightedItem(4759, 1, 1, 5.0)
) )
private val AHRIM = arrayOf(4708, 4710, 4712, 4714)
private val DHAROK = arrayOf(4716, 4718, 4720, 4722)
private val GUTHAN = arrayOf(4724, 4726, 4728, 4730)
private val KARIL = arrayOf(4732, 4734, 4736, 4738)
private val TORAG = arrayOf(4745, 4747, 4749, 4751)
private val VERAC = arrayOf(4753, 4755, 4757, 4759)
private val BARROWS_DROP_IDS = arrayOf(AHRIM, DHAROK, GUTHAN, KARIL, TORAG, VERAC)
/** /**
* Rewards the player. * Rewards the player.
@@ -74,28 +48,61 @@ object RewardChest {
*/ */
@JvmStatic @JvmStatic
fun reward(player: Player) { fun reward(player: Player) {
for (killed in player.savedData.activityData.barrowBrothers) { var rewards: MutableList<Item> = ArrayList()
if (!killed){
player.sendMessage("You can't loot the chest until you kill all 6 barrows brothers.") // Roll barrows rewards
player.removeAttribute("barrow:looted") var barrowsRewardsIDs: MutableList<Int> = ArrayList()
// Because they haven't for (i in 0..5) {
// actually looted the if (player.savedData.activityData.barrowBrothers[i]) {
// chest yet. barrowsRewardsIDs.addAll(BARROWS_DROP_IDS[i])
return
} }
} }
val rewards: MutableList<Item> = ArrayList() val nKilledBrothers = barrowsRewardsIDs.size / 4
var maxRolls = 2 + RandomFunction.random(1,4) val maxRolls = 1 + maxOf(0, RandomFunction.random(nKilledBrothers - 3, nKilledBrothers))
var nBarrowsRewards = 0
val barrowsItemChance = 5 * barrowsRewardsIDs.size
for (i in 0 until maxRolls) { for (i in 0 until maxRolls) {
rewards.addAll(DROP_TABLE.roll()) if (RandomFunction.random(3223) <= barrowsItemChance) {
nBarrowsRewards++
} }
InterfaceContainer.generateItems(player, rewards.toTypedArray(), arrayOf("Examine"), 364, 4,3,4) }
if (nBarrowsRewards > barrowsRewardsIDs.size) {
nBarrowsRewards = barrowsRewardsIDs.size
}
// Award all non-barrows rewards (using the remaining rolls)
val remainingRolls = maxRolls - nBarrowsRewards
if (remainingRolls > 0) {
val nonBarrowsRewards = REGULAR_DROPS.roll(null, remainingRolls)
addItem@for (i in 0 until nonBarrowsRewards.size) {
if (i > 0) {
// If we have already awarded this item, just combine their amounts
for (j in 0 until rewards.size) {
if (nonBarrowsRewards[i].id == rewards[j].id) {
rewards[j].amount += nonBarrowsRewards[i].amount
continue@addItem
}
}
}
rewards.add(nonBarrowsRewards[i])
}
}
// Award a random selection of barrows rewards, if rolled
if (nBarrowsRewards > 0) {
barrowsRewardsIDs.shuffle()
for (i in 0 until nBarrowsRewards) {
rewards.add(Item(barrowsRewardsIDs[i], 1))
}
}
InterfaceContainer.generateItems(player, rewards.toTypedArray(), arrayOf("Examine"), 364, 4, 3, 4)
player.interfaceManager.open(Component(Components.TRAIL_REWARD_364)) player.interfaceManager.open(Component(Components.TRAIL_REWARD_364))
BossKillCounter.addtoBarrowsCount(player) BossKillCounter.addtoBarrowsCount(player)
for(item in rewards){ for (item in rewards) {
announceIfRare(player, item) announceIfRare(player, item)
if(!player.inventory.add(item)){ if (!player.inventory.add(item)) {
GroundItemManager.create(item,player) GroundItemManager.create(item, player)
} }
} }
} }