diff --git a/Source/Game/Entities/Transport.cs b/Source/Game/Entities/Transport.cs index 4c88cecc1..d656ee46a 100644 --- a/Source/Game/Entities/Transport.cs +++ b/Source/Game/Entities/Transport.cs @@ -591,18 +591,22 @@ namespace Game.Entities void LoadStaticPassengers() { uint mapId = (uint)GetGoInfo().MoTransport.SpawnMap; + if (mapId == 0) + return; + var cells = Global.ObjectMgr.GetMapObjectGuids(mapId, GetMap().GetDifficultyID()); if (cells == null) return; - foreach (var cell in cells) - { - // Creatures on transport - foreach (var npc in cell.Value.creatures) - CreateNPCPassenger(npc, Global.ObjectMgr.GetCreatureData(npc)); + foreach (var (_, guids) in cells) + { // GameObjects on transport - foreach (var go in cell.Value.gameobjects) - CreateGOPassenger(go, Global.ObjectMgr.GetGameObjectData(go)); + foreach (var spawnId in guids.gameobjects) + CreateGOPassenger(spawnId, Global.ObjectMgr.GetGameObjectData(spawnId)); + + // Creatures on transport + foreach (var spawnId in guids.creatures) + CreateNPCPassenger(spawnId, Global.ObjectMgr.GetCreatureData(spawnId)); } } diff --git a/Source/Game/Garrisons/Garrisons.cs b/Source/Game/Garrisons/Garrisons.cs index 90eadfb48..cb4951cb9 100644 --- a/Source/Game/Garrisons/Garrisons.cs +++ b/Source/Game/Garrisons/Garrisons.cs @@ -738,20 +738,24 @@ namespace Game.Garrisons if (go.GetGoType() == GameObjectTypes.GarrisonBuilding && go.GetGoInfo().GarrisonBuilding.SpawnMap != 0) { - foreach (var cellGuids in Global.ObjectMgr.GetMapObjectGuids((uint)go.GetGoInfo().GarrisonBuilding.SpawnMap, map.GetDifficultyID())) + var cells = Global.ObjectMgr.GetMapObjectGuids((uint)go.GetGoInfo().GarrisonBuilding.SpawnMap, map.GetDifficultyID()); + if (cells != null) { - foreach (var spawnId in cellGuids.Value.creatures) + foreach (var (_, guids) in cells) { - Creature spawn = BuildingSpawnHelper(go, spawnId, map); - if (spawn != null) - BuildingInfo.Spawns.Add(spawn.GetGUID()); - } + foreach (var spawnId in guids.creatures) + { + Creature spawn = BuildingSpawnHelper(go, spawnId, map); + if (spawn != null) + BuildingInfo.Spawns.Add(spawn.GetGUID()); + } - foreach (var spawnId in cellGuids.Value.gameobjects) - { - GameObject spawn = BuildingSpawnHelper(go, spawnId, map); - if (spawn != null) - BuildingInfo.Spawns.Add(spawn.GetGUID()); + foreach (var spawnId in guids.gameobjects) + { + GameObject spawn = BuildingSpawnHelper(go, spawnId, map); + if (spawn != null) + BuildingInfo.Spawns.Add(spawn.GetGUID()); + } } } } diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 5a8ddb4c5..911901c12 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -10376,16 +10376,15 @@ namespace Game { var key = (mapid, difficulty); - if (mapObjectGuidsStore.ContainsKey(key) && mapObjectGuidsStore[key].ContainsKey(cellid)) - return mapObjectGuidsStore[key][cellid]; + if (mapObjectGuidsStore.ContainsKey(key) && mapObjectGuidsStore[key].TryGetValue(cellid, out CellObjectGuids guids)) + return guids; return null; } public Dictionary GetMapObjectGuids(uint mapid, Difficulty difficulty) { - var key = (mapid, difficulty); - return mapObjectGuidsStore.LookupByKey(key); + return mapObjectGuidsStore.LookupByKey((mapid, difficulty)); } public PageText GetPageText(uint pageEntry) diff --git a/Source/Game/Maps/ObjectGridLoader.cs b/Source/Game/Maps/ObjectGridLoader.cs index d15c25baa..f2accf375 100644 --- a/Source/Game/Maps/ObjectGridLoader.cs +++ b/Source/Game/Maps/ObjectGridLoader.cs @@ -101,20 +101,16 @@ namespace Game.Maps { CellCoord cellCoord = i_cell.GetCellCoord(); CellObjectGuids cellguids = Global.ObjectMgr.GetCellObjectGuids(i_map.GetId(), i_map.GetDifficultyID(), cellCoord.GetId()); - if (cellguids == null) - return; - - LoadHelper(cellguids.gameobjects, cellCoord, ref i_gameObjects, i_map); + if (cellguids != null) + LoadHelper(cellguids.gameobjects, cellCoord, ref i_gameObjects, i_map); } public override void Visit(IList objs) { CellCoord cellCoord = i_cell.GetCellCoord(); CellObjectGuids cellguids = Global.ObjectMgr.GetCellObjectGuids(i_map.GetId(), i_map.GetDifficultyID(), cellCoord.GetId()); - if (cellguids == null) - return; - - LoadHelper(cellguids.creatures, cellCoord, ref i_creatures, i_map); + if (cellguids != null) + LoadHelper(cellguids.creatures, cellCoord, ref i_creatures, i_map); } public override void Visit(IList objs) @@ -221,7 +217,7 @@ namespace Game.Maps { // stop any fights at grid de-activation and remove dynobjects/areatriggers created at cast by creatures for (var i = 0; i < objs.Count; ++i) - { + { Creature creature = objs[i]; creature.RemoveAllDynObjects(); creature.RemoveAllAreaTriggers(); @@ -274,7 +270,7 @@ namespace Game.Maps obj.SetDestroyedObject(true); obj.CleanupsBeforeDelete(); - } + } } }