Chris!
2013-05-05 05:58:15
7 Year(s)
Are you affilated in anyway with Jagex LTD?
No.
Were you Referred to SRL?
N/A.
What is your general programming knowledge?
HTML, CSS, Pascal.
Are you a member of any other communities?
RiD - ChaoticStorm
Sythe - xXMustanger67Xx
Tell us about yourself…
From: Chris!
My name's Chris if you didn't pick up on that previously, haha. I'm from Australia and was born in a town called Wagga Wagga in New South Wales. I'm interested in computing in general and most aspects around that, sport; namely Cricket and Ruby Union & League and also with the armed forces. I'm currently in Year 11 of high school and working towards a cert 3 in IT (currently have cert 2). After school, I wish to attend the Australian Defence Force Academy and pursue a career there. Overall, I enjoy achieving high in school and sport.
Please show us one (or multiple) of your scripts.
program Chris_AIOWillows;
{$DEFINE SMART8}
{$i SRL/srl.simba}
{$i SPS/sps.simba}
{$i SRL/SRL/misc/reports.simba}
{$i SRL/SRL/misc/SmartGraphics.simba}
const
(*
You must fill in the options that are marked with an *.
*)
Location = 'draynor'; //*Please specify where you want to chop. Options are:
//Draynor, Rimmington, Other
Skiller = true; //*Skiller support. True = axe is in inventory. False = axe is wielded.
LogsToCut = 200; //*Number of logs to cut. Put a massive number
//To run for a long time.
Version = '1.00: Release.'; //Don't change.
procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
Players[0].Name := ''; //Username
Players[0].Pass := ''; //Password
Players[0].Pin := ''; //Bank Pin
Players[0].Active:=True;
end;
(******************************************************************************
Don't touch past this message UNLESS you know what you are doing! You will
possibly mess the script up.
******************************************************************************)
type TSPSPaths = record
DraynorWalkToTree, DraynorWalkToBank, RimmingtonWalkToTree, LodestoneWalkToDraynor: TPointArray;
end;
var
x, y, Loads, ProgBMP, StartingXP, Logs: Integer;
LeftClickFail: Boolean;
Main: Tbox;
Paths: TSPSPaths;
(******************************************************************************
procedure SuperWindMouse;
By: Benland100 & Flight
Description: Shifts mouse speeds after every step.
******************************************************************************)
procedure SuperWindMouse(xs, ys, xe, ye, gravity, wind, minWait, maxWait, maxStep, targetArea: extended);
var
veloX,veloY,windX,windY,veloMag,dist,randomDist,lastDist,step: extended;
lastX,lastY,MSP,W: integer;
sqrt2,sqrt3,sqrt5: extended;
begin
MSP := MouseSpeed;
sqrt2:= sqrt(2);
sqrt3:= sqrt(3);
sqrt5:= sqrt(5);
while hypot(xs - xe, ys - ye) > 1 do
begin
dist:= hypot(xs - xe, ys - ye);
wind:= minE(wind, dist);
if dist >= targetArea then
begin
windX:= windX / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
windY:= windY / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
end else
begin
windX:= windX / sqrt2;
windY:= windY / sqrt2;
if (maxStep < 3) then
begin
maxStep:= random(3) + 3.0;
end else
begin
maxStep:= maxStep / sqrt5;
end;
end;
veloX:= veloX + windX;
veloY:= veloY + windY;
veloX:= veloX + gravity * (xe - xs) / dist;
veloY:= veloY + gravity * (ye - ys) / dist;
if hypot(veloX, veloY) > maxStep then
begin
randomDist:= maxStep / 2.0 + random(round(maxStep) div 2);
veloMag:= sqrt(veloX * veloX + veloY * veloY);
veloX:= (veloX / veloMag) * randomDist;
veloY:= (veloY / veloMag) * randomDist;
end;
lastX:= Round(xs);
lastY:= Round(ys);
xs:= xs + veloX;
ys:= ys + veloY;
case Random(50) of
1..25: W := (MSP + (Random((MSP/4))));
26..50: W := (MSP - (RandomRange((MSP/2), MSP-1)));
end;
if (W < 1) then
W := 1;
if (lastX <> Round(xs)) or (lastY <> Round(ys)) then
MoveMouse(Round(xs), Round(ys));
step:= hypot(xs - lastX, ys - lastY);
//W := round((maxWait - minWait) * (step / maxStep) + minWait);
wait(W);
lastdist:= dist;
end;
if (Round(xe) <> Round(xs)) or (Round(ye) <> Round(ys)) then
MoveMouse(Round(xe), Round(ye));
MouseSpeed := MSP;
end;
(******************************************************************************
procedure HumanMMouse;
By: Flight
Description: ...
******************************************************************************)
procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,j,Dist,MP: integer;
begin
j := 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-(j*MP), eX+(j*MP));
Y2 := RandomRange(eY-(j*MP), eY+(j*MP));
SuperWindMouse(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 := j;
end;
(******************************************************************************
procedure FastClick;
By: Flight
Description: Quickly click or right-click the mouse.
******************************************************************************)
procedure FastClick(button: variant);
var
x, y: integer;
ibutton: Integer;
begin
if VariantIsBoolean(button) then
begin
if (button) then
iButton := mouse_left
else
iButton := mouse_right;
end else
iButton := button;
if (iButton = mouse_move) then Exit;
GetMousePos(x, y);
HoldMouse(x, y, iButton);
Wait(RandomRange(60, 150));
GetMousePos(x, y);
ReleaseMouse(x, y, iButton);
end;
(******************************************************************************
procedure HumanMouseBox;
By: ?
Description: ?
******************************************************************************)
procedure HumanMouseBox(X1, Y1, X2, Y2: Integer);
var
FX, FY: Integer;
begin
GaussBox(FX,FY,X1,Y1,X2,Y2);
HumanMMouse(FX,FY,0,0)
end;
(******************************************************************************
procedure ChangeCameraAngle;
By: Narcle
Description: Changes the camera angle.
******************************************************************************)
procedure ChangeCameraAngle;
var
i, II, PosNeg: Integer;
begin
if not(LoggedIn) then
LoginPlayer;
case random(2) of
0: PosNeg := 1;
1: PosNeg := -1;
end;
i := Round(rs_GetCompassAngleDegrees/45 - 1);
if i < 0 then i := 0;
if i > 7 then i := 7;
for II := 0 to 4+Random(4) do
begin
i := i + PosNeg;
if i > 7 then i := 0;
if i < 0 then i := 7;
MakeCompass(inttostr(i*(40+random(6))));
end;
end;
(******************************************************************************
procedure Deposit(SlotFrom, SlotTo: Integer; vType: Variant);
Renamed to: procedure DepositOther(SlotFrom, SlotTo: Integer; vType: Variant);
By: bud_wis_er_420
Description: Fix for procedure Deposit; to allow the banking of single items.
*******************************************************************************)
procedure DepositOther(SlotFrom, SlotTo: Integer; vType: Variant);
var
DepositX, BScreen, DScreen, f: Boolean;
All: Variant;
I, T, x, y, c, j: Integer;
B: TBox;
Options: array of TOptions;
begin
BScreen := BankScreen;
if (not(BScreen)) then
DScreen := DepositScreen;
if not (BScreen or DScreen) then
Exit;
if vType = 2 then
srl_Warn('Deposit', '2 now means store per 2, not ''All''', 15);
DepositX := False;
if VariantIsInteger(vType) then
begin
DepositX := not InIntArray([1, 5, 10], vType);
All := vType <> 1;
end
else if VariantIsBoolean(vType) then
All := vType;
if (SlotFrom = 1) and (SlotTo = 28) and (All = true) then
if DepositAll then
exit;
for I := SlotFrom to SlotTo do
begin
if (BScreen) then
begin
If Not ExistsItem(I) Then
Continue;
if (not All) then
MouseItem(I, mouse_left)
else
MouseItem(I, mouse_right);
end else
begin
B := DepositItemBox(I);
if (not(FindColor(X, Y, srl_outline_black, B.X1, B.Y1, B.X2, B.Y2))) then
Continue;
if (not All) then
Mouse((B.X1 + B.X2) shr 1, (B.Y1 + B.Y2) shr 1, 0, 0, mouse_left)
else
Mouse((B.X1 + B.X2) shr 1, (B.Y1 + B.Y2) shr 1, 0, 0, mouse_right);
end;
if DepositX then
begin
WaitOptionMulti(['Deposit-X', 'Deposit'], 200);
T := GetSystemTime;
while (not FindColor(x, y, 8388608, MCX1, MCY1, MCX2, MCY2)) and (GetSystemTime - T < 3000) do
Wait(100);
TypeSend(vType);
end else if VariantIsInteger(vType) then
WaitOptionMulti(['Deposit-' + IntToStr(Integer(vType)), 'Deposit'], 200)
else
begin
// Starting my code
Wait(RandomRange(550, 500)); //Changed wait - Chris!
Options := GetChooseOptions('All');
if (Length(Options) < 1) then
Break;
c := High(Options); ;
f := False;
for j := 0 To c do
begin
if ArrInStr(['All'], Options[j].Str) then
begin
writeln('Option all found, clicking');
ChooseOptionMulti(['Deposit-All', 'All']);
f := True;
Break;
end;
end;
if (f = False) then
ChooseOptionMulti(['Depo' , 'osit']);
end;
// Ending my code
T := GetSystemTime;
Wait(RandomRange(200, 300));
repeat
if (BScreen) then
if (not(ExistsItem(I))) then Break;
if (DScreen) then
if (not(FindColor(X, Y, srl_outline_black, B.X1, B.Y1, B.X2, B.Y2))) then Break;
Wait(50);
until(GetSystemTime - T > 2000);
end;
end;
(******************************************************************************
procedure DownloadImage(ImageName: String; Location: String);
By: Brandon
Description:
*******************************************************************************)
procedure DownloadImage(ImageName: string; Location: string);
var
Image, Path: string;
FP: Integer;
begin
Image:= GetPage(Location);
Path:= IncludePath + 'SPS\img\runescape_other\' + ImageName + '.png';
Path:= Trim(Path);
FP:= CreateFile(Path);
WriteFileString(FP, Image);
CloseFile(FP);
end;
(******************************************************************************
function GrabMaps: Boolean;
By: Brandon
Description: Downloads image and places in path.
*******************************************************************************)
function GrabMaps: Boolean;
var
ImgLoc: string;
Name : string;
begin
Name := 'Draynor_Willow';
ImgLoc:= 'http://i.imgur.com/qKtWlHD.png';
begin
if (not FileExists(IncludePath + 'SPS\img\runescape_other\Draynor_Willow.png')) then
DownloadImage(Name, ImgLoc);
end;
Result:= (FileExists(IncludePath + 'SPS\img\runescape_other\Draynor_Willow.png'));
end;
(******************************************************************************
procedure RequirementsCheck;
By: Brandon
Description: Checks if SPS map is found.
*******************************************************************************)
procedure RequirementsCheck;
begin
if not (GrabMaps) then
RaiseException(erCustomError, 'SPS map: Draynor_Willow.png could not be found.')
end;
(******************************************************************************
procedure CheckForProgressPic;
By: Kevin
Description: Checks if picName is found and gets it if not.
*******************************************************************************)
procedure CheckForProgressPic;
var
progFile: LongInt;
picName: string;
begin
picName:= AppPath + '/Scripts/Chris!AIOWillows.png';
try
if not FileExists(picName) then
progFile := CreateFile(picName)
else
Exit;
CloseFile(progFile);
progFile := RewriteFile(picName, False);
WriteFileString(progFile, GetPage('http://i.imgur.com/nDhP3Rl.png'));
finally
if(progFile > 0)then
CloseFile(progFile);
end;
end;
(******************************************************************************
Begin my code:
*******************************************************************************)
(******************************************************************************
procedure LoadSPSPaths;
By: Chris!
Description: Holds all SPS paths defined in the script.
*******************************************************************************)
procedure LoadSPSPaths;
begin
case lowercase(Location) of
'draynor':
begin
SPS_Setup(runescape_other, ['Draynor_Willow']);
paths.DraynorWalkToTree := [Point(178, 258), Point(176, 250), + Point(175, 244), Point(165, 244), + Point(152, 244), Point(154, 252), + Point(150, 261), Point(146, 275), + Point(150, 287), Point(154, 294), + Point(154, 296)];
paths.DraynorWalkToBank := [Point(156, 300), Point(149, 289), + Point(150, 282), Point(150, 269), + Point(149, 259), Point(152, 248), + Point(154, 242), Point(175, 246), + Point(178, 253), Point(178, 259), + Point(179, 263)];
paths.LodestoneWalkToDraynor := [Point(229, 46), Point(235, 57), + Point(239, 74), Point(237, 91), + Point(235, 107), Point(229, 121), + Point(227, 136), Point(226, 148), + Point(223, 166), Point(223, 183), + Point(223, 200), Point(225, 217), + Point(221, 230), Point(214, 235), + Point(202, 236), Point(191, 238), + Point(181, 238), Point(176, 239), + Point(177, 246), Point(176, 256), + Point(177, 262)];
end;
'rimmington':
begin
SPS_Setup(RUNESCAPE_SURFACE, ['9_9']);
paths.RimmingtonWalkToTree := [Point(3699, 3809)];
end;
end;
end;
(******************************************************************************
procedure Antiban;
By: Chris!
Description: Antiban options which happen if, out of 750, that number is chosen.
******************************************************************************)
procedure Antiban;
begin
case Random(750) of
1: HoverSkill('Woodcutting', False);
2: HoverSkill('Random', False);
3: BoredHuman;
4: Wait(2500 + random(4500));
5: PickUpMouse;
6: RandomMovement;
7: RandomRClick;
8: HoverOnlineFriend;
9: MMouseOffClient('Random');
10: ExamineInv;
end;
GameTab(tab_Inv);
end;
(******************************************************************************
procedure FailSafe(Reason: string);
By: -
Description: When called, shuts down the script and displays why.
******************************************************************************)
procedure FailSafe(Reason: string);
begin
if not (LoggedIn) then
Exit;
Players[CurrentPlayer].Loc := Reason;
Logout;
Writeln(Reason);
TerminateScript;
end;
(******************************************************************************
procedure FirstTimeSetupPlayer;
By: Chris!
Description: On script start, sets up the player.
******************************************************************************)
procedure FirstTimeSetupPlayer;
begin
if not (LoggedIn) then
LoginPlayer;
{$IFDEF SMART}
begin
ProgBMP := LoadBitmap(AppPath + '/Scripts/Chris!AIOWillows.png');
SMART_DrawBitmap(True, ProgBMP, Point(MCX1, MCY1));
end;
{$ENDIF}
ExitSquealOfFortune();
SetRun(true);
Wait(200+random(800));
ClickNorth(SRL_Angle_High);
if IsActionBarOpen then
ToggleActionBar(false);
Gametab(tab_inv);
StartingXP := GetXPBarTotal;
Writeln('Player is ready. Let''s roll.');
end;
(******************************************************************************
procedure RelogSetup;
By: Chris!
Description: If you disconnect, or after 6hours, logs back in and sets up.
******************************************************************************)
procedure RelogSetup;
begin
if not (LoggedIn) then
LoginPlayer;
{$IFDEF SMART}
begin
ProgBMP := LoadBitmap(AppPath + '/Scripts/Chris!AIOWillows.png');
SMART_DrawBitmap(True, ProgBMP, Point(MCX1, MCY1));
end;
{$ENDIF}
ExitSquealOfFortune();
SetRun(true);
Wait(200+random(800));
ClickNorth(SRL_Angle_High);
if IsActionBarOpen then
ToggleActionBar(false);
Gametab(tab_inv);
Writeln('We have logged back in, player is ready. Let''s roll.');
end;
(******************************************************************************
procedure ProgressReport;
By: Chris!
Description: Displays your progress in debug box and as a paint.
******************************************************************************)
procedure ProgressReport;
var
XP, RunTime, XPHr, LogsPH, CurrentXP: Integer;
begin
RunTime := (GetTimeRunning / 1000);
CurrentXP := GetXPBarTotal;
XP := Round(CurrentXP - StartingXP);
XPHr := Round(XP * (3600.0 / RunTime));
if (Loads > 0) then
if Skiller then
Logs := (InvCount -1) + (Loads * 27)
else
Logs := (InvCount) + (Loads * 28);
LogsPH := (3600*(Logs))/((RunTime));
ClearDebug;
begin
SMART_ClearCanvasArea(IntToBox(MCX1, MCY1, MCX2, MCY2));
SMART_DrawBitmap(False, ProgBMP, Point(MCX1, MCY1));
SMART_DrawTextEx(False, MCX1+145, MCY1+46, SmallChars, + Version, 1025364);
SMART_DrawTextEx(False, MCX1+124, MCY1+69, LoginChars, (MsToTime(GetTimeRunning, Time_Abbrev)), 1025364);
SMART_DrawTextEx(False, MCX1+153, MCY1+91, LoginChars, + Capitalize(Location), 1025364);
SMART_DrawTextEx(False, MCX1+315, MCY1+46, LoginChars, + IntToStr(XP), 1025364);
SMART_DrawTextEx(False, MCX1+338, MCY1+69, LoginChars, + IntToStr(XPHr), 1025364);
SMART_DrawTextEx(False, MCX1+330, MCY1+91, LoginChars, + IntToStr(Logs), 1025364);
end;
Writeln(' Time: ' + TimeRunning + '. ');
Writeln(' Chopping at: ' + Capitalize(Location) + '. ');
Writeln(' XP: ' + IntToStr(XP) + ' experience. ');
Writeln(' XP/hr: ' + IntToStr(XPHr) + ' experience per hour. ');
Writeln(' Logs: ' + IntToStr(Logs) + ' willow logs. ');
Writeln(' Logs/hr: ' + IntToStr(LogsPH) + ' logs per hour. ');
end;
(******************************************************************************
procedure LodestoneWalkToDraynor;
By: Chris!
Description: Walks from the Draynor lodestone to Draynor bank.
******************************************************************************)
procedure LodestoneWalkToDraynor;
var
LodestoneToDraynor: TPointArray;
begin
if not (LoggedIn) then
RelogSetup;
Wait(RandomRange(15000, 20000));
MakeCompass('N');
FFlag(3);
SPS_Setup(runescape_other, ['Draynor_Willow']);
LodestoneToDraynor := [Point(229,46),Point(235,57),Point(239,74),Point(237,91),Point(235,107),Point(229,121),Point(227,136),Point(226,148),Point(223,166),Point(223,183),Point(223,200),Point(225,217),Point(221,230),Point(214,235),Point(202,236),Point(191,238),Point(181,238),Point(176,239),Point(177,246),Point(176,256),Point(177,262)];
HumanMMouse(627, 130, 3, 3);
Fastclick(True);
SPS_WalkPath(LodestoneToDraynor);
while IsMoving do
Antiban;
end;
(******************************************************************************
function FindTree: Boolean;
By: Chris!
Description: Uses ATPA to find willow tree.
******************************************************************************)
function FindTree: Boolean;
var
tmpCTS, i, x, y, c, r: Integer;
TreeTPA: TPointArray;
ATPA: array of TPointArray;
MS: Tbox;
begin
if not (LoggedIn) then
RelogSetup;
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(0.28, 0.30);
FindColorsTolerance(TreeTPA, 2766390, MSX1, MSY1, MSX2, MSY2, 6);
SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.02, 0.02);
if (Length(TreeTPA) < 1) then
Exit;
ATPA := TPAToATPAEx(TreeTPA, 15, 15);
SortATPASize(ATPA, True);
SMART_DrawDotsEx(False, ATPA[0], clRed) for I := 0 to High(ATPA) do
begin
MiddleTPAEx(ATPA[i], x, y);
HumanMMouse(x, y, 2, 2);
if not (WaitUpTextMulti(['Cho', 'dow', 'Wil'], 250)) then
Inc(c);
if WaitUpTextMulti(['ill', 'low'], 50) then
begin
begin
LeftClickFail := not result;
r := Random(6);
if (r = 0) then
if LeftClickFail then
r := 6;
case (r) of
0..5:
begin
FastClick(Mouse_Left);
Result := DidClick(True, 100);
Break;
end;
6:
begin
ClickMouse2(False);
Result := ChooseOption('own');
Break;
end;
end;
end;
end;
if c > 4 then
Exit;
end;
MS := IntToBox(1, 1, 510, 339);
SMART_ClearCanvasArea(Main);
end;
(******************************************************************************
function PlayerIdle: Boolean
By: Chris!
Description: Utilises pixelshift to detect if your character is moving.
******************************************************************************)
function PlayerIdle: Boolean;
var
PBox: TBox;
begin
PBox := IntToBox(239, 137, 267, 190);
Result := (PixelShift(PBox, 200) < 150);
end;
(******************************************************************************
procedure DropLog;
By: Chris!
Description: Drops logs in your inventory. Doesn't drop axe if skiller.
******************************************************************************)
procedure DropLog;
var
TooLong: Integer;
begin
case (Skiller) of
true:
begin
if not (LoggedIn) then
RelogSetup;
MarkTime(TooLong);
begin
DropAllExcept([1]);
Wait(RandomRange(400, 750));
end;
end;
false:
begin
if not (LoggedIn) then
RelogSetup;
MarkTime(TooLong);
begin
DropAll;
Wait(RandomRange(400, 750));
end;
end;
end;
end;
(******************************************************************************
procedure ChopTree;
By: Chris!
Description: Checks for spin tickets and lodestones to Draynor if no tree found.
******************************************************************************)
procedure ChopTree;
var
x, y, Timer: Integer;
begin
FindNormalRandoms;
repeat
if not (LoggedIn) then
RelogSetup;
MarkTime(Timer);
FindNormalRandoms;
ProgressReport;
if (PlayerIdle) and not (FindTree) then
ChangeCameraAngle;
if FindSpinTicketObj(x, y) then
begin
HumanMMouse(x, y, 3, 3);
Fastclick(mouse_left);
end;
repeat
Wait(RandomRange(300, 700));
Antiban;
until (PlayerIdle) or (TimeFromMark(Timer) > 60000) or (InvFull);
until(InvFull) or (TimeFromMark(Timer) > 60000);
if (TimeFromMark(Timer) > 60000) and (Location = 'Draynor') then
begin
Writeln('We cannot find any Willows! Teleporting to Draynor.');
LodestoneTeleport('Draynor Village');
Writeln('Walking to Draynor bank.');
LodestoneWalkToDraynor;
end;
end;
(******************************************************************************
procedure DepositItems;
By: Chris!
Description: Deposits items. Doesn't bank axe if skiller.
******************************************************************************)
procedure DepositItems;
begin
if BankScreen then
begin
repeat
if not (LoggedIn) then
RelogSetup;
if (ExistsItem(28) or (InvCount > 1)) then
begin
if Skiller then
DepositOther(2, 28, True)
else
DepositAll;
Wait(RandomRange(500, 75));
if FindSpinTicketObj(x, y) then
begin
CloseBank;
Wait(RandomRange(300, 600));
HumanMMouse(x, y, 3, 3);
end;
Writeln('Deposited inventory.')
end;
until (InvCount = 1) or (InvCount = 0)
end;
Inc(Loads);
if Random(2) = 1 then
CloseBank;
end;
(******************************************************************************
procedure FindBanker;
By: Chris!
Description: Uses OpenBankFast and OpenBankNPCEx to find bank. Also checks for
PIN screen.
******************************************************************************)
procedure FindBanker;
var
Timer: Integer;
begin
MarkTime(Timer);
if (BankScreen) or (PinScreen) then
Exit;
if (PinScreen) then
InPin(Players[0].Pin);
repeat
if not (LoggedIn) then
RelogSetup;
begin
OpenBankFast('db')
Writeln('Searching for the bank with: BankFast.');
end;
begin
OpenBankNPCEx('grey');
Writeln('Searching for the bank with: BankNPCEx.');
end;
until (BankScreen) or (PinScreen) or (TimeFromMark(Timer) > 60000);
if not (BankScreen) or (PinScreen) or (TimeFromMark(Timer) > 60000) then
begin
Writeln('We cannot find the banker! Teleporting to Draynor.');
LodestoneTeleport('Draynor Village');
Writeln('Walking to Draynor bank.');
Wait(RandomRange(16000, 175000));
SPS_WalkPath(paths.LodestoneWalkToDraynor);
if InvCount > 1 then
FindBanker;
end;
end;
(******************************************************************************
procedures Draynor, Rimmington, Other;
By: Chris!
Description: Main run code for locations.
******************************************************************************)
procedure Draynor;
begin
repeat
if not (LoggedIn) then
RelogSetup;
if (InvFull) then
begin
Writeln('Inventory is full. Walking to bank.');
SPS_WalkPath(paths.DraynorWalkToBank);
FindBanker;
DepositItems;
ProgressReport;
end;
SPS_WalkPath(paths.DraynorWalkToTree);
if (PlayerIdle) then
ChopTree;
until (Logs >= LogsToCut);
end;
procedure Rimmington;
begin
repeat
if not (LoggedIn) then
RelogSetup;
ChopTree;
if (InvFull) then
begin
Writeln('Inventory full. Dropping logs.');
DropLog;
Inc(Loads);
if (InvEmpty) or (InvCount = 1) then
begin
Writeln('Logs dropped. Chopping.');
ChopTree;
end;
if not (FindTree) and (FindSymbol(x, y, 'cooking')) then
SPS_WalkPath(paths.RimmingtonWalkToTree);
end;
until (Logs >= LogsToCut);
end;
procedure Other;
begin
repeat
if not (LoggedIn) then
RelogSetup;
ChopTree;
if (InvFull) then
begin
Writeln('Inventory full. Dropping logs.');
DropLog;
Inc(Loads);
if (InvEmpty) or (InvCount = 1) then
begin
Writeln('Logs dropped. Chopping.');
ChopTree;
end else
begin
Writeln('Logs couldn''t be dropped. Trying again.');
DropLog;
end;
end;
until (Logs >= LogsToCut);
end;
(******************************************************************************
procedure ChooseLoc;
By: Chris!
Description: Executes the correct code for the location defined by user.
******************************************************************************)
procedure ChooseLoc;
begin
case lowercase(Location) of
'draynor':
begin
Writeln('=================================================================');
Writeln('| _______ _______ _________ _______ _ _ _______ |');
Writeln('| ( ____ \|\ /|( ____ )\__ __/( ____ \( )( )( ____ \ |');
Writeln('| | ( \/| ) ( || ( )| ) ( | ( \/| ||/ | ( \/ |');
Writeln('| | | | (___) || (____)| | | | (_____ | | | (_____ |');
Writeln('| | | | ___ || __) | | (_____ )| | (_____ ) |');
Writeln('| | | | ( ) || (\ ( | | ) |(_) ) | |');
Writeln('| | (____/\| ) ( || ) \ \_____) (___/\____) | _ /\____) | |');
Writeln('| (_______/|/ \||/ \__/\_______/\_______)(_) \_______) |');
Writeln('| |');
Writeln('=================================================================');
Writeln(' All In One Willows ');
Writeln(' Version ' + Version + ' ');
Writeln('------------------------------------------------------------------');
Writeln(' ');
Writeln(' We are chopping at Draynor Village today. ');
Writeln(' It is: ' + (TheDate(Date_Formal)) + '. ');
Writeln(' It''s a fine day to be botting! ');
Writeln(' ');
Writeln('------------------------------------------------------------------');
Writeln(' ');
Writeln(' Thank you for using the script! ');
repeat
Draynor;
until (Logs >= LogsToCut);
end;
'rimmington':
begin
Writeln('=================================================================');
Writeln('| _______ _______ _________ _______ _ _ _______ |');
Writeln('| ( ____ \|\ /|( ____ )\__ __/( ____ \( )( )( ____ \ |');
Writeln('| | ( \/| ) ( || ( )| ) ( | ( \/| ||/ | ( \/ |');
Writeln('| | | | (___) || (____)| | | | (_____ | | | (_____ |');
Writeln('| | | | ___ || __) | | (_____ )| | (_____ ) |');
Writeln('| | | | ( ) || (\ ( | | ) |(_) ) | |');
Writeln('| | (____/\| ) ( || ) \ \_____) (___/\____) | _ /\____) | |');
Writeln('| (_______/|/ \||/ \__/\_______/\_______)(_) \_______) |');
Writeln('| |');
Writeln('=================================================================');
Writeln(' All In One Willows ');
Writeln(' Version ' + Version + ' ');
Writeln('------------------------------------------------------------------');
Writeln(' ');
Writeln(' We are chopping at Rimmington today. ');
Writeln(' It is: ' + (TheDate(Date_Formal)) + '. ');
Writeln(' It''s a fine day to be botting! ');
Writeln(' ');
Writeln('------------------------------------------------------------------');
Writeln(' ');
Writeln(' Thank you for using the script! ');
repeat
Rimmington;
until (Logs >= LogsToCut);
end;
'other':
begin
Writeln('=================================================================');
Writeln('| _______ _______ _________ _______ _ _ _______ |');
Writeln('| ( ____ \|\ /|( ____ )\__ __/( ____ \( )( )( ____ \ |');
Writeln('| | ( \/| ) ( || ( )| ) ( | ( \/| ||/ | ( \/ |');
Writeln('| | | | (___) || (____)| | | | (_____ | | | (_____ |');
Writeln('| | | | ___ || __) | | (_____ )| | (_____ ) |');
Writeln('| | | | ( ) || (\ ( | | ) |(_) ) | |');
Writeln('| | (____/\| ) ( || ) \ \_____) (___/\____) | _ /\____) | |');
Writeln('| (_______/|/ \||/ \__/\_______/\_______)(_) \_______) |');
Writeln('| |');
Writeln('=================================================================');
Writeln(' All In One Willows ');
Writeln(' Version ' + Version + ' ');
Writeln('------------------------------------------------------------------');
Writeln(' ');
Writeln(' We are chopping at a secret location today. ');
Writeln(' It is: ' + (TheDate(Date_Formal)) + '. ');
Writeln(' It''s a fine day to be botting! ');
Writeln(' ');
Writeln('------------------------------------------------------------------');
Writeln(' ');
Writeln(' Thank you for using the script! ');
repeat
Other;
until (Logs >= LogsToCut);
end;
end;
end;
(******************************************************************************
Mainloop.
******************************************************************************)
begin
{$IFDEF SMART}
SRL_SixHourFix := True;
Smart_FixSpeed := True;
{$ENDIF}
ClearDebug;
SetupSRL;
SPS_AnyAngle := True;
Main := IntToBox(MSX1, MSY1+50, MSX2, MSY2+50);
CheckForProgressPic;
RequirementsCheck;
DeclarePlayers;
LoadSPSPaths;
FirstTimeSetupPlayer;
ProgressReport;
if not (LoggedIn) then
RelogSetup;
begin
ChooseLoc;
end;
end.Here's a progress report from a testing version of the script:
We have been running for: 90 Hours, 43 Minutes and 36 Seconds.
We have chopped: 38079 willow logs.
That is: 419 logs per hour.
We have earned: 2573602 experience.
That is: 2066 experience per hour. //I have fixed the equation since then, but the xp/hr should be 28k+.
