A simple script which randomizes your target from shortest -> furthest so you can farm with Rush Impact on your doombringer
Edit your skill id (Default 45179):
SkillList.ByID(45159, sweep)
Edit your search range (Default 900):
Script.NewThread(@SweepThread, Pointer(900));
var
bSweepFurthest: boolean; // Global state variable to track which mob to get next
// This procedure now alternates between finding the furthest and nearest mob.
procedure SweepThread(dist: integer);
var
sweep: TL2Skill;
mob: TL2Npc;
begin
while Delay(100) do begin
if (Engine.Status = lsOnline)
and SkillList.ByID(45159, sweep) then begin
// Decide which mob to find based on the bSweepFurthest state
if (bSweepFurthest) then begin
mob:= GetFurthestSweepableMob(dist); // Looking for the furthest mob
end else begin
mob:= GetNearestSweepableMob(dist); // Looking for the nearest mob
end;
if (mob <> nil) then begin
if Engine.SetTarget(mob) then Delay(1);
Engine.UseSkill(sweep) ;
// Flip the state for the next loop iteration
bSweepFurthest := not bSweepFurthest;
end;
end;
end;
end;
// Corrected to check for dead mobs
function GetNearestSweepableMob(dist: integer): TL2Npc;
var i: integer;
begin
Result:= nil;
for i:= 0 to NpcList.Count-1 do begin
if (NpcList(i).Valid)
and (User.DistTo(NpcList(i)) < dist)
and not (NpcList(i).Dead) then begin // <<< Corrected: Sweepable mobs are dead
Result:= NpcList(i);
dist:= User.DistTo(NpcList(i));
end;
end;
end;
// Modified to accept a distance parameter and corrected to check for dead mobs
function GetFurthestSweepableMob(dist: integer): TL2Npc;
var
i: integer;
max_dist: integer;
begin
Result:= nil;
max_dist:= 0;
for i:= 0 to NpcList.Count-1 do begin
if (NpcList(i).Valid)
and (User.DistTo(NpcList(i)) < dist) // <<< Changed from 400 to the 'dist' parameter
and not (NpcList(i).Dead) // <<< Corrected: Sweepable mobs are dead
and (User.DistTo(NpcList(i)) > max_dist) then begin
Result:= NpcList(i);
max_dist:= User.DistTo(NpcList(i));
end;
end;
end;
// Main execution block
begin
// Initialize the state to start by finding the furthest mob first
bSweepFurthest := true;
// Start the thread, passing 300 as the max distance for both nearest and furthest searches
Script.NewThread(@SweepThread, Pointer(900));
Delay(-1);
end.