Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
PROTOCOL_BASE_GET_USER_INFO_ACK
#1
При разборе пакета MyInfo , появляется куча ошибок.
Он не видит ранг и имя клана отображается криво , точнее пара символов.
Код:
Код:
writeBS("000000000000e100030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000200b20000030008000004000800000500000001000000030000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000d0000000000000000000000000000000073007500700070006c0065006d0065006e0074003a0041007000720020003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e25000000d0149d5fd7199f5f00000000000000000113c4ba0a000000000177c4ba0a0000000001b075890900000000015873890900000000014c758909000000000188d55c080000000001824f9d00000000000113c4ba0a000000000177c4ba0a0000000001b075890900000000015873890900000000014c758909000000000188d55c0800000000014c509d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002500000006060200480d57ca6e519e5f00015fe516005fe516405c00000000000000000000000000003700000037000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000040000000800000000000000920000001a0000008d0000000c00000092000000040000000c000000040000000800000000000000920000001a0000008d0000000c0000009200000004000000");
WriteUnicode("GM!Kirito", 33);
WriteD(35);
WriteD(35);
writeBS("59b001008b56000000000000011ffac0f0f000000000000000000000000000bdb600000100000000000000000000000000");
WriteUnicode("Test",16);
writeBS("00000000000000000024");
Ответ
#2
Boris2105 Написал:При разборе пакета MyInfo , появляется куча ошибок.
Он не видит ранг и имя клана отображается криво , точнее пара символов.
Код:
Код:
writeBS("000000000000e100030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000200b20000030008000004000800000500000001000000030000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000d0000000000000000000000000000000073007500700070006c0065006d0065006e0074003a0041007000720020003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e25000000d0149d5fd7199f5f00000000000000000113c4ba0a000000000177c4ba0a0000000001b075890900000000015873890900000000014c758909000000000188d55c080000000001824f9d00000000000113c4ba0a000000000177c4ba0a0000000001b075890900000000015873890900000000014c758909000000000188d55c0800000000014c509d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002500000006060200480d57ca6e519e5f00015fe516005fe516405c00000000000000000000000000003700000037000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000040000000800000000000000920000001a0000008d0000000c00000092000000040000000c000000040000000800000000000000920000001a0000008d0000000c0000009200000004000000");
WriteUnicode("GM!Kirito", 33);
WriteD(35);
WriteD(35);
writeBS("59b001008b56000000000000011ffac0f0f000000000000000000000000000bdb600000100000000000000000000000000");
WriteUnicode("Test",16);
writeBS("00000000000000000024");

NICKNAME_LENGTH = OldLength * 2

Encoding = Unicode
Length = _stringLength - _stringText.Length

Код:
protected internal void WriteUnicode(string _stringText, int _stringLength)
        {
            if (_stringText != null)
            {
                WriteB(Encoding.Unicode.GetBytes(_stringText));
                WriteB(new byte[_stringLength - _stringText.Length]);
            }
        }

WriteUnicode("GM!Kirito", 33 * 2);
Ответ
#3
Все что была в Ascii. В Unicode *2 (связана с тем что на один символ, там 2 байта минимум)

ClanSize 34
NameSize 66
RoomSize 46
PasswordSize 8
Ответ
#4
Awiion Написал:Все что была в Ascii. В Unicode *2 (связана с тем что на один символ, там 2 байта минимум)

ClanSize 34
NameSize 66
RoomSize 46
PasswordSize 8

Спасибо это я понял.
Но исправить все равно не получается.

Код:
WriteH(31);
WriteUnicode("Приветствую на тестовом сервере", 31);
WriteH(32);
WriteUnicode("Приветствую на тестовом сервере!", 32);

public void WriteUnicode(string text, int count)
{
    if (text != null)
       {
          writeB(Encoding.GetEncoding(1200).GetBytes(text));
          writeB(new byte[count - (text.Length)]);
}
Но вот так анонсер замечательно работает , без всяких ошибок.

Код:
WriteUnicode("GM!Kirito", 33);
Ник работает , но на символов 12 смещается имя клана и вся остальная информация, что ниже ника.

Код:
WriteUnicode("GM!Kirito", 33 * 2);
А вот этот вариант смещает вообще всю информацию в этом пакете.
Ответ
#5
Потому что GM!Kirito - 9 байт, а пишешь ты его в unicode - 18 байт.

[SRC="csharp"]byte[] bytes = Encoding.Unicode.GetBytes(text);

writeB(bytes);
writeB(new byte[count - bytes.Length]);
[/SRC]
Ответ
#6
PROGRAMMATOR Написал:Потому что GM!Kirito - 9 байт, а пишешь ты его в unicode - 18 байт.

[SRC="csharp"]byte[] bytes = Encoding.Unicode.GetBytes(text);

writeB(bytes);
writeB(new byte[count - bytes.Length]);
[/SRC]

а не мог бы дать структуру, мб я тогда где то ошибся.
Так как вроде все должно работать.
Ответ
#7
Всё как всегда.

[SRC="csharp"]WriteUnicode(account.Nickname, AccountModel.NicknameLength);
Write<uint>(account.Rank);
Write<uint>(account.FakeRank);
Write<uint>(account.Point);
Write<uint>(account.Exp);
Write<uint>(0); // ?
Write<byte>(0); // ?
Write<long>(account.NewbieGuideIsDone);
[/SRC]
Ответ
#8
PROGRAMMATOR Написал:Всё как всегда.

[SRC="csharp"]WriteUnicode(account.Nickname, AccountModel.NicknameLength);
Write<uint>(account.Rank);
Write<uint>(account.FakeRank);
Write<uint>(account.Point);
Write<uint>(account.Exp);
Write<uint>(0); // ?
Write<byte>(0); // ?
Write<long>(account.NewbieGuideIsDone);
[/SRC]

а длина ника у тебя тут 33 или 66?
Ответ
#9
66 конечно же.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  PROTOCOL_BASE_GET_USER_INFO_ACK Empert 19 4,152 01-26-2018, 04:39 PM
Последний пост: Boris2105
  PROTOCOL_BASE_GET_USER_INFO_ACK Aluucard 1 1,507 02-16-2016, 08:08 PM
Последний пост: PROGRAMMATOR
  PROTOCOL_BASE_GET_USER_INFO_ACK Aluucard 2 1,761 02-13-2016, 09:54 PM
Последний пост: Aluucard

Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)