Requirements
Enlightened Journey
Normal Logs in Bank
Pure Ess Visible in Bank
Duelling Rings Visible in Bank
Public on Hide Or it won't be able to see if it needs to Get another Ring (MUST!)
54 Runecrafting
Weight Reducing items
No Combat items or you can't get to Entrana
{*********************V0.1*********************
******************Best S,***************
}
program BestBallonLawRunner;
{$DEFINE SMART}
{$i srl/srl.simba}
{$i sps/sps.simba}
Const
//Pouch settings
SS = 7; //Which slot # has your small pouch (0 for not using)
MS = 6; //Which slot # has your medium pouch (0 for not using)
LS = 5; //Which slot # has your large pouch (0 for not using)
GS = 4; //Which slot # has your giant pouch (0 for not using)
Var
X,Y,runs,RuneCount,Pixels,BallonPixel,RepairC: Integer;
ActionText: TStringArray;
Clock: TIntegerArray;
procedure DeclarePlayers;
begin
HowManyPlayers := 1; // Number of Players to use
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0; // Player to start with, first one is 0
Players[0].Name := ''; // Username
Players[0].Pass := ''; // Password
Players[0].Active := True; // True if you are using this player
Players[0].Pin := ''; // Bank Pin. Leave it if you don't have one.
Players[0].Integers[1] := 10000; // Number of loads
end;
Procedure Shutdown(Reason: String);
begin
ClearDebug;
Writeln('');
WriteLn('{{{==Script shutdown==}}}');
Writeln('----Reason: '+Reason+'----');
Writeln('');
Wait(RandomRange(1000,1300));
CloseBank;
Logout;
TerminateScript;
end;
Function LawCounter: Integer;
Var
Law, Count:Integer;
Begin
Law := BitmapFromString(8, 3, 'meJy7pChbVlZdXlELRJcUZaurG2tr' +
'm4EMICopqQRKARGQXVlZD5SCiBcVlQOlgAjChSAAbNgeGA==');
If FindBitMapTolerancein(Law, X, Y, MIX1, MIY1, MIX2, MIY2, 45) then
Count := GetAmount(X,Y);
Result:= Count;
FreeBitMap(Law);
End;
procedure SmallReport(Action: Integer);
begin
ClearDebug;
ActionText := ['Banking','Running to Altar','Crafting', 'Teleporting'];
Clock := [0,0,0];
ConvertTime(GetTimeRunning,Clock[0],Clock[1],Clock[2]);
writeln('-*-*-*-*-*-*BallonLawRunner-*-*-*-*-*-*');
Writeln('-*-*-*-*-*-*-*-*By Mat-*-*-*-*-*-*-*-*-*');
Writeln('Time Running ' +tostr(Clock[0])+':'+tostr(Clock[1])+':'+tostr(Clock[2]));
writeln('Current Process: '+ActionText[Action]);
Writeln('Runs Done:' +IntToStr(runs));
Writeln('Law Runes Made:' +IntToStr(RuneCount));
End;
Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;
randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;
function RuinColor: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
X, Y, Z: Extended;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.00, 0.05);
FindColorsSpiralTolerance(MSCX, MSCY, arP, 6909550, MSX1, MSY1, MSX2, MSY2, 9);
if (Length(arP) = 0) then
begin
Writeln('Failed to find the color, no result.');
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
ColorToXYZ(arC[i], X, Y, Z);
if (X >= 9.09) and (X <= 21.62) and (Y >= 9.67) and (Y <= 22.96) and (Z >= 9.76) and (Z <= 23.38) then
begin
Result := arC[i];
Break;
end;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
Procedure WithdrawEss;
Var
Ess:Integer;
Begin
Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');
Wait(RandomRange(600, 700));
if BankScreen then
Begin
if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
begin
MMouse(X, Y, 5, 5);
ClickMouse2(False);
Wait(RandomRange(300, 400));
ChooseOption('All');
End;
end else
Begin
WriteLn('No Bank Screen');
End;
FreeBitMap(Ess);
End;
Procedure DepositEss;
Var
Ess:Integer;
Begin
Wait(RandomRange(700, 800));
Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');
If FindBitMapTolerancein(Ess, X, Y, MIX1, MIY1, MIX2, MIY2, 45) then
Begin
MMouse(X, Y, 7, 7);
ClickMouse2(False);
Wait(Randomrange(100, 200));
ChooseOption('Deposit-5');
Wait(RandomRange(400, 600));
End;
FreeBitMap(Ess);
End;
Function HandlePouches(Method, Seq: Integer): Boolean;
begin
Result := False;
if (Method = 1) then
begin
//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
end else if (Method = 2) then
begin
//Giant pouch
if not (GS = 0) then
begin
MouseItem(GS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
end else if (Method = 3) then
begin
//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
end else if (Method = 4) then
begin
//Large pouch
if not (LS = 0) then
begin
MouseItem(LS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
end else if (Method = 5) then
begin
//Small pouch
if not (SS = 0) then
begin
MouseItem(SS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
//Medium pouch
if not (MS = 0) then
begin
MouseItem(MS, mouse_right);
Wait(RandomRange(20, 75));
if (Seq = 1) then
ChooseOption('Fill')
else
ChooseOption('Empty');
end;
end;
Result := True;
end;
Procedure RingChecker;
Var
DuelRing:Integer;
Begin
DuelRing := BitmapFromString(8, 4, 'meJxjYmCQWy8FQaJVQhDEF8rDBBOX' +
'XSspNVscgiDiQCRc0CSQWMAbGCfRLwpE4t0iEr2LJaesEW+fK1rdL' +
'5RbJxCfFxgYKlonBAAKbhfV');
If FindBlackChatMessage('crumbles to dust') then
Begin
If FindBitMapTolerancein(DuelRing,x,y,MSX1,MSY1,MSX2,MSY2,45) then
Begin
MMouse(X,Y,6,6);
ClickMouse2(True);
Wait(1100+Random(150));
If FindBitMapTolerancein(DuelRing,x,y,MIX1,MIY1,MIX2,MIY2,45) then
Begin
MMouse(X,Y,6,6);
ClickMouse2(False);
Wait(400+Random(50));
ChooseOption('Wear');
End;
End else
End else
Begin
End;
FreeBitMap(DuelRing);
End;
Procedure TelePortingCastle;
Var
DuelRing:Integer;
Begin
GameTab(Tab_Equip);
DuelRing := BitmapFromString(8, 4, 'meJxjYmCQWy8FQaJVQhDEF8rDBBOX' +
'XSspNVscgiDiQCRc0CSQWMAbGCfRLwpE4t0iEr2LJaesEW+fK1rdL' +
'5RbJxCfFxgYKlonBAAKbhfV');
If FindBitMapTolerancein(DuelRing,x,y,MIX1,MIY1,MIX2,MIY2,45) then
Begin
SmallReport(3);
MMouse(X,Y,6,6);
ClickMouse2(False);
Wait(400+Random(50));
ChooseOption('Castle');
GameTab(Tab_Inv);
Wait(3200+Random(230));
End;
FreeBitMap(DuelRing);
End;
Procedure WalkingToBank;
Var
ToBank:TPointArray;
Begin
SPS_Setup(RUNESCAPE_SURFACE,['4_10','3_10','4_11']);
ToBank := [Point(1618,4330), Point(1620, 4336)];
SPS_WalkPath(ToBank);
if not SPS_WalkPath(ToBank) then
Begin
TelePortingCastle;
SPS_WalkPath(ToBank);
End;
Wait(700+Random(200));
End;
Procedure DepositRunes;
Var
Law:Integer;
Begin
Law := BitmapFromString(8, 3, 'meJy7pChbVlZdXlELRJcUZaurG2tr' +
'm4EMICopqQRKARGQXVlZD5SCiBcVlQOlgAjChSAAbNgeGA==');
If FindBitMapTolerancein(Law,X,Y,MIX1,MIY1,MIX2,MIY2,45) then
Begin
MMouse(X,Y,6,6);
ClickMouse2(False);
Wait(100+Random(100));
ChooseOption('Deposit-All');
End;
FreeBitMap(Law);
End;
Procedure WithdrawLog;
Var
Log:Integer;
Begin
Log := BitmapFromString(7, 8, 'meJyzzGi2BCNJ6xBN93gN11ggsiRC' +
'ECKOXxCIIIJAhKwSrpiJgQHNIjWnCB0TK6C4lE2YpGUQUETVMQzIB' +
'QAHrS/9');
If FindBitMapTolerancein(Log,x,y,MBX1,MBY1,MBX2,MBY2,45)then
Begin
MMOuse(X,y,6,6);
CLickMouse2(True);
End else
Begin
Writeln('No Logs');
FreeBitMap(log);
End;
FreeBitMap(Log);
End;
Procedure Bank;
Begin
SmallReport(0);
WalkingToBank;
OpenBankChest(SRL_Bank_CW);
Wait(1300+Random(300));
If PinScreen then
InPin(Players[CurrentPlayer].Pin);
Wait(800+Random(200));
If BankScreen then
Begin
RingChecker;
Wait(200+Random(100));
DepositRunes;
Wait(200+Random(100));
WithdrawLog;
Wait(200+Random(100));
WithdrawEss;
Wait(200+Random(100));
CloseBank;
End else
Begin
Bank;
End;
End;
Procedure WalkingToBalloon;
Var
Ess:Integer;
ToBallon:TPointArray;
Begin
Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
'+gB5qx01w==');
If FindBitMapTolerancein(Ess,X,Y,MIX1,MIY1,MIX2,MIY2,45) then
Begin
SPS_Setup(RUNESCAPE_SURFACE,['4_10','3_10','4_11']);
ToBallon := [Point(1618, 4322), Point(1618, 4310), Point(1638, 4310),
Point(1654, 4310), Point(1674, 4306), Point(1682, 4291), Point(1675, 4267),
Point(1674, 4250), Point(1685, 4243)];
SPS_WalkPath(ToBallon);
Wait(500+Random(200));
End else
Bank;
FreeBitMap(Ess);
End;
Procedure WalkingToRuins;
Var
ToRuins:TPointArray;
Begin
If FindNormalRandoms then
Begin
End else
Wait(Randomrange(1800, 2000));
GameTab(Tab_Inv);
SmallReport(1);
SPS_Setup(RUNESCAPE_SURFACE,['7_8','8_8','8_7','7_7','6_7']);
ToRuins := [Point(3077, 3244), Point(3085, 3251), Point(3091, 3261),
Point(3097, 3272), Point(3101, 3279), Point(3107, 3279), Point(3112, 3279),
Point(3118, 3279), Point(3124, 3279), Point(3137, 3279), Point(3144, 3285),
Point(3146, 3298), Point(3146, 3305), Point(3146, 3310), Point(3166, 3313),
Point(3183, 3312), Point(3196, 3314), Point(3203, 3314), Point(3208, 3314),
Point(3222, 3309), Point(3243, 3309), Point(3248, 3299), Point(3255, 3297),
Point(3270, 3286), Point(3270, 3278), Point(3274, 3272), Point(3274, 3261),
Point(3274, 3250), Point(3274, 3240), Point(3268, 3225), Point(3263, 3212),
Point(3265, 3191), Point(3264, 3174), Point(3264, 3165), Point(3266, 3146)];
SPS_WalkPath(ToRuins);
Wait(2400+Random(300));
End;
function BalloonColor: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.11, 0.20);
if not (FindColorsTolerance(arP, 5991031, MSX1, MSY1, MSX2, MSY2, 3)) then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
Result := arC[i];
Break;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
Function MapChecker:Boolean;
Var
Map:Integer;
Begin
Map := BitmapFromString(14, 10, 'meJyr3nGrGgPFdC3GREQqw1SJSx' +
'nZKilxHqm+qNl5B4jwK4OoIagSWRl+lWiKAcKJ9hk=');
If FindBitMapTolerancein(Map,x,y,msx1,msy1,msx2,msy2,45)then
begin
Result := True;
Wait(300+random(50));
MapChecker;
end else
Result := False;
FreeBitMap(Map)
End;
Procedure Flying;
Var
Chat, Map:Integer;
Begin
SmallReport(1);
Map := BitmapFromString(14, 10, 'meJyr3nGrGgPFdC3GREQqw1SJSx' +
'nZKilxHqm+qNl5B4jwK4OoIagSWRl+lWiKAcKJ9hk=');
If FindNormalRandoms then
Begin
End else
Begin
If FindObjTPA(X,Y,BalloonColor, 15, 1, 110, 80, BallonPixel, ['Basket']) then
Begin
MMouse(X,Y,6,6);
ClickMouse2(True);
Wait(3000+Random(300));
end else
Begin
BallonPixel := BallonPixel - 5;
If (BallonPixel = 15)then
TerminateScript;
WalkingToBalloon;
Flying;
End;
If Not FindBitMapToleranceIn(Map,x,y,msx1,msy1,msx2,msy2,65) then
Begin
Flying;
End else
Begin
MMouse(240, 140, 10, 5);
ClickMouse2(True);
Wait(800+Random(400));
Repeat
Inc(Chat);
ClickContinue(True,True);
Until(Chat = 2);
End;
End;
FreeBitMap(Map);
End;
Procedure EnteringRuins;
Begin
If FindObjTPA(X,Y,RuinColor,15,1,110, 80, 110, ['ysterious ruins']) then
Begin
MMouse(X,y,3,3);
Wait(300+Random(100));
ClickMouse2(True);
End else
Begin
TelePortingCastle;
Bank;
WalkingtoBalloon;
WalkingtoRuins;
EnteringRuins;
End;
end;
Procedure WalkingToAltar;
Begin
Wait(2300+Random(200));
If Not FindColorSpiralTolerance(X,Y,8607834,MMX1,MMY1,MMX2,MMY2,45)then
Begin
EnteringRuins;
end else
RadialWalkTolerance(8541784,-1,1,50,-1,0,15);
Wait(1300+Random(400));
End;
function AltarColor: Integer;
var
arP: TPointArray;
arC: TIntegerArray;
tmpCTS, i, arL: Integer;
begin
tmpCTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.00, 0.04);
if not (FindColorsTolerance(arP, 6580585, MSX1, MSY1, MSX2, MSY2, 2)) then
begin
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
Exit;
end;
arC := GetColors(arP);
ClearSameIntegers(arC);
arL := High(arC);
for i := 0 to arL do
begin
Result := arC[i];
Break;
end;
ColorToleranceSpeed(tmpCTS);
SetColorSpeed2Modifiers(0.2, 0.2);
if (i = arL + 1) then
Writeln('AutoColor failed in finding the color.');
end;
Procedure FindingAltar;
Var
X, Y:Integer;
Begin
Wait(800);
If FindNormalRandoms then
Begin
Logout;
End else
If FindObjTPA(X, Y, AltarColor, 10, 1, 120, 120, pixels, ['Altar']) then
Begin
MMouse(X,y,6,6);
If IsUpText('Altar') then
Begin
ClickMouse2(True);
End else
FindingAltar;
End else
Begin
Pixels := Pixels - 100;
If (Pixels = 400) then
Begin
Bank;
WalkingToBalloon;
Wait(400+Random(300));
Flying;
Wait(5000+Random(500));
WalkingToRuins;
Wait(1900+Random(300));
EnteringRuins;
Wait(2100+Random(500));
WalkingToAltar;
end;
FindingAltar;
End;
End;
Procedure CraftingRunes;
Begin
FindingAltar;
Wait(Randomrange(300, 321));
TelePortingCastle;
End;
Procedure Failed;
Begin
If RuneCount = 100 then
Logout;
End;
Procedure StartRingFind;
Var
DuelRing:Integer;
Begin
If Not FindNormalRandoms then
Begin
DuelRing := BitmapFromString(8, 4, 'meJxjYmCQWy8FQaJVQhDEF8rDBBOX' +
'XSspNVscgiDiQCRc0CSQWMAbGCfRLwpE4t0iEr2LJaesEW+fK1rdL' +
'5RbJxCfFxgYKlonBAAKbhfV');
GameTab(tab_Equip);
Wait(300+Random(200));
If FindBitMapTolerancein(DuelRing,X,Y,MIX1,MIY1,MIX2,MIY2,45) then
Begin
MMouse(X,Y,6,6);
Wait(500+Random(300));
GameTab(Tab_Inv);
End else
Begin
GameTab(Tab_Inv);
OpenBankChest(SRL_Bank_CW);
If PinScreen then
Wait(1400+Random(300));
InPin(Players[CurrentPlayer].Pin);
Wait(1400+Random(300));
If BankScreen then
Begin
Wait(400+Random(200));
DepositEss;
If FindBitMapTolerancein(DuelRing,x,y,MSX1,MSY1,MSX2,MSY2,45) then
Begin
MMouse(X,Y,6,6);
ClickMouse2(True);
Wait(1100+Random(150));
If FindBitMapTolerancein(DuelRing,x,y,MIX1,MIY1,MIX2,MIY2,45) then
Begin
MMouse(X,Y,6,6);
ClickMouse2(False);
Wait(400+Random(50));
ChooseOption('Wear');
End else
End else
End;
End;
End;
FreeBitMap(DuelRing);
End;
begin
MouseSpeed := RandomRange(18,24);
smart_server := 19;
smart_members := false;
smart_signed := true;
smart_superDetail := false;
ClearDebug;
SetupSRL;
DeclarePlayers;
LoginPlayer;
SetRun(True);
ClickNorth(SRL_Angle_High);
SetChat('Hide', 1);
StartRingFind;
Repeat
Pixels := 900;
BallonPixel:=45;
Failed;
Bank;
WalkingToBalloon;
Wait(400+Random(300));
Flying;
Wait(3000+Random(500));
MapChecker;
WalkingToRuins;
Wait(1900+Random(300));
EnteringRuins;
Wait(2100+Random(500));
WalkingToAltar;
Wait(2100+Random(500));
CraftingRunes;
Inc(Runs);
IncEx(RuneCount, LawCounter);
Until(Not LoggedIn);
end.