Simba Code:
program JCBondBuyer;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
{$I SPS/lib/SPS-RS3.Simba}
var
geMap: TSPSArea;
gePath: TPointArray := [Point (353, 539), Point (353, 480), Point (353, 437), Point (313, 391), Point (298, 335), Point (296, 277), Point (259, 222), Point (194, 220), Point (159, 188), Point (136, 135), Point (82, 111)];
manageBond: Integer := BitmapFromString (119, 21, 'meJzNWG2PVdUVnrkv59x77rnnv' + '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' + 'PmEZRaqkIPmGDqEP9/AUxlwaI=');
memberPackages: Integer := BitmapFromString (174, 22, 'meJztWmtwVVcVJjfn3HvOfT/yIiCJJPJOR0hLIeUhNkCQ8LgEEO1gCSjCQHlUQJ7SMHSKqMBYyiPF4gBC1VEp4PBDG1rRGaeA7fSPdDqtf1rtL0qL//Fb5ztn3Z2bUMn/mzlzZ5911lr722uv1z45qcyjieRYXiljXHTxkRutLyKSzkFfHlWobP3e9quzX4o54/8VLOF/ePwYZ3NP4LeqthUDXsl0Cx+BSP2Vg6cIW7KFzLVD2+VRskWlODCVkLPf21zF101mc8ApOMbFeYEHY5XCgL+8yGDOUsI/IPzEgwHUKjb84rZ2aL6ydu6whiWcEXTckhMD5eRFbfoIg4rKb/AR2KgcjzDgpLw4CwZgxtOA0k5OiuARL4zNi5wQxyNVSE7KlvAPCD9F5j3ZrPhJIQwMPCR54lFUoHiXUKjQXDsZ8MhYcl5/QQ88rZ23nCKAmicqw6R51YZfmlQBqD2pIbBhO6cu4X94/JirpXnqns3LA+V5cipschqry9P5OZFKEQb9UP3fcDwfhtKN5RQbSlendLVVEVughCbK04eDcb6Ef0D4IdXaMrZtapOmJiLUlEVv0eWQjgyDAatMAFLZ8sRDzOqNRv70PVyJ+hsEVAFbECl5w8K9TKdxF2gopLsS/gHhJxFpoW/ZYk0JikW7Op76qvGonajoqJTVCgVBLWFcpvYhnCgA5mcq3hrO3K4pkQsnj5ZgDQqaS7WV8A8Qv3gI+kl1D00OnA79KtVqNdHKovzqXVrdNIkRvHYpRqfUbkaTNl2KvCi5adNlmleVcFwURCX8A8KvtcmsLNpMghI79fbgUcuohPyZyRti+y4rsNSO39o37uOKXP5P+NrnbvctrUTRU7cqRnyTenxHnb4ptu8qzQWG2NZzEISU8+r7EM/M2cbZ49tV57/xFBhMonMFE90DBijX4ogpkvku99Tb8VfehapU54uYhSJgxiNiIFrorHrqEDDEt/m36SUvQE982wXyO+ffkymOvFmEn+YKlIDtNn6jh94AW2XQz9NWWBqWU9S6w5KY0fUWi6XhF+aCwsT2VwkjM2cXDBvbfxW3ieev5iasUidR/OlZO4NA9rtT3CafOe1ceJ/mglpA4sGhtyXvwZK+yNKfYHec7hvOlU8Syw8RPA6kTDiqlvtY6Z1ZBOHKrsqa6axNeBQ9cj1y/nY8OVx9HjzWS38aNGhQeXm0fMVO207zkSe7r6JmFifCLEAYOf9Px6mliaCQsmVlln3smt3zaTL1VZ6JDJ1u+dM7IpEKKiTR6lgvq1v1Qk3tbDp2auYWUFLj5tt21q5vtlbsTqSbVE9ZyI4nRhI/KaFQOJEYp7dgSCTHQ4/isRZvEPybjpr4NVICNttavFFMvennuYqZtcFJPFPXJjty4q+p1MRCqa1fgO1wum+6VY9YVkpsNWysffYfdrhC5w0Bxqh2bFlkzlosM+LUZLJf03Ni7stLoTbsqVUw0Ax3QihFv9Jq2aI21LrMvvhhOFLF6C4YzY7BkrAPbRUf0YapaatYfBSdLTh69MokYrepa2WZr9+JxhpITI9bQh/DjJpVOFc4kuX+kjk9eY3Kci2ZcU9R1rKT6nKUBaTkMy/DE7AFVOLT7SwhJVOjzYmUAcoZLPG13aCUTWxNZybLdI0LYrGRGJh6qIoUYDAdAwwEafJz7Lp1ejDPBUd4ZVNU0Xi9nvEBBrspi22awUnBxkxSPmwM8Gdz00iPL9iF7SvAyA5HOkp27A55nuk7QOB+ntrPxT8fmcGCLkpWHuVEWFGu2md2n/0FIoiWMY0mSpKNYurAVgLsS7NgKxYOpIVc8FpJ3zjJa658F6eGL5HB7fo9KWVDhmvqU7OIU41YqLlaZcmJfK6yueAUrLKSrJbtQmzSOQP8FWKN+gW97Z/mOPT0DzlpwfFu3Hd/8AqhJtPjjY1Ok4hFmVtfxGDOi0kF/PoDyqmYFYnJRlOTU9L+tO8IfefJbOVE0pEQ7J67iM10utl8u5jMTCjAOHgxvvaEZSVSmSZAVR7uiBSUqd+i2lT6MSpBrQlf+wxqQSE22h8O3CvWPN9GeRJzMcBv3I9uPZPzXy1OK3rBKF7hvY30PXbtMWfvr+2eOwht+BISgiS97z5Pj6IH0ixyvfYvQI12vYZS4jlwQRYRjYQAwOFV+01Z4gSDfe4dlqFYkHxUJ7qC+P4rqAKGy6VTnYeRErH8aLROAyc+f7uogp7j1/W1m4ktculj2Q7DnUxDUYneotCjkA1KZhx3KO2jlunlwFt+iW4BbNF4AydF7kVcIyQjJ/8u1q5pomEFxsUPkfT0bXPOeN/r45R4n8ksWng/7MUpug5MBLVOt6iNVI5U/Fgd1eaMV9n61lEtEL70EXYHmy5xumhHYKs3c8E50T9ieO+0iZlE8atDPc73DnL7ENrQE1/XLWUI8ZhfnaucpNb2a3p6sLV4vRsdwnbCWX0gskrcBs2DJ3ssNNOXTWXHmbJIBfbKvRLR395t5nDoDKVqrI510dgw0+WEc9ku7KYmT5oOtc966c/CM7tT+xxfT7mDC0XNTOzKoMnTf9rZhR4yGh+K8MxkH6eqKu8/CL38p/M5pD64CjIzfVXSZvetcM9n4ntv/JeJC8bHIzohTGTulOIXhWduWhc/wAalm/w3lrq5uNDdUS3zKtRiRt+FXr8DD/ETyNIDLEzomYHWbK5kdzrWcXfwKDaiNbDViqrgfyV4tGfzcjqDWZikN25bibhDWhMX6rnrVDfFHl3IBBULXLdXgq2Z7joNgvz8e3bbCidSJ/g9Wbd6jDt+AWUT6dGmJ0A2OWQ2x+xedIOAMJGamEg19uoYD/xOnGF6p6LFjjB2UkNn0FBoCE39XKwRzmlu7gNyQhqBiQsimhC0DQDRZONEnD03Xpo6lHsUeuwOUiI2N+LWwbY8mAAYXEtzAtKs6YFWXROaJUilxnSY3uJl43tWpq7MUMt8CA8Rta3L9L9I4eN/AwVWcqN1ChW+yioAy8fn7fbTV2ArtNNa/qZMaNy8uoP/89LChHxuTZoLtuiaF5kWysrKM3W+Meld6s+0LfI29hRKYBBr8jxYCWWCaQEZTGXRFZulPxxJsxcFKuy+XwhEp4QqdKL9MLY1i+qMtCY1a8b3iRaZP177GAzOhqFsdLPsY9AVwA78N5zRJ/RTHcx+sugfdmbzZsD2ewMNInfL2ejhHrgBuhSJu32XhXPSXP9A8at3cYs0G3QyLUggaNuM1JSGD0hJ7bmTeHIDAeMpapD7MxxVytn8oFxSrVQN9OFIkujM2zcSqnPyLXpCwbfP3PTa1CdwYOQRBraS5XsNA2wVSxTa3THDcy3NU/Xf05JpvaNo+c6XebILn7gu1TAm8c4EZW88LMG4/riftHs+5XkWXhfbeoayieRY4e8ru+mILHD1MV/23DvOhdvus6el9Mca2NxSp/PHT3yda476TUXnc7LGxkX2j/8ght37GxgZJhUAlz6SZc7fDj2Zyil0QoigA+FOMTCVwhMHb/UAolOYl6Z0ie5ArdW51ywcWA4iF11KpGqE/x/kzsOyERc/iC/cJqE9rNXq/JF4eM9d//XLoR74pCq0F28Szx/TwbyNpSFAeBIJH/9LONdIDKkVB6k2Nn+rTNTQZm34qXVWqpLfC+0+TU/wNZu7k2p0ut+ircKXPk4s2iOcQVsLkQlNTfy2Qfww2cKqgcjlqZYWQKQgs3GMAMcjlEjZ0GjdIO/Py10OT4J4BEo4XM3aCp+ELBdCWRy7pIh4bJLwrTgutmdiVdVZZoVCEXZE6FpJwVNvg6aFwxUBwmkwKZnRDyCP0aWpB3S4PT2cM5Ki4MtCFujysitRz4Uw90pB8fBrTsh6HxKg6lEJpbS5ghQSAkIbiyURNZRdCiBJZsg+Dh6sFLLI8/jFEkTQY8Ot6y0N5wssh0vDGCJAaNrfVAtKRfUkcIIBbF475DLrAj9XROWcEfgtK4U1Su8UiuCcoudHOYwEbpA1vmfQLy70M4minAlikQi1FYiefs3MpAAJv69QP8w+4IMK/QjHTFYapNrCUYki1Pgt4X94/HQb0xMehNxcQtHa9buafm3iz9KHiFUIJO/jHIVtrrpA92S5ahLNb3jYIZuW+QIkJfxfgJ+Xfsam8BSSeqNJKXIVKSiG/yi9yPOLfLsImIqYB23Tbuak6s+mTu5FVfC5Vwn/w+P31SZbityg77zmI738psLj1BRnOnwRcs5V5M8P8nkTRt95OSj69s+0Twn/gPDjEdn+B89EsYI=');
redeemBonds: Integer := BitmapFromString (116, 15, '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');
congratulations: Integer := BitmapFromString (149, 17, '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');
firstFailSafe, failSafe: Integer;
boughtBond: Boolean;
const // Nice to have const CAPS
item := 'bond';
price := '8000000';
quantity := '1';
package := 1;
procedure declarePlayers();
begin
setLength(players, 1);
with players[0] do
begin
loginName := '';
password := '';
isActive := true;
isMember := true;
end
currentPlayer := 0;
end;
function stringPackage: string;
begin
case package of
1: result := 'JCBondBuyer: Package 1 selected (14 days)';
2: result := 'JCBondBuyer: Package 2 selected (29 days)';
3: result := 'JCBondBuyer: Package 3 selected (45 days)';
else
result := '0';
end;
end;
procedure teleToVarrock();
var
p: TPoint;
begin
if not isLoggedIn() then
exit();
exitTreasure();
repeat
if not lodestoneScreen.isOpen(2000) then // No need for this line
lodestoneScreen.teleportTo(LOCATION_VARROCK);
Inc(firstFailSafe);
wait(randomRange(16000, 19000));
until (not isLoggedIn()) or minimap.findSymbol(p, MM_SYMBOL_COOKING_RANGE, minimap.getBounds()) or (firstFailSafe > 9);
exit; // Why exit when you're already at the end?
end;
procedure openGe();
var
x, y, i: integer;
checkGeTimer: TTimeMarker;
begin
if not isLoggedIn() then
exit();
Inc(failSafe);
if (failSafe > 14) then // I'd put the whole thing in a loop and have failsafe local
begin
writeln('Failed to find banker after 15 attempts, terminating script..');
TerminateScript();
end;
mainscreen.setAngle(MS_ANGLE_LOW);
wait(randomRange(100, 300));
if mainscreen.findObject(x, y, 3152679, 5, colorSetting(2, 0.60, 0.99), mainscreen.playerPoint, 50, 110, 50, ['xchan'], MOUSE_LEFT) then
begin
wait(randomRange(100, 300));
checkGeTimer.start();
failSafe := 0;
while not (grandExchange.isOpen) and (checkGeTimer.getTime < 3000) do // are those parentheses correct?
begin
wait(randomRange(500, 1000)); // Why not just grandExchange.isOpen(3000) ?
writeln('Waiting for exchange interface to open..');
end;
end
else
begin
writeln('Could not find banker.. attempt: ', failSafe);
minimap.setAngle(random(360));
openGe(); // Probably best to avoid doing it like this..
end;
end;
procedure buyBond();
var
checkGeTimer: TTimeMarker;
begin
if not isLoggedIn() then
exit();
if (failSafe > 4) then // Same here
begin
writeln('Failed to buy bond after 5 attempts, terminating script..');
TerminateScript();
end;
if grandExchange.isOpen() then
begin
wait(randomRange(300, 800));
grandExchange.buyItem(item, price, quantity, true, 120000);
wait(randomRange(300, 800));
failSafe := 0;
boughtBond := true; // What is this bool used for?
grandExchange.close;
while not ((grandExchange.isOpen())) and (checkGeTimer.getTime < 3000) do
begin
wait(randomRange(500, 1000)); // But aren't you closing it? This will always wait 3s
writeln('Waiting for exchange interface to open..');
end;
end
else
begin
Inc(failSafe);
writeln('Something went wrong.. fixing..');
openGe();
buyBond();
end;
end;
function manageBond_isOpen: boolean;
var
x, y: Integer;
begin
result := findBitmapToleranceIn(manageBond, x, y, mainScreen.getBounds(), 25);
end;
procedure openBond();
var
bondDTM, x, y: integer;
timingOpen: TTimeMarker;
begin
if not isLoggedIn() then
exit;
wait(randomRange(1500, 2000));
gameTabs.openTab(TAB_BACKPACK);
wait(randomRange(500, 1000));
bondDTM := DTMFromString('mbQAAAHicY2VgYDBgg2BbIFYHYlUgbmBiYMgG4jIgrgfiIiDuqFAHqmZCwZIMmIARCwYDAGznBLY=');
if findDTM(bondDTM, x, y, tabBackPack.getBounds()) then
begin
mouse(x, y, 3, 3, MOUSE_MOVE);
if (isMouseOverText(['Redeem', 'Bon'], 1500)) then
begin
fastClick(MOUSE_RIGHT);
if chooseOption.select(['edee'], 1500) then
begin
timingOpen.start();
wait(randomRange(300, 800));
while not (manageBond_isOpen) and (timingOpen.getTime < 3000) do
begin
wait(randomRange(500, 1000));
end;
end;
end;
freeDTM(bondDTM);
end
else
begin
freeDTM(bondDTM);
writeln('Unable to find bond dtm..');
end;
end;
procedure selectMemPacks();
begin
if not isLoggedIn() then
exit;
wait(randomRange(1500, 2000));
MouseBox(IntToBox(278, 177, 501, 235), MOUSE_MOVE);
wait(randomRange(500, 900));
MouseBox(IntToBox(278, 177, 501, 235), MOUSE_LEFT);
wait(randomRange(500, 900));
MouseBox(IntToBox(334, 323, 467, 341), MOUSE_MOVE);
wait(randomRange(500, 900));
MouseBox(IntToBox(334, 323, 467, 341), MOUSE_LEFT);
wait(randomRange(500, 900));
end;
function getPX(): integer;
begin
if (package = 1) then
result := 61
else if (package = 2) then
result := 222
else if (package = 3) then
result := 382
else
result := 0;
end;
function getPY(): integer;
begin
if (package = 1) then
result := 140
else if (package = 2) then
result := 140
else if (package = 3) then
result := 138
else
result := 0;
end;
function getPX1(): integer;
begin
if (package = 1) then
result := 188
else if (package = 2) then
result := 357
else if (package = 3) then
result := 511
else
result := 0;
end;
function getPY1(): integer;
begin
if (package = 1) then
result := 274
else if (package = 2) then
result := 273
else if (package = 3) then
result := 270
else
result := 0;
end;
function memPacks_isOpen: boolean;
var
x, y: Integer;
begin
result := findBitmapToleranceIn(memberPackages, x, y, mainScreen.getBounds(), 25);
end;
procedure selectPackage();
begin
if not isLoggedIn() then // couldn't you just have:
exit; // case package of
wait(randomRange(1500, 2000)); // 1: mouseBox(intToBox(1, 1, 1, 1));
// 2: mouseBox(intToBox(1, 1, 1, 1));
// 3: mouseBox(intToBox(1, 1, 1, 1));
if (memPacks_isOpen) then // end;
begin
MouseBox(IntToBox(getPX(), getPY(), getPX1(), getPY1()), MOUSE_MOVE);
wait(randomRange(500, 900));
MouseBox(IntToBox(getPX(), getPY(), getPX1(), getPY1()), MOUSE_LEFT);
wait(randomRange(500, 900));
end
else
writeln('Member packages interface not open...');
end;
function redeemBonds_isOpen: boolean;
var
x, y: Integer;
begin
result := findBitmapToleranceIn(redeemBonds, x, y, mainScreen.getBounds(), 25);
end;
procedure selectConfirm()
begin
if not isLoggedIn() then
exit;
wait(randomRange(1500, 2000));
if (redeemBonds_isOpen) then
begin
MouseBox(IntToBox(360, 220, 483, 236), MOUSE_MOVE);
wait(randomRange(500, 900));
MouseBox(IntToBox(360, 220, 483, 236), MOUSE_LEFT);
wait(randomRange(500, 900));
end
else
writeln('Redeem bonds interface not open...');
end;
function congrats_isOpen: boolean;
var
x, y: Integer;
begin
result := findBitmapToleranceIn(congratulations, x, y, mainScreen.getBounds(), 25);
end;
procedure continue()
begin
if not isLoggedIn() then
exit;
wait(randomRange(1500, 2000));
if (congrats_isOpen) then
begin
MouseBox(IntToBox(333, 356, 388, 373), MOUSE_MOVE);
wait(randomRange(500, 900));
MouseBox(IntToBox(333, 356, 388, 373), MOUSE_LEFT);
wait(randomRange(500, 900));
writeln('Bond bought and activated..');
writeln('..Thank you for using Jayden Cs Bond Buyer.');
end
else
writeln('Congratulations interface not open...');
end;
begin
clearDebug();
smartEnableDrawing := true;
disableSRLDebug := true;
smartShowConsole := false;
geMap.setup('GE_PATH', RUNESCAPE_OTHER);
SetupSRL();
declarePlayers();
if not isLoggedIn() then
begin
players[currentPlayer].login();
writeln('Just logged in.. waiting..');
wait(randomRange(3000, 6000));
end;
writeln(stringPackage());
exitTreasure();
closePollWindow();
minimap.clickCompass();
mainscreen.setAngle(MS_ANGLE_HIGH);
teleToVarrock();
geMap.walkPath(gePath);
openGe();
buyBond();
openBond();
selectMemPacks();
selectPackage();
selectConfirm();
continue();
freebitmap(manageBond);
freebitmap(memberPackages);
freebitmap(redeemBonds);
freebitmap(congratulations);
end;