uses SysUtils;
var CenterX,CenterY,CenterZ,NowRadius,NowAngle: integer;
GuardName:string;
DisableBot:boolean;
Obj:Tl2Live;
procedure GoToPoint(X,Y,Z,Radius,Angle:integer); //Расчёт конечной точки с учетом угла
begin
Engine.MoveTo(X+trunc(Radius*sin(Angle)),Y+trunc(Radius*cos(Angle)),Z+20); //Z чуть добавляем, иначе будет тупить на неровной поверхности и пытаться "закопаться" - спорный момент, можно не добавлять.
end;
function MobAggrToMe:boolean; //Проверка на атакующих меня мобов
var num:integer;
begin
result:=false; //"не пойман-не вор!" (с)
for num:=0 to NpcList.Count - 1 do //Если я хоть у одного из окружающих живых мобов в таргете - пора бежать
if (NpcList.Items(num).Target=User) and not(NpcList.Items(num).Dead) then begin
result:=true; //пора бежать!
exit;
end;
end;
begin
GuardName:='СуперДД'; //Имя защитника (вокруг кого бегать)
NowRadius:=150; //Радиус, по которому бегать вокруг Защитника
NowAngle:=0; //Начальный угол (можно не трогать)
DisableBot:=true; //Отключать остальные функции бота пока бегаем от мобов (хил, бафф и т.п.)
while true do begin //Бесконечный цикл
CharList.ByName(GuardName,Obj); //В каждом цикле обновляем координаты защитника
CenterX:=Obj.X; //X
CenterY:=Obj.Y; //Y
CenterZ:=Obj.Z; //Z
if MobAggrToMe then begin
if DisableBot then Engine.FaceControl(0,false);
GoToPoint(CenterX,CenterY,CenterZ,NowRadius,NowAngle); //Двигаемся вокруг защитника с изменяющимся углом
NowAngle:=NowAngle+20; //Шаг угла
if NowAngle>=340 then NowAngle:=0; //Если перевалило за 340 градусов, обнуляем (360 лучше не ставить)
end
else if DisableBot then Engine.FaceControl(0,true);
end;
end.
Взято с TopHope
var CenterX,CenterY,CenterZ,NowRadius,NowAngle: integer;
GuardName:string;
DisableBot:boolean;
Obj:Tl2Live;
procedure GoToPoint(X,Y,Z,Radius,Angle:integer); //Расчёт конечной точки с учетом угла
begin
Engine.MoveTo(X+trunc(Radius*sin(Angle)),Y+trunc(Radius*cos(Angle)),Z+20); //Z чуть добавляем, иначе будет тупить на неровной поверхности и пытаться "закопаться" - спорный момент, можно не добавлять.
end;
function MobAggrToMe:boolean; //Проверка на атакующих меня мобов
var num:integer;
begin
result:=false; //"не пойман-не вор!" (с)
for num:=0 to NpcList.Count - 1 do //Если я хоть у одного из окружающих живых мобов в таргете - пора бежать
if (NpcList.Items(num).Target=User) and not(NpcList.Items(num).Dead) then begin
result:=true; //пора бежать!
exit;
end;
end;
begin
GuardName:='СуперДД'; //Имя защитника (вокруг кого бегать)
NowRadius:=150; //Радиус, по которому бегать вокруг Защитника
NowAngle:=0; //Начальный угол (можно не трогать)
DisableBot:=true; //Отключать остальные функции бота пока бегаем от мобов (хил, бафф и т.п.)
while true do begin //Бесконечный цикл
CharList.ByName(GuardName,Obj); //В каждом цикле обновляем координаты защитника
CenterX:=Obj.X; //X
CenterY:=Obj.Y; //Y
CenterZ:=Obj.Z; //Z
if MobAggrToMe then begin
if DisableBot then Engine.FaceControl(0,false);
GoToPoint(CenterX,CenterY,CenterZ,NowRadius,NowAngle); //Двигаемся вокруг защитника с изменяющимся углом
NowAngle:=NowAngle+20; //Шаг угла
if NowAngle>=340 then NowAngle:=0; //Если перевалило за 340 градусов, обнуляем (360 лучше не ставить)
end
else if DisableBot then Engine.FaceControl(0,true);
end;
end.
Взято с TopHope