diff --git a/Source/Game/AI/SmartScripts/SmartAIManager.cs b/Source/Game/AI/SmartScripts/SmartAIManager.cs index dfc59197a..968e1d7a9 100644 --- a/Source/Game/AI/SmartScripts/SmartAIManager.cs +++ b/Source/Game/AI/SmartScripts/SmartAIManager.cs @@ -1841,7 +1841,7 @@ namespace Game.AI return false; } - if (areaEntry.ParentAreaID != 0) + if (areaEntry.ParentAreaID != 0 && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone)) { Log.outError(LogFilter.Sql, $"SmartAIMgr: {e} uses subzone (ID: {e.Action.overrideLight.zoneId}) instead of zone, skipped."); return false; @@ -1870,7 +1870,7 @@ namespace Game.AI return false; } - if (areaEntry.ParentAreaID != 0) + if (areaEntry.ParentAreaID != 0 && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone)) { Log.outError(LogFilter.Sql, $"SmartAIMgr: {e} uses subzone (ID: {e.Action.overrideWeather.zoneId}) instead of zone, skipped."); return false; diff --git a/Source/Game/Chat/CommandManager.cs b/Source/Game/Chat/CommandManager.cs index 5253b4756..d7d33e0b1 100644 --- a/Source/Game/Chat/CommandManager.cs +++ b/Source/Game/Chat/CommandManager.cs @@ -331,9 +331,12 @@ namespace Game.Chat { Locale locale = session.GetSessionDbcLocale(); areaName = area.AreaName[locale]; - var zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID); - if (zone != null) - zoneName = zone.AreaName[locale]; + if (area.GetFlags().HasFlag(AreaFlags.IsSubzone)) + { + var zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID); + if (zone != null) + zoneName = zone.AreaName[locale]; + } } Log.outCommand(session.GetAccountId(), $"Command: {cmdStr} [Player: {player.GetName()} ({player.GetGUID()}) (Account: {session.GetAccountId()}) " + diff --git a/Source/Game/Chat/Commands/GoCommands.cs b/Source/Game/Chat/Commands/GoCommands.cs index 4f9ced66e..c1a069179 100644 --- a/Source/Game/Chat/Commands/GoCommands.cs +++ b/Source/Game/Chat/Commands/GoCommands.cs @@ -405,14 +405,16 @@ namespace Game.Chat.Commands } // update to parent zone if exist (client map show only zones without parents) - AreaTableRecord zoneEntry = areaEntry.ParentAreaID != 0 ? CliDB.AreaTableStorage.LookupByKey(areaEntry.ParentAreaID) : areaEntry; + var zoneEntry = areaEntry.ParentAreaID != 0 && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone) + ? CliDB.AreaTableStorage.LookupByKey(areaEntry.ParentAreaID) + : areaEntry; Cypher.Assert(zoneEntry != null); x /= 100.0f; y /= 100.0f; TerrainInfo terrain = Global.TerrainMgr.LoadTerrain(zoneEntry.ContinentID); - if (!Global.DB2Mgr.Zone2MapCoordinates(areaEntry.ParentAreaID != 0 ? areaEntry.ParentAreaID : areaId, ref x, ref y)) + if (!Global.DB2Mgr.Zone2MapCoordinates(zoneEntry.Id, ref x, ref y)) { handler.SendSysMessage(CypherStrings.InvalidZoneMap, areaId, areaEntry.AreaName[handler.GetSessionDbcLocale()], terrain.GetId(), terrain.GetMapName()); return false; @@ -545,7 +547,7 @@ namespace Game.Chat.Commands { GameObjectData spawnpoint = null; foreach (var pair in Global.ObjectMgr.GetAllGameObjectData()) - { + { if (pair.Value.Id != goId) continue; diff --git a/Source/Game/Chat/Commands/GroupCommands.cs b/Source/Game/Chat/Commands/GroupCommands.cs index 4b445d03c..962466102 100644 --- a/Source/Game/Chat/Commands/GroupCommands.cs +++ b/Source/Game/Chat/Commands/GroupCommands.cs @@ -203,7 +203,7 @@ namespace Game.Chat phases = PhasingHandler.FormatPhases(player.GetPhaseShift()); AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(player.GetAreaId()); - if (area != null) + if (area != null && area.GetFlags().HasFlag(AreaFlags.IsSubzone)) { AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID); if (zone != null) diff --git a/Source/Game/Chat/Commands/MiscCommands.cs b/Source/Game/Chat/Commands/MiscCommands.cs index d11c7c6af..a496ac6fa 100644 --- a/Source/Game/Chat/Commands/MiscCommands.cs +++ b/Source/Game/Chat/Commands/MiscCommands.cs @@ -213,7 +213,7 @@ namespace Game.Chat } [CommandNonGroup("damage", RBACPermissions.CommandDamage)] - static bool HandleDamageCommand(CommandHandler handler, uint damage, SpellSchools? school, [OptionalArg]SpellInfo spellInfo) + static bool HandleDamageCommand(CommandHandler handler, uint damage, SpellSchools? school, [OptionalArg] SpellInfo spellInfo) { Unit target = handler.GetSelectedUnit(); if (target == null || handler.GetSession().GetPlayer().GetTarget().IsEmpty()) @@ -784,7 +784,7 @@ namespace Game.Chat uint zoneId = player.GetZoneId(); AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId); - if (areaEntry == null || areaEntry.ParentAreaID != 0) + if (areaEntry == null || areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone)) { handler.SendSysMessage(CypherStrings.CommandGraveyardwrongzone, graveyardId, zoneId); return false; @@ -1102,7 +1102,7 @@ namespace Game.Chat } [CommandNonGroup("pinfo", RBACPermissions.CommandPinfo, true)] - static bool HandlePInfoCommand(CommandHandler handler, [OptionalArg]PlayerIdentifier arg) + static bool HandlePInfoCommand(CommandHandler handler, [OptionalArg] PlayerIdentifier arg) { if (arg == null) arg = PlayerIdentifier.FromTargetOrSelf(handler); @@ -1403,11 +1403,14 @@ namespace Game.Chat { zoneName = area.AreaName[locale]; - AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID); - if (zone != null) + if (area.GetFlags().HasFlag(AreaFlags.IsSubzone)) { - areaName = zoneName; - zoneName = zone.AreaName[locale]; + AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID); + if (zone != null) + { + areaName = zoneName; + zoneName = zone.AreaName[locale]; + } } } diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index d8cd89bc4..bbac3ea55 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -1348,7 +1348,7 @@ namespace Game return false; } - if (areaEntry.ParentAreaID != 0) + if (areaEntry.ParentAreaID != 0 && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone)) { Log.outError(LogFilter.Sql, "{0} requires to be in area ({1}) which is a subzone but zone expected, skipped.", cond.ToString(true), cond.ConditionValue1); return false; diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 0841838d6..7a3a1e656 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -114,7 +114,7 @@ namespace Game.Entities var area = CliDB.AreaTableStorage.LookupByKey(m_areaId); if (area != null) - if (area.ParentAreaID != 0) + if (area.ParentAreaID != 0 && area.GetFlags().HasFlag(AreaFlags.IsSubzone)) m_zoneId = area.ParentAreaID; m_outdoors = data.outdoors; diff --git a/Source/Game/Maps/TerrainManager.cs b/Source/Game/Maps/TerrainManager.cs index d6d3ddc96..73198cdb0 100644 --- a/Source/Game/Maps/TerrainManager.cs +++ b/Source/Game/Maps/TerrainManager.cs @@ -785,7 +785,7 @@ namespace Game.Maps uint areaId = GetAreaId(phaseShift, mapId, x, y, z, dynamicMapTree); var area = CliDB.AreaTableStorage.LookupByKey(areaId); if (area != null) - if (area.ParentAreaID != 0) + if (area.ParentAreaID != 0 && area.GetFlags().HasFlag(AreaFlags.IsSubzone)) return area.ParentAreaID; return areaId; @@ -798,7 +798,7 @@ namespace Game.Maps areaid = zoneid = GetAreaId(phaseShift, mapId, x, y, z, dynamicMapTree); var area = CliDB.AreaTableStorage.LookupByKey(areaid); if (area != null) - if (area.ParentAreaID != 0) + if (area.ParentAreaID != 0 && area.GetFlags().HasFlag(AreaFlags.IsSubzone)) zoneid = area.ParentAreaID; }