public DialogFlow GetCaughtByGuardsDialogFlow(Hero victim, bool canBribe, Action onFightStart, Action onGuardsBribed)
        {
            var bribeAmount = AssassinationCaughtByGuardsLogic.GuardsBribeAmount;

            var startFightOption = new TextObject("{=aaC7DDfK}I am here to put an end to {VICTIM_NAME}. Move aside or die!");

            startFightOption.SetTextVariable("VICTIM_NAME", victim.FirstName);

            var bribeGuardsOption = new TextObject("{=3N7FUr35}Perhaps we can come to some sort of agreement... (Bribe {BRIBE_AMOUNT} gold)");

            bribeGuardsOption.SetTextVariable("BRIBE_AMOUNT", string.Format("{0:n0}", bribeAmount));

            var dialogFlow = DialogFlow
                             .CreateDialogFlow("start", int.MaxValue)
                             .NpcLine(new TextObject("{=cIL4bcTL}Halt! Who are you? It is forbidden to bring weapons into the keep."))
                             .BeginPlayerOptions()
                             .PlayerOption(startFightOption)
                             .Consequence(() => onFightStart())
                             .CloseDialog()
                             .PlayerOption(bribeGuardsOption)
                             .Condition(() => canBribe)
                             .ClickableCondition((out TextObject explanation) => BribeGuardsClickableCondition(out explanation, bribeAmount))
                             .NpcLine(new TextObject("{=a1tXDKmk}That's more like it. Make it quick, before I change my mind."))
                             .CloseDialog()
                             .Consequence(() => onGuardsBribed())
                             .EndPlayerOptions();

            return(dialogFlow);
        }
Пример #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NlpDispatchBot"/> class.
 /// </summary>
 /// <param name="services">Services configured from the ".bot" file.</param>
 public SysforeAIBotBot(IOptionsSnapshot <AppSettings> appSettings, IOptionsSnapshot <DialogFlow> dialogFlow, SysforeAIBotAccessors accessors)
 {
     _accessors   = accessors ?? throw new System.ArgumentNullException(nameof(accessors));
     _appSettings = appSettings.Value;
     _dialogFlow  = dialogFlow.Value;
     _services    = BotServiceHelper.InitBotServices(_appSettings);
 }
Пример #3
0
        protected override void SetDialogs()
        {
            // Dialog to discuss the quest?

            OfferDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.QuestOfferToken, 100)
                              .NpcLine(new TextObject("We have run into a problem with certain units"))
                              .NpcLine(new TextObject("Do you want to help us get rid of them"))
                              .BeginPlayerOptions()
                              .PlayerOption(new TextObject("Yes"))
                              .PlayerOption(new TextObject("No") /*, new ConversationSentence.OnMultipleConversationConsequenceDelegate((x) => { StartQuest();return true; })*/)
                              .EndPlayerOptions()
                              .CloseDialog();

            DiscussDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.QuestDiscussToken, 100)
                                .NpcLine(new TextObject("You have more units to kill"))
                                .CloseDialog();



            QuestCharacterDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.CharacterTalkToken)
                                       .NpcLine(new TextObject("idk"))
                                       .CloseDialog();

            Campaign.Current.ConversationManager.AddDialogFlow(OfferDialogFlow, this);
            Campaign.Current.ConversationManager.AddDialogFlow(DiscussDialogFlow, this);
            Campaign.Current.ConversationManager.AddDialogFlow(QuestCharacterDialogFlow, this);
        }
Пример #4
0
        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable <object> result)
        {
            var activity = await result as Activity;

            // Calculate something for us to return
            int length = (activity.Text ?? string.Empty).Length;

            if (length > 0)
            {
                Request request = new Request();
                request.Message   = activity.Text.ToString();
                request.SessionId = "";
                var response = DialogFlow.getDialogfloW(request);

                // Return our reply to the user
                await context.PostAsync(response);

                context.Wait(MessageReceivedAsync);
                return;
            }
            // Return our reply to the user
            await context.PostAsync($"Invalid request");

            context.Wait(MessageReceivedAsync);
        }
        public DialogFlow GetCapturedDialogFlow(Hero player, Hero assassinationTarget)
        {
            var dialogFlow = DialogFlow
                             .CreateDialogFlow("start", int.MaxValue)
                             .NpcLine(new TextObject("{=h1HEeHEk}You filthy rat. Did you really think you would get away with it? Everyone shall know of your cowardice and failure."));

            return(dialogFlow);
        }
Пример #6
0
 public BotConfigurationController(
     IWritableOptions <AppSettings> writeOptions,
     IOptionsSnapshot <AppSettings> appSettings,
     IWritableOptions <DialogFlow> dialogFlowWriteOptions,
     IOptionsSnapshot <DialogFlow> dialogFlow
     )
 {
     _writeOptions           = writeOptions;
     _appSettings            = appSettings.Value;
     _dialogFlowWriteOptions = dialogFlowWriteOptions;
     _dialogFlow             = dialogFlow.Value;
 }
Пример #7
0
 public IActionResult UpdateDialogFlow([FromBody] DialogFlow dialogFlow)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     _dialogFlowWriteOptions.Update(opt => {
         opt.NextResponse = dialogFlow.NextResponse;
         opt.Answer       = dialogFlow.Answer;
         opt.Branches     = dialogFlow.Branches;
     });
     return(NoContent());
 }
        public DialogFlow GetAssassinationDialogFlow(Hero player, Hero victim, Action onFightStart, Action onLeave)
        {
            var dialogFlow = DialogFlow
                             .CreateDialogFlow("start", int.MaxValue)
                             .NpcLine(GetIntroText(player, victim))
                             .BeginPlayerOptions()
                             .PlayerOption(new TextObject("{=UlByid6B}I am here to kill you!"))
                             .Consequence(() => onFightStart())
                             .CloseDialog()
                             .PlayerOption(new TextObject("{=urBkJcfs}I must apologise, I have gotten lost. I'll be on my way. (Leave)"))
                             .NpcLine(new TextObject("{=d6Y8pYjf}Hmm, very well then. I shall be having a word with my guards about their attentiveness."))
                             .CloseDialog()
                             .Consequence(() => onLeave())
                             .EndPlayerOptions();

            return(dialogFlow);
        }
Пример #9
0
        private void SetMerchantDialog()
        {
            string questOptionsToken;
            var    dialogFlowStart = DialogFlow.CreateDialogFlow(DialogTokenShortcuts.mainOptions)
                                     .PlayerLine(QuestDialogs.PlayerAsksMerchantForQuest.message)
                                     .Condition(() => Hero.OneToOneConversationHero != null && Hero.OneToOneConversationHero == QuestGiver && !_metMerchant)
                                     .Consequence(() => _metMerchant = true)
                                     .NpcLine(QuestDialogs.MerchantInitialResponse1.message)
                                     .NpcLine(QuestDialogs.MerchantInitialResponse2.message)
                                     .GetOutputToken(out questOptionsToken)
                                     .BeginPlayerOptions()
                                     .PlayerOption(QuestDialogs.PlayerQuestInformationOption1.message)
                                     .NpcLine(QuestDialogs.MerchantQuestInformationOption1Response.message)
                                     .GotoDialogState(questOptionsToken)
                                     .PlayerOption(QuestDialogs.PlayerQuestInformationOption2.message)
                                     .NpcLine(QuestDialogs.MerchantQuestInformationOption2Response1.message)
                                     .NpcLine(QuestDialogs.MerchantQuestInformationOption2Response2.message)
                                     .GotoDialogState(questOptionsToken)
                                     .PlayerOption(QuestDialogs.PlayerAcceptQuest.message)
                                     .Consequence(MerchantDialogConsequence)
                                     .EndPlayerOptions()
                                     .CloseDialog();

            var dialogFlowEnd = DialogFlow.CreateDialogFlow(DialogTokenShortcuts.mainOptions)
                                .PlayerLine(QuestDialogs.PlayerReturnsToMerchant.message)
                                .Condition(() => Hero.OneToOneConversationHero != null && Hero.OneToOneConversationHero == QuestGiver && _metMerchant)
                                .NpcLine(QuestDialogs.MerchantQueryOnCompletion.message)
                                .PlayerLine(QuestDialogs.PlayerNotCompletedResponse.message)
                                .Condition(() => !hasJawwalPrisonersCondition())
                                .CloseDialog()
                                .PlayerLine(QuestDialogs.PlayerReadyToSideWithMerchant.message)
                                .Condition(() => hasJawwalPrisonersCondition())
                                .NpcLine(QuestDialogs.MerchantInitialOffer.message)
                                .BeginPlayerOptions()
                                .PlayerOption("You'll have to do better than that - ADD PERSUASION FLOW HERE.")
                                .ClickableCondition(ClickableConditionTest)
                                .PlayerOption(QuestDialogs.PlayerAcceptedOffer.message)
                                .Consequence(EndQuestBySidingWithMerchantConsequence)
                                .CloseDialog()
                                .EndPlayerOptions();

            Campaign.Current.ConversationManager.AddDialogFlow(dialogFlowStart, this);
            Campaign.Current.ConversationManager.AddDialogFlow(dialogFlowEnd, this);
        }
Пример #10
0
        private void SetJawwalDialog()
        {
            QuestDialogs.PlayerMeetsJawwal.message.SetTextVariable("SettlementName", QuestGiver.CurrentSettlement.Name);
            QuestDialogs.JawwalMeetingResponse.message.SetTextVariable("QuestGiverName", QuestGiver.Name);

            var dialogFlowStart = DialogFlow.CreateDialogFlow(DialogTokenShortcuts.mainOptions)
                                  .PlayerLine(QuestDialogs.PlayerMeetsJawwal.message)
                                  .Condition(() => Hero.OneToOneConversationHero != null && _merchantQuestAccepted && !_metJawwal && GetAllJawwalHeroes().Contains(Hero.OneToOneConversationHero.CharacterObject))
                                  .Consequence(() => _metJawwal = true)
                                  .NpcLine(QuestDialogs.JawwalMeetingResponse.message)
                                  .BeginPlayerOptions()
                                  .PlayerOption(QuestDialogs.PlayerAttacksJawwal.message)
                                  .CloseDialog()
                                  .EndPlayerOptions();

            var dialogFlowEnd = DialogFlow.CreateDialogFlow(DialogTokenShortcuts.mainOptions);

            Campaign.Current.ConversationManager.AddDialogFlow(dialogFlowStart, this);
            Campaign.Current.ConversationManager.AddDialogFlow(dialogFlowEnd, this);
        }
        private static void TestDialogFlow2(BasePlayer sender)
        {
            sender.SendClientMessage("Test dialog flow started");
            var dialog = new DialogFlow(false)
                         .AddDialog(ListDialogBuilder.Create()
                                    .WithCaption("Dialog 1")
                                    .WithMessage("Pierwszy dialog")
                                    .WithLeftButton("Dalej")
                                    .WithRightButton("Wyjdź")
                                    .Continue()
                                    .WithRow("Pierwsza opcja")
                                    .WithRow("Druga opcja")
                                    .WithRow("Trzecia opocja")
                                    .Build())
                         .AddDialog(InputDialogBuilder.Create()
                                    .WithCaption("Dialog 2")
                                    .WithMessage("Dialog drugi")
                                    .WithLeftButton("Dalej")
                                    .WithRightButton("Cofnij")
                                    .Continue().PasswordStyle()
                                    .Build())
                         .AddDialog(MessageDialogBuilder.Create()
                                    .WithCaption("Dialog 3")
                                    .WithMessage("Trzeci dialog")
                                    .WithLeftButton("Gotowe")
                                    .WithRightButton("Cofnij")
                                    .Build())
                         .End((o, args) =>
            {
                foreach (var arg in args)
                {
                    sender.SendClientMessage(
                        $"Output {arg.Key}: input: {arg.Value.InputText} | listitem: {arg.Value.ListItem}");
                }
            });

            dialog.Show(sender);
        }
        private static void TestDialogFlow(BasePlayer sender)
        {
            sender.SendClientMessage("Test dialog flow started");
            var first = new ListDialog("Dialog 1", "Dalej", "Wyjdź");

            first.Items.Add("Pierwsza opcja");
            first.Items.Add("Druga opcja");
            first.Items.Add("Trzecia opcja");
            IDialog dialog = new DialogFlow(false)
                             .AddDialog(first)
                             .AddDialog(new InputDialog("Dialog 2", "Drugi dialog", false, "Dalej", "Cofnij"))
                             .AddDialog(new MessageDialog("Dialog 3", "Ostatni dialog", "Gotowe", "Cofnij"))
                             .End((o, args) =>
            {
                foreach (var arg in args)
                {
                    sender.SendClientMessage(
                        $"Output {arg.Key}: input: {arg.Value.InputText} | listitem: {arg.Value.ListItem}");
                }
            });

            dialog.Show(sender);
        }
Пример #13
0
        public IHttpActionResult POST()
        {
            //取得 http Post RawData(should be JSON)
            string postData = Request.Content.ReadAsStringAsync().Result;
            //剖析JSON
            var ReceivedMessage = isRock.LineBot.Utility.Parsing(postData);

            try
            {
                DialogFlow _df = new DialogFlow(ReceivedMessage);
                _df.Process();
                return(Ok());
            }
            catch (Exception ex)
            {
                var _LineEvent = ReceivedMessage.events.FirstOrDefault();
                var _userId    = _LineEvent.source.userId;
                //回覆訊息
                this.PushMessage(_userId, "發生錯誤:\n" + ex.Message);

                return(Ok());
            }
        }
Пример #14
0
            protected override void SetDialogs()
            {
                OfferDialogFlow = DialogFlow.CreateDialogFlow("issue_classic_quest_start").NpcLine("{=CEEVENTS1080}I am serious.").Condition(() => Hero.OneToOneConversationHero == QuestGiver).Consequence(OnQuestAccepted).CloseDialog();

                DiscussDialogFlow = DialogFlow.CreateDialogFlow("quest_discuss").NpcLine(new TextObject("{=CEEVENTS1079}Have you come here to claim your equipment?")).Condition(() => CharacterObject.OneToOneConversationCharacter == QuestGiver.CharacterObject).BeginPlayerOptions().PlayerOption(new TextObject("{=CEEVENTS1077}Yes, I came for my things.")).NpcLine(new TextObject("{=CEEVENTS1078}Here you go {?PLAYER.GENDER}milady{?}sir{\\?}.")).Consequence(CompleteQuestWithSuccess).CloseDialog();
            }