Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Point Blank (Piercing Blow) (https://forum.zone-game.info/forumdisplay.php?f=204)
-   -   [Piercing Blow] PROTOCOL_LOBBY_CHATTING_ACK (https://forum.zone-game.info/showthread.php?t=41107)

Boris2105 25.07.2016 17:22

PROTOCOL_LOBBY_CHATTING_ACK
 
При попытке отправить сообщение в чат, ничего не происходит.
Хотя сервер все отправляет.
 
            public void WriteUnicode(string text, int count)
            {
                if (text != null)
                {
                    WriteB(Encoding.GetEncoding(1200).GetBytes(text));
                    WriteB(new byte[count - (text.Length)]);
                }
            }
 
Code: C#

 
public class PROTOCOL_LOBBY_CHATTING_ACK : ServerPacket
    {
        Player _player;
        ChatType _type;
        string _message;
        public PROTOCOL_LOBBY_CHATTING_ACK(Player player, ChatType type, string message)
        {
            _player = player;
            _type = type;
            _message = message;
        }
 
        public override void WriteImpl()
        {
            Logger.Instance.Info("Message:{0}, Name:{1}", _message, _player.Name);
            WriteD(1);
            WriteC(_player.Name.Length + 1);
            WriteUnicode(_player.Name, _player.Name.Length + 1);
            WriteC(0);
            WriteC(0);
            WriteH(_message.Length);
            WriteUnicode(_message, _message.Length);
 
Code: C#
https://pp.vk.me/c636917/v636917434/...9GHuUxr8Uo.jpg

Awiion 25.07.2016 18:44

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Boris2105,
Не верная структура.

Boris2105 25.07.2016 18:57

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Цитата:

Сообщение от Awiion (Сообщение 415647)
Boris2105,
Не верная структура.

Да вроде верная.

https://pp.vk.me/c626725/v626725434/...Eo699CSLHA.jpg

Awiion 25.07.2016 19:20

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Boris2105, Смотри лучше.
Во первых, в Unicode один символ, равен двум.

Во вторых, включи рассудок,

Код:

  WriteH(_message.Length);
  WriteUnicode(_message, _message.Length);

Код:

Write<ushort>(Text.Leneth)
WriteUnicode(Text);

У тебя первый указывает массив, второй столбец записывает.
Записываешь ты не правильно, WriteUnicode по этому используешь +1

Код:

  [OpCode(3087)]
    class SM_LOBBY_CHATTING : WriterPacket
    {
        private Player player;
        private ChatType type;
        private string text;

        public SM_LOBBY_CHATTING(Player player, ChatType type, string text)
        {
            this.player = player;
            this.type = type;
            this.text = text;
        }

        public override WriteImpl()
        {
            Write<int>(player.Id);
            Write<byte>(player.Name.Length);
            WriteUnicode(player.Name);
            Write<byte>(player.Color);
            Write<byte>(type);
            Write<ushort>(text.Length);
            WriteUnicode(text);
        }
    }

http://i11.pixs.ru/storage/9/1/1/Sni...1_22716911.png

Boris2105 25.07.2016 20:20

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Цитата:

Сообщение от Awiion (Сообщение 415649)
Boris2105, Смотри лучше.
Во первых, в Unicode один символ, равен двум.

Во вторых, включи рассудок,

Код:

  WriteH(_message.Length);
  WriteUnicode(_message, _message.Length);

Код:

Write<ushort>(Text.Leneth)
WriteUnicode(Text);

У тебя первый указывает массив, второй столбец записывает.
Записываешь ты не правильно, WriteUnicode по этому используешь +1

Код:

  [OpCode(3087)]
    class SM_LOBBY_CHATTING : WriterPacket
    {
        private Player player;
        private ChatType type;
        private string text;

        public SM_LOBBY_CHATTING(Player player, ChatType type, string text)
        {
            this.player = player;
            this.type = type;
            this.text = text;
        }

        public override WriteImpl()
        {
            Write<int>(player.Id);
            Write<byte>(player.Name.Length);
            WriteUnicode(player.Name);
            Write<byte>(player.Color);
            Write<byte>(type);
            Write<ushort>(text.Length);
            WriteUnicode(text);
        }
    }

http://i11.pixs.ru/storage/9/1/1/Sni...1_22716911.png

так там же используется ник и + 1 символ

Sojang 25.07.2016 20:36

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Цитата:

Сообщение от Awiion (Сообщение 415649)
Boris2105, Смотри лучше.
Во первых, в Unicode один символ, равен двум.

Во вторых, включи рассудок,

Код:

  WriteH(_message.Length);
  WriteUnicode(_message, _message.Length);

Код:

Write<ushort>(Text.Leneth)
WriteUnicode(Text);

У тебя первый указывает массив, второй столбец записывает.
Записываешь ты не правильно, WriteUnicode по этому используешь +1

Код:

  [OpCode(3087)]
    class SM_LOBBY_CHATTING : WriterPacket
    {
        private Player player;
        private ChatType type;
        private string text;

        public SM_LOBBY_CHATTING(Player player, ChatType type, string text)
        {
            this.player = player;
            this.type = type;
            this.text = text;
        }

        public override WriteImpl()
        {
            Write<int>(player.Id);
            Write<byte>(player.Name.Length);
            WriteUnicode(player.Name);
            Write<byte>(player.Color);
            Write<byte>(type);
            Write<ushort>(text.Length);
            WriteUnicode(text);
        }
    }

http://i11.pixs.ru/storage/9/1/1/Sni...1_22716911.png

оффтоп:
Свернуть ↑Развернуть ↓

PROGRAMMATOR 25.07.2016 21:50

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
partyvan, Write<T> юзаем, этим и похожи.
Я не юзаю модификаторы private и атрибутов [OpCode] у меня нет. :)

Sojang 25.07.2016 22:12

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 415659)
partyvan, Write<T> юзаем, этим и похожи.
Я не юзаю модификаторы private и атрибутов [OpCode] у меня нет. :)

Если память не подводить раньше был у вас атрибут [Packet()] или что то вроде того

PROGRAMMATOR 25.07.2016 22:48

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Да, но уже давным давно всё переехало в отдельный enum:

namespace PiercingBlow.Common.Network
{
    public enum PacketOpcode : ushort
    {
        PROTOCOL_BASE_LOGIN_REQ = 257,
        PROTOCOL_BASE_LOGIN_ACK = 259,
        PROTOCOL_BASE_CONNECT_ACK = 514,
        PROTOCOL_BASE_LOGOUT_REQ = 515,
        PROTOCOL_BASE_LOGOUT_ACK = 516,
 
        // ...
    }
}
 
Code: C#

И теперь на лету подхватывает нужны опкод.

Sojang 25.07.2016 22:54

Re: PROTOCOL_LOBBY_CHATTING_ACK
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 415666)
Да, но уже давным давно всё переехало в отдельный enum:

namespace PiercingBlow.Common.Network
{
    public enum PacketOpcode : ushort
    {
        PROTOCOL_BASE_LOGIN_REQ = 257,
        PROTOCOL_BASE_LOGIN_ACK = 259,
        PROTOCOL_BASE_CONNECT_ACK = 514,
        PROTOCOL_BASE_LOGOUT_REQ = 515,
        PROTOCOL_BASE_LOGOUT_ACK = 516,
 
        // ...
    }
}
 
Code: C#

И теперь на лету подхватывает нужны опкод.

Ох, так же не удобно править в случае чего.ну по крайней мере я так считаю)


Текущее время: 23:46. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot