PDA

Просмотр полной версии : Опять я


wimax
17.02.2011, 22:46
Const
Name='1234';
itemid=1234;

procedure Init; //Вызывается при включении скрипта
begin
buf:=#$14;
SendToServerEx(Name);
end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure ItemList;
var
i:integer;
ID:integer;
begin
for i := 0 to 100 do
begin
if readd(i) = itemid then
begin
ID := readd(i - 8);
exit;
end;
if readd(i) <> itemid then
i := i + 64;
end;

end;

procedure UseSoe;
var
ID:integer;
begin
buf:=#$19;
WriteD(ID);
WriteD(0);
SendToServerEx(Name);
end;

begin
if FromServer and (ConnectName=Name)
then
case pck[1] of
#$11: ItemList;
#$62:
begin
if (ReadD(2)=924) then
UseSoe;
end;
end;
end.

хроники freya
когда юзает итем
buf:=#$19;
WriteD(ID);
WriteD(0);

id ето objid пишет 0
хули не пашыт скрипт ?)

supernewbie
17.02.2011, 23:26
потому что это чушь

procedure ItemList;
var
i:integer;
ID:integer;
begin
for i := 0 to 100 do
begin
if readd(i) = itemid then
begin
ID := readd(i - 8);
exit;
end;
if readd(i) <> itemid then
i := i + 64;
end;

end;

wimax
18.02.2011, 00:34
Const
Name='';
itemid=5644;

procedure Init; //Вызывается при включении скрипта
begin
buf:=#$14;
SendToServerEx(Name);
SetLength(Inventory,0);
end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure ItemList;
var
i:integer;
v:variant;
begin
SetLength(Inventory,0);
if ReadH(4)<1 then exit;
for i:=0 to ReadH(4)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6); //0 - OID
v[1]:=ReadD(i*offset+10); //1 - ItemID
v[2]:=ReadQ(i*offset+18); //2 - Count
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;


procedure UseSoe;
var
ID:integer;
begin
buf:=#$19;
WriteD(ID);
WriteD(0);
SendToServerEx(Name);
end;

begin
if FromServer and (ConnectName=Name)
then
case pck[1] of
#$11: ItemList;
#$62:
begin
if (ReadD(2)=924) then
UseSoe;
end;
end;
end.



Помоги написать функцию между procedure ItemList; и procedure usesoe; которя будет считывать objid с itemid который сверху

wimax
01.03.2011, 04:19
procedure ItemList;
begin
for i:=0 to 100 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to 100 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=itemid then ObjId:=Invertory[i,1];
end;

end;

procedure UseSoe;
begin
if (ReadD(2)=924) then
begin
buf:=#$19;
WriteD(ObjId20);
WriteD(0);
SendToServerEx(Name);
end;
end;

begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
#$62: UseSoe;
end;


зделол вот так мб можна было проще но зато свое =) и работает_)

J-Fobos
01.03.2011, 11:05
Стоит добавить одну модификацию во втором цикле for i:=0 to Count do, где Count это количество занятых слотов в инвентаре (узнается из того же пакета). Такое желательно сделать чтобы не выходить за рамки пакета в цикле :)