Собственно ковыряю я сорсы лоста и мобиуса (или хз какой у меня там хелиос, скриптов вроде), смысл вот в чем:
изначально отправляется id системки и размер аргументов, а затем идет список этих самых аргументов.
Теперь вопрос: как клиент определяет, что ему должно придти в списке, например, ddh, а не hhc или же что-то подобное? По айпи сообщения?
Спасибо.
Я говорю о пакете 0х62 (SystemMessagePacket), туда передается id сообщения и size (количество аргументов), а затем сами аргументы. Нигде их тип не указан. Поэтому у меня такой вопрос.
Я говорю о пакете 0х62 (SystemMessagePacket), туда передается id сообщения и size (количество аргументов), а затем сами аргументы. Нигде их тип не указан. Поэтому у меня такой вопрос.
{
writeParamsSize(packet, _params.length);
SMParam param;
for (int i = 0; i < _paramIndex; i++)
{
param = _params[i];
writeParamType(packet, param.getType());
switch (param.getType())
{
case TYPE_ELEMENT_NAME:
case TYPE_BYTE:
{
packet.writeC(param.getIntValue());
break;
}
case TYPE_CASTLE_NAME:
case TYPE_SYSTEM_STRING:
case TYPE_INSTANCE_NAME:
case TYPE_CLASS_ID:
{
packet.writeH(param.getIntValue());
break;
}
case TYPE_ITEM_NAME:
case TYPE_INT_NUMBER:
case TYPE_NPC_NAME:
case TYPE_DOOR_NAME:
{
packet.writeD(param.getIntValue());
break;
}
case TYPE_LONG_NUMBER:
{
packet.writeQ(param.getLongValue());
break;
}
case TYPE_TEXT:
case TYPE_PLAYER_NAME:
{
packet.writeS(param.getStringValue());
break;
}
case TYPE_SKILL_NAME:
{
final int[] array = param.getIntArrayValue();
packet.writeD(array[0]); // skill id
packet.writeH(array[1]); // skill level
packet.writeH(0x00); // skill sub level
break;
}
case TYPE_POPUP_ID:
case TYPE_ZONE_NAME:
{
final int[] array = param.getIntArrayValue();
packet.writeD(array[0]); // x
packet.writeD(array[1]); // y
packet.writeD(array[2]); // z
break;
}
}
}
}
writeParamType(packet, param.getType()); - тип параметра, в зависимости от типа .dll считывает опр. последовательности.