Refactored item note/unnote on bank booth handling

QoL - only applies to bank booth, not banker NPCs
Added server config world.bank_booth_note_enabled (enabled by default) to toggle the QoL globally
Added server config world.bank_booth_note_uim (enabled by default) to toggle the QoL on ultimate ironmen only
This commit is contained in:
vddcore
2022-06-27 14:06:47 +00:00
committed by Ryan
parent d38f7d4282
commit ee5bc78b62
6 changed files with 53 additions and 174 deletions
@@ -113,6 +113,12 @@ class ServerConstants {
@JvmField
var BANK_BOOTH_QUICK_OPEN: Boolean = false
@JvmField
var BANK_BOOTH_NOTE_ENABLED: Boolean = true
@JvmField
var BANK_BOOTH_NOTE_UIM: Boolean = true
@JvmField
var GE_AUTOSAVE_FREQUENCY = secondsToTicks(3600) //1 hour
@@ -1,54 +0,0 @@
package rs09.game.interaction
import core.game.interaction.DestinationFlag
import core.game.interaction.MovementPulse
import core.game.interaction.NodeUsageEvent
import core.game.interaction.UseWithHandler
import core.game.node.item.Item
import core.plugin.Plugin
class ItemOnBankBooth : UseWithHandler(0) {
override fun handle(event: NodeUsageEvent?): Boolean {
event ?: return false
val player = event.player
player.pulseManager.run(object : MovementPulse(player, event.usedWith, DestinationFlag.OBJECT) {
override fun pulse(): Boolean {
return handleNote(event)
}
}, "movement")
return true
}
fun handleNote(event: NodeUsageEvent?): Boolean {
event ?: return false
val item = event.usedItem
val player = event.player
if (item.noteChange != item.id) {
if (item.definition.isUnnoted) {
val amount = player.inventory.getAmount(item.id)
player.inventory.remove(Item(item.id, amount))
player.inventory.add(Item(item.noteChange, amount))
} else {
var amount = item.amount
if (amount > player.inventory.freeSlots()) {
amount = player.inventory.freeSlots()
}
player.inventory.remove(Item(item.id, amount))
player.inventory.add(Item(item.noteChange, amount))
}
return true
} else {
player.sendMessage("This item can't be noted.")
return true
}
}
override fun newInstance(arg: Any?): Plugin<Any> {
return this
}
override fun nodeAllowed(nodeId: Int): Boolean {
return true
}
}
@@ -1,11 +1,12 @@
package rs09.game.interaction.`object`
import api.openDialogue
import api.*
import core.game.content.dialogue.DialogueInterpreter
import core.game.node.Node
import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.IronmanMode
import core.game.node.item.Item
import core.game.world.map.Direction
import core.game.world.map.Location
import org.rs09.consts.NPCs
@@ -127,9 +128,51 @@ class BankBoothHandler : InteractionListener {
return true
}
private fun attemptToConvertItems(player: Player, used: Node, with: Node): Boolean {
if (!ServerConstants.BANK_BOOTH_NOTE_UIM && player.ironmanManager.checkRestriction(IronmanMode.ULTIMATE)) {
return true
}
if (BankerNPC.checkLunarIsleRestriction(player, with)) {
tryInvokeBankerDialogue(player, with)
return true
}
val item = used as Item
if (item.noteChange != item.id) {
if (item.definition.isUnnoted) {
val amount = amountInInventory(player, item.id)
if (removeItem(player, Item(item.id, amount))) {
addItem(player, item.noteChange, amount)
}
} else {
var amount = item.amount
val freeSlotCount = freeSlots(player)
if (amount > freeSlotCount) {
amount = freeSlotCount
}
if (removeItem(player, Item(item.id, amount))) {
addItem(player, item.noteChange, amount)
}
}
return true
}
sendMessage(player, "This item can't be noted.")
return true
}
override fun defineListeners() {
on(BANK_BOOTHS, SCENERY, "use-quickly", "bank", handler = ::quickBankBoothUse)
on(BANK_BOOTHS, SCENERY, "use", handler = ::regularBankBoothUse)
on(BANK_BOOTHS, SCENERY, "collect", handler = ::collectBankBoothUse)
if (ServerConstants.BANK_BOOTH_NOTE_ENABLED) {
onUseAnyWith(SCENERY, *BANK_BOOTHS, handler = ::attemptToConvertItems)
}
}
}
@@ -118,6 +118,8 @@ object ServerConfigParser {
ServerConstants.PRELOAD_MAP = data.getBoolean("server.preload_map", false)
ServerConstants.REVENANT_POPULATION = data.getLong("world.revenant_population", 30L).toInt()
ServerConstants.BANK_BOOTH_QUICK_OPEN = data.getBoolean("world.bank_booth_quick_open", false)
ServerConstants.BANK_BOOTH_NOTE_ENABLED = data.getBoolean("world.bank_booth_note_enabled", true)
ServerConstants.BANK_BOOTH_NOTE_UIM = data.getBoolean("world.bank_booth_note_uim", true)
ServerConstants.DISCORD_GE_WEBHOOK = data.getString("server.discord_webhook", "")
}