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

Скрипт на поиск рб в зи

SSV

Рег
9 Июл 2016
Сообщения
2
Реакции
0
И так делюсь с вами скриптом на поиск рб в ЗИ.


uses
SysUtils, Classes;

var
i, Count_Room, Count_Enter : integer;
Gate: TL2Npc;

const // Самый важный раздел, прежде чем запускать скрипт - проверьте ID NPC в ЗИ на вашем сервере и выставьте актуальные

Eastern = 32658; // Восток - фарм для милишников, РБ без отката
Western = 32659; // Запад - фарм для лукарей, РБ без отката
South = 32660; // Юг - фарм для магов, РБ без отката
North = 32661; // Север - фарм для копейщиков, РБ без отката
Great = 32662; // Площадь, слабый РБ, откат по вики - 24 часа
Tower = 32663; // Башня, сильный РБ, откат по вики - 24 часа

Escape = 32664; // НПС, который появляется внутри комнаты - через него можно 1 раз сменить комнату или выйти наружу

begin

i := 0;
Count_Enter := 0;

print('Приступаем к поиску РБ');
while Engine.Status = lsOnline do
begin
for i:=0 to NpcList.count-1 do // По факту приближения к нужному киперу на 100 едениц будет произведен вход в инст и начат поиск РБ
begin
if ((NpcList.items(i).ID = Eastern)
or (NpcList.items(i).ID = Western)
or (NpcList.items(i).ID = South)
or (NpcList.items(i).ID = North)
or (NpcList.items(i).ID = Great)
or (NpcList.items(i).ID = Tower))
and (User.DistTo(NpcList.items(i)) < 100) then // Проверяем, что подошли именно к нужному нам НПС и он находится достаточно близко от нас
begin
Count_Room := 1; // Передали в переменную, что заходим в первую комнату
inc(Count_Enter); // Увеличили счетчик проходов на 1
Gate := NpcList.items(i); // Передали в переменную НПС рядом с которым мы находимся
Engine.SetTarget(Gate); // Взяли в таргет НПС, рядом с которым мы находимся
Engine.DlgOpen; // Открыли диалог
Engine.DlgSel(1); // Выбрали первую строку в диалоге, зашли в инст
Delay(100); // Данную задержку можно увеличить до времени ожидания телепорта и прогрузки НПС в комнате, если вам не хочется сильно нагружать ЦПУ
end;
end;

for i:=0 to NpcList.count-1 do // Попадаем в цикл как только в комнате отреспится наш "Escape" НПС
begin
if (NpcList.items(i).ID = Escape)
and (User.DistTo(NpcList.items(i)) < 150) then // Проверка на дистанцию тут нужна, чтобы не пытаться бежать начинать диалог с "Escape" НПС из другой комнаты
begin
if user.InRange(-108062, -154692, -6672, 500, 250) // Проверяем не попали ли мы в комнату к РБ
or user.InRange(-121465, -154628, -6704, 500, 250) then // Это координаты центров комнат в которых появляются РБ
begin
print('Нашли РБ с прохода № '+inttostr(Count_Enter)); // Если проверка на нахождение в комнате с РБ успешна, оповещаем игрока, останавливаем скрипт
PlaySound('Sounds/target.wav',false); // Проигрываем звук из папки Sounds находящейся в папке с ADR
Engine.BlinkWindow(true); // Мигаем окном игры в котором найден РБ
exit;
end
else
begin
if Count_Room < 2 then // Тут мы проверяем, меняли мы уже комнату или нет
begin
inc(Count_Room); // Увеличили счетчик комнат, чтобы в следующей комнате выйти из инста, а не пытаться сменить комнату
Engine.SetTarget(Escape); // Взяли в таргет нашего НПС
Engine.DlgOpen; // Открыли диалог
Engine.DlgSel(1); // Выбрали первую строку в диалоге, сменили комнату
delay(100); // Данную задержку можно увеличить до времени ожидания телепорта и прогрузки НПС в комнате, если вам не хочется сильно нагружать ЦПУ
end
else
begin
Engine.SetTarget(Escape); // Взяли в таргет нашего НПС
Engine.DlgOpen; // Открыли диалог
Engine.DlgSel(2); // Выбрали вторую строку в диалоге, вышли из инста
print('Закончили проход № '+inttostr(Count_Enter));
delay(100); // Данную задержку можно увеличить до времени ожидания телепорта и прогрузки НПС в комнате, если вам не хочется сильно нагружать ЦПУ
end;
end;
end;
end;
delay(250); // Данная задержка определяет, как часто проверяется наличие рядом с вами нужных НПС. Если её убрать или поставить 0, то ADR будет сильно загружать ЦПУ.
end;

print('Персонаж перешел в режим OFFLINE - завершаем работу скрипта');
end.
 
А зачем по ID проверять НПЦ на каждом сервере, если можно сделать поиск по части от имени?


Код:
  for i:= 0 to NpcList.count - 1 do
      if (pos('Хранитель', NpcList(i).name) > 0) and
         (User.DistTo(NpcList(i)) < 300) then
         begin
           Npc:= NpcList(i);
           break;
         end;
    if (Npc.valid) and ((User = Party.Leader) or (not Party.Leader.valid)) then 
    begin
      Engine.SetTarget(Npc);
      Engine.DlgOpen;
      delay(50);
      Engine.DlgSel(1, 50);
    end;
 
Время загрузки можно вынести в константу, дабы менять в одном месте.
 
delay(100); // Данную задержку можно увеличить до времени ожидания телепорта и прогрузки НПС в комнате, если вам не хочется сильно нагружать ЦПУ
 
@bawl, после прочтения твоего поста захотелось фейспалм себе сделать, но побоялся что пробью себе бошку, не надо так.
 
Назад
Сверху