Core/Objects: Treat areas that have ParentAreaID filled but dont have IsSubzone flag as zones instead of areas

This commit is contained in:
Shauren authored and Ovahlord committed 2023-10-09 21:05:00 +02:00
1 parent 4e67618e5f
commit 8acfadc779
9 files changed
+29 -18

No files matched your search

@@ -1578,7 +1578,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 %d SourceType %u Event %u Action %u uses subzone (ID: %u) instead of zone, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideLight.zoneId);
return false;
@@ -1607,7 +1607,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 %d SourceType %u Event %u Action %u uses subzone (ID: %u) instead of zone, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideWeather.zoneId);
return false;
+5 -3
View File
@@ -321,9 +321,11 @@ bool ChatHandler::ExecuteCommandInTable(std::vector<ChatCommand> const& table, c
std::string zoneName = "Unknown";
if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId))
{
areaName = area->AreaName;
if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID))
zoneName = zone->AreaName;
LocaleConstant locale = m_session->GetSessionDbcLocale();
areaName = area->AreaName[locale];
if (area->GetFlags().HasFlag(AreaFlags::IsSubzone))
if (AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID))
zoneName = zone->AreaName[locale];
}
sLog->outCommand(m_session->GetAccountId(), "Command: %s [Player: %s (%s) (Account: %u) X: %f Y: %f Z: %f Map: %u (%s) Area: %u (%s) Zone: %s Selected: %s (%s)]",
+1 -1
View File
@@ -2071,7 +2071,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", "%s requires to be in area (%u) which is a subzone but zone expected, skipped.", cond->ToString(true).c_str(), cond->ConditionValue1);
return false;
+1 -1
View File
@@ -1217,7 +1217,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;
+3 -2
View File
@@ -27068,8 +27068,9 @@ std::string Player::GetMapAreaAndZoneString() const
{
int locale = GetSession()->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[GetSession()->GetSessionDbcLocale()];
}
std::ostringstream str;
+2 -2
View File
@@ -619,7 +619,7 @@ uint32 TerrainInfo::GetZoneId(PhaseShift const& phaseShift, uint32 mapId, float
{
uint32 areaId = GetAreaId(phaseShift, mapId, x, y, z);
if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId))
if (area->ParentAreaID)
if (area->ParentAreaID && area->GetFlags().HasFlag(AreaFlags::IsSubzone))
return area->ParentAreaID;
return areaId;
@@ -629,7 +629,7 @@ void TerrainInfo::GetZoneAndAreaId(PhaseShift const& phaseShift, uint32 mapId, u
{
areaid = zoneid = GetAreaId(phaseShift, mapId, x, y, z);
if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaid))
if (area->ParentAreaID)
if (area->ParentAreaID && area->GetFlags().HasFlag(AreaFlags::IsSubzone))
zoneid = area->ParentAreaID;
}
+3 -1
View File
@@ -315,7 +315,9 @@ 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);
std::shared_ptr<TerrainInfo> terrain = sTerrainMgr.LoadTerrain(zoneEntry->ContinentID);
+1 -1
View File
@@ -428,7 +428,7 @@ public:
LocaleConstant localeConstant = handler->GetSessionDbcLocale();
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)
+11 -5
View File
@@ -1065,7 +1065,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);
@@ -1830,11 +1830,17 @@ public:
AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId);
if (area)
{
areaName = area->AreaName;
zoneName = area->AreaName[locale];
AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID);
if (zone)
zoneName = zone->AreaName;
if (area->GetFlags().HasFlag(AreaFlags::IsSubzone))
{
AreaTableEntry const* zone = sAreaTableStore.LookupEntry(area->ParentAreaID);
if (zone)
{
areaName = zoneName;
zoneName = zone->AreaName[locale];
}
}
}
if (target)