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.