Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Кривой цикл

Рег
24 Ноя 2015
Сообщения
21
Реакции
0
Создал скрипт на авто возвращение на спот. Сделал все в цикл. Все хорошо. Сам встает, сам делает тп, добегает до спота, включает интерфейс. И берет начинает скрипт сначала . . . Т.е. берет и в тупую делает тп . . .
Код:
var obj: TL2NPC;
    obj2: TL2Effect;

   Enemy: TL2Live;
        Begin
    while 1<>2 do begin   
    
      if User.Dead then  
       begin
       Engine.FaceControl(0,false);
            Engine.gohome;
            delay(15000);
        end;
end;
// Летим куда-то
begin
   Engine.BypassToServer('_bbshome');
Delay (500);
   Engine.BypassToServer('15');
Delay (500);
   Engine.BypassToServer('15');
Delay (500);
   Engine.BypassToServer('11');
Delay (1000);
   begin  
  Engine.ConfirmDialog(true);  // отказ  true согласие
//Также именно ЭТА команда отвечает за принятие\отказ (респа,трейда и т.д. не только ивенты)  
  delay(5000);
end; 
end;
  begin  
 Engine.MoveTo(4264, 243592, -1920);
 Engine.MoveTo(2808, 242344, -2288);
 Engine.MoveTo(2488, 240792, -2704);
end;
       while User.inrange(2488, 240792, -2704, 250, 150) do begin
            delay(2500);
            Engine.FaceControl(0,true);
end;

end;

end.
 
Вроде как-то так:

Код:
var
    obj: TL2NPC;
    obj2: TL2Effect;
    Enemy: TL2Live;
Begin
    while true do begin   
        if User.Dead then begin
            Engine.FaceControl(0,false);
            Engine.gohome;
            delay(15000);
            
            Engine.BypassToServer('_bbshome');
            Delay (500);
            Engine.BypassToServer('15');
            Delay (500);
            Engine.BypassToServer('15');
            Delay (500);Engine.BypassToServer('11');
            Delay (1000);
            Engine.ConfirmDialog(true);
            delay(5000);
            Engine.MoveTo(4264, 243592, -1920);
            Engine.MoveTo(2808, 242344, -2288);
            Engine.MoveTo(2488, 240792, -2704);
            If User.inrange(2488, 240792, -2704, 250, 150) then begin
                delay(2500);
                Engine.FaceControl(0,true);
            end;        
        end;
    end;
end.
 
@BreadfanLock, К сожалению нет. При запуске скрипта, он вообще ничего не делает. Просто стоит.
 
@IntelTwix,
У меня, например, на твой один end; в конце ругается бот, да и он лишний. У тебя с ним норм запускается скрипт?
Что если так:
Код:
var obj: TL2NPC;
    obj2: TL2Effect;

   Enemy: TL2Live;
        Begin
    while 1<>2 do begin   
    
      if User.Dead then  
       begin
       Engine.FaceControl(0,false);
            Engine.gohome;
            delay(15000);
        end;

   Engine.BypassToServer('_bbshome');
Delay (500);
   Engine.BypassToServer('15');
Delay (500);
   Engine.BypassToServer('15');
Delay (500);
   Engine.BypassToServer('11');
Delay (1000);
   begin  
  Engine.ConfirmDialog(true);  // отказ  true согласие
//Также именно ЭТА команда отвечает за принятие\отказ (респа,трейда и т.д. не только ивенты)  
  delay(5000);
end; 
end;
  begin  
 Engine.MoveTo(4264, 243592, -1920);
 Engine.MoveTo(2808, 242344, -2288);
 Engine.MoveTo(2488, 240792, -2704);
end;
       while User.inrange(2488, 240792, -2704, 250, 150) do begin
            delay(2500);
            Engine.FaceControl(0,true);
end;


end.
 
Переделал скрипт, но теперь он почему то при смерти не летит в город. . . Когда же он запашет как надо!!!
Код:
procedure check_death();
begin
  if (user.dead) then begin
    print('Умер, воскрешаюсь');
    engine.FaceControl(0, false);
    while (user.dead) do begin
      if engine.GoHome() then delay(3333+random(1111));      
      if (not user.dead) then delay(5555);
       end;
    end;
end;
// Летим куда-то
begin
   Engine.BypassToServer('_bbshome');
Delay (500);
   Engine.BypassToServer('15');
Delay (500);
   Engine.BypassToServer('15');
Delay (500);
   Engine.BypassToServer('11');
Delay (1000);
   begin  
  Engine.ConfirmDialog(true);  // отказ  true согласие
//Также именно ЭТА команда отвечает за принятие\отказ (респа,трейда и т.д. не только ивенты)  
  delay(5000);
end; 
  begin  
 Engine.MoveTo(4264, 243592, -1920);
 Engine.MoveTo(2808, 242344, -2288);
 Engine.MoveTo(2488, 240792, -2704);
end;
       while User.inrange(2488, 240792, -2704, 250, 150) do begin
			delay(2500);
			Engine.FaceControl(0,true);
end;
begin
  while (engine.status <> lsOnline) do delay(1111);  // Ждем, пока персонаж не войдет в игру
  while true do begin  // Запускаем бесконечный цикл
    while (engine.status = lsOnline) do begin  // Пока в игре крутим проверку
      delay(1111);
      end;
      end;
      end;
      end.
 
@IntelTwix,
Блин, с альт+б тп не делал скрипты, только через точки респа и нпц.
А твой скрипт из первого поста нормально у тебя запускается? Там в конце один end вроде же лишний.
Сделай тп вручную и пропиши /loc, скажи координаты, которые в сис. чат напишет.
Давай еще попробуем методом тыка:
Код:
var
   obj: TL2NPC;
   obj2: TL2Effect;
   Enemy: TL2Live;
    
begin
   while 1<>2 do begin
   if User.Dead then begin
   Engine.FaceControl(0,false);
   Engine.gohome;
   delay(15000);
end;

begin
   Engine.BypassToServer('_bbshome');
   Delay (500);
   Engine.BypassToServer('15');
   Delay (500);
   Engine.BypassToServer('15');
   Delay (500);
   Engine.BypassToServer('11');
   Delay (1000);
end;

begin
   Engine.ConfirmDialog(true);
   delay(5000);
end;

begin
   Engine.MoveTo(4264, 243592, -1920);
   Engine.MoveTo(2808, 242344, -2288);
   Engine.MoveTo(2488, 240792, -2704);
end;

   while User.inrange(2488, 240792, -2704, 250, 150) do begin
   delay(2500);
   Engine.FaceControl(0,true);
end;
end;
end.
 
@YUS74S, end и правда лишний, не спорю. Без него запускается но работает криво.

Ура товарищи, скрипт сделал. Заменил часть.
Всем большое спасибо за помощь!

Procedure ControlDead;
begin
while not user.dead do
delay(10000);
Script.Suspend;
Engine.FaceControl(0,false);
delay(random(3000));
Engine.gohome;
Print('Убили негра');
delay(5000);
Script.Replace;
end;

begin
script.newthread(@ControlDead);
// Летим куда-то
begin
Engine.BypassToServer('_bbshome');
Delay (500);
Engine.BypassToServer('15');
Delay (500);
Engine.BypassToServer('15');
Delay (500);
Engine.BypassToServer('11');
Delay (1000);
begin
Engine.ConfirmDialog(true); // отказ true согласие
//Также именно ЭТА команда отвечает за принятие\отказ (респа,трейда и т.д. не только ивенты)
delay(5000);
end;
begin
Engine.MoveTo(4264, 243592, -1920);
Engine.MoveTo(2808, 242344, -2288);
Engine.MoveTo(2488, 240792, -2704);
end;
while User.inrange(2488, 240792, -2704, 250, 150) do begin
delay(2500);
Engine.FaceControl(0,true);
end;
begin
while (engine.status <> lsOnline) do delay(1111); // Ждем, пока персонаж не войдет в игру
while true do begin // Запускаем бесконечный цикл
while (engine.status = lsOnline) do begin // Пока в игре крутим проверку
delay(1111);
end;
end;
end;
end;
end.

Может кому пригодится.
 
честно говоря, итоговый вариант напоминает Франкенштейна - слепленный из разнообразных чужих кусков :lol:
 
Назад
Сверху