Closed Retriman closed 11 years ago
Fixed Crash in getTileAt and prevent memory leak in instance thanks TC Users. Fix Evade System in mmaps system.
diff --git a/dep/recastlite/Detour/DetourNavMesh.cpp b/dep/recastlite/Detour/DetourNavMesh.cpp index ca279b5..ea3cfeb 100644 --- a/dep/recastlite/Detour/DetourNavMesh.cpp +++ b/dep/recastlite/Detour/DetourNavMesh.cpp @@ -27,6 +27,14 @@ #include "DetourAssert.h" #include <new> +#ifdef _WIN32 +#include <io.h> +#define F_OK 0 +#else +#include <unistd.h> +#endif +#include <errno.h> + inline bool overlapSlabs(const float* amin, const float* amax, const float* bmin, const float* bmax, const float px, const float py) { @@ -817,11 +825,28 @@ dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, dtTile const dtMeshTile* dtNavMesh::getTileAt(int x, int y) const { + if ((x < -100000 || x > 100000) || (y < -100000 || y > 100000)) + return 0; + // Find tile based on hash. - int h = computeTileHash(x, y, m_tileLutMask); + int h = computeTileHash(x,y,m_tileLutMask); + access ((char*)(m_posLookup+h),F_OK); + if (errno==14) + return 0; dtMeshTile* tile = m_posLookup[h]; + while (tile) { + if (sizeof(*tile)!=sizeof(dtMeshTile)) + return 0; + if (sizeof(*tile->header)!=sizeof(dtMeshHeader)) + return 0; + access ((char*)tile,F_OK); + if (errno==14) + return 0; + access ((char*)tile->header,F_OK); + if (errno==14) + return 0; if (tile->header && tile->header->x == x && tile->header->y == y) return tile; tile = tile->next; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 8962cf7..fd792c8 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -71,7 +71,6 @@ Map::~Map() if (!m_scriptSchedule.empty()) sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); - MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); MMAP::MMapFactory::createOrGetMMapManager()->unloadMapInstance(GetId(), i_InstanceId); } diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 9d49e49..3c63487 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -215,6 +215,17 @@ template<class T> void ChaseMovementGenerator<T>::Finalize(T &owner) { owner.ClearUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); + + if (owner.GetTypeId() == TYPEID_UNIT && !((Creature*)&owner)->isPet() && owner.isAlive()) + owner.GetMotionMaster()->MoveTargetedHome(); + { + if (!owner.isInCombat() || ( this->i_target.getTarget() && !this->i_target.getTarget()->isInAccessiblePlaceFor(((Creature*)&owner)))) + { + if (owner.isInCombat()) + owner.CombatStop(true); + owner.GetMotionMaster()->MoveTargetedHome(); + } + } } template<class T>
Fixed Crash in getTileAt and prevent memory leak in instance thanks TC Users. Fix Evade System in mmaps system.