begin
Self.MoveTo(Creature.X - 2, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y - 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y - 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y - 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y - 3, Creature.Z);
end;
end;
//East of Creature
if (Creature.X < Self.X) and (Creature.Y = Self.Y) then
begin
Tile:=GetTileFromXYZ(Self.X, Creature.Y -1, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Self.X, Creature.Y -1, Creature.Z)) then
begin
Self.MoveTo(Self.X, Creature.Y -1, Creature.Z);
end;
Tile:=GetTileFromXYZ(Self.X, Creature.Y + 1, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Self.X, Creature.Y + 1, Creature.Z)) then
begin
Self.MoveTo(Self.X, Creature.Y + 1, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y - 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y - 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y + 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y + 3, Creature.Z);
end;
end;
//South of Creature
if (Creature.X = Self.X) and (Creature.Y < Self.Y) then
begin
Tile:=GetTileFromXYZ(Creature.X - 1, Self.Y, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 1, Self.Y, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 1, Self.Y, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 1, Self.Y, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 1, Self.Y, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 1, Self.Y, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 2, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 2, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 2, Creature.Y + 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X + 3, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X + 3, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X + 3, Creature.Y + 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y + 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y + 3, Creature.Z);
end;
end;
//West of Creature
if (Creature.X > Self.X) and (Creature.Y = Self.Y) then
begin
Tile:=GetTileFromXYZ(Self.X, Creature.Y - 1, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Self.X, Creature.Y - 1, Creature.Z)) then
begin
Self.MoveTo(Self.X, Creature.Y - 1, Creature.Z);
end;
Tile:=GetTileFromXYZ(Self.X, Creature.Y + 1, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Self.X, Creature.Y + 1, Creature.Z)) then
begin
Self.MoveTo(Self.X, Creature.Y + 1, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y + 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y + 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y + 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y + 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y + 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y + 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y + 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 2, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 2, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 2, Creature.Y - 3, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y - 2, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y - 2, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y - 2, Creature.Z);
end;
Tile:=GetTileFromXYZ(Creature.X - 3, Creature.Y - 3, Creature.Z);
if (Tile<>nil) and (TileIsWalkable(Creature.X - 3, Creature.Y - 3, Creature.Z)) then
begin
Self.MoveTo(Creature.X - 3, Creature.Y - 3, Creature.Z);
end;
end;
end;
//Diagonal if higher than Attackat health and 1sqm away
Creature := GetCreatureByID(Self.Attacking);
if Terminated=True then exit;
if (Creature <> nil) and (MoveFromRange) then
if (Creature.Health>AttackAt) then
if (Creature.Name=Wanted) or (Creature.Name=Wanted2) then
//// Add more monsters here in the same format if you want to be diagonal from them
//// make sure to add them also to the constant list at the top.
if (abs(Creature.X-self.X) <= 1) and (abs(Creature.Y-self.Y) <= 1) then
begin
if (Self.X<>Creature.X) and (Self.Y=Creature.Y) then
begin
Tile:=GetTileFromXYZ(Self.x,Self.y-1,self.z);
if Tile<>nil then
if TileIsWalkable(Self.x,Self.y-1,self.z) then
begin
Self.MoveUp;
Moved:=true;
end;
If (Moved=False) then
begin
Tile:=GetTileFromXYZ(Self.x,Self.y+1,self.z);
if Tile<>nil then
if TileIsWalkable(Self.x,Self.y+1,self.z) then
Self.MoveDown;
end;
end;
Moved:=false;
if (Self.X=Creature.X) and (Self.Y<>Creature.Y) then
begin
Tile:=GetTileFromXYZ(Self.x-1,Self.y,self.z);
if Tile<>nil then
if TileIsWalkable(Self.x-1,Self.y,self.z) then
begin
Self.MoveLeft;
Moved:=true;
end;
If (Moved=False) then
begin
Tile:=GetTileFromXYZ(Self.x+1,Self.y,self.z);
if Tile<>nil then
if TileIsWalkable(Self.x+1,Self.y,self.z) then
Self.MoveRight;
end;
end;
end;
end;
sleep(500);
end;
end;