diff --git a/src/otclient/core/creature.cpp b/src/otclient/core/creature.cpp index 86ec8f42..969275c4 100644 --- a/src/otclient/core/creature.cpp +++ b/src/otclient/core/creature.cpp @@ -376,10 +376,7 @@ void Creature::updateWalkingTile() // only render creatures where bottom right is inside tile rect if(virtualTileRect.contains(virtualCreatureRect.bottomRight())) { - const TilePtr& tile = g_map.getTile(m_position.translated(xi, yi, 0)); - if(!tile) - continue; - newWalkingTile = tile; + newWalkingTile = g_map.getOrCreateTile(m_position.translated(xi, yi, 0)); } } } diff --git a/src/otclient/core/map.cpp b/src/otclient/core/map.cpp index 0f4e7f44..5bf67f12 100644 --- a/src/otclient/core/map.cpp +++ b/src/otclient/core/map.cpp @@ -266,9 +266,6 @@ void Map::addCreature(const CreaturePtr& creature) CreaturePtr Map::getCreatureById(uint32 id) { - LocalPlayerPtr localPlayer = g_game.getLocalPlayer(); - if(localPlayer && localPlayer->getId() == id) - return localPlayer; auto it = m_knownCreatures.find(id); if(it == m_knownCreatures.end()) return nullptr; diff --git a/src/otclient/core/tile.cpp b/src/otclient/core/tile.cpp index 29159072..22b3b849 100644 --- a/src/otclient/core/tile.cpp +++ b/src/otclient/core/tile.cpp @@ -170,6 +170,11 @@ ThingPtr Tile::addThing(const ThingPtr& thing, int stackPos) int priority = thing->getStackPriority(); for(stackPos = 0; stackPos < (int)m_things.size(); ++stackPos) { int otherPriority = m_things[stackPos]->getStackPriority(); +#if PROTOCOL<=810 + // older protocols stores creatures in reverse order + if(priority == 4 && otherPriority == 4) + break; +#endif if(otherPriority > priority) break; } diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index db4050a9..fe9c6542 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -388,6 +388,7 @@ void ProtocolGame::parseMapMoveWest(InputMessage& msg) void ProtocolGame::parseUpdateTile(InputMessage& msg) { Position tilePos = parsePosition(msg); + g_map.cleanTile(tilePos); int thingId = msg.getU16(true); if(thingId == 0xFF01) { msg.getU16(); @@ -1161,8 +1162,6 @@ void ProtocolGame::setFloorDescription(InputMessage& msg, int32 x, int32 y, int3 void ProtocolGame::setTileDescription(InputMessage& msg, Position position) { - g_map.cleanTile(position); - int stackPos = 0; while(true) { int inspectItemId = msg.getU16(true);