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:
@@ -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", "")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user