кусочки из проекта:
парсер.
delphi Код:
var
D, D2, Offset, Count : Integer;
values: array [0..200] of variant;
begin
if fromserver then
case pck[1] of
#$21 : //(InventoryUpdate)
begin
count := round((length(pck)-3)/ReadH(2));
for d:=0 to ReadH(2)-1 do
begin
readmask('hhdddqhhhdhhdd',4+d*count,values);
InventoryUpdateItem(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[8], values[9], values[10], values[12], values[13]);
end;
end;
#$11 : //(ItemList)
begin
count := round((length(pck)-5)/ReadH(4));
ItemListBegin();
for d:=0 to ReadH(4)-1 do
begin
readmask('hdddqhhhdhhdd',6+d*count,values);
ItemListItem(values[0], values[1], values[2], values[3], values[4], values[5], values[7], values[8], values[9], values[11], values[12]);
end;
end;
#$F4://(PartySpelled)
begin
D2 := readd(6);
count := readd(10);
PartySpelledBegin(d2);
offset := 14;
for d := 0 to count - 1 do
begin
readmask('dhd', offset, values);
PartySpelledItem(d2, values[0], values[1], values[2]);
end;
end;
end;
объявления обработчиков:
delphi Код:
procedure InventoryUpdateItem(UpdateType,ItemType1:Word;ObjectId, ItemId, LocationSlot : integer;Count : int64;ItemType2, IsEquipped:word;BodyPart:integer;EnchantLevel:word;AugmentId,mana :integer);
{
UpdateType: 01-add, 02-modify, 03-remove
}
procedure ItemListBegin; //очищает список вещей
procedure ItemListItem(ItemType1:Word;ObjectId, ItemId, LocationSlot : integer;Count : int64;ItemType2, IsEquipped:word; BodyPart:integer; EnchantLevel:word; AugmentId,mana :integer);
Procedure PartySpelledBegin(ObjId:integer); //очищает список бафов на объекте связанным с этим обжектайди.
Procedure PartySpelledItem(ObjId,SkillId:integer; SkillLevel:word; Duration:integer);