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

Цитата:
Сообщение от Nickers Посмотреть сообщение
Как смещения редактировать под версии?
Берешь конкретный сервер, точишся руками, смотришь пакеты: ItemList, InventoryUpdate. Если во всех предметах видно правильное описание по ItemID (смещение 10 и 78 по рисунку), то смотришь, в например этот кусок скрипта:
delphi Код:
procedure ItemList; var   i, j, k: integer;   ListSize: integer;  begin    j:=4; //пропускаем дo ListSize   ListSize:=ReadH(j);   for i:=1 to ListSize do   if (i<=ListSize) then begin       BaseItems[i,1]:=ReadH(j)//ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке       BaseItems[i,2]:=ReadD(j)//ObjectID       BaseItems[i,3]:=ReadD(j)//ItemID       BaseItems[i,4]:=ReadD(j)//LocationSlot       BaseItems[i,5]:=ReadD(j)//  q Amount:                j:=j+4;           //  q Amount:       BaseItems[i,6]:=ReadH(j)//ItemType2       BaseItems[i,7]:=ReadH(j)// CustomType1       BaseItems[i,8]:=ReadH(j)//isEquipped:       BaseItems[i,9]:=ReadD(j)//BodyPart       BaseItems[i,10]:=ReadH(j); //EnchantLevel         inc(j,30);// ФИНАЛ  end else for k:=1 to 10 do BaseItems[i,k]:=0;    // забиваем нулями  if (0<ItemID) then objectOID:=GetObjectID(ItemID);//находим по ItemID  предмет с ObjectID  end;
Нас интересуют смещения ObjectID, EnchantLevel и кусочек скрипта - inc(j,30). Так вот. На рисунке, в первом блоке EnchantLevel находится по смещению 36 он размером 2 байта, за ним идет CustType2 смещение 38. Оно нам и надо. В следующем блоке ObjectID по смещению - 74. Вычисляем разницу 74-38=36. Вот поэтому сюда inc(j,30); надо не 30, а 36 вставить. Так как по видимому другие хроники. Процедура должна быть такая:
delphi Код:
procedure ItemList; var   i, j, k: integer;   ListSize: integer;  begin    j:=4; //пропускаем дo ListSize   ListSize:=ReadH(j);   for i:=1 to ListSize do   if (i<=ListSize) then begin       BaseItems[i,1]:=ReadH(j)//ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке       BaseItems[i,2]:=ReadD(j)//ObjectID       BaseItems[i,3]:=ReadD(j)//ItemID       BaseItems[i,4]:=ReadD(j)//LocationSlot       BaseItems[i,5]:=ReadD(j)//  q Amount:                j:=j+4;           //  q Amount:       BaseItems[i,6]:=ReadH(j)//ItemType2       BaseItems[i,7]:=ReadH(j)// CustomType1       BaseItems[i,8]:=ReadH(j)//isEquipped:       BaseItems[i,9]:=ReadD(j)//BodyPart       BaseItems[i,10]:=ReadH(j); //EnchantLevel         inc(j,36);// ФИНАЛ  end else for k:=1 to 10 do BaseItems[i,k]:=0;    // забиваем нулями  if (0<ItemID) then objectOID:=GetObjectID(ItemID);//находим по ItemID  предмет с ObjectID  end;

С пакетом и процедурой InventoryUpdate, поступаем аналогично.
Кроме этого из лога надо проверить соответствие ID пакетов, тем которые в скрипте. Ну и сама логика заточки в скрипте должна соответствовать хроникам сервера.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный+.JPG
Просмотров: 193
Размер:	174.7 Кб
ID:	1687  
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 9 спасибками от: