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

Атаковать свою курицу

G

Groma

Скрипт чтобы чар атаковал курицу виндстрайком и поддерживал ее в состоянии боя, для того чтобы она заливала ему ману.
Код:
procedure CheckMp;
var MYPET: TL2NPC;
begin
    if (User.MP < 45) then begin //when less then 45% mp
    Print('We have low mana level. KOOKABURRA, I NEED YOUR HELP'); //notification, will appear in the bot's SYS tab
    PetList.ByID(16035, MYPET);
        if (User.DistTo(MYPET) < 700) and not MYPET.InCombat then begin
            if not Engine.SetTarget(MYPET) then Print('Something went wrong, cant target my pet.');
            Engine.UseSkill(1177,true); // USE ANY SKILL HERE YOU WANT TO ATTACK (1177 HERE IS WIND STRIKE)
            Delay(1500);
        end else Print('Pet out of range.');
    end;
end;
begin
    while true do begin
        delay(150);
        CheckMp;
    end;
end.
 
есть такой же скрипт, только что бы был автоатакой?
 
279 написал(а):
есть такой же скрипт, только что бы был автоатакой?
Замени (9 строка)

Engine.UseSkill(1177,true); // USE ANY SKILL HERE YOU WANT TO ATTACK (1177 HERE IS WIND STRIKE)
на

Engine.Attack(1500);

(только я не помню за что отвечает параметр у Engine.Attack. Может делей,хз)
 
@SARCAZM, ставил Engine.Attack(10, true); пиздил пока кура не сдохла
 
Действительно, у Attack может быть два параметра
a713960e.jpg

Если продолжает бить - значит надо остановить вручную. Как остановить автоатаку - хз, попробуйте добавить

Engine.StopCasting();
Должно получиться примерно так:

procedure CheckMp;
var MYPET: TL2NPC;
begin
// Если курица уже в бою, не будем ее насиловать
if (User.Target = MYPET and MYPET.InCombat) begin
Engine.StopCasting();
end;

if (User.MP < 45) then begin //when less then 45% mp
Print('We have low mana level. KOOKABURRA, I NEED YOUR HELP'); //notification, will appear in the bot's SYS tab
PetList.ByID(16035, MYPET);
if (User.DistTo(MYPET) < 700) and not MYPET.InCombat then begin
if not Engine.SetTarget(MYPET) then Print('Something went wrong, cant target my pet.');
//Engine.UseSkill(1177,true); // Винд страйк
Engine.UseAttack(500, true); // Автоатака
Delay(1500);
end else Print('Pet out of range.');
end;
end;
begin
while true do begin
delay(500);
CheckMp;
end;
end.

За валидность кода не отвечаю, потому что не знаю как работает StopCasting + не уверен можно ли использовать User.Target = MYPET . В общем, экспериментируйте
 
@SARCAZM,
чувак я не понимаю в этом практически ничего, что мне нужно прописать чтобы он курица автоатакой 1 раз ударял?))
 
Пробуй так, должно работать
Код:
procedure CheckMp;
var MYPET: TL2NPC;
begin
    if (User.MP < 45) then begin //when less then 45% mp
    Print('We have low mana level. KOOKABURRA, I NEED YOUR HELP'); //notification, will appear in the bot's SYS tab
    PetList.ByID(16035, MYPET);
        if (User.DistTo(MYPET) < 700) and not MYPET.InCombat then begin
            if not Engine.SetTarget(MYPET) then Print('Something went wrong, cant target my pet.');
            Engine.UseAttack(500, true);
            Delay(1500);
            Engine.CancelTarget;
        end else Print('Pet out of range.');
    end;
end;
begin
    while true do begin
        delay(150);
        CheckMp;
    end;
end.
 
Если не заработает, то костылями
Код:
procedure CheckMp;
var MYPET: TL2NPC;
begin
    if (User.MP < 45) then begin //when less then 45% mp
    Print('We have low mana level. KOOKABURRA, I NEED YOUR HELP'); //notification, will appear in the bot's SYS tab
    PetList.ByID(16035, MYPET);
        if (User.DistTo(MYPET) < 700) and not MYPET.InCombat then begin
            if not Engine.SetTarget(MYPET) then Print('Something went wrong, cant target my pet.');
            Engine.UseAttack(500, true);
            Delay(1500);
            Engine.CancelTarget;
            Engine.SetTarget(user);
            Engine.UseSkill(1177); //если ты воин, укажи любой скил

        end else Print('Pet out of range.');
    end;
end;
begin
    while true do begin
        delay(150);
        CheckMp;
    end;
end.
 
[member=Groma], а мой способ с StopCasting не сработает?(
 
@SARCAZM, в теории прерывает каст. типа если цель мертва стопкастинг. на автоатаку не уверен что сработает. а вот отменить цели или взять себя и поюзать на себя 100% отменит аавтоатаку
 
[member=Groma], Тоже верно. Ну, тогда и костыль сойдет.
Кстати, после выбора себя в таргет наверное можно ту же автоатаку заюзать чтобы остановить насильвание курицы :) Чтобы не было путаницы с id скилов.
 
а можно сделать что б наносило по куре 1 удар раз в 30сек?
 
begin
while true do begin
delay(30000);
CheckMp;
end;
end.

[member='W1de'],
 
procedure CheckMp;
var MYPET: TL2NPC;
begin
if (User.MP < 50) then begin //when less then 42% mp
Print('We have low mana level. KOOKABURRA, I NEED YOUR HELP'); //notification, will appear in the bot's SYS tab
PetList.ByID(16035, MYPET);
if (User.DistTo(MYPET) < 700) and not MYPET.InCombat then begin
if not Engine.SetTarget(MYPET) then Print('Something went wrong, cant target my pet.');
Engine.Attack(100, true);
Delay(185);
Engine.MoveToTarget(-20)
end else Print('Pet out of range.');
end;
end;
begin
while true do begin
delay(15000);
CheckMp;
end;
end.

Вот так у меня работает, бьет один-два раза и потом дает команду на бег к курице но так как он уже возле нее то просто стоит. Правда в перерывах может кому-то мп залить. Подходит больше для супортов.
 
procedure CheckMp;
var MYPET: TL2NPC;
begin
if (User.MP < 50) then begin //when less then 42% mp
Print('We have low mana level. KOOKABURRA, I NEED YOUR HELP'); //notification, will appear in the bot's SYS tab
PetList.ByID(16035, MYPET);
if (User.DistTo(MYPET) < 700) and not MYPET.InCombat then begin
if not Engine.SetTarget(MYPET) then Print('Something went wrong, cant target my pet.');
Engine.Attack(100, true);
// while not user.incombat do delay(200); // будет ждать пока не нанесет удар, добавить по желанию
engine.canceltarget;
engine.moveto(user.x+Random(20),user.y+Random(20),user.z+Random(20));
end else Print('Pet out of range.');
end;
end;
begin
while true do begin
delay(15000);
CheckMp;
end;
end.

так пробни(снимает таргет, топчится на месте)
 
Один я не понял, зачем делать PetList.ByID и еще id этот доставать?

if petlist.count > 0 then
mypet:= petlist(0);

Вместо этого лучше уж бота отключать перед взятием в таргет, а то адрик переключит и побежишь его палкой бить...

Engine.FaceControl(0, false) - отключить адрик Engine.FaceControl(0, true) - включить адрик
 
да зачем ее ааковать) пусть она атакует!
 
Назад
Сверху