Simba Code:
Program LividFarmer;
{$DEFINE SMART}
{$i SRL/srl.simba}
{$i SRL/SRL/misc/MouseHandler.simba}
{$i SRL/SRL/misc/SmartGraphics.simba}
{$I SRL/SRL/Misc/Debug.Simba}
//Top xp bar MUST be set to magic, 2nd xp bar MUST be set to farming (IF YOU DON'T IT WILL TIMEOUT AFTER 10MINUTES AND SHUTDOWN!!!)
//Stand in the spot specified in flights thread
//Have mud staff equipped and a buttload of nature and astral runes
///////////////////////////////////////////////////////////////////////
// //
// Begin of user setup //
// Fill in the fields below //
// //
///////////////////////////////////////////////////////////////////////
Const
Debug =True; // ***Keep this on for purty colors***
SwitchWorlds = False; // ***Switch worlds after a break?***
BreakIn = 280; // ***How long before we take a break? (minutes)***
BreakFor = 20; // ***How long will we break for? (minutes)***
Bir = 30; // ***Random minutes to add/subtract from how long until we break***
Bfr = 7; // ***Random minutes to add/subjtract from break duraction***
Procedure DeclarePlayers;
Begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
With Players[0] Do
Begin
Name := '';
Pass := '';
BoxRewards := ['Coins', 'oins'];
WorldInfo := [96,96];
Active := True;
End;
End;
///////////////////////////////////////////////////////////////////////////////////////////
// //
// End of user setup //
// Don't touch below this line unless you know what you're doing!! //
// //
///////////////////////////////////////////////////////////////////////////////////////////
Var
Version: String;
Timeout,W,X,Y,Z,RealBTime,CurrentBTime,BreakRounds,TotalBreaks: Integer;
FarmXP,MageXP,ReportTime,StartFarm,StartMagic,SpotDTM: Integer;
Box1,Box2,Box3,Box4,Box5,Box6,Box7,Box8,Box9,Box10,Box11,Box12,Box13,Box14,Box15: TBox;
FarmGrid: TBoxArray;
SCols,PCols: TIntegerArray;
Procedure LoadVars;
begin
Version := '1.41';
W := (BreakIn * 60000);
X := (BreakFor * 60000);
Y := RandomRange(-BIR * 60000, BIR * 60000);
Z := RandomRange(-BFR * 60000, BFR * 60000);
Box1 :=IntToBox(131,95-50,164,142-50);
Box2 :=IntToBox(180,95-50,214,142-50);
Box3 :=IntToBox(236,95-50,276,142-50);
Box4 :=IntToBox(288,95-50,328,142-50);
Box5 :=IntToBox(343,95-50,395,142-50);
Box6 :=IntToBox(104,162-50,157,225-50);
Box7 :=IntToBox(168,162-50,217,225-50);
Box8 :=IntToBox(230,162-50,273,225-50);
Box9 :=IntToBox(293,162-50,341,225-50);
Box10:=IntToBox(365,162-50,400,225-50);
Box11:=IntToBox(95,261-50,144,310-50);
Box12:=IntToBox(159,261-50,214,310-50);
Box13:=IntToBox(229,261-50,283,310-50);
Box14:=IntToBox(294,261-50,350,310-50);
Box15:=IntToBox(359,261-50,426,310-50);
FarmGrid:= [Box1,Box2,Box3,Box4,Box5,Box6,Box7,Box8,Box9,Box10,Box11,Box12,Box13,Box14,Box15];
If Debug Then
Smart_DrawBoxes(True,False,FarmGrid,clgreen);
SpotDTM := DTMFromString('mggAAAHicY2NgYGBnZGBQAOI6ILsYiAOAeDsQPwTiBCi/D4itgWpsgDg82JuhduNDhqo0F4bFU2sZfJyMGBb35zD8B6rhx4IZcWAIAABSuA5L');
SCols := [5073267, 5204854, 5465452, 5402748]; //Soil colors
PCols := [4542282, 4674124, 4871760, 5003346, 5135188]; //Healthy livid colors
end;
Procedure FreeGlobals;
begin
FreeDTM(SpotDTM);
end;
Function WaitLoggedIn(Time:Integer): Boolean;
Var
T: Integer;
Begin
MarkTime(T);
Repeat
SRL_ResetNavBar;
If TimeFromMark(T)>Time Then
Begin
Result:=False;
Exit;
End;
Until (GetColor(472, 490) = 16777215);
Result:=True;
End;
Procedure ProgressReport;
Var
FXPH,MXPH: Integer;
Begin
FarmXP:=GetXPBar(2) - StartFarm;
MageXP:=GetXPBar(1) - StartMagic;
FXPH := Round(FarmXP * (3600.0 / (GetTimeRunning / 1000.0)));
MXPH := Round(MageXP * (3600.0 / (GetTimeRunning / 1000.0)));
Writeln('=========Flights LividFarmer========');
Writeln('===========Version: '+Version+'=============');
Writeln('Time Running: ' + TimeRunning);
Writeln('Magic XP: ' + IntToStr(MageXP));
Writeln('Magic XP/H: ' + IntToStr(MXPH));
Writeln('Farming XP: ' + IntToStr(FarmXP));
Writeln('Farming XP/H: ' + IntToStr(FXPH));
Writeln('====================================');
MarkTime(ReportTime);
End;
Procedure FailSafe;
Var
X,Y: Integer;
Begin
If Debug Then
Writeln('Misclicked, doing failsafe');
Mouse(249,177,2,2,True);
Wait(RandomRange(2000,3000));
Repeat
Wait(100);
Until (Not(Ismoving));
If FindDTM(SpotDTM,X,Y,MSX1,MSY1,MSX2,MSY2) Then
Begin
HumanMMouse(X,Y,2,2);
FastClick(Mouse_Left);
Wait(RandomRAnge(2000,3000));
End;
Repeat
Wait(100);
Until (Not(Ismoving));
End;
Procedure QuickBoxSort(var A: TIntegerArray; var B: TBoxArray; iLo, iHi: Integer; SortUp: Boolean);
Var
Lo, Hi, Mid, T: Integer;
TP: TBox;
Begin
If (Length(A) <> Length(B)) Then
Exit;
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi) shr 1];
Repeat
If SortUp Then
Begin
While (A[Lo] < Mid) Do Inc(Lo);
While (A[Hi] > Mid) Do Dec(Hi);
End Else
Begin
While (A[Lo] > Mid) Do Inc(Lo);
While (A[Hi] < Mid) Do Dec(Hi);
End;
If (Lo <= Hi) Then
Begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
TP := B[Lo];
B[Lo] := B[Hi];
B[Hi] := TP;
Inc(Lo);
Dec(Hi);
End;
Until Lo > Hi;
If (Hi > iLo) Then QuickBoxSort(A, B, iLo, Hi, SortUp);
If (Lo < iHi) Then QuickBoxSort(A, B, Lo, iHi, SortUp);
End;
{*
Sorts A TBoxArray by Mid-Point. Closest OverallBox by Midpoint to the From-Point First.
*}
Procedure MidSortBoxArrayFrom(Var BoxArray: TBoxArray; Const From: TPoint);
Var
I,L: Integer;
Mid: TPoint;
DistArr: TIntegerArray;
Begin
L := High(BoxArray);
If (L < 0) Then
Exit;
SetLength(DistArr, L + 1);
For I := 0 To L Do
Begin
Mid := MiddleBox(BoxArray[I]);
DistArr[I] := Round(Sqr(From.X - Mid.X) + Sqr(From.Y - Mid.Y));
End;
QuickBoxSort(DistArr,BoxArray,0,l,True);
End;
Procedure SortFarmGrid;
Var
X,Y: Integer;
Begin
GetMousePOS(X,Y);
MidSortBoxArrayFrom(FarmGrid,Point(X,Y));
End;
Function FindLivid(Var X,Y,I2: Integer): Boolean;
Var
B: TBox;
ME: MEvent;
I,H,CTS: Integer;
ATPA: T2DPointArray;
TPA,PAR: TPointArray;
Begin
Result := False;
If Not WaitLoggedIn(1000) Then
Exit;
CTS:= GetColorToleranceSpeed;
CombineTPAWrap(TPAFromBox(IntToBox(245, 150, 275, 190)), TPAFromBox(IntToBox(430, 20, 515, 230)), PAR);
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(4.17,0.56);
FindColorsSpiralTolerance(MSCX,MSCY,TPA,1447447,FarmGrid[I2].X1,FarmGrid[I2].Y1,FarmGrid[I2].X2,FarmGrid[I2].Y2,4);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2,0.2);
ClearTPAFromTPAWrap(TPA,PAR,TPA);
If (Length(TPA) < 1) Then
Exit;
SplitTPAExWrap(TPA,10,10,ATPA);
If Debug Then
Smart_DebugATPA(True,ATPA);
H:=High(ATPA);
For I := 0 To H Do
Begin
If (GetArrayLength(ATPA[I]) > 10) Then
Begin
B := GetTPABounds(ATPA[I]);
B := IntToBox(B.X1-10,B.Y1-10,B.X2+10,B.Y2+25);
With B Do
Begin
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.46,0.11);
FindColorsSpiralTolerance(MSCX,MSCY,TPA,9012621,B.X1,B.Y1,B.X2,B.Y2,13);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If (Length(TPA) > 0) Then
Begin
MiddleTPAEx(ATPA[I],X,Y);
ME := ConMEvent('human',X,Y,3,6,Mouse_Move);
Wait(Random(200));
If StreamMouse(ME,['Cure', 're-p', '-pl', 'lant', 'Dise', 'seas', 'd li'],[],500,0) Then
Begin
Result := True;
GetMousePos(X, Y);
Exit;
End;
End;
End;
End;
End;
End;
Procedure ReturnValues(colors: TIntegerArray; Var HueMods, SatMods: Extended; Var color, Tolerance: Integer);
Var
H,S,T: Extended;
I,II: integer;
HSLColor: Array[1..3] Of Extended;
HSL: Array[0..1] Of Array[1..3] Of Extended;
begin;
For I:= 1 to 3 do
begin;
HSL[0][i] := 255;
end;
For I:= 0 to High(Colors) do
begin;
ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
For II:= 1 to 3 do
begin;
HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
end;
end;
H := (HSL[1][1] - HSL[0][1]);
S := (HSL[1][2] - HSL[0][2]);
T := (HSL[1][3] - HSL[0][3]);
Try
HueMods := (H/T);
SatMods := (S/T);
Tolerance := Round(T);
Except
HueMods := 0;
SatMods := 0;
Tolerance := Round(0.0);
End;
Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
End;
Function FindSoil(I: Integer): Boolean;
Var
ME: MEvent;
B,B2: TBox;
TPA,TPA2,PAr: TPointArray;
Hmod,Hmod2,Smod2,Smod: Extended;
I2,H,Tol,Tol2,CTS,Col2,Col,HA,HB: Integer;
TBA: TBoxArray;
MBP: TPoint;
ATPA: T2DPointArray;
Begin
Result := False;
CTS := GetColorToleranceSpeed;
CombineTPAWrap(TPAFromBox(IntToBox(245,150,275,190)),TPAFromBox(IntToBox(430,20,515,230)),PAR);
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.40, 0.80);
If (CountColorTolerance(3557184,FarmGrid[I].X1,FarmGrid[I].Y1,FarmGrid[I].X2,FarmGrid[I].Y2,8) = 0) Then
Begin
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2,0.2);
ColorToleranceSpeed(2);
ReturnValues(SCols,Hmod,Smod,Col,Tol);
SetColorSpeed2Modifiers(Hmod,SMod);
FindColorsSpiralTolerance(MSCX,MSCY,TPA,Col,FarmGrid[I].X1,FarmGrid[I].Y1,FarmGrid[I].X2,FarmGrid[I].Y2,Tol);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2,0.2);
ClearTPAFromTPAWrap(TPA,PAR,TPA);
If (Length(TPA) < 1) Then
Exit;
SplitTPAExWrap(TPA,30,30,ATPA);
HA:=High(ATPA);
For I2 := 0 To HA Do
Begin
B := GetTPABounds(ATPA[I2]);
ReturnValues(PCols,Hmod2,Smod2,Col2,Tol2);
SetColorSpeed2Modifiers(Hmod2,SMod2);
If Not FindColorsSpiralTolerance(MSCX,MSCY,TPA2,Col2,B.X1,B.Y1,B.X2,B.Y2,Tol2) Then
Begin
If Debug Then
Smart_DebugATPA(True,ATPA);
B2 := GetTPABounds(ATPA[I2]);
SetArrayLength(TBA, Length(TBA)+1);
TBA[High(TBA)] := B2;
End;
End;
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2,0.2);
HB:=High(TBA);
For H:= 0 To HB Do
Begin
MBP:= MiddleBox(TBA[H]);
ME:= ConMEvent('human',MBP.X,MBP.Y,5,5,Mouse_Move);
Wait(Random(200));
If StreamMouse(ME,['Fertilise', 'Empty', 'patch'],[],500,0) Then
Begin
Case Random(10) Of
0..1:
Begin
FastClick(Mouse_Right);
If WaitOption('Empty',500) Then
Begin
Result:=True;
Wait(RandomRange(2215,2570));
Exit;
End;
End;
2..9:
Begin
FastClick(Mouse_Left);
If Not DidYellowClick Then
Begin
Result:=True;
Wait(RandomRange(2215,2570));
Exit;
End Else
FailSafe;
End;
End;
End;
End;
End;
End;
Function GetLividType(X, Y: Integer): Integer;
Begin
Result := 0;
If (IntInBox(X,Y,Box1) Or IntInBox(X,Y,Box2) Or IntInBox(X,Y,Box3) Or IntInBox(X,Y,Box5)) Then
Result := 1 Else
If (IntInBox(X,Y,Box4) Or IntInBox(X,Y,Box8) Or IntInBox(X,Y,Box9) Or IntInBox(X,Y,Box10)) Then
Result := 2 Else
If (IntInBox(X,Y,Box7) Or IntInBox(X,Y,Box11) Or IntInBox(X,Y,Box15)) Then
Result := 3 Else
If (IntInBox(X,Y,Box6) Or IntInBox(X,Y,Box12) Or IntInBox(X,Y,Box13) Or IntInBox(X,Y,Box14)) Then
Result := 4;
End;
Function LividMenu: Boolean;
Var
X,Y: Integer;
Begin
Result := FindText(X,Y,'train',SmallChars,MIX1,MIY1,MIX2,MIY2);
End;
Procedure CureLivid(Strain: Integer);
Var
SPoint: TPoint;
Begin
Case Strain Of
1: Begin SPoint := Point(590,280); End;
2: Begin SPoint := Point(680,280); End;
3: Begin SPoint := Point(590,400); End;
4: Begin SPoint := Point(680,400); End;
End;
MissMouse2(SPoint.X,SPoint.Y,10,10);
If WaitUpText('Continue',500) Then
FastClick(Mouse_Left);
End;
Function HandleLivids(I: Integer): Boolean;
Var
X,Y,Tries: Integer;
Label
Start;
Begin
Tries:=0;
Start:
If (Not WaitLoggedIn(1000)) Then
Exit;
If FindLivid(X,Y,I) Then
Begin
Case Random(10) Of
0..1:
Begin
ClickMouse2(False);
If WaitOptionMulti(['Cure','re-p','-pl','lant','Dise','seas','d li'],500) Then
BrakeMMouse(635,310,65,70) Else
Exit;
End;
2..9:
Begin
FastClick(Mouse_Left);
If Not DidYellowClick Then
BrakeMMouse(635,310,65,70) Else
Begin
FailSafe;
Exit;
End;
End;
End;
If (Not WaitFunc(@LividMenu,50,3000)) Then
Exit;
If LividMenu Then
Begin
If (GetLividType(X,Y) = 0) Then
Begin
Inc(Tries);
If Tries=5 Then
Exit;
CureLivid(Tries);
End Else
CureLivid(GetLividType(X,Y));
Wait(RandomRange(1915,2570));
Result:=True;
End;
End;
End;
Procedure FindStuff;
Var
I,H,Win: Integer;
Jump: Boolean;
Label
Start;
Begin
Win:=0;
Start:
Jump:=False;
If (Not WaitLoggedIn(1000)) Then
Exit;
SortFarmGrid;
H:=High(FarmGrid);
For I:=0 To H Do
Begin
If FindSoil(I) Then
Begin
Jump:=True;
Inc(Win);
Break;
End;
If HandleLivids(I) Then
Begin
Jump:=True;
Inc(Win);
Break;
End;
End;
If Jump Then
GoTo Start;
If Win>0 Then
If Debug Then
Smart_DrawBoxes(True,False,FarmGrid,clgreen);
End;
Procedure FoundARandom;
Begin
Writeln('Found a random!');
PlaySound(ScriptPath+'evilaugh.wav');
Wait(RandomRange(10000, 20000));
TerminateScript;
End;
Procedure OffMM(Direction, WaitTime, RandomWait: Integer);
Var
W,H,RX,RY: Integer;
Begin
GetClientDimensions(W,H);
H:=H+50;
RX := RandomRange(0,W);
RY := RandomRange(0,H);
Case (Direction) Of
0..1: HumanMMouse(W/2,RandomRange(-110,-60),RX,0);
2: HumanMMouse(RandomRange(-50,-10),H/2,0,RY);
3: HumanMMouse(W/2,H+RandomRange(10,50),RX,0);
4: HumanMMouse(W+RandomRange(10,50),H/2,0,RY);
End;
Wait(WaitTime+Random(RandomWait));
End;
//by Home
function AreaToBoxArray(const AreaX1, AreaY1, AreaX2, AreaY2, Width, Height: Integer): TBoxArray;
var
AreaW, AreaH: Integer;
BoxX, BoxY: Integer;
x, y, i: Integer;
begin
// Calculate the area dimensions
AreaW := AreaX2 - AreaX1 + 1;
AreaH := AreaY2 - AreaY1 + 1;
// Calculate the number of boxes in each dimension
BoxX := AreaW div Width;
if AreaW mod Width <> 0 then Inc(BoxX);
BoxY := AreaH div Height;
if AreaH mod Height <> 0 then Inc(BoxY);
// Set the number of boxes
SetLength(Result, BoxX * BoxY);
// Calculate the boxes
i := 0;
for y := 0 to BoxY - 1 do
for x := 0 to BoxX - 1 do
begin
Result[i] := IntToBox(AreaX1 + x * Width,
AreaY1 + y * Height,
Min(AreaX2, AreaX1 + (x + 1) * Width - 1),
Min(AreaY2, AreaY1 + (y + 1) * Height - 1));
Inc(i);
end;
end;
Procedure CheckMovingObjs(RClick: Boolean);
var
TBA: TBoxArray;
MidBox: TPoint;
TIA: TIntegerArray;
H,I,J,X,Y,T: Integer;
TPA,PBox: TPointArray;
RCOpts: Array of TOptions;
begin
if not waitLoggedIn(1000) then Exit;
ColorToleranceSpeed(1);
SetColorSpeed2Modifiers(0.2, 0.2);
PBox := TPAFromBox(IntToBox(240, 130, 275, 185));
TBA := AreaToBoxArray(MSX1, MSY1, MSX2, MSY2, 35, 35);
TIA := PixelShiftMulti(TBA, 300);
for H := 0 to High(TBA) do
begin
if (TIA[H] > 100) then
begin
MidBox := MiddleBox(TBA[H]);
SetArrayLength(TPA, Length(TPA)+1);
TPA[High(TPA)] := MidBox;
end;
end;
ClearTPAFromTPAWrap(TPA, PBox, TPA);
if (Length(TPA) < 1) then Exit;
I := Random(Length(TPA));
MissMouse2(TPA[I].X, TPA[I].Y, 5, 5);
if RClick then
begin
FastClick(Mouse_Right);
RCOpts := GetChooseOptions('All');
J := Length(RCOpts);
Wait(RandomRange(J*75, J*120));
MarkTime(T);
repeat
GetMousePos(X, Y);
BrakeMMouse(X-10,Y-10,15,5);
if (TimeFromMark(T) > 5000) then
break;
until(not FindTextEx(X,Y,['Choose','Option'],['UpCharsEx'],MSX1,MSY1,MSX2,MSY2))
if FindTextEx(X,Y,['Choose','Option'],['UpCharsEx'],MSX1,MSY1,MSX2,MSY2) then
MMouse(RandomRange(MIX1,MIX2),RandomRange(MIY1,MIY2),0,0);
end;
end;
Procedure DoAntiban;
Var
I: Integer;
Begin
I := Random(600);
Case I Of
1..3: Begin RandomRClick; End;
4,5: Begin HoverSkill('Farming',False); End;
6,7: Begin HoverSkill('Magic',False); End;
8..11: Begin CheckMovingObjs(True); End;
12..200: Begin SleepAndMoveMouse(RandomRange(400,500)); End;
201..400: Begin Wait(RandomRange(250,1500)); OffMM(Random(4),RandomRange(5000,7000),15000); End;
401..600: Begin Wait(RandomRange(250,3000)); End;
End;
Wait(RandomRange(1150,2350));
End;
Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
H,M,S: Integer;
Begin
If Not LoggedIn Then
Exit;
If (HowManyPlayers = 1) Then
Begin
If (GetTimeRunning < ((W) + (Y) + BreakRounds)) Then
Exit Else
If (GetTimeRunning > ((W) + (Y) + BreakRounds)) Then
Begin
RealBTime := ((X+Z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Logout;
MarkTime(CurrentBTime);
Repeat
Wait(21000);
ConvertTime((X+Z)-TimeFromMark(CurrentBTime),H,M,S);
Writeln('Breaktime left: '+IntToStr(H)+':'+IntToStr(M)+':'+IntToStr(S));
Until(TimeFromMark(CurrentBTime)>(X+Z));
Writeln('Logging in.');
If SwitchWorlds Then
If LoginPlayerToLob Then
ChangeWorld(RandomWorld(True, False)) Else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
ClickNorth(SRL_ANGLE_HIGH);
MarkTime(Timeout);
IncEx(BreakRounds, (W) + (X));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
W := (BreakIn * 60000);
X := (BreakFor * 60000);
Y := RandomRange(-BIR * 60000, BIR * 60000);
Z := RandomRange(-BFR * 60000, BFR * 60000);
End;
End;
End;
Begin
{$IFDEF SIMBAMAJOR980}
SMART_SERVER := 10;
SMART_MEMBERS := TRUE;
SMART_SIGNED := TRUE;
SMART_SUPERDETAIL := FALSE;
{$ELSE}
SRL_SIXHOURFIX := TRUE;
SMART_FIXSPEED := TRUE;
{$ENDIF}
SetupSRL;
DeclarePlayers;
AddOnTerminate('FreeGlobals');
LoadVars;
If (Not WaitLoggedIn(1000)) Then
LogInPlayer;
ClickNorth(SRL_ANGLE_HIGH);
// SRL_Procs[SRL_OnFindRandom] := @FoundARandom;
StartFarm:= GetXPBar(2);
StartMagic:= GetXPBar(1);
MarkTime(Timeout);
Repeat
If (Not WaitLoggedIn(1000)) Then
Begin
LoginPlayer;
ClickNorth(SRL_ANGLE_HIGH);
End;
If FindNormalRandoms Then
Begin
LoginPlayer;
ClickNorth(SRL_ANGLE_HIGH);
End;
FindStuff;
If FarmXP < (GetXPBar(2) - StartFarm) Then
Begin
FarmXP:=(GetXPBar(2) - StartFarm);
MarkTime(Timeout);
End;
If (TimeFromMark(ReportTime)>=30000) Then
ProgressReport;
If TimeFromMark(Timeout)>600000 Then
Begin
Writeln('Nothing has happened for too long, shutting down.');
ProgressReport
TerminateScript;
End;
DoAntiban;
If TimeFromMark(Timeout)>300000 Then
Begin
Writeln('Nothing has happened for too long, resetting focus.');
SmartSetEnabled(False);
SmartSetEnabled(True);
End;
BreakHandler(BreakIn,BreakFor,Bir,Bfr);
Until(AllPlayersInactive)
End.