
Originally Posted by
Harmonic
Pathfinder needs fixing asap Quackster, the issue results in quite buggy walking (clicking another square while moving causes glitching.)
That's quite funny because I was going to post updates about my improvements of the pathfinder.. 
--
Updates
- Fixed search crashing.
- You can now cleanly change to another title. The hotel has been updated. Thanks to Goir for teaching me about the FutureTask method.
Code:
package sierra.habbohotel.room.threading;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.FutureTask;
import sierra.habbo.session.Session;
import sierra.habbohotel.furniture.FurnitureWalkOn;
import sierra.habbohotel.pathfinder.Coord;
import sierra.habbohotel.pathfinder.Rotation;
import sierra.habbohotel.room.flooritems.FloorItem;
public class WalkUser implements Runnable
{
private Session Session;
private List<Coord> it;
private FutureTask<?> Task;
public WalkUser(Session Session, List<Coord> it)
{
this.Session = Session;
this.it = it;
}
public void setTask(FutureTask<?> Task) {
this.Task = Task;
}
@Override
public void run() {
try{
Iterator<?> iterator = it.iterator();
while (iterator.hasNext() && Session.getRoomUser().isWalking())
{
Coord Next = (Coord)iterator.next();
if(Next.X == Session.getRoomUser().getModel().getDoorX() && Next.Y == Session.getRoomUser().getModel().getDoorY()) {
Session.getRoomUser().getRoom().LeaveRoom(true, false, Session);
}
Session.getRoomUser().getStatus().clear();
int Rot = Rotation.Calculate(Session.getRoomUser().getX(), Session.getRoomUser().getY(), Next.X, Next.Y);
Session.getRoomUser().setBodyRotation(Rot);
Session.getRoomUser().getStatus().put("mv", String.valueOf(Next.X).concat(",").concat(String.valueOf(Next.Y)).concat(",").concat(String.valueOf(Session.getRoomUser().getModel().getSquareHeight()[Next.X][Next.Y])));
Session.getRoomUser().updateStatus();
Session.getRoomUser().setX(Next.X);
Session.getRoomUser().setY(Next.Y);
Session.getRoomUser().setHeight(Session.getRoomUser().getModel().getSquareHeight()[Next.X][Next.Y]);
Session.getRoomUser().setIsWalking(true);
Thread.sleep(500);
List<FloorItem> Items = Session.getRoomUser().getRoom().getItemListByCoords(Session.getRoomUser().getX(), Session.getRoomUser().getY());
for (FloorItem Item : Items)
{
Session.getRoomUser().getStatus().clear();
if (!FurnitureWalkOn.walkedOnItem(Item, Session))
stop(false);
}
if (Session.getRoomUser().getGoalX() == Next.X && Session.getRoomUser().getY() == Next.Y && Session.getRoomUser().isWalking()) {
stop(true);
break;
}
}
}
catch(Exception e)
{
}
}
public void stop(Boolean Cancel)
{
Session.getRoomUser().setIsWalking(false);
Session.getRoomUser().getStatus().remove("mv");
Session.getRoomUser().updateStatus();
if (Cancel)
Task.cancel(true);
}
}