Показать сообщение отдельно
Старый 06.05.2008, 10:51   #4
Новичок
 
Регистрация: 22.04.2008
Сообщений: 21
Сказал Спасибо: 8
Имеет 26 спасибок в 6 сообщенях
poizon пока неопределено
По умолчанию

короче я сделал сюда пару строчек чтобы спойлить можно было для этого надо ещё запустить скрипт (был выложен в да будет бот)

delphi Код:
//Автоматизация sweep'а by APXAHGEJI //Свип производится тока при условии что моб был ,хоть один раз, ударен ВАМИ и //находится в списке нужных мобов. //Возможность работы нескольких одновременных скриптов //Социальное действие YES - запусстить/приостановить запись/АвтоСвип мобов //Социальное действие NO остановиться - завершить запись мобов и перейтии к АвтоСвип //После того как скрипт запущен нажимаете Yes и атакуете мобов //которых собираетесь спойлить. Атакуете до тех пор пока не появилась запись //что моб записан. Для удобства процесс записи можно приостановить нажатие той же //клавиши Yes. После того как все нужные мобы записаны жмакаете NO, запись мобов //завершается, АвтоСвип запускается, можете приступать к спойлу. АвтоСвип можно //приостановить нажав всю туже клавишу соцдействия Yes, но запись мобов под АвтоСвип //не остановится, и снова активировав, все нужные мобы просвипятся. Const   Name='имя перса';   Sweep='2F 2A 00 00 00 00 00 00 00 00'; Var   TimerSweep,TimerDel: TTimer;   N,M,i,NpcNum: Byte;   X,Y,Z,CharID: Integer;   NpcTypeID,TargetID: array of Integer;   NeedSweep,Dead: array of Boolean;   Switch,SaveID,HaveNpc: Boolean; //****************************************************************************** //                      Вызывается при включении скрипта //****************************************************************************** Procedure Init; begin   N:= 1;   M:= 1;   Switch:= False;   SaveID:= True;   SetLength( NpcTypeID, N );   SetLength( TargetID, N );   TimerSweep:=TTimer.Create(nil);   TimerSweep.OnTimer:=@Sweeper;   TimerSweep.Enabled:= False;   TimerSweep.Interval:= 1000;   TimerDel:=TTimer.Create(nil);   TimerDel.OnTimer:=@Del;   TimerDel.Enabled:= False;   TimerDel.Interval:= 5000;   Say('Нажмите Yes, чтобы начать/приостановить');   Say('запись мобов или АвтоСвип.');   Say('Нажмите No, чтобы завершить запись мобов');   Say('и приступить к сполйу.'); end; //****************************************************************************** //****************************************************************************** //                        Вызывается при выключении скрипта //****************************************************************************** Procedure Free; begin   TimerSweep.Free;   TimerDel.Free; end; //****************************************************************************** //****************************************************************************** //             Посылаем сообщение, которое видно только в окне бота //****************************************************************************** Procedure Say(msg:string); begin   buf:=hstr('4A 00 00 00 00');   WriteD(2);   WriteS(Name);   WriteS(msg);   SendToClientEx(Name); end; //****************************************************************************** //****************************************************************************** //                     Проверка наличия ИД моба в массиве //****************************************************************************** Procedure FindMob(ObjectID: Integer); begin   HaveNpc:= False;   NpcNum:= M;   For i:=0 to (M-1) do    If (ObjectID=TargetID[i]) then begin      NpcNum:= i;      HaveNpc:= True;      break;    end Else      If (TargetID[i]= 0) and (NpcNum = M) then NpcNum:= i; end; //****************************************************************************** //****************************************************************************** // Запуск свипа каждые n секунд (n= Timer.Interval) //****************************************************************************** Procedure Sweeper(Sender: TObject); begin   For i:=0 to (M-1) do     If NeedSweep[i] and Dead[i] then begin       buf:= #$04;       WriteD(TargetID[i]);       WriteD(X);       WriteD(Y);       WriteD(Z);       WriteC(00);       SendToServerEx(Name);       buf:=HStr(Sweep);       SendToServerEx(Name);       NeedSweep[i]:= False;       exit;     end; end; //****************************************************************************** //****************************************************************************** //Удаление списка при отстуствии записей о мобах //****************************************************************************** Procedure Del(Sender: TObject); begin   For i:=0 to (M-1) do     If (TargetID[i]<>0) then exit;   M:= 0;   SetLength(TargetID, M);   SetLength(NeedSweep, M);   SetLength(Dead, M);   TimerDel.Enabled:= False;   TimerSweep.Enabled:= False; end; //****************************************************************************** //****************************************************************************** //     Вызывается при приходе каждого пакета, если скрипт включен //****************************************************************************** Begin   //****************************************************************************   //Не обрабатываем пустые пакеты   If pck='' then exit;   //****************************************************************************   //****************************************************************************   //Если от сервака принят пакет UserInfo. Запоминаем собственный ИД.   If FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharID:= ReadD(18);   //****************************************************************************   //****************************************************************************   //Переключение между записью ИД и АвтоСвипом   If SaveID then begin     //**************************************************************************     //Делаем выборку нужных для свипа видов мобов     //**************************************************************************     if Switch then       if FromServer and (ConnectName=Name) then         if (pck[1]=#$05) and (ReadD(2)=CharID) then begin           FindMob(ReadD(6));           If not HaveNpc then begin             TargetID[N-1]:= ReadD(6);             Inc(M);             SetLength( TargetID, M );           end;         end;         If (pck[1]=#$16) then           For i:=0 to (M-1) do             if (ReadD(2) = TargetID[i]) then begin               For NpcNum:= 0 to (N-1) do                 If (ReadD(6)= NpcTypeID[NpcNum]) then exit;               NpcTypeID[N-1]:= ReadD(6);               Say(IntToStr(N)+' вид мобов записан');               Inc(N);               SetLength( NpcTypeID, N );               exit;             end;     //**************************************************************************     //Управление записью мобов     //**************************************************************************     If FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin       If (ReadD(2)=6) then         if Switch then begin           pck:='';           Switch:= False;           Say('Запись мобов приостановлена');         end         else begin           pck:='';           Switch:= True;           Say('Начата запись мобов, атакуйте нужных мобов');         end;       If (ReadD(2)=5) then begin         pck:='';         Dec(N);         M:= 0;         SetLength(NpcTypeID, N);         SetLength(TargetID, M);         SetLength(NeedSweep, M);         SetLength(Dead, M);         SaveID:= False;         Switch:= True;         Say('Запись мобов завершена, АвтоСвип активирован');         Say('Удачного спойла');       end;     end;     //**************************************************************************   end   //****************************************************************************   //****************************************************************************   //Переходим от записи нужных мобов к АвтоСвипу   Else begin   //****************************************************************************     //**************************************************************************     //Записываем текущие координаты     if FromClient and (ConnectName=Name) and (pck[1]=#$48) then begin       X:= ReadD(2);       Y:= ReadD(6);       Z:= ReadD(10);     end;     //**************************************************************************      //**************************************************************************     //Анализ мобов :=))     If FromServer and (ConnectName=Name) then begin       //************************************************************************       //Записываем всех атакованых нами мобов (пакет Attack, причем Attacker=CharID)       If ((pck[1]= #$05) and (ReadD(2)= CharID)) then begin         FindMob(ReadD(6));         If not HaveNpc then           If (NpcNum <> M) then begin             TargetID[NpcNum]:= ReadD(6);             NeedSweep[NpcNum]:= False;             Dead[NpcNum]:= False           end Else begin             Inc(M);             SetLength(TargetID, M);             SetLength(NeedSweep, M);             SetLength(Dead, M);             TargetID[M-1]:= ReadD(6);             NeedSweep[M-1]:= False;             Dead[M-1]:= False;             If Switch then TimerSweep.Enabled:= True;             TimerDel.Enabled:= True;           end;       end;       //************************************************************************       //Проверяем есть ли в списке мобы       if (M <> 0) then begin         //**********************************************************************         //Проверяем тот ли вид моба атакован (пакет NpcInfo)         If (pck[1]= #$16) then begin           FindMob(ReadD(2));           If HaveNpc and (not NeedSweep[NpcNum]) then begin             For i:=0 to (N-1) do               If (ReadD(6)= NpcTypeID[i]) then begin                 HaveNpc:= False;                 Break;               end;             If not HaveNpc then NeedSweep[NpcNum]:= True;           end;         end;         //**********************************************************************         //Записываем что атакованый моб умер (пакет Die, причем Sweepable=1)         If (pck[1]= #$06) and (pck[22]= #$01) then begin           FindMob(ReadD(2));           If HaveNpc then Dead[NpcNum]:= True;         end;         //**********************************************************************         //Удаляем записи об атакованом мобе (пакет DeleteObject)         If (pck[1]= #$12) then  begin           FindMob(ReadD(2));           If HaveNpc then begin             TargetID[NpcNum]:= 0;             NeedSweep[NpcNum]:= False;             Dead[NpcNum]:= False;           end;         end;         //**********************************************************************       end;       //************************************************************************     end;     //**************************************************************************     //**************************************************************************     //Запускаем/приостанавливаем АвтоСвип     //**************************************************************************     If FromClient and (ConnectName=Name) and (pck[1]=#$1B) and (ReadD(2)=6) then       if Switch then begin         pck:='';         TimerSweep.Enabled:= False;         Switch:= False;         Say('АвтоСвип приостановлен');       end       else begin         pck:='';         TimerSweep.Enabled:= True;         Switch:= True;         Say('АвтоСвип запущен');       end;     //**************************************************************************   end;   //**************************************************************************** End. //******************************************************************************  
этот скрипт запускаем настраиваем

а в боте незабудкина процедуру phisicalattack меняем на вот такую
delphi Код:
procedure PhisicalAttack;          // команда атаки var ppp1: integer; begin buf:=#$04; //action   WriteD(TargetID);   WriteD(MyX);   WriteD(MyY);   WriteD(MyZ);   WriteC(0);   SendToServerEx(NickName); if ppp1 = targetid then begin ppp1:= targetid end else begin buf:=HStr('2F FE 00 00 00 00 00 00 00 00');      //spoil   SendToServerEx(NickName); End;      ppp1:= targetid end;
всё работает кидает спойл на моба 1 раз а другой крипт свипит

Последний раз редактировалось Grinch, 21.05.2008 в 21:33.
poizon вне форума   Ответить с цитированием
За это сообщение poizon нажился 6 спасибками от: