//TODO: Account for freed regions.

        public bool StartDungeon(Creature pCreator, DungeonLobby pLobby, DungeonLevel pLevel, Item pItem)
        {
            var script = FindScriptOrNull(pLobby, pLevel, pItem.Info.Id);

            if (script == null)
            {
                return(false);
            }

            int nextAvailableRegion = _regionIndex;

            Log.Info("Next available Region: {0}", nextAvailableRegion);
            var newDungeon = new Dungeon(pCreator, _regionIndex, script, out nextAvailableRegion);

            if (newDungeon == null)
            {
                return(false);
            }

            _regionIndex = nextAvailableRegion;
            var addKey = Tuple.Create(pLobby, pLevel);

            if (!_activeDungeons.ContainsKey(addKey))
            {
                _activeDungeons[addKey] = new List <Dungeon>();
            }

            _activeDungeons[addKey].Add(newDungeon);
            Log.Info("Starting dungeon...");
            newDungeon.Start();
            return(true);
        }