Вообще, я бы порекомендовал концепт multiworld архитектуры. Это когда каждый данж есть объект мира и над всем этим безобразием главенствует менеджер-контроллер миров, который умеет их создавать, разрушать и т.д. Приблизительная схема такая получается: WorldManager -> World -> Region. По вкусу можно разбить Region на: GeodataRegion -> MapRegion.
Из плюсов:
- Легкая возможность создания популярных на данный момент channel'ов в mmo-играх.
- Открывает возможность для будущей кластеризации сервера.
- Независимость миров и происходящего в них друг от друга.
Из минусов:
- Сложность реализации: проще накостыли какое-нибудь говно, типа, реализации инстансов в l2p/l2j like.
- Потребуется переписывать систему предметов, т.к. DroppedItem != ContaineredItem (inventory item). После чего, нужно будет создать централизированное lock-free хранилище инвентарных предметов.
- Потребуется отследить и убрать все лишние вызовы на поиск/добавление/удаление объектов в мультимирах/конкретном мире, чтобы все работало быстро и хорошо.
- Потребуется тесная интеграция с гео-движком, т.к. на каждый мир требуется хранить разницу от эталонной геодаты, если коллизии, конечно же, реализованы через геодату.
- Потребуется больше оперативной памяти, т.к. каждый мир хранит свои экземпляры регионов (это частично решается lazy-инициализацией региональной сетки в мирах).
Пару примеров, как это сделано у меня (говено, т.к. эмуль был заброшен сразу после окончания первого этапа переработки работы миров на мульти-миры).