diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-10-06 20:22:14 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-10-06 20:22:14 +0200 |
commit | 0ce96adb7a8ae29a577cce268c8bd3742253cf69 (patch) | |
tree | 11baa1795dd2258c7dc4047b536ccdfd9314eaa4 /src | |
parent | f774c4e855b372676190279b2bc1ba12ed15f028 (diff) |
Core/Objects: Treat areas that have ParentAreaID filled but dont have IsSubzone flag as zones instead of areas
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommand.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Maps/TerrainMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_go.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_group.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 13 |
9 files changed, 25 insertions, 18 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index b20f669bcd8..5ab032a1ac6 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -2072,7 +2072,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; } - if (areaEntry->ParentAreaID != 0) + if (areaEntry->ParentAreaID != 0 && areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone)) { TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses subzone (ID: {}) instead of zone, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideLight.zoneId); return false; @@ -2101,7 +2101,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; } - if (areaEntry->ParentAreaID != 0) + if (areaEntry->ParentAreaID != 0 && areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone)) { TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses subzone (ID: {}) instead of zone, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideWeather.zoneId); return false; diff --git a/src/server/game/Chat/ChatCommands/ChatCommand.cpp b/src/server/game/Chat/ChatCommands/ChatCommand.cpp index 4d7c1792f8e..a26cb7aa7b4 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommand.cpp +++ b/src/server/game/Chat/ChatCommands/ChatCommand.cpp @@ -153,8 +153,9 @@ static void LogCommandUsage(WorldSession const& session, uint32 permission, std: { LocaleConstant locale = session.GetSessionDbcLocale(); areaName = area->AreaName[locale]; - if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID)) - zoneName = zone->AreaName[locale]; + if (area->GetFlags().HasFlag(AreaFlags::IsSubzone)) + if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID)) + zoneName = zone->AreaName[locale]; } sLog->OutCommand(session.GetAccountId(), "Command: {} [Player: {} ({}) (Account: {}) X: {} Y: {} Z: {} Map: {} ({}) Area: {} ({}) Zone: {} Selected: {} ({})]", diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 7e35dd31e03..3d049d00b1b 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2266,7 +2266,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const return false; } - if (areaEntry->ParentAreaID != 0) + if (areaEntry->ParentAreaID != 0 && areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone)) { TC_LOG_ERROR("sql.sql", "{} requires to be in area ({}) which is a subzone but zone expected, skipped.", cond->ToString(true), cond->ConditionValue1); return false; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 3678284124f..1a141a7203d 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -992,7 +992,7 @@ void WorldObject::ProcessPositionDataChanged(PositionFullTerrainStatus const& da { m_zoneId = m_areaId = data.areaId; if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(m_areaId)) - if (area->ParentAreaID) + if (area->ParentAreaID && area->GetFlags().HasFlag(AreaFlags::IsSubzone)) m_zoneId = area->ParentAreaID; m_outdoors = data.outdoors; m_staticFloorZ = data.floorZ; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9184adfb473..c49a21ead31 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -29006,8 +29006,9 @@ std::string Player::GetMapAreaAndZoneString() const if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId)) { areaName = area->AreaName[GetSession()->GetSessionDbcLocale()]; - if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID)) - zoneName = zone->AreaName[GetSession()->GetSessionDbcLocale()]; + if (area->GetFlags().HasFlag(AreaFlags::IsSubzone)) + if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID)) + zoneName = zone->AreaName[GetSession()->GetSessionDbcLocale()]; } std::ostringstream str; diff --git a/src/server/game/Maps/TerrainMgr.cpp b/src/server/game/Maps/TerrainMgr.cpp index 10151fa4127..4e9a0c65e92 100644 --- a/src/server/game/Maps/TerrainMgr.cpp +++ b/src/server/game/Maps/TerrainMgr.cpp @@ -646,7 +646,7 @@ uint32 TerrainInfo::GetZoneId(PhaseShift const& phaseShift, uint32 mapId, float { uint32 areaId = GetAreaId(phaseShift, mapId, x, y, z, dynamicMapTree); if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId)) - if (area->ParentAreaID) + if (area->ParentAreaID && area->GetFlags().HasFlag(AreaFlags::IsSubzone)) return area->ParentAreaID; return areaId; @@ -656,7 +656,7 @@ void TerrainInfo::GetZoneAndAreaId(PhaseShift const& phaseShift, uint32 mapId, u { areaid = zoneid = GetAreaId(phaseShift, mapId, x, y, z, dynamicMapTree); if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaid)) - if (area->ParentAreaID) + if (area->ParentAreaID && area->GetFlags().HasFlag(AreaFlags::IsSubzone)) zoneid = area->ParentAreaID; } diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index 5ab5395612f..5645425f356 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -338,14 +338,16 @@ public: } // update to parent zone if exist (client map show only zones without parents) - AreaTableEntry const* zoneEntry = areaEntry->ParentAreaID ? sAreaTableStore.LookupEntry(areaEntry->ParentAreaID) : areaEntry; + AreaTableEntry const* zoneEntry = areaEntry->ParentAreaID && areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone) + ? sAreaTableStore.LookupEntry(areaEntry->ParentAreaID) + : areaEntry; ASSERT(zoneEntry); x /= 100.0f; y /= 100.0f; std::shared_ptr<TerrainInfo> terrain = sTerrainMgr.LoadTerrain(zoneEntry->ContinentID); - if (!sDB2Manager.Zone2MapCoordinates(areaEntry->ParentAreaID ? uint32(areaEntry->ParentAreaID) : areaId, x, y)) + if (!sDB2Manager.Zone2MapCoordinates(zoneEntry->ID, x, y)) { handler->PSendSysMessage(LANG_INVALID_ZONE_MAP, areaId, areaEntry->AreaName[handler->GetSessionDbcLocale()], terrain->GetId(), terrain->GetMapName()); handler->SetSentErrorMessage(true); diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index 6ddaa03c675..24e412e0c93 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -506,7 +506,7 @@ public: phases = PhasingHandler::FormatPhases(p->GetPhaseShift()); AreaTableEntry const* area = sAreaTableStore.LookupEntry(p->GetAreaId()); - if (area) + if (area && area->GetFlags().HasFlag(AreaFlags::IsSubzone)) { AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID); if (zone) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index a368b7033e5..30504875544 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1014,7 +1014,7 @@ public: uint32 zoneId = player->GetZoneId(); AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId); - if (!areaEntry || areaEntry->ParentAreaID !=0) + if (!areaEntry || areaEntry->GetFlags().HasFlag(AreaFlags::IsSubzone)) { handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDWRONGZONE, graveyardId, zoneId); handler->SetSentErrorMessage(true); @@ -1953,11 +1953,14 @@ public: { zoneName = area->AreaName[locale]; - AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID); - if (zone) + if (area->GetFlags().HasFlag(AreaFlags::IsSubzone)) { - areaName = zoneName; - zoneName = zone->AreaName[locale]; + AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID); + if (zone) + { + areaName = zoneName; + zoneName = zone->AreaName[locale]; + } } } |