Цитата:
Сообщение от PunkRediska
Я шас папробывал написать скриптик каторый сразу падымал бы дроп упавший с моба,но сталкнулся с такой праблемай что он падымает тока 1'ну вешь из всех дропнувшыхся.Умные люди падскажите как ето можно исправить?:)Скриптик мой выгледит так :
var
begin
if FromServer and (pck[1]=#$0C)
then begin
buf:=#$04+pck[6]+pck[7]+pck[8]+pck[9]+pck[14]+pck[15]+pck[16]+pck[17]+pck[18]+pck[19]+pck[20]+pck[21]+pck[22]+pck[23]+pck[24]+pck[25]+#$00;
SendToServer;
end;
end.
^этот^ cкрипт прост до безабразия но вобшемто сложнее и не надо:).Кста если гдето струтура пакета отлечяется от вашей,то ето бырее всего патамушто скрипт под явавскую интерлюдию.
|
Как я сделал в ботике, выше по теме. В основном цикле создаем базу по выпавшим вещам:
Код:
//****************************************************************************
//DropItem - выпала вещь
if FromServer and (ConnectName=Name) and (pck[1]=#$0C) then begin
//чужие вещи не берем
if (Attacker=ReadD(2)) then begin
timer1.enabled:=false; //выключаем бота
//перебираем базу, ищем свободную ячейку в ней и добавляем
for i:=1 to max do begin
if (ItemBase[1,i]=0) then begin
//запоминаем в свободную ячейку
ItemBase[1,i]:=ReadD(6); //ObjectID
ItemBase[2,i]:=ReadD(14); //x
ItemBase[3,i]:=ReadD(18); //y
ItemBase[4,i]:=ReadD(22); //z
inc(itm);
NeedBackup:=true;
say('Добавили данные по предмету');
break;
end;
end;
end;
say('ColvoItm='+inttostr(itm));
end;
Подпрограмма сбора вещей. Здесь только просим поднять, на практике вещь может не взяться, недоступна к примеру и т.д.:
Код:
//******************************************************************************
procedure ReqGetItem;
begin
if itm=0 then begin
timer1.enabled:=true; //включаем отсчет времени
needbackup:=false;
exit;
end;
timer1.enabled:=false; //выключаем отсчет времени
//перебираем базу
for i:=1 to max do begin
//если нашли, то обнуляем
if (ItemBase[1,i]<>0) then begin //ObjectID
say('ReqGetItem');
//даем команду подобрать вещь
buf:=#$04;
WriteD(ItemBase[1,i]);
WriteD(ItemBase[2,i]);
WriteD(ItemBase[3,i]);
WriteD(ItemBase[4,i]);
WriteH(00);
SendToServerEx(Name);
end;
end;
end;
В основном цикле проверяем, что вещи реально подняты:
Код:
//****************************************************************************
//определяем реальность поднятия вещи, пакет GetItem
if FromServer and (ConnectName=Name) and (pck[1]=#$0D) then begin
//перебираем базу
for i:=1 to max do begin
//если нашли, то обнуляем
if (ItemBase[1,i]=ReadD(6)) then begin //ObjectID
ItemBase[1,i]:=0; //x
ItemBase[2,i]:=0; //x
ItemBase[3,i]:=0; //y
ItemBase[4,i]:=0; //z
dec(itm);
say('Удаляем данные по предмету');
end;
end;
if itm=0 then begin
needbackup:=false;
timer1.enabled:=true;
end;
say('ColvoItm='+inttostr(itm));
end;