PDA

View Full Version : Using Simple CTS2/TPA's



Footy
10-04-2012, 10:10 PM
:spot:Using Simple CTS2/TPA's:spot:


Contents

Intro
What is a TPoint?
What is a TPointArray?
What is CTS2?
Creating a Object-finding TPA Function
Conclusion


Intro
Hello all, Welcome to my Simple TPA Tutorial! In this tutorial, I will teach you what a TPA is, and how to use one in runescape. This tutorial requires very little background knowledge. Knowledge on co-ordinates(Cartesian Plane), basic Pascal Script scripting, for..to..do loops and variables is assumed. This tutorial was made using Simba using the pascalscript interpreter(default). I'm sorry this tutorial is long, I tried to explain everything in depth and give lots of examples/diagrams. High-level scripters, this tutorial only focuses on basic TPA functions. This tutorial probably isn't for you. This is my first tutorial, so please give me advice on what to fix and work on! :)


What is a TPoint?
I'm sure many of you are wondering what exactly a TPoint is. If you aren't, head to the next section. Basically, a TPoint is a co-ordinate. It is an x value, and a y value, stored into one variable. A Tpoint equal to (2, 3) would be equal to this on a Cartesian plane:

http://www.fileize.com/files/2559bff9/116/04.gif

However in Runescape, we use an inverted Cartesian plane. This means the x values still increment from left to right, but y values increment from top to bottom, rather then bottom to top like in Cartesian's plane. The (0, 0) point is in the top left-hand corner.


When using TPoints, you declare the variable like this:
var
YourTPointNameHere:TPoint;

Thats all you really have to know about TPoints for this tutorial. Brace yourselves... The TPA section is coming.....


What is a TPointArray?
What is a TPA? Its a beast, all color object finding revolves around TPA's. Really, all a TPA is is a collection of TPoints, stored into one variable. What makes TPA's so amazing is the things we can do with them, the ways we can twist, shape, and altar them to fit our needs. In this tutorial, we wont go over any advanced TPA uses, just simple object finding methods. If I was to turn a TPA into a picture, it would look something like this.

http://www.fileize.com/files/1f9bfc65/e9e/04.gif

Make sense? All a TPA is is a big bag of TPoints(not literally). Just like how a TPoint stores an x and y value, TPointArrays store Tpoints. Simple enough, right? Lets move on to CTS2.


What is CTS2?
CTS2? Its just come collection of letters and numbers right now. After you read and understand this tutorial, you will use CTS2 in every single color finding function you ever use for the rest of your life! Okay, that's a bit of an exaggeration, but I'm not kidding, CTS2 is the most useful thing in the world when you need to find colors accurately.

I guess I should explain what CTS means now, right? CTS is just a method of finding colors using tolerances, RGB values, hue and sat, etc. CTS stands for Color Tolerance Speed. Dont ask me what it means, I dont know either! :p Generally, a higher CTS is more accurate at finding color, which is why we will use CTS2 Today.

Also, before we begin, I should note I use ACA for testing and finding colors. ACA is downloadable here (http://villavu.com/forum/showthread.php?t=26944). If you don't know how to use ACA, check Yohojo's Tutorial. (http://www.google.ca/url?sa=t&rct=j&q=site%3Avillavu.com%20yohojo%20aca%20tutorial&source=web&cd=1&cad=rja&ved=0CCAQFjAA&url=http%3A%2F%2Fvillavu.com%2Fforum%2Farchive%2Fi ndex.php%2Ft-71074.html&ei=muxtUNaZPOPr0gHcuoGIAQ&usg=AFQjCNGh1p02AgO3c3gP4TVDUeiNP39VJQ) The only difference is that he uses the Generated code from ACA. We are big boys now, we make our own functions! Not only do custom functions show a higher skill level, they also function better, because you can customise them to do exactly what you want!

Open up ACA and find your way to something you want to find. Now before you start picking colors like you did in Yohojo's tutorial, pick CTS2 from the radiobuttons to the right.

http://www.fileize.com/files/46f69dfd/c96/04.gif

Now pick your colors and play with them until you are pleased with the result. This is what my imp looked like after I finished with him.

http://www.fileize.com/files/ae96e5ce/348/04.gif

Now take down these numbers here, write them down somewhere, we will use them in a few minutes. They are located right above the CTS selection radiobuttons.

http://www.fileize.com/files/021b0e77/33a/04.gif

Alright, now that we have those numbers written down somewhere, we can write our actual function that will find the imp(in my case). Start off with the default script, and creating a procedure called FindImp.

program new;
{$i srl/srl.simba}

Procedure FindImp;
begin
end;



begin
SetupSRL
end.

Next, we need to tell the script what our current CTS is. We need this for after we finish using CTS2. Text finding, and other primary functions rely on CTS, so ALWAYS change CTS back to normal after you are finished. The simplest way of doing this is to assign the current CTS to a variable, often called tmpCTS. After doing that, We need to tell the script what CTS we are using. To do that, use:

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS:integer;
begin
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
end;

begin
SetupSRL
end.

Incase you didn't follow, I declared a variable named tmpCTS, then assigned tmpCTS to whatever the current CTS is. Next, we told the script we want to use CTS2. As of that moment, all color finding functions will use CTS2.

Now we need to set our hue and sat mods. What on earth are those??? They are just numbers that the script somehow uses in some fancy algorithm while finding colors for you. All you need to know is how to set it. To set it, do this:

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS:integer;
begin
tmpCTS := GetToleranceSpeed;
SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(hue, sat);
end; //when doing a decimal
//put 0 infront of it
begin //Good: 0.45 -Will work
SetupSRL //Bad: .45 -Will give an error
end.

Alright, now we've told our script to save the current CTS to a variable, set the CTS to 2 and set our super complicated modifiers. Whats next? Your color finding function! You can use findcolor, findcolortolerance, findcolorstolerance, whatever you want! Note that if ACA gave you a tolerance that wasn't 0, you have to use a tolerance version of the function.

We've made our function that finds our color, but what do we do now? Right after we find the colors, before we utilise them, or do anything else, we need to set our CTS back to 1. To do that, we use our tmpCTS variable. Also, we need to set the modifiers back to 0.02. This is the value used in text finding.

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS, x, y:integer;
begin
tmpCTS := GetToleranceSpeed;

SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(hue, sat);

FindColorTolerance(x, y, thecolorACAgaveus, MSX1, MSY1, MSX2, MST2, TolerancethatACAgaveus);

SetColorToleranceSpeed(tmpCTS); //RIGHT AFTER we find our colors, we
SetToleranceSpeed2Modifiers(0.02, 0.02); //Change the CTS back.

mmouse(x, y, 1, 1);
end;

begin
SetupSRL
end.

And thats all there really is to CTS. If you did everything right, your function will find exactly what ACA highlighted when you picked your colors.
Note: Finding colors using ACA does not require credits in a script or members application. You only need to credit if you use ACA's Generated function. If you don't understand CTS2, read it over again, then feel free to ask me.


Creating an Object-finding TPA function
This is what everyone is here for, no? You want to incorporate TPA object finding into your script. I'm here to show you how. In my tutorial, I'll be using TPA's to find the Imp I used in the CTS2 section. You can use whatever you want.

Alright, bring up the script we used in the CTS2 section, but remove the findcolor bit. It should look like this.
program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS, x, y:integer;
begin
tmpCTS := GetToleranceSpeed;

SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(hue, sat);



SetColorToleranceSpeed(tmpCTS); //RIGHT AFTER we find our colors, we
SetToleranceSpeed2Modifiers(0.02, 0.02); //Change the CTS back.


end;

begin
SetupSRL
FindImp;
end.

Alright, lets start by collecting our TPoints, and placing them into a TPA. How do we do that? It's actually very very simple, its what you do with the TPA that is complicated. First, declare a Local TPA variable, name it whatever you want. In order to find colors and put the results into a TPA, we will use FindColorsTolerance. Whenever filling TPA's, you want to use the plural forms of the FindColor functions. For example; Use FindColors instead of FindColor, FindcolorsTolerance instead of FindColorTolerance, etc.. The parameters are as follows:

FindColorsTolerance(TPointArray, Color, xs, ys, xe, ye, tol);

TPointArray is where you put the name of your TPA. Color is the color you got in ACA. xs, ys, xe, and ye are MSX1, MSY1, MSX2, MSY2, assuming you are finding an object on the Main screen. Tolerance is the tolerance ACA found for you. Plug in your numbers, and your script should look like this so far. Note: I've plugged my numbers in, so it wont look identical to yours.

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS:integer;
ImpTPA:TPointArray;
begin
tmpCTS := GetToleranceSpeed;

SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(0.08, 0.95); //Ive plugged in my hue and sat mods. Plug in your own here.

FindColorsTolerance(ImpTPA, 1911631, MSX1, MSY1, MSX2, MSY2, 8);

SetColorToleranceSpeed(tmpCTS); //RIGHT AFTER we find our colors, we
SetToleranceSpeed2Modifiers(0.02, 0.02); //Change the CTS back.


end;

begin
SetupSRL
FindImp;
end.

Now after we return the CTS and modifiers to normal, we can start playing around with our TPA. In this tutorial, I will only go through very basic TPA methods. If you are interested in learning more, I suggest you look at the WizzyPlugin. Its a huge(I'm not lying) list of TPA functions that will do anything you ever imagined to a TPA. Back on topic, to start, we will create a for..to..do loop. This will go through points in the TPA, stopping when we find a point with the correct uptext. I'll show you what it will look like, then I'll explain everything.

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS, i, l, r, counter:integer;
ImpTPA:TPointArray;
begin
tmpCTS := GetToleranceSpeed;

SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(0.08, 0.95); //Ive plugged in my hue and sat mods. Plug in your own here.

FindColorsTolerance(ImpTPA, 1911631, MSX1, MSY1, MSX2, MSY2, 8);

SetColorToleranceSpeed(tmpCTS); //RIGHT AFTER we find our colors, we
SetToleranceSpeed2Modifiers(0.02, 0.02); //Change the CTS back.

L := High(ImpTPA)
marktime(counter);
for i := 0 to L do
begin
r := random(L);
wait(randomrange(60, 200));
mmouse(ImpTPA[r].x, ImpTPA[r].y, 2, 2);
if waituptext('mp', 300) then
Break;
if timefrommark(counter) > 3000 then
begin
writeln('We failed to find the Imp!');
Terminatescript;
end;
end;
writeln('We found the imp!');
clickmouse2(mouse_right);




end;

begin
SetupSRL
FindImp;
end.

Alright, there is the finished script. It will fill a TPA with colors found using CTS2, then go through random points in the TPA until it finds the imp or time out(IMPORTANT FAILSAFE). Lets dissect this code so we understand what every bit means.

L := High(ImpTPA)
marktime(counter);

Lets start with the first line. High will count how many items there are in an array, and return with the final count. In other words, it will figure out how many TPoints are in our TPA. Marktime(counter) is a very simple failsafe that most of you should know. I'm simply starting the timer for the failsafe I will use in the for..to..do loop.

for i := 0 to L do

Very simple for to do loop. Everything between the following begin and matching end will be looped through until i = L.

r := random(L);
wait(randomrange(60, 200));

First of all, r := random(L) just gives r a random value between 0 and L. We use this to pick a random point in our TPA. When you get more advanced, You can sort your TPA's based on size, shape, and a whole bunch of other things. For now though, we will just use a random point. The next line is a wait. You must have this. It prevents the mouse from going 100 miles an hour between points in your TPA by having a small wait before every mouse movement.

mmouse(ImpTPA[r].x, ImpTPA[r].y, 2, 2);

By far the most complicated part of the script. Everything else has been child's play. This is where we separate the boys from the men. First off, this is a mouse movement using mmouse. I thought I should clear that before I start with the parameters. For our X parameter, we used ImpTPA[r].x. ImpTPA is the name of our TPA, and the number in square brackets is the number of the TPA. Think of it this way. Every TPoint in the TPA has a number. They are all in order of when they were found, and they are all given a number. 0, 1, 2 and so on. Here's a picture of some people in a line, just like TPoints in a TPA.

http://www.fileize.com/files/f3574c96/3f7/04.gif

I hope that cleared up the number in the bracket. Every point in the TPA has a number, so we picked a random number(r) to use a random TPoint.

Next up is the .x and .y part. This is known as the dot operator. The dot operator basically splits the variable into smaller pieces. Our TPoint that we have just selected(using ImpTPA[r]) is made of two smaller values; An x value, and a y value. When you press . after ImpTPA[r], a small menu should pop up showing you the small pieces inside of the TPoint. For x in mmouse, pick x, for y, pick y.the last two parameters are randomness. They aren't required since using TPA's already involves randomness. However, a small amount of randomness is suggested. It just ensures you aren't always clicking the same color. Well, thats the tough part out of the way, lets finish with some easier stuff.

if waituptext('mp', 300) then
Break;

WaitUptext will wait for the uptext "mp" for 300ms. If it doesn't find it, we will continue sifting through our TPA. If we do find the uptext, we will break out of the for..to..do loop. The rest of the script is simple enough, I dont think I have to explain it anymore. Lets test this and see what happens. Incase you don't know, Marktime will start a timer in miliseconds using the variable in the parameters. Timefrommark will check how long its been since the timer has started.

http://www.fileize.com/files/ea465dd6/ea8/04.gif

Turns out his uptext wasn't Imp. After fixing that, it worked perfectly, first try!


Conclusion
Thanks for reading my (Very large)CTS2/TPA tutorial! Hopefully you gained something out of this. Let me know what you thought, pro's, con's, suggestions, all that fun stuff. If you learned something, post below, or just rep me, either work! This TPA usage is very simple, I might make more advanced TPA tutorials in the future, but this is enough to find any normal NPC/bank. Looking for more advanced TPA usage? I'd suggest NKN's TPA[Explained] Tutorial. It will teach you the basics of ATPA's and SplitTPAex, a very useful ATPA function.

~Footy

Kasi
10-04-2012, 10:40 PM
Nice tut, Repped. also dont forget when telling us about the coordinate system that we use is flipped, the y gets larger the lower down you go. the x is the same, larger when going right. other then that a pretty solid guide on TPA's and CTS2.

Footy
10-04-2012, 10:53 PM
Right, forgot about that, I'll do it now. Thanks!
E: Done

NKN
10-04-2012, 11:07 PM
Nice tut.
10/10 would read again.

Footy
10-04-2012, 11:08 PM
Nice tut.
10/10 would read again.

Nice comment.
10/10
Would read again.
:)

Nebula
10-05-2012, 01:51 AM
Good tut, TPAs are difficult to understand the first time around, but after that it's easy. Adding basic ATPA functions (such as RAaSTPAEX and SortATPAFrom) in the future would make the object finding a lot more accurate. E: Although the title is "Simple".

Footy
10-05-2012, 01:55 AM
Thanks! I plan on adding those when I get a bit of time.
P.S. I love the siggy! :D

Ian
10-05-2012, 02:05 AM
Yay! you got your avatar moving! :D

Flight
10-05-2012, 02:30 AM
That's a nice tutorial friend. Great job. :)

Edit:
For lack of better wording, you have two green (rep)balls now.

P1ng
10-05-2012, 05:25 AM
You can use findcolor, findcolortolerance, findcolorstolerance

Actually, you should use FindColorsTolerance or FindColorsToleranceSpiral. These functions will find all of that colour within the search area whereas FindColor and FindColorTolerance will only find one point with that colour, thus not giving you a TPA.

But nice tutorial :) It was very easy to follow and should be good for those starting out with TPAs

Also, you might want to make the FindImp a function, that way you can add failsafes and/or debug within the procedure that uses it to determine if it failed to find the imp.

And, I'd recommend some sort of method that if the FindColorsTolerance doesn't find the colour at all it exits prior to going through the loop.

Benny
10-05-2012, 06:34 AM
Wah this was good but I'm confused :o
maybe you can skype me sometime and go through it

Solar
10-05-2012, 07:00 AM
Just had a quick skim through it, looks nice. Will read it properly when I've got time.
Plus rep'd (even though it doesn't make a lot of difference with my low rep level.) :redface:

Footy
10-05-2012, 10:50 AM
Thanks guys! I'll add some of your suggestions after school. Benny, I'll Pm you after school.

Benny
10-05-2012, 01:25 PM
Thanks Footy, look forward to pm



That's a nice tutorial friend. Great job. :)

Edit:
For lack of better wording, you have two green (rep)balls now.

ah lucky two balls :( always looks good

Footy
10-05-2012, 01:36 PM
Benny, I can't Tv you right now, but what do you not understand?

Benny
10-05-2012, 01:43 PM
Procedure RandomCheck;
var
Sym: TpointArray;
Begin
ChatCheck;
If not FindSymbols(sym,'bank') then
Begin
Wait(RandomRange(800,1000));
If not FindSymbols(sym,'bank') then
Failsafe ('Random');
End;
End;

is that the concept?

Footy
10-05-2012, 02:00 PM
Wait, What? This tutorial is for finding objects on the ms. What are you trying to do?

Benny
10-05-2012, 02:04 PM
Wait, What? This tutorial is for finding objects on the ms. What are you trying to do?

ah.... right I've buggered up then..

Well I am writing something for the Competition at the moment and thought a TPA on bank symbol finding.. ergh..

litoris
10-05-2012, 02:07 PM
High will count how many values are in the variable, and return with the final count
High will count how many items there are(not necessarily values, as in string arrays) in an array. You should talk a bit about arrays before talking about TPAs, show them what an integer array looks like etc.
You should also talk about the "spiral" version of the color finding functions, the regular version is almost never used because it is always better to prioritize results close to the character in the game.
I'd say scrap the tempCTS part, just set it as 1 after you are done finding colors.
You should put more details about the MarkTime and TimeFromMark functions, I'd never understand what they actually did if I learned it from this tutorial. At least say that time since the mark was set(in miliseconds) is stored into the variable, and you can read it any time.

Nice tutorial other than that, should at least remove the mist in people's heads about TPAs, because they aren't that complex.
@Benny, that is a correct usage of a TPA, points where the bank symbol is found will be in the TPA and you can just click on the closest one.

riwu
10-05-2012, 02:08 PM
Wait, What? This tutorial is for finding objects on the ms. What are you trying to do?
FindSymbols returns a TPA and therefore it is TPA related.


Procedure RandomCheck;
var
Sym: TpointArray;
Begin
ChatCheck;
If not FindSymbols(sym,'bank') then
Begin
Wait(RandomRange(800,1000));
If not FindSymbols(sym,'bank') then
Failsafe ('Random');
End;
End;

is that the concept?
You are right, though your failsafe structure isn't optimal (could've use a loop wait etc). And if you are just checking for the presence of a single symbol, why don't just use FindSymbol (without the 's')? FindSymbols can be used to check how many symbols are found. i.e. writeln(Length(sym)). It can also be used to sort the symbol coordinates according their relative position etc and click on the one you desire.

Footy
10-05-2012, 02:19 PM
Thanks litoris, I'll add some of this after school. And I have a question. For findcolorsspiraltolerance what do the x and y parameters do?

riwu
10-05-2012, 02:23 PM
Thanks litoris, I'll add some of this after school. And I have a question. For findcolorsspiraltolerance what do the x and y parameters do?
It will search starting from the x,y coordinates you input (most commonly MSCX,MSCY), hence points nearer to it will be stored first, although there isn't much point sorting it out now if you are splitting it (which messes out the order again)

Footy
10-05-2012, 02:36 PM
Alright, that makes sense. I'll add it to the tutorial later. Thanks.

E: Added most of your suggestions. I didn't do the function one since I dont have that much time at the moment. I'll try to do it during the weekend. And @Ping, when using CTS2, you can use any of those functions, you don't have to use CTS2 for TPA's, which is why I left that in.

zertunami
10-13-2012, 06:08 AM
I love you, soooooooo much, thanks for the tut!

P1ng
10-13-2012, 06:15 AM
Alright, that makes sense. I'll add it to the tutorial later. Thanks.

E: Added most of your suggestions. I didn't do the function one since I dont have that much time at the moment. I'll try to do it during the weekend. And @Ping, when using CTS2, you can use any of those functions, you don't have to use CTS2 for TPA's, which is why I left that in.

I don't recall making any mention of CTS2. What I said was you need the 'plural' functions so that their results are stored as a TPA.

FindColorTolerance - Will find 1 point with that colour. = TPoint
FindColorsTolerance - Will find all points with that colour. = TPointArray

Footy
10-15-2012, 08:44 PM
Sorry, I misunderstood your question. I'll add it now. :)

mounty
11-24-2012, 09:02 PM
Loved the tutorial. Good explanation and perfect amount of depth for getting people going. CTS and ACA are amazing tools! Think im gonna be using them all the time. The breakdown of the TPA was also very clear.

Great job! :)

King
12-04-2012, 02:49 AM
Love it, thankyou!

l6bustank
12-06-2012, 09:38 AM
Nice tutorial! Will post s script that uses it after the weekend :D

Slashed
12-06-2012, 09:37 PM
Has helped me a lot, thank you!!

Ian
01-26-2013, 10:00 PM
I think I found a possible problem with Footy's FindImp procedure.

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS, i, l, r, counter:integer;
ImpTPA:TPointArray;
begin
tmpCTS := GetToleranceSpeed;

SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(0.08, 0.95); //Ive plugged in my hue and sat mods. Plug in your own here.

FindColorsTolerance(ImpTPA, 1911631, MSX1, MSY1, MSX2, MSY2, 8);

SetColorToleranceSpeed(tmpCTS); //RIGHT AFTER we find our colors, we
SetToleranceSpeed2Modifiers(0.02, 0.02); //Change the CTS back.

L := High(ImpTPA)
marktime(counter);
for i := 0 to L do
begin
r := random(L);
wait(randomrange(60, 200));
mmouse(ImpTPA[r].x, ImpTPA[r].y, 2, 2);
if waituptext('mp', 300) then
Break;
if timefrommark(counter) > 3000 then
begin
writeln('We failed to find the Imp!');
Terminatescript;
end;
end;
writeln('We found the imp!');
clickmouse2(mouse_right);



Should be changed to something like

program new;
{$i srl/srl.simba}

Procedure FindImp;
var
tmpCTS, i, l, r, counter:integer;
ImpTPA:TPointArray;
begin
tmpCTS := GetToleranceSpeed;

SetColorToleranceSpeed(2);
SetToleranceSpeed2Modifiers(0.08, 0.95); //Ive plugged in my hue and sat mods. Plug in your own here.

FindColorsTolerance(ImpTPA, 1911631, MSX1, MSY1, MSX2, MSY2, 8);

SetColorToleranceSpeed(tmpCTS); //RIGHT AFTER we find our colors, we
SetToleranceSpeed2Modifiers(0.02, 0.02); //Change the CTS back.

L := High(ImpTPA)
if (L < 1) then // ********I added this part so that if no color is found it will give stop********
begin
writeln('We failed to find the Imp!');
Terminatescript;
end;
marktime(counter);
for i := 0 to L do
begin
r := random(L);
wait(randomrange(60, 200));
mmouse(ImpTPA[r].x, ImpTPA[r].y, 2, 2);
if waituptext('mp', 300) then
Break;
if timefrommark(counter) > 3000 then
begin
writeln('We failed to find the Imp!');
Terminatescript;
end;
end;
writeln('We found the imp!');
clickmouse2(mouse_right);



His version will think it found the imp and then click if no Imp-color is found. My edit makes it stop if no imp-color is found.

If I'm correct maybe an admin could adjust his post?

Thanks :)

Zyt3x
02-01-2013, 02:25 PM
The examples are only to show how to use ColorToleranceSpeed. Adding failsafes should be learned before getting to this level anyways, so I don't really think there's a point in adding that part.

It would also make more sense to edit the FindColorsTolerance(); into "if not FindColorTolerance() then Exit;" instead

Ian
02-15-2013, 12:34 AM
The examples are only to show how to use ColorToleranceSpeed. Adding failsafes should be learned before getting to this level anyways, so I don't really think there's a point in adding that part.

It would also make more sense to edit the FindColorsTolerance(); into "if not FindColorTolerance() then Exit;" instead

Ok, I just thought that if someone inexperienced tried this that they might think they were doing something else wrong :)

Xeronate
03-01-2013, 07:15 AM
I've been trying to find a super basic TPA tutorial because everyone keeps telling me its better than findobj! I have to go to bed for the night, but what I've read so far has been excellent. Thanks!

Sjoe
03-01-2013, 07:40 AM
I've been trying to find a super basic TPA tutorial because everyone keeps telling me its better than findobj! I have to go to bed for the night, but what I've read so far has been excellent. Thanks!

this one is easy to understand

http://villavu.com/forum/showthread.php?t=33111

And check WizzyPlugins tutorial for what TPa's / ATPa's could do!