Cleaned up code and added messages for taking items.

This commit is contained in:
Tooze 2026-01-27 10:02:26 -05:00
parent 17a31969ac
commit e740af0750

View file

@ -25,8 +25,8 @@ class ItemMachine: InteractionListener {
private val TAKE_WORMS = Items.WORMS_10515
private val TAKE_CRACKERS = Items.CRACKERS_10513
private val TAKE_TOFU = Items.TOFU_10514
val baseItems_DEF = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU)
val STOCK_UP_DEF = IntArray(11 * baseItems_DEF.size) { i -> baseItems_DEF[i % baseItems_DEF.size] }
private val baseItems_DEF = intArrayOf(TAKE_WORMS, TAKE_CRACKERS, TAKE_TOFU)
private val STOCK_UP_DEF = IntArray(10 * baseItems_DEF.size) { i -> baseItems_DEF[i % baseItems_DEF.size] }
//Healer//
private val ALL_HEALER_VAILS = intArrayOf(Items.HEALING_VIAL_10546,Items.HEALING_VIAL1_10545,Items.HEALING_VIAL2_10544,Items.HEALING_VIAL3_10543,Items.HEALING_VIAL4_10542)
private val TAKE_VAIL = Items.HEALING_VIAL4_10542
@ -35,115 +35,107 @@ class ItemMachine: InteractionListener {
private val TAKE_POIS_MEAT = Items.POISONED_MEAT_10541
private val baseItems_HEAL = intArrayOf(TAKE_POIS_WORMS, TAKE_POIS_TOFU, TAKE_POIS_MEAT)
private val STOCK_UP_HEAL = IntArray(11 * baseItems_HEAL.size) { i -> baseItems_HEAL[i % baseItems_HEAL.size] }
private val STOCK_UP_HEAL = IntArray(10 * baseItems_HEAL.size) { i -> baseItems_HEAL[i % baseItems_HEAL.size] }
override fun defineListeners() {
//Attacker//
on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-runes") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) {
handleAddItemMachine(player, node, TAKE_RUNES, 300)
sendMessage(player,"You take a selection of runes from the dispenser.")
}
handleAddItemMachine(player, node,10556, TAKE_RUNES, 300,DispenserType.RUNES)
return@on true
}
on(Scenery.ATTACKER_ITEM_MACHINE_20241, IntType.SCENERY, "Take-arrows") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10556) {
handleAddItemMachine(player, node, TAKE_ARROWS, 300)
sendMessage(player,"You take a selection of arrows from the dispenser.")
}
handleAddItemMachine(player, node,10556, TAKE_ARROWS, 300,DispenserType.ARROWS)
return@on true
}
//Defender//
on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Stock-up") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) {
handleAddItemMachine(player, node, STOCK_UP_DEF, 1)
}
handleAddItemMachine(player, node,10558, STOCK_UP_DEF, 1,DispenserType.FOOD)
return@on true
}
on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-crackers") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) {
handleAddItemMachine(player, node, intArrayOf(TAKE_CRACKERS), 5)
}
handleAddItemMachine(player, node,10558, intArrayOf(TAKE_CRACKERS), 5,DispenserType.FOOD)
return@on true
}
on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-tofu") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) {
handleAddItemMachine(player, node, intArrayOf(TAKE_TOFU), 5)
}
handleAddItemMachine(player, node,10558, intArrayOf(TAKE_TOFU), 5,DispenserType.FOOD)
return@on true
}
on(Scenery.DEFENDER_ITEM_MACHINE_20242, IntType.SCENERY, "Take-worms") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10558) {
handleAddItemMachine(player, node, intArrayOf(TAKE_WORMS), 5)
}
handleAddItemMachine(player, node,10558, intArrayOf(TAKE_WORMS), 5,DispenserType.FOOD)
return@on true
}
//Healer//
on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Stock-up") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) {
//todo only allowed to have one vial
handleAddItemMachine(player, node, STOCK_UP_HEAL, 1)
if (hasAnyVial(player)) {
sendMessage(player, "You can only carry one healing vial at a time.")
return@on true
}
handleAddItemMachine(player, node,10559, STOCK_UP_HEAL, 1,DispenserType.POISONED)
return@on true
}
on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-vail") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) {
//todo only allowed to have one vial
handleAddItemMachine(player, node, intArrayOf(TAKE_VAIL), 1)
if (hasAnyVial(player)) {
sendMessage(player, "You can only carry one healing vial at a time.")
return@on true
}
handleAddItemMachine(player, node,10559, intArrayOf(TAKE_VAIL), 1,DispenserType.VAIL)
return@on true
}
on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-worms") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) {
handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_WORMS), 5)
}
handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_WORMS), 5,DispenserType.POISONED)
return@on true
}
on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-tofu") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) {
handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_TOFU), 5)
}
handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_TOFU), 5,DispenserType.POISONED)
return@on true
}
on(Scenery.HEALER_ITEM_MACHINE_20243, IntType.SCENERY, "Take-meat") { player, node ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10559) {
handleAddItemMachine(player, node, intArrayOf(TAKE_POIS_MEAT), 5)
}
handleAddItemMachine(player, node,10559, intArrayOf(TAKE_POIS_MEAT), 5,DispenserType.POISONED)
return@on true
}
//Collector//
on(Scenery.COLLECTOR_CONVERTER_21250, IntType.SCENERY, "Convert") { player, _ ->
if (getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == 10557) {
if (!hasCape(player, 10557)) return@on true
//Items.RED_EGG_10532
//Items.BLUE_EGG_10533
//Items.GREEN_EGG_10531
//uhhhhhh
//more research is needed.
}
return@on true
}
}
private fun handleAddItemMachine(player: Player,node: Node, items: IntArray, amount: Int)
private fun handleAddItemMachine(player: Player,node: Node,capeId: Int, items: IntArray, amount: Int,message: DispenserType = DispenserType.GENERIC)
{
player.animate(Animation(5419)) // find right animation
if (!hasCape(player, capeId)) return
player.animate(Animation(5419))
player.lock(5)
GameWorld.Pulser.submit(object : Pulse(3, player) {
override fun pulse(): Boolean {
//sendMessage(player,"You fill up your inventory with food from the dispenser") //defender
//sendMessage(player,"You fill up your inventory with poisoned food from the dispenser")// healer
//todo send right message depending on role
addArrayOfItems(player,items,amount)
sendMessage(player, message.message)
player.unlock()
return true
}
})
}
private fun addArrayOfItems(player: Player, ids: IntArray, amount: Int) {
ids.forEach { id -> addItem(player,id,amount) }
}
private fun hasAnyVial(player: Player): Boolean {
return ALL_HEALER_VAILS.any { player.inventory.contains(it,1) }
}
private fun hasCape(player: Player, capeId: Int): Boolean {
return getItemFromEquipment(player, EquipmentSlot.CAPE)?.id == capeId
}
private enum class DispenserType(val message: String) {
ARROWS("You take a selection of arrows from the dispenser."),
RUNES("You take a selection of runes from the dispenser."),
FOOD("You fill up your inventory with food from the dispenser."),
POISONED("You fill up your inventory with poisoned food from the dispenser."),
VAIL("You take a vial from the dispenser."),
GENERIC("You take items from the dispenser.")
}
}