uses SysUtils;
procedure FindChampionsThread(R: integer = 2000);
var i: integer; point: TXYZ;
begin
while delay(555) do begin
if (Engine.Status = lsOnline) then begin
for i:= 0 to NpcList.Count-1 do begin // пробегаем по списку мобов
if (NpcList(i).Team <> 0) and // если моб - чемпион и
(User.DistTo(NpcList(i)) < R) and // дистанция до моба < радиуса поиска и
(Abs(User.Z - NpcList(i).Z) < 500) then begin // разность по модулю координаты Z бота и моба < 500, то
Print('Обнаружен чемпион: '+NpcList(i).Name+', [HP: '+IntToStr(NpcList(i).CurHP)+'], Dist: '+IntToStr(User.DistTo(NpcList(i))));
// далее делаем то, что нужно, ниже будет приведен достаточно простые действия без особых проверок
Engine.FaceControl(1, false); // выключаем боевку в боте
point:= CalcXYZ(User, NpcList(i), 500); // вычисляем координаты куда нужно подбежать к чемпиону
Engine.MoveTo(point.X, point.Y, point.Z); // бежим к мобу
Engine.SetTarget(NpcList(i)); // берем его в таргет
Engine.FaceControl(1, true); // включаем боевку обратно
break; // не забываем выйти из цикла
end;
end;
end;
end;
end;
begin
Script.NewThread(@FindChampionsThread);
// code ...
Delay(-1);
end.