SRL Archive - Archive

Spiker - SRL Member Application


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…
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' +
'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' +
'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.

Kyle Undefined

2012-05-18 00:43:46

Could you split the scripts into their own Simba tags?

Spiker

2012-05-18 01:13:50

From: Kyle Undefined
Could you split the scripts into their own Simba tags?


I'm sorry, there you go.

Kyle Undefined

2012-05-18 01:26:12

No worries :) I'll look over them tomorrow, since I'm about to pass out :p

Question: Why do you want to be an SRL Member?

Spiker

2012-05-18 01:40:16

From: Kyle Undefined
No worries :) I'll look over them tomorrow, since I'm about to pass out :p

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.

Sin

2012-05-18 03:36:15

Yes.

cause

2012-05-18 14:13:17

I like your scroll profits script, nice work! Yes from me.

NKN

2012-05-18 16:08:34

Your activity is a little below par, but your scripts are nice.

Yes from me.

Gucci

2012-05-18 16:12:25

I agree with NKN about the activity but your scripts are well made and definitely show you know what you're doing.

Yes.

Spiker

2012-05-18 16:23:25

Thanks guys. For the past month, I've had IB testing, but that will be all over with after Monday. My activity will surely pick up. I can guarantee it.

Joe

2012-05-18 17:01:08

Yes from me, the script looks great. Your standards are kind of wierd though, but nevertheless I understand it. You seem like a nice guy.

Spiker

2012-05-18 19:18:52

From: JOEbot
Yes from me, the script looks great. Your standards are kind of wierd though, but nevertheless I understand it. You seem like a nice guy.


Yeah, I have a weird way of programming. Trying to improve though! Hopefully it will come to me soon.

Joe

2012-05-18 22:24:39

From: Spiker
Yeah, I have a weird way of programming. Trying to improve though! Hopefully it will come to me soon.


I don't know anybody on this forum who has impeccable standards except for mods. I don't know why everyone complains about it other than the fact that it can effect readablility. Good luck on the application.

Griff

2012-05-18 22:43:15

You don't need to post 5 times a day to be considered active here… Yes from me.

P1nky

2012-05-19 02:10:24

Oooo yes.

Gala

2012-05-19 05:19:11

From: JOEbot
I don't know anybody on this forum who has impeccable standards except for mods. I don't know why everyone complains about it other than the fact that it can effect readablility. Good luck on the application.


I think you underestimate the importance of good standards. It can save hours while working on a bigger project and if you want to work in a team, standards are absolutely necessary!

@topic
nice scripts, yes from me :)

xtrapsp

2012-05-19 05:48:58

clicked the wrong one was meant to be yes. so ignore 1 no and add 1 yes :)

Sin

2012-05-19 16:26:48

From: Griff
You don't need to post 5 times a day to be considered active here… Yes from me.


Or 18.6 ;o

Spiker

2012-05-19 21:55:24

I haven't seen a response from anyone who has voted no for me. I'd like to know what I can improve on. Thank you.

Abu

2012-05-20 06:06:54

From: Spiker
I haven't seen a response from anyone who has voted no for me. I'd like to know what I can improve on. Thank you.


I can't remember what I voted but the obvious reason for a no vote will have been due to your activity, which was lower at the time of applying - many members feel that to be an SRL Member you also have to be a community member.

In terms of scripting, you use the same TPA function over and over again in both scripts - try using a different one somewhere to show that you really understand TPA's.

Also, you should try and use alternative walking methods as backup walking paths in case sps fails.

Another point you may want to note is that you should make a procedure where you free certain DTMs, you can then call that procedure at the start of any function with AddOnTerminate(FreeMyDTMs); so that your DTM's are always free when you stop your script.

Just thought I'd give you a few reasons as to why you received 'no' votes :)

Spiker

2012-05-20 17:59:07

From: abu_jwka
I can't remember what I voted but the obvious reason for a no vote will have been due to your activity, which was lower at the time of applying - many members feel that to be an SRL Member you also have to be a community member.

In terms of scripting, you use the same TPA function over and over again in both scripts - try using a different one somewhere to show that you really understand TPA's.

Also, you should try and use alternative walking methods as backup walking paths in case sps fails.

Another point you may want to note is that you should make a procedure where you free certain DTMs, you can then call that procedure at the start of any function with AddOnTerminate(FreeMyDTMs); so that your DTM's are always free when you stop your script.

Just thought I'd give you a few reasons as to why you received 'no' votes :)


Thank you. This is what I was looking for. :)

EtherFreak

2012-05-20 19:31:15

From: Spiker
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.


Yes

Spiker

2012-05-26 23:00:56

Status Update? :)

EDIT:
From: xtrapsp
clicked the wrong one was meant to be yes. so ignore 1 no and add 1 yes :)

'Toxin

2012-05-31 08:36:45

Looks like you're good enough for my liking as well, yes from me! Good work.

Sir R. M8gic1an

2012-06-01 07:19:46

In, Welcome!

~RM