Hello,
I'm trying to use client.Map.GetTilesOnSameFloor() but it returns an error on GetTileWithPlayer().
"NullReferenceException was unhandled
Object reference not set to an instance of an object."
playerTile returns null
client.PlayerLocation returns {(32535, 31534, 7)}
Map.MapPointer = 0x5E6E88 + BaseAddress;
I'm using GetTile() TibiaAPI's current code by blaster_89.
http://tpforums.org/forum/thread-9196-page-9.html
It returns that erro when i use the following codes...
Code:
Tile tile = client.Map.GetTilesOnSameFloor().First(t => t.Location.Equals(new Location(Variables.Player.X, (Variables.Player.Y + 1), Variables.Player.Z)));
Code:
Tile tile = client.Map.GetTile(new Location(Variables.Player.X, (Variables.Player.Y -1), Variables.Player.Z));
Code:
public Tile GetTileWithPlayer()
{
if (playerTile == null || playerTile.Location != client.PlayerLocation)
{
uint playerId = client.Player.Id;
playerTile = GetTiles(false, false).FirstOrDefault(
t => t.Objects.Any(
o => o.Id == 0x63 && o.Data == playerId));
playerTile.Location = client.PlayerLocation;
}
return playerTile;
}
Code:
private Tile GetTile(Location worldLocation, Tile playerTile)
{
// All credits goes to blaster_89 who solved this.
if (playerTile == null) { playerTile = GetTileWithPlayer(); }
Location memLoc = worldLocation.ToMemoryLocation(playerTile, client);
uint num = memLoc.ToTileNumber();
int minFloor = 0, maxFloor = 0;
for (int i = 0; i < 8; i++)
{
if (playerTile.TileNumber >= Addresses.Map.MaxTiles * i &&
playerTile.TileNumber <= Addresses.Map.MaxTiles * (i + 1))
{
minFloor = Convert.ToInt32(Addresses.Map.MaxTiles * i);
maxFloor = Convert.ToInt32(Addresses.Map.MaxTiles * (i + 1) - 1);
break;
}
}
if (num > maxFloor) { num = Convert.ToUInt32(num - maxFloor + minFloor - 1); }
else if (num < minFloor) { num = Convert.ToUInt32(maxFloor - minFloor + num + 1); }
return GetTile(num, playerTile);
}