Показать сообщение отдельно
Старый 30.09.2011, 12:08   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Кратко, как работает.
В папке \settings находится packetsAionXX.ini из которого по коду пакета выбирается имя пакета, например для серверного пакета 00 находим имя пакета SM_STATUPDATE_HP
Код:
[server]
00=SM_STATUPDATE_HP
...
Сами пакеты лежат в папке \settings\packets.ini\aionXX или для LineageII лежат в папке \settings\packets.ini\gracia и т.д по названию хроник соответственно в папках clientpackets и serverpackets
Код:
\settings
|packetsAion21.ini
|packetsGracia.ini
+-\packets.ini
    +aion21
     |clientpackets
     |serverpackets
    +gracia
     |clientpackets
     |serverpackets
...
Описание для клиентских пакетов ищется в секции readImpl()
Код:
protected void readImpl() 
{
...
}
Описание для серверных пакетов ищется в секции writeImpl()
Код:
protected void writeImpl() 
{
...
}
Фигурные скобки {} должны быть на отдельной строке!

Обрабатываются конструкции:
Чтение из пакета c=1 байт, h=2 байта, d=4 байта, s=string, f=8 байт, n=4 байта, b=блок в N байт:
Код:
writeD(buf, effectedId); //имя поля будет effectedId
или
raceId = readC(); //имя поля будет raceId

writeB(buf, new byte[18]); //будет пропущено 18 байт
Цикл:
Код:
  writeH(buf, size); //// цикл по переменной size
  for (size) 
  {
        ...  
  }
или
Код:
  amount = readH(); // цикл по переменной amount
  for (int i = 0; i < amount; i++) 
  {
     ...
  }
Условия:
Код:
  raceId = readC();
  switch (raceId) 
  {
    case 0:
        ...
        break;
    case 1:
        ...
        break;
    default:
        ...
        break;
  }
или

Код:
  if (type == 2) // возможные варианты (>|>=|<|<=|!|!=|==)
  {
     ...
  }
  else
  {
   ...
  }

или

  if (type) // возможные варианты (>|>=|<|<=|!|!=|==)
  {
     ...
  }
Поддерживаются подпрограммы (SM_INVENTORY_UPDATE.java):
Код:
protected void writeGeneralInfo() 
{
  ...
}

protected void writeImpl(AionConnection con, ByteBuffer buf) 
{
  ...
  writeH(buf, size); // number of entries
  for (size) 
  {
       writeGeneralInfo(buf, item);
       ...
  }
}
Присвоение:
Код:
Size = 8;
//size будет равно 8

или
Size = 8;
Len=Size
//Len будет равно 8

или
int size = 134 - (history.getName().length() * 2 + 2);
//size будет равно вычислению 134 - длина строки getName *2+2
Комментарии в тексте пропускаются
Код:
writeC(buf, chatType); // type

или 

/*
* 0 : all 1 : elyos 2 : asmodians
*/
writeD(buf, senderObjectId); // sender object id
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 30.09.2011 в 13:11.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от: