Example #1
0
        /// <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);
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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本身的大小*/)));
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        public void NetToHostTest()
        {
            ulong iNetULong = 0; // TODO: 初始化为适当的值
            ulong expected  = 0; // TODO: 初始化为适当的值
            ulong actual;

            actual = ByteOrder.NetToHost(iNetULong);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Example #7
0
        public void NetToHostTest1()
        {
            ushort iNetUShort = 0; // TODO: 初始化为适当的值
            ushort expected   = 0; // TODO: 初始化为适当的值
            ushort actual;

            actual = ByteOrder.NetToHost(iNetUShort);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Example #8
0
        /// <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);
        }
Example #9
0
        /// <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本身的大小*/)));
        }
Example #10
0
        /// <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本身的大小*/)));
        }
Example #11
0
        /// <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本身的大小*/)));
        }
Example #12
0
        /// <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本身的大小*/)));
        }
Example #13
0
        /// <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本身的大小*/)));
        }
Example #14
0
        /// <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);
        }
Example #15
0
        /// <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本身的大小*/)));
        }
Example #16
0
        /// <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本身的大小*/)));
        }