Spiker
2012-05-17 23:27:12
How Long have You Played Runescape?
7 Year(s)
Are you affilated in anyway with Jagex LTD?
No
Were you Referred to SRL?
No
What is your general programming knowledge?
Java, Pascal (Script), Scar/Simba, (Objective C soon)
Are you a member of any other communities?
No
Tell us about yourself…
I want to be an SRL Member for several reasons:
One: I would like to learn more. I feel that with access to scripts written by better programmers than myself, I will be able to pick up new techniques and tips and use them to better my scripts, then give them right back to the community. Also, not sure if there are SRL Members only tutorials or something along those lines, but that would also allow me to learn more and help me give right back to the community.
Two: I would like to give more back to the community (by learning more). As stated above, I would like to give back to the community, since it has already given me so much. I feel that I will learn a lot more as an SRL Member and will become better equipped to give better/more information/scripts back to the community.
Three: I want to be cool. :cool: You guys run these forums, and I think that's pretty sweet. I want to be just like you. :) I'd also like to program just as well as most of y'all.
Please show us one (or multiple) of your scripts.
7 Year(s)
Are you affilated in anyway with Jagex LTD?
No
Were you Referred to SRL?
No
What is your general programming knowledge?
Java, Pascal (Script), Scar/Simba, (Objective C soon)
Are you a member of any other communities?
No
Tell us about yourself…
From: Spiker
My name is Lee. I enjoy gaming, talking about/building computers, playing water polo and ultimate frisbee, learning about new technologies, and of course, programming. I'm from Houston, Texas and will be attending Texas Tech in the Fall to major in Computer Engineering (looking more like Computer Science now).
From: Kyle Undefined
Question: Why do you want to be an SRL Member?
I want to be an SRL Member for several reasons:
One: I would like to learn more. I feel that with access to scripts written by better programmers than myself, I will be able to pick up new techniques and tips and use them to better my scripts, then give them right back to the community. Also, not sure if there are SRL Members only tutorials or something along those lines, but that would also allow me to learn more and help me give right back to the community.
Two: I would like to give more back to the community (by learning more). As stated above, I would like to give back to the community, since it has already given me so much. I feel that I will learn a lot more as an SRL Member and will become better equipped to give better/more information/scripts back to the community.
Three: I want to be cool. :cool: You guys run these forums, and I think that's pretty sweet. I want to be just like you. :) I'd also like to program just as well as most of y'all.
Please show us one (or multiple) of your scripts.
//In order of newest to oldest:
//http://villavu.com/forum/showthread.php?t=82625
//Not really a script, but it's nifty and goes along with the scroll support on my summoning script.
Program ScrollsProfits;
Const
ScrollType = 'Ambush';
Function GetScrollProfit(Scroll:string):String;
Var
Words:String;
Index, Index1:Integer;
begin
Words := GetPage('http://runescape.wikia.com/wiki/Calculator:Summoning/Scrolls/High');
Index := PosEx('>', Words, PosEx('color:', Words, Pos(Scroll, Words))+6);
Index1 := PosEx('<', Words, Index);
Result := ScrollType + ' Scroll Profit: ' + Copy(Words, Index+1, PosEx('<', Words, Index)-(Index+1)) + 'gp';
end;
Procedure DisplayAllScrolls; //Displays all scrolls, their required summoning levels, their corresponding pouches, and their profits/losses
Var
Page, Scroll, Level, Pouch, Profit:String;
Index, Index1, i:Integer;
begin
Writeln('|==============================================================|');
Writeln('| Scroll Level Pouch Profit |');
Writeln('|==============================================================|');
Page := GetPage('http://runescape.wikia.com/wiki/Calculator:Summoning/Scrolls/High');
For i := 0 to 41 Do
begin
Index := PosEx('name="', Page, Pos('Profit', Page)+(i*1230));
Index1 := PosEx('.p', Page, Index+10);
Scroll := Copy(Page, Index+6, Index1-(Index+6));
If Pos('Titan', Scroll) <> 0 Then
Scroll := 'Titan''s con. scroll';
Level := Copy(Page, PosEx('scroll</a> </td><td> ', Page, Index)+21, 2);
Pouch := Copy(Page, PosEx('name="', Page, Index+4)+6, PosEx('.p', Page, PosEx('name="', Page, Index+4)+6)-(PosEx('name="', Page, Index+4)+6));
Index1 := PosEx('<', Page, PosEx('color', Page, PosEx('name', Page, Index)));
Profit := Copy(Page, PosEx('>', Page, PosEx('color', Page, PosEx('name="', Page, Index)))+1, Index1-(PosEx('>', Page, PosEx('color', Page, PosEx('name="', Page, Index)))+1)) + 'gp';
Writeln(' ' + Scroll + ' ' + Level + ' ' + Pouch + ' ' + Profit);
end;
end;
Procedure DisplayPositiveProfitScrolls; //Displays scrolls' names, required levels, corresponding pouches, and profits if they can make a profit
Var
Page, Scroll, Level, Pouch, Profit, Comma:String;
Index, Index1, i:Integer;
begin
Writeln('|==============================================================|');
Writeln('| Scroll Level Pouch Profit |');
Writeln('|==============================================================|');
Page := GetPage('http://runescape.wikia.com/wiki/Calculator:Summoning/Scrolls/High');
Comma := ',';
For i := 0 to 41 Do
begin
Index := PosEx('name="', Page, Pos('Profit', Page)+(i*1230));
Index1 := PosEx('.p', Page, Index+10);
Scroll := Copy(Page, Index+6, Index1-(Index+6));
If Pos('Titan', Scroll) <> 0 Then
Scroll := 'Titan''s con. scroll';
Level := Copy(Page, PosEx('scroll</a> </td><td> ', Page, Index)+21, 2);
Pouch := Copy(Page, PosEx('name="', Page, Index+4)+6, PosEx('.p', Page, PosEx('name="', Page, Index+4)+6)-(PosEx('name="', Page, Index+4)+6));
Index1 := PosEx('<', Page, PosEx('color', Page, PosEx('name', Page, Index)));
Profit := Copy(Page, PosEx('>', Page, PosEx('color', Page, PosEx('name="', Page, Index)))+1, Index1-(PosEx('>', Page, PosEx('color', Page, PosEx('name="', Page, Index)))+1)) + 'gp';
If Pos('-', Profit) = 0 Then
begin
If Pos(Comma, Profit) > 0 Then
Delete(Profit, Pos(Comma, Profit), 1);
Writeln(' ' + Scroll + ' ' + Level + ' ' + Pouch + ' ' + Profit);
end;
end;
end;
begin
Writeln(GetScrollProfit(ScrollType));
DisplayAllScrolls;
DisplayPositiveProfitScrolls;
end.//Taverly Summoner with scroll support
Program Spiker_Taverly_Summoner; //By Spiker
{$I SRL/SRL/Misc/Smart.simba}
{$I SRL/SRL.simba}
{$i sps/sps.simba}
{$i SRL/SRL/misc/paintsmart.simba}
{==============================================================================}
{========== INSTRUCTIONS ==========}
{==============================================================================}
{========== Spiker Taverly Summoner V1.5 by Spiker ==========}
{==============================================================================}
{========== 1. Fill out all the information below. ==========}
{========== 2. Start inside the Taverly bank. ==========}
{========== 3. Put the secondary item in the first bank slot. ==========}
{======= 4. Make sure correct bank tab with secondary item is selected. =======}
{========== 5. Make sure pouch tab is selected at obelisk. ==========}
{========== 6. Make sure the filter is on at the obelisk. ==========}
{========== 7. Have charms, shards, and pouches in inventory. ==========}
{========== 8. Post proggies and buggies please. ==========}
{==============================================================================}
Const
World = 22;
Members = True;
Signed = True;
Version = '1.5';
SRLStats_Username = 'Anonymous'; //SRL Stats Username
SRLStats_Password = 'anon1337'; //SRL Stats Password
Scrolls = True;
AntibanAmount = 1; //Amount of antibans (0 = None, 1 = Below Average, 2 = Average, 3 = Above Average, 4 = Extremely High, 5 = Every Trip)
Var
x, y, AntibanCount, Commit, ObbyWait, Start, TotalTimeRunning, TotalExp, Trips, PouchesHr, OneTime, XpPerTrip, XpToLevel:Integer;
CurrentStatus:String;
XpPerHour:Extended;
Procedure DeclarePlayers; //Declares all of your players' stats/info.
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers)
CurrentPlayer := 0;
with Players[0] do
begin
Name := ''; //Runescape Username
Pass := ''; //Runescape Password
Pin := ''; //Bank Pin
Nick := ''; //3-4 lowercase letters from username; used for random event detection
Member := True; //Do not change
BoxRewards := ['XP','xp','lamp'];
LampSkill := Skill_Summoning;
Active := True; //Set to true if you want to use Player 0
end;
end;
Procedure PouchSetup;
begin
Smart_Server := World;
Smart_Members := Members;
Smart_Signed := Signed;
SMART_SuperDetail := False;
ClearDebug;
SetupSRL;
SetupSRLStats(1016, SRLStats_Username, SRLStats_Password);
DeclarePlayers;
OneTime := 0;
Commit := 0;
AddOnTerminate('SmartProggy');
If Not (LoggedIn) Then
LoginPlayer;
Wait(3000+Random(1000));
ClickNorth(SRL_ANGLE_HIGH);
Wait(1000+Random(500));
XpToLevel := XPTillNextLevel(SKILL_SUMMONING);
Wait(250+Random(250));
Gametab(25);
SetRun(True);
If Not SetChat('off', 2) Then
SetChat('off', 2);
SetAngle(0);
MarkTime(Start);
end;
Procedure ScrollSetup;
begin
Smart_Server := World;
Smart_Members := Members;
Smart_Signed := Signed;
SMART_SuperDetail := False;
ClearDebug;
SetupSRL;
SetupSRLStats(1016, SRLStats_Username, SRLStats_Password);
DeclarePlayers;
If Not (LoggedIn) Then
LoginPlayer;
Wait(3000+Random(1000));
ClickNorth(SRL_ANGLE_HIGH);
SetRun(True);
If Not SetChat('off', 2) Then
SetChat('off', 2);
SetAngle(0);
MarkTime(Start);
end;
Procedure StatsCommit; //Commits your SRL stats to villavu.com.
begin
If Commit = 5 Then
begin
Writeln('Committing Your Stats.');
stats_IncVariable('Summoning EXP (Gained)', TotalExp);
Stats_Commit;
Commit := 0;
end
else Inc(Commit);
end;
Procedure SmartProggy; //On-Screen Progress Report
Var
VersionInfo, TimeToLvl, TimeRun, StatusInfo, PouchHr, ExpHr, ExpGained:String;
background:Integer;
begin
TotalTimeRunning := TimeFromMark(Start);
XpPerHour := Round(60.0 * TotalExp / ((TotalTimeRunning/1000.0)/60.0));
PouchesHr := 1125; //((Trips*25)*(Round(TotalTimeRunning/3600000)))*60;
TimeRun := ' Time Running: ' + MsToTime(TotalTimeRunning, Time_Short);
PouchHr := ' Pouches/Hour: ' + IntToStr(PouchesHr);
ExpHr := 'Experience/Hour: ' + FloatToStr(XpPerHour);
ExpGained := 'Total Experience: ' + IntToStr(TotalExp);
TimeToLvl := 'Time To Level: ' + MsToTime(Round((XpToLevel/(XpPerHour+1.0))*3600000), Time_Short);
StatusInfo := ' Status: ' + CurrentStatus;
VersionInfo := ' Version: ' + Version;
background := BitmapFromString(504, 130, //string goes here, removed to avoid exceeding 100k character cap on post
SMART_DrawBitmap(true, background,Point(8,344));
SMART_DrawText(99,396,UpChars,TimeRun,clLime);
SMART_DrawText(99,416,UpChars,PouchHr,clLime);
SMART_DrawText(99,436,UpChars,ExpHr,clLime);
SMART_DrawText(99,456,UpChars,ExpGained,clLime);
SMART_DrawText(266,396,UpChars,TimeToLvl,clLime);
SMART_DrawText(266,416,UpChars,StatusInfo,clLime);
SMART_DrawText(266,436,UpChars,' Author: Spiker',clLime);
SMART_DrawText(266,456,UpChars,VersionInfo,clLime);
FreeBitmap(background);
end;
Procedure Antiban; //Helps keep you from becoming banned.
Var
i:Integer;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
Case AntibanAmount Of
0: i := 10000;
1: i := 60;
2: i := 30;
3: i := 15;
4: i := 9;
5: i := 6;
end;
Case Random(i) Of
0: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') GameTab(tab_Stats) HoverSkill('Summoning', False); Wait(2000+Random(500)); GameTab(25); Inc(AntibanCount); end;
1: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') SleepAndMoveMouse(7000+Random(500)); Inc(AntibanCount); end;
2: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') ExamineInv; Wait(1500+Random(500)); Inc(AntibanCount); PickUpMouse; end;
3: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') GameTab(tab_Stats); Wait(3000+Random(500)); GameTab(25); Inc(AntibanCount); end;
4: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') PickUpMouse; Wait(1500+Random(500)); PickUpMouse; Inc(AntibanCount); end;
5: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') MMouse(1200, 900, 10, 10); Wait(7000+Random(500)); Inc(AntibanCount); end;
end;
end;
{*******************************************************************************
Procedure HumanMMouse(eX, eY: Integer);
By: Flight
Description: Human-like miss-and-correct mouse movement
*******************************************************************************}
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, 9.0, 3.0, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;
Procedure HumanMouse(eX, eY, ranX, ranY:Integer; LeftClick:Boolean); //Wrapper for HumanMMouse (It lets you right or left click as well.)
Var
x, y:Integer;
begin
HumanMMouse(eX, eY, ranX, ranY);
GetMousePos(x, y);
Mouse(x, y, 0, 0, LeftClick);
end;
Function BanksColor(var rx, ry:Integer):Boolean; //Searches for the bank booth (paper) color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.25, 6.96);
FindColorsTolerance(TPA, 15070710, MSX1, MSY1, MSX2, MSY2, 4);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['ank Coun', 'ounter'], 250)) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the bank.');
Exit;
end;
end;
end;
Function ObeliskColor(var rx, ry:Integer):Boolean; //Searches for the obelisk color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.03, 0.70);
FindColorsTolerance(TPA, 9548140, MSX1+20, MSY1+25, MSX2-20, MSY2-10, 15);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['ouch Obel', 'belisk', 'nfuse-pouc', 'nfuse', 'ouch'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the obelisk.');
Exit;
end;
end;
end;
Function TortoiseColor(var rx, ry:Integer):Boolean; //Searches for the war tortoise color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.14, 1.24);
FindColorsTolerance(TPA, 2452666, (MSX2/2)-20, MSY1, MSX2, MSY2, 12);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['nteract', 'ar tor', 'ortoise'], 250)) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found your tortoise.');
Exit;
end;
end;
end;
{*******************************************************************************
Function UsingFamiliar: Boolean;
By: Flight
Description: Returns if we currently have a Summoning familiar.
*******************************************************************************}
Function UsingFamiliar: Boolean;
Var
X,Y: Integer;
begin
Result := FindColorTolerance(X, Y, 11192179, 695, 130, 720, 155, 20);
end;
{*******************************************************************************
Function GetSummonPoints: Integer;
By: Flight
Description: Returns our current number of Summoning points remaining.
*******************************************************************************}
Function GetSummonPoints: Integer;
Var
Color: String;
begin
Result := Round(GetMMLevels('summon',Color));
end;
Function VanishSoon:Boolean; //Returns whether or not your familiar is about to vanish.
begin
If FindChatBoxText('recharged your summoning points', 8, 0) Then
begin
If FindChatBoxText('before your familiar vanishes', 7, 127) Then
Result := True;
end
else
begin
If FindChatBoxText('before your familiar vanishes', 8, 127) Then
Result := True
else
Result := False;
end;
end;
Function NotFamiliar:Boolean; //Returns whether or not the familiar you've interacted with is your's.
begin
If FindChatBoxText('not your familiar', 8, 0) Then
Result := True
else
Result := False;
end;
Function MyFamiliar:Boolean;
begin
If BanksColor(x, y) Then
Result := False
else
Result := True;
end;
Function CallFamiliar:Boolean;
Var
SumBut:Integer;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
SumBut := DTMFromString('mbQAAAHicY2VgYDjMxMBwDIj3QfERIJ4AFO8E4ilA3Aulpy9dz3Dz7V0wnZiVwdA8Yx4DP1AcHTNiwWAAAG3PEFw=');
If FindDTM(SumBut, x, y, 680, 120, 755, 170) Then
begin
HumanMouse(x, y, 3, 3, False);
FreeDTM(SumBut);
If WaitOption('all', 500) Then
begin
Writeln('Called follower successfully.');
Result := True;
end
else
CallFamiliar;
end
else
begin
FreeDTM(SumBut);
CallFamiliar;
end;
end;
Function WalkToBank:Boolean;
Var
bankPath:TPointArray;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Walking To Bank';
//SmartProggy;
Writeln('Walking to bank.');
SPS_Setup(RUNESCAPE_SURFACE,['8_7']);
bankPath := [Point(3530, 2896), Point(3512, 2954), Point(3466, 2989),
Point(3404, 2994), Point(3340, 2986)];
SPS_WalkPath(bankPath);
repeat
Wait(10+Random(10));
until(Not IsMoving);
Result := True;
end;
Function WalkToObelisk:Boolean;
Var
obbyPath:TPointArray;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Walking To Obelisk';
//SmartProggy;
Writeln('Walking to obelisk.');
SPS_Setup(RUNESCAPE_SURFACE,['8_7']);
obbyPath := [Point(3391, 2990), Point(3450, 2995), Point(3498, 2960),
Point(3528, 2905), Point(3557, 2862)];
SPS_WalkPath(obbyPath);
repeat
Wait(10+Random(10));
until(Not IsMoving);
Result := True;
end;
Function WaitBank:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If PinScreen Then
begin
CurrentStatus := 'Entering Pin';
SmartProggy;
InPin(Players[CurrentPlayer].Pin);
Result:= True;
end;
If BankScreen Then
Result := True;
end;
Function CloseToBank:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If BanksColor(x, y) Then
Result := True
else CloseToBank;
end;
Function ClickObelisk:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
Wait(500+Random(250));
If ObeliskColor(x, y) Then
begin
HumanMouse(x, y, 5, 5, True);
Result := True;
end
else
begin
If TimeFromMark(ObbyWait) < 8000 Then
Result := True
else
ClickObelisk;
end;
end;
Procedure WithdrawBankPouch;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
WaitFunc(@WaitBank, 100+Random(50), 4000+Random(1000));
Writeln('Banking.');
Wait(1500+Random(500));
Deposit(5, 5, True);
If GetBankItemAmount(0, 0) > 25 Then
Withdraw(0, 0, 25)
else
begin
Writeln('You do not have enough of your secondary item. Logging out.');
Logout;
end;
end;
Function WithdrawBankScroll:Boolean;
Var
SumBut, WaitTime:Integer;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
DepositAll;
If Not UsingFamiliar or VanishSoon Then
begin
MouseBankSlot(2, mouse_Left);
repeat
Wait(10+Random(10));
until(ExistsItem(1));
If CloseBank Then
begin
If UsingFamiliar Then
begin
SumBut := DTMFromString('mbQAAAHicY2VgYDjMxMBwDIj3QfERIJ4AFO8E4ilA3Aulpy9dz3Dz7V0wnZiVwdA8Yx4DP1AcHTNiwWAAAG3PEFw=');
If FindDTM(SumBut, x, y, 680, 120, 755, 170) Then
begin
HumanMouse(x, y, 3, 3, False);
FreeDTM(SumBut);
If WaitOption('enew', 500) Then
begin
MarkTime(WaitTime);
repeat
If BanksColor(x, y) Then
begin
WaitFunc(@WaitBank, 10, 4000);
Writeln('Banking after renewing familiar.');
repeat
Wait(10+Random(10));
until(GetBankItemAmount(0,0) > 0);
DepositAll;
end;
If TimeFromMark(WaitTime) > 10000 Then
begin
Writeln('Could not find bank. Logging out.');
Logout;
end;
until(BankScreen);
end
else
begin
FreeDTM(SumBut);
Writeln('Could not renew familiar. Logging out.');
Logout;
end;
end
else
begin
Writeln('Could not find summoning button. Logging out.');
Logout;
end;
end
else
begin
InvMouse(1, 0)
If WaitOption('ummon', 500) Then
begin
If BanksColor(x, y) Then
begin
WaitFunc(@WaitBank, 10, 4000);
Writeln('Banking after renewing familiar.');
repeat
Wait(10+Random(10));
until(GetBankItemAmount(0,0) > 0);
DepositAll;
end
else
begin
Writeln('Could not find bank. Logging out.');
Logout;
end;
end
else
begin
Writeln('Could not summon familiar. Logging out.')
Logout
end;
end;
end
else
begin
Writeln('Could not close bank. Logging out.');
Logout;
end;
end;
If GetBankItemAmount(0, 0) > 46 Then
Withdraw(0, 0, 18)
else
begin
Writeln('You do not have enough pouches. Logging out.');
Logout;
end;
If CloseBank Then
begin
repeat
Wait(10+Random(10));
until(BanksColor(x, y));
end
else
begin
Writeln('Could not close bank. Logging out.');
Logout;
end;
If TortoiseColor(x, y) Then
HumanMouse(x, y, 3, 3, False)
else
begin
Writeln('Could not find your war tortoise. Logging out.');
Logout;
end;
If WaitOption('tore', 500) Then
begin
Wait(1000+Random(250));
If NotFamiliar Then
begin
repeat
If TortoiseColor(x, y) Then
WaitOption('tore', 500);
until(MyFamiliar);
end
else
begin
repeat
Wait(10+Random(10));
until(Not TortoiseColor(x, y));
end;
InvMouse(1, 0);
If WaitOption('-All', 500) Then
begin
repeat
Wait(10+Random(10));
until(CloseWindow);
repeat
Wait(10+Random(10));
until(BanksColor(x, y));
If BanksColor(x, y) Then
begin
HumanMouse(x, y, 3, 3, True);
WaitFunc(@WaitBank, 10, 4000);
repeat
Wait(10+Random(10));
until(GetBankItemAmount(0,0) > 0);
If GetBankItemAmount(0, 0) > 28 Then
begin
MouseBankSlot(1, mouse_Right);
If WaitOption('-All', 500) Then
begin
Result := True;
end
else
begin
Writeln('Could not withdraw all(28) pouches from bank. Logging out.');
Logout;
end;
end
else
begin
Writeln('You do not have enough pouches. Logging out.');
Logout;
end;
end
else
begin
Writeln('Could find bank after storing pouches. Logging out.');
Logout;
end;
end
else
begin
Writeln('Could not deposit all pouches into familiar. Logging out.');
Logout;
end;
end
else
begin
Writeln('Could not store pouches. Logging out.');
Logout;
end;
end;
Function ClickScrollObelisk:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If ObeliskColor(x, y) Then
begin
InvMouse(2, 1);
HumanMouse(x, y, 3, 3, True);
repeat
Wait(10+Random(10));
until(Not ObeliskColor(x, y));
Result := True;
end
else
ClickScrollObelisk;
end;
Function TransformScrolls:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
MouseBox(46, 68, 86, 110, 0);
If WaitOption('-All', 500) Then
begin
Wait(1000+Random(250));
Result := True;
end
else
TransformScrolls;
end;
Function TakeBoB:Boolean;
Var
SumBut:Integer;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
SumBut := DTMFromString('mbQAAAHicY2VgYDjMxMBwDIj3QfERIJ4AFO8E4ilA3Aulpy9dz3Dz7V0wnZiVwdA8Yx4DP1AcHTNiwWAAAG3PEFw=');
If FindDTM(SumBut, x, y, 680, 120, 755, 170) Then
begin
HumanMouse(x, y, 3, 3, True);
FreeDTM(SumBut);
repeat
Wait(10+Random(10));
until(ExistsItem(2));
Result := True;
end
else
begin
FreeDTM(SumBut);
TakeBoB;
end;
end;
Function RenewSummoningPoints:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If GetSummonPoints < 10 Then
begin
If ObeliskColor(x, y) Then
begin
HumanMouse(x, y, 3, 3, False)
If WaitOption('enew', 500) Then
begin
Wait(1000+Random(250));
Result := True;
end
else
begin
WaitOption('ancel', 500);
RenewSummoningPoints;
end;
end
else
RenewSummoningPoints;
end
else
Result := True;
end;
Procedure ObeliskScreen;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Infusing Pouches';
SmartProggy;
MouseBox(46, 68, 86, 110, 0);
WaitOption('Infuse-All', 2000)
Writeln('Infusing pouches.');
Wait(1800+Random(500));
If Not ObeliskColor(x, y) Then
ObeliskScreen;
Trips := Trips + 1;
If OneTime = 0 Then
begin
XpPerTrip := XpToLevel - XPTillNextLevel(SKILL_SUMMONING);
Inc(OneTime);
end;
TotalExp := TotalExp + XpPerTrip;
If LevelUp Then
begin
XpToLevel := XPTillNextLevel(SKILL_SUMMONING);
Gametab(25);
end;
SmartProggy;
end;
Function Rest:Boolean;
Var
s:String;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If GetMMLevels('run', s) < 40 Then
begin
CurrentStatus := 'Resting';
//SmartProggy;
Writeln('Resting.');
RestUntil(95);
Writeln('Done resting.');
SetRun(True);
Result := True;
end
else
Result := True;
end;
Function ObeliskScrollInteraction:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If ClickScrollObelisk Then
If TransformScrolls Then
If TakeBoB Then
If ClickScrollObelisk Then
If TransformScrolls Then
If RenewSummoningPoints Then
If Rest Then
Result := True;
end;
Procedure PouchLoop;
begin
Wait(500+Random(250));
CurrentStatus := 'Banking';
SmartProggy;
If BanksColor(x, y) Then
begin
HumanMouse(x, y, 5, 5, True);
WithdrawBankPouch;
end
else
begin
Writeln('Can not find bank.');
Logout;
end;
WalkToObelisk;
repeat
Wait(100+Random(50));
until(not IsMoving)
Wait(200+Random(50));
MarkTime(ObbyWait);
If ClickObelisk Then
begin
repeat
Wait(500+Random(250));
until(Not ObeliskColor(x, y))
ObeliskScreen;
end
else
begin
Writeln('Can not find obelisk.');
Logout;
end;
Antiban;
Rest;
WalkToBank;
repeat
Wait(100+Random(50));
until(not IsMoving)
Wait(200+Random(50));
Antiban;
Rest;
SmartProggy;
repeat
Wait(100+Random(50));
until(CloseToBank);
StatsCommit;
end;
Function SuccessfulBank:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
If BanksColor(x, y) Then
begin
repeat
HumanMouse(x, y, 3, 3, True);
Wait(1000+Random(250));
until(Not BanksColor(x, y));
WaitFunc(@WaitBank, 10, 500);
Writeln('Banking.');
repeat
Wait(10+Random(10));
until(GetBankItemAmount(0,0) > 0);
Result := True;
end
else
SuccessfulBank;
end;
Procedure ScrollLoop;
begin
If SuccessfulBank Then
If WithdrawBankScroll Then
If WalkToObelisk Then
If CallFamiliar Then
If ObeliskScrollInteraction Then
If WalkToBank Then
If CallFamiliar Then
If Rest Then
Inc(Trips);
end;
begin
repeat
If Scrolls = True Then
ScrollSetup
else
PouchSetup;
repeat
If Scrolls = True Then
ScrollLoop
else
PouchLoop;
until(Not LoggedIn);
NextPlayer(Players[CurrentPlayer].Active);
until False;
end.//Wilderness Agility Course
Program Spiker_Wilderness_Agility; //By Spiker
{$I SRL/SRL/Misc/Smart.simba}
{$I SRL/SRL.simba}
{$i sps/sps.simba}
{$i SRL/SRL/misc/paintsmart.simba}
{==============================================================================}
{========== INSTRUCTIONS ==========}
{==============================================================================}
{========== Spiker Wilderness Agility V1.1 by Spiker ==========}
{==============================================================================}
{========== 1. Fill out all the information in the setup. ==========}
{========== 2. ESPECIALLY HP LEVEL! ==========}
{========== 3. Start across the bridge(inside the gate). ==========}
{========== 4. Only lobsters, swordfish, monkfish, & sharks. ==========}
{========== 5. Post proggies and buggies please. ==========}
{==============================================================================}
{************************************ SETUP ***********************************}
Const
AntibanAmount = 2; //0 = no antiban, 1 = low, 2 = average, 3 = above average, 4 = ~every other lap, 5 = every lap
HP_Level = 99; //HP Level
HPTEA = 50; //HP percent to eat at.
SRLStats_Username = 'Anonymous'; //SRL Stats Username
SRLStats_Password = 'anon1337'; //SRL Stats Password
World = 22;
Members = True;
Signed = True;
Version = '1.1';
Var
AntibanCount, Commit, HP, Laps, Start, TotalExp, TotalTimeRunning, XpToLevel, x, y:Integer;
CurrentStatus:String;
Procedure DeclarePlayers; //Declares all of your players' stats/info.
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers)
CurrentPlayer := 0;
with Players[0] do
begin
Name := ''; //Runescape Username
Pass := ''; //Runescape Password
Nick := ''; //3-4 lowercase letters from username; used for random event detection
Member := True; //Do not change
Level[SKILL_HITPOINTS] := HP_Level; //HP Level
BoxRewards := ['XP','xp','lamp']; //Box Rewards
LampSkill := Skill_Agility; //Lamp Skill
Active := True; //Set to true if you want to use Player 0
end;
end;
{******************************* END OF SETUP *********************************}
{****************************** Developers Only *******************************}
Procedure Setup;
begin
Smart_Server := World;
Smart_Members := Members;
Smart_Signed := Signed;
SMART_SuperDetail := False;
ClearDebug;
SetupSRL;
SetupSRLStats(1079, SRLStats_Username, SRLStats_Password);
DeclarePlayers;
AddOnTerminate('SmartProggy');
If Not (LoggedIn) Then
LoginPlayer;
Wait(3000+Random(1000));
ClickNorth(SRL_ANGLE_HIGH);
Wait(1000+Random(500));
SetRun(True);
If Not SetChat('off', 2) Then
SetChat('off', 2);
XpToLevel := XPTillNextLevel(SKILL_AGILITY);
Retaliate(False);
Gametab(25);
Commit := 0;
MarkTime(Start);
end;
Procedure StatsCommit; //Commits your SRL stats to stats.villavu.com.
begin
If Commit > 4 Then
begin
Writeln('Committing Your Stats.');
stats_IncVariable('Agility EXP (Gained)', TotalExp);
Stats_Commit;
Commit := 0;
end
else Inc(Commit);
end;
Procedure SmartProggy; //On-Screen Progress Report
Var
ExpHr, ExpGained, StatusInfo, TimeRun, TimeToLvl, TotalLaps, VersionInfo:String;
background:Integer;
XpPerHour:Extended;
begin
TotalTimeRunning := TimeFromMark(Start);
XpPerHour := Round(60.0 * TotalExp / ((TotalTimeRunning/1000.0)/60.0));
ExpHr := 'Experience/Hour: ' + FloatToStr(XpPerHour);
ExpGained := 'Total Experience: ' + IntToStr(TotalExp);
TimeRun := 'Time Running: ' + MsToTime(TotalTimeRunning, Time_Short);
TotalLaps := 'Laps Completed: ' + IntToStr(Laps);
TimeToLvl := 'Time To Level: ' + MsToTime(Round((XpToLevel/(XpPerHour+1.0))*3600000), Time_Short);
StatusInfo := 'Status: ' + CurrentStatus;
VersionInfo := 'Version: ' + Version;
background := BitmapFromString(504, 130, 'meJztnfd7G1d6qJNIVLEtdhAg' +
'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' +
'Xqz5WXXkK9zVdctOfnkeFd8zbzuTkg+amsTJKc701O7LAkNJhjCzR' +
'MjlrFLS0h7Z2kzA9A70mZH4Ln55OTDxxsKSgsW9Nmu/W8QBGhgOcF' +
'8Frm6Ok2hKvOdV38ZI6wH9zegG5/cuRpIbdta/K8wKHwmoEX/us6D' +
'pcn+J7fpCO21ktigyfRl93nq3ut87viJgJ3eaQ6pRl93C/+ORLd89' +
'zFTz3viZbWnq4e6xuZedFxK7GWC+B5COmN5uPcDKB0UvZ6vrwUnH8' +
'WG/50SdFJkHxhwdGC/MP5eUt5uTg5nzmRmU76PSCebzTH5jPqDKWC' +
'k3xy1kcp2Z+kZD/OTr91vSC/prYhv6B0rdvs1vNuX7f5l8Fab2qv1' +
'7CnO9H17ZIf2nlNmbq9hd2n03mxmavn3e6vwE7x73rhRMr67uv1Hf' +
'9NPWJbuUlrrSG28Rplrnvn9u2Vf+X4/R7ZGs8LnJdx8Dw+/n73vGu' +
'5Kv+vnr4Xy/NAYXFFV2PHvNEwqY+BkJ6gM9nIX0+VFL1eUnSqpBCD' +
'pk/j/54gnsfB/GJezmx25hRuLTWIm8R2J1naLfGNOJ5PkUcZ405Z0' +
't9Lzvo4OfNhrcV2JMY0aTQcONCsYT2m7gXwqikfL3sCRFz+DVDhxn' +
'HKLgqHpuQp4FYdXDToNcpym0D2lFAV0BRZjnApmN/zsW5Xxx20zTt' +
'iApeE8JNuHZvk+idPkYmncyQ8vy+3CRztO2DR1bvM/7lAvs7v7ebW' +
'7fmxz1nX/SL3o+tGHv0MPP+Uep5wsL6lqbl7Li1jRq8zxZ/SRc9DS' +
'M8aJuTqtmOF+cAJ1BK26I2yYhLSn8FRvb0ctqgAVD+Xmz2TnTmZlT' +
'GER5XqTrR7vljLmrW1SRkPiOSTMz+c1WsPlddWVh2MNSesb2uFow5' +
'Pl73vhW4+XqgCnnf6nnv6uN0GgRVxal2f511/RQ6OW6/ylyNcV8eP' +
'97XXcthNPWLruyTWt0muh9TTDno6R8Lzu55916MKc975+qnTz/kvQ' +
'QJ7vWWe91qv0u17Cnlfdv3Vm5+zm1TfxlP/Br7/des9T2jvHJgsrb' +
'DE2Aw4dWOIPaKLXjhSiJpBYcmTplLl5+3150tPO1QPUf0Cqm+TPZ2' +
'daU1PHUDlsChv0xRnLtNrLWnvJGY8QPF89iczhtiGQ23FJdUb3FQB' +
'U9X4VovAx5t6HZ53ije89jbgVYN+9LxA/Mxfo0BllW3u+TUdsa3xv' +
'Cdve1ra+ub3xfPkInG6aH1sJb19PO/25JKXJup5HzlQ37IYF9dmLD' +
'PFnTSYj5rMx8dNhjFzzIQ5ZiYhfiE58XhWxom8nJMFeScL80/iXm6' +
'OFuQt5+XOZmVMpqeNpib3xpk7Y0wtBn2Dlq1hVJ0aJjHjPsTz+amX' +
'DxsNXQebw8Mj/LKpXkupnCoSbJnn3d4L6zPkBj3vyRUCSxOYgTueW' +
'+n5TT1ifr8k1uR5ckh997zw/L6cfbc1wbye2W3oed937e7TQr943h' +
'eT+9LjwfZpFdvU0m1LSW2MPqiPWTbGnbBqDb1Gw0C0cTjGBMKfTYi' +
'bjDNPxsVOxMWOmmOGY6PHzLEjsTH90cYek6HLqG/Ra1t0WpD8AQ1T' +
'pVT0WHohni/MfPdEjKmpoaOm9pAfN9XrvcxP14vlef42rLWFF7ciT' +
'3sq3HLEU46Xv9nwTcfnPU5rXEffOFvpeX8dMT9eEl43yVOZiKcSpb' +
'XO78vdQXzu+r3wm9o29Lzrb8mfXHftyRc91PNuKS6pKiuvbW3rNcW' +
'fNMWfio070a1StmqYToN+INo0Am6PiR6KiQaxtxt0oPQOg67baOiL' +
'Rr3Qdxj09SxTx6jrIJJXq0ZN2Qlp71jS73Y3tJeW12bnFrFaP7eNF' +
'U7g1HjLjW+B5/mvFf61ltfmgW5Xd+eLHqdWMGNfrNL+HXgQeMhLCC' +
'z2ufC80xHbSs8LFyq52nut87vienF6Sm4Il7BvQ897eqlxTUk9+XL' +
'Fj573pYWUJ+eL3lrKleKSyvLKuoHW7ozYyT5twqSW7UtOmSyvmjnU' +
'vNwzePb4G4vtPX3R0c2MqkGtambUbYx6tqVzvrO3PzNzNCdvwGgY0' +
'ukGGPWUuSIz7fro/kNFxRV5+SUKpf87unnsQyU3cnm/ePG815vd7S' +
'47eR5ukCNfPuUO4IvteacjtpWe9/1CXeuF7eOp597I3JbPCtSY3Ya' +
'edz2/bt9DqeeFSbCk5BeU7T/Y1NzYPqFl+zt6r16/e+v2g2vX3737' +
'3sdXr929fPWdBx9+ev/9x5cWj9155+HDj39w7cZ7N2/dv33ng7fvf' +
'Hjx0u03zl07euzsyWhjf2v3gYPNIPmk5IzN22Dh4Ee4Pexme95rLw' +
'q+KEI4Yb6mw8JvK0Ru1QsQCPG+EWj5KLAXz4XnN6/IxpdNcutYgeO' +
'8jvkFrjSBmvzClfy3p+edZnAbn4zhyvN+97wn2/uSydkOtSvN5oTq' +
'mgPpqRmlJRUFheXg+fqG1obG9tGx2Rtv3QfJA2fOXj195srZ8zfA5' +
'G+cvXbhzbdWTlwAsa+cOG+bO3Zs5dyNm/duv/3g/QdP4InQ2t7b2N' +
'xRU3coL684Jzu/oqK2sHDNraJ8x1NKVuDFefuUw65j13zpn81di8h' +
'VnnctjnSawfUWE93z/jpim3FJbORCdT3U65vf7TkSCNqFe7TYnp53' +
'+rlbzx/Bleep5/mUllTW1R2qrKhNQ54v3197qKr6IEi+p29kcHiyr' +
'39sZMw2MDgxbJ0eGJrs7RsdHJ6am1+ZmFoaGbX1D040t/a2dw4AnV' +
'2D8NnXP2odnZmeWW5p7S6rqC0uKs/NKaisrC0vq87IyIZVWCzJ697' +
'UNdVS5i5jsTzvYwmm26VtMJ53+8OOz1j+DUtSGav6FnPnea/ZJ1E8' +
'v8EjtjWXhNtHgMAbqO+1ggXm973FLv/IPBf15z0dENf30AuoUuU/Y' +
'+yq//jrX/jic+FakcK2F87VCLex2uzy2b2J/XsT+wyZLUWFJRnpWb' +
'k5+TGx5YEh2SHhWRVV+ytB+E2djc3doPfOrqH2joHuXitMwGdXzzD' +
'5pqWtt62jH/57sL4NpqtrDxWXVheXVr0WlBEqyS7IL8vLLSwrrSor' +
'q05OSmUNCQHK7ABVrt89L3DnilV/nq+Xrfe813Jq1zoYTg8CAvX8u' +
'i8JgVB/8yrheD3vbpcgsGsCbZZF8bzrKXaNT+4+Lfz0m38CQPXY87' +
'949NW/vrSe32Wq35s0hFSfOh6XWpGakpaakh4WkfdaUBZYWqvPKSg' +
'sLymtrq6pr6k9dOBgc/2hNtB+/aH2zu4hCN1b2/s6ugYbmztr6hrK' +
'K+oqqw7AnOWVdaVl1a8Gpr0alB4cmmmxFIDnc7ILsrPylMbMXWzpL' +
'qZwl6bI7553e6NtsecF2sNuN8+7bUjo1vNeaw1RzwtvkqfST/d1op' +
'4WrnV+p/O+pu7IuCVsh/5tfPe8c4re5bp1eP4fP8Wef/yVkOd9ybe' +
'4Ot+17NXT9PpqY/rR869kLe5NHt6bOACefyVrISkxOSUlLSwi/7Xg' +
'HFB9aHiW0ZRfWFwBDi8pq66o3F8LPq/cDzKHOP9gfSt8U1xSBZKvq' +
'DoAExD/w0Mhv6AsLiEfJP9aUCa8FxiMBVmZuelpWSnJ6btjmnfrq5' +
'HqtWW79DUvpOed7jKB+mDCSxNu9eOL54Xf332sCuKUGdhKz2/qEfN' +
'7e1iBTfLkbfd1ojx73tP8Tud9TV2D8i9R0fur9N3zXgvEn3zRTT1P' +
'2Js6+Urm3N5kK/J8snW3YX+8OT4hIQXF88TzkuyQ8Mx2pbxNIW9n1' +
'IdizEUFZeUVtaSafV5+KUzAIyA3r6S0pLIyp6BFy3YqFRVRhtDwTH' +
'gdwC8F2RJZdkJ8UqIlxRybsCeuY7epHlSPMB7cpVtzHwhr7Ylxiz3' +
'vepNy82+954XvBeEKda5bSD3/XHh+rWG5L1eCazayRmzPC+8mrlR5' +
'3Pe8jS81Jz3ZXtjznn7laV2bUUr7SsbsK+kze5NH9ib27bX0ByiyX' +
'lFlatj8iMiKwJDifcG5YRFAHvE8CLxHrexTK3tUyg6lHL7sUil6Vc' +
'p+tQroVSvhvx34y06VCp4O+4Kx54OzwyS5MdFmYJcscU9C9x5z627' +
'Twd3G/buNB3Yb6tax2WsKV4Qbqnjqr3Ld/RLDTedaGYCLhz11dSj8' +
'Pr5uz/tS49TrbJvnea+53009Yuvz/Po2yVNtRrc/cXtNCs/vdb8EK' +
'iW6nuJV5TWed23zPO/jEGPCPXg8+fo96nm759OnX0mbQp639IJ+A6' +
'LSAuQZKm2vWjsQHtkVHtmqULdq1E3PrI48rwLPg/Phy278DUh+gOE' +
'8r+hWKWE6UlkviawPlTaGSptgIUaDSc1GB8gSd+kq98R37o5pRKo3' +
'1O3W1/7Gq2vu8WZNxUxb3P+8aw0W/p3ox97UN+55fhwo8Oh0ur/Wd' +
'/Nuh/7n/eX5dWyS77sv8PopMD9/v4QTmwLPKYELaTt43vUse+mR75' +
'sfo8o23/zT42/W5nlPHnYtRfXF2L7M76mU1i+S36Wt2Jsyujd1fG/' +
'SEITZSPKyxIDIZF30vC56TqaaVummWONUvraqw2F1kHw/UbpSgcJ7' +
'9I0SJE88DzPgL9GzQGuc1himpSqE1jTLskk7JbFo+fIMeHHYY27bH' +
'd0AzgcCNMXr2HgfQ3rhMU8F8GVkJYHBsj2l6D0pyNNyNuh54QPl4w' +
'BJvuRF/VUNddV96u/xpPzl+fVtko/BiUBvXb6cHU+S9HoFenqxFRh' +
'YbfM8L5BI5J8Fgdnce95zvcoX2PN7LX2opg14PnEQYuwAmWVnRNwu' +
'WZLWNKM1zkiVExr9hMYw3sDEd9qtbg/dQeOg9C7HN4MMog97vssR4' +
'euME/CMgIUArHE6RF62UxITILXYPR/fgTzPlu3SlsPn+rbf673Gvy' +
'S2bHxYt72IOIXEPlZ39IvnBY6SjxZySv/6/eb1ZXzYzThiG/H8Ojb' +
'Jl58IVynxOr/Ar7x63u14l9xeCyxzMzwvcN366Hn7RQuGt0veJ8/7' +
'UovSU4mqLzUnXZcjPL9fPL8nrgPCeBTMW/p2ayt2Rph3hptCFOUQz' +
'6u0NqlqBvwMribRO9CLQ/chRt2PUzdE6eQbzvPdjgg/R98AYTwXz6' +
'v0w7DwndL4AHk6iH1PfNduU/0uTdEuTfGudcXzwle1aypP4KZ2Mra' +
'PbT+FPe/0Q7eVqIWH81irtdZ0fGpcXtUF3pR9GSra97aiq9pkeSuH' +
'3dQjtkHPr3WThA+1px4M1jG/1z7cBGZY0zuX19ZVG7xU3B5bmKfD3' +
'UDt7s/1N//8CHB4XqCd1Ivs+ZimPeaWPQm9e+I6AxRZO8OMO4IZCO' +
'Bx0mYWgMAeVN+HE+9E4KD0YQ2yei8qjUXfDGLPA7h89lmE38ym6WM' +
'WZWpYlA0WCNM4b5ME8TysC+VtDLUBqtwAdT7gl90RRtjzFArl8VqK' +
'Hrx2l7p5eH2R5x6Cj3ie/1jQ83x8cbiwnzfyW78fLlQSGtMAkt8T2' +
'7pTlrQzVL8jSA2xN+hdqpyWqaZY42S8vo8E6uBwEPiQRm1FnidWJ0' +
'pH5nd4XtmrQsE8fNnPqOG9IFKNFgXL1EUv7JSYSX4eQvrdMU0oM6/' +
'MClDmAFtwbVDPUyi+4Eu5gIiSf+zN8/ybmvRpw8eX5b9ontdX7TbU' +
'gHJ3Rx+CYHtHCLsjUAly1ppQPK/S2kD4ddpcnKVB9SchSrdqmBENM' +
'4xTNyRpA9NWnue5CB/+BG5XsrCoGa3Jpo9ZCpDE7oyID4hKDYhM3m' +
'08sEtTEiBPA+eD+bfg2qCep1B8x5PtfR/oZPMQ8Dx/81wlv45+zNZ' +
'n77U+ETb1cKHcOFuKKjcaanHSRrMjUI7krLXhpA0I3zbIsCQbT5I2' +
'oywD4JBe1a8m5leD+XHSnkT4XG5HrY9d1hgXZSqbWj9niD28LzKXV' +
'LnZKU1ATWKZ/J2RSTsjk+FT9CuHQqG8YBDPP3Tw0nr+NW3+LqZgl6' +
'4SrIuSNsHMjn1yrWk2ipmWKqdQAsc4bQ/dscDB3mMsA2CxqwbUELc' +
'jz4/aI3x7JoeL8CGGZ03zUtW0gp2BaYmqDhfFJqBaPbqKAHXeTpll' +
'pywBvhH9kqBQKC8YfvG8K8Klq8LtqrbA6q4UlJXll5bmlZTs0ZXtC' +
'NVxnpcpJ/meB5+jKjRqpPRxVgMQsUMwP4yDeTA/8bwjt6MmuR14Nd' +
'Ca5qTKaXhw6GMWVboheJpASL9TEgPvEQGqXIk20ZyYFJtAPU/ZfEg' +
'VO98RfYMpGwM8//DrX3zwzS9eZs+jNkqKdH1SPng+t7g4NFQSEhIW' +
'FBSCKkOiSu+TWtM0a5zmp2hA75NaDTCGUzf2YB5H+DAxgDP28CVIH' +
'j0INGrS3grieZlqCjwPS94RwgaGq8LCZTlFRVkFBckZGYlpaQnJyU' +
'EyjehXBeUFh3r+JYPUsQHVc8n5R2tfiKdMi6e+EYTZ+rzNLqZoZ2R' +
'SQFRKgDJbHZcbEhph97xxWqoYj1CMs8Ypo2Gc8zwIHHw+pdVMaVkI' +
'6Uc0aojYSTAP/yWeh7CffEly+DqTTWuywSNDpprEsf10eLiUkJGXl' +
'11YKDel7ZaZd4QZ4W1C9KuC8oJDPf/y8Wg161jC8+55IKl6ZEeINi' +
'AyOUCejpI2Qep9ERkQw0coxgDwfIa+bQR7fgBn3cdZZlrHAhNalLq' +
'x4nT9BKuB/3Ke5yJ8+CGuokneDiYgtoclg+F3hWrQSuXpAcqsnRFx' +
'O8IMO4I1v77rNdEvCQqF8pKzVqv7XgIrovl7zn3effb3Ol//UdXoN' +
'TlrfjUoXMH2sIYpzvM1+qpRnJ8ZRNkY9aRWM6NjZ3UshPRg8pVbD5' +
'cu353vtU46PA9h/wjK4UOEj8pqHZ6fxJ6fgwXuDjHtCFQBAeHR8GS' +
'xlPbkNMxmHpwU/fxSKBTKC+n5gUs/6Xvzae/5P2w78WnV2NXCrhVd' +
'tE1jgHh+nHi+SZeJi1xRvRqSnJ/VaW06LYT0C00dr7/75PhbH5565' +
'9FUnNlqD/uVMBtXVmswzaz2/HSwNDckTGpMLS/qWqkZu1ZpvVjSez' +
'q3aV7080uhUF5mfM/JbLydlO+5Hb/s2sjNr63X/3zo2k87Tv+gZvJ' +
'mUfcJ0LJaN+GI5ydHdeYxDWNlUCoeAvhpLTun1wIQ0r9x79M37v/2' +
'yu2PTt99fOzKu1x6B2VytJoJ7Plo44RTPB+lKTs4f+/Q4vsNSx90n' +
'fndg7a7VSOXi7tOiH6WKRTKy8wL7PnxO9+O3f6rkbe+aTz8sMJ6Ma' +
'91CbSsYInnR0HLELeTujS4RiUzo2Pn9dp5vQ6iegjmQfUrtx6+fvc' +
'3j195b8SR3oHZIOxHCXyWiTVacRcKKD+vNdlggeHSwsblh83HHrWe' +
'+LT/4tPGpQ/qJt8qGzgr+lmmUCgvM2vNz/iSadmI8/3o+Zn7343f+' +
'Rvrza8OzL1b0ns6uWISom45M0UicHA+iB1n2tWjODlv07ELet2iQQ' +
'ch/fH54+fe/8HJO5+cvf/bC/sbiOeBCVQhx173MtU4QPqxlyqncHc' +
'Ks2rtUOvKb7Wf/kHH6z8avPKnbStPDi3crxm7JvpZplAoLzMvsOen' +
'7/0PiOeHr39ZO3mzoONobCZyu0yFKlVKFWMQis9iz4PkxzTMtFYDe' +
'gfJLxl0CyikZ0l+/vQ7j+FxgKtZojo5k7ji5RT2fIG+CcJ40roWhA' +
'8L1EUvwHq7z/1+19nfG7zyRefpHzYd/ujAzB3RzzKFQnmZcfW8f/s' +
'c8935/HX5Zdem3vsH8PzQtZ9Wj19Hnk+fBi3LVBDMjwPg/GeeZ914' +
'flqL6t7YdFq+50kFexLP12hLYCFKdgY8zxpt2POoyLXn/Ofd5/9g4' +
'PKfdL/xWcuxx/Vz74l+likUysvMC+35vx+99bOha3/WtPywqPtEdP' +
'KiPmYJ9zw/A0DsPbPa86D0BfD8wPi8dWZp9siRy3cX3nz78NV7Cxf' +
'vEM9beZ4fZZlOTQwsUGtCvdCr9bDwRUPsYVgvBPMArLrvwo/bT/5O' +
'49IHop9lCoXyMuPJwJtR41HY+X4vh5189+9Gb/3lwKWf1M/fq7JeM' +
'lnmId6G2NvR78Gsq+fnX78Kbp+7cHvp8t0j1+7NX7gNnp9/8+2FC7' +
'eHccsp4nnSkKpfrcRdHyzAsyOKmYVp0D6st+P1Hw1f/9J68ysI6bv' +
'O/G7L0Uein2UKhfIy8yJ7/u7PR976BoLqAzN3ygfPmxLs8bxUiTLq' +
'+mgb5/lx4vme4bnzt+bPvQWeX7z0DhgeJpavvDd/5hqoHsw/Yvc8q' +
'lc5Yvf8Am9UKZhefozj+eFrX4Lqh67+Wc+5P2g59lj0s0yhUCie6k' +
'Y+12scv/Mt+BYi6tqJGyU9p0DChtijkeoFmXoezGyKWeJ7fm5+BaJ' +
'35PPU1IWLd0DvR288WLz4ztHr78NsS5ffPXztHnwJwfx89xD898i1' +
'++B5fSws83AksxSpXjTEHjGaj8F6IYwHBoErX/RffErjeQqFsh14I' +
'T0/9vZfQ0TdefpHNWPXinEjKdK9JBCpno6OtudtxjTMBMssXrwDeo' +
'cwfsmgW77yLuh95dZDcPvK7Y9gtukDDfDf4299eOzmB/AJf11ePg2' +
'eNxvHdKhsF40eCAsn9W36L/0xYeDSTwYu/TH1PIVCoWwSY2//1fD1' +
'P+84/cPq0StFqNMD8PC8TAVatsk1ttiYOb7nly+/C3pfPndz0eF58' +
'DkE8PAJs1k16pmGNpD8ys0P5qrqxnHrqj61Ms3QpYtZwHmbWV3MIs' +
'nbYL1jLgN/Qj1PoVAomwRqDHvz664zv1tlvVTYcdReZgpOVs8ptQt' +
'xsfOzOnYCdz45yWoO246SiB08f3T++Mm3Pz71zuOjNx6cvPNoGter' +
'HMHFtaTy/DgeeQQ8X64tw8+OWXhHYAzz+phFWG/r8SeDV77A/CnQT' +
'D1PoVAom8Po7Z+N3vrLnnO/X2m9WNB2mDVOskZ7Y1glO202jRPPk6' +
'4MbFk5IPbTdx+D5480tr1x77fOvv876JtbDznPj2PPk8rzxPOdjIk' +
'1TsMyIxRjcgaNUUVWPXT1zxDXfgqfzUc/Ef1QUCgUygsJSH701s96' +
'z/9h9ciV/NZlkDzujgZpWaWbSTONcJ6HEH1Gy0Iwf/zmB6ipVEUNx' +
'PYg+RNvf7zcOTCt9ej5XrUGLRN1fTARqZ7RmWxk1cjw1346fP3Ph6' +
'7+tPkI9TyFQqFsCqO3vgHV9198Wj121VLSwRomtTj2Bicz+ulcUx9' +
'4fhJ1Mow9r2NnTUabHjeVqqxFqfhbD8nnkev3JwtLHNUv7Z4fYtCw' +
'I/1qJWuYkCrHIuRWqXIcXhnIqiuGLoDkR25+DbannqdQKJRNYvQt8' +
'Pw3A5d+Umm9GJvXoNGPagzjEYpRgNGN5xq7kedRZXhUeZ6MMIKaxO' +
'p1x5dOQSR/8s4nK7c/gomjNx6A6o9euz9dUEQ8P6pBnu9VIc9r9GM' +
'y1ahEPoz6OjaMRyrqydqtN7+Cpwz1PIVCoWweYFoIqiGeL+07k31o' +
'gdGPgJMjFCOoU2LDRLGx1YY9P4mj9Fme50+984h4/sTtj+Dz+M0PS' +
'HXKYzceHL363pTFssrzhjEFOyaRD8FiYRqWTNYOwfzY239FPU+hUC' +
'ibh+3h/5p4528GLn9xaOF+cec5Rmdl9NYICLzlwyDkckOtDQ0RCJ6' +
'3B/PY8+y82Xzy7Y8hkj9159FSzQGbXgtPgfHYWNvBpsPHzq289RCw' +
'dfQNYs/3qZXJ2la1ziqJ6gfVq9hheJqQtY/c/GoMFwR3nPqh6IeCQ' +
'qFQNoNf/40du/btBcjE1m/Awie/nL7/HZi29fiTkq5Lat0QECEfks' +
'gHwcY1+kq757WrPL/U1AHBPETvEMkv5OShYQS1LB4uEFXLWbn1EJj' +
'rGeY8X8hWMg7PyyHMd3jeeuMvSAFBz7k/EP1cUCgUin8hYo+QyhIs' +
'iQCjNcJnQKBkizdj4ZP/PffRv0699/d9F35c1H5ZrRsEz0vsnrfW6' +
'8ttqPNh1F/NrMPzwOEr74Lkj1y/D582Mlysw/Nz+xtO3P5o5dZHy4' +
'unOM83apIY3VB4VB8sVqroZ3TDjUu/NX7n25n7/2i98RVE9YNX/1T' +
'0M0KhUCh+BCRPxA7k5hUA9fWHgAcfvr/Fqp//+JfLT/7T9uEvwLe5' +
'9W+qtQNq7SDYWBI1ADZu0xdhh6/yvC0jc/nKe8duPDh89b0Zg47z/' +
'BjLHHvjBm489ejUnUfjFgvn+SFGDYsNj+qBxYZH9cLTpLjt1vxH/7' +
'b46N+n7v0DCH+Iep5CobxAcGE83/Bj4+PA5SuXt9rzSLbfI8/f/Cq' +
'j+nWVth9UDzaWREHUPdStzyaexz0So4zNQlP7MVS1BvVsc+Ta/Rlc' +
'LEs8vzA2R1rLwudUYuKIhlnt+QGpohcWGx7ZA8635B6DV4mlx/8x8' +
'/4/Td79+cDlPxH9vFAoFIq/4IJ5zvArKysgfJA8xPPf/fL7rVT97I' +
'N/nnn/Hyff/Tvrjb+w5C2p2D4AJViiQPiDffq0OZ12RotSN4tlVSB' +
'wCNdPYI50oKr1XNJ+GjehItXpYZp0Ssx5HibA83Km3xHPDzF6Kzxf' +
'ln/z/85/9K/T978bf/uvRT8vFAqF4hdA8gAJ5onnieR16RU7JWZw/' +
's++/fkWh/TK6PQq66WO0z/Ux43jeL4fJ9IHwMYD+qQ5PCbg0dOXT7' +
'6Nq1C+/Qkwp9cCqI9KzvN63fG3UDA/m5rG93yPStlr97x9yeGR3Xh' +
'6cPHxvy8/+c/Fx/9h++B/Ttz9W9FPDYVCoWwckrEhEM+TYB4kL91/' +
'uWnxe4jzt97zHHJ1C3gekNjj+aExfQL4/MSthySGJzXkbVk5Nr3WR' +
'jzvqFQ/pdXADDNFpVMo+Od7XsHz/ACXt2F0wyhv85v/Z/6jf0NjF7' +
'71jehnh0KhUDYICeNJugb0zuVtwO37iqZA8gB8KbLn2V6St4mQ9zG' +
'6oWl9HHie5GdOnLm2WFGNprX2nDz2PKpvOaOzd1A5gUcMdPa8SjkA' +
'nic1ecDzUb3Y89bh61/PPfwFGbiwYuhN0U8QhUKhbASI5MHnJIaHA' +
'P7ylcsAkTywU2IG1euq/o7MA08EUTZSqel0RN0DUgVSMed5gORqvH' +
'oeJD+tc+N5R0aoF+J5NK0brJ/9ZPzOt+a8BtHPDoVCoWwQ8DapYEM' +
'ieSL5Bx++z2XpSWUbCONJ9l6s7URJG7aPZNEjVQOgYpve5Or5aZ7n' +
'p1Z7fpJ4fnU834O6PlCRXI1MRWpsWjX6sd17IkU/NRQKhbJxuJw83' +
'/MQ0vMlD87/oz/6MXzCbCJuKkTy2PMD4Hk5MwxansduJzUq5595Xs' +
'PVseF7HtyOPK9zjucB7HlUsCtnSN4GNZUKCcsQ/exQKBTKBgFvk1Q' +
'MafHKeR4mOM+T2B48/1+/+hV8KWI8D+5F/R5ohyDkVmpGGL3VF8+T' +
'RI2z5x39VXKeR08Q3ZBSg4pi4U2B0Y/I5HWinyAKhULZCBDJczKHT' +
'77nuXJYLpj/2bc/F93zpOqjUtMXHtmj0KCGsU6en8een3rmec3kas' +
'9PYc/P4C4uR9lnnu9TK3GuZhT1ciMfUuuGYVqp6RH9HFEoFMr6IIk' +
'a4nlS8Ao+J55fwf9IhE/+SzwPfPfL78X2PEqtKNkBiXxQwSItOzyP' +
'VL/A8zzJ1UzjfiynsdtJX2fcnxyeV4Pku7HnWbaH5IXgISJXo6qVK' +
'rZX9DNFoVAo64DrmgyAaTA5OBw8D9Oc87l0PUnaENXD96J0WcnB6I' +
'YZvVXFDoPnSa+SnOfncJ/zTp7nx/BePR+t7WBQUgjlbaLUfShHpB0' +
'Q/WRRKBTKWuEqyXPpGpKcIRVpXD1P0jjgeZLAETeex50e9CqY3vDI' +
'7ig1Ki0lngfJwyfn+Uk8UOyMlnieWe15e08I3PiwnOfT2Xocw6N4P' +
'kLehRNE3aKfLwqFQlkrXJ8GTobne55UtuHXt4EJ0uOByHkbFG8PKt' +
'lBHHIPwvQMrldJWDQ88zzu2cw+nuCUoy4ll5yf1Wntntc883ypJhc' +
'kD24Hz4dFdqqo5ykUynMIaQzlVJGG8zZMEJ9zLaTInOQTviepG1Hz' +
'8+D2AaWmH+L5SFUvxPac5+ex5yGkJ8OCY7dr3HoeJA9MuXi+WZOsR' +
'vXzeyRRveB5Gs9TKJTnDq4xFJE8ScXwG7dynichPcwTECgB+BVvIK' +
'QXNW/Tg/M2EG93yZTdyPM6V89rSU6eJOfHV3meFfB8n0YPy1dqOiP' +
'kXWGyNphWMB20Cj2FQnleADnvlJi53oa5dA18w83A9XtAVE9axX73' +
'y+/5fZqRplJitZYijaSUmt7wyC4p6Jntm9DFEMnbPY9HFZnE9eRJM' +
'D/uyM+TvitnPHi+X60c1jDY812Rqp4wWQdxvkyxX/RzR6FQKF4hkk' +
'9vGl25cBNkTurGO/VFRkYJ5OfkiepJrobfTTGpfkOi+i0eN9YRz3e' +
'Dh6WKDqWmZ5zn+SWDbtHhedIkyq3nbS6e77F7Xq3UdIPno9TI87Bw' +
'iOcVTKfop49CoVC8AkoHyX/91z+HT+n+y4Br7oVkdfiJHU71JIYnJ' +
'bNc9oZ8CU+NpsXvdekVW6N6kDCgYLrAwxHyTtA+5/kFvc7ueT3K24' +
'DhieT5np+xjxLu1vMq5HmmE7sdniPtsBYF0w6rE/30USgUilfA8yD' +
'kwaufgudJ9sbJ8ySHQ7zN9YTAHy6QG0mQq2b53S+/h08w/L6iKVjs' +
'1nRiSeJt4mHwPPx3RGue09mTNnzPj6/2/IxvnseSb8fPkfYoFXI+9' +
'TyFQnkuAAPvTagDe0MkT0zO/xPf8KSXG26oET5cnM+1kIWoHpzPVd' +
'HZAs9j8XbI1e2h0hZJVJtS0zmkNdscnl826InnJ7HngTGe5x2jhKP' +
'xR555nrF7fgB7Xse0KBi02DBZW4S8HcfzNG9DoVCeD0gxKwTzfBuT' +
'hDwHGJtTuhPcl1xKh2s8Rf4Ln1vi+TZQvVzdFiptlkS2wjT2PMt5H' +
'kL6ORzPj2HJj2n4ntcSXD1P+p+3atQWdZVc3aJAy28JkzXL1bCKNt' +
'HPHYVCofgIKTPl/5dUv3HqZJ40hoW/8iGqd5qfa2xFprfC80i87aB' +
'f8HyYrIXz/AIuhOU8D/E8GJ7g5Hmb3fOr2sNyni9gCpHnGfA8WgX2' +
'fLvoJ45CoVDWh1ObKS5EJzkZ0mUZp3eSnCGNp0i2n6uNT3DN+W8GI' +
'GFwr1wFEm4MkzVB4N3FxmHPo+T8slEPqkeeR30Oq0c1DHwSz5O0PB' +
'k0ds7V83h8WPD8ASZJrga9t0A8HxrRiKdbRT9TFAqFsj6IqLmAnJM' +
'8KWMF1XNjxRKNw5yk/RS/nwQ+W7DNUaomuaopStUcEtGAPdzSycbN' +
'Ys8vG3SHeZ4f0agJ4HnSHT1pTsWND87rx0zZp1YOYc8PMmrs9maH5' +
'1uo5ykUynMKSddznZU59Uv5X7/6FemmmHsKcD2ekXayYjWJjVI1Ip' +
'SNIZKDIRH1UaqGFjYZeR4nbTjPTzl7HpXAzju6wSGen8Cex+NJKfu' +
'R59XE83j5h+A5EiI5EKlogP+KfrIoFAplrfCH/HbN2/zs258D/Ao2' +
'XEtYgPxENM8rD4HbI5UNDs83tbApfM+T/DzneVD3BPY8qZMz7/A8N' +
'54UeL4XDw7LeV6uaobFQjwPqpcpIJ5vEf18USgUypogkTwXxjupnn' +
'ie34kZ3/OijycFko9CeZsmkDwgB89rUhx5G2fPg7etjGfPs6s8P6y' +
'xe16BPN8YKkWvDJIoGs9TKJTnD65fYn4zKFJzhiTkyYPA1fOkrxtx' +
'PR+prEco6oMl+4FI5aF6Jn1Gxy7iQlh3nldxnse90+vIoCTwDRkHf' +
'AB7Hj45zyvxKkjeJkyKXh9EP2UUCoWyJtx6nqTlOYd7Uj3Mw+/HeO' +
'tBeRtlA8rPo3j+EMTz9UzGjNbZ89PE84x6mHhex9rso5DoHJXnHZ5' +
'XI8+TyjbE84nqKnA78TysBZwv+imjUCgUHyEdjnHFr/xObEh/Nfw+' +
'apw6MSaQlrCkdr0ou4DzNtjzIGHJgSgUz6etz/PjyPNqV89nqvIiF' +
'WjhweE1wZI6mWL/nr1Rop87CoVC8YpTdXd+V8OXr1wmOXnXTm+cVE' +
'+y+qB6Uot+6/cCDAzIFAdI3gY8X81kufX8KM/zM7hS5YKB8zyLPc9' +
'YV3meIZ6vVSdFKg6GSA4Gh9fhKjcHAoPjRT99FAqFIgxf8pzeuUqV' +
'pCmr2xCdfM/1e8ONKiXWaCORynpwe6TyUIikHte3aaxmssHzC86eZ' +
'0dxfO7W82R8cOL5fjVXed7u+VZ1NMTwEMkHh1cHh9fK5LVhkjzRzy' +
'CFQqE4QVIrpPkS14mNU/3JlZUVksPxamyyEO7npIK9WJ6HYFumOIg' +
'9XAvBdhWTiTyvtzeGXcSeB5OPYm9jz2uI5xd5np909rx6xOH5AYaR' +
'yWtCJLVB2PNSeU2ErEz0E0qhUCh8uPCbX5bq1NUkv9TVx2VuC8/b8' +
'zYHcd6mDrRfxOTaPW9Y5fkxDTPi1vM6u+fHeJ4fxp4fxp4HIIYPja' +
'gJCqsKDq+RyKqlUdWin1MKhULhw0/R8AtbSa813FjeaxI1v4cEUpF' +
'epHj+IGD3fHgdOD9Pnc15fonveda952d19kZSnjwPsT2IPUxaHRRW' +
'GRxeHS6top6nUCjbDb6T+YYH1mF4bplc5odUpBfF8zJ5HSCV16HKM' +
'OHVEHjnqbIcnkddmS3gGvKzOlTMOro6P//M87hSJenEjPP8qN3zKu' +
'J5SWQ1juerQySV1PMUCmW7wfVpwGVpyCAgG+ltzGmcEbHKYUHsyPN' +
'RtdjzNTCdo8qecfRXiT1v745ywqPnWVJ5ftTheTIy7AjP8+qo8ojI' +
'KojnMeXSqCrRzymFQqHwISN9c52S+WWkJ34dS5KidzvCLBmpZPN2D' +
'Xu+VhqFkueAVF6TqczjPI9Nzvc8Y3Xvec24W88zds9rooojIivA8E' +
'FhFUGhZRFRlaKfUwqFQuEDnidZdNfWTxuBUz0sHDzPrz9P6l6SNBG' +
'sfZP2K3LvXmkUKhWNQEkViLQrYDpLle/kefswInioEdK/Dc/zzypV' +
'unp+yOH5DHlGRGQ59nx5YGgpOH/vq4zop5VCoVA4uLwNCen92HaV9' +
'IcAC4d3BH4uCPQOz5SVlRX40+Y1ldW/+qo0qgrASZUKklHJVJF4Xk' +
's8P+fw/JSjpNXV85PePF+tjJfISsHwgaElgaHFMB0Ukij6aaVQKBQ' +
'OUmGeS7D41/NcRXp4ghDhk6cJ6QzNaWhC/5IUFIgkH1VJkiqBoWUw' +
'kawomHV4fsHRTZmN1xJqdTup1Z7XuPd8o8ogkZVgyZcEhhRHRJaFS' +
'4tFP60UCoXCwfU8TEaA8u+wIKQbNFIaS7o1I+MJwro2e+jAjLAQEH' +
'tEZLlEVk6CbZhOVuS79fw0lvkI1/889vyco+f5cTxKuJXzPK5XCZI' +
'nnu9Wa8DzQWgVxYEhRTBNPU+hULYbTsWm/vU8qbdJ2tUSw2/N+LD5' +
'YaEgdoiucVKlBHu+LFmRRzy/iCvbEMmjxlBazYST5/XePT/AqErk5' +
'lBJTri0KCi0eF9IASCRFoPqRT+nFAqF4sSufXtJAse/3Us6dW62ZZ' +
'IHDsqkWPJlEimOtFHmvCRWnm9zeB4VwiLJs/ZGr9jz48/GGbF3fTP' +
'Bovo2Tp63ahhlRFZYRG5oeFZIeKZEVhwcXgrBPInnqecpFMr2JCBQ' +
'4vcRup36vdwyyQMHIqVYucXh0uLAkMJ9IYUQacdGIc/P8zw/iz0/i' +
'/PwxPNTaBxwLenchlSqxKp/5vlyRVyYBAyfCYYPCUsLDk0NlxaGSo' +
'ogmAfPy+S1UUo62giFQnmJIKWxHFvWYKpCpiCeB70HhkKkXQj/NTs' +
'8T4pZZ1d7fvSZ51lS5ZKUzxLP4/7nlZKIvDBJDgrjw9Ix4PkUBdOu' +
'0AxIovoj5CO66HlD7BHRDzuFQqG88ASFJOIi0SIAZ87zIepmZHlze' +
'OxXrscDzvNTgp4f1OjA8KFgeEk2ztVkOCSfGhSSBGLXxx6XqecB8L' +
'wuekH03adQKJQXnr2vqrHkCwGcUSmA/0J4jwpnZWXwKYssj5cXNDK' +
'WGZ3eZvc8M6ZhJrHnSVUc4vkwiOEjclGuBkseZWzC0oNDk8HwgcEJ' +
'sC59zJLBfEymmotUL8C06PtOoVAoLwMBu0JQ1RdpsSOeL8DOL5DY5' +
'V+E/4o/ZcUKWVGGIqtNHU08P+PwfAcTHR6RjzwvwZ4PzwoKTd8XlP' +
'JqYNLe1yzcuiCeNyLP2yCeF33HKRQK5SXh137t15HPIwrCIvIDQwq' +
'DQstk8joF0xFGvI3IJ8A8CBz5k+cCTIRFlOwLyUcPiOCc14IyXw1M' +
'ezUw9ZV9SfD5alC207p00fP6mMW9ryWIvtcUCoXyUqFiexjdkMYwI' +
'VOjjIoh9jAIGSdeMJJsO+E5+4KzX0PARC4Se3D2vuC814KysOFTXw' +
'vKgO8DQ0teoSanUCiU7YTRfAzcro9ZAs/LVDZd9ILWNEMKTwODU1F' +
'kvgqI2NNB6QBMOwyfBcIPDq9+ZV+y6LtDoVAoFCe0Jhuu/TKPM+dz' +
'uuglU9xSSUlVXl5pUnKJSlMQGApizwoMLQ0KLbN3LByOhgvBg0PVh' +
'kgOhEpbXw1KF31HKBQKhSIAa5xG8bx6QRu9GBFZLvr2UCgUCmUzkE' +
'QNsMa5cGmh6FtCoVAoFAqFQqG8hPx/HaM4jQ==');
SMART_DrawBitmap(true, background,Point(8,344));
SMART_DrawText(104,394,UpChars,TimeRun,clLime);
SMART_DrawText(104,414,UpChars,TotalLaps,clLime);
SMART_DrawText(104,434,UpChars,ExpHr,clLime);
SMART_DrawText(104,454,UpChars,ExpGained,clLime);
SMART_DrawText(274,394,UpChars,TimeToLvl,clLime);
SMART_DrawText(274,414,UpChars,StatusInfo,clLime);
SMART_DrawText(274,434,UpChars,'Author: Spiker',clLime);
SMART_DrawText(274,454,UpChars,VersionInfo,clLime);
FreeBitmap(background);
end;
Procedure Antiban; //Helps keep you from becoming banned.
Var
i:Integer;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
Case AntibanAmount Of
0: i := 10000;
1: i := 60;
2: i := 30;
3: i := 15;
4: i := 9;
5: i := 6;
end;
Case Random(i) Of
0: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') GameTab(tab_Stats) HoverSkill('Agility', False); Wait(2000+Random(500)); GameTab(25); Inc(AntibanCount); end;
1: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') SleepAndMoveMouse(7000+Random(500)); Inc(AntibanCount); end;
2: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') ExamineInv; Wait(1500+Random(500)); Inc(AntibanCount); PickUpMouse; end;
3: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') GameTab(tab_Stats); Wait(3000+Random(500)); GameTab(25); Inc(AntibanCount); end;
4: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') PickUpMouse; Wait(1500+Random(500)); PickUpMouse; Inc(AntibanCount); end;
5: begin CurrentStatus := 'Antiban'; SmartProggy; Writeln('Antiban.') MMouse(1200, 900, 10, 10); Wait(7000+Random(500)); Inc(AntibanCount); end;
end;
end;
{*******************************************************************************
Procedure HumanMMouse(eX, eY: Integer);
By: Flight
Description: Human-like miss-and-correct mouse movement
*******************************************************************************}
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, 9.0, 3.0, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;
Procedure HumanMouse(eX, eY, ranX, ranY:Integer; LeftClick:Boolean); //Wrapper for HumanMMouse (Right and Left-Click)
Var
x, y:Integer;
begin
HumanMMouse(eX, eY, ranX, ranY);
GetMousePos(x, y);
Mouse(x, y, 0, 0, LeftClick);
end;
Procedure Eat;
Var
Shark, Monkfish, Swordfish, Lobster:Integer;
begin
Shark := DTMFromString('mggAAAHicY2NgYPjMwsDwC4pZWBkY2ICYA4hVmRgY5IFYHIhlmSB8XSCuSg5kCHXQB+pkQsH8QBIbZsSBIQAAaqYGSw==');
Monkfish := DTMFromString('mggAAAHicY2NgYDjDwsBwHYjvAPFtIL4LxA+BWIWJgUEWiOWAWBWItaA4OtANqIsJjp1sLME0P5DEhhlxYAgAADQ2CCw=');
Swordfish := DTMFromString('mggAAAHicY2NgYFjKwsCwEojXA/E6IN4KxBuBWI6JgUESiGWAWAGIlYBYDYirwhqBupjAOMurAM7mB5LYMCMODAEA7bgH1A==');
Lobster := DTMFromString('mggAAAHicY2NgYKhiYWDoAuI2IG4F4mYgbgFiFSYGBjEglgJiWSYIXxuI14ZJAHUxMZxJlQHTMMwPJLFhRhwYAgB+5QbR');
If HPPercent < HPTEA Then
begin
If ExistsItemDTM(Shark, x, y) or ExistsItemDTM(Monkfish, x, y) or
ExistsItemDTM(Swordfish, x, y) or ExistsItemDTM(Lobster, x, y) Then
HumanMouse(x, y, 3, 3, True)
else
begin
Writeln('Out of food. Logging out.');
Logout;
end;
FreeDTMs([Shark, Monkfish, Swordfish, Lobster]);
end;
end;
Function ObstaclePipeColor(var rx, ry:Integer):Boolean; //Searches for the obstacle pipe color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.28, 0.08);
FindColorsTolerance(TPA, 7763057, MSX1, MSY1, MSX2, MSY2, 12);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['queeze', 'hrough', 'bstacle'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the obstacle pipe.');
Exit;
end;
end;
end;
Function WalkToObstaclePipe:Boolean;
Var
ObstaclePipe:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Walking to obstacle pipe';
SmartProggy;
Writeln('Walking to the obstacle pipe.');
SPS_Setup(RUNESCAPE_SURFACE,['9_1', '9_2']);
ObstaclePipe := Point(3858, 882);
SPS_WalkToPos(ObstaclePipe);
repeat
Wait(50+Random(25));
until(Not IsMoving);
If ObstaclePipeColor(x, y) Then
begin
Writeln('Successfully walked to the obstacle pipe.');
Result := True;
end
else WalkToObstaclePipe;
end;
Function RopeswingColor(var rx, ry:Integer):Boolean; //Searches for the ropeswing color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.11, 0.60);
FindColorsTolerance(TPA, 795689, MSX1, MSY1, MSX2, MSY2, 3);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['wing-on', 'opeswing', '-on', 'ore', 'ptions'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the ropeswing.');
Exit;
end;
end;
end;
Function RopeswingFailsafeColor(var rx, ry:Integer):Boolean; //Searches for the ropeswing color as a failsafe and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.11, 0.60);
FindColorsTolerance(TPA, 795689, MSX1, MSY1+265, MSX2, MSY2, 3);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['wing-on', 'opeswing', '-on'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Successfully crossed the ropeswing.');
Exit;
end;
end;
end;
Function DungeonColor(var rx, ry:Integer):Boolean; //Searches for the dungeon color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.16, 3.89);
FindColorsTolerance(TPA, 1723232, MSX1, MSY1, MSX2, MSY2, 5);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti([' ', ''], 100)) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('You dropped into the dungeon.');
Exit;
end;
end;
end;
Function LavaBroadColor(var rx, ry:Integer):Boolean; //Searches for the lava color as a failsafe and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.03, 3.08);
FindColorsTolerance(TPA, 4563171, MSX1, MSY1, MSX2, MSY2, 4)
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti([' ', 'alk', 'ere'], 100)) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the lava. (Failsafe)');
Exit;
end;
end;
end;
Function LadderColor(var rx, ry:Integer):Boolean; //Searches for the ladder color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.18, 0.42);
FindColorsTolerance(TPA, 3884104, MSX1, MSY1, MSX2, (MSY2/2)-15, 8);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['limb-up', 'adder'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the ladder.');
Exit;
end;
end;
end;
Function ObstaclePipe:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Obstacle pipe';
SmartProggy;
Eat;
If ObstaclePipeColor(x, y) Then
begin
HumanMouse(x, y, 3, 3, False);
If OptionsExist(['hrough'], False) Then
ChooseOption('hrough')
else
begin
ChooseOption('ancel');
ObstaclePipe;
end;
Writeln('Crawling through the obstacle pipe.');
repeat
Wait(50+Random(25));
until(RopeswingColor(x, y));
Wait(1000+Random(100));
TotalExp := TotalExp + 13;
Writeln('Successfully crawled through the obstacle pipe.');
Result := True;
end
else
begin
Writeln('Cannot find obstacle pipe. Logging out.');
Logout;
end;
end;
Function Ropeswing:Boolean;
Var
WalkToLadder, WalkToRopeSwing:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Ropeswing';
SmartProggy;
HP := HPPercent;
If RopeswingColor(x, y) Then
begin
HumanMouse(x, y, 0, 0, False);
If OptionsExist(['wing'], False) Then
ChooseOption('wing')
else
begin
ChooseOption('ancel');
Ropeswing;
end;
Writeln('Crossing the ropeswing.');
repeat
If ClickContinue(True, True) Then
begin
Wait(250+Random(100));
Ropeswing;
end;
Wait(50+Random(25));
until(RopeswingFailsafeColor(x, y) or DungeonColor(x, y));
If DungeonColor(x, y) Then
begin
Writeln('Failed to cross the ropeswing.');
SPS_Setup(RUNESCAPE_OTHER,['wilderness_dungeons']);
WalkToLadder := Point(170, 155);
SPS_WalkToPos(WalkToLadder);
Eat;
If LadderColor(x, y) Then
begin
HumanMouse(x, y, 0, 0, False);
If OptionsExist(['limb'], False) Then
ChooseOption('limb')
else
begin
ChooseOption('ancel');
If LadderColor(x, y) Then
begin
HumanMouse(x, y, 0, 0, False);
If OptionsExist(['limb'], False) Then
ChooseOption('limb')
else
begin
Writeln('Cannot find ladder. Logging out.');
Logout;
end;
end;
end;
end;
repeat
Wait(50+Random(25));
until(LavaBroadColor(x, y));
SPS_Setup(RUNESCAPE_SURFACE,['9_1']);
WalkToRopeswing := Point(3858, 815);;
SPS_WalkToPos(WalkToRopeswing);
repeat
Wait(50+Random(25));
until(Not IsMoving);
If RopeswingColor(x, y) Then
Ropeswing
else
begin
Writeln('Cannot find the ropeswing.');
Logout;
end;
end;
TotalExp := TotalExp + 20;
Result := True;
end
else
begin
Writeln('Cannot find ropeswing. Logging out.');
Logout;
end;
end;
Function SteppingStoneColor(var rx, ry:Integer):Boolean; //Searches for the stepping stone color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.00, 0.38);
FindColorsTolerance(TPA, 3355446, MSX1+60, MSY1, MSX2-400, MSY2-190, 3);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['ross', 'tepping', 'tone'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the stepping stone.');
Exit;
end;
end;
end;
Function LavaColor(var rx, ry:Integer):Boolean; //Searches for the lava color as a failsafe and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.03, 3.08);
FindColorsTolerance(TPA, 4563171, MSX1+410, MSY1, MSX2, MSY2, 4)
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti([' ', 'alk', 'ere'], 100)) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the lava. (Failsafe)');
Exit;
end;
end;
end;
Function SteppingStone:Boolean;
Var
EndOfRopeswing:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Stepping stones';
SmartProggy;
HP := HPPercent;
If SteppingStoneColor(x, y) Then
begin
HumanMouse(x, y, 3, 3, False);
If OptionsExist(['ross'], False) Then
ChooseOption('ross')
else
begin
ChooseOption('ancel');
SteppingStone;
end;
Writeln('Crossing the stepping stones.');
repeat
Wait(50+Random(25));
until(LavaColor(x, y) or (HPPercent < HP));
Wait(250+Random(100));
If HPPercent < HP Then
begin
Writeln('Failed to cross the stepping stones.');
SPS_Setup(RUNESCAPE_SURFACE,['9_1']);
EndOfRopeswing := Point(3858, 796);
SPS_WalkToPos(EndOfRopeswing);
repeat
Wait(50+Random(25));
until(Not IsMoving);
Eat;
SteppingStone;
end;
TotalExp := TotalExp + 20;
Writeln('Successfully crossed the stepping stones.');
Result := True;
end
else
begin
Writeln('Cannot find stepping stone. Logging out.');
Logout;
end;
end;
Function LogBalanceColor(var rx, ry:Integer):Boolean; //Searches for the log balance color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.54, 0.18);
FindColorsTolerance(TPA, 4869973, MSX1, MSY1, MSX2, 230, 4);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x-5, o.y, 3, 3);
If(WaitUptextMulti(['cross', 'alk', 'alance', 'og bal'], 250+Random(500))) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the log balance.');
Exit;
end;
end;
end;
Function WalkToLogBalance:Boolean;
Var
LogBalance:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Walking to log balance';
SmartProggy;
Eat;
Writeln('Walking to the log balance.');
SPS_Setup(RUNESCAPE_SURFACE,['9_1']);
LogBalance := Point(3844, 845);
SPS_WalkToPos(LogBalance);
repeat
Wait(50+Random(25));
until(Not IsMoving);
If LogBalanceColor(x, y) Then
else
begin
SPS_WalkToPos(LogBalance);
repeat
Wait(50+Random(25));
until(Not IsMoving);
If LogBalanceColor(x, y) Then
else
begin
Writeln('Cannot find log balance. Logging out.');
Logout;
end;
end;
Writeln('Successfully walked to the log balance.');
Result := True;
end;
Function BlackHoleColor(var rx, ry:Integer):Boolean; //Searches for the black hole color as a failsafe and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.00, 0.00);
FindColorsTolerance(TPA, 0, 460, 100, MSX2, MSY2, 0);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti([' ', 'alk', 'ere', ''], 100)) then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Successfully crossed the log balance.');
Exit;
end;
end;
end;
Function LogBalance:Boolean;
Var
WalkToLadder:TPointArray;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Log balance';
SmartProggy;
HP := HPPercent;
If LogBalanceColor(x, y) Then
begin
HumanMouse(x, y, 0, 0, False);
If OptionsExist(['cross'], False) Then
ChooseOption('cross')
else
begin
ChooseOption('ancel');
LogBalance;
end;
Writeln('Crossing the log balance.');
Wait(3000+Random(500));
repeat
Wait(50+Random(25));
until(BlackHoleColor(x, y) or DungeonColor(x, y));
If DungeonColor(x, y) Then
begin
Writeln('Failed to cross the log balance.');
SPS_Setup(RUNESCAPE_OTHER,['wilderness_dungeons']);
WalkToLadder := [Point(162, 186), Point(171, 156)];
SPS_WalkPath(WalkToLadder);
repeat
Wait(50+Random(25));
until(Not IsMoving);
Eat;
If LadderColor(x, y) Then
HumanMouse(x, y, 0, 0, True);
repeat
Wait(50+Random(25));
until(LavaBroadColor(x, y));
If WalkToLogBalance Then
begin
repeat
Wait(50+Random(25));
until(Not IsMoving);
LogBalance;
end;
end;
TotalExp := TotalExp + 20;
Result := True;
end
else
begin
Writeln('Could not find the log balance. Logging out.');
Logout;
end;
end;
Function RockNearCliffsideColor(var rx, ry:Integer):Boolean; //Searches for the rock(s) west of the cliffside's color and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.48, 0.20);
FindColorsTolerance(TPA, 9868956, 35, 160, 175, 245, 5);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['alk', 'ere'], 100)) Then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Found the cliffside.');
Exit;
end;
end;
end;
Function WalkToCliffside:Boolean;
Var
Cliffside:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Walking to cliffside';
SmartProggy;
Writeln('Walking to the cliffside.');
SPS_Setup(RUNESCAPE_SURFACE,['9_1', '9_2']);
Cliffside := Point(3813, 872);
SPS_WalkToPos(Cliffside);
repeat
Wait(50+Random(25));
until(Not IsMoving);
Writeln('Successfully walked to the cliffside.');
Result := True;
end;
Function FlagColor(var rx, ry:Integer):Boolean; //Searches for the flag color as a failsafe and returns its location if it finds it.
Var
TPA:TPointArray;
ATPA:T2DPointArray;
CTS, i:Integer;
o:TPoint;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.39, 0.24);
FindColorsTolerance(TPA, 4408396, MSX1/2, 280, MSX2, MSY2, 6);
ColorToleranceSpeed(CTS);
SetColorSpeed2Modifiers(0.2, 0.2);
If(Length(TPA) = 0) then
begin
Exit;
end;
SortTPAFrom(TPA, Point(MSCX, MSCY));
ATPA := TPAToATPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
o := MiddleTPA(ATPA[i]);
HumanMMouse(o.x, o.y, 3, 3);
If(WaitUptextMulti(['alk', 'ere', 'ore', 'ptions'], 100)) Then
begin
Result := True;
GetMousePos(rx, ry);
Writeln('Successfully climbed the cliffside.');
Exit;
end;
end;
end;
Function Cliffside:Boolean;
begin
If Not LoggedIn Then Exit;
If FindNormalRandoms Then Exit;
CurrentStatus := 'Cliffside';
SmartProggy;
If RockNearCliffsideColor(x, y) Then
begin
HumanMouse(x+180, y+12, 5, 5, False);
If OptionsExist(['limb'], False) Then
ChooseOption('limb')
else
begin
ChooseOption('ancel');
Cliffside;
end;
Writeln('Climbing the cliffside.');
repeat
Wait(50+Random(25));
until(FlagColor(x, y));
Eat;
TotalExp := TotalExp + 499;
Result := True;
end;
end;
Procedure MainLoop;
begin
If WalkToObstaclePipe Then
If ObstaclePipe Then
If Ropeswing Then
If SteppingStone Then
If WalkToLogBalance Then
If LogBalance Then
If WalkToCliffSide Then
If Cliffside Then
begin
If LevelUp Then
XpToLevel := XPTillNextLevel(SKILL_AGILITY);
Laps := Laps + 1;
Antiban;
Writeln('Antiban Count: ' + IntToStr(AntibanCount));
Writeln('Lap ' + IntToStr(Laps) + ' completed.');
end;
end;
begin
repeat
Setup;
repeat
MainLoop;
until(Not LoggedIn);
NextPlayer(Players[CurrentPlayer].Active);
until False;
end.//Really old fruitfaller, was my first script before I improved my programming a significant amount. Did not know a lot of methods such as TPAs and SPS walking. Poorly structured, and too many DTMs, but here it is.
//(Note: Scratch that, it won't fit because then my post would be more than 100k characters, but if anyone would like to see it I can post it on a reply.