Item sets now appear and can be unpacked at the GE

Added a proper mock session that gets used for mock players in unit tests. Allows verifying that certain packets made it to the IoSession (the stage right before sending it to the client)
This commit is contained in:
Ceikry
2022-05-14 10:24:47 +00:00
committed by Ryan
parent 6f092d17d8
commit 90060fde21
2 changed files with 58 additions and 12 deletions
@@ -15,12 +15,6 @@ import rs09.game.interaction.InterfaceListener
class ExchangeItemSets : InterfaceListener { class ExchangeItemSets : InterfaceListener {
override fun defineInterfaceListeners() { override fun defineInterfaceListeners() {
onOpen(Components.EXCHANGE_ITEMSETS_645) { player, _ ->
val listener: InventoryListener
setAttribute(player, "ge-listener", InventoryListener(player).also { listener = it })
player.inventory.listeners.add(listener)
}
onClose(Components.EXCHANGE_ITEMSETS_645){player, _ -> onClose(Components.EXCHANGE_ITEMSETS_645){player, _ ->
val listener = getAttribute<InventoryListener?>(player, "ge-listener", null) val listener = getAttribute<InventoryListener?>(player, "ge-listener", null)
player.inventory.listeners.remove(listener) player.inventory.listeners.remove(listener)
@@ -37,6 +31,9 @@ class ExchangeItemSets : InterfaceListener {
{ {
openInterface(player, Components.EXCHANGE_ITEMSETS_645) openInterface(player, Components.EXCHANGE_ITEMSETS_645)
player.interfaceManager.openSingleTab(Component(Components.EXCHANGE_SETS_SIDE_644)) player.interfaceManager.openSingleTab(Component(Components.EXCHANGE_SETS_SIDE_644))
val listener: InventoryListener
setAttribute(player, "ge-listener", InventoryListener(player).also { listener = it })
player.inventory.listeners.add(listener)
} }
} }
@@ -62,9 +59,9 @@ class ExchangeItemSets : InterfaceListener {
player.inventory.toArray(), player.inventory.toArray(),
arrayOf("Examine", "Exchange", "Components"), arrayOf("Examine", "Exchange", "Components"),
Components.EXCHANGE_SETS_SIDE_644, Components.EXCHANGE_SETS_SIDE_644,
16, 0,
15, 7,
10 4
) )
) )
+52 -3
View File
@@ -1,22 +1,27 @@
import core.cache.Cache import core.cache.Cache
import core.cache.crypto.ISAACCipher
import core.cache.crypto.ISAACPair
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.player.info.PlayerDetails import core.game.node.entity.player.info.PlayerDetails
import core.game.node.entity.player.link.IronmanMode import core.game.node.entity.player.link.IronmanMode
import core.game.node.item.Item import core.game.node.item.Item
import core.net.IoSession
import core.net.packet.IoBuffer
import rs09.ServerConstants import rs09.ServerConstants
import rs09.game.ai.ArtificialSession
import rs09.game.content.global.shops.Shop import rs09.game.content.global.shops.Shop
import rs09.game.content.global.shops.ShopItem import rs09.game.content.global.shops.ShopItem
import rs09.game.system.SystemLogger
import rs09.game.system.config.ConfigParser import rs09.game.system.config.ConfigParser
import rs09.game.system.config.ServerConfigParser import rs09.game.system.config.ServerConfigParser
import rs09.game.system.config.XteaParser
import rs09.game.world.GameWorld import rs09.game.world.GameWorld
import rs09.game.world.repository.Repository import rs09.game.world.repository.Repository
import rs09.plugin.ClassScanner
import java.nio.ByteBuffer
object TestUtils { object TestUtils {
fun getMockPlayer(name: String, ironman: IronmanMode = IronmanMode.NONE): Player { fun getMockPlayer(name: String, ironman: IronmanMode = IronmanMode.NONE): Player {
val p = Player(PlayerDetails(name, name)) val p = Player(PlayerDetails(name, name))
p.details.session = ArtificialSession.getSingleton() p.details.session = MockSession()
p.ironmanManager.mode = ironman p.ironmanManager.mode = ironman
Repository.addPlayer(p) Repository.addPlayer(p)
return p return p
@@ -45,4 +50,48 @@ object TestUtils {
GameWorld.majorUpdateWorker.handleTickActions() GameWorld.majorUpdateWorker.handleTickActions()
} }
} }
}
class MockSession : IoSession(null, null) {
val receivedPackets = ArrayList<Packet>()
var disconnected = false
@Suppress("ArrayInDataClass")
data class Packet(val opcode: Int, val payload: ByteArray)
override fun getRemoteAddress(): String? {
return "127.0.0.1"
}
override fun write(context: Any, instant: Boolean) {
if(context is IoBuffer) {
receivedPackets.add(Packet(context.opcode(), context.array()))
}
}
fun hasPacketReady(opcode: Int) : Boolean {
for(pkt in receivedPackets) if(pkt.opcode == opcode) return true
return false
}
fun getPacketsWithOpcode(opcode: Int) : ArrayList<ByteArray> {
val list = ArrayList<ByteArray>()
for(pkt in receivedPackets) if(pkt.opcode == opcode) list.add(pkt.payload)
return list
}
override fun getIsaacPair(): ISAACPair {
return ISAACPair(ISAACCipher(intArrayOf(0)), ISAACCipher(intArrayOf(0)))
}
override fun queue(buffer: ByteBuffer?) {}
override fun write() {}
override fun disconnect() {disconnected = true}
fun clear() {
receivedPackets.clear()
}
} }