Сообщений: 538
Тем: 76
Зарегистрирован: Aug 2012
Репутация:
7
При попытке отправить сообщение в чат, ничего не происходит.
Хотя сервер все отправляет.
[SRC=CSharp]
public void WriteUnicode(string text, int count)
{
if (text != null)
{
WriteB(Encoding.GetEncoding(1200).GetBytes(text));
WriteB(new byte[count - (text.Length)]);
}
}
[/SRC]
[SRC=CSharp]
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);
[/SRC]
Сообщений: 322
Тем: 6
Зарегистрирован: Nov 2015
Репутация:
505
Boris2105,
Не верная структура.
Сообщений: 538
Тем: 76
Зарегистрирован: Aug 2012
Репутация:
7
Awiion Написал:Boris2105,
Не верная структура.
Да вроде верная.
Сообщений: 322
Тем: 6
Зарегистрирован: Nov 2015
Репутация:
505
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);
}
}
Сообщений: 538
Тем: 76
Зарегистрирован: Aug 2012
Репутация:
7
Awiion Написал: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);
}
}
так там же используется ник и + 1 символ
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
Awiion Написал: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);
}
}
оффтоп
У вас один сервер на весь форум что ли?kappa
В какую тему по пб не смотрю везде код у друг друга похож
Что у PROGRAMMATOR что у Awiion
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
partyvan, Write<T> юзаем, этим и похожи.
Я не юзаю модификаторы private и атрибутов [OpCode] у меня нет.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
PROGRAMMATOR Написал:partyvan, Write<T> юзаем, этим и похожи.
Я не юзаю модификаторы private и атрибутов [OpCode] у меня нет.
Если память не подводить раньше был у вас атрибут [Packet()] или что то вроде того
Сообщений: 6,450
Тем: 262
Зарегистрирован: Nov 2007
Репутация:
44,165
Да, но уже давным давно всё переехало в отдельный enum:
[SRC="csharp"]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,
// ...
}
}
[/SRC]
И теперь на лету подхватывает нужны опкод.
Сообщений: 357
Тем: 58
Зарегистрирован: Jan 2016
Репутация:
116
PROGRAMMATOR Написал:Да, но уже давным давно всё переехало в отдельный enum:
[SRC="csharp"]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,
// ...
}
}
[/SRC]
И теперь на лету подхватывает нужны опкод.
Ох, так же не удобно править в случае чего.ну по крайней мере я так считаю)
|