SRL Archive - Archive

Chris! - SRL Member Application


Chris!

2013-05-05 05:58:15

How Long have You Played Runescape?
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+.

xtrapsp

2013-05-05 07:20:57

Where's the Insta-yes button?

Ashaman88

2013-05-05 09:28:52

Yes

Ian

2013-05-05 09:38:38

Yes :D

Benny

2013-05-05 09:58:54

Yes

Chris!

2013-05-05 17:08:02

Haha Brad ;). Thanks guys. :)

Sjoe

2013-05-05 17:12:53

No :)

Just Kidding baby <3

Chris!

2013-05-06 01:52:24

From: Sjoe
No :)

Just Kidding baby <3


I see that mate. Thanks. :)

DannyRS

2013-05-06 17:34:06

Didn't really even need to read script, Yes ofc :)

Kyle Undefined

2013-05-06 17:34:51

Maybe.

Vinyl Scratch

2013-05-06 17:40:37

Yep.

Wetish

2013-05-06 19:01:45

Script? Where? I didn't look for it. Auto yes based on postcount and cups.

Gucci

2013-05-06 20:25:58

Yissssss

Chris!

2013-05-07 02:00:23

Thanks guys. :)

The Mayor

2013-05-07 21:05:43

Obvious yes is obvious.

Disregarding your script, your attitude and contributions to the community thus far are hard to overlook. Definitely worthy of the SRL Member title :)

Chris!

2013-05-07 22:24:57

From: The Mayor
Obvious yes is obvious.

Disregarding your script, your attitude and contributions to the community thus far are hard to overlook. Definitely worthy of the SRL Member title :)


Thank you, Mayor. :)

Kevin

2013-05-08 13:26:10

Between activity, attitude, prior community contributions it's a very easy yes from that perspective. The script isn't perfect, it's got issues here and there. But I already discussed that with Chris privately and he understands why those things are issues and since he knows how to fix them, I'm more than fine with his scripting ability as well. :)

Yes.

Chris!

2013-05-09 02:08:10

From: Kevin
Between activity, attitude, prior community contributions it's a very easy yes from that perspective. The script isn't perfect, it's got issues here and there. But I already discussed that with Chris privately and he understands why those things are issues and since he knows how to fix them, I'm more than fine with his scripting ability as well. :)

Yes.


Thank you Kevin.

Tickyy

2013-05-09 07:34:47

I am not going to vote because i haven't been active lately… but the progress report, was it really necessary to make it that way and that big :p?

Good job though!

hamster31

2013-05-09 13:08:38

Peanut butter.

Chris!

2013-05-09 19:53:40

From: Tickyy
I am not going to vote because i haven't been active lately… but the progress report, was it really necessary to make it that way and that big :p?

Good job though!


The progress report used to be that ASCII but it's now just on startup that it appears. Thank you. :)

rj

2013-05-09 20:01:40

Couldn't you just combine this into 1 writeln :)


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! ');

You could just change this part

Writeln('              We are chopping at Draynor Village today.           ');

Very good script though

xtrapsp

2013-05-10 04:02:27

From: Officer Barbrady
Couldn't you just combine this into 1 writeln :)


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! ');

You could just change this part

Writeln('              We are chopping at Draynor Village today.           ');

Very good script though



I don't think you explained that very well, do you mean something along the lines of:


Standardintro :=
Writeln('=================================================================');
Writeln('| _______ _______ _________ _______ _ _ _______ |');
Writeln('| ( ____ \|\ /|( ____ )\__ __/( ____ \( )( )( ____ \ |');
Writeln('| | ( \/| ) ( || ( )| ) ( | ( \/| ||/ | ( \/ |');
Writeln('| | | | (___) || (____)| | | | (_____ | | | (_____ |');
Writeln('| | | | ___ || __) | | (_____ )| | (_____ ) |');
Writeln('| | | | ( ) || (\ ( | | ) |(_) ) | |');
Writeln('| | (____/\| ) ( || ) \ \_____) (___/\____) | _ /\____) | |');
Writeln('| (_______/|/ \||/ \__/\_______/\_______)(_) \_______) |');
Writeln('| |');
Writeln('=================================================================');

Then just do Standardintro + "You are chopping: " + Treetype

Chris!

2013-05-10 04:10:30

I didn't really understand that, Officer.

Hmm, that was a nice ring to it.

Kevin

2013-05-10 10:12:40

I think he means something along these lines:
procedure ChooseLoc;
var
strToPrint: String;
begin
strToPrint:= '================================================================='#13#10
'| _______ _______ _________ _______ _ _ _______ |'#13#10
'| ( ____ \|\ /|( ____ )\__ __/( ____ \( )( )( ____ \ |'#13#10
'| | ( \/| ) ( || ( )| ) ( | ( \/| ||/ | ( \/ |'#13#10
'| | | | (___) || (____)| | | | (_____ | | | (_____ |'#13#10
'| | | | ___ || __) | | (_____ )| | (_____ ) |'#13#10
'| | | | ( ) || (\ ( | | ) |(_) ) | |'#13#10
'| | (____/\| ) ( || ) \ \_____) (___/\____) | _ /\____) | |'#13#10
'| (_______/|/ \||/ \__/\_______/\_______)(_) \_______) |'#13#10
'| |'#13#10
'================================================================='#13#10
' All In One Willows '#13#10
' Version ' + Version + ' '#13#10
'------------------------------------------------------------------'#13#10
' '#13#10;
case lowercase(Location) of
'draynor':
begin
strToPrint:= strToPrint + ' We are chopping at Draynor Village today. '#1310;
end;
'rimmington':
begin
strToPrint:= strToPrint + ' We are chopping at Rimmington today. ')#13#10;
end;
'other':
begin
strToPrint:= strToPrint + ' We are chopping at a secret location today. '#13#10;
end;
end;
strToPrint:= strToPrint +
' It is: ' + (TheDate(Date_Formal)) + '. '#13#10
' It''s a fine day to be botting! '#13#10
' '#13#10
'------------------------------------------------------------------'#13#10
' '#13#10
' Thank you for using the script! ';
writeln(strToPrint);
case lowercase(Location) of
'draynor':
begin
repeat
Draynor;
until (Logs >= LogsToCut);
end;
'rimmington':
begin
repeat
Rimmington;
until (Logs >= LogsToCut);
end;
'other':
begin
repeat
Other;
until (Logs >= LogsToCut);
end;
end;
end;

Chris!

2013-05-10 17:47:05

Hmm, thanks for clearing that up. I'll look into it. :)

John

2013-05-10 20:20:09

Of course!

Chris!

2013-05-10 21:14:49

From: John
Of course!


Thank you John :).

Tickyy

2013-05-12 10:24:58

From: Chris!
Hmm, thanks for clearing that up. I'll look into it. :)


Yeah that's what i meant… just like Kevin showed :)

Shatterhand

2013-05-12 10:58:44

Yes from me.

Chris!

2013-05-13 02:01:32

From: Shatterhand
Yes from me.


Thank you, Shatterhand! :)

masterBB

2013-05-13 08:05:20

possible way to reduce the function count: Note I still think it can be more generic, but didn't want to spend time rewriting.

procedure loop(loc: String);
begin
repeat
if not (LoggedIn) then
RelogSetup;

case lowercase(loc) of

'rimmington':
begin
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;
end;

'draynor':
begin
if (InvFull) then
begin
Writeln('Inventory full. Dropping logs.');
DropLog;
Inc(Loads);
end else if (not(FindTree) and (FindSymbol(x, y, 'cooking'))) then
SPS_WalkPath(paths.RimmingtonWalkToTree)
end else if (PlayerIdle) then
ChopTree;
end;

else
begin
if (InvFull) then
begin
Writeln('Inventory full. Dropping logs.');
DropLog;
Inc(Loads);
if (InvCount > 0) then
begin
Writeln('Logs couldn''t be dropped. Trying again.');
DropLog;
end;
end else if (PlayerIdle) then
ChopTree;
end;
end;
until (Logs >= LogsToCut);
end;

Note that your RelogSetup contains a memory leak, as well as that it is almost identical to the other setup function.

I suggest placing this in the script entry block:
{$IFDEF SMART}   //Nice you check it here, but you don't do it anywhere else, so it is useless
ProgBMP := LoadBitmap(AppPath + '/Scripts/Chris!AIOWillows.png'); //no need to load it again after you relog
SMART_DrawBitmap(True, ProgBMP, Point(MCX1, MCY1)); //you already call it in the progie
{$ENDIF}
StartingXP := GetXPBarTotal;
SetupPlayer;

and replace the functions with:
procedure SetupPlayer;
begin
if not (LoggedIn) then
LoginPlayer;

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;

Also, this is how I would do the start proggie thingy:
procedure ChooseLoc;
var
locText: string;
begin
if lowercase(Location) = 'draynor' or lowercase(Location) = 'rimmington' then
locText := Location
else
locText := 'a secret location';

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 ' + locText + ' 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! ');

loop();
end;

Try to reuse less code. Add much more failsafes as well as look out for too many begin..end statements.

Flight

2013-05-13 08:41:33

From: The Mayor
Obvious yes is obvious.

Disregarding your script, your attitude and contributions to the community thus far are hard to overlook. Definitely worthy of the SRL Member title :)


This sums up my thoughts. With or without the script you're a part of the community here and you make that clear. You're active, you're helpful and you're a positive guy to chat with; this alone scores huge points when applying for membership. You script looks nicely put together, there's lots of fail safes and your progress report backs up the stability.


Chris!

2013-05-14 03:33:45

Thanks for your feedback MasterBB and I'm currently deciding on what to do. :)

Thanks Flight, means a lot.

CynicRus

2013-05-16 14:12:10

Yes from me:)

Chris!

2013-05-17 02:53:16

From: CynicRus
Yes from me:)


Thanks Cynic! c:

StickToTheScript

2013-05-17 09:14:11

No offence to anyone, but I think he should just get his membership already. There is a clear 87% Majority. :p

rj

2013-05-17 09:16:00

From: StickToTheScript
No offence to anyone, but I think he should just get his membership already. There is a clear 87% Majority. :p


This is usually what happens, but we have to wait for a SRL leader to log on

StickToTheScript

2013-05-17 09:23:57

From: Officer Barbrady
This is usually what happens, but we have to wait for a SRL leader to log on


Thought so..

Chris!

2013-05-17 19:13:13

I'm in no rush. Poll ends tomorrow so it's fine. ;)

Daniel

2013-05-19 00:40:42

In. Well done. :)