Код:
function CheckItemCount (const itemID: Integer; const questItem: Boolean = False) : Integer;
var tempItem: TL2Item;
begin
if questItem then Inventory.Quest.ByID(itemID, tempItem)
else Inventory.User.ByID(itemID, tempItem);
Result := tempItem.Count;
end;
function UserInTown : Boolean;
begin
Result := User.InRange(45752, 49768, -3056, 3000, 300);
end;
function mobsAttacking : Boolean;
var i, n: Integer;
begin
n := 0;
for i := 0 to NpcList.Count - 1 do
if (NpcList.Items(i).Target = User) and not NpcList.Items(i).Dead then inc(n);
Result := n > 0;
end;
procedure MoveToSpot;
begin
Engine.MoveTo(43784, 50248, -3056);
Engine.MoveTo(42920, 51256, -2992);
Engine.MoveTo(39688, 53496, -3408);
Engine.MoveTo(37080, 53864, -3616);
Engine.MoveTo(33512, 52728, -3712);
Engine.MoveTo(30216, 51528, -3728);
Engine.MoveTo(28296, 52616, -3568);
Engine.MoveTo(26344, 53896, -3456);
Engine.MoveTo(23816, 54184, -3616);
Engine.MoveTo(20680, 54936, -3552);
Engine.MoveTo(18232, 54984, -3680);
Engine.FaceControl(1, True);
end;
procedure MoveToTown;
begin
Engine.FaceControl(1, False);
if User.Dead then begin
Engine.GoHome;
while not UserInTown do
delay(3000);
end
else begin
Engine.MoveTo(20680, 54936, -3552);
Engine.MoveTo(23816, 54184, -3616);
Engine.MoveTo(26344, 53896, -3456);
Engine.MoveTo(28296, 52616, -3568);
Engine.MoveTo(30216, 51528, -3728);
Engine.MoveTo(33512, 52728, -3712);
Engine.MoveTo(37080, 53864, -3616);
Engine.MoveTo(39688, 53496, -3408);
Engine.MoveTo(42920, 51256, -2992);
Engine.MoveTo(43784, 50248, -3056);
Engine.MoveTo(45864, 50776, -3056);
end;
EndQuest;
NewQuest;
end;
procedure EndQuest;
begin
if Engine.QuestStatus(261, 2) then begin
if not User.InRange(45864, 50776, -3056, 250, 150) then
Engine.MoveTo(45864, 50776, -3056);
Engine.SetTarget(30222);
Engine.DlgOpen();
delay(1000);
Engine.DlgSel(1);
delay(1000);
end;
end;
procedure NewQuest;
begin
if not Engine.QuestStatus(261, 1) then begin
if not User.InRange(45864, 50776, -3056, 250, 150) then
Engine.MoveTo(45864, 50776, -3056);
Engine.SetTarget(30222);
Engine.DlgOpen();
delay(1000);
Engine.DlgSel(1);
delay(1000);
Engine.DlgSel(1);
delay(1000);
end;
end;
begin
if not Engine.LoadZone('QuestZone') then
print('No Zone');
Engine.FaceControl(1, False);
Engine.FaceControl(0, True);
while Engine.Status = lsOnline do begin
if UserInTown then begin
EndQuest;
NewQuest;
MoveToSpot;
end;
while CheckItemCount(1087, True) < 8 do begin
if User.Dead then begin
delay(3000);
MoveToTown;
MoveToSpot;
end;
delay(2000);
end;
while not User.InRange(18232, 54984, -3680, 100, 100) do begin // пытаемся добежать до дороги
if mobsAttacking then begin
Engine.FaceControl(1, True);
end
else begin
Engine.FaceControl(1, False);
Engine.MoveTo(18232, 54984, -3680, 10);
end;
delay(500);
end;
MoveToTown;
end;
end.
Желательно чтобы была зона охоты с названием QuestZone.
Сами настраиваете, кого и как убивать.
Ну и координаты можете поправить, я не знаю где там больше этих пауков.
Запускать в городе или в зоне охоты.
Недолго тестировал, так что может работать не совсем правильно.