Beispiel #1
0
        private void ApplyDoctorSelectingState(Client client)
        {
            client.Player.Muted = true;


            var story   = new Story(Guid.NewGuid().ToString());
            var segment = StoryBuilder.BuildStory();

            StoryBuilder.AppendSaySegment(segment, "Night has fallen!", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "The doctor must now decide who to save.", -1, 0, 0);

            if (Data.ExtendPlayer(client).Role == UserRole.Doctor)
            {
                StoryBuilder.AppendSaySegment(segment, "You are the doctor. Make your decision with /wchoose.", -1, 0, 0);
            }

            StoryBuilder.AppendSaySegment(segment, "Everyone is muted while the doctor decides.", -1, 0, 0);
            if (IsRoleDead(UserRole.Doctor))
            {
                StoryBuilder.AppendPauseAction(segment, 5000);
            }

            segment.AppendToStory(story);
            StoryManager.PlayStory(client, story);
        }
Beispiel #2
0
        public void CreateStoryBoard()
        {
            _storyBoard = new StoryBoard(_scene);

            var storyList = new List <BaseStory>();

            for (var i = 0; i < 10; i++)
            {
                var rect = _scene[$"Rect{i}"] as RectangleNode;

                var move = new Vec2Transformation <RectangleNode>(rect, "Position",
                                                                  TimeSpan.FromMilliseconds(40 + i * 10), DefaultEasers.EaseInOutCubic, true, new Vector2(rect.Position.X, 200));

                storyList.Add(move);
            }

            for (var i = 9; i >= 0; i--)
            {
                var rect = _scene[$"Rect{i}"] as RectangleNode;

                var move = new Vec2Transformation <RectangleNode>(rect, "Position",
                                                                  TimeSpan.FromMilliseconds(40 + (10 - i) * 10), DefaultEasers.EaseInOutCubic, true, new Vector2(rect.Position.X, rect.Position.Y));

                storyList.Add(move);
            }

            _storyBoard["MoveAll"] = StoryBuilder.Sequential(storyList.ToArray());
        }
Beispiel #3
0
        public static void ScriptedKeyItem(Client client, KeyItem keyItem, int slot)
        {
            switch (keyItem.ItemID)
            {
            case 1839:     // Costume box
            {
                Messenger.SendAvailableCostumes(client);
            }
            break;

            case 1842:     // Drif-Flute
            {
                if (client.Player.Map.Indoors || client.Player.Map.MapType != Enums.MapType.Standard)
                {
                    var story   = new Story();
                    var segment = StoryBuilder.BuildStory();
                    StoryBuilder.AppendSaySegment(segment, "It's probably a bad idea to use that here.", client.Player.GetActiveRecruit().Species, 0, 0);
                    segment.AppendToStory(story);
                    StoryManager.PlayStory(client, story);

                    return;
                }

                if (client.Player.OutlawRole == Enums.OutlawRole.Outlaw && IsOutlawPlayerInRange(client, 30, Enums.OutlawRole.Hunter))
                {
                    Messenger.StoryMessage(client, "It's not safe to use that now! A hunter is nearby!");

                    return;
                }

                Messenger.SendAvailableFlyPoints(client);
            }
            break;
            }
        }
Beispiel #4
0
        public static void AppendLeaderboardEventIntro(StoryBuilderSegment segment)
        {
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Lets start the first portion of the Gala...");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "We'll be checking the leaderboards and handing out prizes.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "First place in each category will receive 3 Arcade Tokens.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Second will receive 2 Arcade Tokens.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Third will receive 1 Arcade Token.");

            foreach (var leaderboard in LeaderBoardManager.ListLeaderboards())
            {
                var leaderboardItems = leaderboard.Load().OrderByDescending(x => x.Value).ToList();

                StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"In the {leaderboard.Name} category...");

                if (leaderboardItems.Count > 0)
                {
                    StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"First place goes to {leaderboardItems[0].Name}!");
                }
                if (leaderboardItems.Count > 1)
                {
                    StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"Second place goes to {leaderboardItems[1].Name}!");
                }
                if (leaderboardItems.Count > 2)
                {
                    StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"Third place goes to {leaderboardItems[2].Name}!");
                }
            }

            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "That's every category!");
        }
Beispiel #5
0
        public static void AppendOutlawEventIntro(StoryBuilderSegment segment)
        {
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Next, lets see who the top outlaws are this week!");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "The top outlaw will receive 10 Arcade tokens.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Second place will receive 5 Arcade Tokens.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Third will receive 3 Arcade Tokens.");

            using (var databaseConnection = new DatabaseConnection(DatabaseID.Players))
            {
                var topOutlaws = PlayerDataManager.GetTopOutlaws(databaseConnection.Database).OrderByDescending(x => x.Points).Take(3).ToList();

                if (topOutlaws.Count > 0)
                {
                    StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"The top outlaw this week is {topOutlaws[0].CharacterName} with {topOutlaws[0].Points} OP!");
                }
                if (topOutlaws.Count > 1)
                {
                    StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"In second place is {topOutlaws[1].CharacterName} with {topOutlaws[1].Points} OP!");
                }
                if (topOutlaws.Count > 2)
                {
                    StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"Lastly, in third place is {topOutlaws[2].CharacterName} with {topOutlaws[2].Points} OP!");
                }
            }
        }
Beispiel #6
0
        private void ApplyVillagerSelectingState(Client client)
        {
            var chosenUser = ClientManager.FindClientFromCharID(Data.WerewolfKilledUser);

            var story   = new Story(Guid.NewGuid().ToString());
            var segment = StoryBuilder.BuildStory();

            StoryBuilder.AppendSaySegment(segment, "Daytime has arrived!", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "While you slept, werewolves attacked.", -1, 0, 0);

            if (!Data.ExtendPlayer(Data.WerewolfKilledUser).IsDead)
            {
                StoryBuilder.AppendSaySegment(segment, "...however, the doctor protected the village, and no one was hurt!", -1, 0, 0);
            }
            else
            {
                if (chosenUser == null)
                {
                    StoryBuilder.AppendSaySegment(segment, $"Character {Data.WerewolfKilledUser} was killed. They logged off in fear.", -1, 0, 0);
                }
                else
                {
                    StoryBuilder.AppendSaySegment(segment, $"{chosenUser.Player.DisplayName} was killed in the attack. They were a {Data.ExtendPlayer(chosenUser).Role}!", -1, 0, 0);
                }
            }

            StoryBuilder.AppendSaySegment(segment, "Now, you must stop the werewolves!", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Who will be killed? Make your decision with /wchoose.", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "None shall rest until a majority decision is made.", -1, 0, 0);

            segment.AppendToStory(story);
            StoryManager.PlayStory(client, story);
        }
Beispiel #7
0
        public static void StartEvent()
        {
            if (ActiveEvent == null)
            {
                return;
            }

            foreach (var registeredClient in EventManager.GetRegisteredClients())
            {
                Story story = new Story(Guid.NewGuid().ToString());
                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                StoryBuilder.AppendSaySegment(segment, $"This event is... {ActiveEvent.Name}!", -1, 0, 0);
                StoryBuilder.AppendSaySegment(segment, ActiveEvent.IntroductionMessage, -1, 0, 0);

                foreach (var rule in ActiveEvent.Rules)
                {
                    StoryBuilder.AppendSaySegment(segment, rule, -1, 0, 0);
                }

                if (ActiveEvent.Duration.HasValue)
                {
                    StoryBuilder.AppendSaySegment(segment, $"The event will end in {ActiveEvent.Duration.Value.TotalMinutes} minutes.", -1, 0, 0);
                }
                if (Main.IsTestingEvent)
                {
                    StoryBuilder.AppendSaySegment(segment, $"This event is currently being tested and winners will not receive any prizes.", -1, 0, 0);
                }
                else if (!string.IsNullOrEmpty(ActiveEvent.RewardMessage))
                {
                    StoryBuilder.AppendSaySegment(segment, ActiveEvent.RewardMessage, -1, 0, 0);
                }

                StoryBuilder.AppendSaySegment(segment, "The event has now begun!", -1, 0, 0);
                segment.AppendToStory(story);
                StoryManager.PlayStory(registeredClient, story);
            }

            ActiveEvent.Start();

            var eventStartMessage = new StringBuilder();

            if (Main.IsTestingEvent)
            {
                eventStartMessage.Append("[Testing] ");
            }
            eventStartMessage.Append($"{ActiveEvent.Name} has started!");

            Task.Run(() => DiscordManager.Instance.SendAnnouncement(eventStartMessage.ToString()));
            Messenger.SendAnnouncement("Weekly Event", eventStartMessage.ToString());

            if (ActiveEvent.Duration.HasValue)
            {
                var endTime = DateTime.UtcNow.Add(ActiveEvent.Duration.Value);

                SetGlobalCountdown(new Countdown("The event ends in...", endTime));
                TimedEventManager.CreateTimer("endevent", endTime, null);
            }
        }
Beispiel #8
0
        public void StoryMessage(Client client, string message)
        {
            var story   = new Story(Guid.NewGuid().ToString());
            var segment = StoryBuilder.BuildStory();

            StoryBuilder.AppendSaySegment(segment, message, -1, 0, 0);
            segment.AppendToStory(story);
            StoryManager.PlayStory(client, story);
        }
        public void SequentialTasksExecuteOneAfterAnother()
        {
            //Arrange
            var task1     = new DummyStory(TicksToDuration(1));
            var task2     = new DummyStory(TicksToDuration(1));
            var groupTask = StoryBuilder.Sequential(task1, task2);

            //Todo
        }
        public void ParallelTasksExecuteAtTheSameTime()
        {
            //Arrange
            var task1     = new DummyStory(TicksToDuration(1));
            var task2     = new DummyStory(TicksToDuration(1));
            var groupTask = StoryBuilder.Parallel(task1, task2);

            //Todo
        }
Beispiel #11
0
        private void ExecuteTurn(string selectionCharId)
        {
            Data.ExtendPlayer(selectionCharId).IsDead = true;
            foreach (var eventClient in GetRegisteredClients())
            {
                Data.ExtendPlayer(eventClient).SelectedCharId = null;
            }

            var chosenUser          = ClientManager.FindClientFromCharID(selectionCharId);
            var werewolfCount       = GetRoleClients(UserRole.Werewolf).Count();
            var aliveVillagersCount = GetRegisteredClients().Where(x => Data.ExtendPlayer(x).Role != UserRole.Werewolf).Where(x => !Data.ExtendPlayer(x).IsDead).Count();
            var gameOver            = false;

            foreach (var eventClient in GetRegisteredClients())
            {
                var story   = new Story(Guid.NewGuid().ToString());
                var segment = StoryBuilder.BuildStory();
                StoryBuilder.AppendSaySegment(segment, "A decision has been made!", -1, 0, 0);
                if (chosenUser == null)
                {
                    StoryBuilder.AppendSaySegment(segment, $"Character {selectionCharId} was killed. They logged off in fear.", -1, 0, 0);
                }
                else
                {
                    StoryBuilder.AppendSaySegment(segment, $"{chosenUser.Player.DisplayName} was hanged! They were a {Data.ExtendPlayer(chosenUser).Role}!", -1, 0, 0);
                }

                if (werewolfCount == 0)
                {
                    StoryBuilder.AppendSaySegment(segment, $"The villagers win! All the werewolves have been killed!", -1, 0, 0);
                    gameOver = true;
                }
                else if (werewolfCount >= aliveVillagersCount)
                {
                    StoryBuilder.AppendSaySegment(segment, $"The werewolves win!", -1, 0, 0);
                    gameOver = true;
                }

                segment.AppendToStory(story);
                StoryManager.PlayStory(eventClient, story);
            }

            if (!gameOver)
            {
                Transition(GameState.WerewolfSelecting);
            }
            else
            {
                Main.EndEvent();
            }
        }
Beispiel #12
0
        private void ApplyWerewolfSelectingState(Client client)
        {
            client.Player.Muted = true;

            var story   = new Story(Guid.NewGuid().ToString());
            var segment = StoryBuilder.BuildStory();

            StoryBuilder.AppendSaySegment(segment, "Night has fallen!", -1, 0, 0);

            switch (Data.ExtendPlayer(client).Role)
            {
            case UserRole.Werewolf:
            {
                foreach (var eventClient in GetRoleClients(UserRole.Werewolf))
                {
                    StoryBuilder.AppendSaySegment(segment, $"{eventClient.Player.DisplayName} is a werewolf!", -1, 0, 0);
                }
                StoryBuilder.AppendSaySegment(segment, $"Choose a player to eat with /wchoose", -1, 0, 0);
            }
            break;

            case UserRole.Seer:
            {
                StoryBuilder.AppendSaySegment(segment, "You are a seer.", -1, 0, 0);
                StoryBuilder.AppendSaySegment(segment, "Every night you will choose one player and learn about what they are.", -1, 0, 0);
            }
            break;

            case UserRole.Doctor:
            {
                StoryBuilder.AppendSaySegment(segment, "You are a doctor.", -1, 0, 0);
                StoryBuilder.AppendSaySegment(segment, "Every night you will choose one player to protect from the werewolves.", -1, 0, 0);
            }
            break;

            case UserRole.Villager:
            {
                StoryBuilder.AppendSaySegment(segment, "You are a villager.", -1, 0, 0);
                StoryBuilder.AppendSaySegment(segment, "Try not to get eaten!", -1, 0, 0);
            }
            break;
            }

            StoryBuilder.AppendSaySegment(segment, "Everyone is muted while werewolves decide.", -1, 0, 0);

            segment.AppendToStory(story);
            StoryManager.PlayStory(client, story);
        }
Beispiel #13
0
 /// <summary>
 /// Get next conversation
 /// </summary>
 /// <param name="gameState"></param>
 /// <returns></returns>
 private IConversation GetConversation(IGameState gameState)
 {
     foreach (ConversationCode code in _conversations)
     {
         IConversation fetched = StoryBuilder.GetConversation(code);
         if (fetched != null)
         {
             if (fetched.CanBeRead(gameState))
             {
                 NewConversation = true;
                 return(fetched);
             }
         }
     }
     return(null);
 }
        public void ReturnStoriesWithLanguage()
        {
            Story             storyEs    = new StoryBuilder().WithLanguage(Languages.es).WithContent("dummy");
            Story             storyEn    = new StoryBuilder().WithLanguage(Languages.en).WithContent("dummy");
            FakeDbSet <Story> storyDbSet = new FakeDbSet <Story>()
            {
                storyEs, storyEn
            };
            Mock <FakeDatabase> database = FakeDatabase.CreateMockOfFakeDatabase(storyDbSet);

            StoryRepository.StoryRepository storyRepository = this.GivenAStoryRepositoryWithDatabase(database.Object);

            IEnumerable <Story> stories = storyRepository.GetWithText("dummy", "en", new Pagination(1, 10), new StoryOrderByDate()).ToList();

            Assert.AreEqual(1, stories.Count());
            Assert.AreEqual(storyEn, stories.FirstOrDefault());
        }
        public void ReturnStoriesWithTextInTitle()
        {
            Story             storyTitle1 = new StoryBuilder().WithTitle("Title 1");
            Story             storyTitle2 = new StoryBuilder().WithTitle("Title 2");
            FakeDbSet <Story> storyDbSet  = new FakeDbSet <Story>()
            {
                storyTitle1, storyTitle2
            };
            Mock <FakeDatabase> database = FakeDatabase.CreateMockOfFakeDatabase(storyDbSet);

            StoryRepository.StoryRepository storyRepository = this.GivenAStoryRepositoryWithDatabase(database.Object);

            IEnumerable <Story> stories = storyRepository.GetWithText("Title 1", null, new Pagination(1, 10), new StoryOrderByDate()).ToList();

            Assert.AreEqual(1, stories.Count());
            Assert.AreEqual(storyTitle1, stories.FirstOrDefault());
        }
Beispiel #16
0
        public static void EndEvent()
        {
            ActiveEvent.End();
            Task.Run(() => DiscordManager.Instance.SendAnnouncement($"{ActiveEvent.Name} has finished!"));
            Messenger.GlobalMsg($"{ActiveEvent.Name} has finished!", Text.BrightGreen);

            foreach (var registeredClient in EventManager.GetRegisteredClients())
            {
                ActiveEvent.DeconfigurePlayer(registeredClient);

                Story story = new Story(Guid.NewGuid().ToString());
                StoryBuilderSegment segment = StoryBuilder.BuildStory();
                StoryBuilder.AppendSaySegment(segment, $"The event is now finished!", -1, 0, 0);
                StoryBuilder.AppendSaySegment(segment, $"Please wait as a winner is announced...", -1, 0, 0);
                segment.AppendToStory(story);
                StoryManager.PlayStory(registeredClient, story);
            }
        }
        public void ReturnLastestStoriesWithLanguage()
        {
            Story yesterdayStory             = new StoryBuilder().WithPublishDate(DateTime.Now.AddDays(-1));
            Story todayStory                 = new StoryBuilder().WithPublishDate(DateTime.Now);
            Story dayBeforeYesterdayStory    = new StoryBuilder().WithPublishDate(DateTime.Now.AddDays(-2));
            Story storyWithDifferentLanguage = new StoryBuilder().WithLanguage(Languages.en).WithPublishDate(DateTime.Now);

            FakeDbSet <Story> storyDbSet = new FakeDbSet <Story>()
            {
                dayBeforeYesterdayStory, todayStory, yesterdayStory
            };
            Mock <FakeDatabase> database = FakeDatabase.CreateMockOfFakeDatabase(storyDbSet);

            StoryRepository.StoryRepository storyRepository = this.GivenAStoryRepositoryWithDatabase(database.Object);

            IList <Story> stories = storyRepository.GetLastestStories(null, new Pagination(1, 10)).ToList();

            Assert.AreEqual(3, stories.Count());
            Assert.AreEqual(todayStory, stories[0]);
            Assert.AreEqual(yesterdayStory, stories[1]);
            Assert.AreEqual(dayBeforeYesterdayStory, stories[2]);
        }
Beispiel #18
0
        public static Story BuildEventIntroForSpring()
        {
            Story story = new Story(Guid.NewGuid().ToString());
            StoryBuilderSegment segment = StoryBuilder.BuildStory();

            StoryBuilder.AppendCreateFNPCAction(segment, "0", "s153", 24, 6, 169, name: "Eventful", direction: Enums.Direction.Down, isShiny: true);
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Greetings!");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Welcome to our Weekly Gala!");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "The Gala has three parts.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "For the first part, I will be handing out Arcade Tokens for the leaderboard.");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Then, I will be giving out Arcade Tokens for the top outlaws!");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, "Finally, we will be having our weekly event!");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"The event this week will be {ActiveEvent.Name}.");

            AppendLeaderboardEventIntro(segment);
            AppendOutlawEventIntro(segment);

            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"Time for the event!");
            StoryBuilder.AppendSpeechBubbleSegment(segment, 0, $"Enjoy {ActiveEvent.Name}!");

            segment.AppendToStory(story);

            return(story);
        }
Beispiel #19
0
        public static Story CreateIntroStory(Client client)
        {
            Story story = new Story();

            StoryBuilderSegment segment = new StoryBuilderSegment();

            Pokemon eevee  = Pokedex.FindByName("Eevee");
            string  map1ID = Main.Crossroads;

            StoryBuilder.AppendMapVisibilityAction(segment, false);
            StoryBuilder.AppendPlayerPadlockAction(segment, "Lock");
            StoryBuilder.AppendWarpAction(segment, map1ID, 25, 25);
            StoryBuilder.AppendPlayMusicAction(segment, "PMD2) Strange Happenings.mp3", true, true);
            StoryBuilder.AppendSaySegment(segment, "You step into the light of the crystal...", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "You feel its energy going through your body...", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Dizzy... are you moving?", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "You feel a cool breeze... maybe, just maybe...", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "You slowly open your eyes...", -1, 0, 0);
            StoryBuilder.AppendPauseAction(segment, 1000);
            StoryBuilder.AppendPlayMusicAction(segment, "%mapmusic%", true, true);
            StoryBuilder.AppendSaySegment(segment, "Hey! You!", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Are you okay?", -1, 0, 0);
            StoryBuilder.AppendCreateFNPCAction(segment, "0", map1ID, 25, 23, eevee.ID);
            StoryBuilder.AppendChangeFNPCDirAction(segment, "0", Server.Enums.Direction.Down);
            StoryBuilder.AppendMapVisibilityAction(segment, true);
            StoryBuilder.AppendSaySegment(segment, "Oh, good! You're awake!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "You've been laying there for a while now. Are you okay? Are you hurt?", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(An eevee is talking to me...)", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Oh, well. The important thing is that you are awake now!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "So, where are you from? I haven't seen you in these parts before.", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(Hmm... Where am I from? I don't remember a thing)", -1, 0, 0);
            StoryBuilder.AppendPauseAction(segment, 1000);
            StoryBuilder.AppendSaySegment(segment, "Oh, you don't remember? Strange. Anyway, you're probably wondering who I am...", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "...I am the great Eevocious! Master of evolutions and battle!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(Eevocious, huh... what an odd name. But, alright. Eevocious it is.)", -1, 0, 0);
            StoryBuilder.AppendPauseAction(segment, 2000);
            StoryBuilder.AppendSaySegment(segment, "...I bet I fooled you, didn't I.", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "And you actually thought I was Eevocious!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Yeah, I'm sorry. It's just hard to resist. A new Pokemon just appearing out of no where gives me a chance to be whomever I want to be!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(Very funny)", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Anyway, my real name is Eevee. I'm an explorer. Or, I want to become an explorer. See...", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "I can't become a true explorer until I prove that I am capable of handling the toughest situations. That's why I'm training to be able to get through Tiny Grotto!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(Tiny Grotto?)", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "You're probably wondering what Tiny Grotto even is! I'll explain.", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "It's a dungeon. It's not the hardest dungeon, but it's good practice. Yup, so I'm going to Tiny Grotto!", eevee.ID, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(Oh look, Eevee is leaving me.)", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "Bye~!", eevee.ID, 0, 0);
            StoryBuilder.AppendMoveFNPCAction(segment, "0", 1, 24, Server.Enums.Speed.Walking, true);
            StoryBuilder.AppendDeleteFNPCAction(segment, "0");
            StoryBuilder.AppendSaySegment(segment, "(Now what do I do next? I know I can't go to Tiny Grotto... I don't even know how to battle!)", -1, 0, 0);
            StoryBuilder.AppendSaySegment(segment, "(Maybe I'll find out more if I continue going North (^))", -1, 0, 0);
            StoryBuilder.AppendPlayerPadlockAction(segment, "Unlock");

            if (client.Player.Veteran)
            {
                StoryBuilder.AppendPlayerPadlockAction(segment, "Lock");
                StoryBuilder.AppendPauseAction(segment, 2000);
                StoryBuilder.AppendSaySegment(segment, "PMU Staff: You weren't expecting all this, now were you?", -1, 0, 0);
                StoryBuilder.AppendSaySegment(segment, "PMU Staff: Have fun exploring!", -1, 0, 0);
                StoryBuilder.AppendPlayerPadlockAction(segment, "Unlock");
            }
            #region old
            //StoryBuilder.AppendMapVisibilityAction(segment, false);
            //StoryBuilder.AppendSaySegment(segment, "Hey! You!", -1, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "Are you okay?", -1, 0, 0);
            //StoryBuilder.AppendCreateFNPCAction(segment, "0", map1ID, 10, 6, eevee.Sprite);
            //StoryBuilder.AppendMapVisibilityAction(segment, true);
            //StoryBuilder.AppendSaySegment(segment, "Oh, good! You're awake!", eevee.Mugshot, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "You've been laying there for a while now. Are you okay? Are you hurt?", eevee.Mugshot, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "(An eevee is talking to me...)", -1, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "You're probably wondering what Tiny Woods even is! I'll explain.", eevee.Mugshot , 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "It's a dungeon. It's not the hardest dungeon, but it's good practice. Yup, so I'm going to Tiny Woods!", eevee.Mugshot, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "(Oh look, Eevee is leaving me. Fun.", -1, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "Bye~!", eevee.Mugshot , 0, 0);
            //StoryBuilder.AppendMoveFNPCAction(segment, "0", 0, 7, Server.Enums.Speed.Walking, true);
            //StoryBuilder.AppendDeleteFNPCAction(segment, "0");
            //StoryBuilder.AppendSaySegment(segment, "(Now what do I do next? I know I can't go to Tiny Woods... I don't even know how to battle!", -1, 0, 0);
            //StoryBuilder.AppendSaySegment(segment, "(Maybe I'll find out more if I continue going North (^))", -1, 0, 0);
            //StoryBuilder.AppendPlayerPadlockAction(segment, "Unlock");
            #endregion

            segment.AppendToStory(story);
            return(story);
        }