Pathfinder fixes?

Dzetki

The Prodigal Son Returns
Jul 16, 2010
990
220
Well, i need some help fixing my pathfinder as it's totally f*cked up. Do any1 know a fix for this that i can use(where they also tell me exactly where i shall put the fix?)? Sorry to bother you with this.
 

Dzetki

The Prodigal Son Returns
Jul 16, 2010
990
220
well, it's one of the basic errors with it in uber, when you click on an open space infornt of your habbo you should walk FORWARDS directly, but at Xabba you walk diagonally too one space, then diagonally to the space you clicked. It's irritating me and my users, and as i do not know C# at all i can't fix it myself..
 

Kryptos

prjRev.com
Jul 21, 2010
2,205
1,252
Try this:->
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

using Uber.HabboHotel.GameClients;
using Uber.HabboHotel.Rooms;

namespace Uber.HabboHotel.Pathfinding
{
* * class Pathfinder
* * {
* * * * Point[] Movements;
* * * * CompleteSquare[,] Squares;

* * * * Room Room;
* * * * RoomModel Model;
* * * * RoomUser User;

* * * * int mapSizeX;
* * * * int mapSizeY;

* * * * public Pathfinder(Room Room, RoomUser User)
* * * * {
* * * * * * this.Room = Room;
* * * * * * this.Model = Room.Model;
* * * * * * this.User = User;

* * * * * * if (Room == null || Model == null || User == null)
* * * * * * {
* * * * * * * * return;
* * * * * * }

* * * * * * InitMovements(0);

* * * * * * mapSizeX = Model.MapSizeX;
* * * * * * mapSizeY = Model.MapSizeY;

* * * * * * Squares = new CompleteSquare[mapSizeX, mapSizeY];

* * * * * * for (int x = 0; x < mapSizeX; x++)
* * * * * * {
* * * * * * * * for (int y = 0; y < mapSizeY; y++)
* * * * * * * * {
* * * * * * * * * * Squares[x, y] = new CompleteSquare(x, y);
* * * * * * * * }
* * * * * * }
* * * * }

* * * * private IEnumerable<Point> GetSquares()
* * * * {
* * * * * * for (int x = 0; x < mapSizeX; x++)
* * * * * * {
* * * * * * * * for (int y = 0; y < mapSizeY; y++)
* * * * * * * * {
* * * * * * * * * * yield return new Point(x, y);
* * * * * * * * }
* * * * * * }
* * * * }

* * * * private IEnumerable<Point> ValidMoves(int x, int y)
* * * * {
* * * * * * foreach (Point movePoint in Movements)
* * * * * * {
* * * * * * * * int newX = x + movePoint.X;
* * * * * * * * int newY = y + movePoint.Y;

* * * * * * * * if (ValidCoordinates(newX, newY) &&
* * * * * * * * * * IsSquareOpen(newX, newY, true))
* * * * * * * * {
* * * * * * * * * * yield return new Point(newX, newY);
* * * * * * * * }
* * * * * * }
* * * * }

* * * * public List<Coord> FindPath()
* * * * {
* * * * * * // Locate the user, and set the distance to zero
* * * * * * int UserX = User.X;
* * * * * * int UserY = User.Y;

* * * * * * Squares[User.X, User.Y].DistanceSteps = 0;

* * * * * * // Find all possible moves
* * * * * * while (true)
* * * * * * {
* * * * * * * * Boolean MadeProgress = false;

* * * * * * * * foreach (Point MainPoint in GetSquares())
* * * * * * * * {
* * * * * * * * * * int x = MainPoint.X;
* * * * * * * * * * int y = MainPoint.Y;

* * * * * * * * * * if (IsSquareOpen(x, y, true))
* * * * * * * * * * {
* * * * * * * * * * * * int passHere = Squares[x, y].DistanceSteps;

* * * * * * * * * * * * foreach (Point movePoint in ValidMoves(x, y))
* * * * * * * * * * * * {
* * * * * * * * * * * * * * int newX = movePoint.X;
* * * * * * * * * * * * * * int newY = movePoint.Y;
* * * * * * * * * * * * * * int newPass = passHere + 1;

* * * * * * * * * * * * * * if (Squares[newX, newY].DistanceSteps > newPass)
* * * * * * * * * * * * * * {
* * * * * * * * * * * * * * * * Squares[newX, newY].DistanceSteps = newPass;
* * * * * * * * * * * * * * * * MadeProgress = true;
* * * * * * * * * * * * * * }
* * * * * * * * * * * * }
* * * * * * * * * * }
* * * * * * * * }

* * * * * * * * if (!MadeProgress)
* * * * * * * * {
* * * * * * * * * * break;
* * * * * * * * }
* * * * * * }

* * * * * * // Locate the goal
* * * * * * int goalX = User.GoalX;
* * * * * * int goalY = User.GoalY;

* * * * * * if (goalX == -1 || goalY == -1)
* * * * * * {
* * * * * * * * return null;
* * * * * * }

* * * * * * // Now trace the shortest possible route to our goal
* * * * * * List<Coord> Path = new List<Coord>();

* * * * * * Path.Add(new Coord(User.GoalX, User.GoalY));

* * * * * * while (true)
* * * * * * {
* * * * * * * * Point lowestPoint = Point.Empty;
* * * * * * * * int lowest = 100;

* * * * * * * * foreach (Point movePoint in ValidMoves(goalX, goalY))
* * * * * * * * {
* * * * * * * * * * int count = Squares[movePoint.X, movePoint.Y].DistanceSteps;

* * * * * * * * * * if (count < lowest)
* * * * * * * * * * {
* * * * * * * * * * * * lowest = count;

* * * * * * * * * * * * lowestPoint.X = movePoint.X;
* * * * * * * * * * * * lowestPoint.Y = movePoint.Y;
* * * * * * * * * * }
* * * * * * * * }

* * * * * * * * if (lowest != 100)
* * * * * * * * {
* * * * * * * * * * Squares[lowestPoint.X, lowestPoint.Y].IsPath = true;
* * * * * * * * * * goalX = lowestPoint.X;
* * * * * * * * * * goalY = lowestPoint.Y;

* * * * * * * * * * Path.Add(new Coord(lowestPoint.X, lowestPoint.Y));
* * * * * * * * }
* * * * * * * * else
* * * * * * * * {
* * * * * * * * * * break;
* * * * * * * * }

* * * * * * * * if (goalX == UserX && goalY == UserY)
* * * * * * * * {
* * * * * * * * * * break;
* * * * * * * * }
* * * * * * }

* * * * * * return Path;
* * * * }

* * * * private Boolean IsSquareOpen(int x, int y, Boolean CheckHeight)
* * * * {
* * * * * * if (Room.ValidTile(x, y) && User.AllowOverride)
* * * * * * {
* * * * * * * * return true;
* * * * * * }

* * * * * * if (User.X == x && User.Y == y)
* * * * * * {
* * * * * * * * return true;
* * * * * * }

* * * * * * bool isLastStep = false;

* * * * * * if (User.GoalX == x && User.GoalY == y)
* * * * * * {
* * * * * * * * isLastStep = true;
* * * * * * }

* * * * * * if (!Room.CanWalk(x, y, 0, isLastStep))
* * * * * * {
* * * * * * * * return false;
* * * * * * }

* * * * * * return true;
* * * * }

* * * * private Boolean ValidCoordinates(int x, int y)
* * * * {
* * * * * * if (x < 0 || y < 0 || x > mapSizeX || y > mapSizeY)
* * * * * * {
* * * * * * * * return false;
* * * * * * }

* * * * * * return true;
* * * * }

* * * * public void InitMovements(int movementCount)
* * * * {
* * * * * * if (movementCount == 4)
* * * * * * {
* * * * * * * * Movements = new Point[]
* * * * * * * * {
* * * * * * * * * * new Point(0, -1),
* * * * * * * * * * new Point(1, 0),
* * * * * * * * * * new Point(0, 1),
* * * * * * * * * * new Point(-1, 0),
* * * * * * * * * * new Point(-1, -1),
* * * * * * * * * * new Point(1, -1),
* * * * * * * * * * new Point(1, 1),
* * * * * * * * * * new Point(-1, 1)
* * * * * * * * };
* * * * * * }
* * * * * * else
* * * * * * {
* * * * * * * * Movements = new Point[]
* * * * * * * * {
* * * * * * * * * * new Point(0, -1),
* * * * * * * * * * new Point(1, 0),
* * * * * * * * * * new Point(0, 1),
* * * * * * * * * * new Point(-1, 0),
* * * * * * * * * * new Point(-1, -1),
* * * * * * * * * * new Point(1, -1),
* * * * * * * * * * new Point(1, 1),
* * * * * * * * * * new Point(-1, 1)
* * * * * * * * };
* * * * * * }
* * * * }
* * }

* * class CompleteSquare
* * {
* * * * public int x = 0;
* * * * public int y = 0;

* * * * int _distanceSteps = 100;

* * * * public int DistanceSteps
* * * * {
* * * * * * get { return _distanceSteps; }
* * * * * * set { _distanceSteps = value; }
* * * * }

* * * * bool _isPath = false;

* * * * public bool IsPath
* * * * {
* * * * * * get { return _isPath; }
* * * * * * set { _isPath = value; }
* * * * }

* * * * public CompleteSquare(int x, int y)
* * * * {
* * * * * * this.x = x;
* * * * * * this.y = y;
* * * * }
* * }
}
 

Dzetki

The Prodigal Son Returns
Jul 16, 2010
990
220
Try this:->
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

using Uber.HabboHotel.GameClients;
using Uber.HabboHotel.Rooms;

namespace Uber.HabboHotel.Pathfinding
{
* * class Pathfinder
* * {
* * * * Point[] Movements;
* * * * CompleteSquare[,] Squares;

* * * * Room Room;
* * * * RoomModel Model;
* * * * RoomUser User;

* * * * int mapSizeX;
* * * * int mapSizeY;

* * * * public Pathfinder(Room Room, RoomUser User)
* * * * {
* * * * * * this.Room = Room;
* * * * * * this.Model = Room.Model;
* * * * * * this.User = User;

* * * * * * if (Room == null || Model == null || User == null)
* * * * * * {
* * * * * * * * return;
* * * * * * }

* * * * * * InitMovements(0);

* * * * * * mapSizeX = Model.MapSizeX;
* * * * * * mapSizeY = Model.MapSizeY;

* * * * * * Squares = new CompleteSquare[mapSizeX, mapSizeY];

* * * * * * for (int x = 0; x < mapSizeX; x++)
* * * * * * {
* * * * * * * * for (int y = 0; y < mapSizeY; y++)
* * * * * * * * {
* * * * * * * * * * Squares[x, y] = new CompleteSquare(x, y);
* * * * * * * * }
* * * * * * }
* * * * }

* * * * private IEnumerable<Point> GetSquares()
* * * * {
* * * * * * for (int x = 0; x < mapSizeX; x++)
* * * * * * {
* * * * * * * * for (int y = 0; y < mapSizeY; y++)
* * * * * * * * {
* * * * * * * * * * yield return new Point(x, y);
* * * * * * * * }
* * * * * * }
* * * * }

* * * * private IEnumerable<Point> ValidMoves(int x, int y)
* * * * {
* * * * * * foreach (Point movePoint in Movements)
* * * * * * {
* * * * * * * * int newX = x + movePoint.X;
* * * * * * * * int newY = y + movePoint.Y;

* * * * * * * * if (ValidCoordinates(newX, newY) &&
* * * * * * * * * * IsSquareOpen(newX, newY, true))
* * * * * * * * {
* * * * * * * * * * yield return new Point(newX, newY);
* * * * * * * * }
* * * * * * }
* * * * }

* * * * public List<Coord> FindPath()
* * * * {
* * * * * * // Locate the user, and set the distance to zero
* * * * * * int UserX = User.X;
* * * * * * int UserY = User.Y;

* * * * * * Squares[User.X, User.Y].DistanceSteps = 0;

* * * * * * // Find all possible moves
* * * * * * while (true)
* * * * * * {
* * * * * * * * Boolean MadeProgress = false;

* * * * * * * * foreach (Point MainPoint in GetSquares())
* * * * * * * * {
* * * * * * * * * * int x = MainPoint.X;
* * * * * * * * * * int y = MainPoint.Y;

* * * * * * * * * * if (IsSquareOpen(x, y, true))
* * * * * * * * * * {
* * * * * * * * * * * * int passHere = Squares[x, y].DistanceSteps;

* * * * * * * * * * * * foreach (Point movePoint in ValidMoves(x, y))
* * * * * * * * * * * * {
* * * * * * * * * * * * * * int newX = movePoint.X;
* * * * * * * * * * * * * * int newY = movePoint.Y;
* * * * * * * * * * * * * * int newPass = passHere + 1;

* * * * * * * * * * * * * * if (Squares[newX, newY].DistanceSteps > newPass)
* * * * * * * * * * * * * * {
* * * * * * * * * * * * * * * * Squares[newX, newY].DistanceSteps = newPass;
* * * * * * * * * * * * * * * * MadeProgress = true;
* * * * * * * * * * * * * * }
* * * * * * * * * * * * }
* * * * * * * * * * }
* * * * * * * * }

* * * * * * * * if (!MadeProgress)
* * * * * * * * {
* * * * * * * * * * break;
* * * * * * * * }
* * * * * * }

* * * * * * // Locate the goal
* * * * * * int goalX = User.GoalX;
* * * * * * int goalY = User.GoalY;

* * * * * * if (goalX == -1 || goalY == -1)
* * * * * * {
* * * * * * * * return null;
* * * * * * }

* * * * * * // Now trace the shortest possible route to our goal
* * * * * * List<Coord> Path = new List<Coord>();

* * * * * * Path.Add(new Coord(User.GoalX, User.GoalY));

* * * * * * while (true)
* * * * * * {
* * * * * * * * Point lowestPoint = Point.Empty;
* * * * * * * * int lowest = 100;

* * * * * * * * foreach (Point movePoint in ValidMoves(goalX, goalY))
* * * * * * * * {
* * * * * * * * * * int count = Squares[movePoint.X, movePoint.Y].DistanceSteps;

* * * * * * * * * * if (count < lowest)
* * * * * * * * * * {
* * * * * * * * * * * * lowest = count;

* * * * * * * * * * * * lowestPoint.X = movePoint.X;
* * * * * * * * * * * * lowestPoint.Y = movePoint.Y;
* * * * * * * * * * }
* * * * * * * * }

* * * * * * * * if (lowest != 100)
* * * * * * * * {
* * * * * * * * * * Squares[lowestPoint.X, lowestPoint.Y].IsPath = true;
* * * * * * * * * * goalX = lowestPoint.X;
* * * * * * * * * * goalY = lowestPoint.Y;

* * * * * * * * * * Path.Add(new Coord(lowestPoint.X, lowestPoint.Y));
* * * * * * * * }
* * * * * * * * else
* * * * * * * * {
* * * * * * * * * * break;
* * * * * * * * }

* * * * * * * * if (goalX == UserX && goalY == UserY)
* * * * * * * * {
* * * * * * * * * * break;
* * * * * * * * }
* * * * * * }

* * * * * * return Path;
* * * * }

* * * * private Boolean IsSquareOpen(int x, int y, Boolean CheckHeight)
* * * * {
* * * * * * if (Room.ValidTile(x, y) && User.AllowOverride)
* * * * * * {
* * * * * * * * return true;
* * * * * * }

* * * * * * if (User.X == x && User.Y == y)
* * * * * * {
* * * * * * * * return true;
* * * * * * }

* * * * * * bool isLastStep = false;

* * * * * * if (User.GoalX == x && User.GoalY == y)
* * * * * * {
* * * * * * * * isLastStep = true;
* * * * * * }

* * * * * * if (!Room.CanWalk(x, y, 0, isLastStep))
* * * * * * {
* * * * * * * * return false;
* * * * * * }

* * * * * * return true;
* * * * }

* * * * private Boolean ValidCoordinates(int x, int y)
* * * * {
* * * * * * if (x < 0 || y < 0 || x > mapSizeX || y > mapSizeY)
* * * * * * {
* * * * * * * * return false;
* * * * * * }

* * * * * * return true;
* * * * }

* * * * public void InitMovements(int movementCount)
* * * * {
* * * * * * if (movementCount == 4)
* * * * * * {
* * * * * * * * Movements = new Point[]
* * * * * * * * {
* * * * * * * * * * new Point(0, -1),
* * * * * * * * * * new Point(1, 0),
* * * * * * * * * * new Point(0, 1),
* * * * * * * * * * new Point(-1, 0),
* * * * * * * * * * new Point(-1, -1),
* * * * * * * * * * new Point(1, -1),
* * * * * * * * * * new Point(1, 1),
* * * * * * * * * * new Point(-1, 1)
* * * * * * * * };
* * * * * * }
* * * * * * else
* * * * * * {
* * * * * * * * Movements = new Point[]
* * * * * * * * {
* * * * * * * * * * new Point(0, -1),
* * * * * * * * * * new Point(1, 0),
* * * * * * * * * * new Point(0, 1),
* * * * * * * * * * new Point(-1, 0),
* * * * * * * * * * new Point(-1, -1),
* * * * * * * * * * new Point(1, -1),
* * * * * * * * * * new Point(1, 1),
* * * * * * * * * * new Point(-1, 1)
* * * * * * * * };
* * * * * * }
* * * * }
* * }

* * class CompleteSquare
* * {
* * * * public int x = 0;
* * * * public int y = 0;

* * * * int _distanceSteps = 100;

* * * * public int DistanceSteps
* * * * {
* * * * * * get { return _distanceSteps; }
* * * * * * set { _distanceSteps = value; }
* * * * }

* * * * bool _isPath = false;

* * * * public bool IsPath
* * * * {
* * * * * * get { return _isPath; }
* * * * * * set { _isPath = value; }
* * * * }

* * * * public CompleteSquare(int x, int y)
* * * * {
* * * * * * this.x = x;
* * * * * * this.y = y;
* * * * }
* * }
}

Where shall i put it? ;P
 

Users who are viewing this thread

Top