private static void CalculateEntityAreaData() { log.Info("Calculating area information for entities..."); var mapFiles = new Dictionary <ushort, MapFile>(); var entities = new HashSet <EntityModel>(); foreach (EntityModel model in WorldDatabase.GetEntitiesWithoutArea()) { entities.Add(model); if (!mapFiles.TryGetValue(model.World, out MapFile mapFile)) { WorldEntry entry = GameTableManager.World.GetEntry(model.World); mapFile = BaseMap.LoadMapFile(entry.AssetPath); mapFiles.Add(model.World, mapFile); } uint worldAreaId = mapFile.GetWorldAreaId(new Vector3(model.X, model.Y, model.Z)); model.Area = (ushort)worldAreaId; log.Info($"Calculated area {worldAreaId} for entity {model.Id}."); } WorldDatabase.UpdateEntities(entities); log.Info($"Calculated area information for {entities.Count} {(entities.Count == 1 ? "entity" : "entities")}."); }