Merge branch 'bf-fixes' into 'master'

Prevent furnace temperature from going negative and deduplicate bar handling.

See merge request 2009scape/2009scape!379
This commit is contained in:
Ceikry 2022-01-03 19:24:31 +00:00
commit eca439b99e
3 changed files with 83 additions and 267 deletions

View file

@ -97,3 +97,4 @@
- Can now pickpocket women in ardy (npc ID 25) - Can now pickpocket women in ardy (npc ID 25)
- Can now travel on free charter boats without having money in inventory - Can now travel on free charter boats without having money in inventory
- Emerald and diamond bracelet enchants no longer produce noted items - Emerald and diamond bracelet enchants no longer produce noted items
- Prevent furnace temperature from going negative and deduplicate bar handling.

View file

@ -5,6 +5,7 @@ import core.game.container.impl.EquipmentContainer
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.skill.Skills import core.game.node.entity.skill.Skills
import core.game.node.item.Item import core.game.node.item.Item
import core.game.node.entity.skill.smithing.smelting.Bar
import core.game.system.task.Pulse import core.game.system.task.Pulse
import core.game.world.map.Location import core.game.world.map.Location
import core.tools.RandomFunction import core.tools.RandomFunction
@ -125,8 +126,8 @@ object BlastFurnace {
furnaceTemp += 2 furnaceTemp += 2
} else if (stoveTemp > 0 && pumping && furnaceTemp < 100 && (!pumpPipeBroken || !pumpPipeBroken)) { } else if (stoveTemp > 0 && pumping && furnaceTemp < 100 && (!pumpPipeBroken || !pumpPipeBroken)) {
furnaceTemp += 1 furnaceTemp += 1
} else if (furnaceTemp > 0 && getWorldTicks() % 2 == 0) { } else if (furnaceTemp > 0) {
furnaceTemp -= 2 furnaceTemp -= 1
} }
} }
@ -148,96 +149,50 @@ object BlastFurnace {
}else if (makeBars && playerOre.isNotEmpty() && barsAmountFree > 0 && totalAmount < 56 && player.getAttribute("OreInPot",false) == true) { }else if (makeBars && playerOre.isNotEmpty() && barsAmountFree > 0 && totalAmount < 56 && player.getAttribute("OreInPot",false) == true) {
playerOre.forEach { oreID -> playerOre.forEach { oreID ->
playerCoal = player.blastCoal.getAmount(Items.COAL_453) playerCoal = player.blastCoal.getAmount(Items.COAL_453)
if (oreID.id == Items.RUNITE_ORE_451 && player.blastOre.getAmount(451) * 4 <= playerCoal) { var bars = arrayOf(Bar.forOre(oreID.id)!!)
player.varpManager.get(543).setVarbit(8, 1).send(player) if(oreID.id == Items.IRON_ORE_440) {
barsHot = true bars = arrayOf(Bar.STEEL, Bar.IRON)
player.blastBars.add(Item(Items.RUNITE_BAR_2363, 1))
player.blastOre.remove(Item(Items.RUNITE_ORE_451, 1))
rewardXP(player, Skills.SMITHING,50.0)
player.blastCoal.remove(Item(453, 4))
totalAmount = barsAmount + oreAmount
giveSmithXp++
} }
else if (oreID.id == Items.ADAMANTITE_ORE_449 && player.blastOre.getAmount(449) * 3 <= playerCoal) { inner@ for(bar in bars) {
player.varpManager.get(543).setVarbit(8, 1).send(player) var hasRequirements = true
barsHot = true for(required in bar.ores) {
player.blastBars.add(Item(Items.ADAMANTITE_BAR_2361, 1)) if(required.id == Items.COAL_453) {
player.blastOre.remove(Item(Items.ADAMANTITE_ORE_449, 1)) if(!player.blastCoal.contains(Items.COAL_453, required.amount / 2)) {
rewardXP(player, Skills.SMITHING,37.5) hasRequirements = false
player.blastCoal.remove(Item(453, 3)) }
totalAmount = barsAmount + oreAmount } else if(!player.blastOre.containsItem(required)) {
giveSmithXp++ hasRequirements = false
} }
else if (oreID.id == Items.MITHRIL_ORE_447 && player.blastOre.getAmount(447) * 2 <= playerCoal) { }
player.varpManager.get(543).setVarbit(8, 1).send(player) if(hasRequirements) {
barsHot = true var removed = true
player.blastBars.add(Item(Items.MITHRIL_BAR_2359, 1)) for(required in bar.ores) {
player.blastOre.remove(Item(Items.MITHRIL_ORE_447, 1)) if(required.id == Items.COAL_453) {
rewardXP(player, Skills.SMITHING,30.0) if(!player.blastCoal.remove(Item(Items.COAL_453, required.amount / 2))) {
player.blastCoal.remove(Item(453, 2)) removed = false
totalAmount = barsAmount + oreAmount }
giveSmithXp++ } else {
} if(!player.blastOre.remove(required)) {
else if (oreID.id == Items.IRON_ORE_440 && player.blastOre.getAmount(447) <= playerCoal) { removed = false
player.varpManager.get(543).setVarbit(8, 1).send(player) }
barsHot = true }
player.blastBars.add(Item(Items.STEEL_BAR_2353, 1)) }
player.blastOre.remove(Item(Items.MITHRIL_ORE_447, 1)) if(removed) {
rewardXP(player, Skills.SMITHING,17.5) player.varpManager.get(543).setVarbit(8, 1).send(player)
player.blastCoal.remove(Item(453, 1)) barsHot = true
totalAmount = barsAmount + oreAmount player.blastBars.add(bar.product)
giveSmithXp++ var experience = bar.experience
} if(bar.product.id == Items.GOLD_BAR_2357 &&
else if (oreID.id == Items.IRON_ORE_440) { player.equipment[EquipmentContainer.SLOT_HANDS] != null &&
player.varpManager.get(543).setVarbit(8, 1).send(player) player.equipment[EquipmentContainer.SLOT_HANDS].id == GOLDSMITH_GAUNTLETS_776) {
barsHot = true experience *= 2.5;
player.blastBars.add(Item(Items.IRON_BAR_2351, 1)) }
player.blastOre.remove(Item(Items.IRON_ORE_440, 1)) rewardXP(player, Skills.SMITHING, experience)
rewardXP(player, Skills.SMITHING,12.5) totalAmount = barsAmount + oreAmount
totalAmount = barsAmount + oreAmount giveSmithXp++
giveSmithXp++ break@inner
} }
else if (oreID.id == Items.SILVER_ORE_442) {
player.varpManager.get(543).setVarbit(8, 1).send(player)
barsHot = true
player.blastBars.add(Item(Items.SILVER_BAR_2355, 1))
rewardXP(player, Skills.SMITHING,13.6)
player.blastOre.remove(Item(Items.SILVER_ORE_442, 1))
totalAmount = barsAmount + oreAmount
giveSmithXp++
}
else if (oreID.id == Items.GOLD_ORE_444) {
player.varpManager.get(543).setVarbit(8, 1).send(player)
barsHot = true
player.blastBars.add(Item(Items.GOLD_BAR_2357, 1))
if((player.equipment[EquipmentContainer.SLOT_HANDS] != null && player.equipment[EquipmentContainer.SLOT_HANDS].id == GOLDSMITH_GAUNTLETS_776)){
rewardXP(player, Skills.SMITHING,56.2)
}else{
rewardXP(player, Skills.SMITHING,22.5)
} }
player.blastOre.remove(Item(Items.GOLD_ORE_444, 1))
totalAmount = barsAmount + oreAmount
giveSmithXp++
}
else if (oreID.id == Items.COPPER_ORE_436 && player.blastOre.containsAtLeastOneItem(438)) {
player.varpManager.get(543).setVarbit(8, 1).send(player)
barsHot = true
player.blastOre.remove(Item(Items.TIN_ORE_438, 1))
player.blastOre.remove(Item(Items.COPPER_ORE_436, 1))
player.blastBars.add(Item(Items.BRONZE_BAR_2349, 1))
rewardXP(player, Skills.SMITHING,6.2)
totalAmount = barsAmount + oreAmount
giveSmithXp++
}
else if(oreID.id == Items.TIN_ORE_438 && player.blastOre.containsAtLeastOneItem(436)){
player.varpManager.get(543).setVarbit(8, 1).send(player)
barsHot = true
player.blastOre.remove(Item(Items.COPPER_ORE_436, 1))
player.blastOre.remove(Item(Items.TIN_ORE_438, 1))
player.blastBars.add(Item(Items.BRONZE_BAR_2349, 1))
rewardXP(player, Skills.SMITHING,6.2)
totalAmount = barsAmount + oreAmount
giveSmithXp++
} }
} }
} }
@ -402,4 +357,4 @@ object BlastFurnace {
} }
} }
} }
} }

View file

@ -4,6 +4,7 @@ import api.Container
import api.* import api.*
import core.game.node.entity.skill.Skills import core.game.node.entity.skill.Skills
import core.game.node.item.Item import core.game.node.item.Item
import core.game.node.entity.skill.smithing.smelting.Bar
import core.game.system.task.Pulse import core.game.system.task.Pulse
import rs09.game.interaction.InteractionListener import rs09.game.interaction.InteractionListener
import core.game.world.map.Location import core.game.world.map.Location
@ -195,100 +196,27 @@ class BlastFurnaceListeners : InteractionListener() {
oreToActuallyAdd-- oreToActuallyAdd--
} }
} }
when(oreID){ val bar = Bar.forOre(oreID)
Items.COAL_453 -> { if(oreID == Items.COAL_453) {
if (coalToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 30) { if (coalToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 30) {
player.blastCoal.add(Item(Items.COAL_453,coalToActuallyAdd)) player.blastCoal.add(Item(Items.COAL_453,coalToActuallyAdd))
removeItem(player, Item(oreID, coalToActuallyAdd), Container.INVENTORY) removeItem(player, Item(oreID, coalToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],coalToActuallyAdd).init() BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],coalToActuallyAdd).init()
}
else if(getStatLevel(player, Skills.SMITHING) < 30){
sendDialogue(player, "My Smithing level is not high enough to use Coal!")
}
else sendDialogue(player, "It looks like the melting pot is already full of coal!")
} }
Items.RUNITE_ORE_451 -> { else if(getStatLevel(player, Skills.SMITHING) < 30){
if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 85) { sendDialogue(player, "My Smithing level is not high enough to use Coal!")
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else if(getStatLevel(player, Skills.SMITHING) < 85){
sendDialogue(player, "My Smithing level is not high enough to smelt Runite!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
} }
Items.ADAMANTITE_ORE_449 -> { else sendDialogue(player, "It looks like the melting pot is already full of coal!")
if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 70) { } else if (bar != null) {
player.blastOre.add(Item(oreID,oreToActuallyAdd)) if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= bar.level) {
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY) player.blastOre.add(Item(oreID,oreToActuallyAdd))
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init() removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
} BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
else if(getStatLevel(player, Skills.SMITHING) < 70){
sendDialogue(player, "My Smithing level is not high enough to smelt Adamantite!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
} }
Items.MITHRIL_ORE_447 -> { else if(getStatLevel(player, Skills.SMITHING) < bar.level){
if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 50) { sendDialogue(player, "My Smithing level is not high enough to smelt ${bar.name.toLowerCase()}!")
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else if(getStatLevel(player, Skills.SMITHING) < 50){
sendDialogue(player, "My Smithing level is not high enough to smelt Mithril!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.IRON_ORE_440 -> {
if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 15) {
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else if(getStatLevel(player, Skills.SMITHING) < 15){
sendDialogue(player, "My Smithing level is not high enough to smelt Iron!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.SILVER_ORE_442 -> {
if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 20) {
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else if(getStatLevel(player, Skills.SMITHING) < 20){
sendDialogue(player, "My Smithing level is not high enough to smelt Silver!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.GOLD_ORE_444 -> {
if (oreToActuallyAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 40) {
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else if(getStatLevel(player, Skills.SMITHING) < 40){
sendDialogue(player, "My Smithing level is not high enough to smelt Gold!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.COPPER_ORE_436 -> {
if (oreToActuallyAdd > 0) {
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.TIN_ORE_438 -> {
if (oreToActuallyAdd > 0) {
player.blastOre.add(Item(oreID,oreToActuallyAdd))
removeItem(player, Item(oreID, oreToActuallyAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreID)],oreToActuallyAdd).init()
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
} }
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
} }
} }
}else if (button == 2 && rocksInInven.isEmpty()){ }else if (button == 2 && rocksInInven.isEmpty()){
@ -329,93 +257,25 @@ class BlastFurnaceListeners : InteractionListener() {
amountToAdd-- amountToAdd--
} }
} }
when(oreType.id){ val bar = Bar.forOre(oreType.id)
Items.TIN_ORE_438 ->{ if(oreType.id == Items.COAL_453) {
if (amountToAdd > 0) { if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 30) {
player.blastOre.add(Item(oreType.id,amountToAdd)) player.blastCoal.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY) removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init() BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
} }else if(getStatLevel(player,Skills.SMITHING) < 30){
else sendDialogue(player, "It looks like the melting pot is already full of ore!") sendDialogue(player,"My Smithing level is not high enough to use Coal!")
} }
Items.COPPER_ORE_436 ->{ else sendDialogue(player, "It looks like the melting pot is already full of ore!")
if (amountToAdd > 0) { } else if(bar != null) {
player.blastOre.add(Item(oreType.id,amountToAdd)) if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= bar.level) {
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY) player.blastOre.add(Item(oreType.id,amountToAdd))
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init() removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
} BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
else sendDialogue(player, "It looks like the melting pot is already full of ore!") }else if(getStatLevel(player,Skills.SMITHING) < bar.level){
} sendDialogue(player,"My Smithing level is not high enough to smelt Iron!")
Items.IRON_ORE_440 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 15) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 15){
sendDialogue(player,"My Smithing level is not high enough to smelt Iron!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.MITHRIL_ORE_447 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 50) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 50){
sendDialogue(player,"My Smithing level is not high enough to smelt Mithril!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.GOLD_ORE_444 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 40) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 40){
sendDialogue(player,"My Smithing level is not high enough to smelt Gold!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.SILVER_ORE_442 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 20) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 20){
sendDialogue(player,"My Smithing level is not high enough to smelt Silver!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.ADAMANTITE_ORE_449 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 70) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 70){
sendDialogue(player,"My Smithing level is not high enough to smelt Adamantite!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.RUNITE_ORE_451 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 85) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 85){
sendDialogue(player,"My Smithing level is not high enough to smelt Runite!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
}
Items.COAL_453 ->{
if (amountToAdd > 0 && getStatLevel(player, Skills.SMITHING) >= 30) {
player.blastOre.add(Item(oreType.id,amountToAdd))
removeItem(player, Item(oreType.id, amountToAdd), Container.INVENTORY)
BlastFurnaceOre(player, BFOreVariant.values()[playerOre.indexOf(oreType.id)],amountToAdd).init()
}else if(getStatLevel(player,Skills.SMITHING) < 30){
sendDialogue(player,"My Smithing level is not high enough to use Coal!")
}
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
} }
else sendDialogue(player, "It looks like the melting pot is already full of ore!")
} }
return@onUseWith true return@onUseWith true
} }
@ -501,4 +361,4 @@ class BlastFurnaceListeners : InteractionListener() {
return@on true return@on true
} }
} }
} }