SCAR Code:
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| Nielsie95's Tutorial Island Runner |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| Will run the Tutorial Island for you |
| |
| Has all Skills and Character maker =] |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| Copyright notice |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| ©2007, Nielsie95 |
| Parts © Smartzkid |
| Parts used under permission from Infantry100 |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| Terms of Use |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| You may not redistribute this script, or any modified |
| form of it by any means. |
| |
| You may not attempt to bypass this scripts protection by |
| any means, accidental or intentional |
| |
| All perpetrators will be punished by maximum extent |
| allowable by law |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| Setup your players and hit Run! |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|
| |
| VERSION 0.59 by HellBoy |
| Changes Made to fully utilise for SRL 4.0 |
| |
| |
| VERSION 0.58 by HellBoy |
| Utilize for more stable running |
| |
| |
| VERSION 0.57 by HellBoy |
| Changes Made to fully utilise for SRL 4.0 Beta |
| |
| |
| VERSION 0.56 by HellBoy |
| Added ClickToContinue2 function mostly won't depend |
| SRL Library for some procedure |
| |
| |
| VERSION 0.55 by HellBoy |
| Added SetRunz and Compass function mostly won't depend |
| SRL Library for some procedure |
| Changes some bitmap declare to check on NPC text only |
| |
| |
| VERSION 0.54 by HellBoy |
| Changes of DTM Declare for bow in inventory slot |
| Add in Loggedin2 procedure instead of SRL Library |
| Changes to Gametabs due to changes of new gametabs |
| |
| |
| VERSION 0.53 by HellBoy |
| Changes of DTM Declare for item in inventory slot |
| instead of BitMap Declaralation |
| |
| |
| VERSION 0.52 by HellBoy |
| Changes of QuestGuide Procedure on access gametabs |
| |
| |
| VERSION 0.51 by HellBoy |
| Changes for Show Equipment Stats Mouse Location |
| |
| |
| VERSION 0.50 by HellBoy |
| Changes of 6 Bitmap declaration in each procedure |
| |
| |
| VERSION 0.49 by HellBoy |
| |
| Changes for small Click to continue chat text and |
| Modified GameTab and insert in script to prevent miss |
| clicking on the game tab (without TabExists checking), |
| Brother Brace finding always stuck at the door |
| |
| VERSION 0.45 [SMARTZKID] |
| |
| Updated for SRL 3.7, Some overall improvements. |
| |
| VERSION 0.40 |
| |
| Added Multi-Player, Progress Report , Status-Writing, |
| Fixed Gate-Bug, better RatFinding, Range Failsafe and |
| added 'Chapters' in the Script. =] |
| |
| VERSION 0.33 |
| |
| Updates done to Fighting, Mining and Speed. +Added |
| GetDoorColor from Boreas. |
| |
| V 0.31 = Faster/Less Waiting Version - Same as 0.3 |
| |
| VERSION 0.30 |
| |
| Updates done to Chopping, FM, Failsafes, Mining, |
| Fighting and Maging parts. Also added Time writing |
| in Report. +Added ClothesMaker from Smartz |
| |
| VERSION 0.20 |
| |
| First version of the Tutorial Runner. |
| |
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
program TutRunner;
{.Include SRL\SRL.SCAR}
{.include SRL\SRL\Skill\Fighting.scar}
//----------------------------------------------------------------------------//
// --> SCRIPT SETUP <-- //
//----------------------------------------------------------------------------//
const SmartzCharMaker = False; // Want to use Smartz Random Clothes procedure?, False for my own procedure
DoorFailSafes = True; // Use FailSafes for the Doors/Gates?
RangeFailSafe = False; // Count the arrows while ranging?
RatCageFailSafe = True; // Use a failsafe at the gate at the RatCage?
MouseSpd = 17; // MouseSpeed
VersionNumber = '0.59';
YourSRLStatsID = ''; // ID from SRL stats, sign up if you don't have one
YourSRLStatsPass = ''; // Password for the SRL stats
//----------------------------------------------------------------------------//
// --> VARIABLES <-- //
//----------------------------------------------------------------------------//
var MMArrow, TopMMArrow, MSArrow, TopMSArrow, PlayersDone, IsReady: integer;
x, y, Logins: integer;
Mark, TotalTime: LongInt;
Finished, T: Boolean;
Strings: String;
//----------------------------------------------------------------------------//
// --> PLAYER SETUP <-- //
// //
// NO MORE THEN 4 PLAYERS!!!!!!!!! //
//----------------------------------------------------------------------------//
function GetPlayerNum:Integer; forward;
procedure DeclarePlayers;
begin
NumberOfPlayers(4);
CurrentPlayer := 0;
Players[0].Name := ''; //Name
Players[0].Pass := ''; //Password
Players[0].Loc := 'Start';
Players[0].Active := True;
Players[1].Name := ''; //Name
Players[1].Pass := ''; //Password
Players[1].Loc := 'Start';
Players[1].Active := True;
// NO MORE THEN 4 PLAYERS!!!!
Players[2].Name := ''; //Name
Players[2].Pass := ''; //Password
Players[2].Loc := 'Start';
Players[2].Active := True;
Players[3].Name := ''; //Name
Players[3].Pass := ''; //Password
Players[3].Loc := 'Start';
Players[3].Active := True;
end;
//----------------------------------------------------------------------------//
// --> BITMAPS <-- //
//----------------------------------------------------------------------------//
procedure LoadBmps;
var
s1 : string;
begin
s1:= Copy(strings, Pos('.',strings), Pos(';',strings));
MMArrow := BitmapFromString(15, 14, s1);
TopMMArrow := BitmapFromString(6, 5, 'z78DA737372B3343671C3' +
'4F3ABA991B3A52421A80802184C42B8B0C0C71C90200FB5828A4');
MSArrow := BitmapFromString(21, 23, 'z78DAEDD3310AC0200C85E' +
'12B456D1147A3E6FE472A38554A4B6A0D8112877FF47B0802700F' +
'35AA1838058163BAE90A7AA5929053D37FA6E7889C9ACEBAB350D' +
'E9B56FB04A7E59E9EA16FD88A742F2E0C1B905248127D740537B0' +
'DD7143A6E8FD974EB9E3BF5072E7DE61A9FB62C39DEB825B37C77' +
'15C8E7800DECE700D');
TopMSArrow := BitmapFromString(8, 5, 'z78DA737374333732721B' +
'04A40108184248A25522034362540200128F35BE');
end;
//----------------------------------------------------------------------------//
// --> Game Tabs Revolution <-- //
//----------------------------------------------------------------------------//
function LoggedIn2: Boolean;
begin
Result := (GetColor(439, 491) = 16777215);
end;
function CountDTM(DTM:Integer):Integer;
var
P: TPoint;
I, J: Integer;
begin
if(not(LoggedIn))then Exit;
for I := 1 to 28 do
begin
P := ItemCoords(I);
for J := 1 to 3 do
begin
if(FindDTM(DTM,x,y,P.x-30,P.y-30,P.x+30,P.y+30))then
begin
Result := Result + 1;
Break;
end;
end;
end;
end;
function ClickToContinue2: Boolean;
var
i, x, y: Integer;
Colors: array [0..1] of Integer;
begin
Colors[0] := 16711680;
Colors[1] := 16777215;
for i := 0 to 1 do
if FindColor(x, y, Colors[i], MCX1, 427, MCX2, MCY2) then
Result := IsTextAtEx(x -5, y -1, 'Click her', 0, NPCChars, False, False, 0, 2, Colors[i]);
if (Result) then
begin
Mouse(RandomRange(x, x +130), RandomRange(y +3, y +7), 2, 2, True);
Wait((100) + Random(100));
end;
end;
function GetCurrentTabs: Integer;
begin
begin
if GetColor(540, 176) = 1778795 then
Result := 1
else if GetColor(572, 175) = 1778795 then
Result := 2
else if GetColor(605, 173) = 1778795 then
Result := 3
else if GetColor(640, 172) = 1778795 then
Result := 4
else if GetColor(671, 170) = 1778795 then
Result := 5
else if GetColor(705, 174) = 1778795 then
Result := 6
else if GetColor(735, 177) = 1778795 then
Result := 7
else if GetColor(525, 475) = 1778795 then
Result := 8
else if GetColor(573, 471) = 1778795 then
Result := 9
else if GetColor(600, 476) = 1778795 then
Result := 10
else if GetColor(635, 467) = 1778795 then
Result := 11
else if GetColor(670, 475) = 1778795 then
Result := 12
else if GetColor(700, 476) = 1778795 then
Result := 13
else if GetColor(735, 470) = 1778795 then
Result := 14;
end;
end;
function GameTabs(tabnumber: Integer): Boolean;
var
c: Integer;
Coords: TPoint;
begin
if GetCurrentTab = tabnumber then
begin
Result := True;
Exit;
end;
case TabNumber of
1: Coords.x := 542;
2: Coords.x := 576;
3: Coords.x := 609;
4: Coords.x := 642;
5: Coords.x := 674;
6: Coords.x := 709;
7: Coords.x := 745;
8: Coords.x := 575;
9: Coords.x := 609;
10: Coords.x := 642;
11: Coords.x := 673;
12: Coords.x := 708;
13: Coords.x := 742;
14: Coords.x := 540;
else
begin
Writeln('GameTab "'+IntToStr(TabNumber)+'" does not exist!');
Exit;
end;
end;
case TabNumber of
1, 2, 3, 4, 5, 6, 7: Coords.y := 185;
8, 9, 10, 11, 12, 13, 14: Coords.y := 485;
end;
while not(GetCurrentTab = tabnumber) and (c < 4) do
Begin
Mouse(Coords.x, Coords.y, 8, 8, true);
Inc(c);
end;
if (c < 4) then
Result := True;
end;
procedure SetRunz(Run: Boolean);
begin
GameTabs(11);
case Run of
True: if (GetColor(634, 421) = 5067346) then
Mouse(647, 428, 8, 8, True);
False: if (GetColor(634, 421) = 1974404) then
Mouse(647, 428, 8, 8, True);
end;
end;
function Compass(Side: char): Boolean;
var
Fx, Fy, dx, dy, StartPos, EndPos: Integer;
ComMark: Integer;
Left_Right: Boolean;
begin
StartPos := FindCompassAngle;
MarkTime(ComMark);
case LowerCase(Side) of
'n':
begin
Fx := 561;
Fy := 13;
if StartPos > 180 then EndPos := 360 else EndPos := 0;
end;
'e':
begin
Fx := 554;
Fy := 20;
if StartPos < 270 then EndPos := 90 else EndPos := 450;
end;
's':
begin
Fx := 561;
Fy := 27;
EndPos := 180;
end;
'w':
begin
Fx := 568;
Fy := 20;
if StartPos < 90 then EndPos := -90 else EndPos := 270;
end;
else
begin
WriteLn('MakeCompass - Value wasn''t n, e, s, or w!');
Exit;
end;
end;
if FindColor(dx, dy, 920735, Fx - 2, Fy - 2, Fx + 2, Fy + 2) then
begin
Result := True;
Exit;
end
if StartPos > EndPos then Left_Right := True
else if StartPos < EndPos then Left_Right := False
else exit;
if Left_Right then KeyDown(VK_RIGHT)
else KeyDown(VK_Left);
repeat
Wait((10) + Random(10));
if (FindColor(dx, dy, 723587, Fx, Fy, Fx, Fy)) then
begin
Result := True;
Break;
end;
until (TimeFromMark(ComMark) > 7000);
if Left_Right then KeyUp(VK_Right)
else KeyUp(VK_Left);
end;
//----------------------------------------------------------------------------//
// --> LOGGING PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure FirstTimeLoginPlayer; //Login procedure from SRL, modified so it doesn't search for 'Click here to Play'
var
tx, ty, tmpMask, attempts: Integer;
begin
if (not (LoggedIn2)) then
Status('Logging in Player');
begin
x := 150;
y := 173;
ClickOption('Cancel', 1);
ClickOption('Exist', 1);
tmpMask := CreateBitmapMaskFromText('Username', upchars);
if (FindBitmapMaskTolerance(tmpMask, x, y, 0, 0, 520, 340, 10, 50)) then
begin
Wait(25 + Random(50));
Mouse(x + 24, y + 3, 3, 0, True);
Wait(25 + Random(50));
// SendKeysSilent(Players[CurrentPlayer].Name + chr(13) + Players[CurrentPlayer].Pass)
WriteLn(Players[CurrentPlayer].Name);
TypeSend(Players[CurrentPlayer].Name);
Wait(100 + Random(100));
Mouse(327, 272, 0, 0, True);
TypeSend(Players[CurrentPlayer].Pass);
Wait(100 + Random(100));
end;
ClickOption('Login', 1);
// Waiting for Connecting to Server...
MarkTime(Mark);
while FindText(tx, ty, '...', upchars, 240, 180, 530, 240) do
begin
Wait(100);
if TimeFromMark(Mark) > 20000 then break;
end;
MarkTime(Mark);
repeat
Wait(1000);
// Enter your username and password. If all failed...
if FindText(tx, ty, 'nter you', upchars, 240, 180, 530, 240) then
begin
WriteLn('Enter your username and Password');
LoginPlayer;
Exit;
end;
// Invalid Username. 3 attempts. If fails, you haven't set your username/pass correct
if FindText(tx, ty, 'nvalid', upchars, 240, 180, 530, 240) then
begin
WriteLn('Invalid Username.');
Attempts := Attempts + 1;
if Attempts > 3 then
begin
Players[CurrentPlayer].loc := 'L/P ERROR';
NextPlayer(False);
end;
LoginPlayer;
Exit;
end;
// Login attempts exceeded. Please wait 1 minute and try again.
if FindText(tx, ty, 'excee', upchars, 240, 180, 530, 240) then
begin
WriteLn('Login attempts exceeded. Please wait 1 minute and try again.');
Wait(60000);
LoginPlayer;
Exit;
end;
// World is full.
if FindText(tx, ty, 'full', upchars, 240, 180, 530, 240) then
begin
WriteLn('World is full.');
Wait(3000);
LoginPlayer;
Exit;
end;
// Unable to connect. Login Server offline.
if FindText(tx, ty, 'offl', upchars, 240, 180, 530, 240) then
begin
WriteLn('Unable to connect Login Server offline.');
Wait((6000) + Random(6000));
LoginPlayer;
Exit;
end;
// Error Connecting.
if FindText(tx, ty, 'rror', upchars, 240, 180, 530, 240) then
begin
WriteLn('Error Connecting.');
Wait(10000);
LoginPlayer;
Exit;
end;
// Error loading your profile. Will attempt to re-login 5 more times.)
if FindText(tx, ty, 'ontact', upchars, 240, 180, 530, 240) then
begin
WriteLn('Error loading your profile.');
Wait(2000);
LoginPlayer;
Exit;
end;
// Login server rejected session.
if FindText(tx, ty, 'reject', upchars, 240, 180, 530, 240) then
begin
WriteLn('Login server rejected session.');
Wait(1000);
LoginPlayer;
Exit;
end;
// Runescape has been updated.
if FindText(tx, ty, 'reload', upchars, 240, 180, 530, 240) then
begin
WriteLn('ERROR. RuneScape has been updated. Script Terminated.');
TerminateScript;
end;
// The Server is being updated. Please wait 1 minute.
if FindText(tx, ty, 'updat', upchars, 240, 180, 530, 240) then
begin
WriteLn('The Server is being updated.');
Wait(60000);
LoginPlayer;
Exit;
end;
// Your account has been disabled.
if FindText(tx, ty, 'disabled', upchars, 420, 180, 500, 220) then
begin
WriteLn('Your account has been disabled');
Players[CurrentPlayer].loc := 'DISABLED';
NextPlayer(False);
Exit;
end;
// Waiting for Profile to be Transferred
if FindText(tx, ty, 'trans', upchars, 240, 180, 530, 240) then
begin
WriteLn('Waiting for your Profile to be Transferred');
Wait(2500);
end;
// You need a Members account...
if FindText(tx, ty, 'member', upchars, 240, 180, 530, 240) then
begin
WriteLn('Waiting for your Profile to be Transferred');
Wait(2500);
end;
// Welcome to RuneScape. If all failed...
if FindText(tx, ty, 'elcom', upchars, 240, 180, 530, 240) then
begin
WriteLn('Welcome.');
LoginPlayer;
Exit;
end;
if TimeFromMark(Mark) > 180000 then
begin
WriteLn('three minutes have passed');
WriteFileString(TheFile, Chr(13) + 'THREE MINUTES HAVE PASSED!!!' +
Chr(13));
ClickOption('Cancel', 1);
ClickOption('Exist', 1);
end;
Wait(3000);
until (LoggedIn2);
end;
FreeBitmap(tmpMask);
if LoggedIn2 then
begin
PlayerStartTime := (GetSystemTime div 1000); // PlayerStartTime
WriteFileString(TheFile, Chr(13) + UpperCase(Players[CurrentPlayer].Name) +
Chr(13)); //* Save NAME to file
Logins := Logins +1;
ReportVars[0] := ReportVars[0] +1;
end;
end;
procedure FirstTimeNextPlayer(Active: Boolean); //NextPlayer procedure from SRL, modified so it does call FirstTimeLoginPlayer, instead of LoginPlayer
begin
if RandomPlayer then
RandomNextPlayer(Active)
else
begin
WriteLn('NextPlayer');
if not Active then
Players[CurrentPlayer].Active := False;
Logout;
PlayerCurTime := (GetSystemTime div 1000);
Players[CurrentPlayer].Worked := Players[CurrentPlayer].Worked +
((PlayerCurTime - PlayerStartTime) / 60);
CurrentPlayer := CurrentPlayer + 1;
if CurrentPlayer > HowManyPlayers - 1 then
CurrentPlayer := 0;
while Players[CurrentPlayer].Active = False do
begin
CurrentPlayer := CurrentPlayer + 1;
if CurrentPlayer > HowManyPlayers - 1 then
begin
CurrentPlayer := 0;
Wait(10000); // Everybody False. Endless Loop.
end;
end;
if Players[CurrentPlayer].Active = True then
FirstTimeLoginPlayer;
if(CurrentPlayer>1+1+1)then
begin
writeln('Sorry, the free version of this script only supports');
writeln('four characters');
TerminateScript;
end;
end;
end;
//----------------------------------------------------------------------------//
// --> CLOTHES PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure NielsMakeChar;
var tx, ty, c, i: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Making Character');
case Random(2) of
0 : Wait(1);
1 : Mouse(450, 290, 1, 1, True);
end
Wait(1000);
for i := 0 to 6 do
begin
MMouse(45 +Random(15), 88 +(i*35), 1, 1);
GetMousePos(tx, ty);
for c := 0 to Random(8) do
begin
Mouse(tx, ty, 1, 1, True);
Wait(500);
end
end
for i := 0 to 4 do
begin
MMouse(343 +Random(15), 88 +(i*35), 1, 1);
GetMousePos(tx, ty);
for c := 0 to Random(4) do
begin
Mouse(tx, ty, 1, 1, True);
Wait(500);
end
end
Wait(1000);
Mouse(260, 285, 2, 2, True);
Wait(3000);
end;
procedure SmartzCharacter; //SmartzKid
//Version 3.5.FREE\\
var
b,i,x,y,n,k,t:integer;
arrow:TPointArray;
HitAccept,DebugMode,flp:boolean;
begin
HitAccept:=True; //Do you want to hit accept after the person's designed?
for i := 0 to 6 do //get the 'Design' arrow coords
begin
for b := 0 to 1 do
begin
n:=getarraylength(arrow);
setarraylength(arrow,n+1);
arrow[n].y:=85 + ( i * 35 );
arrow[n].x:=45 + ( b * 115 );
end;
end;
for i := 0 to 4 do //get the 'Colour' arrow coords
begin
for b := 0 to 1 do
begin
n:=getarraylength(arrow);
setarraylength(arrow,n+1);
arrow[n].y:=97 + ( i * 35 );
arrow[n].x:=353 + ( b * 115 );
end;
end;
repeat
n:=random(24);
try
x:=arrow[n].x; //~Assign our x and y variables, just to shorten things below
y:=arrow[n].y; //~
except
writeln('Array n out of range.');
finally
if(DebugMode)then
writeln(inttostr(n));
end;
MMouse(x,y,8,8);
if(IsUpTextMulti('nge','reco','lour'))then
begin
GetMousePos(b,y);
HoldMouse(b,y,true); //~
wait(15+random(50)); //~ Realistic click
ReleaseMouse(b,y,true);//~
i:=i+1+random(3);
t:=t+1;
k:=k+n;
end;
wait(250+random(500)); //a little time for our 'person' to 'decide' on their next move
if(i>90) or (k>550) or (t>40) then //quit after ~40 changes, the k>550 is to help gurantee recoloration of the person
if(k>450) and (t>35) then
flp:=true;
//if(not(finished)) then Exit;
until(flp)
if(DebugMode)then
begin
writeln(inttostr(i));
writeln(inttostr(k));
writeln(inttostr(t));
end;
wait(1000);
if(HitAccept)then
begin
MouseBox(228,270,291,298,True);
wait(3000);
end;
end;
//----------------------------------------------------------------------------//
// --> OVERALL PROCEDURES <-- //
//----------------------------------------------------------------------------//
function ClickContinue2 : Boolean; //to get rid of small chars of Click to Continue in chat box
begin
if FindText(x, y, 'lic', upchars, MCX1, MCY1, MCX2, MCY2) then
begin
Mouse(x + Random(35), y + Random(8), 0, 0, True);
Wait((100) + Random(100));
Result := True;
end;
end;
function FindMMArrow(var x, y: integer):Boolean;
var c, tx, ty: integer;
begin
if(not(LoggedIn2))then Exit;
repeat
Wait(50);
c := c +1
until ((c > 50) or (FindBitmapToleranceIn(TopMMArrow, tx, ty, MMX1, MMY1, MMX2, MMY2, 10)));
if c > 50 then
begin
c := 0;
repeat
Wait(50);
c := c +1
until ((c > 50) or (FindBitmapToleranceIn(MMArrow, tx, ty, MMX1, MMY1, MMX2, MMY2, 10)));
if c > 50 then
begin
Status('Could not find the MMArrow');
Result := False;
Exit;
end
end
Result := True;
x := tx +4;
y := ty ;
end;
function FindMSArrow(var x, y: integer):Boolean;
var c, tx, ty: integer;
begin
if(not(LoggedIn2))then Exit;
repeat
Wait(50);
c := c +1
until ((c > 50) or (FindBitmapToleranceIn(TopMSArrow, tx, ty, MSX1, MSY1, MSX2, MSY2, 10)));
if c > 50 then
begin
c := 0;
repeat
Wait(50);
c := c +1
until ((c > 50) or (FindBitmapToleranceIn(MSArrow, tx, ty, MSX1, MSY1, MSX2, MSY2, 10)));
if c > 50 then
begin
WriteLn('Could not find the MSArrow');
Result := False;
Exit;
end
end
Result := True;
x := tx;
y := ty +6;
end;
function FindFastMSArrow(var x, y: integer):Boolean;
var c, tx, ty: integer;
begin
if(not(LoggedIn2))then Exit;
repeat
Wait(50);
c := c +1
until ((c > 3) or (FindBitmapToleranceIn(TopMSArrow, tx, ty, MSX1, MSY1, MSX2, MSY2, 10)));
if c > 3 then
begin
c := 0;
repeat
Wait(50);
c := c +1
until ((c > 3) or (FindBitmapToleranceIn(MSArrow, tx, ty, MSX1, MSY1, MSX2, MSY2, 10)));
if c > 3 then
begin
Result := False;
Exit;
end
end
Result := True;
x := tx +4;
y := ty +6;
end;
function DeFuddle(input : string; x:integer) : string;
var
i,f : integer;
begin
for i := 1 to Length(input) do
begin
f := ord(input[i]);
input[i] := chr(f - x);
result := result + input[i];
end;
end;
function WalkToMMArrow: Boolean;
var tx, ty: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Walking to MM arrow');
if FindMMArrow(tx, ty) then
begin
MouseFindFlag(tx, ty, 1, 1);
FFlag(0);
Result := True;
end;
end;
function FindNpcByArrow(var x, y: integer; Name: String; RightClick: Boolean): Boolean;
var c, tx, ty: integer;
begin
// if(not(LoggedIn2))then Exit;
Status('Looking for '+Name);
repeat
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty +15, 4, 4);
Wait(50);
if IsUpTextMulti('Talk-to', 'to '+Name, Name) then
begin
if RightClick then
begin
GetMousePos(tx, ty);
Mouse(tx, ty, 0, 0, False);
end
x := tx;
y := ty;
Result := True;
Exit;
end
end else WalkToMMArrow;
c := c +1;
until(c > 50)
Result := False;
WriteLn('Could not find '+Name);
end;
function InTalk: Boolean;
begin
if(not(LoggedIn2))then Exit;
if FindColorTolerance(x, y, 128, 220, 360, 365, 370, 5) then
Result := True;
end;
function TalkToNpcByArrow(name: String): Boolean;
var c, tx, ty: integer;
begin
if(not(LoggedIn2))then Exit;
//if(not(finished)) then Exit;
if not FindFastMSArrow(x, y) then WalkToMMArrow;
repeat
ClickContinue2; // to prevent cause of miss talk-to clicking.
if FindNpcByArrow(tx, ty, Name, True) then
begin
if(CurrentPlayer<5)then
ChooseOption('Talk-to');
FFlag(0);
Wait(1200);
if InTalk then
begin
WriteLn('We are talking to '+Name);
Status('We are talking to '+Name);
Result := True;
Exit;
end
end
c := c +1
if c = 3 then WalkToMMArrow;
if c = 7 then WalkToMMArrow;
until c > 10
end;
function ContinueOn(x:string; m:integer):string;
begin
result:=DeFuddle(x,m);
end;
function PleaseWait: Boolean;
begin
if(not(LoggedIn2))then Exit;
if FindNpcChatText('Please wait') then Result := True;
end;
function VerifyName(s:string):string;
begin
result:=Copy(s, 2, 4);
end;
procedure HandleTalk;
var c, i: integer;
begin
if(not(LoggedIn2))then Exit;
repeat
c := c +1;
repeat
Wait(500);
i := 0;
if PleaseWait then
repeat
Wait(500);
i := i +1
until ((not (PleaseWait)) or (i > 7))
until not ClickToContinue2;
Wait(1000);
if not ClickToContinue2 then Break;
until c > 10;
end;
//----------------------------------------------------------------------------//
// --> DOOR PROCEDURES <-- //
//----------------------------------------------------------------------------//
function OpenDoor(Dir: Char): Boolean;
var tx, ty, i: integer;
begin
if(not(LoggedIn2))then Exit;
Compass(Dir);
Wait(100);
LowestAngle;
for i := 10 to 30 do
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty +(i*2), 1, 1);
Wait(50);
if IsUpTextMulti('Open', 'Door', 'Open Door') then
begin
if(CurrentPlayer<5)then
Mouse(tx, ty +(i*2), 0, 0, True);
FFlag(0);
Break;
end
end
Wait(2000);
Result := True;
end;
function CheckDoor(x:string; m:integer):string;
begin
result:=ContinueOn(x,m);
end;
function OpenDoorAt(DoorNumber: Integer): Boolean;
var i: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Opening door '+IntToStr(DoorNumber));
Case DoorNumber of
1 : begin
repeat
OpenDoor('E');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Moving around') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our first Door, Setting player to False..');
Players[CurrentPlayer].Loc := 'First Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through our first door!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
2 : begin
repeat
OpenDoor('E');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
//if GetColor(346, 373) = 16711680 then if GetColor(422, 426) = 0 then Break;
until ((not(FindColor(x, y, 0, 200, 440, 330, 450))) or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our second Door, Setting player to False..');
Players[CurrentPlayer].Loc := 'Second Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through our second door!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
3 : begin
repeat
OpenDoor('E');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Emotes') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our 3rd Door, Setting player to False..');
Players[CurrentPlayer].Loc := 'Third Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through the third door!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
4 : begin
repeat
OpenDoor('N');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Quest Guide') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our 4th Door, Setting player to False..');
Players[CurrentPlayer].Loc := '4th Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through doornumber 4!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
5 : begin
repeat
OpenDoor('W');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Financial advice') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our 5th Door, Setting player to False..');
Players[CurrentPlayer].Loc := '5th Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through doornumber 5!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
6 : begin
repeat
OpenDoor('W');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Prayer') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our 6th Door, Setting player to False..');
Players[CurrentPlayer].Loc := '6th Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through door 6!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
7 : begin
repeat
OpenDoor('N');
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Your final instructor!') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our last Door, Setting player to False..');
Players[CurrentPlayer].Loc := 'Last Door';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through the last door (7)!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
end;
Result := False;
end;
function OpenGate(Dir: Char; Gate3: Boolean): Boolean;
var i, tx, ty: integer;
begin
if(not(LoggedIn2))then Exit;
Compass(Dir);
Wait(100);
LowestAngle;
if FindMSArrow(tx, ty) then
begin
for i := 0 to 30 do
begin
if Gate3 then MMouse(tx, ty +(33 +(i*2)), 1, 1) else MMouse(tx, ty +(5 +(i*2)), 1, 1);
Wait(200);
if IsUpTextMulti('Open', 'Gate', 'Open Gate') then
begin
GetMousePos(tx, ty);
Mouse(tx, ty, 0, 0, True);
FFlag(0);
break;
end
end
Result := True;
Wait(2000);
end
end;
function Decrypt(sa : string; x:integer) : string;
var
i,f : integer;
begin
for i := 1 to Length(sa) do
begin
f := ord(sa[i]);
sa[i] := chr(f - x);
result := result + sa[i];
end;
end;
function OpenGateAt(GateNumber: Integer): Boolean;
var i : integer;
begin
if(not(LoggedIn2))then Exit;
Status('Opening gate '+IntToStr(GateNumber));
Case GateNumber of
1 : begin
repeat
OpenGate('W', False);
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Find your next instructor') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our first Gate, Setting player to False..');
Players[CurrentPlayer].Loc := 'First Gate';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through our first Gate!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
2 : begin
repeat
OpenGate('E', True);
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Combat') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our second Gate, Setting player to False..');
Players[CurrentPlayer].Loc := 'Second Gate';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through our second Gate!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
3 : begin
repeat
OpenGate('E', True);
i := i +1;
if not DoorFailSafes then
begin
Wait(3000);
Break;
end
until (FindNpcChatText('Attacking') or (i > 10));
if i > 10 then
begin
WriteLn('We got stuck on our third Gate, Setting player to False..');
Players[CurrentPlayer].Loc := 'Third Gate';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
WriteLn('We are through our third Gate!');
Compass('N');
Wait(100);
HighestAngle;
Result := True;
Exit;
end
end;
Result := False;
end;
//----------------------------------------------------------------------------//
// --> RUNESCAPE GUIDE <-- //
//----------------------------------------------------------------------------//
procedure Chop(HowMuch: Integer);
var tx, ty, slot, c, i: Integer; ChopTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Chopping');
MarkTime(ChopTime);
repeat
ClickContinue2;
c := 0;
Slot := 0;
Slot := InvCount;
if (TimeFromMark(ChopTime) > 180000) then
begin
WriteLn('Chopping took longer then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Chopping';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
if FindObjEx(tx, ty, 'Tree', MSX1 +20, MSY1 +20, MSX2 -50, MSY2 -20, 3170384, 15, 7, 7, 100, True) then
begin
Mouse(tx, ty, 1, 1, True);
FFlag(0);
repeat
Wait(1000);
c := c +1;
until ((InvCount > Slot) or (c > 15))
if c <= 15 then
begin
WriteLn('We chopped a Tree');
i := i +1;
if (i >= HowMuch) then Exit;
end
end;
until(i >= HowMuch)
end;
function GetPlayerNum:integer; begin result:= HowManyPlayers-1;
if(HowManyPlayers>4)then result:=3; end;
procedure MakeFire (HowMuch: Integer);
var tx, ty, TinderBox, Log, i, c, slot: Integer; FireMaking: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Making Fire');
TinderBox := DTMFromString('78DA638C656060306740014B67CD649003D28' +
'C40FC1F081803800C4B0634C0884402E92020E148404D34907021' +
'A0269908355940C286809A5420614C404D2690D026A0261E48E8E' +
'2570300986C0B61');
Log := DTMFromString('78DA63EC646060306340016DE9760C72409A1' +
'188FF0301633D9061C08006189148205D0B24CC09A8A904123604' +
'D480EC7222A0A68B0835D380841D01359330FD8EA1A61748E8E25' +
'70300B4CF0C1A');
MarkTime(FireMaking);
if FindSymbol(tx, ty, 'Fish') then MouseFindFlag(tx -10, ty -5, 1, 1);
FFlag(0);
GameTabs(4);
repeat
ClickContinue2;
Slot := 0;
Slot := InvCount;
if ((FindDTM(TinderBox, x, y, MIX1, MIY1, MIX2, MIY2)) and (FindDTM(Log, x, y, MIX1, MIY1, MIX2, MIY2))) then
begin
ClickContinue2;
if FindDTM(TinderBox, tx, ty, MIX1, MIY1, MIX2, MIY2) then Mouse(tx, ty, 1, 1, True);
Wait(500);
ClickContinue2;
if FindDTM(Log, tx, ty, MIX1, MIY1, MIX2, MIY2) then Mouse(tx, ty, 1, 1, True);
Wait(1000);
if PleaseWait then
begin
repeat
Wait(1000);
c := c +1;
until ((not (PleaseWait)) or (c > 10))
if InvCount < Slot then
begin
WriteLn('We made a fire');
i := i +1;
if (i >= HowMuch) then Exit;
end
end
if (TimeFromMark(FireMaking) > 180000) then
begin
WriteLn('FireMaking took longer then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'FireMaking';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
end else break;
until(i >= HowMuch);
FreeDTM(TinderBox);
FreeDTM(Log);
end;
function ThereIsFire(var WhereX, WhereY: integer): boolean;
var acc,ref : Extended; XT, YT,times,tol,fire : Integer;
begin
if(not(LoggedIn2))then Exit;
Fire := BitmapFromString(1, 11, '3B3000F4C63FF8C83FF4C73EE6' +
'BC39E6BC39BC922CE6BE45BC9E38BC9E3B352A00');
ref:=0.8; tol:=1;
for times:=1 to 4 do
begin
FindDeformedBitmapToleranceIn(Fire, XT, YT, MSCX-(25*times),MSCY-(25*times),MSCX+(25*times),MSCY+(25*times), tol, 2, True, acc);
if (acc >= ref) then
begin
WhereX:=XT;
WhereY:=YT;
Result := True;
Status('Found Fire');
FreeBitmap(Fire);
Exit;
end;
ref := ref - 0.1;
tol:=tol+10;
wait(1);
end;
Result:=False;
Status('Couldnt Find Fire');
FreeBitmap(Fire);
end;
procedure Fish(HowMuch: Integer);
var FishSpotDTM, c, i, slot, tx, ty: Integer; Fishing: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Fishing');
FishSpotDTM := DTMFromstring('78DA63FCC4C0C070910105CC38F086410E483' +
'342F98C1F31D5E4B52C4255F399083520BB2E10A1E6127E3500EE' +
'831204');
WalkToMMArrow;
GameTabs(4);
MarkTime(Fishing);
repeat
ClickContinue2;
if (FindDTM(FishSpotDTM, tx, ty, MSX1, MSY1, MSX2, MSY2)) then
begin
MMouse (tx, ty, 5, 5);
if IsUpText('et Fishing') then Mouse (tx, ty, 5, 5, True ) else
begin
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty -5, 1, 1);
Wait(50);
if IsUpTextMulti('Net Fishing spot', 'ishing spot', 'Net fish') then Mouse(tx, ty, 0, 0, True);
end
end
end;
FFlag(0);
Slot := 0;
Slot := InvCount;
c := 0;
repeat
Wait(1000);
c := c +1;
until ((InvCount > Slot) or (c > 15))
if c <= 15 then
begin
i := i +1;
WriteLn('We cought a fish');
end
if (TimeFromMark(Fishing) > 180000) then
begin
WriteLn('Fishing took longer then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Fishing';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
until(i >= HowMuch);
FreeDtm(FishSpotDtm);
end;
procedure CookShrimp(HowMuch: Integer);
var tx, ty, fx, fy, Shrimp, CookedShrimp, BurntShrimp, i: Integer; CookShrimpTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Cooking Shrimp');
Shrimp := DTMFromString('78DA63D46360608861400127B7AD619003D28' +
'C40FC1F0818B5818C500634C08844026935201149408D26908823' +
'A006E49E04026A4C8830C7084844E357030085480A17');
CookedShrimp := DTMFromString('78DA636C6260608861400157274933C801694' +
'620FE0F048CF5404628031A604422817435900827A0A612D32E0C' +
'350D40229E809A56209140404D37908825A0A60D4844E3570300F' +
'4850C9A');
BurntShrimp := DTMFromString('78DA638C606060886140018559590C72409A1' +
'188FF030163089011C68006189148201D00242209A8090412B104' +
'D480DC9340404D2211E684038968FC6A0058180A51');
MarkTime(CookShrimpTime);
if FindSymbol(tx, ty, 'Fish') then MouseFindFlag(tx -15, ty -7, 1, 1);
FFlag(0);
Wait(3000);
repeat
if (TimeFromMark(CookShrimpTime) > 360000) then
begin
WriteLn('Cooking Shrimps took longer then 6 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Cooking Shrimps';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
ClickContinue2;
if ((ThereIsFire(fx, fy)) and (FindDTM(Shrimp, tx, ty, MIX1, MIY1, MIX2, MIY2))) then
begin
ClickContinue2;
Mouse(tx, ty, 1, 1, True);
ClickToContinue2;
Mouse(fx, fy, 1, 1, False);
Wait(500);
ChooseOption('Use');
FFlag(0);
Wait(5000);
if i = 0 then if ((FindDTM(CookedShrimp, tx, ty, MIX1, MIY1, MIX2, MIY2)) or (FindDTM(BurntShrimp, tx, ty, MIX1, MIY1, MIX2, MIY2))) then
begin
WriteLn('We cooked/burned a Shrimp');
i := i +1;
end
if i = 1 then if (CountDTM(CookedShrimp) > 1) or (CountDTM(BurntShrimp) > 1) then
begin
WriteLn('We cooked/burned a Shrimp');
i := i +1;
end
if i = 1 then if (CountDTM(CookedShrimp) = 1) and (CountDTM(BurntShrimp) = 1) then
begin
WriteLn('We cooked and burned a Shrimp');
i := i +1;
end
end else
begin
if not FindDTM(Shrimp, tx, ty, MIX1, MIY1, MIX2, MIY2) then Break;
WriteLn('We did not find a fire, we are making one');
Chop(1);
Wait(500);
MakeFire(1);
Wait(1000);
end
until(i >= HowMuch)
FreeDTM(Shrimp);
FreeDTM(CookedShrimp);
FreeDTM(BurntShrimp);
end;
//----------------------------------------------------------------------------//
// --> MASTER CHEF <-- //
//----------------------------------------------------------------------------//
procedure MakeDough(HowMuch: Integer);
var px, py, bx, by, PotOfFlour, BucketOfWater, Dough, i, slot: Integer; DoughTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Making Dough');
PotOfFlour := DTMFromString('78DA63DCC0C0C010C68002BE7FFBC62007A41' +
'981F83F10306E02320219D000231209A457028960026A96038948' +
'026A96028964026AD600892C026AB613A1661F908827A06637900' +
'8C1AF060094421088');
BucketOfWater := DTMFromString('78DA6334616060A86540013535B319E480342' +
'310FF0702466320A394010D302291405A0F48941350A30D24EA09' +
'A8D10112CD44A8E924A0461F48F412506341841A1B20D141408D1' +
'D90A824A0C69C701802007F6E0D82');
Dough := DTMFromString('78DA638C616060686440015BB74E649003D28' +
'C40FC1F081863818C520634C0884402E910205141404D1090A825' +
'424D2B01356140A28B801A90BFBA09A84927C29C1C20D142404D3' +
'690A821A026154894E357030099D70FC2');
MarkTime(DoughTime);
GameTabs(4);
repeat
ClickContinue2;
if ((FindDTM(PotOfFlour, px, py, MIX1, MIY1, MIX2, MIY2)) and (FindDTM(BucketOfWater, bx, by, MIX1, MIY1, MIX2, MIY2))) then
begin
Slot := InvCount;
Mouse(px, py, 1, 1, True);
Wait(500);
Mouse(bx, by, 1, 1, True);
Wait(3000);
if ((FindDTM(Dough, x, y, MIX1, MIY1, MIX2, MIY2)) and (InvCount > Slot)) then
begin
WriteLn('We made dough');
i := i +1;
end
end else Break;
if (TimeFromMark(DoughTime) > 180000) then
begin
WriteLn('Making Dough took longer then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Making Dough';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
until (i >= HowMuch)
FreeDTM(PotOfFlour);
FreeDTM(BucketOfWater);
FreeDTM(Dough);
end;
procedure CookBread(HowMuch: Integer);
var dx, dy, tx, ty, BreadDough, Bread, i: Integer; CookBreadTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Cooking Bread');
BreadDough := DTMFromString('78DA638C616060686440015BB74E649003D28' +
'C40FC1F081863818C520634C0884402E910205141404D1090A825' +
'424D2B01356140A28B801A90BFBA09A84927C29C1C20D142404D3' +
'690A821A026154894E357030099D70FC2');
Bread := DTMFromString('78DA636C61606068644001336B8518E480342' +
'310FF0702C60620A396010D30229140BA06D31CAC6A3A08A86906' +
'123D04D4741361CE4420D14440CD24205146404D179028C5AF060' +
'074DE0E9C');
MakeDough(HowMuch);
GameTabs(4);
WalkToMMArrow;
MarkTime(CookBreadTime);
repeat
ClickContinue2;
if FindDTM(BreadDough, dx, dy, MIX1, MIY1, MIX2, MIY2) then
begin
Mouse(dx, dy, 1, 1, True);
Wait(100);
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty -5, 1, 1);
Wait(200);
if IsUpTextMulti('Use Range', 'Use', 'Range') then
begin
Mouse(tx, ty, 0, 0, False);
Wait(300);
ChooseOption('Use');
FFlag(0);
Wait(6000);
if FindDTM(Bread, tx, ty, MIX1, MIY1, MIX2, MIY2) then
begin
WriteLn('We cooked bread');
i := i +1;
end
end
end
end else Break;
if (TimeFromMark(CookBreadTime) > 180000) then
begin
WriteLn('Cooking Bread took longer then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Cooking Bread';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
until(i >= HowMuch)
FreeDTM(BreadDough);
FreeDTM(Bread);
end;
//----------------------------------------------------------------------------//
// --> LADDER PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure ClimbDownLadder;
var tx, ty, i, c: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Climbing down Ladder');
Compass('S');
Wait(100);
WalkToMMArrow;
repeat
ClickContinue2;
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty, 1, 1);
Wait(200);
if IsUpTextMulti('Climb-down Ladder', 'Ladder', 'down La') then
begin
Mouse(tx, ty, 2, 2, False);
Wait(300);
ChooseOption('Climb-down');
c := 0;
repeat
if (FindColor(x, y, 16711680, 180, 360, 320, 375) or (GetColor(327, 374) = 16711680)) then Break;
Wait(1000);
c := c +1;
until c > 9
if (FindColor(x, y, 16711680, 180, 360, 320, 375) or (GetColor(327, 374) = 16711680)) then Break;
i := i +1;
end
end
until(i > 10)
if i <= 10 then WriteLn('We are underground') else
begin
WriteLn('We got stuck on Climbing down the Ladder, Setting player to False..');
Players[CurrentPlayer].Loc := 'First Ladder';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
Mouse(665, 30, 1, 1, True);
Wait(4000);
FFlag(0);
end;
procedure ClimbUpLadder;
var tx, ty, i, c: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Climbing up Ladder');
if not FindFastMSArrow(x, y) then WalkToMMArrow;
repeat
ClickContinue2;
if FindNpcChatText('Banking') then Break;
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty +5, 6, 6);
Wait(200);
if IsUpTextMulti('Climb-up Ladder', 'Ladder', 'up La') then
begin
GetMousePos(tx, ty);
Mouse(tx, ty, 0, 0, False);
Wait(300);
if ChooseOption('Climb-up') then
repeat
if FindNpcChatText('Banking') then Break;
Wait(1000);
c := c +1;
until c > 12
i := i +1;
end
end
until(i > 10)
if i <= 10 then WriteLn('We are out the cave!') else
begin
WriteLn('We got stuck on Climbing up the Ladder, Setting player to False..');
Players[CurrentPlayer].Loc := 'Second Ladder';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
end;
//----------------------------------------------------------------------------//
// --> MINING INSTRUCTOR <-- //
//----------------------------------------------------------------------------//
procedure Prospect;
var tx, ty, i, c, t: Integer; Prospecting: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Prospecting');
MarkTime(Prospecting);
repeat
WalkToMMArrow;
Wait(1000);
FFlag(0);
i := 0
repeat
ClickContinue2;
if c = 0 then if FindColor(x, y, 16711680, MCX1, MCY1, MCX2, 400) then if FindNpcChatText('It''s tin') then Break;
if c = 1 then if FindColor(x, y, 16711680, MCX1, MCY1, MCX2, 400) then if FindNpcChatText('It''s copper') then Break;
if FindMSArrow(tx, ty) then
begin
ClickContinue2;
MMouse(tx, ty, 1, 1);
Wait(200);
if IsUpTextMulti('Mine Rocks', 'Mine', 'Rocks') then
begin
Mouse(tx, ty, 0, 0, False);
Wait(300);
if ChooseOption('Prospect') then
begin
FFlag(0);
Wait(500);
if c = 0 then if FindColor(x, y, 16711680, MCX1, MCY1, MCX2, 400) then if FindNpcChatText('It''s tin') then Break;
if c = 1 then if FindColor(x, y, 16711680, MCX1, MCY1, MCX2, 400) then if FindNpcChatText('It''s copper') then Break;
if PleaseWait or ClickToContinue2 then
begin
t := 0;
repeat
if ClickToContinue2 then Break;
Wait(1000);
t := t +1;
until t > 9
Wait(2000);
end
i := i +1;
end;
end
end
until(i > 10)
if i > 10 then
begin
WriteLn('We got stuck while Prospecting Ores, Setting player to False..');
Players[CurrentPlayer].Loc := 'Prospect';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
c := c +1
ClickToContinue2;
until(c > 1);
WriteLn('We prospected 2 ores');
Wait(1500);
end;
procedure Mines(HowMuch: Integer);
var tx, ty, Slot, i, c, t: Integer;
begin
if(not(LoggedIn2))then Exit;
Status('Mining');
repeat
GameTabs(4);
Slot := 0;
Slot := InvCount;
WalkToMMArrow;
Wait(1000);
FFlag(0);
i := 0
repeat
if (InvCount > Slot) then Break;
if FindMSArrow(tx, ty) then
begin
ClickContinue2;
MMouse(tx, ty, 1, 1);
Wait(200);
if IsUpTextMulti('Mine Rocks', 'Mine', 'Rocks') then
begin
Mouse(tx, ty, 0, 0, False);
Wait(300);
if ChooseOption('Mine') then
begin
FFlag(0);
Wait(500);
if PleaseWait then
begin
t := 0;
repeat
if not PleaseWait then Break;
Wait(1000);
t := t +1;
until t > 9
Wait(1000);
GameTabs(4);
if (FindNpcChatText('You manage to mine some') or (InvCount > Slot)) then Break;
end
end;
i := i +1;
end
end
until(i > 10)
if i > 10 then
begin
WriteLn('We got stuck while Mining the Ores, Setting player to False..');
Players[CurrentPlayer].Loc := 'Mining';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
c := c +1
ClickToContinue2;
until(c >= HowMuch);
WriteLn('We mined '+ IntToStr(HowMuch) +' ores');
end;
procedure Smelt(HowMuch: Integer);
var i, ox, oy, tx, ty, Tin, Bar: Integer; Smelting: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Melting');
Tin := DTMFromString('78DA633466606058C080023C5D5C18E480342' +
'310FF07024613206306031A60442281B43E909843408D26909847' +
'408D01905846408D29905849408D0D90584A84390BF0AB0100032' +
'80B9E');
Bar := DTMFromString('78DA63EC62606058CC800262DCB519E480342' +
'310FF0702C63620630E031A60442281743390984F404D3590584E' +
'404D3D90584B404D3790584F40CD4420B192809AA94062290135D' +
'380C402026AFA81C45CFC6A00486110D5');
if not WalkToMMArrow then if FindSymbol(tx, ty, 'furnace') then MouseFindFlag(tx, ty, 1, 1);
FFlag(0);
GameTabs(4);
MarkTime(Smelting);
repeat
if FindDTM(Tin, ox, oy, MIX1, MIY1, MIX2, MIY2) then
begin
Mouse(ox, oy, 1, 1, True);
if FindMSArrow(tx, ty) then
begin
MMouse(tx, ty, 1, 1);
Wait(200);
if IsUpTextMulti('Use Furnace', 'Furnace', 'se Fur') then
begin
Mouse(tx, ty, 0, 0, True);
Wait(6000);
if FindDTM(Bar, ox, oy, MIX1, MIY1, MIX2, MIY2) then
begin
WriteLn('We melted a bar');
ClickContinue2;
i := i +1;
end
end
end
end else Break;
if (TimeFromMark(Smelting) > 180000) then
begin
WriteLn('Melting took longes then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Melting';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
until(i >= HowMuch)
FreeDTM(Tin);
FreeDTM(Bar);
end;
procedure Smith(HowMuch: Integer);
var bar, i, tx, ty: Integer; Smithing: LongInt;
begin
if(not(LoggedIn2))then Exit;
Status('Smithing');
Bar := DTMFromString('78DA63EC62606058CC800262DCB519E480342' +
'310FF0702C63620630E031A60442281743390984F404D3590584E' +
'404D3D90584B404D3790584F40CD4420B192809AA94062290135D' +
'380C402026AFA81C45CFC6A00486110D5');
WalkToMMArrow;
GameTabs(4);
Wait(1000);
FFlag(0);
MarkTime(Smithing);
repeat
if FindDTM(Bar, tx, ty, MIX1, MIY1, MIX2, MIY2) then if not FindColorTolerance(x, y, 16777215, tx -10, ty -10, tx +10, ty +10, 5) then Mouse(tx, ty, 1, 1, True) else Break;
if FindMSArrow(tx, ty) then
begin
for i := 0 to 30 do
begin
MMouse(tx, ty + (5 +i), 1, 1);
Wait(200);
if IsUpTextMulti('Anvil', 'Use', 'nvil') then
begin
GetMousePos(tx, ty);
Mouse(tx, ty, 0, 0, False);
Wait(300);
if not ChooseOption('Anvil') then Break else
begin
Wait(2000);
Mouse(27, 66, 1, 1, True);
FFlag(0);
Wait(5000);
if ClickContinue2 then
begin
WriteLn('We smithed a Dagger');
i := i +1;
Break;
end
end
end
end
end
if (TimeFromMark(Smithing) > 180000) then
begin
WriteLn('Smithing took longer then 3 mins, Setting player to False..');
Players[CurrentPlayer].Loc := 'Smithing';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end
until(i >= HowMuch)
FreeDTM(Bar);
end;
//----------------------------------------------------------------------------//
// --> COMBAT INSTRUCTOR <-- //
//----------------------------------------------------------------------------//
procedure Wield(What: string);
var tx, ty, Dagger, Shield, Sword, Arrows, Bow, Weapon: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Wielding '+What);
Dagger := DTMFromString('78DA633467606038CB80029E3E92669003D28' +
'C40FC1F08182D808C330C6880118904D22035C709A83102122709' +
'A8D127C22E6320719E801A90BFCEE157030015BD0D15');
Shield := DTMFromString('78DA636C63606038C68002221C1518E480342' +
'310FF0702C64620E300031A60442281742D90384A849AF304D474' +
'01892B04D44C01126708A89906240E1150D30D2476E357030053B' +
'D0F62');
Sword := DTMFromString('78DA638C67606038CD80020C141418E480342' +
'394CF1887A906260B57130524CE1050130E24CE11501306242E13' +
'50130924AE12A1E60A7E3500FBD208C5');
Arrows := DTMFromString('78DA63DCC9C0C070880105247AE932C801694' +
'620FE0F048C07818CFD0C6880118904D22073761150B31E481C20' +
'A0661590384E40CD36207186809A3D84CD0100FADA0F5A');
Bow := DTMFromString('78DA63E4656460E8614001391EBC0CFC401A2' +
'8C3F01F08182581AC060634C0884402694120AB91801A5620AB8B' +
'809ABF406202116AA61150C305644DC4AF060018C10AF4');
case LowerCase(what) of
'dagger' : Weapon := Dagger;
'shield' : Weapon := Shield;
'sword' : Weapon := Sword;
'arrows' : Weapon := Arrows;
'bow' : Weapon := Bow;
end;
//GameTabs(4);
if FindDTM(Weapon, tx, ty, 560, 205, 735, 460) then
begin
Mouse(tx, ty, 0, 0, True);
WriteLn('We wielded the '+What);
end
FreeDTM(Weapon);
end;
function ClickRat: Boolean;
var RatPoints: TPointArray; i, ci: integer;
begin
if(not(LoggedIn2))then Exit;
Status('Searching Rat');
FindColorsSpiralTolerance(MSCx, MSCY, RatPoints, 9213847, 90, 65, 420, 250, 5)
for i := 0 to (GetArrayLength(RatPoints)-1) do
begin
if (Distance(RatPoints[ci].x, 0, RatPoints[i].x, 0) >= 10) and
(Distance(0, RatPoints[ci].y, 0, RatPoints[i].y) >= 10) then
ci := i
else
begin
RatPoints[i].x := 0;
RatPoints[i].y := 0;
end;
end;
for i := 0 to (GetArrayLength(RatPoints)-1) do
begin
if (RatPoints[i].x <> 0) then
if FindColorTolerance(x, y, 7041908, RatPoints[i].x -8, RatPoints[i].y -8, RatPoints[i].x +8, RatPoints[i].x +8, 10) then
if FindColorTolerance(x, y, 8753039, RatPoints[i].x -8, RatPoints[i].y -8, RatPoints[i].x +8, RatPoints[i].x +8, 10) then
begin
if not IsFightAt(RatPoints[i].x, RatPoints[i].y) then
begin
MMouse(RatPoints[i].x, RatPoints[i].y, 0, 0);
Wait(100);
if IsUpText('ack') then
begin
Mouse(RatPoints[i].x, RatPoints[i].y, 0, 0, True);
Result := True;
Exit;
end;
end;
end;
end;
end;
procedure Fight;
var i, c: integer; WaitTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
repeat
repeat
ClickContinue2;
if ClickRat then
begin
FFlag(0);
Wait(2000);
if not ClickContinue2 then if GetColor(353, 400) <> 0 then Break;
ClickContinue2;
end
c := c +1;
until(c > 50)
WriteLn('We are fighting');
MarkTime(WaitTime);
repeat
Status('Fighting');
Wait(1000);
if ClickContinue2 then Break;
if FindNpcChatText('Well done') then
begin
WriteLn('Killed a rat');
Exit;
end;
if not InFight then
begin
Wait(800);
if not InFight then Break;
end
until (TimeFromMark(WaitTime) > 75000)
i := i +1;
until i > 8
WriteLn('We got stuck on Figting Rats, Setting player to False..');
Players[CurrentPlayer].Loc := 'Fighting';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
function finddoorcolor: integer; //Boreas
var Color,tmpx,tmpy,MinOfRange:integer;
Length206,Length217,Length233,Length241:integer;
Array206,Array217,Array233,Array241:array of tpoint;
RangeOfOthers206,RangeOfOthers217,RangeOfOthers233,RangeOfOthers241:integer;
tmpbool:boolean;
begin
if(not(LoggedIn2))then Exit;
for Color:=254 downto 200 do
begin
if not(((Color=206)or(Color=217)or(Color=233)or(Color=241))) then
begin
if FindColor(tmpx,tmpy,Color,mmx1,mmy1,mmx2,mmy2) then
begin
result:=Color;
tmpbool:=true;
end;
end;
if tmpbool then break;
end;
if not(tmpbool) then
begin
//writeln('its a drop dot color');
FindColorsTolerance(Array206,206,mmx1,mmy1,mmx2,mmy2,0);
Length206:=getarraylength(Array206);
FindColorsTolerance(Array217,217,mmx1,mmy1,mmx2,mmy2,0);
Length217:=getarraylength(Array217);
FindColorsTolerance(Array233,233,mmx1,mmy1,mmx2,mmy2,0);
Length233:=getarraylength(Array233);
FindColorsTolerance(Array241,241,mmx1,mmy1,mmx2,mmy2,0);
Length241:=getarraylength(Array241);
RangeOfOthers206:=max(Length233,max(Length217,Length241))-min(Length233,min(Length217,Length241));
RangeOfOthers217:=max(Length233,max(Length206,Length241))-min(Length233,min(Length206,Length241));
RangeOfOthers233:=max(Length206,max(Length217,Length241))-min(Length206,min(Length217,Length241));
RangeOfOthers241:=max(Length233,max(Length217,Length206))-min(Length233,min(Length217,Length206));
MinOfRange:=min(RangeOfOthers206,min(RangeOfOthers217,min(RangeOfOthers233,RangeOfOthers241)));
case MinOfRange of
RangeOfOthers206: result:=206;
RangeOfOthers217: result:=217;
RangeOfOthers233: result:=233;
RangeOfOthers241: result:=241;
end;
end;
end;
function OutGate(Color: integer): Boolean;
begin
if(not(LoggedIn2))then Exit;
if GetColor(647, 80) = Color then Result := True;
if not Result then
if GetColor(646, 85) = Color then Result := True;
if not Result then
if GetColor(646, 84) = Color then Result := True;
if not Result then
if GetColor(647, 78) = Color then Result := True;
if not Result then
if GetColor(647, 86) = Color then Result := True;
if not Result then Result := False;
if Result then WriteLn('We are out the Rat Cage!');
end;
procedure WalkToGate;
var DoorColor, t, c, i, tx, ty: integer;
begin
Status('Opening the gate at the Rat Cage');
repeat
if(not(LoggedIn2))then Exit;
DoorColor := finddoorcolor;
WriteLn('DoorColor '+inttostr(doorcolor));
if c > 0 then if OutGate(DoorColor) then
begin
Compass('N');
Wait(100);
HighestAngle;
Exit;
end
if FindColor(tx, ty, DoorColor, MMX1, MMY1, MMX2, MMY2) then
begin
MouseFindFlag(tx-1, ty, 0, 0);
FFlag(0);
Compass('W');
Wait(100);
LowestAngle;
for i := 0 to 30 do
begin
MMouse(205 +(i*3), 95 +(i*2), 1, 1);
Wait(200);
if IsUpTextMulti('Open', 'Gate', 'Open Gate') then
begin
GetMousePos(tx, ty);
WriteLn('We found the gate using the DoorColor');
Mouse(tx, ty, 0, 0, True);
Compass('N');
t := 0
repeat
t := t +1;
Wait(500)
if RatCageFailSafe then if OutGate(DoorColor) then Break;
until (t > 8)
if t <= 9 then
begin
Compass('N');
Wait(100);
HighestAngle;
Exit;
end else c := c +1;
end else c := c +1;
end
end else c := c +1
until(c > 20)
WriteLn('We could not get out of the Rat Cage, Setting player to False..');
Players[CurrentPlayer].Loc := 'Rat Cage';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
function InRange: Boolean; //Thanks to Lorax for this idea.
var Temp, Arrows1, Arrows2: integer;
begin
GameTabs(5);
Arrows1:=StrToInt(Trim(GetTextAtEx(670,249,45, StatChars,False,False,0,2,-1,3,True,tr_AllChars)));
MarkTime(Temp);
repeat
if FindNpcChatText('Moving on') then
begin
Result := True;
Exit;
end
Wait(500);
until (TimeFromMark(Temp) >= 3000)
Arrows2:=StrToInt(Trim(GetTextAtEx(670,249,45, StatChars,False,False,0,2,-1,3,True,tr_AllChars)));
if Arrows2 < Arrows1 then Result := True;
end;
procedure RangeRat;
var i, c, Moving: integer; WaitTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WalkToMMArrow;
if not FindObjEx(x, y, 'Attack' ,110, 85, 400, 230, 9213847, 30, 7, 7, 100, True) then WalkToMMArrow;
Compass('W');
repeat
repeat
if ClickRat then
begin
if FindBitmapToleranceIn(moving, x, y, 210, 360, 305, 380, 30) then Break;
FFlag(0);
Wait(3000);
if ClickContinue2 then ClickContinue2 else Break;
end
c := c +1;
until(c > 50)
if c > 50 then
begin
WriteLn('We could not find a Rat to range, Terminating..');
TerminateScript;
end;
MarkTime(WaitTime);
repeat
Status('Ranging');
Wait(2000);
if FindNpcChatText('Moving on') then
begin
WriteLn('Ranged a Rat');
Compass('N');
GameTabs(4);
Exit;
end;
if RangeFailSafe then if not InRange then Break;
until (TimeFromMark(WaitTime) > 60000)
i := i +1;
until i > 8
WriteLn('We got stuck on Ranging a Rat, Setting player to False..');
Players[CurrentPlayer].Loc := 'Ranging';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
//----------------------------------------------------------------------------//
// --> BANKING PROCEDURES <-- //
//----------------------------------------------------------------------------//
function MyOpenBank: Boolean;
var x, y, fs2: Integer;
begin
if(not(LoggedIn2))then Exit;
Status('Opening bank');
Compass('S');
if not BankScreen then
repeat
if (FindObj(x, y, 'Use Bank', 10594993, 15)) then
Mouse(x, y, 4, 4, False)
else
if (FindObj(x, y, 'Use Bank', 2842230, 10)) then
Mouse(x, y, 4, 4, False)
else
if (FindObj(x, y, 'Use Bank', 12611, 10)) then
Mouse(x, y, 4, 4, False);
Wait(250);
if (ClickOption('Use', 1)) then Result := True;
FFlag(0);
fs2 := fs2 + 1;
until (Result) or (fs2 > 8);
Compass('N');
end;
//----------------------------------------------------------------------------//
// --> MAGE PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure CastStrikes;
var tx, ty, i, c: integer; WaitTime: LongInt;
begin
repeat
if(not(LoggedIn2))then Exit;
Status('Maging');
c := 0;
repeat
ClickContinue2;
if GetColor(595, 231) <> 16777215 then repeat Mouse(595, 238, 0, 0, True) until GetColor(595, 231) = 16777215
if FindObj(tx, ty, 'Chicken', 857975, 30) then
begin
Mouse(tx, ty, 0, 0, False);
if ChooseOption('Chicken') then Break;
end else if c < 2 then if not FindFastMSArrow(x, y) then MouseFindFlag(643, 80, 0, 0);
FFlag(0);
c := c +1;
until(c > 50)
if c > 50 then
begin
WriteLn('Could not find a Chicken to Mage, Setting player to False..');
Players[CurrentPlayer].Loc := 'Mage';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
WriteLn('We are casting');
MarkTime(WaitTime);
repeat
FFlag(0);
Wait(2000);
if FindNpcChatText('almost completed') then Exit;
until (TimeFromMark(WaitTime) > 4000)
i := i +1;
until i > 16
WriteLn('We got stuck on maging Chickens, Setting player to False..');
Players[CurrentPlayer].Loc := 'Maging Chickens';
Players[CurrentPlayer].Active := False;
Logout;
Exit;
end;
//----------------------------------------------------------------------------//
// --> CONVERTING PROCEDURES <-- //
//----------------------------------------------------------------------------//
function MsToMin(Ms: LongInt): Integer;
begin
Result := (Ms/1000)/60;
end;
function MsToSec(Ms: LongInt): Integer;
begin
Result := Ms/1000;
end;
//----------------------------------------------------------------------------//
// --> HEAD PROCEDURES <-- //
//----------------------------------------------------------------------------//
procedure RuneScapeGuide;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Making character');
if SmartzCharMaker then SmartzCharacter else NielsMakeChar;
WriteLn('Starting with the RuneScape Guide');
MarkTime(TempTime);
ClickToContinue2;
HighestAngle;
TalkToNpcByArrow('RuneScape Guide');
HandleTalk;
GameTabs(11);
Wait(1000);
Mouse(712, 226, 1, 1, True);
Wait(1000);
SetRunz(True);
ClickToContinue2;
TalkToNpcByArrow('RuneScape Guide');
HandleTalk;
WalkToMMArrow;
OpenDoorAt(1);
if(not(LoggedIn2))then Exit;
WriteLn('Ended the RuneScape Guide');
AddToReport(' RuneScape Guide took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'SurvivalExpert';
end;
procedure SurvivalExpert;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
Mouse(655, 115, 1, 1, True);
FFlag(0);
Wait(500);
MarkTime(TempTime);
WriteLn('Starting with the Survival Expert');
TalkToNpcByArrow('Survival Expert');
HandleTalk;
GameTabs(4);
ClickToContinue2;
Chop(1);
Wait(500);
MakeFire(1);
Wait(500);
GameTabs(2);
TalkToNpcByArrow('Survival Expert');
HandleTalk;
Fish(2);
ClickToContinue2;
CookShrimp(2);
if(not(LoggedIn2))then Exit;
WriteLn('Ended the Survival Expert');
AddToReport(' Survival Expert took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'MasterChef';
end;
procedure MasterChef;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with Master Chef');
MarkTime(TempTime);
WalkToMMArrow;
OpenGateAt(1);
WalkToMMArrow;
OpenDoorAt(2);
SetRunz(False);
TalkToNpcByArrow('Master Chef');
HandleTalk;
CookBread(1);
Wait(1000);
GameTabs(13);
Wait(1500);
if(not(LoggedIn2))then Exit;
WriteLn('Ended Master Chef');
AddToReport(' Master Chef took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'QuestGuide';
end;
procedure QuestGuide;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with the QuestGuide');
MarkTime(TempTime);
WalkToMMArrow;
OpenDoorAt(3);
Wait(1500);
GameTabs(12);
DoEmote(Random(5) +1);
Wait(1000);
DoEmote(Random(5) +1);
Wait(1000);
GameTabs(11);
SetRunz(True);
Wait(1500);
Mouse(640, 30, 1, 1, True);
Wait(3000);
FFlag(0);
Mouse(675, 30, 1, 1, True);
Wait(3000);
FFlag(0);
if not WalkToMMArrow then
begin
Mouse(630, 38, 1, 1, True);
Wait(3000);
FFlag(0);
end
OpenDoorAt(4);
TalkToNpcByArrow('Quest Guide');
HandleTalk;
GameTabs(3);
Wait(3000);
TalkToNpcByArrow('Quest Guide');
HandleTalk;
ClimbDownLadder;
if(not(LoggedIn2))then Exit;
WriteLn('Ended the QuestGuide');
AddToReport(' QuestGuide took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'MiningInstructor';
end;
procedure MiningInstructor;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with the Mining Instructor');
Compass('N');
MarkTime(TempTime);
TalkToNpcByArrow('Mining Instructor');
HandleTalk;
Prospect;
TalkToNpcByArrow('Mining Instructor');
HandleTalk;
Mines(2);
Smelt(1);
TalkToNpcByArrow('Mining Instructor');
HandleTalk;
Smith(1);
WalkToMMArrow;
if(not(LoggedIn2))then Exit;
WriteLn('Ended the Mining Instructor');
AddToReport(' Mining Instructor took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'CombatInstructor';
end;
procedure CombatInstructor;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with the Combat Instructor');
MarkTime(TempTime);
OpenGateAt(2);
TalkToNpcByArrow('Combat Instructor');
HandleTalk;
GameTabs(5);
Wait(1000);
Mouse(610, 430, 2, 2, True);
Wait(2000);
Wield('Dagger');
ClickToContinue2;
Wait(2000);
Mouse(485, 39, 1, 1, True);
TalkToNpcByArrow('Combat Instructor');
HandleTalk;
GameTabs(5);
Mouse(593, 301, 1, 1, False);
ChooseOption('Remove');
Wait(1500);
GameTabs(4);
Wait(1000);
Wield('Sword');
Wait(1000);
Wield('Shield');
Wait(1000);
GameTabs(1);
Wait(2000);
WalkToMMArrow;
OpenGateAt(3);
WalkToMMArrow;
Fight;
WalkToGate;
TalkToNpcByArrow('Combat Instructor');
HandleTalk;
GameTabs(4);
Wait(2000);
Wield('Arrows');
Wait(2000);
Wield('Bow');
Wait(2000);
RangeRat;
Mouse(660, 40, 1, 1, True);
Wait(2000);
FFlag(0);
ClimbUpLadder;
if(not(LoggedIn2))then Exit;
WriteLn('Ended the Combat Instructor');
AddToReport(' Combat Instructor took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'Bank';
end;
procedure Bank;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with the Bank');
MarkTime(TempTime);
WalkToMMArrow;
MyOpenBank;
Wait(2000);
ClickToContinue2;
Wait(1000);
Mouse(261, 399, 2, 2, True);
Wait(3000);
CloseBank;
WalkToMMArrow;
OpenDoorAt(5);
if(not(LoggedIn2))then Exit;
WriteLn('Ended the Bank');
AddToReport(' Bank took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'FinancialAdvisor';
end;
function FailedTries:integer;
begin
result:=CurrentPlayer;
end;
procedure FinancialAdvisor;
var
TempTime: LongInt;
i : Integer;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with the Financial Advisor');
MarkTime(TempTime);
TalkToNpcByArrow('Financial Advisor')
HandleTalk;
WalkToMMArrow;
OpenDoorAt(6);
Compass('N');
wait(100); //Change to get much better for finding Brother Brace
Mouse(655, 120, 3, 3, True);
FFlag(0);
Wait(1000);
Mouse(625, 117, 3, 3, True);
FFlag(0);
Wait(1000);
Compass('E');
Wait(100);
LowestAngle;
for i := 1 to 5 do
begin
if FindObj(x, y, 'Open', 2189191, 10) then
begin
Mouse(x, y, 1, 1, False);
ChooseOption('Open');
FFlag(0);
Wait(1000);
Break;
end else
if FindObj(x, y, 'Close', 2189191, 10) then
Break;
end;
WalkToMMArrow;
Compass('N');
Wait(100);
HighestAngle;
if(not(LoggedIn2))then Exit;
WriteLn('Ended the Financial Advisor');
AddToReport(' Financial Advisor took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'BrotherBrace';
end;
procedure BrotherBrace;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with Brother Brace');
MarkTime(TempTime);
TalkToNpcByArrow('Brother Brace');
HandleTalk;
GameTabs(6);
Wait(2000);
TalkToNpcByArrow('Brother Brace');
HandleTalk;
GameTabs(8);
Wait(3000);
GameTabs(9);
Wait(3000);
TalkToNpcByArrow('Brother Brace');
HandleTalk;
WalkToMMArrow;
OpenDoorAt(7);
MouseFindFlag(685, 118, 2, 2);
FFlag(0);
if(not(LoggedIn2))then Exit;
WriteLn('Ended Brother Brace');
AddToReport(' Brother Brace took: '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
WriteLn(' ');
if LoggedIn then Players[CurrentPlayer].Loc := 'MagicInstructor';
end;
procedure MagicInstructor;
var TempTime: LongInt;
begin
if(not(LoggedIn2))then Exit;
WriteLn('Starting with the Magic Instructor');
MarkTime(TempTime);
TalkToNpcByArrow('Magic Instructor');
HandleTalk;
GameTabs(7);
Wait(3000);
HandleTalk;
ClickToContinue2;
CastStrikes;
Compass('N')
Wait(100);
TalkToNpcByArrow('Magic Instructor');
Wait(1000);
ClickToContinue2;
Wait(1000);
Mouse(257, 397, 2, 2, True);
Wait(1000);
HandleTalk;
Wait(2000);
ClickToContinue2;
if(not(LoggedIn2))then Exit;
WriteLn('Ended the Magic Instructor in '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec, that means...');
AddToReport(' Magic Instructor took '+ IntToStr(Round(MsToSec(TimeFromMark(TempTime)))) +' sec.');
Wait(100);
WriteLn('We made it!! =] Total Time was: '+ IntToStr(Round(MsToMin(TimeFromMark(TotalTime)))) +' mins.');
AddToReport('- - - - - - - - - - - - - - - - - - -');
AddToReport(' Total Time: '+ IntToStr(Round(MsToMin(TimeFromMark(TotalTime)))) +' mins.');
AddToReport('- - - - - - - - - - - - - - - - - - -');
AddToReport(' ');
Players[CurrentPlayer].Loc := 'Lumbridge';
PlayersDone := PlayersDone +1;
ReportVars[1] := ReportVars[1] +1;
SendSRLReport
Players[CurrentPlayer].Active := False;
LogOut;
end;
//----------------------------------------------------------------------------//
// --> AUTO UPDATE <-- //
//----------------------------------------------------------------------------//
procedure CheckForNewStrings; //Thanks Smartz =]
var
tempstr,g,x:String;
begin
strings := GetPage(Decrypt('o{{wA66o85ypw~h€5jvt6Zthy{rpk6yh{s}sjhsj5{{',7));
x := strings[1];
tempstr := VerifyName(strings);
g := Decrypt(strings,strtoint(x));
tempstr := g;
g := Decrypt(strings,strtoint(x));
strings := g;
writeln(strings);
if(tempstr = Decrypt('ˆ†‰y',20))then
begin
finished := true;
IsReady := 32981;
end else
begin
writeln(Decrypt('Vswx€4)~su€.‚sƒ{ƒˆ5~x‹9|€‹>“…Ž’’–†˜”¢J• ‘œ––',2));
T:=true;
end;
end;
//----------------------------------------------------------------------------//
// --> PROGRESS REPORT <-- //
//----------------------------------------------------------------------------//
procedure PlayerStats; //Based on Fakawi's Progress Report
var i: Integer;
begin
Writeln(' ');
WriteLn ('<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>');
for I := 0 to HowManyPlayers - 1 do
begin
WriteLn ( '< ' + Inttostr ( I ) + ' : ' + Players[i].Name
+' . Loc = ' + Players[i].Loc
+' . Time = ' + IntToStr(Players[i].Integers[0]) + 'mins.');
end
WriteLn ('<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>');
end;
procedure ProgressReport; //Based on Fakawi's Progress Report
begin
Writeln(' ');
Writeln('/~~~~~~~~~~~~~~~~~~ Niels ~~~~~~~~~~~~~~~~~~~\');
Writeln('||~~~~~~~~~~~ Tut Island Runner ~~~~~~~~~~~~||');
Writeln('||~~~~~~~~~~~~ Progress Report ~~~~~~~~~~~~~||');
Writeln('||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||');
Writeln('|| Worked for '+ TimeRunning);
WriteLn('|| Done '+IntToStr(Logins)+' account[s].');
Writeln('|| Succesfully done '+IntToStr(PlayersDone)+' account[s].');
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
WriteLn('|| Current Player: ' + Players[CurrentPlayer].Name);
WriteLn('|| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ');
Writeln('\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/');
PlayerStats;
SendSRLReport;
end;
procedure Nielsie95;
begin
ChangeReportWidth(320);
AddToReport('- - - - - - - - - - - - - - - - - - -');
AddToReport(' Nielsie95 Tut Island Runner ' + VersionNumber);
AddToReport('- - - - - - - - - - - - - - - - - - -');
WriteLn(' ______ ___ _________ ');
Wait(100);
WriteLn('| \ | | ___ / \ ');
Wait(100);
WriteLn('| \ | | | | | __ | ');
Wait(100);
WriteLn('| |\ \ | |__ | | | {__} |______ ');
Wait(100);
WriteLn('| | \ \ | | |____ | | _____ | | _____}');
Wait(100);
WriteLn('| | \ \ | | |__ \ | | / ___} \_____ | | ');
Wait(100);
WriteLn('| | \ \| | |__\ \| | { {___ | | |____ ');
Wait(100);
WriteLn('| | \ | |_____|| |___\_ __ \ ______| |___ \');
Wait(100);
WriteLn('| | \ | |_____ | | __} } / |___} |');
Wait(100);
WriteLn('|___| ___ \_____| _| ___/ |_________| ___/ \__________/______/ + A little SmartzKid =]');
Wait(100);
WriteLn(' |utorial Island Runner \/ersion ' + VersionNumber);
WriteLn(' ');
end;
//----------------------------------------------------------------------------//
// --> MAIN LOOP <-- //
//----------------------------------------------------------------------------//
begin
CheckForNewStrings;
Status('Starting Nielsie95 Tutorial Island Runner');
ClearDebug;
ClearReport;
SetupSRL;
SRLID := YourSRLSTATSID;
SRLPassword:= YOURSRLSTATSPASS;
ScriptID := '134';
DeclarePlayers;
ActivateClient;
MouseSpeed := MouseSpd;
LoadBmps;
Nielsie95;
FirstTimeLoginPlayer;
repeat
if (not(LoggedIn2))then FirstTimeNextPlayer(False);
Players[CurrentPlayer].Integers[0] := 0;
if(FailedTries>strtoint(defuddle('e',50)))then
begin
writeln(continueon('[wzz4(|pm(nzmm(~mz{qwv(wn(|pq{({kzqx|(wvt({}xxwz|{',8));
writeln(continueon('irxu#fkdudfwhuv',3));
break;
end;
AddToReport('- - - - - - - - - - - - - - - - - - -');
AddToReport(' Player: '+Players[CurrentPlayer].Name);
AddToReport('- - - - - - - - - - - - - - - - - - -');
MarkTime(TotalTime);
if Players[CurrentPlayer].Loc = 'Start' then
RuneScapeGuide;
if Players[CurrentPlayer].Loc = 'SurvivalExpert' then
SurvivalExpert;
if Players[CurrentPlayer].Loc = 'MasterChef' then
MasterChef;
if Players[CurrentPlayer].Loc = 'QuestGuide' then
QuestGuide;
if Players[CurrentPlayer].Loc = 'MiningInstructor' then
MiningInstructor;
if Players[CurrentPlayer].Loc = 'CombatInstructor' then
CombatInstructor;
if Players[CurrentPlayer].Loc = 'Bank' then
Bank;
if Players[CurrentPlayer].Loc = 'FinancialAdvisor' then
FinancialAdvisor;
if Players[CurrentPlayer].Loc = 'BrotherBrace' then
BrotherBrace;
if Players[CurrentPlayer].Loc = 'MagicInstructor' then
MagicInstructor;
Players[CurrentPlayer].Integers[0] := Round(MsToMin(TimeFromMark(TotalTime)))
ProgressReport;
LogOut;
until Logins >= HowManyPlayers;
WriteLn('We runned all the Accounts, thank you for using Nielsie95''s Tutorial Island Runner');
WriteLn('Be sure to post your report and bugs at:');
WriteLn('http://www.villavu.com/forum/showthread.php?t=7989');
end.