Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[All Versions] A+ Pathfinding for NPCs


tslusny
 Share

Recommended Posts

When using this, you MUST include credits to: Herbert Glarner and if you are nice enought, then to me also ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png)

Hello my little female dogs ![;)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/wink.png)

Guess what? This is epic thing. Why? Why not ![:D](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/biggrin.png) So let´s begin…

**NOTE:** This is only server side edit

First add attached modPathfinding to your server.

Now search for this:

```

Call SetStatus("Creating map cache...")

Call CreateFullMapCache

```

And add this under it:

```

For i = 1 To MAX_MAPS

CreatePathMatrix i

Next

```

**NOTE TO MIRACLE CLASSIC USERS**

Add this at bottom of Sub Redimall

```

ReDim mapMatrix(1 To MAX_MAPS) As mapMatrixRec

```
**END NOTE**

Now add this at bottom of Type MapNpcRec

```

' pathfinding

arPath() As tPoint

hasPath As Boolean

TargetX As Long

TargetY As Long

pathLoc As Long

```

Now search for this in Sub UpdateMapLogic:

```

If target_verify Then

```

And now add this under it:

```

' if map has a working matrix, use a* pathfinding

If mapMatrix(MapNum).created Then

If GetPlayerX(target) <> MapNpc(MapNum).Npc(x).TargetX Or GetPlayerY(target) <> MapNpc(MapNum).Npc(x).TargetY Then

' player has moved, re-find the path

MapNpc(MapNum).Npc(x).hasPath = APlus(MapNum, CLng(MapNpc(MapNum).Npc(x).x), CLng(MapNpc(MapNum).Npc(x).y), CLng(GetPlayerX(target)), CLng(GetPlayerY(target)), Void, MapNpc(MapNum).Npc(x).arPath)

' set the npc's cur path location

If MapNpc(MapNum).Npc(x).hasPath Then MapNpc(MapNum).Npc(x).pathLoc = UBound(MapNpc(MapNum).Npc(x).arPath)

End If

' if has path, follow it

If MapNpc(MapNum).Npc(x).hasPath Then

' follow path

NpcMoveAlongPath MapNum, x

didwalk = True

End If

End If

```

And now **remove** this code below it:

```

i = Int(Rnd * 5)

' Lets move the npc

Select Case i

Case 0

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

Case 1

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

Case 2

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

Case 3

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

End Select

```And that´s all my friends. Easy tut for that complex thing ![:D](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/biggrin.png)
Link to comment
Share on other sites

  • Replies 54
  • Created
  • Last Reply

Top Posters In This Topic

Delete this?

```

' Check if we can't move and if Target is behind something and if we can just switch dirs

If Not DidWalk Then

If MapNpc(mapnum).Npc(X).X - 1 = TargetX And MapNpc(mapnum).Npc(X).y = TargetY Then

If MapNpc(mapnum).Npc(X).Dir <> DIR_LEFT Then

Call NpcDir(mapnum, X, DIR_LEFT)

End If

```
Link to comment
Share on other sites

> Delete this?
>
> ```
>
> ' Check if we can't move and if Target is behind something and if we can just switch dirs
>
> If Not DidWalk Then
>
> If MapNpc(mapnum).Npc(X).X - 1 = TargetX And MapNpc(mapnum).Npc(X).y = TargetY Then
>
> If MapNpc(mapnum).Npc(X).Dir <> DIR_LEFT Then
>
> Call NpcDir(mapnum, X, DIR_LEFT)
>
> End If
>
> ```

No, that thing what has to do with NPC movement above it (with rand 1 to 5 number and select case). Updated post, if forgot to attach modPathfinding ![:D](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/biggrin.png)
Link to comment
Share on other sites

This delete? srry for my noob question ; d

```

i = Int(Rnd * 5)

' Lets move the npc

Select Case i

Case 0

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

Case 1

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

Case 2

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

Case 3

' Left

If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_LEFT) Then

Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)

DidWalk = True

End If

End If

' Right

If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_RIGHT) Then

Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)

DidWalk = True

End If

End If

' Up

If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_UP) Then

Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)

DidWalk = True

End If

End If

' Down

If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then

If CanNpcMove(mapnum, X, DIR_DOWN) Then

Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)

DidWalk = True

End If

End If

End Select

```
Link to comment
Share on other sites

> This delete? srry for my noob question ; d
>
> ```
>
> i = Int(Rnd * 5)
>
> ' Lets move the npc
>
> Select Case i
>
> Case 0
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> Case 1
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> Case 2
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> Case 3
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> End Select
>
> ```

Yea ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png) Gonna add it to tut to help other people ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png) Thx Adiif, i already deleted this thing in my source, so i wasn´t able to post what to delete ![:D](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/biggrin.png)
Link to comment
Share on other sites

Change all sub

```
Public Sub CreatePathMatrix(ByVal MapNum As Long)
```

to

```

Public Sub CreatePathMatrix(ByVal MapNum As Long)

Dim x As Long, y As Long

ReDim mapMatrix(MapNum).gaeGrid(0 To Map(MapNum).MaxX, 0 To Map(MapNum).MaxY) As eCell

For x = 0 To Map(MapNum).MaxX

For y = 0 To Map(MapNum).MaxY

If Map(MapNum).Tile(x, y).Type <> TILE_TYPE_WALKABLE And Map(MapNum).Tile(x, y).Type <> TILE_TYPE_ITEM And Map(MapNum).Tile(x, y).Type <> TILE_TYPE_NPCSPAWN Then

mapMatrix(MapNum).gaeGrid(x, y) = Obstacle

Else

mapMatrix(MapNum).gaeGrid(x, y) = Void

End If

Next

Next

mapMatrix(MapNum).created = True

Exit Sub

errorHandler:

mapMatrix(MapNum).created = False

End Sub

```
Link to comment
Share on other sites

> Good?
>
> ```
>
> Public mapMatrix() As mapMatrixRec
>
> ```
>
> Variable not defined
>
> ```
>
> PlayerWalking
>
> ```
>
> Please Fix this all Pathfinding

Uploaded new modPathfinding

That your 1 to MAX_MAPS issue are still here, so just repeat what you did, becouse you have older MC so you do not have MAX_MAPS constant
Link to comment
Share on other sites

> For me its working but the NPC most just stand and wait what makes easy to run away xD

And do you deleted this?

> This delete? srry for my noob question ; d
>
> ```
>
> i = Int(Rnd * 5)
>
> ' Lets move the npc
>
> Select Case i
>
> Case 0
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> Case 1
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> Case 2
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> Case 3
>
> ' Left
>
> If MapNpc(mapnum).Npc(X).X > TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_LEFT) Then
>
> Call NpcMove(mapnum, X, DIR_LEFT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Right
>
> If MapNpc(mapnum).Npc(X).X < TargetX And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_RIGHT) Then
>
> Call NpcMove(mapnum, X, DIR_RIGHT, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Up
>
> If MapNpc(mapnum).Npc(X).y > TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_UP) Then
>
> Call NpcMove(mapnum, X, DIR_UP, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> ' Down
>
> If MapNpc(mapnum).Npc(X).y < TargetY And Not DidWalk Then
>
> If CanNpcMove(mapnum, X, DIR_DOWN) Then
>
> Call NpcMove(mapnum, X, DIR_DOWN, MOVING_WALKING)
>
> DidWalk = True
>
> End If
>
> End If
>
> End Select
>
> ```
Link to comment
Share on other sites

> Yes :-)
>
> I know how to do an Tutorial haha but still walking not much or most just wait till i get in the way of them

This is pathfinding, not new NPC AI ![:D](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/biggrin.png) They will be smart only when they will try to kill you, and not when they are hanging around
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...