Перейти к содержимому

Фотография
* * * * * 1 Голосов

Помогите с доделкой скрипта на Фарм Рифта(РБ) Interlude


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 20

#1
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

Пишу скрипт на своём ломаном языке программирования.  смысл в чем , если скрипт взял в таргет Anakazel то бот включается, после убийства надо что бы бот отключился и пошел к нпц телепорту и улетел в мирную зону рифта. 
А теперь вопрос!
Как сделать проверку на то что бы бот понял когда отключиться и продолжить выполнение скрипта дальше! 
Заранее благодарю!

 

 

Мой скрипт

var obj: TL2NPC; obj21: TL2Effect;
i:Integer;
begin
for i:=1 to 1000 do
begin
while true do begin
if User.Dead then begin
Engine.gohome;
delay(1000);
end;

if User.inrange(-115164,-181160,-6759, 450, 350) then begin
Engine.MoveTo(-114826,-182037,-6757);
end;

if User.inrange(-114776,-180482,-6757, 450, 350) then begin
Engine.MoveTo(-114632,-181061,-6759);
Engine.MoveTo(-114826,-182037,-6757);
end;
if User.inrange(-114410,-180901,-6759, 450, 350) then begin
Engine.MoveTo(-114826,-182037,-6757);
end;

if User.inrange(-114826,-182037,-6757, 250, 150) then begin

Engine.SetTarget(31493); // вход
delay(550);
Engine.DlgOpen();
delay(550);
Engine.ByPassToServer('00'); 
delay(13050);

Engine.SetTarget(25338); // id РБ

while user.target.name = ('Anakazel') do begin // включаем бота
delay(1500);
Engine.FaceControl(0,true);
end;

Engine.SetTarget(31865); // первое тп
delay(550);
Engine.DlgOpen();
delay(550);
Engine.ByPassToServer('00'); 
delay(13050);

Engine.SetTarget(25338); // id РБ

while user.target.name = ('Anakazel') do begin // включаем бота
delay(1500);
Engine.FaceControl(0,true);
end;

Engine.SetTarget(31865); //второе тп
delay(550);
Engine.DlgOpen();
delay(550);
Engine.ByPassToServer('01'); 

end;
end;
end;
end. 

Сообщение отредактировал katalizatorrr: 10 Август 2019 - 00:16

  • 0

#2
pups

pups

katalizatorrr, по поводу вопроса - можно сделать проверку через "хп цели = 0" или "цель.Dead", а можно и обе сразу засунуть)
по поводу циклов - очень интересный вариант с циклами... тоесть если у тебя в таргете коза, то через каждые 1,5 секунды скрипт включает интерфейс бота, но зачем? разве одного включения не достаточно? первый цикл, как я понимаю, просто для красоты
и еще интересно почему задержка именно 13050, это ты как-то высчитывал?


  • 0

#3
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

pups, По поводу задержки, с космоса взял цифры)))) суть циклов была в том что: 1 заход- проверка на рейд комнату если нет , то тп во второй раз, опять же проверка на рейд комнату, если нет рб то выход в мирную зону. 

Если же есть рб то включение бота, убийство РБ, выключение бота и тп в мирную зону.

Я еще думаю может всё это оптимизировать под процедуры, но я на процедурах еще не писал скрипты, если не получится первый вариант буду пробывать на процедурах.

 

 

Если честно я хз как это написать на языке адреналина(((( Если не сложно, можешь написать , что бы адренали понял это.

 "хп цели = 0" или "цель.Dead",

while user.target.name = ('Anakazel') do begin  // если имя в таргете Anakazel то ... 
while user.target.dead do begin // если таргет мерт то...
​

я правильно понял!? 

а вот с хп не могу разобраться


Сообщение отредактировал katalizatorrr: 10 Август 2019 - 01:52

  • 0

#4
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

1


Сообщение отредактировал katalizatorrr: 10 Август 2019 - 21:38

  • 0

#5
pups

pups

katalizatorrr, "шота пабырому напечатал, кое шо скапиравал, ничо ни праверял, но если шо - ставим лайкушы" - это как? зачем тогда вообще было начинать его делать?  :wtf:


Сообщение отредактировал pups: 10 Август 2019 - 11:14

  • 0

#6
BreadfanLock

BreadfanLock

есть жеж даже в сборнике от iRev скрипт на фарм зи\рифта.


  • 0
Не изготавливаю готовый код...

#7
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

pups, не было времени проверить.  при виде скрипта, может кто что нить подправил бы или направил на путь истинный


  • 0

#8
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

pups, ПРоверил, теперь загвоздка в том что в procedure Check_Anakazel ();-перс берет его в таргет , включает бота, бот начинает бить, и через пару секунд летит дальше выполнять квест. не могу понять почему он не добивает рб.  Помогите разобраться, пожалуйста!

// К”арм Љозы         
var obj: TL2NPC;
obj2: TL2Effect;
Enemy: TL2Live;

   
procedure dead;
begin
while (true) do
 if User.Dead then
 begin
 Engine.FaceControl(0,false);
 Engine.gohome;
 delay(2000);
 end;
 end;


procedure Rift();
begin
	if User.inrange(-115164,-181160,-6759, 450, 350) then begin
      Engine.MoveTo(-114826,-182037,-6757);
	end;  
	if User.inrange(-114776,-180482,-6757, 450, 350) then begin
      Engine.MoveTo(-114632,-181061,-6759);
      Engine.MoveTo(-114826,-182037,-6757);
	end;
    if User.inrange(-114410,-180901,-6759, 450, 350) then begin
      Engine.MoveTo(-114826,-182037,-6757);
    end;
	end;


 procedure Vxod();
 begin
 if User.inrange(-114826,-182037,-6757, 250, 150) then begin
      Engine.SetTarget(31493);               // вход
        delay(550);
      Engine.DlgOpen();
        delay(550);
      Engine.ByPassToServer('00');   
        delay(13050);
    end;
	end;
 
  procedure Room_1();
 begin
 
      Engine.SetTarget(31865);               // первое тп 
        delay(550);
      Engine.DlgOpen();
        delay(550);
      Engine.ByPassToServer('00');   
        delay(13050);
   
	end;
 
 procedure Room_2();
 begin
 
      Engine.SetTarget(31865);               //второе тп
        delay(550);
      Engine.DlgOpen();
        delay(550);
      Engine.ByPassToServer('01');   
        delay(550);
   
	end;

procedure Check_Anakazel ();
 begin        
 if User.InRange(-114780, -186431, -6747, 750, 300) then begin //комната с РБ 
     delay(666);
     print('Обнаружен РБ, фармим');
     delay(666);
farm ();
  
     end;
	end;
	
procedure farm ();
 begin
 if User.InRange(-114801, -186442, -6749, 750, 300) then begin //фарм
Engine.SetTarget(25338);
   Engine.FaceControl(0, true);
delay(666);
if User.Target.Dead then begin
	  delay(10111);   // задержка длЯ поднЯтиЯ дропа
      print('Убили РБ, уходим');
	Engine.FaceControl(0, false); 
      delay(500);
Engine.UseSkill(337); //выключить Ђркану повер
      delay(666);
	Engine.SetTarget(31865);               //второе тп
        delay(550);
      Engine.DlgOpen();
        delay(550);
      Engine.ByPassToServer('01');   
        delay(550);
Rift (); //повторЯем скрипт 
end;
end;
end;
           
begin
while 1<>2 do begin //бесконечный цикл

begin
Rift();
Vxod();
Check_Anakazel();
Room_1();
Check_Anakazel();
Room_2();
end;
end;
end.
 



     





Сообщение отредактировал katalizatorrr: 10 Август 2019 - 21:42

  • 0

#9
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

Спасибо кто принял участие в теме! Скрипт я допилил. остался один вопрос по работе процедуры. Кто может разъясните!

Почему требуется delay(175000);  после  Engine.FaceControl(0, true); если есть условие if User.Target.Dead then begin.

Если я правильно это всё понимаю, то после включения бота, скрипт не должен продолжится, пока цель в таргете не будет иметь стату Dead!?!??!

procedure farm ();

 begin
 Print('_farm');
 if User.InRange(-114801, -186442, -6749, 750, 300) then begin //фарм
     delay(1000);
   Engine.FaceControl(0, true);
   Print('true');
delay(175000);               // настройка времени фарма РБ
if User.Target.Dead then begin
    delay(10111);   // задержка длЯ поднЯтиЯ дропа
      print('Убили РБ, уходим');
	Engine.FaceControl(0, false);
	 Print('false');
      delay(500);
Engine.UseSkill(337); //выключить Аркану повер
    delay(666);
Room_2(); //повторЯем скрипт
end;
end;
end;

  • 0

#10
ScythLab

ScythLab

Если я правильно это всё понимаю
неправильно понимаешь. чтобы ждать чей-то смерти нужен цикл (while, repeat) или спец команды WaitXxx, здесь же тупо выставлено, что ты должен убить рб за 175 секунд, если убил, то скрипт отработает дальше, если не убил, то будет швах.

ты вообще этот скрипт запускал? у меня большие сомнения его в работоспособности.


  • 0

Хобби: разработка непубличного бота для Lineage


#11
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

ScythLab, самое интересное что скрипт работает, на форуме не полностью удачная версия, я его доработал. и вчера тестил часа 3 и он работает. Если интересно, то могу финальную версию в лс кинуть, что бы развеять твои сомнения. просто я самоучка в скриптописании. И все мои скрипты это анализ и подборка и тесты частей скриптов других людей. настраивал скрипт с большим количеством команд print, что бы видеть где он начинает неправильно работать.поэтому я и пишу на форуме , что бы узнать и понять что то новое для себя.


  • 0

#12
ScythLab

ScythLab

Если интересно, то могу финальную версию в лс кинуть, что бы развеять твои сомнения
не, спасибо))) мои сомнения они не мне должны быть интересны, а тебе, как обучающемуся. беглый взгляд на код (но в очередной раз повторюсь, читать неотформатированный код - гиблое дело, можно легко напортачить с выводами, а ты эту часть осваивать не хочешь) привел меня к определенным мыслям, скорей всего они корректны и вполне возможно, что в твоем случае все верно срабатывает, но если что-то пойдет не по четко запланированному варианту, то скрипт сдохнет.
  • 0

Хобби: разработка непубличного бота для Lineage


#13
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

ScythLab, Я с тобой согласен, в ближайщее время отформатирую код, и мне хотелось бы услышать твоё мнение, как человека разбирающегося, что бы понять что я делаю не так или как можно упростит скрипт.

"мои сомнения они не мне должны быть интересны, а тебе, как обучающемуся" вот поэтому я на форум и пошел, что бы услышать чужие мысли и попробовать что то новое. Ведь в программировании я разбираюсь не  очень((( 


  • 0

#14
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

скачал делфи, отформатировал код. вот что получилось.

// Фарм Козы
var
  obj: TL2NPC;
  obj2: TL2Effect;
  Enemy: TL2Live;

procedure dead;
begin
  while (true) do
    if User.dead then
    begin
      Engine.FaceControl(0, false);
      Engine.gohome;
      delay(2000);
    end;
end;

procedure Rift();
begin
  if User.inrange(-115164, -181160, -6759, 450, 350) then
  begin
    Engine.MoveTo(-114826, -182037, -6757);
  end;
  if User.inrange(-114776, -180482, -6757, 450, 350) then
  begin
    Engine.MoveTo(-114632, -181061, -6759);
    Engine.MoveTo(-114826, -182037, -6757);
  end;
  if User.inrange(-114410, -180901, -6759, 450, 350) then
  begin
    Engine.MoveTo(-114826, -182037, -6757);
  end;
end;

procedure Vxod();
begin
  if User.inrange(-114826, -182037, -6757, 250, 150) then
  begin
    Engine.SetTarget(31493); // вход
    delay(550);
    Engine.DlgOpen();
    delay(550);
    Engine.ByPassToServer('00');
    delay(13050);
  end;
end;

procedure Room_1();
begin
  Engine.SetTarget(31865); // первое тп
  delay(550);
  Engine.DlgOpen();
  delay(550);
  Engine.ByPassToServer('00');
  delay(13050);
end;

procedure Room_2();
begin
  Engine.SetTarget(31865); // второе тп
  delay(550);
  Engine.DlgOpen();
  delay(550);
  Engine.ByPassToServer('01');
  delay(550);
end;

procedure Check_Anakazel();
begin
  Print('Check');
  if User.inrange(-114780, -186431, -6747, 750, 300) then
  begin // комната с РБ
    delay(666);
    Print('Обнаружен РБ, фармим');
    delay(666);
    Engine.LoadZone('rift_rb');
    farm();
    Print('jump_farm');
  end;
end;

procedure farm();

begin
  Print('_farm');
  if User.inrange(-114801, -186442, -6749, 750, 300) then
  begin // фарм
    delay(1000);
    Engine.FaceControl(0, true);
    Print('true');
    delay(175000); // настройка времени фарма РБ

    if User.Target.dead then
    begin
      delay(10111); // задержка длЯ поднЯтиЯ дропа
      Print('Убили РБ, уходим');
      Engine.FaceControl(0, false);
      Print('false');
      delay(500);
      Engine.UseSkill(337); // выключить Ђркану повер
      delay(666);
      Room_2(); // повторЯем скрипт
    end;
  end;
end;

begin
  while 1 <> 2 do
  begin // бесконечный цикл

    begin
      Rift();
      Vxod();
      Check_Anakazel();
      Room_1();
      Check_Anakazel();
      Room_2();
    end;
  end;

end.

  • 0

#15
ScythLab

ScythLab
Ляпота ^_^
1) Как я уже говорил, конструкция
  delay(175000);
  if User.Target.dead then
не очень хороша, лучше заменить на что-то типа
  while (not User.Target.Dead) do
    delay(5000);
Только в идеале еще нужно контролировать зависание (т.е. если не убили в течение какого-то времени, то прерываемся) и контролировать смерть персонажа.
2) Не понял зачем в разных местах вызывается Room_2.
3) Мне не нравятся конструкции "if User.InRange(...) then User.Move", но это больше придирка к самому адрику
Остальное относится к общему принципу фарма рифта, а здесь я не советчик.

Сообщение отредактировал ScythLab: 11 Август 2019 - 17:18

  • 0

Хобби: разработка непубличного бота для Lineage


#16
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

ScythLab, я тут немного переиграл процедуру фарм, добавил функцию function MobInZone: boolean; и теперь пока моб есть в зоне , скрипт не продолжает выполнение дальше. и теперь не нужно delay подбирать для перса.

 

 Не понял зачем в разных местах вызывается Room_2. а Room 2 стоит только в  farm что бы после фарма он тп делал в мирную зону.


  • 0

#17
ScythLab

ScythLab

а Room 2 стоит только в  farm что бы после фарма он тп делал в мирную зону
Room_2 вызывается еще и в главном цикле, т.е. у тебя второй вызов Check_Anakazel вызывает farm, который вызывает Room_2, а после этого выполнения farm и Check_Anakazel вызовется еще раз Room_2
  • 0

Хобби: разработка непубличного бота для Lineage


#18
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

ScythLab,

 

begin
Rift();
Vxod();
Check_Anakazel();
Room_1();
Check_Anakazel();
Room_2();
end;

ты имеешь в виду это?

я думал что это управление процедурами, их последовательностью!?


Сообщение отредактировал katalizatorrr: 13 Август 2019 - 19:58

  • 0

#19
ScythLab

ScythLab
О сколько нам открытий чудных
Готовят просвещенья дух
И опыт, сын ошибок трудных,
И гений, парадоксов друг,
И случай, бог изобретатель... (с)

  • 0

Хобби: разработка непубличного бота для Lineage


#20
katalizatorrr

katalizatorrr
  • 40
    0
    Все круто
    • Lvl 22
    • Пользователь
    Skype
    Kelevro_rus
    Город
    Ставрополь

ScythLab, :lol:  :lol:  :lol:  :lol:


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Rawr.pro - Сделано с для игроков.