/// <summary> /// /// </summary> public Word_AuthResponse(bool bIsTBC) : base((long)WordOpCode.SMSG_AUTH_RESPONSE, 0) { WriterStream.Write((ushort)ByteOrder.NetToHost(13) /* 2 + 11 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_AUTH_RESPONSE); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((byte)ResponseCodes.AUTH_OK); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x02); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); if (bIsTBC) { WriterStream.Write((byte)0x01); } else { WriterStream.Write((byte)0x00); } }
/// <summary> /// /// </summary> public Word_AuthChallenge(uint iServerSeed) : base((long)WordOpCode.SMSG_AUTH_CHALLENGE, 0) { WriterStream.Write((ushort)ByteOrder.NetToHost(6) /* 2 + 4 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_AUTH_CHALLENGE); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((uint)iServerSeed); }
/// <summary> /// /// </summary> public void EndWrite(uint iUpdateCount) { WriterStream.Seek(4, SeekOrigin.Begin); WriterStream.Write((uint)iUpdateCount); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_AuthResponseError(uint iErrorInfo) : base((long)WordOpCode.SMSG_AUTH_RESPONSE, 0) { WriterStream.Write((ushort)ByteOrder.NetToHost(6) /* 2 + 4 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_AUTH_RESPONSE); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((uint)iErrorInfo); }
/// <summary> /// /// </summary> public Word_Pong(uint iPing) : base((long)WordOpCode.SMSG_PONG, 0) { WriterStream.Write((ushort)ByteOrder.NetToHost(6) /* 2 + 4 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_PONG); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((uint)iPing); }
public void NetToHostTest() { ulong iNetULong = 0; // TODO: 初始化为适当的值 ulong expected = 0; // TODO: 初始化为适当的值 ulong actual; actual = ByteOrder.NetToHost(iNetULong); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
public void NetToHostTest1() { ushort iNetUShort = 0; // TODO: 初始化为适当的值 ushort expected = 0; // TODO: 初始化为适当的值 ushort actual; actual = ByteOrder.NetToHost(iNetUShort); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
/// <summary> /// /// </summary> public DestroyPacket(EntityId entityId) : base((long)WordOpCode.SMSG_DESTROY_OBJECT, 0) { WriterStream.Write((ushort)ByteOrder.NetToHost(10) /* 2 + 8 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_UPDATE_OBJECT); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((uint)entityId.High); WriterStream.Write((uint)entityId.Low); }
/// <summary> /// /// </summary> public Word_CharRenameResponseError(byte errorInfo) : base((long)WordOpCode.SMSG_CHAR_RENAME, 0) { WriterStream.Write((ushort)0 /* 2 + ? */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_CHAR_RENAME); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((byte)errorInfo); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_CharCreateResponse( ) : base((long)WordOpCode.SMSG_CHAR_CREATE, 0) { WriterStream.Write((ushort)0 /* 2 + ? */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_CHAR_CREATE); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((byte)ResponseCodes.CHAR_CREATE_SUCCESS); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_TradeStatus(uint uiTradeStatus) : base((long)WordOpCode.SMSG_TRADE_STATUS, 0) { WriterStream.Write((ushort)0 /* 2 + ? */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_TRADE_STATUS); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((uint)uiTradeStatus); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_AddonInfo(byte[] unPacked) : base((long)WordOpCode.SMSG_ADDON_INFO, 0) { WriterStream.Write((ushort)0 /* 2 + 4 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_ADDON_INFO); // ID ////////////////////////////////////////////////////////////////////////// string name = string.Empty; ushort Enable = 0; // based on the parsed files from retool uint crc = 0; uint unknown = 0; PacketReader packetReader = new PacketReader(unPacked, unPacked.Length, 0); while (packetReader.Position < packetReader.Size) { name = packetReader.ReadUTF8StringSafe(); Enable = packetReader.ReadUInt16(); crc = packetReader.ReadUInt32(); unknown = packetReader.ReadUInt32(); if (name == null || name == string.Empty) { continue; } LOGs.WriteLine(LogMessageType.MSG_HACK, "Word_AddonInfo...... {0} {1} {2} {3} {4} {5}", name, Enable, crc, unknown, packetReader.Position, packetReader.Size); // Hacky fix, Yea I know its a hacky fix I will make a proper handler one's I got the crc crap //if ( crc != 0x4C1C776D ) // CRC of public key version 2.0.1 { //LOGs.WriteLine( LogMessageType.MSG_HACK, "Word_AddonInfo...... 0 " ); //WriterStream.Write( PublicKey, 0, PublicKey.Length/*264 大小*/ ); // part of the hacky fix } //else { LOGs.WriteLine(LogMessageType.MSG_HACK, "Word_AddonInfo...... 1 "); WriterStream.Write((byte)0x02); WriterStream.Write((byte)0x01); WriterStream.Write((byte)0x00); WriterStream.Write((uint)0x00); WriterStream.Write((byte)0x00); } } ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_ChannelNumMembersQueryResponse(string strChannelName, byte bFlags, uint uiNumMembers) : base((long)WordOpCode.SMSG_CHANNEL_NUM_MEMBERS_QUERY_RESPONSE, 0) { WriterStream.Write((ushort)0 /* 2 + ? */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_CHANNEL_NUM_MEMBERS_QUERY_RESPONSE); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.WriteUTF8Null(strChannelName); WriterStream.Write((byte)bFlags); WriterStream.Write((uint)uiNumMembers); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_AuthResponsePending(uint iPosition) : base((long)WordOpCode.SMSG_AUTH_RESPONSE, 0) { WriterStream.Write((ushort)ByteOrder.NetToHost(16) /* 2 + 14 */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_AUTH_RESPONSE); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((byte)ResponseCodes.AUTH_WAIT_QUEUE); WriterStream.Write((byte)0x2C); WriterStream.Write((byte)0x73); WriterStream.Write((byte)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((uint)0x00); WriterStream.Write((byte)0x00); WriterStream.Write((uint)iPosition); }
/// <summary> /// /// </summary> public Word_RealmSplitStateRequest(uint iUnknown) : base((long)WordOpCode.SMSG_REALM_SPLIT_STATE_RESPONSE, 0) { WriterStream.Write((ushort)0 /* 2 + ? */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_REALM_SPLIT_STATE_RESPONSE); // ID ////////////////////////////////////////////////////////////////////////// //WriterStream.Write( (uint)iUnknown ); //WriterStream.Write( (uint)0 ); //WriterStream.WriteUTF8Null( "01/01/01" ); byte[] nnn = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x30, 0x31, 0x2F, 0x30, 0x31, 0x00, }; WriterStream.Write(nnn, 0, nnn.Length); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }
/// <summary> /// /// </summary> public Word_CharEnumResponse(WowCharEnumCharacterInfo[] characterInfoArray) : base((long)WordOpCode.SMSG_CHAR_ENUM, 0) { WriterStream.Write((ushort)0 /* 2 + ? */); // Size WriterStream.Write((ushort)WordOpCode.SMSG_CHAR_ENUM); // ID ////////////////////////////////////////////////////////////////////////// WriterStream.Write((byte)characterInfoArray.Length); if (characterInfoArray.Length > 0) { foreach (WowCharEnumCharacterInfo wowCharacterInfo in characterInfoArray) { WriterStream.Write((ulong)wowCharacterInfo.CharacterGuid); WriterStream.WriteUTF8Null((string)wowCharacterInfo.Name); WriterStream.Write((byte)wowCharacterInfo.Race); WriterStream.Write((byte)wowCharacterInfo.Class); WriterStream.Write((byte)wowCharacterInfo.Gender); WriterStream.Write((byte)wowCharacterInfo.Skin); WriterStream.Write((byte)wowCharacterInfo.Face); WriterStream.Write((byte)wowCharacterInfo.HairStyle); WriterStream.Write((byte)wowCharacterInfo.HairColor); WriterStream.Write((byte)wowCharacterInfo.FacialHair); WriterStream.Write((byte)wowCharacterInfo.Level); WriterStream.Write((uint)wowCharacterInfo.ZoneId); WriterStream.Write((uint)wowCharacterInfo.MapId); WriterStream.Write((float)wowCharacterInfo.PositionX); WriterStream.Write((float)wowCharacterInfo.PositionY); WriterStream.Write((float)wowCharacterInfo.PositionZ); WriterStream.Write((uint)wowCharacterInfo.GuildGuid); WriterStream.Write((byte)0); // 0x01 // 0x02 // 0x04 - CHAR_LOGIN_LOCKED_FOR_TRANSFER // 0x08 // 0x10 // 0x20 // 0x40 byte iFlags = 0; if (wowCharacterInfo.IsHideHelm == true) { iFlags |= 0x04; } if (wowCharacterInfo.IsHideCloak == true) { iFlags |= 0x08; } if (wowCharacterInfo.IsGhost == true) { iFlags |= 0x20; } if (wowCharacterInfo.IsNeedRename == true) { iFlags |= 0x40; } WriterStream.Write((byte)iFlags); WriterStream.Write((byte)0xA0); // unknown WriterStream.Write((byte)0); // unknown // 0x01 - CHAR_LOGIN_LOCKED_BY_BILLING WriterStream.Write((byte)1); // unknown if (wowCharacterInfo.PetInfo != null) { WriterStream.Write((uint)wowCharacterInfo.PetInfo.PetModelId); WriterStream.Write((uint)wowCharacterInfo.PetInfo.PetLevel); WriterStream.Write((uint)wowCharacterInfo.PetInfo.PetFamily); } else { WriterStream.Write((uint)0); WriterStream.Write((uint)0); WriterStream.Write((uint)0); } for (int iIndex = 0; iIndex < wowCharacterInfo.Equipment.Length; iIndex++) { if (wowCharacterInfo.Equipment[iIndex] != null) { WriterStream.Write((uint)wowCharacterInfo.Equipment[iIndex].ModelID); WriterStream.Write((byte)wowCharacterInfo.Equipment[iIndex].InventoryType); } else { WriterStream.Write((uint)0); WriterStream.Write((byte)0); } } WriterStream.Write((uint)0); // first bag display id WriterStream.Write((byte)0); // first bag inventory type } } //byte[] nnn = new byte[] { // 0xD0, 0xF0, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x61, 0x69, 0x68, 0x75, 0x61, 0x6E, 0x71, 0x69, 0x6E, 0x67, 0x00, 0x0A, 0x02, 0x01, 0x00, 0x03, 0x09, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x00, 0x66, 0xB6, 0x21, 0x46, 0x52, 0xAA, 0xC6, 0xC5, 0x43, 0x9C, 0x05, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0x8F, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x8F, 0x00, 0x00, 0x07, 0xB9, 0x8F, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x09, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //}; //WriterStream.Write( nnn, 0, nnn.Length ); ////////////////////////////////////////////////////////////////////////// WriterStream.Seek(0, SeekOrigin.Begin); WriterStream.Write((ushort)ByteOrder.NetToHost((ushort)(WriterStream.Length - 2 /*Size本身的大小*/))); }