Рейтинг@Mail.ru
Mass Sweep - Форум atms
Главная Мой профиль Регистрация Выход Вход
- Пятница, 11:09:1
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Скриптинг L2PHX "Lineage C4" (Давно заброшенный раздел) » Скрипты L2PHX "для хроник С4" » Mass Sweep
Mass Sweep
ПользовательДата: Вторник, 01 Января 2013, 23:17 | Сообщение # 1
Некто
Группа: Обычный пользователь
Сообщений: 141
Репутация: 19
Статус: Нет на форме
Код
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.


Да хранит вас Ctrl+S.
Да убережет вас Alt+F4 от порнобанера.
Админь...
 
Форум » Скриптинг L2PHX "Lineage C4" (Давно заброшенный раздел) » Скрипты L2PHX "для хроник С4" » Mass Sweep
  • Страница 1 из 1
  • 1
Поиск:

atms 2009 © 2024