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 // running through the list of mobs
if (NpcList(i).Team <> 0) and // if mob is champion and
(User.DistTo(NpcList(i)) < R) and // distance to mob < search radius and
(Abs(User.Z - NpcList(i).Z) < 500) then begin // the difference in absolute value of the Z coordinate of the bot and mob is < 500, then
Print('Detected champion: '+NpcList(i).Name+', [HP: '+IntToStr(NpcList(i).CurHP)+'], Dist: '+IntToStr(User.DistTo(NpcList(i))));
// then we do what is needed, the following will be enough simple steps without special checks
Engine.FaceControl(1, false); // turn off combat in bot
point:= CalcXYZ(User, NpcList(i), 500); // calculate coordinates where it is necessary to run up to the champion
Engine.MoveTo(point.X, point.Y, point.Z); // run to the mob
Engine.SetTarget(NpcList(i)); // take it to target
Engine.FaceControl(1, true); // turn on combat back
break; // do not forget to exit the loop
end;
end;
end;
end;
end;
begin
Script.NewThread(@FindChampionsThread);
// code ...
Delay(-1);
end.