- Рег
- 7 Мар 2016
- Сообщения
- 4
- Реакции
- 0
Доброго времени суток, форумчани.
Учусь писать скрипты под ADR, поэтому не судите строго.
Набросал для себя не сложный скрипт поиска РБ в ЗИ.
Постарался откомментировать код как можно более подробно, чтобы другим новичкам было проще разобраться на этом примере, что тут к чему.
Скрипт выполняет только поиск комнаты с РБ, после чего завершается. РБ фармите сами, из комнаты после фарма выходите сами, после выхода запускаете скрипт повторно.
Звук взят из другой темы и переведен в wav через этот сайт.
P.S. К сожалению пока не разобрался как загружать на форум файлы, как разберусь - залью скрипт в .txt формате и конвертированный звук, который используется в этом скрипте. (Буду благодарен за подсказку, как заливать на форум свои файлы ^_^ )
UPD: Прикрепил скрипт в .txt файле и добавил используемый звук. Звук положить в папку "Sounds" в директории адреналина.
Учусь писать скрипты под ADR, поэтому не судите строго.
Набросал для себя не сложный скрипт поиска РБ в ЗИ.
Постарался откомментировать код как можно более подробно, чтобы другим новичкам было проще разобраться на этом примере, что тут к чему.
Скрипт выполняет только поиск комнаты с РБ, после чего завершается. РБ фармите сами, из комнаты после фарма выходите сами, после выхода запускаете скрипт повторно.
Звук взят из другой темы и переведен в wav через этот сайт.
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.
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.
P.S. К сожалению пока не разобрался как загружать на форум файлы, как разберусь - залью скрипт в .txt формате и конвертированный звук, который используется в этом скрипте. (Буду благодарен за подсказку, как заливать на форум свои файлы ^_^ )
UPD: Прикрепил скрипт в .txt файле и добавил используемый звук. Звук положить в папку "Sounds" в директории адреналина.