PDA

View Full Version : Map Walking - The Basics to the Advanced



ZephyrsFury
10-15-2007, 06:58 AM
Map Walking
by ZephyrsFury

Contents

RadialWalk/RadialRoadWalk (http://www.villavu.com/forum/showthread.php?t=19162?#post241494)
Symbol Finding (http://www.villavu.com/forum/showthread.php?t=19162?#post241497)
Colour Clicking (http://www.villavu.com/forum/showthread.php?t=19162?#post241498)
DTMs and DDTMs (http://www.villavu.com/forum/showthread.php?t=19162?#post241499)
Mouse and Flag (http://www.villavu.com/forum/showthread.php?t=19162?#post241500)
Failsafes (http://www.villavu.com/forum/showthread.php?t=19162?#post241504)
Conclusion - Recommended Reads (http://www.villavu.com/forum/showthread.php?t=19162?#post241524)

Since I’m leaving for the next couple of months I won’t be of much help here so I decided I would make up for it with this large tutorial. It’s about map walking (my speciality :p) and is extremely detailed. It covers everything from RadialWalking to colour clicking, then onto DTMs and DDTMs. There’s also a bit of failsafes as that is the key to success when you are map walking in RS. For anyone that feels like a light read or if you can’t be bothered learning then leave now :p. Otherwise enjoy reading this 5646 word tutorial.... :p

To create a successful and flawless script in Runescape, you need several things:

You must be able to script (the basics – variables, constants, procedures, etc).
Must utilise SRL well.
Failsafes
Must know how to map walk.


Now I know there is a lot more that I could add to my list but since this tutorial is about map walking, I’ll let you read other tuts, look at scripts and talk to experienced scripters to find out for yourself. :p.

As a mentioned above, map walking in RS is essential to create a good script. Actually I wouldn’t say a power chopper requires it but if you want to include DeathWalk, banking, walking between trees, etc. then it is needed. Basically, if you haven’t figured it out already, map walking is the name given to walking in RS between places using SCAR.

In this tutorial I will go through the basics of map walking (RadialWalk, RadialRoadWalk, symbol clicking, colour finding) as well as some other more advanced methods (DDTMs and DTMs). I’ll also be going through the most common failsafes for walking as well as some of my own. I warn you though, this tutorial is extremely long and in depth. I’ll do my best to explain everything but I’m not a teacher – only a 15 year old to whom English was a second language.

Throughout this tutorial, I’ll be using examples from my Rune Mysteries Runner which obviously requires lots and lots of walking (Between and within 3 different cities and places). I’ve also attached a list of several good tutorials to do with the topics discussed here as well as some tool that might help you with map walking.

Now onto the first part – RadialWalk and RadialRoadWalk.

ZephyrsFury
10-15-2007, 07:00 AM
RadialWalk and RadialRoadWalk

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162)

Now these functions are the most commonly used and (IMO) one of the best. Basically, it searches for a colour, outside in, towards the centre of the minimap and if it finds the colour, it clicks. Simple, ingenious and efficient I say. :D. Before I explain how to use it I’ll explain how it works. I know what you’re saying... “Theory...! I CBFed with theory... just get on with it... I wanna make my uber flawless dragon slayer quest runner already... :rolleyes: :rolleyes:”. Well it makes sense if you want to do something practical then you need to know the theory. So here it goes...

RadialWalk basically combines FindColor with a bit of trigonometry and geometry. It requires you to specify two angles and a radius (imagine a piece of pizza, the tip of the piece is the minimap centre and the crust is the radius). It will search between those two angles starting from the radius and move inwards towards the minimap centre searching for the colour pixel-by-pixel. If it finds the colour it clicks. Like I said, simple. :)

Now there’s the theory behind RW in a nutshell. On to the practical stuff like I promised:


function RadialWalk(TheColor: Integer; StartRadial, EndRadial: Integer; Radius: Integer; Xmod, Ymod: Integer): Boolean;


An explanation of the parameters:

TheColor: The colour you are looking for. ie the colour it will click.
StartRadial: The first angle where the function will start looking from. (Usually from 0 to 360). 0 is north, 90 east, 180 south, 270 west, 360 north again.
EndRadial: Same with StartRadial except this is the angle where it stops searching. It can be greater than or less than the start angle. If it’s larger than then it will search clockwise. If it’s less than it will search anti-clockwise (think about it logically ;) ).
Radius: The distance in pixels from the minimap centre it will start searching from.
Xmod: The distance on the X axis the mouse will move every time the function tries to click but the flag doesn’t appear. (MouseFindNoFlag). So if it finds the colour and clicks but the flag doesn’t appear (can’t reach it), it will move the mouse Xmod units along the X axis until the flag appears. (negative is left, postive is right).
Ymod: Same with Xmod except along the Y axis. (negative for up, positive for down).


http://img81.imageshack.us/img81/8105/circle1rx4.bmp

Ok so now an example:


RadialWalk(MyRoadColour, 70, 100, 65, -1, 0);


If you look at that example, you can see it will try and find the RoadColour (a variable with a colour stored in it) in a sector of the minimap that has a radius of 65 pixels, which starts at 70 degrees and finishes at 100 degrees (approximately east). If it can’t place the flag then it will move one pixel west (-1) and try again.

Here’s a screenie of what the script will do when you call RadialWalk with the above parameters:

http://img141.imageshack.us/img141/8194/rwexample1wg7.bmp

I mentioned above that RadialWalk searches for the colour outwards in . So it will click the pixel that is furthest away from the minimap centre. So choose your radius well. I sometimes have a problem when the radius is too big because the flag appear off the minimap or close to it so when the character begins to walk, it might disappear making the script think the flag has been reach and continues on with the script.

To get the best start and end angles and the best radius I’d recommend that you use Yakman’s Radial Walking Aid which is invaluable to me when I use RadialWalk. You used to be able to find this in then SRL folder but it seems to have disappeared so I’ve uploaded it below.

Now that we’ve discussed RadialWalk, RadialRoadWalk should be easy. Basically it follows the same principle except RRW is designed for walking using the road colour (obviously). Basically if you call RadialRoadWalk you should use RoadColor as TheColor. This is because RRW dynamically updates the road colour as it goes along so there’s no chance of it getting stuck because the colour changed by a few tolerance numbers.

So the same example above except with RRW:


RadialRoadWalk(RoadColor, 70, 100, 65, -1, 0);


The parameters at the same. The only major difference is the TheColor is usually RoadColor;

That’s pretty much all for RadialWalk and RadialRoadWalk. For more information see the Recommended Tutorials list at the bottom. Now onto the next section – Symbol Clicking.

ZephyrsFury
10-15-2007, 07:01 AM
Symbol Clicking

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162?#post241493)

Now many experienced scripters reading this tutorial might disagree with me using symbols as a method of walking. The position of symbols are quite dynamic and they are easily missed if there’s a couple of people standing on top of them. But despite the disadvantages, they are quite useful; not exactly for getting the place to click but as a way of telling the script when to stop clicking. “Huh?” I hear you say? Well take this example. We are walking along a road in the middle of nowhere and we have to tell the script when to stop. We could script a repeat loop and make it repeat until it finds the symbol. Before we do that I’ll talk about the function itself.

Once again theory time. :p. FindSymbol is much more simple to understand than RW or RRW. Basically all it does is it searches for a preloaded bitmap of the symbol on the minimap. If it finds it then it checks to see if the accuracy returned by the bitmap finding function is greater or equal to SymbolAccuracy (see below). If it is then it return true and stores the coordinates of the bitmap.

function FindSymbol(var rx, ry: Integer; Name: String): Boolean;

So a description of the parameters:


rx: This is the x variable in which the function stores the x coordinates of the symbol if found.
ry: Same as rx except it has the y coordinates of the symbol stored in it.
Name: The name of the symbol. There’s a list of valid symbol names in Symbol.scar. Its below if you want to save time.



{************************************************* ******************************
Valid Arguments are:
- bank - mining site, mining spot - transportation
- magic shop - water source, water - furnace
- anvil - rare trees, tree - fishing spot, fish
- cookery, cook - quest - mill
- weave - pottery, pot - spinning wheel, spin
- guide - shop, store - shield
- altar - arrow - bar
- dungeon - churn - house
- Axe Shop - Cookery Shop - Windmill
- minigame - fur trader - Archery Shop
- staff Shop - clothes shop - farming spot
- apothecary - Sword shop - platebody shop
- scimitar shop - gem stall - silk stall
- plateskirt shop - agility - training dummy
- food shop - fishing shop/fish store - Jewelery
- Crafing shop - portal (to player owned houses) - Makeover Mage
- Mace Shop - Hair Dresser - Mining Shop
- silver stall - spice stall - farming shop
- slayer master - herbalist - candle shop
- Saw Mill - Kebab shop - Short cut
- hunter store - hunter training - Sandpit
************************************************** *****************************}

Now for an example of what I mean.


repeat
RadialWalk(RoadColour, 70, 100, 65, -1, 0);
until(FindSymbol(x, y, 'anvil');


The above example will RW until it finds the anvil symbol. I know I’ll get killed by people for having no failsafes but I’ve dedicated a whole section to it below.

Another (more common) way of using FindSymbol although not as much for map walking is shown below:


if (FindSymbol(x, y, 'mining site')) then
begin
Mouse(x, y, 5, 5, True);
Writeln('Found the mining symbol');
end else Writeln('Could not find mining symbol');


But you may still ask me what if the symbol is covered and the symbol cannot be found even though it is there. Well there is an extended variable called SymbolAccuracy. As I explained above, when the bitmap finding function finds a close match to the preloaded bitmap of the symbol, its stores the accuracy into a variable. FindSymbol then checks to see if the accuracy is greater or equal to SymbolAccuracy. If it is then FindSymbol returns true (it found the symbol). Now when we SetupSRL at the begin of the script, SymbolAccuracy is set to 0.8 or 80% as I like to use for explanation purposes. If FindSymbol finds a bitmap with an accuracy of 0.7 (70%) for instance, it returns false even though it might have found the correct symbol. So by manually seting SymbolAccuracy to 0.5 (50%), it could improve the chances of finding the symbol (notice how could is bolded).
For example:


SymbolAccuracy := 0.5;
If (FindSymbol(x, y, 'anvil')) then
Mouse(x, y, 5, 5, True);
SymbolAccuracy := 0.8; //Remember to change it back to 0.8 when you are done.


A real-life example of this (not really but it’s from my RM Runner) is below:

repeat
if (not(WalkBesideWall('n'))) then
begin
WriteDebug('Using mouse clicks to walk along wall');
Mouse(RandomRange(MMCX - 5, MMCX + 5), RandomRange(30, 40), 1, 1, true);
AntiBanProc;
ZephFlag(15);
end else
WriteDebug('Using WalkBesideWall');
c := c + 1;
until(FindSymbol(Sx, Sy, 'spin')) or (c >= 20);


Yes it might look a bit strange but if you look closely, I made the script WalkBesideWall (a function I used for walking) until it finds the spinning wheel symbol or until it’s walked 20 times.

I’ve also attached some links below of some good symbol finding tuts. Next section... boy this is getting long. 5 pages in MS Word, almost 2000 words so far. ;)

ZephyrsFury
10-15-2007, 07:04 AM
Clicking Colours

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162?#post241493)

Now I can’t really explain much here. Basically, as the name suggests, this section is about using a colour on the minimap to click and hopefully walk somewhere. Pretty simple?... It should be. The only function(s) you would need are FindColor, FindColorTolerance and FindColorSpiralTolerance. There are more which you could use to get more accurate points but for now I’ll explain these.

I’m not going to explain the parameters for these functions because you should already know them. You should also already know the difference between the 3 functions above. In a nutshell – FindColor finds a colour and stores the coordinates with NO tolerance. FindColorTolerance is the same as FindColor except you can specify a tolerance so the colour doesn’t have to be exact. FindColorSpiralTolerance is the same as FindColorTolerance except it searches for the colour starting from the points stored in your variables.

By using these functions, you can get the coords of the first colour point found. (FindColor and FindColorTolerance search from left to right, up to down. FindColorSpiralTolerance searches from the points stored in your x, y variables). Now that you have the coordinates, you can just use a quick call to Mouse to make it click. Simple as that.

Examples:

if (FindColor(x, y, DoorColour, MMX1, MMY1, MMX2, MMY2)) then
Mouse(x, y, 0, 0, True);



if (FindColorTolerance(x, y, 2917530, MMX1, MMY1, MMX2, MMY2, 10)) then
Mouse(x, y, 0, 0, True);



x := MMCX;
y := MMCY;
if (FindColorSpiralTolerance(x, y, LadderColour, MMX1, MMY1, MMX2, MMY2, 5)) then
Mouse(x, y, 0, 0, True);


Notice in the last example I set x and y to the coords of the minimap centre. When I call FindColorSpiralTolerance, it will start searching from the coords in x and y (MMCX, MMCY) thus finding the closest ladder first. It’s very useful for finding colours close to you (on the mainscreen like trees, mining rock, etc.).

If you look at this screenie here:

http://img139.imageshack.us/img139/3574/colourfinding1vg7.bmp

If you use FindColorTolerance for the red drop dot colour, the one on the left would be found first. If you used FindColorSpiralTolerance however, the one to the right would be found first (provided that x and y have the minimap centre stored in them).

Another way of using colours to map walk is similar to the way I used symbols. You could use a repeat loop that repeats until it find a colour. ie:


repeat
RadialWalk(RoadColor, 70, 100, 65, -1, 0);
until(FindColor(x, y, 255, MMX1, MMY1, MMCx, MMY2));


This method is useful for walking to a part of the map where there are no symbols or suitable DTMs for detecting when to stop. In my RM Runner I use a method similar to this when I'm walking west towards Fally. I repeat my RadialWalk until the script find a white colour that symbolises the wall that leads up to Barbarian Village.

Although I emphasized this section on the three functions above, I think I should mention a couple of others:


FindColorsTolerance – notice the ‘s’ after Color. Basically it works in the same way as FindColorTolerance except it stores all coordinates of all points where the colour is found into a TPointArray. One use for this would be to find the average of all the x values and the y values thus effectively “clicking in the middle of the points”. Here’s a little function I quickly made (not sure if it will work):


function FindMiddle(var cx, cy: Integer; Colour, x1, y1, x2, y2, Tol: Integer): Boolean;
var
Temp: TPointArray;
Sum: TPoint;
i, Length: Integer;
begin
Sum.x := 0; Sum.y := 0;
FindColorsTolerance(Temp, Colour, x1, y1, x2, y2, Tol);
Length := GetArrayLength(Temp);
for i := 0 to Length - 1 do
begin
Sum.x := Sum.x + Temp[i].x;
Sum.y := Sum.y + Temp[i].y;
end;
cx := Round(Sum.x / Length);
cy := Round(Sum.y / Length);
Result := (cx > 0) and (cy > 0);
end;


To use it you would do something like:


if (FindMiddle(x, y, DoorColour, MMX1, MMY1, MMX2, MMY2, 5)) then
Mouse(x, y, 0, 0, True);

Here’s one of my personal function I’ve made for my RM Runner. It’s called GetDoorCoords and it basically stores the coords all doors on the minimap. It only stores one point per door and ignores drop dots.


function GetDoorCoords(var Points: TPointArray): Boolean;
var
i, j, k, m, Tempx, Tempy: Integer;
DoorColours1, DoorColours2: TPointArray;
begin
if (DoorColour = 0) then
DoorColour := FindDoorColour;
if (DoorColour = 0) then Exit;
FindColorsTolerance(DoorColours1, DoorColour, MMX1, MMY1, MMX2, MMY2, 0);
WriteDebug('Got ' + IntToStr(GetArrayLength(DoorColours1)) + ' DoorColour pixels');
i := 0;
for j := 0 to GetArrayLength(DoorColours1) - 1 do
begin
if (FindColor(Tempx, Tempy, DoorColour, DoorColours1[j].x - 1, DoorColours1[j].y - 1,
DoorColours1[j].x + 1, DoorColours1[j].y - 1)) or
(FindColor(Tempx, Tempy, DoorColour, DoorColours1[j].x - 1, DoorColours1[j].y,
DoorColours1[j].x - 1, DoorColours1[j].y)) or
(FindColor(Tempx, Tempy, DoorColour, DoorColours1[j].x - 1, DoorColours1[j].y + 1,
DoorColours1[j].x + 1, DoorColours1[j].y + 1)) or
(FindColor(Tempx, Tempy, DoorColour, DoorColours1[j].x + 1, DoorColours1[j].y,
DoorColours1[j].x + 1, DoorColours1[j].y)) then
begin
SetArrayLength(DoorColours2, i + 1);
DoorColours2[i].x := DoorColours1[j].x;
DoorColours2[i].y := DoorColours1[j].y;
i := i + 1;
end;
end;
WriteDebug('Got ' + IntToStr(GetArrayLength(DoorColours2)) + ' Door points');
i := 0;
m := 0;
repeat
for k := m to GetArrayLength(DoorColours2) - 2 do
begin
if (Distance(DoorColours2[k].x, DoorColours2[k].y, DoorColours2[k + 1].x,
DoorColours2[k + 1].y) > 8) or (k + 1 = GetArrayLength(DoorColours2) - 1) then
begin
SetArrayLength(Points, i + 1);
Points[i] := DoorColours2[k];
i := i + 1;
Break;
end;
end;
m := k + 1;
until(m >= GetArrayLength(DoorColours2) - 1);
WriteDebug('Got ' + IntToStr(GetArrayLength(Points)) + ' Doors');
if (GetArrayLength(Points) > 0) then
Result := True;
end;


Now that you have all the doors you can make it click in the middle of them using my function above.


That’s it for Colour Clicking. Never thought I would be able to expand FindColor into 2 and a half pages but then again I never thought I would feel like explaining so much. :p. So now for the more advanced sections – DDTM’s and DTM’s. :D.

ZephyrsFury
10-15-2007, 07:05 AM
Deformable Template Models – Dynamic and Static

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162?#post241493)

Deformable Template Models or DTMs for short is an advanced but simple (huh?) method of walking. It can also be used for other things as well (I’ll explains these briefly later). Basically there are two types. Static DTMs are old, simple and easy to make and use. Dynamic DTMs or DDTMs are a bit harder to make and use (just a bit but are as simple as normal DTMs when you get the hang of it). I’ll explain the basics behind both types of DTMs first.

I don’t really know how to explain DTMs properly so I might sound a bit confusing. I’ll try my best though. A DTM is a main point and a set of sub points. The sub points (and the main point if required) is given a specific colour and coordinates. When you have one or more sub points and the main point, a shape is formed. When you use a function such as FindDTM, SCAR searches a certain area for that particular “shape” with the matching colours. If it is found then it returns true and saves the coords of the main point.

Now lets talk about static DTMs first. These are as simple as DTMs get. They are made using SCAR’s DTM Editor (Tools > DTM Editor). See YoHoJo or Fawki’s DTM tuts below for info on how to make them. Basically you just click a point, set the colours, tolerances (there’s more stuff but they aren’t really important unless you know how to use them). When you are done with the points, go to file in the DTM Editor and click DTM to Text. That should print a little bit of coding in the debug. This coding is the DTM. Well it’s a string that is converted into the DTM which is stored as an integer by SCAR.

Here’s what the DTM Editor looks like:
http://img141.imageshack.us/img141/1356/ddtms1vl7.bmp

The red lines are the sub points. They all end in the middle which is the main point. The edit boxes, etc. on the right allow you to set the colours, tolerances and coordinates of each of the points.

Example of a DTM:


BankDTM := DTMFromString('78DA630C666060486600032608C5F0F52B0 38' +
'311906684E170FC6A4080319A0873E2116A18709803004A11 0B71');


DTMFromString converts the string of numbers and letters into a DTM which is returned as an integer (DTMs are integers). That means that from the above example, BankDTM must be declared as an integer. ie:


var
BankDTM: Integer;


Now that you have the DTM loaded, you need a way of using it. There are several functions for this. I’ll emphasize on one of them (the most most useful for walking) and another more common one. The one that is used for walking is FindDTMRotated.


function FindDTMRotated(DTM: Integer; var x, y: Integer; x1, y1, x2, y2: Integer; StartAngle, EndAngle, AngleStep: Extended; var Angle: Extended): Boolean;


Yes I know its long but most of it should be familiar. Here’s the parameters description:


DTM: The DTM that it is searching for. (BankDTM if you are using the above example).
x: The variable in which the x coordinates of the DTM are stored if found.
y: Similar to x, just the y variable instead.
x1, y1, x2, y2: The bounds of the area it searches in (Same as FindColor).
StartAngle: The angle in radians where it starts rotating the DTM from. Remember 0 rad = 0 degrees, Pi = 180 degrees, 2 * Pi = 360 degrees. I usually make this a negative.
EndAngle: The max angle that it rotates the DTM to (also in radians). This is usually a positive angle.
AngleStep: How much the function increments the angle by every time it searches. The smaller the number, the more times it must increment the angle in order to reach the EndAngle thus the more times it must search for the DTM therefore the more accurate but also the more lag.
Angle: A variable in which the angle at which the DTM was found is stored. Pretty much useless but is required for the function to work. :rolleyes:.


The reason this function is useful for walking is because the minimap isn’t always perfect north, that means that the DTM that you created will not always work. This function rotates the DTM and searches thus making sure your DTM is found. You might also ask why StartAngle is negative and EndAngle is postive. It’s because the minimap angle varies in both the negative (anti-clockwise) and the postive (clockwise) directions. A vertical line can look like this:

http://img86.imageshack.us/img86/6307/line1vc8.bmp

and like this:

http://img100.imageshack.us/img100/5521/line2kp9.bmp

so if you DTM was a line, by making the StartAngle negative, it allows for shifts in both directions. Otherwise if it was 0 for example, it would only rotate the DTM clockwise and decrease your chance of finding it.

http://img86.imageshack.us/img86/4807/line3hr8.bmp

Another way of finding DTMs is by using FindDTM. This method is much faster (it only searches for the DTM once) but does not rotate the DTM. That means it is useful for places where the DTM does not rotate at all.... hmm... THE INVENTORY. Yes, inventory items are the best place to use DTMs. Not only do they not rotate, but the actually images do not change. Further still, all inventory items have a black line along the edges. This black line is generic for all items. To make a DTM of an inventory item you would just put all your sub points along the black outline.

So a brief description of FindDTM:


function FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;



DTM: The DTM that it is searching for. (BankDTM if you are using the above example).
x: The variable in which the x coordinates of the DTM are stored if found.
y: Similar to x, just the y variable instead.
x1, y1, x2, y2: The bounds of the area it searches in (Same as FindColor).


Much simpler ey? Yes it is but it’s not useful for the minimap unless it’s perfect north all the time.

Now that we’ve gone through static DTMs, it’s time for the hard stuff. Let’s go dynamic!!! :D. Anyway... a DDTM is the same as a normal DTM except it can be created during the runtime of a script. Now you might ask why we would bother when DTM Editor can easily create a DTM for us using random combinations of numbers and letters. Well... since DDTMs are created when a script is running, we can create it using colours, points and tolerances unique to that particular time when the script is running. An example of this would be using SRL’s FindRoadColor to get the colour of the road at that instance in time then use that colour as the colour of one or more of the sub points/main points. Another example would be to variable as the tolerance then change the tolerance variable however you like before you create the DTM. This is why it is dynamic - because you can change the information stored in the points every time the DTM is created.

Now the code for creating the DDTM is a bit complicated. I suggest you read Fawki’s tut (link below) on how to create one. I’ll show some examples and hopefully you’ll understand:


procedure SetRoadDTM(Time: Integer);
var
RMainPoint: TDTMPointDef; //The main point
DTMRSubPoints: Array of TDTMPointsDef; //The subpoints
RTDTM: TDTM; //The DDTM type
begin
if (Time = 1) then
SetArrayLength(DTMRSubPoints, 6)
else
SetArrayLength(DTMRSubPoints, 5);

RMainPoint.x := 57;
RMainPoint.y := 66;
RMainPoint.areasize := 1;
RMainPoint.areashape := 0;
RMainPoint.color := RoadColour;
RMainPoint.tolerance := 15;

DTMRSubPoints[0].x := 58;
DTMRSubPoints[0].y := 85;
DTMRSubPoints[0].areasize := 1;
DTMRSubPoints[0].areashape := 0;
DTMRSubPoints[0].color := RoadColour;
DTMRSubPoints[0].tolerance := 15;

DTMRSubPoints[1].x := 48;
DTMRSubPoints[1].y := 107
DTMRSubPoints[1].areasize := 1;
DTMRSubPoints[1].areashape := 0;
DTMRSubPoints[1].color := RoadColour;
DTMRSubPoints[1].tolerance := 15;

DTMRSubPoints[2].x := 66;
DTMRSubPoints[2].y := 64;
DTMRSubPoints[2].areasize := 1;
DTMRSubPoints[2].areashape := 0;
DTMRSubPoints[2].color := RoadColour;
DTMRSubPoints[2].tolerance := 15;

DTMRSubPoints[3].x := 97;
DTMRSubPoints[3].y := 72;
DTMRSubPoints[3].areasize := 1;
DTMRSubPoints[3].areashape := 0;
DTMRSubPoints[3].color := RoadColour;
DTMRSubPoints[3].tolerance := 15;

DTMRSubPoints[4].x := 28;
DTMRSubPoints[4].y := 55;
DTMRSubPoints[4].areasize := 2;
DTMRSubPoints[4].areashape := 0;
DTMRSubPoints[4].color := 15461350;
DTMRSubPoints[4].tolerance := 20;

if (Time = 1) then
begin
DTMRSubPoints[5].x := 30;
DTMRSubPoints[5].y := 90;
DTMRSubPoints[5].areasize := 2;
DTMRSubPoints[5].areashape := 0;
DTMRSubPoints[5].color := 15461350;
DTMRSubPoints[5].tolerance := 20;
end;

RTDTM.MainPoint := RMainPoint;
RTDTM.SubPoints := DTMRSubPoints;
RoadDTM := AddDTM(RTDTM);
end;


Here’s the description of the variables in the TDTMPointDef type:

x: The x coordinate of the point.
y: The y coordinate of the point.
AreaSize: The size of the area around the point that the DTM includes (The bigger the area the more chance the point will be found but also the more lag). I recommend you leave it as 1 for now.
AreaShape: The shape of the area. I’m not sure about this one but 0 is rectangle.
Color: The colour of the point. It can be a just a colour or a variable with the colour stored in it.
Tolerance: The tolerance of the colour.


Notice how the variables in the TDTMPointDef type are similar (in fact identical) to the stuff you see in the DTM Editor. This is because when created, DDTMs are the same as DTMs. You use them the same way; you can you the functions I talked about above to find them. Also notice this part:


if (Time = 1) then
begin
DTMRSubPoints[5].x := 30;
DTMRSubPoints[5].y := 90;
DTMRSubPoints[5].areasize := 2;
DTMRSubPoints[5].areashape := 0;
DTMRSubPoints[5].color := 15461350;
DTMRSubPoints[5].tolerance := 20;
end;


This is another example by what I mean by dynamic. I can make the DTM have different number of sub points when I create it. This example was from my RM Runner. The reason I have the number of points different every time is because, depending on the direction you are walking from, one of the points might not be visible. Thus the last sub point is only incorporated into the DTM when Time = 1.

The last “paragraph” in the example is also very important:

RTDTM.MainPoint := RMainPoint;
RTDTM.SubPoints := DTMRSubPoints;
RoadDTM := AddDTM(RTDTM);


This is required to make the actual DTM. The first line tells SCAR that RMainPoint is RTDTM’s main point. The second line tells SCAR that DTMRSubPoints are RTDTM’s sub points. Then the last line makes the DTM (using AddDTM) and stores it in RoadDTM (an integer like above in the BankDTM example). Now that the DTM is created, just use FindDTM or FindDTMRotated to find it just like a normal one. ;)

I hope I explained myself clear enough. DTMs are really hard to explain lol :p. Now onto the next section – Mouse and Flag.

ZephyrsFury
10-15-2007, 07:06 AM
Mouse, Flag and MouseFlag

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162?#post241493)

Ok since I have a little bit of time today I'm going to take this opportunity to add a new section to this tutorial. I should have added it before but I guess it would be already familiar to intermediate level scripters.

This section is mainly on Flag and FFlag, an SRL procedure that (when called) waits until the red flag on the minimap disappears or is within a set distance from the minimap centre. There are really several versions of Flag but I'll only explain a couple.

procedure MouseFindNoFlag(ax, ay, xmod, ymod: Integer);I'll explain Flag first of all because it is the simplest one with no parameters needed:


procedure Flag;


The way you use this is by calling Flag after you've clicked somewhere on the minimap (by using symbols, colours or DTMs). When called, Flag check will wait until the colour 255 disappears (until the flag disappears). This means your character will stop for a couple of milliseconds before moving on thus making your character seem a bit suspicious I suppose. Thats why our wonderful SRL Devs came up with FFlag:


procedure FFlag(Distance: Integer);


Distance: The procedure will wait until the flag is within the distance specified. This means the script will continue before the character stops completely thus making it seem more human.

Although FFlag does seem quite good there is a problem with it as well as Flag where the Flag doesn't appear after a click (the click was in an area that was unclickable or the flag appeared offscreen). If this occurs, FFlag or Flag can't find the flag colour and continues thus stuffing up your main loop.

There are several ways to solve this but the most common would be to just wait a second or two before calling FFlag. This allows the Flag to appear on screen as the character starts to walk towards it:


if (FindColor(x, y, RoadColour, MMX1, MMY1, MMX2, MMY2)) then
begin
Mouse(x, y, 5, 5, True);
Wait(2000); //Waits 2 seconds for the flag to appear on screen
FFlag(10);
end;


There is also another way to solve this problem but I'll explain that later.

Now that I've explained Flag and the like, I think I might explain to you another method of map walking. It is the most unreliable method and the most suspisious as well. I like to call it "Walking Blind" or walking using coordinates. What do I mean by this? I mean using Mouse and clicking the same coordinate every time. The reason why this is unreliable is because the minimap shifts and changes the camera angle every time RS is played. Thus your character can get lost quite easily (unless of course you have lots of failsafes). Although I (as will many other scripters) frown upon it, I thought I might cover it a bit I do (I admit) use it from time to time.

This method uses the procedure Mouse or something similar to that. The only thing useful about this method is several procedures in the Mouse family that are designed for map walking:


procedure MouseFlag(cx, cy, rx, ry: Integer);


This procedure combines Mouse and Flag to form.. well MouseFlag. The paramters are the same as normal Mouse except it always left clicks.


procedure MouseFindNoFlag(ax, ay, xmod, ymod: Integer);


This procedure is a little bit different. Remember how I said there are several methods to solve the problem with the flag appearing offscreen? Well this is one of the other solutions. It is basically the same as MouseFlag except if the flag doesn't appear it will keep trying and adding the x and y mod until it appears.

After all this Flag business I would like you to note one small (and quite trival) problem. Remember how I said FFlag would wait until the colour 255 appears within a certain distance from the minimap centre? If you hadn't noticed the colour 255 is the top of the flag not the stick thing to where the character is walking to. That means if you're approaching the flag from the south, FFlag will think you're further away from the flag that you really are and vice versa for approaching from the north. Thats why I'll share with you my version of FFlag:


procedure ZephFlag(Dist: Integer);
var
Dx, Dy, m, T: Integer;
begin
MarkTime(T);
repeat
if (FindColor(Dx, Dy, 255, MMX1, MMY1, MMX2, MMY2)) then
begin
m := GetColor(317, 172);
if (Distance(Dx, Dy + 14, MMCX, MMCY) >= Dist) then
begin
Wait(100);
if (TimeFromMark(T) > 15000) then
begin
if (GetColor(317, 172) = m) then
begin
if (FindColor(Dx, Dy, 255, MMX1, MMY1, MMX2, MMY2)) then
Mouse(Dx, Dy + 14, 1, 1, True)
else
Mouse(MMCX, MMCY, 0, 0, True);
Break;
end;
end else
if (TimeFromMark(T) > 30000) then Break;
end else Break;
end;
until(not(FindColor(Dx, Dy, 255, MMX1, MMY1, MMX2, MMY2)));
end;


It has the same parameter "Distance" as FFlag but it measures the distance from the bottom of the flag and thus solves the problem with the colour 255 getting detected as the flag bottom.

Now onto the final section... Failsafes....

ZephyrsFury
10-15-2007, 07:11 AM
Failsafes – The Key to a Successful Script

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162?#post241493)

What I said in the title of this section is true. Without failsafes, your scripts will suck. Period. The reason you have a failsafe is to avoid or correct something when you can’t find a colour, or when that UpText never appears, or if symbol is covered, etc. Basically they are you plan B’s and C’s and D’s and E’s, etc. If you look at every successful script in the world, you’ll notice they will use failsafes in almost everything. Examples:


if (not(LoggedIn)) then Exit;

If the player isn’t logged in then it exits the procedure/function.


repeat
i := i + 1;
if (FindColor(x, y, 2341235, MMX1, MMY1, MMX2, MMY2) then ;
begin
Mouse(x, y, 0, 0, True);
Break;
end;
until(i = 10);

Never create endless loops. Always break them if it’s done what it’s supposed to do or if it has tried a certain number of times. The example above breaks out of the loop if it finds the colour or if it has tried 10 times.


if (FindDTMRotated(RoadDTM, x, y, MMX1, MMXY1, MMX2, MMY2, - Pi / 4, Pi / 4, 0.05, Angle)) then
Mouse(x, y, 0, 0, True)
else
if (FindColorTolerance(x, y, RoadColor, MMX1, MMY1, MMX2, MMY2, 10)) then
Mouse(x, y, 0, 0, True)
else
begin
Writeln('Could not find road...');
Exit;
end;

Have Plan B if Plan A doesn’t work and a Plan C if Plan B doesn’t work. That way you decrease you chances of getting lost while walking or while doing anything else.

These are just some of the more common ones. You can use any function you like as a failsafe. Other more common examples of this would be:

Timers – using MarkTime and TimeFromMark to repeat until a certain time is reached. For example:

MarkTime(Timer);
repeat
if FindColor(x, y, 255, MMX1, MMY1, MMX2, MMY2) then
Mouse(x, y, 0, 0, True);
Until(TimeFromMark(Timer > 60000); //until 60 seconds has elapsed.

Auto Colouring if the colour cannot be found – this is one I use the most in my script. I use it basically every time I use RadialWalk. It’s pretty simple:

repeat
c := c + 1;
if (not(RadialWalk(RoadColour, 290, 210, 55, 1, 0))) then
begin
RoadColour := FindRoadColor;
c := c - 1;
end;
until(c >= 3);

If it can’t do the RadialWalk then it finds the road colour and tries again.
Another form of timer – this might not be common but I use it occasionally so I thought I might share it with you. Basically, when a player starts a run in my script, a timer is started. During the mainloop and throughout all the loops and functions in my script, it checks to see if the time has passed a predetermined amount of time. In my RM Runner, it involves a function that returns true if it has:

function TimeExceeded: Boolean;
begin
if (TimeFromMark(TotalTime) > MaxTimePerChar * 60 * 1000) then
begin
Writeln('Player has taken too long. Logging...');
Players[CurrentPlayer].Loc := 'MaxTime exceeded';
Players[CurrentPlayer].Active := False;
LogOut;
Result := True;
end;
end;


And in the actual script I use something similar to if(not(LoggedIn)) then Exit;:


repeat
if (TimeExceeded) then Exit;
if (not(LoggedIn)) then Exit;
//rest of the loop here.
until(something...);

This type of thing is pretty much the same as Timers but I thought I’d include a real-life example.


That’s pretty much all I can think of. Check out some of the tutorials below that are dedicated to failsafes.

ZephyrsFury
10-15-2007, 07:43 AM
Conclusion – Recommended Reads

Back to Top (http://www.villavu.com/forum/showthread.php?t=19162?#post241493)

Ok now, that you’ve read your way through all 5037 words, 14 pages (Size 11 Calibri font on MS Word 2007), you should be an expert (as good as me at least) in map walking. I’ve gone through the most common methods for map walking. Many of these methods are not as good as the others but I want to give you a broad but detailed (man.... writing tuts at 12 am makes you come up with weird oxymorons) tutorial on the main methods of walking.

In my humble opinion, I’d say RadialWalk and RadialRoadWalk are the best when you want to follow a colour that doesn’t change much (roads, paths, water, cliffs, etc.). DDTM’s are good for detecting and confirming the location of your playing and moving him/her back on track. FindColor and the family are useful if you have a good colour finding function and when there is not much of the colour in the area you are searching for. FindSymbol can also be very useful when searching for a symbol that exists in a place where not many people stand on or where there is only one symbol that can be found there. But then again none of these will work well without failsafes so yea... just experiment and see which one works best for your situation. :D.

Recommended Reads – Tutorials that Taught Me to Teach You
I think the best way to do this would be to organise the links into groups based on the sections in my tut.

RadialWalk and RadialRoadWalk

http://www.villavu.com/forum/showthread.php?t=372 by WT-Fakawi
http://www.villavu.com/forum/showthread.php?t=11584 by BobboHobbo


Symbol Finding

http://www.villavu.com/forum/showthread.php?t=6500 by danrox2004.


Colour Clicking

http://www.villavu.com/forum/showthread.php?t=15240 by Kik


DDTMs and DTMs

http://www.villavu.com/forum/showthread.php?t=9453 by WhoCares357
http://www.villavu.com/forum/showthread.php?t=564 by YoHoJo
http://www.villavu.com/forum/showthread.php?t=10008 by Wt-Fakawi


Failsafes

http://www.villavu.com/forum/showthread.php?t=18549 by The Claw
http://www.villavu.com/forum/showthread.php?t=18736 by pwnaz0r


If you think that your tutorial should be added PM me or post on this thread.

So that’s the end of this extremely long wall of words :p. Hope it helped you understand some things and taught you something new. If you have any suggestions, compliments, flaming, etc, post here and I’ll help or consider improving it. Good luck with your scripting peoples. ;)

Zeph...

Santa_Clause
10-15-2007, 07:49 AM
Wow, just wow! Rep++ to you.

Dumpin
10-15-2007, 07:49 AM
very nice! thanks

ZephyrsFury
10-15-2007, 07:49 AM
Wow, just wow! Rep++ to you.

Told you it would be long. :p

BobboHobbo
10-15-2007, 08:43 AM
Wow, what a masive and very helpful guide!

Good job man.

Santa_Clause
10-15-2007, 08:53 AM
Isn't there a DDTM Editor...?

Tails111
10-15-2007, 10:56 AM
Yes by SKy Scripter... I think. But A DDTM is just A DTM writen out. ANyways great Tut Zeph!! I learned a lot about the work of DDTMs.
Now we just need to wait until runescape starts rotating the inventory -.-

ZephyrsFury
10-15-2007, 11:13 AM
Isn't there a DDTM Editor...?

Yea SKy has one somewhere. I don't think there is much use for it though because like I said DDTMs are pretty much the same as DTM except for the dynamic part. You can just use a normal DTM editor to get your points and everything and then just copy it into the DDTM assembling procedure.


Yes by SKy Scripter... I think. But A DDTM is just A DTM writen out. ANyways great Tut Zeph!! I learned a lot about the work of DDTMs.
Now we just need to wait until runescape starts rotating the inventory -.-

Lol all they need is a shift of several pixels every time and we would be screwed. :p

EDIT: Oh and I was wondering if this tut here crashed SRL a couple of hours ago. Pretty much as soon as I posted everything, the server crashed. :(

Rikje
10-15-2007, 11:52 AM
Great tut! indeed its really big! :)
thx:)

ZephyrsFury
10-15-2007, 12:44 PM
Yes its big... hopefully equivalent to my contribution to this community over the 2 months that I'm away.

And scheisse... the links open in new windows/tabs... :fiery:

The Claw
10-15-2007, 12:58 PM
Nice!

ShowerThoughts
10-15-2007, 04:00 PM
nice work, now leave!! :p

RAM
10-17-2007, 01:20 AM
WOW, Thank you very much for taking the time to make this...Cleared up a lot of things for me.

~RAM

EDIT: STICKIED ! :)

stupedspam
10-17-2007, 01:29 AM
All I got to say is AWESOME! I finally understand x and ymods... Will be coming back to learn and red more latter :D

Keep up the great tuts :D
~Stupedspam

HellBoyz
10-17-2007, 07:23 AM
Wow. Nice and Long... lol

Edit: Read all the tut, now have some pain in head need some time to digest

ZephyrsFury
10-18-2007, 12:19 PM
WOW, Thank you very much for taking the time to make this...Cleared up a lot of things for me.

~RAM

EDIT: STICKIED ! :)


Wow... didn't think it was that good. :D Thanks RAM.


Edit: Read all the tut, now have some pain in head need some time to digest

Lol just take it one section at a time... don't want to cause any migraines here. ;)

Rikje
10-18-2007, 12:21 PM
zephy gratz on tut cup ;)

w00t! i just finished reading! :)

ZephyrsFury
10-18-2007, 12:27 PM
Lol I got a tut cup???? It wasn't there 30 seconds ago... lol. TY whoever gave me it :D

Rikje
10-18-2007, 12:48 PM
lol :p

he didn't even notice :p

BobboHobbo
10-18-2007, 12:49 PM
Congratz, ill tell you this is one super awesome Tutorial, you should get 2 Tut cups :D

ZephyrsFury
10-18-2007, 12:51 PM
Can I trade those two cups for an admins cup or a dev's cup or something at that level? ;)

Rikje
10-18-2007, 12:52 PM
haha you can always try it hé ?:P

(i don't have cup. so i can't trade anything :p)

Toterache
10-19-2007, 05:53 PM
Nice, really nice!!!
Well, I'm just 1/3 done so far, but I'm working through it. :D
Planning on finishing it within the next hour or two, will edit this post then. ^^

ZaSz
10-24-2007, 04:43 AM
Dude thank you for making this it has helped me a lot. I even bookmarked this page. Dude you rock!

Harry
10-25-2007, 09:00 PM
OMFG.... Very nice!!! :)

Smartzkid
10-26-2007, 01:40 AM
I love it!

Just finished reading it (been meaning to for a while now :)), thanks a ton for writing it!

RudeBoiAlex
10-27-2007, 09:54 PM
AWESOME TUT IF I HAVENT SAID SO

and like what you said to me i think i see a tut writers cup congratz :p

Macrosoft
10-28-2007, 03:15 PM
i am speechless, wow

all i can say is you have WAY too much free time

lol, nice job

ZephyrsFury
10-30-2007, 12:36 PM
i am speechless, wow

all i can say is you have WAY too much free time

lol, nice job

I did it during my school holidays. :)

the scar noob
10-30-2007, 01:28 PM
Very great tutorial!
I "found" your tutorial while I was actually searching for a tutorial about LinearWalk, because I've never used that one before, maybe you can add that one?:D

-Tsn.

Tazzie 02
10-31-2007, 09:16 AM
You definately have too much time on your hands :P Nice tut and gratz on tut cup :)

ZephyrsFury
10-31-2007, 11:21 AM
I've tried that. I didn't really like it because you can't specify a start or end radial so your colour must be exactly on the right angle or else you can't find it. It's only vaguely useful because it searches inside out whereas RadialWalk goes outside in.

gerauchert
10-31-2007, 11:45 AM
intense tut really great...

i cant believe i only noticed it now :p

EvilChicken!
11-02-2007, 02:11 PM
Really, really good and long tut, thanks for making this!

Now I just have to read it all over again 20 times to make sure I remember it all:D

ZephyrsFury
11-08-2007, 11:35 AM
Thanks everyone for the compliments... it makes me feel special ;).

Anyways.... since I have a little free time today I've decided to add a new section called Mouse, Flag and MouseFlag :). It covers the different methods of waiting for the flag to disappear and also explains a bit of map walking using coordinates. Hopefully you'll like it/find it useful.

I also added a small paragraph with a few examples for Colour Clicking.

RudeBoiAlex
11-08-2007, 01:47 PM
Just read thorught it all again except i only read teh first paragraph of the DTMS bit :p

excellent this has honeslty helped me with mapwalking now :D

Siikanen
11-16-2007, 11:34 AM
WOW Nice one. This help me alot, now i can make own scipits :D

nething
11-17-2007, 08:39 PM
O.O 8-tuple (don't know how you say that) poster! Jk. Wow that was really long. Very nice job. I'm proud to say I read the entire thing word for word O_o. This should help me on my autofighter I am making. I'm planning on making it so that when it can't find the monster a certain number of times then it looks for the yellow NPC color on the mini-map and clicks it.

Thanks for the awesome tut.

-Spartan-
11-19-2007, 05:04 PM
Amazingly helpful script. With an air crafting script, will definetely be helpful in creating the perfect walking sequence. This is an extremely in depth tutorial and is really well explained and written. Thanks a lot for the help. +rep ;)

InfernoKnight
12-02-2007, 06:12 PM
Nice tutorial. It will surely help me with my first script. [Collecting information on all the functions and stuff];) Anyway, good work. :D

chitin
12-22-2007, 08:38 PM
omg genuis this is brilliant, it was a bit long, i almost didnt read the whole thing, the dtm was so hard to understand, i wouldnt have if i didnt know what it was alredy, but yeah, the dtm subpoints helpd so much, now i can do my own eve better rep+ thnx

FEAR
01-04-2008, 07:48 AM
Wow nice tutorial.:)

I am going to make my my script *MineBanker by FEAR* and this is gonna help me a lot.

I gave you credit for this in my script :D

~~ FEAR ~~

Gumleren
01-08-2008, 02:54 PM
This is just.. YEAH, BABY, YEAH! Even Austin Powers-quotes can't describe it!

I'm sad to see that so few people have taken the time to comment this tutorial - more than 1400 has viewed it! EVERY valid thing about mapwalking is right here, and it's explained in a very understandable way!
If it wasn't because I know I'd be called a pervert, I'd get a hard-on right here, right now!

What I'm trying to say is: Good job!

Pure1993
01-27-2008, 03:52 PM
Very nice thread, explains everything in detaiö. After reading the first paragraph, i just decided that one more tut for the day won't kill me, even though I said earlier that Three were enough for the day. :D
Now, I am not sure if i did this right, could you please tell me, if there is anything wrong, and what it is that i need to correct.

Program WalkOnRoad;
{.include SRL/SRL.scar}
begin
RoadColor := FindRoadColor;
RadialWalk(RoadColor,175,185,55,0,0);
Flag;
end.

btw, while you are at it, did i use the autocolor thing right? I'm pretty sure I did, but I would like to have that approved by someone who knows how this works. ^^

Pure1993
02-02-2008, 06:29 PM
First off: Awsome tut man, it deserves to be stikied. There is just one problem I am having, and seeing as this is a thread on mapwalking (including symbols), my question can be directly answered :D : why does this never find a quest symbol?

SymbolAccuracy := 0.5;
If not (FindSymbolIn(x, y, 'quest', mmx1, mmy1, mmx2, mmy2)) Then
Begin
Writeln('There are no Quest symbols here, wrong place');
Writeln('Error : Reason1 (Wrong Location)');
TerminateScript;
end;
If (FindSymbolIn(x, y, 'quest', mmx1, mmy1, mmx2, mmy2)) Then
begin
Mouse(x,y,2,2,true);
end;
end;

Well, the symbol is completely free of people, and I can see it on the minimap, but still it never finds it, can you please tell me what is wrong with it?
Thanks a lot for the help and the tut :)
Stur Pure

Ultra
02-27-2008, 05:58 PM
Dude this tutorial is FTW man! Best map-walking tutorial i have seen! It helped me alot man, now i can finnaly start making banking scripts :D.

stampede10343
02-27-2008, 11:00 PM
Dude this tutorial is FTW man! Best map-walking tutorial i have seen! It helped me alot man, now i can finnaly start making banking scripts :D.

I know this is my favorite tut great job Zeph

hessels92
03-24-2008, 03:15 AM
Wow thx so much 4 this. be4 i read this i had no idea about radial and map walking or anywalking really now i feel confident 4 when i get holidays in a week i sould be able 2 suceed in adding walking 2 my scripts :D

faster789
03-24-2008, 09:52 PM
LOL wowww sweeeeeettt guna help me a lot! evn tho i uno if everythin is uptodate anymor?

ShowerThoughts
03-24-2008, 11:02 PM
Ultimate Bump!!!

Awsome!!!

skilld u
03-24-2008, 11:07 PM
Hermpie you do know this is a sticky....you don't need to bump. :p

kelly slater pro surfer
03-24-2008, 11:17 PM
thanks this helped me out alot

ZephyrsFury
03-25-2008, 12:31 AM
Great to see people are still using this. :) And yes everything is still up to date.

ZaSz
03-25-2008, 03:11 AM
1337, I got most of it. Eh, will use most of it for my members app.

Press Play
04-18-2008, 01:52 PM
wat can i say ...
amazing!!

Baked0420
04-26-2008, 04:42 PM
woowww, AMAZING tut, this helped me so much, before I didn't know a thing how to make my guy walk (I'm pretty knew, joined almost a month ago), but I think I might be able to make characters get somewhere successfully now. I favorited this incase I ever need it again, most likely will.

Rep'd

Kave
05-04-2008, 07:55 AM
Great Job! Excellent Tutorial, helped me out quite a bit.

dialeyj2
06-11-2008, 06:35 AM
nice job...but did u upload the radial walking aid, i couldnt find it

ZephyrsFury
06-11-2008, 01:42 PM
nice job...but did u upload the radial walking aid, i couldnt find it

Yea I couldn't get a copy of it. I've got one now just need to ask for yak's permission.

Laur€ns
07-04-2008, 07:46 AM
I've got one now just need to ask for yak's permission

Do you have your permission? :D
Nice and big tut :)



Now leave :p

-_-'

ZephyrsFury
07-04-2008, 07:55 AM
Do you have your permission? :D
Nice and big tut :)


-_-'

No but I saw someone post it somewhere recently.

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

Queso
07-09-2008, 01:57 PM
I would like to point out that when you said for findDTMRotated:


Angle: A variable in which the angle at which the DTM was found is stored. Pretty much useless but is required for the function to work. .


That it is NOT useless, and what you can do with that if you need to find the DTM several times, you can set the Start Angle equal to a few degrees before the Angle it found it on, making the DTM finding faster!

ZephyrsFury
07-09-2008, 02:43 PM
I would like to point out that when you said for findDTMRotated:



That it is NOT useless, and what you can do with that if you need to find the DTM several times, you can set the Start Angle equal to a few degrees before the Angle it found it on, making the DTM finding faster!

No I meant the variable that the function stores the angle at which the DTM was found. I've explained the use of StartAngle, EndAngle and AngleStep in the tut.

unrealman
07-14-2008, 03:53 AM
Thanks ZephyrsFury i did a beginners tut and now i was hoping to learn a more advanced one and this helped a lot! ty tons!

gdw328
07-18-2008, 02:16 PM
Failed when compiling
Line 55: [Error] (12719:4): Unknown identifier 'HumanCircleFlag' in script C:\Program Files\SCAR 3.15\includes\SRL/SRL/Extended/xMapWalk.scar

siraren3
07-23-2008, 03:14 AM
please update your symbol finding in contents to symbol clicking for i can find symbols even with this

Crozling
08-03-2008, 05:19 PM
Thank you just what i needed for my experement very useful...

jiggypwner
08-13-2008, 03:37 AM
Yes by SKy Scripter... I think. But A DDTM is just A DTM writen out. ANyways great Tut Zeph!! I learned a lot about the work of DDTMs.
Now we just need to wait until runescape starts rotating the inventory -.-

Dont jinx us:p


But amazing tut tyvm

basic_i
08-14-2008, 01:28 AM
not to raid on your parade aka awsome guide, would it be only one angle, being the o aka the origin.....mathematically...∟soe...start(radial), origin, end(radial)???

ZephyrsFury
08-14-2008, 09:28 AM
Yes the search area would be defined by the sector SOE as you call it with the specified radius.

Chad Grimgravy
08-23-2008, 04:16 PM
heh sweet. thnx for the tut

AzulDrake
08-27-2008, 04:46 AM
Thanx for this tut. I especially found the failsafes handy

Accure
09-04-2008, 03:18 PM
Thanks, this came very usefull at my Chopper+Banker :)

zereoth
09-08-2008, 04:45 PM
:O They have worked so much on SCAR sine I first started to use it (v1.13, still have it =)). So many clever functions and procedures. Your tutorial explains well these funcs and proceds which make your life easier.

triax
11-04-2008, 05:35 PM
Never knew how to make a MapWalking script. Thanks for the info.

SirPa
11-05-2008, 10:12 AM
Ah just what i needed :)
I'm working on a flaxspinner script and tried RadialWalk.
But cause the colors keep changing i want to use RadialWalkEx but i can't find a good tutorial on how to use it.

Can you give me a quick lesson in how to use RadialWalkEx?

ZephyrsFury
11-05-2008, 10:55 AM
Ok,


function RadialWalkEx(var tpa: TPointArray; cx, cy, TheColor, tol: Integer; StartRadial, EndRadial: Integer; Radius: Integer): Boolean;


Thats the function definition for RadialWalkEx. Its basically the same as RadialWalk except it has a few more options.

I'll explain the different parameters:

1. RadialWalkEx doesn't actually click the map for you, it only finds the coordinates or points with the colour in the search area. It stores this in a TPointArray. You might wanna read about TPointArrays or TPAs in the tutorials section.

2. Cx, Cy is the centre of the search area. In RadialWalkEx it is the centre of the minimap (ie. MMCX and MMCY respectively).

3. Tol is the colour tolerance.

SirPa
11-05-2008, 11:38 AM
Hmm k, ill try that out some day.
I actually had a breakthrough shortly after posting that question, so i don't really need it at the moment ;)

But thanks for always helping :)

Ethan1221
12-22-2008, 01:22 AM
Very Nice Guide

wabakoo420
01-04-2009, 08:04 PM
That was really long, but helpful :)

Yoast
01-09-2009, 07:13 PM
Im loving it!

PsychicDemon
02-13-2009, 04:11 PM
Its really worth reading guys.
Really well explain it cleared out alot!
Respect man, thanks.

Z3r0Grav
05-02-2009, 12:25 AM
very nice ive been wondering how the hell to map walk so this will help so much !! cheers

ps i may take a long time to learn but one day i'll make a good script :)

Mystic
05-05-2009, 12:34 PM
Wow! I am definitely going to use this on all my Map Walking! Thanks soooo much!!!!
This is soo good it's crazy! TYVM! :) Rep++ For youu

Rubix
06-14-2009, 05:00 AM
necessary gravedig/bump. Excellent tut, i can't believe i never took the time to read this, i just read it all the way through for my walking.

ZephyrsFury
06-14-2009, 10:58 AM
necessary gravedig/bump. Excellent tut, i can't believe i never took the time to read this, i just read it all the way through for my walking.

Lol no need for a bump, its already sticked at the top. :p

V3n
06-14-2009, 03:31 PM
Very educational :) Enjoyed this read, even at 2:30am!

Cartmann
10-01-2009, 05:40 AM
Awesome tut! eventhouge i dind't quite understand your DTM part, and that failsafe your reffering to (something about c+1 and c-1) doesn't that just run endless if it can't locate the roadcolour?

ZephyrsFury
10-01-2009, 11:55 AM
Awesome tut! eventhouge i dind't quite understand your DTM part, and that failsafe your reffering to (something about c+1 and c-1) doesn't that just run endless if it can't locate the roadcolour?

Yeah it would, which is something I realised after writing this tut :P

I should probably rewrite some of this, I can do a lot better than a lot of this now.

Cartmann
10-01-2009, 09:44 PM
It could be really awesome, if you updated it with reflection walking too.

carlover
06-24-2010, 04:14 AM
Hey i'm just getting back into scripting and this guide was very very helpful. It was super clear and made sense. Thanks

wantonman
09-02-2010, 05:06 AM
wasn't as massive as you made it seem, in fact it could've been massive-er

ZephyrsFury
09-02-2010, 07:42 AM
wasn't as massive as you made it seem, in fact it could've been massive-er

Feel free to let me know what to add.

noobscam
12-11-2010, 10:54 AM
Line 75: [Error] (75:5): Unknown identifier 'FindSymbol' in script C:\Program Files\SCAR 3.22\Scripts\fishingbot bs.scar


How do I declare the method FindSymbol ? :/
(I'm new to this scripting lol)

((Is it just to include the SRL?))
(((Because that didn't work lol)))

NexPB
12-06-2011, 10:10 PM
Nice tut. I might try walking with DTMs later on.

Brandon
12-06-2011, 10:36 PM
Nice tut. I might try walking with DTMs later on.


Meh I also needa learn walking but I heard SPS is better.. Just everytime I try it, my script returns my position as -1, -1 :c OR it never walks.. I needa find me a damn tutorial on SPS or TPA/ATPA like finding objects using color.. so hard!

I'll never be an srl member no matter what.. :c

Good luck to you though.

NexPB
01-03-2012, 03:36 PM
In tutorial you said you had a tool ro find the radius can you please upload it and send it?

chandlerethan
01-07-2012, 12:11 PM
I'm not sure if this would be gravedigging, but I'm in need of an SPS walking tutorial and can't find one anywhere in any of the tutorials sections, can you please fill me in on SPS walking? All i really need are how to find exact coordinates, as using SPS_GetMyPos sucks butt and won't give me the exact position.

RuNnNy
01-07-2012, 03:53 PM
Thanks, This tutorial explained allot of things i was having difficulties with.
Ty ZephyrsFury!

Syntax
06-01-2012, 02:55 PM
Very nice guide and helpful, bookmarked :)

Master BAW
06-18-2012, 07:03 PM
wow. Amazing tutorial! Will add this to my favorites because I will need this later :):D

Le_don
02-27-2013, 11:50 AM
Thanks for the useful info!

t4q
04-04-2013, 12:59 PM
good tutorial, now i can combine different walking methods

Zealon
08-01-2013, 02:09 PM
Awesome guide, I will definitely try and put this to use in a script of my own, cheers.

scrip writer1
10-30-2013, 01:29 AM
Thanks im trying to script so this should help

kriss1993
10-30-2014, 07:02 AM
Could Any1 tell me how to use FindDTMs function (the example of the parm)? right now im using If finddtm.. or finddtm.. I was hoping I could find it on one of the tutorials but couldnt

Zhendos
12-22-2014, 06:28 PM
Nice tutorial!

sizzayin
10-10-2016, 02:16 PM
Thank you for this, it has helped me a lot with my script so far.