public PacketViewTab(string file) { InitializeComponent(); Text = Path.GetFileName(file); packetViewer = PacketReaderFactory.Create(Path.GetExtension(file)); packets = packetViewer.ReadPackets(file).ToList(); _list.VirtualMode = true; _list.VirtualListSize = packets.Count; _list.EnsureVisible(0); }
public PacketViewTab(string file) { InitializeComponent(); Text = Path.GetFileName(file); packetViewer = PacketReaderFactory.Create(Path.GetExtension(file)); packets = packetViewer.ReadPackets(file).ToList(); OpcodeDB.Load(packetViewer.Build, GetConnectionString()); PacketView.VirtualMode = true; PacketView.VirtualListSize = packets.Count; PacketView.EnsureVisible(0); }
public Parser(IPacketReader reader) { foreach (var packet in reader.ReadPackets()) { var gr = packet.CreateReader(); var code = packet.Code; if (code == OpCodes.SMSG_COMPRESSED_UPDATE_OBJECT) { code = OpCodes.SMSG_UPDATE_OBJECT; Decompress(ref gr); } if (code == OpCodes.SMSG_UPDATE_OBJECT) { ParseRest(gr); CheckPacket(gr); } gr.Close(); } }
public RemoteClient(IMultiplayerServer server, IPacketReader packetReader, PacketHandler[] packetHandlers, Socket connection) { LoadedChunks = new List<Coordinates2D>(); Server = server; Inventory = new InventoryWindow(server.CraftingRepository); InventoryWindow.WindowChange += HandleWindowChange; SelectedSlot = InventoryWindow.HotbarIndex; CurrentWindow = InventoryWindow; ItemStaging = ItemStack.EmptyStack; KnownEntities = new List<IEntity>(); Disconnected = false; EnableLogging = server.EnableClientLogging; NextWindowID = 1; Connection = connection; SocketPool = new SocketAsyncEventArgsPool(100, 200, 65536); PacketReader = packetReader; PacketHandlers = packetHandlers; cancel = new CancellationTokenSource(); StartReceive(); }
public PacketViewTab(string file) { InitializeComponent(); Text = Path.GetFileName(file); packetViewer = PacketReaderFactory.Create(Path.GetExtension(file)); string connectionString = String.Format("Server={0};Port={1};Uid={2};Pwd={3};Database={4};character set=utf8;Connection Timeout=10", Settings.Default.Host, Settings.Default.Port, Settings.Default.User, Settings.Default.Pass, Settings.Default.OpcodeDBName); packets = packetViewer.ReadPackets(file).ToList(); OpcodeDB.Load(packetViewer.Build, connectionString); PacketView.VirtualMode = true; PacketView.VirtualListSize = packets.Count; PacketView.EnsureVisible(0); }
public Stage1(IPacketReader reader) : this() { Reader = reader; }
public void HandleStandState(ref IPacketReader packet, ref IWorldManager manager) { manager.Account.ActiveCharacter.StandState = (StandState)packet.ReadUInt32(); manager.Send(manager.Account.ActiveCharacter.BuildUpdate()); }
protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet) { var npc = user.Field.GetPool(FieldObjType.NPC).GetObject <IFieldObjNPC>(packet.ReadInt()); if (npc == null) { return; } if (!user.Watching.Any(w => w == npc.FieldSplit)) { return; } var scriptName = npc.Info.Script; if (string.IsNullOrWhiteSpace(scriptName)) { return; } try { var script = await stageUser.Stage.ScriptEngine.CreateFromFile(scriptName); var context = new ConversationContext(user); var conversation = new ScriptedConversation( context, new BasicSpeaker(context, templateID: npc.Info.ID), new BasicSpeaker(context, flags: ConversationSpeakerFlags.NPCReplacedByUser), script ); await user.Converse(conversation); } catch (FileNotFoundException) { await user.Message($"The '{scriptName}' script does not exist."); } }
public void Setup() { m_MemoryStream = new MemoryStream(); m_PacketWriter = new PacketWriter(m_MemoryStream); m_PacketReader = new PacketReader(m_MemoryStream, false); }
public void HandlePlayerLogin(ref IPacketReader packet, ref IWorldManager manager) { ulong guid = packet.ReadUInt64(); Character character = (Character)manager.Account.SetActiveChar(guid, Sandbox.Instance.Build); character.DisplayId = character.GetDisplayId(); // Verify World : REQUIRED PacketWriter verify = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_LOGIN_VERIFY_WORLD], "SMSG_LOGIN_VERIFY_WORLD"); verify.WriteUInt32(character.Location.Map); verify.WriteFloat(character.Location.X); verify.WriteFloat(character.Location.Y); verify.WriteFloat(character.Location.Z); verify.WriteFloat(character.Location.O); manager.Send(verify); // Account Data Hash : REQUIRED PacketWriter accountdata = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_ACCOUNT_DATA_MD5], "SMSG_ACCOUNT_DATA_MD5"); accountdata.WriteInt32((int)DateTimeOffset.UtcNow.ToUnixTimeSeconds()); accountdata.WriteUInt8(1); accountdata.WriteUInt32((uint)AccountDataMask.ALL); for (int i = 0; i < 8; i++) { accountdata.WriteUInt32(0); } manager.Send(accountdata); // Tutorial Flags : REQUIRED PacketWriter tutorial = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_TUTORIAL_FLAGS], "SMSG_TUTORIAL_FLAGS"); for (int i = 0; i < 8; i++) { tutorial.WriteInt32(-1); } manager.Send(tutorial); // send language spells so we can type commands PacketWriter spells = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_INITIAL_SPELLS], "SMSG_INITIAL_SPELLS"); spells.WriteUInt8(0); spells.WriteUInt16(2); // spell count spells.WriteUInt32(CharacterData.COMMON_SPELL_ID); spells.WriteUInt16(0); spells.WriteUInt32(CharacterData.ORCISH_SPELL_ID); spells.WriteUInt16(0); spells.WriteUInt16(0); // cooldown count manager.Send(spells); HandleQueryTime(ref packet, ref manager); manager.Send(character.BuildUpdate()); // handle flying manager.Send(character.BuildFly(character.IsFlying)); // Force timesync : REQUIRED PacketWriter timesyncreq = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_TIME_SYNC_REQ], "SMSG_TIME_SYNC_REQ"); timesyncreq.Write(0); manager.Send(timesyncreq); }
public static byte[] LogonProof(IPacketReader packet) { byte[] A = packet.ReadBytes(32); byte[] kM1 = packet.ReadBytes(20); byte[] rA = A.Reverse().ToArray(); byte[] AB = A.Concat(B.GetBytes(32).Reverse()).ToArray(); if (new BigInteger(A) % new BigInteger(N) == 0) { return(new byte[1]); } SHA1 sha1 = new SHA1CryptoServiceProvider(); byte[] rU = sha1.ComputeHash(AB).Reverse().ToArray(); // SS_Hash BigInteger s = V.ModPow(new BigInteger(rU), new BigInteger(RN)); s *= new BigInteger(rA); s = s.ModPow(new BigInteger(RB), new BigInteger(RN)); byte[] S1 = new byte[16]; byte[] S2 = new byte[16]; byte[] S = s.GetBytes(32); byte[] rS = S.Reverse().ToArray(); for (int t = 0; t < 16; t++) { S1[t] = rS[t * 2]; S2[t] = rS[(t * 2) + 1]; } byte[] hashS1 = sha1.ComputeHash(S1); byte[] hashS2 = sha1.ComputeHash(S2); byte[] ss_hash = new byte[hashS1.Length + hashS2.Length]; for (int t = 0; t < hashS1.Length; t++) { ss_hash[t * 2] = hashS1[t]; ss_hash[(t * 2) + 1] = hashS2[t]; } // calc M1 byte[] M1; byte[] NHash = sha1.ComputeHash(N); byte[] GHash = sha1.ComputeHash(G.GetBytes()); byte[] NG_Hash = new byte[20]; for (int t = 0; t < 20; t++) { NG_Hash[t] = (byte)(NHash[t] ^ GHash[t]); } var tmp = NG_Hash.Concat(sha1.ComputeHash(BUsername)) .Concat(Salt) .Concat(A) .Concat(B.GetBytes(32).Reverse()) .Concat(ss_hash); M1 = sha1.ComputeHash(tmp.ToArray()); // calc M2 byte[] M2; tmp = A.Concat(M1).Concat(ss_hash); M2 = sha1.ComputeHash(tmp.ToArray()); sha1.Dispose(); // instantiate coders/cryptors PacketCrypt = new PacketCrypt(ss_hash, ClientBuild); // additional information, always zeroed int extradata = 0; if (ClientBuild < 6178 || ClientBuild == 6180) { extradata = 04; // uint unk } else if (ClientBuild < 8089) { extradata = 06; // uint unk, ushort unkFlags } else { extradata = 10; // uint account flag, uint surveyId, ushort unkFlags } byte[] result = new byte[22 + extradata]; result[0] = 1; Array.Copy(M2, 0, result, 2, M2.Length); return(result); }
public void HandleCharEnum(ref IPacketReader packet, ref IWorldManager manager) { var account = manager.Account; var result = account.Characters.Where(x => x.Build == Sandbox.Instance.Build); PacketWriter writer = new PacketWriter(Sandbox.Instance.Opcodes[global::Opcodes.SMSG_CHAR_ENUM], "SMSG_CHAR_ENUM"); BitPacker bitPacker = new BitPacker(writer); bitPacker.Write(1); bitPacker.Write(0, 23); bitPacker.Write(result.Count(), 17); foreach (Character c in result) { bitPacker.Write(0, 3); bitPacker.Write(c.Guid & 0xFF); bitPacker.Write((c.Guid >> 8) & 0xFF); bitPacker.Write(0); bitPacker.Write(c.Name.Length, 7); bitPacker.Write(0, 4); bitPacker.Write((c.Guid >> 16) & 0xFF); bitPacker.Write((c.Guid >> 24) & 0xFF); bitPacker.Write(0, 5); } bitPacker.Flush(); foreach (Character c in result) { writer.WriteUInt8(c.Gender); writer.WriteUInt8((byte)c.Level); // items for (int i = 0; i < 0x17; i++) { writer.WriteUInt32(0); writer.WriteUInt32(0); writer.WriteUInt8(0); } writer.WriteGUIDByte(c.Guid, 0); writer.WriteFloat(c.Location.Z); writer.WriteUInt8(c.HairColor); writer.WriteUInt32(c.Zone); writer.WriteGUIDByte(c.Guid, 3); writer.WriteGUIDByte(c.Guid, 1); writer.WriteUInt32(0); writer.WriteFloat(c.Location.X); writer.WriteUInt8(0); writer.WriteUInt8(c.HairStyle); writer.WriteUInt32(c.Location.Map); writer.WriteUInt8(c.Face); writer.WriteUInt8(c.Skin); writer.Write(System.Text.Encoding.ASCII.GetBytes(c.Name)); writer.WriteUInt8(c.FacialHair); writer.WriteUInt8(c.Class); writer.WriteUInt32(0); writer.WriteUInt8(c.Race); writer.WriteFloat(c.Location.Y); writer.WriteGUIDByte(c.Guid, 2); writer.WriteUInt32(0); // customise flags writer.WriteUInt32(0); // char flags writer.WriteUInt32(0); } manager.Send(writer); }
protected override async Task Handle( GameStageUser stageUser, IFieldObjUser controller, IFieldObjMob controlled, IPacketReader packet ) { if (controlled.HP <= 0) { return; } var mobCtrlSN = packet.ReadShort(); var v7 = packet.ReadByte(); //v85 = nDistance | 4 * (v184 | 2 * ((unsigned __int8)retaddr | 2 * v72)); [ CONFIRMED ] var oldSplit = (v7 & 0xF0) != 0; //this is a type of CFieldSplit var mobMoveStartResult = (v7 & 0xF) != 0; var curSplit = packet.ReadByte(); var illegalVelocity = packet.ReadInt(); var v8 = packet.ReadByte(); var cheatedRandom = (v8 & 0xF0) != 0; var cheatedCtrlMove = (v8 & 0xF) != 0; var multiTargetForBall = packet.ReadInt(); for (var i = 0; i < multiTargetForBall; i++) { packet.ReadLong(); // int, int } var randTimeForAreaAttack = packet.ReadInt(); for (var i = 0; i < randTimeForAreaAttack; i++) { packet.ReadInt(); } packet.ReadInt(); // HackedCode packet.ReadInt(); // idk packet.ReadInt(); // HackedCodeCrc packet.ReadInt(); // idk var path = packet.Read(new MovePath()); await controlled.Move(path); var response = new UnstructuredOutgoingPacket(PacketSendOperations.MobCtrlAck); response.WriteInt(controlled.ID); response.WriteShort(mobCtrlSN); response.WriteBool(mobMoveStartResult); response.WriteShort((short)controlled.MP); // nMP response.WriteByte(0); // SkillCommand response.WriteByte(0); // SLV await controller.Dispatch(response); var movement = new UnstructuredOutgoingPacket(PacketSendOperations.MobMove); movement.WriteInt(controlled.ID); movement.WriteBool(false); // NotForceLandingWhenDiscard movement.WriteBool(false); // NotChangeAction movement.WriteBool(false); // NextAttackPossible movement.WriteBool(false); // Left movement.WriteInt(illegalVelocity); movement.WriteInt(0); // MultiTargetForBall movement.WriteInt(0); // RandTimeForAreaAttack movement.Write(path); await controlled.Field.Dispatch(controller, movement); }
public Reader(string fileName, string originalFileName) { FileName = originalFileName; PacketReader = GetPacketReader(fileName, originalFileName); }
protected abstract void ReadData(IPacketReader reader);
public void ReadFromPacket(IPacketReader reader) { ReadData(reader); }
protected AbstractMoveFragment(MoveFragmentAttribute attribute, IPacketReader reader) { Attribute = attribute; ReadFromPacket(reader); }
protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet) { _ = packet.ReadInt(); var type = (GroupMessageType)packet.ReadByte(); var recipientCount = packet.ReadByte(); var recipients = new int[recipientCount]; for (var i = 0; i < recipientCount; i++) { recipients[i] = packet.ReadInt(); } var text = packet.ReadString(); switch (type) { case GroupMessageType.Party: { if (user.Party == null) { return; } var partyChat = new UnstructuredOutgoingPacket(PacketSendOperations.GroupMessage); partyChat.WriteByte((byte)GroupMessageType.Party); partyChat.WriteString(user.Character.Name); partyChat.WriteString(text); var dispatchRequest = new DispatchToCharactersRequest { Data = ByteString.CopyFrom(partyChat.Buffer) }; dispatchRequest.Characters.Add(user.Party.Members .Select(m => m.ID) .Where(m => m != user.ID) ); await stageUser.Stage.DispatchService.DispatchToCharacters(dispatchRequest); break; } default: stageUser.Stage.Logger.LogWarning($"Unhandled group message type: {type}"); break; } }
static void onErrorServerInternal(IPacketReader r) { r.Read(out ushort errorCode); serverError.Handle(errorCode, r); }
static void onErrorClientInternal(IPacketReader r) { r.Read(out ushort errorCode); clientError.Handle(errorCode, r); }
public FriendRequestData(IPacketReader packet) { UserId = packet.NextInt(); Username = packet.NextString(); Figure = packet.NextString(); }
public void HandleWorldTeleportAck(ref IPacketReader packet, ref IWorldManager manager) { }
private static void HandleAuthChallenge(ref IPacketReader packet, ref IWorldManager manager) { WorldServer.Sandbox.AuthHandler.HandleAuthChallenge(); }
public override Task Handle(TUser user, IPacketReader packet) => user.TryRecvAliveAck();
public PacketFactory(IPacketReader packetReader) { _packetReader = packetReader; }
protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet) { _ = packet.ReadInt(); var type = (ItemInventoryType)packet.ReadByte(); var from = packet.ReadShort(); var to = packet.ReadShort(); var number = packet.ReadShort(); if (to == 0) { await user.ModifyInventory(exclRequest : true); // TODO: drops return; } // TODO: checks await user.ModifyInventory(i => i[type].Move(from, to), true); }
public void Read(IPacketReader reader) { Username = reader.ReadString().ToString(); }
public FriendCategoryData(IPacketReader packet) { Id = packet.NextInt(); Name = packet.NextString(); }
public readonly void Read(IPacketReader reader) { // no fields }
public Reader(string fileName, SniffType type) { FileName = fileName; PacketReader = GetPacketReader(fileName, type); }
public void HandleWorldTeleport(ref IPacketReader packet, ref IWorldManager manager) { throw new NotImplementedException(); }
private void OpenMenu_Click(object sender, EventArgs e) { if (_openDialog.ShowDialog() != DialogResult.OK) return; textBox1.Clear(); textBox2.Clear(); _list.Items.Clear(); _listCache.Clear(); _statusLabel.Text = "Loading..."; var file = _openDialog.FileName; packetViewer = PacketReaderFactory.Create(Path.GetExtension(file)); if (!Loaded()) return; packets = packetViewer.ReadPackets(file).ToList(); _list.VirtualMode = true; _list.VirtualListSize = packets.Count; _statusLabel.Text = String.Format("Done. Client Build: {0}", packetViewer.Build); }
public void HandleZoneUpdate(ref IPacketReader packet, ref IWorldManager manager) { manager.Account.ActiveCharacter.Zone = packet.ReadUInt32(); }
protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet) { var contimove = await stageUser.Stage.ContiMoveRepository.RetrieveByField(user.Field); if (contimove == null) { return; } var response = new UnstructuredOutgoingPacket(PacketSendOperations.CONTISTATE); response.WriteByte((byte)contimove.State); response.WriteBool(contimove.State == ContiMoveState.Event); await user.Dispatch(response); }
public override Task Handle(GameStageUser user, IPacketReader packet) => Handle(user, user.FieldUser, packet);
protected override async Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet) { _ = packet.ReadInt(); var type = (ItemInventoryType)packet.ReadByte(); var response = new UnstructuredOutgoingPacket(PacketSendOperations.SortItemResult); response.WriteBool(false); response.WriteByte((byte)type); await user.ModifyInventory(i => i[type].Sort(), true); await user.Dispatch(response); }
protected abstract Task Handle(GameStageUser stageUser, IFieldObjUser user, IPacketReader packet);
public void SetPacketReader(IPacketReader reader) { this.reader = reader; }