Так более универсально - для C4
delphi Код:
var
ItemID, ItemOID, ItemEnch: integer; //ItemID затачиваемого предмета
//ITEMs
BaseItems: array[1..maxitems, 1..12] of integer; //все предметы в инвентаре
//......................................
Procedure ItemList; //создание базы предметов
var
i, j, count : integer;
values : array[0..8] of variant;
begin
count:=round((length(pck)-5)/ReadH(4));
for j:=1 to 12 do for i:=1 to maxitems do BaseItems[i,j]:=0;
for i:=0 to ReadH(4)-1 do
begin
readmask('hdddhhhdh', 6+i*count, values);
BaseItems[i+1,2]:=values[1]; //OID
BaseItems[i+1,3]:=values[2]; //ItemID
BaseItems[i+1,5]:=values[3]; //Amount (кол-во предметов)
BaseItems[i+1,10]:=values[8]; //EnchLvl
end;
end;
//......................................
Procedure InventoryUpdate;
var
i, j, obj, count : integer;
values : array[0..9] of variant;
begin
count:=round((length(pck)-3)/ReadH(2));
for i:=0 to ReadH(2)-1 do
begin
readmask('hhdddhhhdh', 4+i*count, values);
case values[0] of
1: obj:=0;
2: obj:=values[2];
3: begin
for i:=1 to maxitems do
if BaseItems[i,2]=values[2] then
begin
for j:=1 to 12 do BaseItems[i,j]:=0;
break;
end;
continue;
end;
end;
for i:=1 to maxitems do
if BaseItems[i,2]=obj then
begin
BaseItems[i,2]:=values[2]; //OID
BaseItems[i,3]:=values[3]; //ItemID
BaseItems[i,5]:=values[4]; //Amount
BaseItems[i,10]:=values[9]; //EnchLvl
break;
end;
end;
end;
Тоже самое для Freya
delphi Код:
//......................................
Procedure ItemList; //создание базы предметов
var
i, j, count : integer;
values : array[0..8] of variant;
begin
count:=round((length(pck)-5)/ReadH(4));
for j:=1 to 12 do for i:=1 to maxitems do BaseItems[i,j]:=0;
for i:=0 to ReadH(4)-1 do
begin
readmask('dddqhhhdh', 6+i*count, values);
BaseItems[i+1,2]:=values[0];
BaseItems[i+1,3]:=values[1];
BaseItems[i+1,5]:=values[3];
BaseItems[i+1,10]:=values[8];
end;
end;
//......................................
Procedure InventoryUpdate;
var
i, j, obj, count : integer;
values : array[0..9] of variant;
begin
count:=round((length(pck)-3)/ReadH(2));
for i:=0 to ReadH(2)-1 do
begin
readmask('hdddqhhhdh', 4+i*count, values);
case values[0] of
1: obj:=0;
2: obj:=values[1];
3: begin
for i:=1 to maxitems do
if BaseItems[i,2]=values[1] then
begin
for j:=1 to 12 do BaseItems[i,j]:=0;
break;
end;
continue;
end;
end;
for i:=1 to maxitems do
if BaseItems[i,2]=obj then
begin
BaseItems[i,2]:=values[1];
BaseItems[i,3]:=values[2];
BaseItems[i,5]:=values[4];
BaseItems[i,10]:=values[9];
break;
end;
end;
end;