mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-21 09:02:07 -07:00
Items with destroy option can no longer be sold to stores
Items that cannot be traded can no longer be sold to stores
This commit is contained in:
parent
cdf576ffc5
commit
374d6ec478
3 changed files with 39 additions and 5 deletions
|
|
@ -332,6 +332,18 @@ class Shop(val title: String, val stock: Array<ShopItem>, val general: Boolean =
|
|||
return TransactionStatus.Failure("Tried to sell currency - ${playerInventory.id}")
|
||||
}
|
||||
val item = Item(playerInventory.id, amount)
|
||||
val def = itemDefinition(item.id)
|
||||
|
||||
if (def.hasDestroyAction()) {
|
||||
sendMessage(player, "You can't sell this item.")
|
||||
return TransactionStatus.Failure("Attempt to sell a destroyable - ${playerInventory.id}.")
|
||||
}
|
||||
|
||||
if (!def.isTradeable) {
|
||||
sendMessage(player, "You can't sell this item.")
|
||||
return TransactionStatus.Failure("Attempt to sell an untradeable - ${playerInventory.id}.")
|
||||
}
|
||||
|
||||
val (container,profit) = getSellPrice(player, slot)
|
||||
if(profit.amount == -1) sendMessage(player, "This item can't be sold to this shop.").also { return TransactionStatus.Failure("Can't sell this item to this shop - ${playerInventory.id}, general: $general, price: $profit") }
|
||||
if(amount > player.inventory.getAmount(item.id))
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import org.json.simple.JSONArray
|
|||
import org.json.simple.JSONObject
|
||||
import org.json.simple.parser.JSONParser
|
||||
import org.rs09.consts.Components
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.ServerConstants
|
||||
import rs09.game.interaction.InteractionListener
|
||||
|
|
@ -216,8 +217,15 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe
|
|||
val shop = getAttribute<Shop?>(player, "shop", null) ?: return@on false
|
||||
|
||||
val (_,price) = shop.getSellPrice(player, slot)
|
||||
val def = itemDefinition(player.inventory[slot].id)
|
||||
|
||||
val valueMsg = if(price.amount == -1) "This shop will not buy that item." else "${player.inventory[slot].name}: This shop will buy this item for ${price.amount} ${price.name.toLowerCase()}."
|
||||
val valueMsg = when {
|
||||
(price.amount == -1)
|
||||
|| !def.isTradeable
|
||||
|| def.id in intArrayOf(Items.COINS_995, Items.TOKKUL_6529, Items.ARCHERY_TICKET_1464)
|
||||
|| def.hasDestroyAction() -> "This shop will not buy that item."
|
||||
else -> "${player.inventory[slot].name}: This shop will buy this item for ${price.amount} ${price.name.lowercase()}."
|
||||
}
|
||||
|
||||
when(opcode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,19 +45,33 @@ class ShopTests {
|
|||
}
|
||||
|
||||
@Test fun shouldNotSellUnstockedItemToStandardStore() {
|
||||
testPlayer.inventory.add(Item(1, 1))
|
||||
testPlayer.inventory.add(Item(1511, 1))
|
||||
testPlayer.setAttribute("shop-cont", nonGeneral.getContainer(testPlayer))
|
||||
val status = nonGeneral.sell(testPlayer, 0, 1)
|
||||
Assertions.assertEquals(true, status is Shop.TransactionStatus.Failure)
|
||||
}
|
||||
|
||||
@Test fun shouldSellUnstockedItemToGeneralStore() {
|
||||
testPlayer.inventory.add(Item(1, 1))
|
||||
testPlayer.inventory.add(Item(1511, 1))
|
||||
testPlayer.setAttribute("shop-cont", general.getContainer(testPlayer))
|
||||
val status = general.sell(testPlayer, 0, 1)
|
||||
assertTransactionSuccess(status)
|
||||
}
|
||||
|
||||
@Test fun shouldNotSellDestroyable() {
|
||||
testPlayer.inventory.add(Item(1, 795))
|
||||
testPlayer.setAttribute("shop-cont", general.getContainer(testPlayer))
|
||||
val status = general.sell(testPlayer, 0, 1)
|
||||
Assertions.assertEquals(true, status is Shop.TransactionStatus.Failure)
|
||||
}
|
||||
|
||||
@Test fun shouldNotSellUntradeable() {
|
||||
testPlayer.inventory.add(Item(1, 1799))
|
||||
testPlayer.setAttribute("shop-cont", general.getContainer(testPlayer))
|
||||
val status = general.sell(testPlayer, 0, 1)
|
||||
Assertions.assertEquals(true, status is Shop.TransactionStatus.Failure)
|
||||
}
|
||||
|
||||
@Test fun shouldSellUnstockedItemToGeneralStoreUsingLowAlchBaseValue() {
|
||||
//starts at 40% value - a.k.a. low alch price
|
||||
//drops 3% value per item stocked
|
||||
|
|
@ -191,14 +205,14 @@ class ShopTests {
|
|||
}
|
||||
|
||||
@Test fun shouldSellUnstockedItemToGeneralStoreAsIronman() {
|
||||
testIronman.inventory.add(Item(1, 1))
|
||||
testIronman.inventory.add(Item(1511, 1))
|
||||
testIronman.setAttribute("shop-cont", general.getContainer(testIronman))
|
||||
val status = general.sell(testIronman, 0, 1)
|
||||
assertTransactionSuccess(status)
|
||||
}
|
||||
|
||||
@Test fun shouldSellStackOfUnstockedItemsToPlayerStock() {
|
||||
testPlayer.inventory.add(Item(1, 20))
|
||||
testPlayer.inventory.add(Item(1512, 20))
|
||||
testPlayer.setAttribute("shop-cont", general.getContainer(testPlayer))
|
||||
val status = general.sell(testPlayer, 0, 20)
|
||||
assertTransactionSuccess(status)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue