Core/MMaps: Fixed pathing for objects that have terrain swaps active
Port From (https://github.com/TrinityCore/TrinityCore/commit/86725ed9267803506d8a5cab04c2c5641a234dd9)
This commit is contained in:
@@ -132,25 +132,25 @@ namespace Game
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool LoadMapInstance(string basePath, uint mapId, uint instanceId)
|
||||
public bool LoadMapInstance(string basePath, uint meshMapId, uint instanceMapId, uint instanceId)
|
||||
{
|
||||
if (!LoadMapData(basePath, mapId))
|
||||
if (!LoadMapData(basePath, meshMapId))
|
||||
return false;
|
||||
|
||||
MMapData mmap = loadedMMaps[mapId];
|
||||
if (mmap.navMeshQueries.ContainsKey(instanceId))
|
||||
MMapData mmap = loadedMMaps[meshMapId];
|
||||
if (mmap.navMeshQueries.ContainsKey((instanceMapId, instanceId)))
|
||||
return true;
|
||||
|
||||
// allocate mesh query
|
||||
Detour.dtNavMeshQuery query = new();
|
||||
if (Detour.dtStatusFailed(query.init(mmap.navMesh, 1024)))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "MMAP.GetNavMeshQuery: Failed to initialize dtNavMeshQuery for mapId {0:D4} instanceId {1}", mapId, instanceId);
|
||||
Log.outError(LogFilter.Maps, $"MMAP.GetNavMeshQuery: Failed to initialize dtNavMeshQuery for mapId {instanceMapId:D4} instanceId {instanceId}");
|
||||
return false;
|
||||
}
|
||||
|
||||
Log.outDebug(LogFilter.Maps, "MMAP.GetNavMeshQuery: created dtNavMeshQuery for mapId {0:D4} instanceId {1}", mapId, instanceId);
|
||||
mmap.navMeshQueries.Add(instanceId, query);
|
||||
Log.outDebug(LogFilter.Maps, $"MMAP.GetNavMeshQuery: created dtNavMeshQuery for mapId {instanceMapId:D4} instanceId {instanceId}");
|
||||
mmap.navMeshQueries.Add((instanceMapId, instanceId), query);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -226,25 +226,25 @@ namespace Game
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool UnloadMapInstance(uint mapId, uint instanceId)
|
||||
public bool UnloadMapInstance(uint meshMapId, uint instanceMapId, uint instanceId)
|
||||
{
|
||||
// check if we have this map loaded
|
||||
MMapData mmap = GetMMapData(mapId);
|
||||
MMapData mmap = GetMMapData(meshMapId);
|
||||
if (mmap == null)
|
||||
{
|
||||
// file may not exist, therefore not loaded
|
||||
Log.outDebug(LogFilter.Maps, "MMAP:unloadMapInstance: Asked to unload not loaded navmesh map {0}", mapId);
|
||||
Log.outDebug(LogFilter.Maps, $"MMAP:unloadMapInstance: Asked to unload not loaded navmesh map {meshMapId}");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mmap.navMeshQueries.ContainsKey(instanceId))
|
||||
if (!mmap.navMeshQueries.ContainsKey((instanceMapId, instanceId)))
|
||||
{
|
||||
Log.outDebug(LogFilter.Maps, "MMAP:unloadMapInstance: Asked to unload not loaded dtNavMeshQuery mapId {0} instanceId {1}", mapId, instanceId);
|
||||
Log.outDebug(LogFilter.Maps, $"MMAP:unloadMapInstance: Asked to unload not loaded dtNavMeshQuery mapId {instanceMapId} instanceId {instanceId}");
|
||||
return false;
|
||||
}
|
||||
|
||||
mmap.navMeshQueries.Remove(instanceId);
|
||||
Log.outInfo(LogFilter.Maps, "MMAP:unloadMapInstance: Unloaded mapId {0} instanceId {1}", mapId, instanceId);
|
||||
mmap.navMeshQueries.Remove((instanceMapId, instanceId));
|
||||
Log.outInfo(LogFilter.Maps, $"MMAP:unloadMapInstance: Unloaded mapId {instanceMapId} instanceId {instanceId}");
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -258,13 +258,13 @@ namespace Game
|
||||
return mmap.navMesh;
|
||||
}
|
||||
|
||||
public Detour.dtNavMeshQuery GetNavMeshQuery(uint mapId, uint instanceId)
|
||||
public Detour.dtNavMeshQuery GetNavMeshQuery(uint meshMapId, uint instanceMapId, uint instanceId)
|
||||
{
|
||||
MMapData mmap = GetMMapData(mapId);
|
||||
MMapData mmap = GetMMapData(meshMapId);
|
||||
if (mmap == null)
|
||||
return null;
|
||||
|
||||
return mmap.navMeshQueries.LookupByKey(instanceId);
|
||||
return mmap.navMeshQueries.LookupByKey((instanceMapId, instanceId));
|
||||
}
|
||||
|
||||
public uint GetLoadedTilesCount() { return loadedTiles; }
|
||||
@@ -283,7 +283,7 @@ namespace Game
|
||||
navMesh = mesh;
|
||||
}
|
||||
|
||||
public Dictionary<uint, Detour.dtNavMeshQuery> navMeshQueries = new(); // instanceId to query
|
||||
public Dictionary<(uint, uint), Detour.dtNavMeshQuery> navMeshQueries = new(); // instanceId to query
|
||||
|
||||
public Detour.dtNavMesh navMesh;
|
||||
public Dictionary<uint, ulong> loadedTileRefs = new(); // maps [map grid coords] to [dtTile]
|
||||
|
||||
Reference in New Issue
Block a user