From 629df5adaf780f04f6a9c5373dea50345070abe6 Mon Sep 17 00:00:00 2001 From: ceikry Date: Sun, 8 Aug 2021 23:15:18 -0500 Subject: [PATCH] Added + handled varbit packet --- .../core/net/packet/PacketRepository.java | 1 + .../net/packet/context/VarbitContext.java | 22 +++++++++++++++++++ .../core/net/packet/in/InteractionPacket.java | 1 + .../main/java/core/net/packet/out/Varbit.java | 15 +++++++++++++ .../src/main/kotlin/rs09/game/VarpManager.kt | 6 +++++ .../system/command/oldsys/VisualCommand.kt | 21 +++++++++++++++--- 6 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 Server/src/main/java/core/net/packet/context/VarbitContext.java create mode 100644 Server/src/main/java/core/net/packet/out/Varbit.java diff --git a/Server/src/main/java/core/net/packet/PacketRepository.java b/Server/src/main/java/core/net/packet/PacketRepository.java index 8d4433642..6cb4e3e60 100644 --- a/Server/src/main/java/core/net/packet/PacketRepository.java +++ b/Server/src/main/java/core/net/packet/PacketRepository.java @@ -77,6 +77,7 @@ public final class PacketRepository { OUTGOING_PACKETS.put(UpdateRandomFile.class, new UpdateRandomFile()); // OUTGOING_PACKETS.put(InstancedLocationUpdate.class, new InstancedLocationUpdate()); // OUTGOING_PACKETS.put(CSConfigPacket.class, new CSConfigPacket()); // + OUTGOING_PACKETS.put(Varbit.class, new Varbit()); INCOMING_PACKETS.put(22, new ClientFocusPacket()); INCOMING_PACKETS.put(93, new PingPacketHandler()); INCOMING_PACKETS.put(44, new CommandPacket()); diff --git a/Server/src/main/java/core/net/packet/context/VarbitContext.java b/Server/src/main/java/core/net/packet/context/VarbitContext.java new file mode 100644 index 000000000..5a551eed2 --- /dev/null +++ b/Server/src/main/java/core/net/packet/context/VarbitContext.java @@ -0,0 +1,22 @@ +package core.net.packet.context; + +import core.game.node.entity.player.Player; +import core.net.packet.Context; + +public class VarbitContext implements Context { + + Player player; + public int varbitId; + public int value; + + public VarbitContext(Player player, int varbitId, int value){ + this.player = player; + this.varbitId = varbitId; + this.value = value; + } + + @Override + public Player getPlayer() { + return player; + } +} diff --git a/Server/src/main/java/core/net/packet/in/InteractionPacket.java b/Server/src/main/java/core/net/packet/in/InteractionPacket.java index f61e5f1ec..9b93745f9 100644 --- a/Server/src/main/java/core/net/packet/in/InteractionPacket.java +++ b/Server/src/main/java/core/net/packet/in/InteractionPacket.java @@ -266,6 +266,7 @@ public final class InteractionPacket implements IncomingPacket { player.debug("dir=" + object.getDirection()); VarbitDefinition def = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID()); player.debug("Varp ID=" + def.getConfigId() + " Offset=" + def.getBitShift() + " Size=" + def.getBitSize()); + player.debug("Varbit: " + def.getId()); if (option.getHandler() != null) { player.debug("Object handler: " + option.getHandler().getClass().getSimpleName()); } diff --git a/Server/src/main/java/core/net/packet/out/Varbit.java b/Server/src/main/java/core/net/packet/out/Varbit.java new file mode 100644 index 000000000..c99509d7e --- /dev/null +++ b/Server/src/main/java/core/net/packet/out/Varbit.java @@ -0,0 +1,15 @@ +package core.net.packet.out; + +import core.net.packet.IoBuffer; +import core.net.packet.OutgoingPacket; +import core.net.packet.context.VarbitContext; + +public class Varbit implements OutgoingPacket { + @Override + public void send(VarbitContext varbitContext) { + IoBuffer buffer = new IoBuffer(37); + buffer.put((byte) varbitContext.value); + buffer.putLEShort(varbitContext.varbitId); + varbitContext.getPlayer().getSession().write(buffer); + } +} diff --git a/Server/src/main/kotlin/rs09/game/VarpManager.kt b/Server/src/main/kotlin/rs09/game/VarpManager.kt index 982254b7d..51f295d6e 100644 --- a/Server/src/main/kotlin/rs09/game/VarpManager.kt +++ b/Server/src/main/kotlin/rs09/game/VarpManager.kt @@ -2,6 +2,8 @@ package rs09.game import core.cache.def.impl.VarbitDefinition import core.game.node.entity.player.Player +import core.net.packet.PacketRepository +import core.net.packet.context.VarbitContext import org.json.simple.JSONArray import org.json.simple.JSONObject import rs09.game.node.entity.skill.farming.FarmingPatch @@ -32,6 +34,10 @@ class VarpManager(val player: Player) { get(def.configId).setVarbit(def.bitShift,value).send(player) } + fun setVarbit(varbitIndex: Int, value: Int){ + PacketRepository.send(core.net.packet.out.Varbit::class.java, VarbitContext(player, varbitIndex, value)) + } + fun flagSave(index: Int){ get(index).save = true } diff --git a/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt b/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt index be2a5a0bb..5fd398914 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/oldsys/VisualCommand.kt @@ -18,6 +18,9 @@ import core.game.world.map.Location import core.game.world.map.RegionManager import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics +import core.net.packet.PacketRepository +import core.net.packet.context.VarbitContext +import core.net.packet.out.Varbit import core.plugin.Initializable import core.plugin.Plugin import rs09.game.system.command.CommandPlugin @@ -221,14 +224,14 @@ class VisualCommand : CommandPlugin() { val cfg_index = (args.getOrNull(2)?.toString()?.toInt() ?: -1) if(cfg_index == -1){ ContentAPI.submitWorldPulse(object : Pulse(3, player){ - var pos = 0 + var pos = 32 var shift = 0 override fun pulse(): Boolean { for(i in 0..1999){ player?.configManager?.forceSet(i, pos shl shift, false) } - player?.sendMessage("$pos << $shift") - if(pos++ >= 32){ + player?.sendMessage("$pos shl $shift") + if(pos++ >= 63){ shift += 4 pos = 0 } @@ -246,6 +249,18 @@ class VisualCommand : CommandPlugin() { }) } } + "setbit" -> { + if (args!!.size < 2) { + player!!.debug("syntax error: bit value") + return true + } + var bit = toInteger(args[0]!!) + var value = toInteger(args[1]!!) + var val2 = toInteger(args[2]!!) + player!!.debug("$value $val2") + PacketRepository.send(Varbit::class.java, VarbitContext(player, value, val2)) + return true + } "loop_anim_on_i" -> { var anim = toInteger(args!![1]!!) ContentAPI.submitWorldPulse(object : Pulse(3){