public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    /* S(62),c,c,c,Q*20 */
                    writer.Write(BinaryExt.WriteFixedString(_hash, Encoding.Unicode, 62));
                    writer.Write((byte)0);             // usePinCode boolean: 0=no, 1=yes [NA/EU always 0]
                    writer.Write((byte)0);             // registerPinCode boolean: 0=request, 1=register [NA/EU always 0]
                    writer.Write((byte)7);             // index of correct pin panel number order block to be used/show to user [should not be static]
                    // 20 * 8 bytes pin panel number order
                    writer.Write("D5D68AF200000000".ToBytes());
                    writer.Write("421F3F0002000000".ToBytes());
                    writer.Write("622E4A7600000000".ToBytes());
                    writer.Write("EC329D5E00000000".ToBytes());
                    writer.Write("26D9A3DD00000000".ToBytes());
                    writer.Write("BD0D10A900000000".ToBytes());
                    writer.Write("F6C0FD5201000000".ToBytes());
                    writer.Write("96C2317101000000".ToBytes());             // correct/used pin panel order
                    writer.Write("232B9C6000000000".ToBytes());
                    writer.Write("3B135D2601000000".ToBytes());
                    writer.Write("A766CD8D00000000".ToBytes());
                    writer.Write("86CC1F0402000000".ToBytes());
                    writer.Write("D1F4155601000000".ToBytes());
                    writer.Write("D970D22200000000".ToBytes());
                    writer.Write("610E617601000000".ToBytes());
                    writer.Write("0D80FA9200000000".ToBytes());
                    writer.Write("8F94852C00000000".ToBytes());
                    writer.Write("6A9D73D401000000".ToBytes());
                    writer.Write("02ABBD2C02000000".ToBytes());
                    writer.Write("77B2F20001000000".ToBytes());

                    return(stream.ToArray());
                }
        }
コード例 #2
0
        public override byte[] WritedData()
        {
            var rnd = new Random((int)DateTime.Now.Ticks);

            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write((int)0);
                    writer.Write((long)1457907576); // server started time

                    var realms = NetworkService.WorldServers.Values.ToList();
                    writer.Write((short)realms.Count);

                    foreach (var realm in realms)
                    {
                        writer.Write((short)realm.ChannelId);                                                   // channel id
                        writer.Write((short)realm.Id);                                                          // server id
                        writer.Write((short)16384);                                                             // test random values

                        writer.Write(BinaryExt.WriteFixedString($"{realm.ChannelName}", Encoding.Unicode, 62)); // channel name
                        writer.Write(BinaryExt.WriteFixedString($"{realm.RealmName}", Encoding.Unicode, 62));   // server name

                        writer.Write((byte)0);
                        writer.Write(BinaryExt.WriteFixedString(realm.RealmIp, Encoding.ASCII, 16)); // ip
                        writer.Write((byte)0);

                        writer.Write(new byte[84]);                                       // padded bytes - possible string inside - never used

                        writer.Write((short)realm.RealmPort);                             // server port

                        writer.Write((byte)1);                                            // server population status
                        writer.Write((byte)1);                                            // can be joined by public
                        writer.Write((byte)1);                                            // unk

                        writer.Write((byte)AuthProcessor.GetCharacterCount(_accInfo.Id)); // created characters count
                        writer.Write((byte)0);                                            // characters to be delete count

                        writer.Write((short)0);                                           // weird limitation / block

                        writer.Write((long)0);                                            // channel relogin delay time
                        writer.Write((long)0);                                            // last login to channel time

                        writer.Write((byte)0);                                            // exp/drop bonus

                        writer.Write(new byte[13]);                                       // padded bytes - never used

                        writer.Write((byte)0);                                            // medal
                    }

                    return(stream.ToArray());
                }
        }
コード例 #3
0
        public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write(_character.GameSessionId);
                    writer.Write(_character.Uid);
                    writer.WriteD(1);
                    writer.Write(_character.DatabaseCharacterData.AppearanceOptions);
                    writer.Write(BinaryExt.WriteFixedString(_character.DatabaseCharacterData.Surname, Encoding.Unicode, 62));

                    return(stream.ToArray());
                }
        }
コード例 #4
0
            public override byte[] WritedData()
            {
                using (var stream = new MemoryStream())
                    using (var writer = new BinaryWriter(stream))
                    {
                        // SMSG_RefreshUserBasicCache

                        writer.Write((int)_player.GameSessionId);
                        writer.Write((long)_player.DatabaseCharacterData.AccountId);
                        writer.Write((int)1);         // incremental
                        writer.Write(BinaryExt.WriteFixedString(_player.DatabaseCharacterData.Surname, Encoding.Unicode, 62));
                        writer.Write(new byte [402]); // possibly text string

                        return(stream.ToArray());
                    }
            }
コード例 #5
0
 public override byte[] WritedData()
 {
     using (var stream = new MemoryStream())
     {
         using (var writer = new BinaryWriter(stream))
         {
             writer.Write((byte)_chatType.GetHashCode());
             writer.Write((byte)1);
             writer.Write((int)_sessionId);
             writer.Write(BinaryExt.WriteFixedString(_characterName, Encoding.Unicode, 62));
             writer.Write((byte)1);
             writer.Write((byte)0);
             writer.Write((byte)1);
             writer.Write(Encoding.Unicode.GetBytes(_message));
         }
         return(stream.ToArray());
     }
 }
コード例 #6
0
        public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write((short)_info.ClassType.Ordinal());

                    writer.Write((long)_info.CharacterId);
                    writer.Write((byte)0); // slot
                    writer.Write(BinaryExt.WriteFixedString(_info.CharacterName, Encoding.Unicode, 62));
                    writer.Write((int)_info.Level);
                    writer.Write((int)0);

                    for (int i = 0; i < 31; i++)             // inventoryEquipSlotsCount = 31
                    {
                        writer.Write((short)0);              // item id
                        writer.Write((short)0);              // item enchant
                        writer.Write((long)-2);              // item expiration date
                        writer.Write((short)0);              // item current endurance
                        for (int x = 0; x < 12; x++)         // dye color palette infos = 12
                        {
                            writer.Write((byte)0xFF);        // -1
                            writer.Write((byte)0xFF);        // -1
                        }
                        writer.Write((byte)0);               // unk
                    }

                    writer.Write(_info.AppearancePresets);                                         // 10 bytes
                    writer.WriteC((byte)_info.Zodiac);
                    writer.Write(_info.AppearanceOptions);                                         // 800 bytes

                    writer.Write(BinaryExt.WriteFixedString(_info.Surname, Encoding.Unicode, 62)); // family name

                    writer.Write((long)-1);                                                        // character delete date
                    writer.Write((byte)0);                                                         // character state
                    writer.Write(new byte[28]);                                                    // zeroes
                    writer.Write((long)-1);                                                        // character last login date

                    writer.Write("0000000000309F055BF67F0000701ED5DA150000000000000000000000000000FFFFFFFFFFE86FC2A10A".ToBytes());

                    return(stream.ToArray());
                }
        }
コード例 #7
0
            public override byte[] WritedData()
            {
                using (var stream = new MemoryStream())
                    using (var writer = new BinaryWriter(stream))
                    {
                        // SMSG_RefreshPcBasicCache

                        writer.Write((int)_player.GameSessionId);
                        writer.Write((long)_player.Uid);
                        writer.Write((int)1);                                                   // incremental
                        writer.Write(BinaryExt.WriteFixedString(_player.DatabaseCharacterData.CharacterName, Encoding.Unicode, 62));
                        writer.Write((byte)_player.DatabaseCharacterData.AppearancePresets[0]); // face
                        writer.Write((byte)_player.DatabaseCharacterData.AppearancePresets[1]); // hair
                        writer.Write((byte)_player.DatabaseCharacterData.AppearancePresets[2]); // goatee
                        writer.Write((byte)_player.DatabaseCharacterData.AppearancePresets[3]); // mustache
                        writer.Write((byte)_player.DatabaseCharacterData.AppearancePresets[4]); // sideburns
                        writer.Write((byte)5);                                                  // TODO: eyebrows

                        return(stream.ToArray());
                    }
            }
コード例 #8
0
        public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write((int)_character.GameSessionId);
                    writer.Write((long)_character.Connection.Account.Id);
                    writer.Write((long)_character.Id);
                    writer.Write((long)0);             // utc
                    writer.Write((long)0);             // utc
                    writer.Write((short)0);            // wp
                    writer.Write((short)0);            // cp
                    writer.Write(BinaryExt.WriteFixedString(_character.DatabaseCharacterData.CharacterName, Encoding.Unicode, 62));
                    writer.Write((int)_character.DatabaseCharacterData.Level);
                    writer.Write((long)-6012);             // guild?
                    writer.Write(BinaryExt.WriteFixedString(_character.DatabaseCharacterData.Surname, Encoding.Unicode, 62));
                    writer.Write((short)0);
                    writer.Write((short)_character.DatabaseCharacterData.ClassType.Ordinal());

                    return(stream.ToArray());
                }
        }
コード例 #9
0
        public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write("04A4C200".ToBytes());
                    writer.Write("D309000000000000".ToBytes());
                    writer.Write("46B2C16FF2862300".ToBytes());
                    //writer.WriteQ(_character.CharacterId);
                    writer.Write("B1E57656".ToBytes()); //todo - static server date time
                    writer.Skip(12);
                    writer.Write("1E000000".ToBytes());
                    writer.Write(BinaryExt.WriteFixedString(_character.CharacterName, Encoding.Unicode, 62));
                    writer.Write(_character.Level);
                    writer.Write("ABE7FFFFFFFFFFFF".ToBytes());
                    writer.Write(BinaryExt.WriteFixedString(_character.Surname, Encoding.Unicode, 62));
                    writer.WriteH(4); //unk
                    writer.WriteH(_character.ClassType.Ordinal());

                    return(stream.ToArray());
                }
        }
コード例 #10
0
        public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write((long)_character.Uid);
                    writer.Write((int)0);
                    writer.Write((short)1);

                    writer.Write((int)_character.GameSessionId);
                    writer.Write((float)_character.Position.Point.X);           // x
                    writer.Write((float)_character.Position.Point.Y);           // y
                    writer.Write((float)_character.Position.Point.Z);           // z
                    writer.Write((float)_character.Position.Cosinus);           // cosinus
                    writer.Write((int)0);
                    writer.Write((float)_character.Position.Sinus);             // sinus
                    writer.Write((short)_character.DatabaseCharacterData.ClassType.Ordinal());
                    writer.Write((short)0);
                    writer.Write((float)1);             // hp
                    writer.Write((float)150);           // hp
                    writer.Write((long)-6012);
                    writer.Write(new byte[8]);
                    writer.Write((long)-6012);
                    writer.Write((byte)2);
                    writer.Write("946DE495".ToBytes());
                    writer.Write(new byte[16]);
                    writer.Write((byte)3);
                    writer.Write(new byte[12]);
                    writer.Write((int)0);
                    writer.Write((short)0);
                    writer.Write((short)0);
                    writer.Write(new byte[800]);             // nulled appearance data?
                    writer.Write((long)0);
                    writer.Write((long)_character.DatabaseCharacterData.AccountId);
                    writer.Write((int)1);             // incremental
                    writer.Write((long)_character.Uid);
                    writer.Write((int)1);             // incremental
                    writer.Write((int)1);             // incremental
                    writer.Write((int)0);             // incremental
                    writer.Write((byte)17);
                    writer.Write((byte)0);
                    writer.Write((byte)0);
                    writer.Write((int)0);
                    writer.Write((int)0);
                    writer.Write((short)0);
                    writer.Write((byte)0);             // pvp?
                    writer.Write((byte)0);             // pvp?
                    writer.Write((short)0);            // item - weapon?
                    writer.Write((short)0);
                    writer.Write((int)-1021);
                    writer.Write(new byte[6]);
                    writer.Write((byte)37);
                    writer.Write(new byte[12]);
                    writer.Write((byte)5);
                    writer.Write((int)0);             // karma?
                    writer.Write((int)0);
                    writer.Write(new byte[64]);
                    writer.Write((int)-1024);
                    writer.Write((byte)1);             // 0 when created or 1 if not new character
                    writer.Write((int)_character.DatabaseCharacterData.Level);
                    writer.Write((int)0);
                    writer.Write((byte)3);
                    writer.Write(new byte[43]);
                    writer.Write((int)-1024);
                    writer.Write(new byte[12]);
                    writer.Write((int)-1024);
                    writer.Write(new byte[12]);
                    writer.Write((int)2);
                    writer.Write(new byte[10]);

                    writer.Write((int)1);                                             // incremental
                    writer.Write(BinaryExt.WriteFixedString(_character.DatabaseCharacterData.Surname, Encoding.Unicode, 62));
                    writer.Write(new byte [402]);                                     // possible string
                    writer.Write((int)1);                                             // incremental
                    writer.Write(BinaryExt.WriteFixedString(_character.DatabaseCharacterData.CharacterName, Encoding.Unicode, 62));
                    writer.Write(_character.DatabaseCharacterData.AppearancePresets); // 10 bytes

                    // only broadcasted item data
                    for (int i = 0; i < 19; i++)
                    {
                        writer.Write((short)0);                // item id
                        writer.Write((short)0);                // item enchant
                        writer.Write((long)-2);                // item expiration date
                        writer.Write((short)0);                // item current endurance
                        for (int x = 0; x < 12; x++)           // dye color palette infos = 12
                        {
                            writer.Write((byte)0xFF);          // -1
                            writer.Write((byte)0xFF);          // -1
                        }
                        writer.Write((byte)0);                 // unk
                    }

                    writer.Write(new byte[706]);
                    writer.Write((byte)_character.DatabaseCharacterData.Zodiac.GetHashCode());
                    writer.Write((int)-1024);
                    writer.Write(new byte[46]);
                    writer.Write((short)-2);
                    writer.Write((byte)0);

                    return(stream.ToArray());
                }
        }
コード例 #11
0
        public override byte[] WritedData()
        {
            using (var stream = new MemoryStream())
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write((int)0);                                                                // packet number
                    writer.Write((int)4530);                                                             // server version
                    writer.Write((int)14998534);                                                         // client session id
                    writer.Write((int)1678849575);                                                       // session cookie id
                    writer.Write((long)_account.Id);                                                     // account id
                    writer.Write(BinaryExt.WriteFixedString(_account.FamilyName, Encoding.Unicode, 62)); // family name
                    writer.Write((short)-1);
                    writer.Write((short)0);
                    writer.Write((byte)_characters.Count);             // equal to characters count
                    writer.Write((byte)0);
                    writer.Write((long)-1);
                    writer.Write((long)0);
                    writer.Write((byte)_characters.Count);             // characters count

                    for (int index = 0; index < _characters.Count; index++)
                    {
                        var characterInfo = _characters[index];
                        var equipment     = (EquipmentStorage)characterInfo.EquipmentData;

                        writer.Write((short)characterInfo.ClassType.Ordinal());                                      // class
                        writer.Write((long)characterInfo.CharacterId);                                               // id
                        writer.Write((byte)0);                                                                       // slot
                        writer.Write(BinaryExt.WriteFixedString(characterInfo.CharacterName, Encoding.Unicode, 62)); // name
                        writer.Write((int)characterInfo.Level);                                                      // level
                        writer.WriteD(0);                                                                            // item cache related

                        using (equipment)
                            if (equipment.Items.Count != 0)
                            {
                                byte[] equipmentData = equipment.GetEquipmentData();
                                writer.Write(equipmentData);
                                writer.Skip(107);
                            }
                            else
                            {
                                for (int i = 0; i < 31; i++)                         // inventoryEquipSlotsCount = 31
                                {
                                    writer.Write((short)0);                          // item id
                                    writer.Write((short)0);                          // item enchant
                                    writer.Write((long)-2);                          // item expiration date
                                    writer.Write((short)0);                          // item current endurance
                                    for (int x = 0; x < 12; x++)                     // dye color palette infos = 12
                                    {
                                        writer.Write((byte)0xFF);                    // -1
                                        writer.Write((byte)0xFF);                    // -1
                                    }
                                    writer.Write((byte)0);                           // unk
                                }
                            }

                        writer.Write(characterInfo.AppearancePresets); // 10 bytes
                        writer.Write((byte)characterInfo.Zodiac);
                        writer.Write(characterInfo.AppearanceOptions); // 800 bytes
                        writer.Skip(62);                               // family name
                        writer.Write((long)-1);                        // character delete date
                        writer.Write((byte)0);                         // character state
                        writer.Write((long)-1);                        // character last login date
                        writer.Write((long)-1);                        // character creation date
                        writer.Write((float)0);                        // character location x
                        writer.Write((float)0);                        // character location y
                        writer.Write((float)0);                        // character location z
                        writer.Write((long)-1);                        // character suspended date
                        writer.Write((short)0);                        // character zone id
                        writer.Write((long)-1);                        // character unk date
                        writer.Write(new byte [32]);
                    }

                    return(stream.ToArray());
                }
        }