Массовый сбор (Mass Sweep)

Раздел посвященный скриптам для бота
Ответить
Spr1te
Куда я попал
Сообщения: 38
Зарегистрирован: Вс окт 14, 2018 2:15 pm

Пт фев 08, 2019 11:10 am

Добрый день, ищу скрипт на масс свип на классике. Спойлер пропускает мертвых мобов т.к. переключается на нексттаргет, нужно что бы подбирал все трупы без таргета
IvaniuS ответил в скайпе что уже есть такой,но я не смогу найти за несколько дней
FJIAHKEP
Флудер
Сообщения: 102
Зарегистрирован: Пт ноя 20, 2015 5:43 am
Контактная информация:

Пт фев 08, 2019 7:54 pm

Spr1te писал(а):Добрый день, ищу скрипт на масс свип на классике. Спойлер пропускает мертвых мобов т.к. переключается на нексттаргет, нужно что бы подбирал все трупы без таргета
IvaniuS ответил в скайпе что уже есть такой,но я не смогу найти за несколько дней
Ну есть так есть (()) , дальше сам разберешься?

Свипает всех мёртвых и заспойленных мобов вокруг в указаннорм радиусе (полезен, если на вашем сервере у спойлеров нет скилла Массовое Присвоение)

Код: Выделить всё

procedure SweepThread(dist: integer);
var
  sweep: TL2Skill;
  mob: TL2Npc;
  point: TXYZ;
begin
  while Delay(500) do begin                          // запускаем бесконечный цикл
    if (Engine.Status = lsOnline)                    // если мы онлайн
    and SkillList.ByID(42, sweep) then begin         // и у нас есть умение Sweep [id: 42], то
      mob:= GetNearestSweepableMob(dist);            // ищем ближайшего моба которого можно свипать
      if (mob <> nil) then begin                     // если моба найден, то 
        if Engine.SetTarget(mob) then Delay(99);     // берем в таргет моба
        if (User.DistTo(mob) > 100) then begin       // если дистацния до моба > 100, то
          point:= CalcXYZ(User, mob, -20);           // вычисляем координаты точки, чтобы подойти на дистацию свипа
          if Engine.MoveTo(point.X, point.Y, point.Z) then Delay(500);   // подходим в найденную точку
        end;
        if Engine.UseSkill(sweep) then               // если мы успешно использовали свип, то
          while (sweep.EndTime <> 0) do Delay(99);   // ждем пока он не откатится
      end;
    end;
  end;
end;

function GetNearestSweepableMob(dist: integer): TL2Npc;   // возвращает ближайшего моба, которого можно свипать
var i: integer;
begin
  Result:= nil;
  for i:= 0 to NpcList.Count-1 do begin       // пробегаем по списку NPC вокруг нас
    if (NpcList(i).Valid)                     // если моб валиден
    and (User.DistTo(NpcList(i)) < dist)      // и дистанция до него меньше максимально допустимой
    and (NpcList(i).Dead)                     // и этот моб мертв
    and (NpcList(i).Sweepable) then begin     // и с него можно собрать спойл
      Result:= NpcList(i);                    // то запоминаем его в результат
      dist:= User.DistTo(NpcList(i));         // обновляем значение максимально допустимой дистанции
    end;
  end;
end;

begin
  Script.NewThread(@SweepThread, Pointer(300));   // вторым агрументов указываем макс дистанцию для свипа
  // code...
  
  Delay(-1);
end.
Spr1te
Куда я попал
Сообщения: 38
Зарегистрирован: Вс окт 14, 2018 2:15 pm

Пт фев 08, 2019 10:38 pm

FJIAHKEP писал(а):
Spr1te писал(а):Добрый день, ищу скрипт на масс свип на классике. Спойлер пропускает мертвых мобов т.к. переключается на нексттаргет, нужно что бы подбирал все трупы без таргета
IvaniuS ответил в скайпе что уже есть такой,но я не смогу найти за несколько дней
Ну есть так есть (()) , дальше сам разберешься?

Свипает всех мёртвых и заспойленных мобов вокруг в указаннорм радиусе (полезен, если на вашем сервере у спойлеров нет скилла Массовое Присвоение)

Код: Выделить всё

procedure SweepThread(dist: integer);
var
  sweep: TL2Skill;
  mob: TL2Npc;
  point: TXYZ;
begin
  while Delay(500) do begin                          // запускаем бесконечный цикл
    if (Engine.Status = lsOnline)                    // если мы онлайн
    and SkillList.ByID(42, sweep) then begin         // и у нас есть умение Sweep [id: 42], то
      mob:= GetNearestSweepableMob(dist);            // ищем ближайшего моба которого можно свипать
      if (mob <> nil) then begin                     // если моба найден, то 
        if Engine.SetTarget(mob) then Delay(99);     // берем в таргет моба
        if (User.DistTo(mob) > 100) then begin       // если дистацния до моба > 100, то
          point:= CalcXYZ(User, mob, -20);           // вычисляем координаты точки, чтобы подойти на дистацию свипа
          if Engine.MoveTo(point.X, point.Y, point.Z) then Delay(500);   // подходим в найденную точку
        end;
        if Engine.UseSkill(sweep) then               // если мы успешно использовали свип, то
          while (sweep.EndTime <> 0) do Delay(99);   // ждем пока он не откатится
      end;
    end;
  end;
end;

function GetNearestSweepableMob(dist: integer): TL2Npc;   // возвращает ближайшего моба, которого можно свипать
var i: integer;
begin
  Result:= nil;
  for i:= 0 to NpcList.Count-1 do begin       // пробегаем по списку NPC вокруг нас
    if (NpcList(i).Valid)                     // если моб валиден
    and (User.DistTo(NpcList(i)) < dist)      // и дистанция до него меньше максимально допустимой
    and (NpcList(i).Dead)                     // и этот моб мертв
    and (NpcList(i).Sweepable) then begin     // и с него можно собрать спойл
      Result:= NpcList(i);                    // то запоминаем его в результат
      dist:= User.DistTo(NpcList(i));         // обновляем значение максимально допустимой дистанции
    end;
  end;
end;

begin
  Script.NewThread(@SweepThread, Pointer(300));   // вторым агрументов указываем макс дистанцию для свипа
  // code...
  
  Delay(-1);
end.

На классике есть масс свип, но спасибо за этот скрипт, попробую настроить
Ответить