the scar noob
2007-06-25 12:07:54
the scar noob - SRL Member Application Form
the scar noob
What is the meaning to life?
Where you Referred to SRL? If yes, by whom?
yes
i know someone who knows scar from in RS Classic, he told me about it i downloaded it and i saw in debug box that you always can vistit www.villu-reborn.com, so i did and than i learned Scar and SRL.
Programming Knowledge
Javascript, it's a subject on school, in future we're going to learn: Java, PHP, flash, macromedia and maybe more
Other Communitys
sythe.org, fagex.net, uberbros, moparisthebest.com
How Long have You Played Runescape
3-4 years
Are you affilated in anyway with Jagex LTD?
No
—————————————————–
Please write down a paragraph about Yourself.
I'm part of this community from october 2006.
In the beginning i didn't knew anything about this and i made a friend, BuckleyInDaHouse, he helped me learninng about SCAR and SRL and i want to help him for his help!
In my 9-10 month registred user from this forums i learned scripting, and i wanted to apply.
I'm also willing to help people, i helped RudeBoiAlex and ThickAsBlood with the scar & SRL basics.
I'm also not a leecher, i even don't macro a lot :), i really want to give back to the communtiy and learn more.
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
this is my latest script i made, i tested it and it worked. I can't test it anymore because i don't have any beef left :)
Maybe i'm going to update this script in future, more dtms, more options (like general store selling) or something.
Oh yea btw it's a Lumbridge Castle Cooker and banker ;)
Ok, enought talking, here is my script:
program LumbyCooker_By_The_Scar_Noob;
{.include srl/srl.scar}
{.include srl/srl/extended/xDTM.scar}
{.include srl/srl/extended/xAutoTalk.scar}
{.include srl/srl/extended/xAntiban.scar}
//included xAutoTalk.scar and xAntiban.scar because of error in
//xAntiban.scar, NewToAutoing told me to do that, thanks for info ;)
var
ax, ay, Dx, Dy : Integer;
SecondFloorTimer, SecondFloorTries : Integer;//second floor vars
FirstFloorTimer, FirstFloorTries : Integer;//first floor vars
BankFloorTries, BankFloorTimer : Integer;//bank floor vars
ladder, Loads : Integer;
BMP : array [0..1] of Integer;//BMP
TheDTM : Integer;//fishes dtm
//16, 24, 503, 328 > whole bank screen
//78, 61, 454, 289 > bank screen ((only items)
//-----------------------------
//procedure DeclarePlayers
//setup player array
procedure DeclarePlayers;
begin
HowManyPlayers := 2;
CurrentPlayer:= 0;
NumberOfPlayers(HowManyPlayers);
Players[0].Name := '';
Players[0].Pass := '';
Players[0].Nick := '';
Players[0].Integer1 := 10;//number of banks
Players[0].String1 := 'beef';//pike, trout, salmon, shrimp or beef
Players[0].String2 := '';//bank pin, leave blank when none
Players[0].Loc := 'Lumbdridge Castle';
Players[0].Active := True;
Players[1].Name := '';
Players[1].Pass := '';
Players[1].Nick := '';
Players[1].Integer1 := 10;//number of banks
Players[1].String1 := '';//pike, trout, salmon, shrimp or beef
Players[1].String2 := '';//bank pin, leave blank when none
Players[1].Loc := ' Lumbridge Castle';
Players[1].Active := False;
end;
//-----------------------------
//procedure LoadBmps
//loads bitmaps into memory
procedure loadbmps;//beide ook getest met character aan deur!
begin
BMP[0]:= BitmapFromString(4, 5, 'z78DA3334333402423069600021C1C0' +
'0C4102859C81100C8C5C8D9C8110421A1859185920AB878B1B100' +
'200A30217B8');//bovenkant trechter furnace > werkt!
BMP[1]:= BitmapFromString(3, 3, '8020128120120000009221128000020' +
'00000000000000000000000');
//rood stukje rechts van steelpan > werkt!
end;
//-----------------------------
//procedure LoadDTM
//loads dtms from fishes that we're going to cook
//thanks to The_Rs_Monkey for telling me were problem was, ty :p
procedure LoadDTM;
begin
case lowercase(Players[CurrentPlayer].String1) of
'pike': TheDTM := DTMFromString('78DA63146160609064400131B5E10CFF81342' +
'310FF0702460E204381010D302291405A1C48081050234184392A' +
'404290801A4520C145400D1F909020A0861F4828E1570300279F0' +
'7AE');
'trout': TheDTM:= DTMFromString('78DA637465626078C580024E1D3AC46004A41' +
'981F83F10307A01D5BC6340038C482490B622428D0750CD1D026A' +
'82816A6E1050130654731FBF1A002BF30DAD');
'salmon': TheDTM:= DTMFromString('78DA637465626078C180023614A6301801694' +
'620FE0F048C5E4035EF18D000231209A4AD806ADE1350E3015473' +
'87809A60A09A1B04D48401D5DCC7AF060091F20CE3');
'shrimp': TheDTM:= DTMFromString('78DA63B463626078CA8002167637301801694' +
'620FE0F048C20357718D000231209A4FD816A6E1350E30B54F388' +
'809A60A09A1704D4B803D57C22A0C61AA8E6157E3500958B0E2C');
'beef': TheDTM:= DTMFromString('78DA63F460626078CA800216280B311801694' +
'620FE0F048C2035F719D000231209A4FD806AAE1150134C849A30' +
'A09A3B04D4F803D5BC27A0C613A8E6330135364498638D193EE86' +
'A001F7A0FC8');
else
begin
Writeln('Invalid option! -look at your settings!');
Writeln('Quiting script.');
Terminatescript;
end;
end;
end;
//-----------------------------
//function ClickNpcChatTextStairs
//clicks text for climbing up/down stairs, tried using it forwarded
function ClickNpcChatTextStairs(Up :Boolean) :boolean;
begin
if (Up) then
begin
if(ClickNpcChatText('Climb up the stairs'))then
begin
wait(250);
result:= true;
end;
end else
begin
if(not(Up))then
begin
if(ClickNpcChatText('Climb down'))then
begin
wait(250);
result:= true;
end;
end;
end;
end;
//-----------------------------
//function ClickNpcChatTextRight
//by WT-Fakawi, creds FULLY to HIM
//Like ClickNPCChatText, only this one RightClicks. (For Cooking)
function ClickNpcChatTextRight(txt : String) : Boolean;
var
tx, ty, s:integer;
begin
s := CreateBitmapMaskFromText(txt, npcchars);
if FindBitmapMaskTolerance(s, tx, ty, 9, 348, 523, 471, 50, 10) then
begin
Mouse(tx, ty, 0, 0, False);
Result := True;
end;
FreeBitmap(s);
end;
//-----------------------------
//function FindFastRandoms
//by WT-Fakawi, he made this function, he FULLY CREDS!
//performs almost all random solving
Function FindFastRandoms: Boolean; // By WT-Fakawi.
var
i: Integer;
begin
for i:=1 to 11 do
begin
case I of
1: ClickToContinue;
2: If FindDead then
Result := True;
3: If FindMod then
Result := True;
4: If FindMime then
Result := True;
5: If FindMaze then
Result := True;
6: If FindQuiz then
Result := True;
7: If FindDemon then
Result := True;
8: begin
if NoGameTab then
begin
Result := True;
Players[CurrentPlayer].loc := 'No GameTab';
Logout;
Exit;
end;
end;
9: begin
If InBlack then
begin
Result := True;
Players[CurrentPlayer].loc := 'InBlack';
Logout;
Exit;
end;
end;
10 : If RC Then Result := True;
11: If FindTalk Then Result := True;
End;
Wait(1);
end;
end;
//-----------------------------
//procedure CheckRandoms
//Solves randoms, combines FindFastRandoms & FindNormalRandoms
procedure CheckRandoms;
begin
if not(LoggedIn) then Exit;
FindFastRandoms;
FindNormalRandoms;
end;
//-----------------------------
//procedure NoBan;
//performs anti ban actions against ban.
procedure NoBan;
var
OldTab :integer;
begin
if not(LoggedIn) then Exit;
case random(50) of
1, 4, 5, 7: MMouse(Random(MSX2), Random(MSY2), 1, 1);
10: PickUpMouseEvery(15+random(5));
12: SleepAndMoveMouse(5000+random(500));
13: LeaveScreenEvery(5 + Random(5));
20: begin
OldTab:= GetCurrentTab;
GameTab(Random(12)+1);
Wait(1000+Random(100));
GameTab(OldTab);
end;
21, 25, 30: RandomRClick;
33: SleepAndMoveMouse(3000+random((2000)/2));
36: HoverSkill('random', False);
39, 15: HoverSkill('cooking', False);
42: FindTalk;
44, 47: SleepAndMoveMouse(5000+random(500));
49: SleepAndMoveMouse(3000+random((2000)/2));
end;
end;
//-----------------------------
//function MainBank
//from srl folder
//performs main bank opening
function MainBank: boolean;//srl folder
var
OBC: TPoint;
begin
if FindObj(OBC.x, OBC.y, 'ank', 10594993, 19) then
begin
Mouse(OBC.x, OBC.y, 0, 0, False);
Wait(50);
ChooseOption(OBC.x, OBC.y, 'uickly');
FFlag(0);
Wait(2000 + Random(500));
if BankScreen then Result := True;
end;
end;
//-----------------------------
//function MyBank
//opens the bank, deposit everything from inventory and withdraws fishes.
function MyBank :boolean;
var
Cx, Cy, Tries :integer;
begin
Result := False;
repeat
MainBank;
Tries:= Tries + 1;
wait(500+random(300));
until(BankScreen) or (Tries = 20) or (PinScreen)
Writeln('Took '+IntToStr(Tries)+'/20 tries to open the bank.');
if(PinScreen)then
begin
Writeln('Pin screen is found, entering your pin...');
InPin(Players[CurrentPlayer].String1);
Writeln('... Done entering pin!');
end;
if(BankScreen)then //Works like another failsafe almost
begin
Wait(500+random(100));
FixBank;
DepositAll;
if FindDTM(TheDTM, Cx, Cy, 16, 24, 503, 328)then
begin
Mouse(Cx, Cy, 2, 3, False);
ChooseOption(Cx, Cy, 'Withdraw 5');
wait(100);
end;
CloseBank;
result:= true;
exit;
end;
if(Tries = 20)then
begin
Writeln('Bank booth NOT found. Logout.');
Players[CurrentPlayer].loc := 'No Bank';
NextPlayer(False);
end;
end;
//-----------------------------
//function Banking
//procedure MyBank with ability to walk to bank symbol
function Banking(ClickSymbol :Boolean) :Boolean;
var
XX, YY :integer;
begin
if not(LoggedIn) then Exit;
if ClickSymbol then
begin
if FindMMColor(XX, YY, GetSymbolColor(x, y, 'bank')) then
begin
Mouse(XX, YY, 3, 3, True);
Flag;
end;
end;
MyBank;
end;
//-----------------------------
//function StairsWalk1
//Walks to stair by color from "findroadcolor". When I
//searched for the right color I dicovered there wasn't, it updates!
//I tried some things and "findroadcolor" returns the needed color :P
function StairsWalk1 :boolean;
begin
MakeCompass('N');//geadd voor testen, altijd perfect north
if RadialRoadWalk(findroadcolor, 190, 215, 60, 0, -1) then
begin
Writeln('Stairswalk by RRW');
Flag;
result:=true;
end else result:= false;
end;
//-----------------------------
//function StairsWalk2
//failsafe walk to stairs if radial stairwalk failed ;)
//also for walkback (cooking range>stairs)
function StairsWalk2(Up :Boolean) :boolean;
var
Ex, Ey, BBX1, BBY1, BBX2, BBY2 :Integer;
begin
ladder:= FindLadderColor;
if Up then
begin
BBX1:= 648;
BBY1:= 5;
BBX2:= 735;
BBY2:= 86;
end else
begin
BBX1:= 570;
BBY1:= 86;
BBX2:= 648;
BBY2:= 166;
end;
if (ladder <> 0)then
begin
if(FindColor(x, y, ladder, BBX1, BBY1, BBX2, BBY2))then
begin
Writeln('MMStair found!');
GetMousePos(Ex, Ey);
if up then
begin
Mouse(Ex, Ey-5, 2, 2, True);
FFlag(5);
end else
begin
Mouse(Ex, Ey, 2, 2, True);
FFlag(5);
end;
result:= true;
end else
begin
if(FindColor(x, y, 10834, BBX1, BBY1, BBX2, BBY2))then//always that color
begin
Writeln('MMStair found!');
Mouse(x, y, 2, 2, True);
FFlag(5);
result:= true;
end else
begin
Writeln('MiniMap stair NOT found!');
result:= false;
end;
end;
end;
end;
//-----------------------------
//function StairsWalk
//combines StairWalk1 & StairWalk2
function StairsWalk: boolean;
begin
Result := False;
if StairsWalk1 then
begin
Result := True;
end else
begin
if StairsWalk2(False) then
Result := True;
end;
end;
//-----------------------------
//function ToStairs
//stair walking
function ToStairs: boolean;
begin
if not(LoggedIn) then Exit;
if (not(StairsWalk)) then
begin
Players[CurrentPlayer].Loc:= 'Lost near stairs';
result:= false;
NextPlayer(false);
end else
result:=true;
end;
//-----------------------------
//function FindObj2
//edit FindObjMulti (3text AND 3 colors)
//made by an idea from StarBlaster100 who took it from Charmz
//who took it from SRL Function include,
//so actually creds go to whole SRL Dev team!
function FindObj2(var cx, cy: Integer; T1, T2, T3: string; color1, color2, color3, tolerance: Integer; Click: Boolean): Boolean;
var
x, y, a, c, i, x1, y1, x2, y2 : Integer;
begin
if (FindMSColorTol(x, y, color1, tolerance)) or
(FindMSColorTol(x, y, color2, tolerance)) or
(FindMSColorTol(x, y, color3, tolerance)) then
begin
x1 := 245;
y1 := 165;
x2 := 277;
y2 := 185;
repeat
if (not (Loggedin)) then
break;
a := a + 1;
if (a = 1) then
c := c + 1;
if (a = 3) then
c := c + 1;
for i := 1 to c do
begin
if (a = 1) then
begin
x1 := x1 + 30;
x2 := x2 + 30;
end;
if (a = 2) Then
begin
y1 := y1 - 20;
y2 := y2 - 20;
end;
if (a = 3) then
begin
x1 := x1 - 30;
x2 := x2 - 30;
end;
If (a = 4) then
begin
y1 := y1 + 20;
y2 := y2 + 20;
end;
if (x1 = 485) and (x2 = 517) then
x2 := x2 - 2;
if (y1 = 325) and (y2 = 345) then
y2 := y2 - 7;
if (x2 > 515) then
Break;
if (FindColorTolerance(x, y, color1, x1, y1, x2, y2, tolerance)) or
(FindColorTolerance(x, y, color2, x1, y1, x2, y2, tolerance)) or
(FindColorTolerance(x, y, color3, x1, y1, x2, y2, tolerance)) then
begin
MMouse(x, y, 5, 5);
GetMousePos(x, y);
cx:= x;
cy:= y;
Wait(100+Random(50));
if(IsUpTextMulti(T1, T2, T3)) then
begin
if Click then
begin
Mouse(cx, cy, 0, 0, True);
FFlag(5);//geadd
end;
Result:= True;
end;
end;
end;
if (a = 4) then
a := 0;
until (x2 > 515) or (Result= True);
end;
end;
//-----------------------------
//function SecondFloor
//climbs down the stairs to the second floor. uses FindObj2
//to detect staircase.
function SecondFloor(Up :Boolean) : Boolean;
begin
if not(LoggedIn) then Exit;
SecondFloorTries:= 0;
if not LoggedIn then exit;
if Up then
begin
FindObj2(ax, ay, 'limb up Stai', 'up Stair', 'up Sta', 10299, 538192, 537419, 30, True);
ClickNpcChatTextStairs(True);
end else
begin
FindObj2(ax, ay, 'lim down Stai', 'down Stair', 'own Sta', 10299, 538192, 537419, 30, True);
end;
MarkTime(SecondFloorTimer);
repeat
wait(250);
SecondFloorTries:= SecondFloorTries + 1;
until (FindSymbol(x, y, 'spinning wheel') or (FindSymbol(x, y, 'quest') or (SecondFloorTries >= 40) or (TimeFromMark(SecondFloorTimer) >= 10*1000)))
if (FindSymbol(x, y, 'spinning wheel')) or (FindSymbol(x, y, 'quest')) then
begin
Status('We are at the 2nd floor now');
Result:= True;
Players[CurrentPlayer].Loc:= 'Second floor';
end else
begin
Status('Could not go downstairs to 2nd floor!');
Result:= False;
Players[CurrentPlayer].Loc:= 'Lost';
NextPlayer(False);
end;
end;
//-----------------------------
//function FirstFloor
//same as SecondFloor but than for first
function FirstFloor : Boolean;
begin
if not(LoggedIn) then Exit;
FirstFloorTries:= 0;
if not LoggedIn then exit;
FindObj2(ax, ay, 'lim Stai', 'limb Stair', 'Climb Sta', 10299, 538192, 537419, 30, True);
FFlag(5);
ClickNpcChatTextStairs(False);
MarkTime(FirstFloorTimer);
repeat
wait(250);
FirstFloorTries:= FirstFloorTries + 1;
until (FindSymbol(x, y, 'water') or (FindSymbol(x, y, 'cook') or (FirstFloorTries >= 40) or (TimeFromMark(FirstFloorTimer) >= 10*1000)))
wait(1000);//1 sec of wait, else i have problem with underneeth
if (FindSymbol(x, y, 'water')) or (FindSymbol(x, y, 'cook')) then
begin
Status('We are at the 1st floor now');
Writeln('We zijn er');
Result:= True;
Players[CurrentPlayer].Loc:= 'First floor';
end else
begin
Status('Could not go downstairs to 1st floor!');
Writeln('We zijn er niet');
Result:= False;
Players[CurrentPlayer].Loc:= 'Lost';
NextPlayer(False);
end;
end;
//-----------------------------
//function BankFloor
//climbs up stairs to bank floor. checks for bank/guide symbol to
//locate players loc.
function BankFloor : Boolean;
begin
if not(LoggedIn) then Exit;
BankFloorTries:= 0;
ladder:= FindLadderColor;
if not LoggedIn then exit;
FindObj2(ax, ay, 'limb Stai', 'limb Stair', 'Climb Sta', 10299, 538192, 537419, 30, True);
FFlag(5);
ClickNpcChatTextStairs(True);
MarkTime(BankFloorTimer);
repeat
wait(250);
BankFloorTries:= BankFloorTries + 1;
until (FindSymbol(x, y, 'bank') or (FindSymbol(x, y, 'guide') or (BankFloorTries >= 40) or (TimeFromMark(BankFloorTries) >= 10*1000)))
wait(1000);//1 sec of wait, else i have problem with underneeth
if (FindSymbol(x, y, 'bank')) then
begin
Status('We are at the bank floor now');
Writeln('We zijn er');
Result:= True;
Players[CurrentPlayer].Loc:= 'Bank floor';
end else
begin
Status('Could not go upstairs to bank floor!');
Writeln('We zijn er niet');
Result:= False;
Players[CurrentPlayer].Loc:= 'Lost';
NextPlayer(False);
end;
end;
//-----------------------------
//function HandleDoor
//checks and hadles door with use of FindObj2.
function HandleDoor(ToRange :Boolean) :Boolean;
var
Bx, By : Integer;
begin
if ToRange then
begin
Mouse(mmcx+6, mmcy-6, random(3), random(3), True);
FFlag(10);
end;
if FindObj2(Bx, By, 'oor', 'Door', 'Doo', 1460318, 600117, 929338, 30, False) then
begin
if IsUpText('pen') then
begin
Writeln('Door closed.');
wait(500+random(200));
Mouse(x, y, 0, 0, True);
FFlag(5);
Result:= True;
Exit;
end else
begin
if(IsUpText('lose'))then
begin
Writeln('Door already open.');
Result:= True;
Exit;
end;
end;
end;
end;
//-----------------------------
//procedure ToRange;
//after door handling, walk to range (by symbols)
procedure ToRange;
var
Cx, Cy : Integer;
begin
if not(LoggedIn) then Exit;
if(FindSymbol(Cx, Cy, 'Quest') or FindSymbol(Cx, Cy, 'Cook'))then
begin
Mouse(Cx, Cy, 2, 2, True);
FFlag(5);
end;
end;
//-----------------------------
//function ClickDTM
//clicks fish DTM for cooking
function ClickDTM :boolean;
begin
if FindInvDtm(Dx, Dy, TheDTM) then
begin
MMouse(Dx, Dy, 0, 0);
wait(250+random(500));
GetmousePos(Dx, Dy);
Mouse(Dx, Dy, 2, 2, false);
wait(500+random(500));
ClickOption('Use', 2);
Result:= True;
end else
begin
if not FindInvDtm(DX, Dy, TheDTM) then Result:= False;
end;
end;
//-----------------------------
//procedure ClickRange;
//edit from WT-Fakawi, creds to him cause of his procedure!
//clicks cooking range by bmps, they work!
function ClickRange:Boolean;//barrowed from wt-fakawi, edit by me (for own useage)
var c, i, Fx, Fy :Integer;
begin
loadbmps;
Fx := 90;
Fy := 150;
MakeCompass('e');
for i:= 0 to 1 do
begin
while (c < 65) do
begin
c := c + 5;
if FindBitmapToleranceIn(BMP[i], Fx, Fy, 40, 24, 310, 210, c) then
begin
MMouse(Fx, Fy, 10, 10);
If IsUpText('C') then
begin
GetMousePos(Fx, Fy);
Mouse(Fx, Fy, 0, 0, False);
Result := True;
Writeln('Found!');
FreeBitmap(BMP[i]);
Exit;
end else Result:= False;
end;
end;
end;
end;
//-----------------------------
//procedure Cook;
//cooks the fishes/beef
procedure Cook;
begin
if not(LoggedIn) then Exit;
if ClickDTM then
begin
if ClickRange then
begin
if ChooseOption(x, y, 'Use') then
begin
wait(1500+random(1000));
Flag;
ClickNpcChatTextRight('Raw beef');
Wait(2000+random(500));
ClickOption('All', 3);//eens checken
repeat
NoBan;
CheckRandoms;
Wait(2500+random(400));
until(not(FindInvDtm(Dx, Dy, TheDTM)))
end else
begin
Writeln('Could not start cooking- logout');
Players[CurrentPlayer].Loc:= 'Could not start cook';
NextPlayer(False);
end;
end else
begin
Writeln('Could not find and click cooking range- logout');
Players[CurrentPlayer].Loc:= 'Could not find/click cooking range';
NextPlayer(False);
end;
end else
begin
Writeln('Could not find DTM- logout');
Players[CurrentPlayer].Loc:= 'Could not find DTM';
NextPlayer(False);
end;
end;
//-----------------------------
//function OutRange
//walks out of room from cooking range, 1 blind click though :(
//handles door walks to stairs, upstairs to 2nd floor, to bank.
function OutRange :boolean;
begin
if not(LoggedIn) then Exit;
Mouse(658, 103, 5, 5, True);
Flag;
MakeCompass('s');
HandleDoor(False);
Wait(1000);
if StairsWalk2(True)then
begin
MakeCompass('n');
SecondFloor(True);
BankFloor;
end;
end;
//-----------------------------
//procedure PlayerReport;
//reports players information to user to get an overview from results.
procedure PlayerReport;
begin
if not(LoggedIn) then Exit;
Writeln('');
Writeln(' [--------------------------------------------------] ');
Writeln(' The Scar Noob''s Lumbridge Cooker ');
Writeln(' v 1.1 ');
Writeln(' [--------------------------------------------------] ');
Writeln('Player : '+ Players[CurrentPlayer].Name);
Writeln('Number : '+ inttostr(CurrentPlayer));
Writeln('Worked : '+ ScriptTime2(2));
Writeln('Banked : '+ inttostr(Players[CurrentPlayer].banked));
Writeln('Loads : '+ inttostr(Loads));
Writeln('Active : '+ BoolToStr(Players[CurrentPlayer].Active));
Writeln('Loc : '+ Players[CurrentPlayer].Loc);
Writeln(' [--------------------------------------------------] ');
Writeln('');
end;
//-----------------------------
//procedure MainLoop;
//main loop event.
procedure MainLoop;
begin
SetupSRL;
DeclarePlayers;
ActivateClient;
Loads:= 0
LoadDTM;
repeat
Banking(False);
ToStairs;
SecondFloor(False);
FirstFloor;
HandleDoor(True);
ToRange;
Cook;
OutRange;
Banking(True);
Loads:= Loads + 1
until(Players[CurrentPlayer].Integer1 = Loads)
PlayerReport;
Loads := 0;
NextPlayer(LoggedIn);
end;
begin
MainLoop;
end.P.S. don't watch the dutch comments :p
——————————————————
<!– END TEMPLATE: formanswers –>