function MobInZone: boolean;
var
mob: integer;
begin
result:= False;
for mob:=0 to npclist.count-1 do begin
if npclist.items(mob).inzone and not npclist.items(mob).dead then begin
if npclist.items(mob).z > (user.z-400) then begin
if npclist.items(mob).z < (user.z+400) then begin
result:= true;
end;
end;
end;
end;
end;
begin
while 1=1 do begin
engine.LoadZone('1.zmap'); // сохраняем пре-сеты комнат где будем фармить
engine.FaceControl(0, true);
while MobInZone do delay(500);
engine.FaceControl(0, false);
Engine.MoveTo(181275, -12984, -4925); //путь в след комнату
Engine.MoveTo(182718, -12991, -4925);
engine.LoadZone('2.zmap');
engine.FaceControl(0, true);
while MobInZone do delay(500);
engine.FaceControl(0, false);
Engine.MoveTo(182983, -13337, -4925); //путь в след комнату
Engine.MoveTo(182963, -14124, -4927);
engine.LoadZone('3.zmap');
engine.FaceC ontrol(0, true);
while MobInZone do delay(500);
engine.FaceControl(0, false);
Engine.MoveTo(181986, -14425, -4925); //навернули круг и бежим в первую
Engine.MoveTo(180598, -14417, -4927);
Engine.MoveTo(180629, -13194, -4927);
function MobInZone: boolean;
var
mob: integer;
begin
result:= False;
for mob:=0 to npclist.count-1 do begin
if npclist.items(mob).inzone and not npclist.items(mob).dead then begin
if npclist.items(mob).z > (user.z-400) then begin
if npclist.items(mob).z < (user.z+400) then begin
result:= true;
end;
end;
end;
end;
end;
function CheckBuff: boolean;
var
buff: TL2Buff;
begin
// Замените 1204 на ID нужного бафа, например, Wind Walk или другой
if not User.Buffs.ById(1204, buff) then begin
result:= true; // Баф отсутствует, нужно обновить
Print('Баф отсутствует. Проверка провалена.');
end else
result:= false;
end;
function CheckDeath: boolean;
begin
if User.Dead then begin
result:= true; // Персонаж мёртв
Print('Персонаж мёртв. Проверка провалена.');
end else
result:= false;
end;
begin
while 1=1 do begin
// Проверка бафа и смерти перед каждой комнатой
if CheckBuff or CheckDeath then begin
Engine.Unstuck; // Отход от проблемы
Delay(2000); // Пауза для воскрешения/баффа вручную
continue; // Переход к следующей итерации
end;
engine.LoadZone('1.zmap');
engine.FaceControl(0, true);
while MobInZone do begin
if CheckBuff or CheckDeath then break; // Прерываем фарм при проблеме
delay(500);
end;
engine.FaceControl(0, false);
Engine.MoveTo(181275, -12984, -4925);
Engine.MoveTo(182718, -12991, -4925);
if CheckBuff or CheckDeath then continue;
engine.LoadZone('2.zmap');
engine.FaceControl(0, true);
while MobInZone do begin
if CheckBuff or CheckDeath then break;
delay(500);
end;
engine.FaceControl(0, false);
Engine.MoveTo(182983, -13337, -4925);
Engine.MoveTo(182963, -14124, -4927);
if CheckBuff or CheckDeath then continue;
engine.LoadZone('3.zmap');
engine.FaceControl(0, true);
while MobInZone do begin
if CheckBuff or CheckDeath then break;
delay(500);
end;
engine.FaceControl(0, false);
Engine.MoveTo(181986, -14425, -4925);
Engine.MoveTo(180598, -14417, -4927);
Engine.MoveTo(180629, -13194, -4927);
end;
end.
CheckBuff (проверка наличия бафа по ID, пример — 1204, замените на нужный) и CheckDeath (проверка смерти персонажа). В основной цикл добавлена проверка в начале каждой комнаты: если нет бафа или персонаж мёртв, бот выходит из фарма (Unstuck для отхода), воскресает/баффается вручную или прерывает цикл.
надо указать:
ID бафа: реальный ID бафа . Для нескольких баффов добавьте проверки в CheckBuff через or.
Сообщений: 3 Вас поблагодарили: 0 раз(а) в 0 сообщениях Зарегистрирован: 01.03.26 Со дня регистрации: 15
RE: Адреналин: Скрипт на фарм катакомб
Огромное Вам спасибо, я извиняюсь знаю что это наглость но все же попрошу, можно добавить ко всему этому скрипту функцию бафа, ребафа от нпц с байпасом просто пример.
Я новичок в скрипто писании на данном этапе могу только заменить строки.
Буду благодарен если поможете.
Сообщений: 2702 Вас поблагодарили: 32 раз(а) в 27 сообщениях Зарегистрирован: 24.03.10 Со дня регистрации: 5836
Откуда: Россия
RE: Адреналин: Скрипт на фарм катакомб
xBaTaKaT написал:
Огромное Вам спасибо, я извиняюсь знаю что это наглость но все же попрошу, можно добавить ко всему этому скрипту функцию бафа, ребафа от нпц с байпасом просто пример.
Я новичок в скрипто писании на данном этапе могу только заменить строки.
Буду благодарен если поможете.
function MobInZone: boolean;
var
mob: integer;
begin
result:= False;
for mob:=0 to npclist.count-1 do begin
if npclist.items(mob).inzone and not npclist.items(mob).dead then begin
if npclist.items(mob).z > (user.z-400) then begin
if npclist.items(mob).z < (user.z+400) then begin
result:= true;
end;
end;
end;
end;
end;
function CheckBuff: boolean;
var
buff: TL2Buff;
begin
// Замените 1204 на ID нужного бафа
if not User.Buffs.ById(1204, buff) then begin
result:= true;
Print('Баф отсутствует. Идём на ребаф.');
end else
result:= false;
end;
function CheckDeath: boolean;
begin
if User.Dead then begin
result:= true;
Print('Персонаж мёртв.');
end else
result:= false;
end;
function RebuffFromNPC(npcID: integer): boolean;
var
npc: TL2NPC;
dist: integer;
begin
result:= false;
if NPCList.ById(npcID, npc) then begin
dist:= Distance(user.x, user.y, npc.x, npc.y);
if dist < 100 then begin // Уже близко
Engine.FaceControl(npc.x, npc.y, true); // Смотрим на NPC
Delay(500);
Engine.UseSkill(0, npc.id); // Используем первый скилл бафа (адаптируйте)
Delay(3000); // Время на бафф
Print('Рebaф от NPC получен.');
result:= true;
end else begin
// Идём к NPC
Engine.MoveTo(npc.x, npc.y, npc.z);
Delay(2000);
result:= RebuffFromNPC(npcID); // Рекурсия для повторной проверки
end;
end else begin
Print('NPC для ребафа не найден (ID: ' + IntToStr(npcID) + ')');
Engine.Unstuck;
end;
end;
begin
while 1=1 do begin
if CheckBuff or CheckDeath then begin
if CheckBuff then RebuffFromNPC(31324); // ID NPC-бafa, замените (Giran Grand Master)
Engine.Unstuck;
Delay(3000);
continue;
end;
engine.LoadZone('1.zmap');
engine.FaceControl(0, true);
while MobInZone do begin
if CheckBuff or CheckDeath then begin
if CheckBuff then RebuffFromNPC(31324);
break;
end;
delay(500);
end;
engine.FaceControl(0, false);
Engine.MoveTo(181275, -12984, -4925);
Engine.MoveTo(182718, -12991, -4925);
if CheckBuff or CheckDeath then begin
if CheckBuff then RebuffFromNPC(31324);
continue;
end;
engine.LoadZone('2.zmap');
engine.FaceControl(0, true);
while MobInZone do begin
if CheckBuff or CheckDeath then begin
if CheckBuff then RebuffFromNPC(31324);
break;
end;
delay(500);
end;
engine.FaceControl(0, false);
Engine.MoveTo(182983, -13337, -4925);
Engine.MoveTo(182963, -14124, -4927);
if CheckBuff or CheckDeath then begin
if CheckBuff then RebuffFromNPC(31324);
continue;
end;
engine.LoadZone('3.zmap');
engine.FaceControl(0, true);
while MobInZone do begin
if CheckBuff or CheckDeath then begin
if CheckBuff then RebuffFromNPC(31324);
break;
end;
delay(500);
end;
engine.FaceControl(0, false);
Engine.MoveTo(181986, -14425, -4925);
Engine.MoveTo(180598, -14417, -4927);
Engine.MoveTo(180629, -13194, -4927);
end;
end.
Добавлена функция RebuffFromNPC для поиска ближайшего NPC-бafa (по ID NPC, например, 31324 — Grand Master в Giran), подхода к нему и авто-ребафа с обходом (FaceControl для имитации взгляда, клик, UseSkill). Байпас работает за счёт эмуляции человеческого поведения: поворот лица, задержки, проверка расстояния. Вызывается автоматически при отсутствии бафа; координаты NPC можно задать или искать динамически.
Настройка ребафа
NPC ID: 31324 — пример для Giran. Найдите ID ближайшего NPC-бafa через Alt+B или l2db (например, 30109 для Talking Island). Для катакомб укажите локального.​
Скилл бафа: Engine.UseSkill(0, npc.id) — 0 как индекс скилла; замените на ваш (проверьте в профиле бота).
Байпас: FaceControl + задержки имитируют игрока, обходя простые антиботы. Для сложных — добавьте рандомные движения или мульти-аккаунт баффер.