SRL Archive - Archive

BMWxi - SRL Member Application


Ian

2013-01-29 16:12:24

How Long have You Played Runescape?
6 Year(s)


Are you affilated in anyway with Jagex LTD?
No

Were you Referred to SRL?
Na


What is your general programming knowledge?
Just started learning here, so only a little bit of pascal.


Are you a member of any other communities?
I have an account on Sythe that I made later, but don't use.


Tell us about yourself…
From: BMWxi
Hi, I'm Ian. I live in Halifax, Nova Scotia, Canada. I started playing rs seven years ago in grade 5, but had a few year long breaks in between. I started being interested in botting from some bot-killing videos on youtube, and I joined here early last summer. My hobbies include climbing, biking, camping, hiking, ect. I know English, learned French for a few years in schoo although I can hardly remember anythingl, and I'm now learning German in school.



Please show us one (or multiple) of your scripts.
My Crayfisher:
[SIMBA]program CrazyCrayfish;

{$DEFINE SMART}
{$i srl/srl.simba}
{$i ObjectDTM\ObjDTMInclude.simba}


//////////////////////////////////////////////////////
// ============================== //
// BMWxi's Crazy Crayfish Catcher //
// ============================== //
// //
// /// / / //
// ///// / _/ //
// ///// / _/ // //
// ////// /##//##/ ///// //
// ////// /##//##/ ////// //
// ///////////////////// //
// ///////////////////// //
// /////////////// //
// ////////// //
// //////// //
// ////// //
// ///// //
// ///// //
// //// //
// ///////// //
// /////// //
// /////// //
// //
//////////////////////////////////////////////////////
// //
// Instructions //
// ================== //
// [] Install ObjectDTM as instructed here: //
// http://villavu.com/forum/showthread.php?p=847813 //
// //
// [] Set your First XP counter to Total XP. //
// //
// [] Start your player at the fishing spot //
// behind Lumbridge Church. //
// //
// [] Set graphics to Min, Fixed, and Brightest. //
// //
//////////////////////////////////////////////////////





const

Version = '1.2';
Method = 'bank'; //Bank or Drop
Debug = False;

procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;

with Players[0] do
begin
Name := ''; // Player username
Pass := ''; // Player password
Active := True;
end;
end;

var
FishTries, TeleTries, CrayfishDTM, Cx, Cy, StartXP:Integer;
Status:String;

procedure LoadTheDTM;
begin
CrayfishDTM := DTMFromString('mlwAAAHicY2dgYDBgZWBQA2JtILYEYjsgNgFiXSBOZWRgyAXiQiBOAeIYIA4B4kgQ31IOqJsJKwZqxQkY8WAoAAA4BQUO');
end;

procedure FreeTheDTM;
begin
FreeDTM(CrayfishDTM);
end;

procedure CheckFriends; //An Antiban Procedure by BMWxi

var
NCx, NCy, ONx, ONy :Integer;
begin
if not LoggedIn then LoginPlayer;
if (not LoggedIn) or (InvFull) then Exit;
gametab(tab_friends); //Goes to friends tab
If FindColorTolerance(NCx, NCy, 16683035, 546, 246, 722, 451, 5) Then // Checks if they have changed names,
begin // if they have, It hovers to find their new name.
MMouse(NCx, NCy, 5, 5);
Wait(RandomRange(1000, 2000));
end;
If FindColorTolerance(ONx, ONy, 6619135, 546, 246, 722, 451, 5) Then //Checks to see if friends are online
begin //hovers the names of online friends
MMouse(ONx, ONy, 5, 5);
Wait(RandomRange(1000, 2000));
end else
begin
Wait(RandomRange(500, 1000)); //I added this so It doesn't spam-exit when you have no friends :)
end;
FTab(tab_Inv); //Returns to inventory
end;

procedure Antiban;
begin
if not LoggedIn then LoginPlayer;
if not LoggedIn then Exit;
FindNormalRandoms;
case Random(90) of
0..1: HoverSkill(skill_Fishing,false);
2: CheckFriends;
3: PickUpMouse;
4: RandomMovement;
5..12: MakeCompass('rand');
13: Wait(5000+random(2000));
end;
end;

function Fishing: Boolean;
var
PBox: TBox;
begin
PBox := IntToBox(240, 184, 285, 213);
Result := (AveragePixelShift(PBox, 250, 500) > 50);
end;

function NoCrayfish:Boolean;
var
Cx, Cy:Integer;
begin
if FindColorTolerance(Cx, Cy, 2046307, 47, 294, 79, 328, 10) then
begin
Result :=False;
SMART_DrawBoxEx(false, false, intToBox(47, 296, 78, 327), clGreen);
if Debug then
WriteLn('Crayfish in Inv');
end else
begin
Result :=True;
SMART_DrawBoxEx(false, false, intToBox(47, 296, 78, 327), clRed);
if Debug then
WriteLn('No Ore in Inv');
end;
end;

procedure Proggy;
var
FishingXPPH, CrayfishPH, Crayfish, FishingXPEarned:Integer;

begin;
if not LoggedIn then LoginPlayer;
if (not LoggedIn) or (InvFull) then Exit;
FishingXPEarned := (GetXPBar(1) - StartXP);
FishingXPPH := Round((FishingXPEarned * 3600) / (GetTimeRunning / 1000));
CrayfishPH := Round(FishingXPPH / 10);
Crayfish := Round(FishingXPEarned / 10);

ClearDebug;
Writeln('===========[] Crazy Crayfish ' + Version + ' []===========');
Writeln('[+] By BMWxi [+] Status: ' + Status);
Writeln('==============================================');
Writeln('[] Fishing XP Earned: ' + IntToStr(FishingXPEarned) + ' Per Hour: ' + IntToStr(FishingXPPH));
Writeln('[] Crayfish Caught: ' + IntToStr(Crayfish) + ' Per Hour: ' + IntToStr(CrayfishPH));
Writeln('[] Profit: ' + '0' + ' Per Hour: ' + '0');
Writeln('[] Total Time: ' + TimeRunning);
Writeln('==============================================');
end;

procedure DropCrayfish;
var
DropTime:Integer;
begin
if not LoggedIn then LoginPlayer;
if not LoggedIn then Exit;
FindNormalRandoms;
Status := 'Dropping';
Proggy;
if (not IsActionBarOpen) then ToggleActionBar(True);
begin
if FindDTM(CrayfishDTM, Cx, Cy, MIX1, MIY1, MIX2, MIY2) then
begin
if (NoCrayfish) then
begin
WriteLn('Placing Crayfish in slot 1');
ClearActionBarSlot(1);
DragMouse(Cx, Cy, 5, 5, 57, 305, 5, 5);
Wait(RandomRange(250, 750));
end;
KeyDown(49);
MarkTime(DropTime);
repeat
Wait(randomrange(100,150));
until (NoCrayfish) or (TimeFromMark(DropTime) > 5000);
KeyUp(49);
if not (NoCrayfish) then
begin
if FindDTM(CrayfishDTM, Cx, Cy, MIX1, MIY1, MIX2, MIY2) then
begin
ClearActionBarSlot(1);
DragMouse(Cx, Cy, 5, 5, 57, 305, 5, 5);
Wait(RandomRange(250, 750));
DropCrayfish;
Exit;
end;
end;
SMART_ClearCanvas;
end;
end;
Antiban;
Proggy;
end;

procedure BankChestTele;
var
SSx, SSy, ASx, ASy, FSSx, FSSy, TeleTimeout:Integer;
begin
if not LoggedIn then LoginPlayer;
if (not LoggedIn) then Exit;
if (TeleTries > 4) then
begin
WriteLn('Failed to Teleport too many times, logging out.');
Logout;
TerminateScript;
end;
Status := 'Teleporting';
Proggy;
if ((GetColor(628,182)) = 5419131) then
begin
MMouse(628,182, 10, 10);
Wait(randomrange(200,500));
ClickMouse2(true);
Wait(randomrange(500,1000));
end;
if ((GetColor(624,433)) = 4599561) then
begin
MouseBox(590, 427, 698, 446, 1);
SetAngle(SRL_ANGLE_HIGH);
MakeCompass('N');
TeleTries := TeleTries + 1;
MarkTime(TeleTimeout);
repeat
Wait(randomrange(100,500));
until (FindSymbol(SSx, SSy,'shop')) or (FindSymbol(ASx, ASy,'anvil')) or (FindSymbol(FSSx, FSSy,'fishing shop')) or (TimeFromMark(TeleTimeout) > 5000);
end;
if (FindSymbol(SSx, SSy,'shop')) or (FindSymbol(ASx, ASy,'anvil')) or (FindSymbol(FSSx, FSSy,'fishing shop')) then
begin
WriteLn('Successfully teleported to the Bank Chest');
Exit;
end else
begin
WriteLn('Error 404: Various Symbols not found. Retrying.');
BankChestTele;
end;
end;

procedure ToRiverPath;
var
WalkTime:Integer;
begin
if not LoggedIn then LoginPlayer;
if not LoggedIn then Exit;

Status := 'Walking to River';
Proggy;
if (RunEnergy(80)) then SetRun(True);
FindNormalRandoms;
WriteLn('Walking to the River using DTMs');
MarkTime(WalkTime);
ObjDTM_WalkPath(['111:141:6:10:7:70:67:10:7:62:84:10:7:53:68:10:7:49:76:10:7:46:93:10:7:20:81', '121:135:5:1:7:70:109:1:7:62:129:1:7:42:124:1:7:116:73:1:7:100:76', '124:131:5:1:7:80:19:1:7:64:22:1:7:35:55:1:7:26:75:1:7:71:88', '134:120:3:1:7:31:38:1:7:76:67:7:7:125:97', '99:96:4:7:7:94:20:7:7:73:56:1:7:128:37:1:7:132:53'], 3, 100, 80, False, True);
if (WalkTime > 30000) then Exit;
Proggy;
repeat
wait(RandomRange(100, 200));
until(not isMoving);
end;

procedure TPAFishCrayfish;
var
tmpCTS, i, N, r, Counter, FSx, FSy:Integer;
FishSpotTPA:TPointArray;
begin
repeat
if not LoggedIn then LoginPlayer;
if (not LoggedIn) or (InvFull) then Exit;
FindNormalRandoms;
SetAngle(SRL_ANGLE_Low);
if (FishTries > 3) then
begin
WriteLn('Failed to find the fishing spot too many times, logging out.');
Logout;
TerminateScript;
end;
Flag;
repeat
wait(RandomRange(50,100));
until not IsMoving;
Status := 'Fishing';
Proggy;

tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(0.36, 1.04);

FindColorsTolerance(FishSpotTPA, 11840421, MSX1, MSY1, MSX2, MSY2, 5);

SetColorToleranceSpeed(tmpCTS);
SetToleranceSpeed2Modifiers(0.02, 0.02);

N := High(FishSpotTPA);
if (N < 1) or (not(FindSymbol(FSx, FSy,'fishing spot'))) then
begin
WriteLn('Not at the Fishing Spot!');
FishTries := FishTries + 1;
MakeCompass('rand');
WriteLn('We have failed to find the Fishing Spot ' + IntToStr(FishTries) + ' times in a row.');
if (FishTries > 3) then
begin
WriteLn('Failed to find the fishing spot too many times, logging out.');
Logout;
TerminateScript;
end;
WriteLn('Trying ' + IntToStr(3 - FishTries) + ' more times until Termination.');
Wait(RandomRange(200, 500));
BankChestTele;
ToRiverPath
TPAFishCrayfish;
Exit;
end;
MarkTime(Counter);
for i := 0 to N do
begin
r := random(N);
Wait(RandomRange(100, 250));
MMouse(FishSpotTPA[r].x, FishSpotTPA[r].y, 5, 5);
Wait(RandomRange(100, 175));
if WaitUpText('age F', 500) then
begin
Break;
end;
if (TimeFromMark(Counter) > 3000) then
begin
WriteLn('TPA Failed!');
FishTries := FishTries + 1;
MakeCompass('rand');
WriteLn('We have failed to find the Fishing Spot ' + IntToStr(FishTries) + ' times in a row.');
if (FishTries > 3) then
begin
WriteLn('Failed to find the fishing spot too many times, logging out.');
Logout;
TerminateScript;
end;
WriteLn('Trying ' + IntToStr(3 - FishTries) + ' more times until Termination.');
Wait(RandomRange(200, 500));
BankChestTele;
ToRiverPath
TPAFishCrayfish;
Exit;
end;
end;
FishTries := 0;
ClickMouse2(True);

MakeCompass('rand');
Flag;
case Lowercase (Method) of
'drop':
begin
repeat
wait(1000);
Antiban;
Proggy;
until(not Fishing) or (not LoggedIn) or (InvCount > (randomrange(20,25)));
if (InvCount < (randomrange(20,25))) then
begin
TPAFishCrayFish;
Exit;
end;
Exit;
end;

'bank':
begin
repeat
wait(1000);
Antiban;
Proggy;
until(InvFull) or (not Fishing) or (not LoggedIn);
if (not InvFull) then
begin
TPAFishCrayFish;
Exit;
end;
Exit;
end;
end;
until(InvFull) or (not LoggedIn);
end;

procedure ToBankPath;
begin
if not LoggedIn then LoginPlayer;
if (not LoggedIn) then Exit;

Status := 'Walking to Chest';
Proggy;
if (RunEnergy(80)) then SetRun(True);
WriteLn('Walking to the Chest using DTMs');
ObjDTM_Walk('91:49:6:10:7:88:38:10:7:73:37:10:7:69:45:10:7:64:61:10:7:41:48:10:7:29:48', 3, 100, 80, True);
Proggy;
if IsActionBarOpen then ToggleActionBar(False);
repeat
wait(RandomRange(100, 200));
until(not isMoving);
if Debug then
WriteLn('At Chest');
end;

procedure DepositFish;
var
Cx, Cy:Integer;
begin
if not LoggedIn then LoginPlayer;
if (not LoggedIn) then Exit;
Status := 'Banking Crayfish';
Proggy;
if IsActionBarOpen then ToggleActionBar(False);
if FindObjTPA(Cx, Cy, 855309, 5, 1, 10, 15, 100, ['it b']) then
begin
MMouse(Cx, Cy, 5, 5);
Wait(RandomRange(100, 120));
WriteLn('Found Chest');
if IsUptext('osit') then
begin
WriteLn('Clicking Chest');
ClickMouse2(True);
if DidRedClick then
begin
while not (DepositScreen) do
Wait(RandomRange(400, 700));
Wait(RandomRange(200, 500));
MouseBox(294, 266, 327, 289, 1);
Wait(RandomRange(400, 700));
TeleTries := 0;
end else
begin
ToBankPath;
DepositFish;
Exit;
end;
end else
begin
ToBankPath;
DepositFish;
Exit;
end;
end else
begin
BankChestTele;
DepositFish;
Exit;
end;
end;

procedure Options;
begin
if not LoggedIn then LoginPlayer;
if (not LoggedIn) or (InvEmpty) then Exit;
case Lowercase (Method) of
'drop':
begin
DropCrayFish;
end;

'bank':
begin
BankChestTele;
ToBankPath;
DepositFish;
ToRiverPath;
end;
end;
end;

begin
SRL_SixHourFix := True;
SetupSRL;
LoadTheDTM;
AddOnTerminate('FreeTheDTM');
ObjDTM_Setup
DeclarePlayers;
LoginPlayer;
SMART_ClearCanvas;
StartXP := GetXPBar(1);
WriteLn('Starting XP is ' + IntToStr(StartXP));
repeat
SetAngle(SRL_ANGLE_LOW);
CheckFriends;
repeat
if not LoggedIn then LoginPlayer;
TPAFishCrayfish;
Options;
Proggy;
until(InvFull) or (not LoggedIn);
LoginPlayer;
until(InvFull);
FreeTheDTM;
end.

Some reports:

Getting from lv 1 to 20 in 45 minutes:
=========[] Crazy Crayfish 1.0 []=========
[+] By BMWxi [+]
================
[] Fishing XP Earned: 4500 Per Hour: 6352
[] Crayfish Caught: 450 Per Hour: 635
[] Total Time: 42 Minutes and 30 Seconds
==========================================

===========[] Crazy Crayfish 1.1 []===========
[+] By BMWxi [+] Status: Fishing
==============================================
[] Fishing XP Earned: 16310 Per Hour: 4938
[] Crayfish Caught: 1631 Per Hour: 493
[] Total Time: 3 Hours, 18 Minutes and 9 Seconds
==============================================

===========[] Crazy Crayfish 1.1 []===========
[+] By BMWxi [+] Status: Fishing
==============================================
[] Fishing XP Earned: 9710 Per Hour: 5204
[] Crayfish Caught: 971 Per Hour: 520
[] Total Time: 1 Hours, 51 Minutes and 57 Seconds
==============================================

===========[] Crazy Crayfish 1.1 []===========
[+] By BMWxi [+] Status: Fishing
==============================================
[] Fishing XP Earned: 26530 Per Hour: 6186
[] Crayfish Caught: 2653 Per Hour: 618
[] Total Time: 4 Hours, 17 Minutes and 18 Seconds
==============================================

Kyle Undefined

2013-01-29 16:24:02

Voted yes. You're helpful on the forums, your code looks good, and you seem like a decent person.

The Killer

2013-01-29 16:24:35

Voted no for that comment on runaways script earlier. ;)

Anyway a yes from me.

Ian

2013-01-29 16:26:49

From: Kyle Undefined
Voted yes. You're helpful on the forums, your code looks good, and you seem like a decent person.

Thanks :)
From: The Killer
Voted no for that comment on runaways script earlier. ;)

Anyway a yes from me.

Hahaha, the profit depends on ge prices, not the script itself. Thanks :)

Also in case anyone was wondering, the banking is using the EOC teleport to the training area in Lumbridge where there is a deposit chest, then running back :)

Sjoe

2013-01-29 16:27:18

Voted yes :)
Personally think the coding is well written
and tested the script, it works good.

Ian

2013-01-29 16:31:05

From: Sjoekeloe
Voted yes :)
Personally think the coding is well written
and tested the script, it works good.


Thanks :)

Justin

2013-01-29 16:40:44

Voted Yes.

Script is coded very well, seen you active and being very helpful around the forums.

Best of luck!


Jake

2013-01-29 16:40:57

Got my yes :)

Ian

2013-01-29 16:49:15

Thanks guys! :D

Dynamite

2013-01-29 17:20:22

Yes

-Boom

John

2013-01-29 18:00:24

Got my yes :)

Gucci

2013-01-29 18:19:59

Scripting is good, and I like your attitude around the forums. Yes from me

Ashaman88

2013-01-29 18:32:50


Ian

2013-01-29 19:03:19

From: Dynamite
Yes

-Boom

Thanks
From: John
Got my yes :)

Thanks :)
From: Gucci
Scripting is good, and I like your attitude around the forums. Yes from me

Thanks Gucci :)
From: Ashaman88

Thanks :D

Shatterhand

2013-01-30 04:44:42

Yes from me. Your activity is great. The script is simple but fine.
I like your new avatar. :D

Ian

2013-01-30 09:17:23

From: Shatterhand
Yes from me. Your activity is great. The script is simple but fine.
I like your new avatar. :D


Thanks, poliwags are great aren't they? :D

J J

2013-01-30 09:56:22

Activity is great, the script shows that you know what you are doing but there is still room for improvements/more advanced methods :) Voted yes.

DannyRS

2013-01-30 09:59:16

Who the hell voted no ;)

You should remove my mention about your avatar in your sig :p that's all you

Ian

2013-01-30 10:11:46

From: J J
Activity is great, the script shows that you know what you are doing but there is still room for improvements/more advanced methods :) Voted yes.

Thanks JJ :D. I hope to start using more advanced TPAs soon.
From: DannyRS
Who the hell voted no ;)

You should remove my mention about your avatar in your sig :p that's all you

Oh yeah, forgot about that :p

Le Jingle

2013-01-30 10:45:01

Yes

Ian

2013-01-30 11:49:05

From: Le Jingle
Yes


Thanks LJ :D

Mat

2013-01-30 12:10:03


// //
// /// / / //
// ///// / _/ //
// ///// / _/ // //
// ////// /##//##/ ///// //
// ////// /##//##/ ////// //
// ///////////////////// //
// ///////////////////// //
// /////////////// //
// ////////// //
// //////// //
// ////// //
// ///// //
// ///// //
// //// //
// ///////// //
// /////// //
// /////// //
// //

Boss^^^
Voted yes :)

Laimonas171

2013-01-30 15:05:31

Voted, yes he already have made few good scripts, + active member and I like his attitude :)

!dobre pazalavat

Ian

2013-01-30 15:42:40

From: Mat

// //
// /// / / //
// ///// / _/ //
// ///// / _/ // //
// ////// /##//##/ ///// //
// ////// /##//##/ ////// //
// ///////////////////// //
// ///////////////////// //
// /////////////// //
// ////////// //
// //////// //
// ////// //
// ///// //
// ///// //
// //// //
// ///////// //
// /////// //
// /////// //
// //

Boss^^^
Voted yes :)

Haha thanks :)
From: Laimonas171
Voted, yes he already have made few good scripts, + active member and I like his attitude :)

!dobre pazalavat


Thank you, what does that mean? :D

Sjoe

2013-01-30 16:27:59

From: BMWxi
Haha thanks :)


Thank you, what does that mean? :D


I think he called your mom a wh*re?

OT: Gonna say gratz on SRL Member already!

cause

2013-01-30 17:02:33

Yes for sure. 2k posts = :)

Ian

2013-01-30 17:58:56

From: cause
Yes for sure. 2k posts = :)


Thanks cause :)

Press Play

2013-01-30 18:59:19

Yes, because of this: :)

// //
// /// / / //
// ///// / _/ //
// ///// / _/ // //
// ////// /##//##/ ///// //
// ////// /##//##/ ////// //
// ///////////////////// //
// ///////////////////// //
// /////////////// //
// ////////// //
// //////// //
// ////// //
// ///// //
// ///// //
// //// //
// ///////// //
// /////// //
// /////// //
// //

No, but really;
Yes, because your code looks very nice. I like especially the commenting to say what you're doing - a good habit to get into.
Yes, I've seen you around the forums and you're a nice guy :)
Yes, no… Double yes, since 2k posts and useful poster!

Ian

2013-01-30 20:07:03

Thanks daazndagger :)

Echo_

2013-01-31 00:40:35

The person that voted no was just jealous of your ASCII crayfish.
Yes from me for reasons already stated.

riwu

2013-01-31 02:02:47

Voted yes for good activity and decent script :)
Improve on your TPA usage though

for i := 0 to N do
begin
r := random(N);
Wait(RandomRange(100, 250));
MMouse(FishSpotTPA[r].x, FishSpotTPA[r].y, 5, 5);
This may result in it looping through the same Tpoints multiple times. I usually just sort the ATPA by size/nearest point and loop in that order, but if you want it to loop a random point you should make sure it doesn't loop the same point twice (either by deleting the tpoint—take note of adjusting the i value of the for loop though, or making a TIA of looped index and reloop for repeated index).

[XoL]

2013-01-31 09:58:40

Not even looking at script, you did enough for the community. YES

Ian

2013-01-31 13:35:11

From: Echo_
The person that voted no was just jealous of your ASCII crayfish.
Yes from me for reasons already stated.

Haha thanks :)
From: riwu
Voted yes for good activity and decent script :)
Improve on your TPA usage though

for i := 0 to N do
begin
r := random(N);
Wait(RandomRange(100, 250));
MMouse(FishSpotTPA[r].x, FishSpotTPA[r].y, 5, 5);
This may result in it looping through the same Tpoints multiple times. I usually just sort the ATPA by size/nearest point and loop in that order, but if you want it to loop a random point you should make sure it doesn't loop the same point twice (either by deleting the tpoint—take note of adjusting the i value of the for loop though, or making a TIA of looped index and reloop for repeated index).

Thanks for the suggestions, how do you delete a Tpoint?
From: [XoL]
Not even looking at script, you did enough for the community. YES


Thanks r4 :D

Le Jingle

2013-01-31 15:23:01

Just one way to do it (statically .. prob not ideal for a script, but informative in some way I suppose)


function RemoveTPointFromTPA(pt: TPoint; inTPA: TPointArray): TPointArray;
var
i : integer;
begin
SetLength(result, 1);
for i := 0 to high(inTPA) do
if (inTPA[i].x = pt.x) and (inTPA[i].y = pt.y) then
begin
result[0] := Point(pt.x, pt.y);
ClearTPAFromTPAWrap(inTPA, result, result);
break;
end;
SetLength(inTPA, 0);
end;

var
TPA : TPointArray;
P : TPoint;

begin
TPA := [Point(1, 1), Point(2, 2), Point(3, 3)];
p := Point(2, 2);
Writeln(RemoveTPointFromTPA(p, TPA));
end.

Hobbit

2013-01-31 15:40:35

Welcome :)