SoundShocking написал(а):
if(User.Target.Dead) or (User.Target = nil) or (user.distto(user.target)>111) then Engine.AutoTarget(111);
В таком случае нужно буде ещё и реализовывать атаку мобов, спойл, свип и т.д., т.е. писать свой движок атаки, с исключением, короче геморой приличный, ну или же остановится на опции "ручной поиск цели", тогда да, всё работает. Ну и так как кое кто заинтересовался скриптом - паровозам, выкладываю тут заготовку:
uses Classes, SysUtils;
var obj: TL2NPC;
obj2: TL2Effect;
NovObj: TL2Skill;
buff: TL2Buff;
Enemy: TL2Live;
char: TL2User;
Spel: TL2Control;
function farm : Boolean;//проверка наличия мобов поблизости
var j, k: Integer;
begin
k := 0;
for j := 0 to NpcList.Count - 1 do
begin
if ((user.distto(npclist.items(j)) < 550) and (not NpcList.Items(j).Dead) and (not NpcList.Items(j).isPet)) then
inc(k);
end;
Result := k > 0;
end;
procedure IfDead;//Если умерли
begin
if User.Dead then // умер- вырубаем интерфейс, возврат в город и пауза 120 секунд
begin
Engine.FaceControl(1,false);
delay(1000);
Engine.FaceControl(4,false);
delay(15000);
Engine.FaceControl(0,false);
end;
end;
function Check : Boolean;//Блок проверок
begin
if User.Dead and (Engine.Status = lsOnline) and then Result := true else Result := false;
end;
begin
while 1=1 do
begin
delay(1000);
IfDead;
// румпа //трёх позиционная
if (user.inrange(Точка 1,300,150) and Check) then
begin
Engine.UseSkill(286); //Захат мобов 1
Engine.DMoveTo(Точка 2); //Бежим во вторую точку
delay(4500);
if not user.inrange(Точка 2,200,150) and Check then //если не дошли, то прыгаем и бежим туда же
begin
Engine.UseSkill(628);
Engine.DMoveTo(Точка 2);
delay(4500);
end;
Engine.UseSkill(286); //Захат мобов 2
Engine.DMoveTo(Точка 3); //переход к точке где будем атаковать
delay(4500);
if not user.inrange(Точка 3,200,150) and Check then //если не дошли, то прыгаем и бежим туда же
begin
Engine.UseSkill(628);
Engine.DMoveTo(Точка 3);
delay(4500);
end;
Engine.UseSkill(286); //Захат мобов 3
end;
if (user.inrange(Точка 3,700,150) and Check) then //атака мобов
begin
while (farm=true and Check) do //Пока рядом есть мобы
begin
Engine.FaceControl(1,true);
if not user.inrange(Точка 3,200,150) and Check then //Если вышли из зоны атаки то возвращаемся
begin
Engine.FaceControl(1,false);
Engine.MoveTo(Точка 3);
end;
delay(1000);
end;
if not MobsAttacking then
begin
Engine.UseSkill(444);
Engine.FaceControl(1,false);
Engine.MoveTo();
Engine.MoveTo(); //переход к следующей румпе
end;
end;
end;
end.
Скрипт не писал для общего доступа, как бы писал сам и под себя и под свой сервак, у чара есть и масс спойл и масс свип и от камы прыжёк, и от копейщика провокация, поэтому сильно не ругайте, ну и лайки очень нужны если кому помог) Ну и скрипт я ещё не доделал до конца, в планах сделать просто вставку точек фарма и перехода в блок констант, ну и вывести основной скрипт в процедуру, а то приходится сейчас расписывать каждую комнату по отдельности... но это если руки дойдут
Незнаю почему, но сюда вставляется код с большими отступами..., в редакторе notepad++ норм всё)