diff --git a/data/packets.yml b/data/packets.yml index 2ee3ad73c2..e25f7167e8 100644 --- a/data/packets.yml +++ b/data/packets.yml @@ -1444,11 +1444,13 @@ in-packets: length: 8 ignore: true - - message: gg.rsmod.game.message.impl.IgnoreMessage # Unknown + - message: gg.rsmod.game.message.impl.OpModel1Message # TODO: FIND MORE ABOUT THIS type: FIXED opcode: 69 length: 4 - ignore: true + structure: + - name: componentId + type: INT - message: gg.rsmod.game.message.impl.IgnoreMessage # TODO: OPOBJ2 type: FIXED diff --git a/game/plugins/src/main/kotlin/gg/rsmod/plugins/content/skills/viewing_orb_inter.plugin.kts b/game/plugins/src/main/kotlin/gg/rsmod/plugins/content/skills/viewing_orb_inter.plugin.kts new file mode 100644 index 0000000000..67126cf855 --- /dev/null +++ b/game/plugins/src/main/kotlin/gg/rsmod/plugins/content/skills/viewing_orb_inter.plugin.kts @@ -0,0 +1,10 @@ +package gg.rsmod.plugins.content.skills + +val buttons = intArrayOf(5, 11, 12, 13, 14, 15) + +buttons.forEach { + println("instantiating button plugin for interface 374 button $it") + on_button(374, it) { + player.message("interface 374 button $it clicked") + } +} diff --git a/game/src/main/kotlin/gg/rsmod/game/message/MessageDecoderSet.kt b/game/src/main/kotlin/gg/rsmod/game/message/MessageDecoderSet.kt index bea1bcb95c..b7957a0a69 100644 --- a/game/src/main/kotlin/gg/rsmod/game/message/MessageDecoderSet.kt +++ b/game/src/main/kotlin/gg/rsmod/game/message/MessageDecoderSet.kt @@ -96,6 +96,9 @@ class MessageDecoderSet { put(OpPlayer6Message::class.java, OpPlayer6Decoder(), OpPlayer6Handler(), structures) put(OpPlayer7Message::class.java, OpPlayer7Decoder(), OpPlayer7Handler(), structures) put(OpPlayer8Message::class.java, OpPlayer8Decoder(), OpPlayer8Handler(), structures) + + put(OpModel1Message::class.java, OpModel1Decoder(), OpModel1Handler(), structures) + } private fun put(messageType: Class, decoderType: MessageDecoder, handlerType: MessageHandler, structures: MessageStructureSet) { diff --git a/game/src/main/kotlin/gg/rsmod/game/message/decoder/OpModel1Decoder.kt b/game/src/main/kotlin/gg/rsmod/game/message/decoder/OpModel1Decoder.kt new file mode 100644 index 0000000000..aa063aede1 --- /dev/null +++ b/game/src/main/kotlin/gg/rsmod/game/message/decoder/OpModel1Decoder.kt @@ -0,0 +1,20 @@ +package gg.rsmod.game.message.decoder + +import gg.rsmod.game.message.MessageDecoder +import gg.rsmod.game.message.impl.OpModel1Message + +/** + * Decodes [OpModel1Message] + * TODO: Find out more about OpModel1Decoder (op 69, nice) + * + * @author Curtis Woodard + */ +class OpModel1Decoder: MessageDecoder() { + override fun decode( + opcode: Int, + opcodeIndex: Int, + values: HashMap, + stringValues: HashMap + ): OpModel1Message = + OpModel1Message(componentId = values["componentId"]!!.toInt()) +} \ No newline at end of file diff --git a/game/src/main/kotlin/gg/rsmod/game/message/handler/OpModel1Handler.kt b/game/src/main/kotlin/gg/rsmod/game/message/handler/OpModel1Handler.kt new file mode 100644 index 0000000000..a553812aad --- /dev/null +++ b/game/src/main/kotlin/gg/rsmod/game/message/handler/OpModel1Handler.kt @@ -0,0 +1,19 @@ +package gg.rsmod.game.message.handler + +import gg.rsmod.game.message.MessageHandler +import gg.rsmod.game.message.impl.IfButtonMessage +import gg.rsmod.game.message.impl.OpModel1Message +import gg.rsmod.game.model.World +import gg.rsmod.game.model.entity.Client + +/** + * For now, this will be treated as an IfButton1 with no option slot or item until I can find out more about this opcode. + * + * @author Curtis Woodard + */ +class OpModel1Handler: MessageHandler { + override fun handle(client: Client, world: World, message: OpModel1Message) { + val ifButtonMessage = IfButtonMessage(message.componentId, -1, -1, -1) + IfButton1Handler().handle(client, world, ifButtonMessage) + } +} \ No newline at end of file diff --git a/game/src/main/kotlin/gg/rsmod/game/message/impl/OpModel1Message.kt b/game/src/main/kotlin/gg/rsmod/game/message/impl/OpModel1Message.kt new file mode 100644 index 0000000000..d32d4188f8 --- /dev/null +++ b/game/src/main/kotlin/gg/rsmod/game/message/impl/OpModel1Message.kt @@ -0,0 +1,13 @@ +package gg.rsmod.game.message.impl + +import gg.rsmod.game.message.Message + + +/** + * This happens when you click a model component + * + * @property [componentId] The component id of this model inside the current interface + * + * @author Curtis Woodard + */ +data class OpModel1Message(val componentId: Int): Message \ No newline at end of file