Exemple #1
0
        public async Task GenerateDungeon(IUser user, [Remainder] string name)
        {
            if (await IsGMLevel(3))
            {
                Player player = Player.Load(user.Id);
                Area   dungeon;
                if (name.Length > 0)
                {
                    dungeon = Dungeons.ManualDungeon(StringM.UpperAt(name), player.AreaInfo.floor, player.Area);
                }
                else
                {
                    dungeon = Dungeons.Generate(player.AreaInfo.floor, player.Area);
                }
                if (dungeon != null)
                {
                    await player.SetArea(dungeon);

                    await player.NewUI(await ReplyAsync(embed: dungeon.AreaInfo(player.AreaInfo.floor).Build()), MsgType.Main);
                }
                else
                {
                    await ReplyAsync("Dungeon not Found");
                }
            }
        }
        public static void Defragment()
        {
            if (_Defragmenting)
            {
                return;
            }

            _Defragmenting = true;

            var now = DateTime.UtcNow;

            Dungeons.Values.Where(d => d != null && !d.Deleted).ForEach(d =>
            {
                d.Defragment();

                if (d.Zones.Count == 0 || d.Deadline < now || (d.Group.Count == 0 && (now - d.Created).TotalHours > 1))
                {
                    d.Delete();
                }
            });

            Dungeons.RemoveValueRange(d => d == null || d.Deleted);

            Maps.Values.Where(map => map != null && !map.Deleted).ForEach(map =>
            {
                map.Defragment();

                var del = map.InstanceRegions.Count == 0;

                if (!del)
                {
                    del = map.InstanceRegions.All(r =>
                    {
                        if (r == null || r.Deleted)
                        {
                            return(true);
                        }

                        if (r is DungeonZone)
                        {
                            var z = (DungeonZone)r;

                            return(z.Dungeon == null || z.Dungeon.Deleted);
                        }

                        return(false);
                    });
                }

                if (del)
                {
                    map.Delete();
                }
            });

            Maps.RemoveValueRange(m => m == null || m.Deleted);

            _Defragmenting = false;
        }
Exemple #3
0
            public Dungeon(string name, List<Room> rooms) : base()
            {
                //ID = Guid.NewGuid();
                Name = name;
                Rooms = rooms;

                Dungeons.Add(this);
            }
        public DungeonViewModel(PitWorldTemplate world)
        {
            World    = world;
            Dungeons = World.DungeonTemplates;
            var    pitDungeonTemplate = Dungeons.FirstOrDefault(d => d.IsStartingDungeon);
            string startId            = pitDungeonTemplate != null ? pitDungeonTemplate.TemplateId : DefaultDungeonId;

            SelectedDungeon = World.GetDungeon(startId);
        }
Exemple #5
0
        private static void CSLoad()
        {
            Maps.Import();
            Dungeons.Import();
            Lockouts.Import();

            Restore();

            DefragmentTimer.Start();
        }
Exemple #6
0
        private static void CSSave()
        {
            IndexFile.Serialize(SaveIndex);

            Maps.Export();
            Dungeons.Export();
            Lockouts.Export();

            RestoreFile.Serialize(SaveRestore);
            RestoreFile.SetHidden(true);
        }
Exemple #7
0
        internal static async Task EnterDungeon(Player player, IMessageChannel chan)
        {
            player.EndEncounter();
            Area dungeon = Dungeons.Generate(player.AreaInfo.floor, player.Area);
            await player.SetArea(dungeon, player.AreaInfo.floor);

            player.QuestTrigger(Quest.QuestTrigger.Enter, "Dungeon");

            player.EggPocketTrigger(NPCSystems.Companions.Egg.EggChallenge.Exploration);

            EmbedBuilder areaInfo = player.UserEmbedColor(player.Area.AreaInfo(player.AreaInfo.floor));
            await player.NewUI(await chan.SendMessageAsync("You've entered " + player.Area.name,
                                                           embed: areaInfo.Build()), MsgType.Main);
        }
Exemple #8
0
        internal static async Task EnterFLoor(Player player, ISocketMessageChannel chan)
        {
            EmbedBuilder result;
            string       message = null;
            MsgType      uiType  = MsgType.Main;

            player.EndEncounter();

            player.EggPocketTrigger(NPCSystems.Companions.Egg.EggChallenge.Exploration);

            if (AMIData.Events.OngoingEvent.Ongoing != null)
            {
                AMIData.Events.OngoingEvent.Ongoing.EventBounty(player.Area, player.AreaInfo.floor);
            }

            if (player.Area.type == AreaType.Dungeon && player.AreaInfo.floor + 1 >= player.Area.floors)
            {
                player.AreaInfo.floor++;
                NPCSystems.NPC mob = Dungeons.GetBoss(player.Area);
                player.NewEncounter(new Encounter("Mob", player)
                {
                    mobs = new NPCSystems.NPC[] { mob }
                });

                result = DUtils.BuildEmbed("Boss Battle", "You've encountered a " + mob.name,
                                           null, player.userSettings.Color,
                                           DUtils.NewField(mob.displayName,
                                                           "Level: " + mob.level + Environment.NewLine +
                                                           "Rank: " + mob.Rank() + Environment.NewLine +
                                                           $"Health: {mob.health}/{mob.Health()}" + Environment.NewLine
                                                           ));
                uiType = MsgType.Combat;
            }
            else
            {
                // Calc the amount of floors to go:
                //           (if lower than area level, only ever 1 [else] difference of player's level and area's lvl capped at 6) capped at available floors
                int floors = FloorIncrease(player);
                player.AreaInfo.floor += floors;
                result  = player.Area.AreaInfo(player.AreaInfo.floor).WithColor(player.userSettings.Color);
                message = $"You've advanced {floors} floors " + player.Area.name;
            }

            player.QuestTrigger(Quest.QuestTrigger.EnterFloor,
                                $"{player.AreaInfo.path};{player.AreaInfo.floor}");

            await player.NewUI(await chan.SendMessageAsync(message,
                                                           embed: result.Build()), uiType);
        }
Exemple #9
0
        private void ComposeDungeons()
        {
            int teleportindex = -1;
            HashSet <SCTeleport> usedEnterTeles = new HashSet <SCTeleport>(new SCTEleportTargetEqualityComparer());

            foreach (var et in enter.Select(e => new SCTeleport(e, SCPointOfInterestType.OwEntrance)))
            {
                teleportindex++;
                if (usedEnterTeles.Contains(et))
                {
                    continue;
                }
                Dungeons.Add(new SCDungeon(et, (OverworldTeleportIndex)teleportindex, scmaps, usedEnterTeles));
            }
        }
Exemple #10
0
        public void Add(Play play, int begin, int end)
        {
            var playes = Plays.SingleOrDefault(p => p.Name == play.Name);

            if (playes == null)
            {
                Plays.Add(play);

                var dungeon = new Dungeon(begin, end, play, user);
                Dungeons.Add(dungeon);
            }
            else
            {
                var dungeon = new Dungeon(begin, end, play, user);
                Dungeons.Add(dungeon);
            }

            Save();
        }
    //private IslandController lastIslandToggle = null;
    private void HandleKeyDown()
    {
        var isShiftDown   = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
        var isControlDown = isShiftDown || Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl);

        if (Input.GetKeyUp(KeyCode.Q))
        {
            LogoCensor = !LogoCensor;
        }

        if (Input.GetKeyUp(KeyCode.I))
        {
            playerList.ToggleExpRate();
        }

        if (isControlDown && Input.GetKeyUp(KeyCode.F))
        {
            playerSearchHandler.Show();
        }

        if (isControlDown && Input.GetKeyUp(KeyCode.S))
        {
            SavePlayersAsync();
        }


        if (Input.GetKeyUp(KeyCode.Space))
        {
            var player = Players.FindPlayers("zerratar").FirstOrDefault();
            if (player)
            {
                var def = JsonConvert.DeserializeObject <RavenNestPlayer>(JsonConvert.SerializeObject(player.Definition));
                def.UserId    = UnityEngine.Random.Range(12345, 99999).ToString();
                def.Name     += def.UserId;
                def.UserName += def.UserId;
                var p = SpawnPlayer(def);
                if (raidManager.Started)
                {
                    raidManager.Join(p);
                }
            }
        }

        if (isControlDown && Input.GetKeyUp(KeyCode.O))
        {
            Dungeons.ActivateDungeon();
        }

        if (isControlDown && Input.GetKeyUp(KeyCode.P))
        {
            Dungeons.ForceStartDungeon();
        }

        if (isControlDown && Input.GetKeyUp(KeyCode.R))
        {
            raidManager.StartRaid();
        }

        if (Permissions.IsAdministrator || Application.isEditor)
        {
            if (isControlDown && Input.GetKeyDown(KeyCode.Delete))
            {
                subEventManager.Reset();
            }

            if (isControlDown && Input.GetKeyUp(KeyCode.A))
            {
                subEventManager.Activate();
            }

            if (isControlDown && Input.GetKeyUp(KeyCode.X))
            {
                Twitch.OnSubscribe(new TwitchSubscription(null, null, null, null, 1, true));
            }

            if (isControlDown && Input.GetKeyUp(KeyCode.C))
            {
                Twitch.OnSubscribe(new TwitchSubscription(null, null, null, null, -1, true));
            }
        }
    }
Exemple #12
0
        public static void Quest()
        {
            City.currentPlotState = City.QuestState.Completed;
            switch (questNum)
            {
            case 1:
                Console.Clear();
                RPG.Dialogue("Вы дошли до синего источника");
                RPG.Dialogue("Как и ожидалось, всё здесь синее.");
                RPG.Dialogue("Источник представлял из себя небольшую речку, начало которой виднелось на горизонте.");
                RPG.Dialogue("Вы проходите вглубь, ощущая свежесть окружающего воздуха.");
                RPG.Dialogue("Вы чувствуете расслабление и решаете присесть.");
                RPG.Dialogue("\n...");
                RPG.Dialogue("\nИз-за деревьев выходит Страж.");
                RPG.Dialogue("\nЧёрт, подумали вы.");

                monster = new Monster[1]
                {
                    new Monster
                    {
                        HP     = 100 + 20 * LVL,
                        Damage = 20 + 2 * LVL,
                        Name   = "Страж",
                        Type   = Monster.MType.Standart,
                    }
                };
                Fight.Init(monster, true);
                break;

            case 2:
                Console.Clear();
                RPG.Dialogue("Вы следуете по маршруту торговца, уходя глубоко в лес.");
                RPG.Dialogue("С каждым шагом окружающая тишина становится всё подозрительнее.");
                RPG.Dialogue("Туман густеет.");
                RPG.Dialogue("Давление обстановки растёт.");
                RPG.Dialogue("Вы наткнулись на следы колёс.");
                RPG.Dialogue("Последовать по ним кажется хорошей идеей.");
                RPG.Dialogue("\n...");
                RPG.Dialogue("\nЭто будет долгий поход.");

                Dungeons.Init(questNum);

                RPG.Dialogue("\nВы подошли к разрушенной повозке.");
                RPG.Dialogue("\nА рядом с ней...");
                RPG.Dialogue("\nМёртвый торговец.");
                RPG.Dialogue("\nСледов нападения не видно.");
                RPG.Dialogue("Исследовав повозку, вы не нашли ни одного товара.");
                RPG.Dialogue("Только много гари.");
                RPG.Dialogue("Возможно, повозка загорелась, и торговец не смог спастись?");
                RPG.Dialogue("Возможно, торговец вёз взрывчатку.");
                RPG.Dialogue("\nСтранное дело.");
                RPG.Dialogue("\n...");
                RPG.Dialogue("\nВы заметили медальон на торговце.");
                RPG.Dialogue("Вы его взяли, без особой цели. Он не выглядит дорогостоящим.");
                RPG.Dialogue("Кроме красного камня посередине. Но его достать оттуда пркатически невозможно.");
                RPG.Dialogue("\nНа обратной стороне медальона написано '963'");
                RPG.Dialogue("\nЧто бы это не значило.");
                RPG.Dialogue("\nВы начали возвращаться.");

                Dungeons.Init(questNum, 1);

                RPG.Dialogue("\nПеред вами стоит монстр.");
                RPG.Dialogue("Что не удивительно.");

                monster = new Monster[1]
                {
                    new Monster
                    {
                        HP     = 400 + 30 * LVL,
                        Damage = 30 + 3 * LVL,
                        Name   = "Заградитель",
                        Type   = Monster.MType.Fire
                    }
                };
                Fight.Init(monster, true);
                break;

            case 3:
                Console.Clear();
                RPG.Dialogue("Вход в подвал находится снаружи.");
                RPG.Dialogue("Видимо, так удобнее?");
                RPG.Dialogue("Вы спустились в подвал таверны.");
                RPG.Dialogue("Здесь довольно темно.");
                RPG.Dialogue("Единственное освещение это свет из открытой двери.");
                RPG.Dialogue("В конце подвала видно только чёрный туман.");
                RPG.Dialogue("\nВы начинаете движение в его сторону.");

                Dungeons.Init(questNum);

                RPG.Dialogue("\nКак и ожидалось:");
                RPG.Dialogue("Внутри тумана монстр.");

                monster = new Monster[1]
                {
                    new Monster
                    {
                        HP     = 600 + 40 * LVL,
                        Damage = 40 + 8 * LVL,
                        Name   = "Туманный зверь",
                        Type   = Monster.MType.Dark
                    }
                };
                Fight.Init(monster, true);

                RPG.Dialogue("Тело монстра рассеялось в тумане.");
                RPG.Dialogue("Время возвращаться.");

                Dungeons.Init(questNum, 1);

                RPG.Dialogue("\nПохоже, что дверь заклинило.");
                RPG.Dialogue("Можно попробовать найти другой выход.");
                RPG.Dialogue("Можно выломать дверь.");

                Console.WriteLine("Что делать?" +
                                  "\n1 - Выломать" +
                                  "\n2 - Найти другой выход");

                if (Console.ReadLine() == "1")
                {
                    brokeOut = true;

                    RPG.Dialogue("\nВы успешно выломали дверь.");
                    RPG.Dialogue("Будет очень неприятно снова встретить Охру.");
                }

                else
                {
                    RPG.Dialogue("\nНет, ломать дверь действительно не стоит.");
                    RPG.Dialogue("Ведь из подвала есть ещё один выход в город.");

                    Dungeons.Init(questNum, 2);

                    RPG.Dialogue("\nНу вот.");
                    RPG.Dialogue("И не нужно никакой излишней жестокости!");
                }

                break;

            default:
                Console.WriteLine("Хз чёт");
                break;
            }
        }
Exemple #13
0
        static public void GetRandomEvent()
        {
            Fancies();

            Monster test = new Monster();

            Console.WriteLine("\nИгрок:" +
                              $"\nHP: {HP}/{MaxHP} [{HPLine}]");

            if (LVL != 15)
            {
                Console.WriteLine($"УР {LVL}: {XP}/{MaxXP} [{XPLine}]");
            }
            else
            {
                Dialogue($"LVL {LVL}: {XP}/{MaxXP} [{XPLine}] " +
                         $"\nОчки мастерства: {MasteryPoints}", true, ConsoleColor.Yellow);
            }

            Console.WriteLine($"Деньги: {Player.Money}");

            Console.WriteLine("\nЛес - 1, Задание - 2, Город - 3");
            if (towerLoc)
            {
                Console.WriteLine("Заброшенная башня - 9");
            }
            Console.WriteLine("Сохранить игру - s, Загрузить игру - l, Достижения - a, Инвентарь - i");

            switch (Console.ReadLine())
            {
            case "1":

                Console.Clear();
                int Event = rnd.Next(0, 10);

                if (Event < 5)
                {
                    Console.WriteLine("Тут ничего");
                }
                else if (Event == 5)
                {
                    Money         = rnd.Next(0, 10) + 2 * LVL;
                    Player.Money += Money;
                    Dialogue("Ого, сундук" +
                             "\nВы получили " + Money + " монет", true, ConsoleColor.Yellow);
                }
                else
                {
                    Fight.Init();
                }
                break;

            case "2":

                Console.Clear();

                if (City.currentPlotState == City.QuestState.Accepted)
                {
                    Console.WriteLine("Доступно сюжетное задание.");

                    switch (questNum)
                    {
                    case 1:
                        Console.WriteLine("Рекомендуемый уровень: 4");
                        break;

                    case 2:
                        Console.WriteLine("Рекомендуемый уровень: 7");
                        break;

                    case 3:
                        Console.WriteLine("Рекомендуемый уровень: 8");
                        break;
                    }

                    Console.WriteLine("Вы хотите начать это задание? Да - 1, Нет - 2");

                    if (Console.ReadLine() == "1")
                    {
                        PlotQuests.Quest();
                    }
                }

                else
                {
                    Console.WriteLine("Нет доступных заданий.");
                }
                break;

            case "3":
                City.GoToCity();
                break;

            case "4":
                Dungeons.Init(0);
                Console.Clear();
                break;

            case "9":
                if (towerLoc)
                {
                    Tower.Entry();
                    Console.Clear();
                }
                else
                {
                    goto default;
                }
                break;

            case "a":
                AchievementMenu.ShowList();
                Console.Clear();
                break;

            case "i":
                InventoryMenu.ShowMenu();
                break;

            case "l":
                LoadProgress(false);
                Console.Clear();
                break;

            case "s":
                SaveProgress(true);
                Console.Clear();
                break;

            case "fight poison":
                test.Type = Monster.MType.Poisonous;
                goto case "fight";

            case "fight explosive":
                test.Type = Monster.MType.Explosive;
                goto case "fight";

            case "fight thorned":
                test.Type = Monster.MType.Thorned;
                goto case "fight";

            case "fight fire":
                test.Type = Monster.MType.Fire;
                goto case "fight";

            case "fight ice":
                test.Type = Monster.MType.Ice;
                goto case "fight";

            case "fight dark":
                test.Type = Monster.MType.Dark;
                goto case "fight";

            case "fight light":
                test.Type = Monster.MType.Luminous;
                goto case "fight";

            case "fight":
                test.HP     = 262260;
                test.Damage = 0;
                test.Name   = "тестовый монстр-босс";
                Fight.Init(new Monster[1] {
                    test
                }, true);
                break;

            case "fight 2":
                Fight.Init(2);
                break;

            case "bring balance":
                for (int i = 0; i < Passive_Inventory.Length; i++)
                {
                    if (Passive_Inventory[i].ID == 0)
                    {
                        Passive_Inventory[i] = new Yang_W();
                        break;
                    }
                }
                for (int i = 0; i < Passive_Inventory.Length; i++)
                {
                    if (Passive_Inventory[i].ID == 0)
                    {
                        Passive_Inventory[1] = new Ying_A();
                        break;
                    }
                }
                break;

            case "scrooge":
                Console.Clear();
                Player.Money += 1000000;
                break;

            case "gototavern":
                if (questNum == 0)
                {
                    questNum = 1;
                }
                City.GoToTavern();
                break;

            case "lvlup":
                LvlUp(true);
                break;

            case "gearupg":
                City.GearUpgrade(true);
                break;

            case "allthexp":     //Дать максимальный уровень.
                //Кол-во опыта считается так: a*(1 + 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 ... + 2^n-3), где a - начальное кол-во опыта, n - необходимый уровень
                XP = 204800;
                LvlUp();
                break;

            case "questscomplete":     //"Выполнить" квесты
                Console.Clear();
                questNum = 15;
                break;

            case "cheatsheet":    //Список отладочных команд
                Console.Clear();
                Console.WriteLine("scrooge - +1.000.000 монет\n" +
                                  "gototavern - пойти в таверну\n" +
                                  "lvlup - повысить уровень\n" +
                                  "gearupg - улучшить экипировку\n" +
                                  "allthexp - получить двадцатый уровень\n" +
                                  "questscomplete - выполнить все квесты (без награды)");
                break;

            default:
                Console.Clear();
                Console.WriteLine("Нет команды.");
                break;
            }

            GetRandomEvent();
        }
        public static bool EnterDungeon(PlayerMobile pm, DungeonInfo info, bool confirm)
        {
            if (pm == null || pm.Deleted || info == null || info.ID == DungeonID.None)
            {
                return(false);
            }

            if (confirm)
            {
                var html = new StringBuilder();

                html.AppendLine(info.Desc.WrapUOHtmlColor(Color.PaleGoldenrod));
                html.AppendLine();
                html.AppendLine("You are about to enter {0}.", info.Name);
                html.AppendLine(
                    "You have {0} to complete your raid...",
                    info.Duration.ToSimpleString("!d# days #h# hours #m# minutes and #s# seconds#"));
                html.AppendLine();
                html.AppendLine("Click OK to enter {0}!", info.Name);

                new ConfirmDialogGump(pm)
                {
                    Width         = 500,
                    Height        = 400,
                    Title         = info.Name,
                    Html          = html.ToString(),
                    HtmlColor     = Color.White,
                    AcceptHandler = b => EnterDungeon(pm, info, false)
                }.Send();

                return(false);
            }

            if (info.Expansion != Expansion.None && pm.NetState != null && !pm.NetState.SupportsExpansion(info.Expansion, false))
            {
                pm.SendMessage(0x22, "The {0} expansion is required to enter {1}.", info.Expansion, info.Name);
                return(false);
            }

            TimeSpan lockout;

            if (IsLockedOut(pm, info.ID, out lockout))
            {
                pm.SendMessage(
                    0x22,
                    "You must wait {0} before you can enter {1} again.",
                    lockout.ToSimpleString("!d# days #h# hours #m# minutes and #s# seconds#"),
                    info.Name);

                var ui = new TimeBoostsUI(pm, null, TimeBoosts.TimeBoosts.EnsureProfile(pm))
                {
                    Title       = info.Name,
                    SubTitle    = "Reduce Wait?",
                    SummaryText = "Next Raid",
                    GetTime     = () => GetLockout(pm, info.ID),
                    SetTime     = t => SetLockout(pm, info.ID, t)
                };

                ui.BoostUsed = b =>
                {
                    if (IsLockedOut(pm, info.ID, out lockout))
                    {
                        pm.SendMessage(
                            0x22,
                            "You must wait {0} before you can enter {1} again.",
                            lockout.ToSimpleString("!d# days #h# hours #m# minutes and #s# seconds#"),
                            info.Name);
                    }
                    else
                    {
                        ui.Close(true);

                        EnterDungeon(pm, info, false);
                    }
                };

                ui.Send();

                return(false);
            }

            var party   = Party.Get(pm);
            var isParty = false;

            Dungeon dungeon = null;

            if (party != null && party.Leader is PlayerMobile && party.Leader != pm)
            {
                isParty = true;

                var pl = (PlayerMobile)party.Leader;

                dungeon =
                    Dungeons.Values.FirstOrDefault(
                        d => d != null && !d.Deleted && d.ID == info.ID && (d.Group.Count == 0 || d.Group.Contains(pl)));
            }

            if (dungeon == null && isParty)
            {
                pm.SendMessage(0x22, "Your party leader must be the first to enter {0}.", info.Name);
                return(false);
            }

            if (dungeon == null)
            {
                dungeon =
                    Dungeons.Values.FirstOrDefault(
                        d => d != null && !d.Deleted && d.ID == info.ID && (d.Group.Count == 0 || d.Group.Contains(pm)));
            }

            if (dungeon != null && dungeon.Group.Count(gp => gp != null && gp != pm && gp.Map == dungeon.Map) >= dungeon.GroupMax)
            {
                pm.SendMessage(0x22, "{0} is currently at maximum capacity.", info.Name);
                return(false);
            }

            if (dungeon == null || dungeon.Deleted)
            {
                dungeon = info.Type.CreateInstanceSafe <Dungeon>();

                if (dungeon != null && !dungeon.Deleted)
                {
                    Dungeons.Add(dungeon.Serial, dungeon);
                }
            }

            if (dungeon != null && !dungeon.Deleted)
            {
                dungeon.Init();

                var lifespan = dungeon.Deadline - DateTime.UtcNow;

                if (dungeon.Map == null || dungeon.Map.Deleted || lifespan <= TimeSpan.Zero)
                {
                    pm.SendMessage(0x22, "A rip in the fabric of reality prevents you from entering {0}.", info.Name);

                    if (dungeon.Group.Count == 0 || (dungeon.Group.Count == 1 && dungeon.Group.Contains(pm)))
                    {
                        dungeon.Delete();
                    }

                    return(false);
                }

                if (dungeon.Entrance == Point3D.Zero || !dungeon.CanEnterDungeon(pm))
                {
                    pm.SendMessage(0x22, "Mystical forces prevent you from entering {0}.", info.Name);

                    if (dungeon.Group.Count == 0 || (dungeon.Group.Count == 1 && dungeon.Group.Contains(pm)))
                    {
                        dungeon.Delete();
                    }

                    return(false);
                }

                string time = lifespan.ToSimpleString("!d# days #h# hours #m# minutes and #s# seconds#");

                /*if (lifespan.TotalDays > 1.0)
                 * {
                 *      time = String.Format("{0:#,0} days", (int)lifespan.TotalDays);
                 * }
                 * else if (lifespan.TotalHours > 1.0)
                 * {
                 *      time = String.Format("{0:#,0} hours", (int)lifespan.TotalHours);
                 * }
                 * else if (lifespan.TotalMinutes > 1.0)
                 * {
                 *      time = String.Format("{0:#,0} minutes", (int)lifespan.TotalMinutes);
                 * }
                 * else
                 * {
                 *      time = String.Format("{0:#,0} seconds", (int)lifespan.TotalSeconds);
                 * }*/

                pm.SendMessage(0x55, "You have {0} before reality breaks down and {1} ceases to exist.", time, info.Name);

                dungeon.Teleport(pm, dungeon.Entrance, dungeon.Map);
                dungeon.OnEnterDungeon(pm);
                return(true);
            }

            pm.SendMessage(0x22, "{0} is currently unavailable.", info.Name);
            return(false);
        }
 public static Dungeon FindDungeon(DungeonSerial serial)
 {
     return(Dungeons.GetValue(serial));
 }