void Zone::OnAllConfigLoaded() { ObjectImpl<Zone>::OnAllConfigLoaded(); m_Parent = Zone::GetByName(GetParentRaw()); if (m_Parent && m_Parent->IsGlobal()) BOOST_THROW_EXCEPTION(ScriptError("Zone '" + GetName() + "' can not have a global zone as parent.", GetDebugInfo())); Zone::Ptr zone = m_Parent; int levels = 0; Array::Ptr endpoints = GetEndpointsRaw(); if (endpoints) { ObjectLock olock(endpoints); for (const String& endpoint : endpoints) { Endpoint::Ptr ep = Endpoint::GetByName(endpoint); if (ep) ep->SetCachedZone(this); } } while (zone) { m_AllParents.push_back(zone); zone = Zone::GetByName(zone->GetParentRaw()); levels++; if (levels > 32) BOOST_THROW_EXCEPTION(ScriptError("Infinite recursion detected while resolving zone graph. Check your zone hierarchy.", GetDebugInfo())); } }