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

Несколько легких вопросов от новичка

Рег
19 Апр 2016
Сообщения
25
Реакции
0
Здравствуйте, Уважаемые форумчане!

Сегодня впервые попробовал что-то написать, первые часы в Адреналине, да и вообще в ботах в л2 в целом.
Пытаюсь написать скрипт по фарму Лабы, появилась пара вопросов, подскажите пожалуйста:
  • Как закрыть диалоговое окно (диалог с нпц)
  • Как сделать, чтобы окна начинали баф только в лабе, и не крутили его снаружи? Может проверку какую нибудь по координатам, или по столбу (через который выходят, его id я знаю)? Не знаю как это реализовать. Сейчас в городе я просто выключаю окна в боте (Шестеренка - Main - Activity - Disable) и по входу в лабу включаю, все вручную, хотелось бы как-то автоматизировать.
  • Вот Алгоритм: разговариваю с нпц, попадаю в лабу, как-то окна у меня начинают бафать, после бафа я иду к первому рб под медузой (медуза в наборе бафов и постоянно ребафается). Подхожу к нему практически вплотную беру в таргет и.. как начать его атаковать? Я понимаю, что это невероятно нубские вопросы, но я не знаю на них ответа. Гайд бы какой нибудь, искал - не нашел. Так. Дальше, как проверить мертв ли РБ? Ну а дальше я уже сам разберусь.
И еще, сейчас я жду окончания бафа при входе просто через delay();, а можно как то через проверку на баф? Типа if медуза в бафах then следующие действия
Иии.. Как реализовать, чтобы БД танцевала берс только тогда, когда я начну атаковать РБ? Проверочку на хп рб? Я тупо не знаю как это выразить в скрипте, подскажите пожалуйста. И извините за невероятно нубские вопросы. Спасибо!
 
AdrenalineLife написал(а):
Как сделать, чтобы окна начинали баф только в лабе, и не крутили его снаружи? Может проверку какую нибудь по координатам, или по столбу (через который выходят, его id я знаю)? Не знаю как это реализовать. Сейчас в городе я просто выключаю окна в боте (Шестеренка - Main - Activity - Disable) и по входу в лабу включаю, все вручную, хотелось бы как-то автоматизировать.
Тут я разобрался. Нашел небольшой справочник. Для окон написал вот такой скрипт:

begin
while Engine.Status = lsOnline do begin

if Engine.SetTarget(32496) then
Engine.FaceControl(0,true)

else

Engine.FaceControl(0,false);

delay(2000);
end;
end.

Может можно как то поудобней? Ну это не обязательно, просто для общего развития. Как работает InZone(Obj: TL2Spawn): Boolean; overload;? Engine.InZone(ID NPC) и возвращает true или false?



AdrenalineLife написал(а):
и.. как начать его атаковать? .... как проверить мертв ли РБ?
Атаковать, я так понимаю, что-то типа:

Engine.SetTarget(25622);
Engine.Attack;

Как проверить умер он или нет еще не знаю, надеюсь подскажете, либо сам найду. Хотя пора уже идти спать.
 
AdrenalineLife написал(а):
Как проверить умер он или нет еще не знаю, надеюсь подскажете
if (User.Target.Dead)

AdrenalineLife написал(а):
Как закрыть диалоговое окно (диалог с нпц)
Увы, никак



AdrenalineLife написал(а):
Как сделать, чтобы окна начинали баф только в лабе, и не крутили его снаружи?
Если баф через интерфейс, то сделать проверку по координатам, и, если бот в лабе, включить интерфейс через
Код:
Engine.FaceControl(0,true)
 
Ну первое это есть раздел готовых скриптов , там очень много полезной инфы и примеров. а по теме , тут вопросы очень легкие но мать его их уйма , помогу сылочками и кусками кода если не совсем глупый поймешь.


AdrenalineLife написал(а):
Как закрыть диалоговое окно (диалог с нпц)
Никак.


AdrenalineLife написал(а):
Как сделать, чтобы окна начинали баф только в лабе, и не крутили его снаружи? Может проверку какую нибудь по координатам, или по столбу (через который выходят, его id я знаю)? Не знаю как это реализовать. Сейчас в городе я просто выключаю окна в боте (Шестеренка - Main - Activity - Disable) и по входу в лабу включаю, все вручную, хотелось бы как-то автоматизировать.
Если ты бафф уже настроил в интерфейсе(не скриптом а самой прогой) то вот

if user.inrange(X, Y, Z , R , H) then begin
Engine.FaceControl(0, true);
end;

Где ХУZ это кординаты точки и D,Н это Радиус и Высота
Только перед этим надо выключать интерфейс Engine.FaceControl(0, false);


AdrenalineLife написал(а):
Вот Алгоритм: разговариваю с нпц, попадаю в лабу, как-то окна у меня начинают бафать, после бафа я иду к первому рб под медузой (медуза в наборе бафов и постоянно ребафается). Подхожу к нему практически вплотную беру в таргет и.. как начать его атаковать? Я понимаю, что это невероятно нубские вопросы, но я не знаю на них ответа. Гайд бы какой нибудь, искал - не нашел. Так. Дальше, как проверить мертв ли РБ? Ну а дальше я уже сам разберусь.
Ну первое что тебе надо в Самом боте(програме адреналин) На танке или персе который будет атаковать чтоб он атаковал всех кто в зоне или в произвольном порядке но только 1го МОБА тобишь РБ там в фильтре есть можно настроить кого именно.
Или в самом скрипте для атакера , отключать интерфейс и по верхнему примеру его включать только взоне РБ.

if user.inrange(X, Y, Z , R , H) then begin
Engine.FaceControl(0, true);
end;
3й вариант более для профии это скрипт

if user.inrange(X, Y, Z , R , H) then begin
Engine.Settarget(ID);
Engine.Attack;
end;
Где ID-это ид РБ. Но учти будет онбить его рукой только .



AdrenalineLife написал(а):
И еще, сейчас я жду окончания бафа при входе просто через delay();, а можно как то через проверку на баф? Типа if медуза в бафах then следующие действия Иии.. Как реализовать, чтобы БД танцевала берс только тогда, когда я начну атаковать РБ? Проверочку на хп рб? Я тупо не знаю как это выразить в скрипте, подскажите пожалуйста. И извините за невероятно нубские вопросы. Спасибо!
Да можно в интерфейсе в баффх есть такая штука как использовать при отсутствие или когда времени меньше чем указаное.
Через скрипт
Код:
if not user.buffs.ByID(1388,buff) or (buff.EndTime < 30000) then begin
    Engine.useskill(1085);
end;
 
queen = 30556; //Тут вводи ИД РБ
npc: TL2Live;
begin
NpcList.ByID(queen, npc);
if (Assigned(npc)) then
begin
delay(1000);
end;
end.


Это пример скрипта на поиск РБ жив ли он , надо находится в радиусе чтоб бот его увидел.
 
> Engine.FaceControl(0, true);
Что значит первая цифра в скобках? Что за id?

> User.inrange(X, Y, Z , R , H)
А как, собственно, узнать свои координаты? В лабе через клиент л2 /loc не работает (пишет, что в лабе, координат не дает). Где то видел способ через User.X, Y, Z.
Как можно вывести свои координаты из клиента? Думал через чат попробовать, писал .say(user.x) и .say(IntToStr(user.x)), ругалось что-то. Как .msg работает я даже не знаю.


Что такое высота в inrange? Ведь x y z это уже трехмерная координата. Какую высоту указывать в лабе, ведь там несколько уровней по высоте.

Как проверить активна какая нибудь инстанс зона, или нет? Поможет в случае, если нужно сбросить текущий фарм лабы и начать по-новой.

Еще вопрос, который поможет мне и в этом скрипте и еще в одной задумке. Можно ли как нибудь проверить в какой зоне (мирная, пвп, осадная, нейтральная) находится персонаж?
 
AdrenalineLife написал(а):
> Engine.FaceControl(0, true); Что значит первая цифра в скобках?
> User.inrange(X, Y, Z , R , H) А как, собственно, узнать свои координаты? В лабе через клиент л2 /loc не работает (пишет, что в лабе, координат не дает). Где то видел способ через User.X, Y, Z. Как можно вывести свои координаты из клиента? Думал через чат попробовать, писал .say(user.x) и .say(IntToStr(user.x)), ругалось что-то. Как .msg работает я даже не знаю.
Вопрос с координатами решил. Вывожу через print(user.x);

С остальным пока никак. Больше всего интересует проверка на активную инстансзону, ну и понятие высоты в inrange.
 
@AdrenalineLife, высота в inrange задается дополнительным третьим параметром, если ты про это.
Допустимое отклонение высоты - параметр ZRange
Если не задавать, высота игнорируется

PyNiT3H.jpg
 
AdrenalineLife написал(а):
Что такое высота в inrange? Ведь x y z это уже трехмерная координата. Какую высоту указывать в лабе, ведь там несколько уровней по высоте.
Мм, это типа вхождение по высоте. Проверка будет уже не на вхождение в радиус, а вхождение в сферу? По сути это можно вообще опустить, и проверять только по радиусу.

Открытым остался вопрос о проверке на активную инстанс зону, и о проверке в каком типе зоны я нахожусь (в городе - мирная, на осаде - осадная и так далее)

Еще есть вопрос по ресу в пати блесс скроллами, и о выходе из пати, если стал лидером (вкурсе, что такая опция есть в интерфейсе, но интерфейс порой выключен, хочу скриптом сделать). Но они не приоритетны
 
Также как с баффом в пати конфиге есть штука где при помощи который можно проверить мертв или нет , если мертв то юзаем итем. Или включаем интерфейс на самом баффере хилере.
 
@AdrenalineLife, при чем тут вообще вхождение в сферу.
л2 это трехмерная игра, в ней дистанция рассчитывается через 3 координаты, а не 2.

Зону никак не проверить. Можешь только отловить системные сообщения на подобное.
 
@AdrenalineLife, http://rawr.su/topic/3225-packet-helper/#entry14439
Вот про парсинг пакетов было, если получится отправить /instancezone и получить список инстансов, то и спарсить иожно попробовать.
Но я от этого уже далек, никогда с пакетами не работал :hz:
 
@Krickt, ну вообщето он прав сфера . XYZ это трех мерное изображение Ось Х , ось У это кординаты на плоскости( карте) а Z это высота , Выходит когда мы указываем радиус тобишь длину по грешности в Х.У и указываем Z высоту ,то мы получаем сферу Sсферы=2pi*Rплоскости* 2piRвысоты=4piR2 Как бы получается сфера .
231.gif
 
Krickt написал(а):
я где-то писал, что это не сфера, что ты мне это доказываешь?
Krickt написал(а):
при чем тут вообще вхождение в сферу. л2 это трехмерная игра, в ней дистанция рассчитывается через 3 координаты, а не 2. Зону никак не проверить. Можешь только отловить системные сообщения на подобное.
притом что

AdrenalineLife написал(а):
Мм, это типа вхождение по высоте. Проверка будет уже не на вхождение в радиус, а вхождение в сферу? По сути это можно вообще опустить, и проверять только по радиусу.
 
Ну, может быть тогда и параллелепипед :Kappa:
get_file.png
 
А для паралепипеда нам надо 8 точек . Для круга 1на.
 
@magogs, смотря как обрабатывается inrage.
Если используется формула принадлежности точки шару - то да.
Если просто проверка по вхождению точки в заданные промежутки координат - то параллелепипед.



magogs написал(а):
User.inrange(XXX, YYY, ZZZ, Допустимое отклонение для X и для Y , Допустимое отклонение для Z)

Но маловероятно
 
Назад
Сверху