public IEnumerator StartConversation(TextAsset dialog, bool withPortraits) { List <string> dialogEntries = DialogEngine.CreateDialogComponents(dialog.text); ConversationController.instance.StartConversation(dialogEntries); yield return(null); }
IEnumerator IntroSequence() { if (PlayOpeningBanter) { ChapterHud.instance.StartLevel(); while (!ChapterHud.instance.AnimationFinished()) { yield return(null); } BgmController.instance.PlayBGM(levelBgm); List <string> dialogEntries = DialogEngine.CreateDialogComponents(openingBanter.text); ShmupGameManager.instance.PauseGameplay(); ConversationController.instance.StartConversation(dialogEntries); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } } ShmupGameManager.instance.ResumeGameplay(); ShmupGameManager.instance.player.gameObject.SetActive(true); ShmupGameManager.instance.RespawnPlayer(); }
protected void OnRatingClick(object sender, EventArgs e) { string[] ratingInfo = ((LinkButton)sender).CommandArgument.Split(new char[] { '_' }); if (ratingInfo.Length == 2) { int rating = int.Parse(ratingInfo[1]); DataObject.AddRating(Udc, ratingInfo[0].ToNullableGuid(), dataObject.ObjectType, rating); _4screen.CSB.Extensions.Business.IncentivePointsManager.AddIncentivePointEvent(string.Format("{0}_RATE", Helper.GetObjectType(dataObject.ObjectType).Id.ToUpper()), Udc, ratingInfo[0]); } DrawRating(); List <string> pageNames = new List <string>(); pageNames.Add("RatingUpload"); List <Dialog> dialogs = DialogEngine.GetDialogByPageName(pageNames, UserProfile.Current.UserId); if (dialogs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (Dialog dialog in dialogs) { sb.AppendFormat("<div><b>{0}</b><br/>{1}</div>", dialog.Title, dialog.Content); sb.AppendFormat("<div style=\"margin-top:10px;margin-bottom:10px;height:1px;background-color:#CCCCCC;\"></div>"); } string content = Regex.Replace(sb.ToString(), "<(.*?)>", "<$1>"); // Ugly, but safari needs it ScriptManager.RegisterStartupScript((Control)this.objVp, this.objVp.GetType(), "DialogWin", "SetPopupWindow('" + this.ClientID + string.Format("', 700, 0, 200, '{0}', '", language.GetString("TitleRating").StripForScript()) + content + "', true);", true); } }
public IEnumerator StartConversation(TextAsset dialog, bool withPortraits) { if (pauseGameplay) { ShmupGameManager.instance.PauseGameplay(); } List <string> dialogEntries = DialogEngine.CreateDialogComponents(dialog.text); ConversationController.instance.StartConversation(dialogEntries); yield return(new WaitForEndOfFrame()); while (!ConversationController.instance.IsConversationFinished()) { yield return(null); } if (pauseGameplay) { ShmupGameManager.instance.ResumeGameplay(); } conversationOver = true; yield return(null); }
public void SimpleEngineConMath() { var player = new Actor(); player.Ammo = 3; var rules = new DialogRule[] { new DialogRule() { Name = "I have more than half health", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = ">", Right = "(/ player.maxHealth 2)" } } }, new DialogRule() { Name = "I am the king of health and ammo", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" }, new DialogRule.DialogCondition() { Left = "player.ammo", Op = ">", Right = "25" } } } }; var attributes = new ObjectDialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), }; var engine = new DialogEngine(); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have more than half health", best.Name); }
public void SimpleTemplateInterp() { var player = new Actor(); var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" } }, Dialog = new DialogRule.DialogPart[] { new DialogRule.DialogPart() { Speaker = "player", Content = "I have health of {player health} which and {player maxHealth + player health}", ContentParts = new string[] { "'I have health of '", "player.health", "' which and '", "(+ player.maxHealth player.health)" } } } }, }; var attributes = new ObjectDialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), }; var engine = new DialogEngine(); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); var dialogs = engine.ExecuteRuleDialogs(best); Assert.AreEqual(1, dialogs.Length); Assert.AreEqual("I have health of 50 which and 100", dialogs[0]); }
public void BoolBag2() { var player = new { health = 10, flags = new BagBoolElement[] { new BagBoolElement() { name = "a.part", value = true } }.ToList() }; var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.flags.a.part", Op = "=", Right = "true" }, new DialogRule.DialogCondition() { Left = "player.flags.b", Op = "=", Right = "false" } } }, }; var engine = new DialogEngine() .AddHandler(new BagBoolHandler()); var attributes = new DialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), DialogAttribute.New("player.flags", false, player.flags).UpdateElements(engine) //new BagDialogAttribute<bool>("player.flags", player.flags).UpdateElements(engine) }; attributes.ToList().ForEach(a => engine.AddAttribute(a)); rules.ToList().ForEach(r => engine.AddRule(r)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); }
public void SimpleEngineOutcomeSetter() { var player = new Actor(); player.MaxHealth = 100; player.Health = 100; var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" } }, Outcomes = new DialogRule.DialogOutcome[] { new DialogRule.DialogOutcome() { Command = "set", Target = "player.health", Arguments = new Dictionary <string, string>() { { "", "(/ player.maxHealth 2)" } } } } } }; var attributes = new ObjectDialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), }; var engine = new DialogEngine(); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); engine.ExecuteRuleOutcomes(best); Assert.AreEqual(50, player.Health); }
public void TemplateInterpStrings() { var player = new Actor(); var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" } }, Dialog = new DialogRule.DialogPart[] { new DialogRule.DialogPart() { Speaker = "player", Content = "my health is <color='red'> great </color>", ContentParts = new string[] { "'my health is <color='red'> great </color>'", } } } }, }; var attributes = new ObjectDialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), }; var engine = new DialogEngine(); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); var dialogs = engine.ExecuteRuleDialogs(best); Assert.AreEqual(1, dialogs.Length); Assert.AreEqual("my health is <color='red'> great </color>", dialogs[0]); }
public void Awake() { if (instance == null) { instance = this; } else if (this != instance) { Destroy(this.gameObject); } }
public void IntBag() { var player = new { health = 10, ints = new BagIntElement[] { }.ToList() }; var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.ints.a", Op = "=", Right = "10" }, new DialogRule.DialogCondition() { Left = "player.ints.hidaldo.rep", Op = ">", Right = "6" } } }, }; var engine = new DialogEngine() .AddHandler(new BagIntHandler()); var attributes = new DialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), DialogAttribute.New("player.ints", 10, player.ints).UpdateElements(engine) //new BagDialogAttribute<bool>("player.flags", player.flags).UpdateElements(engine) }; attributes.ToList().ForEach(a => engine.AddAttribute(a)); rules.ToList().ForEach(r => engine.AddRule(r)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); }
private void Update() { if (spaceInvaderWave.started && !spaceInvaderDialogStarted) { spaceInvaderDialogStarted = true; List <string> dialogEntries = DialogEngine.CreateDialogComponents(spaceInvaderBanter.text); ConversationController.instance.StartConversation(dialogEntries); } if (mainEncounter.IsCompleted()) { EndLevel(); } }
public IEnumerator PlayCutscene(TextAsset dialog, bool withPortraits, float autoPlay = 0.0f) { CutscenePause(); List <string> dialogEntries = DialogEngine.CreateDialogComponents(dialog.text); CutsceneDialogController.instance.StartCutscene(dialogEntries, autoPlay); while (!CutsceneDialogController.instance.IsCutsceneFinished()) { yield return(null); } CutsceneUnpause(); yield return(null); }
private void ShowDialog() { List <string> pageNames = new List <string>(); pageNames.Add("ProfileEditWidget"); List <Dialog> dialogs = DialogEngine.GetDialogByPageName(pageNames, UserProfile.Current.UserId); if (dialogs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (Dialog dialog in dialogs) { sb.AppendFormat("<div><b>{0}</b><br/>{1}</div>", dialog.Title, dialog.Content); sb.AppendFormat("<div style=\"margin-top:10px;margin-bottom:10px;height:1px;background-color:#CCCCCC;\"></div>"); } string content = Regex.Replace(sb.ToString(), "<(.*?)>", "<$1>"); // Ugly, but safari needs it ScriptManager.RegisterStartupScript((Control)this, this.GetType(), "DialogWin", "SetPopupWindow('" + this.ClientID + string.Format("', 700, 0, 200, '{0}', '", language.GetString("LableWidgetMessages").StripForScript()) + content + "', true);", true); } }
IEnumerator EndSequence() { List <string> dialogEntries = DialogEngine.CreateDialogComponents(closingBanter.text); ShmupGameManager.instance.PauseGameplay(); ConversationController.instance.StartConversation(dialogEntries); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } BgmController.instance.StopBGM(); ChapterHud.instance.EndLevel(); while (!ChapterHud.instance.AnimationFinished()) { yield return(null); } SceneManager.LoadScene(3); }
public void SimpleEngineTransform() { var player = new Actor(); var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "dialog.target.health", Op = "=", Right = "player.maxHealth" } } } }; var attributes = new ObjectDialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), }; var engine = new DialogEngine() .AddTransform("dialog.target", () => "player"); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); }
IEnumerator IntroSequence() { AudioManager.instance.OnPhase3LevelFadeIn(); ChapterHud.instance.StartLevel(); while (!ChapterHud.instance.AnimationFinished()) { yield return(null); } if (PlayOpeningBanter) { List <string> dialogEntries = DialogEngine.CreateDialogComponents(openingBanter.text); ShmupGameManager.instance.PauseGameplay(); ConversationController.instance.StartConversation(dialogEntries); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } } ShmupGameManager.instance.player.gameObject.SetActive(true); ShmupGameManager.instance.RespawnPlayer(); ShmupGameManager.instance.ResumeGameplay(); yield return(new WaitForSeconds(2.0f)); List <string> lockEntries = DialogEngine.CreateDialogComponents(lockBanter.text); ConversationController.instance.StartConversation(lockEntries); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } }
IEnumerator EndSequence() { AudioManager.instance.OnNextLevelUnlock(); AudioManager.instance.OnPhaseAnyLevelFadeOut(); List <string> dialogEntries = DialogEngine.CreateDialogComponents(closingBanter.text); ShmupGameManager.instance.PauseGameplay(); ConversationController.instance.StartConversation(dialogEntries); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } ChapterHud.instance.EndLevel(); while (!ChapterHud.instance.AnimationFinished()) { yield return(null); } SceneManager.LoadScene(2); }
IEnumerator IntroSequence() { AudioManager.instance.OnPhase1LevelFadeIn(); if (PlayOpeningCutscene) { ChapterHud.instance.StartLevel(); while (!ChapterHud.instance.AnimationFinished()) { yield return(null); } //TextAsset dialog = ProgressManager.instance.GetStartDialog(); StartCoroutine(ShmupGameManager.instance.PlayCutscene(openingCutscene, true)); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } } if (PlayOpeningBanter) { List <string> dialogEntries = DialogEngine.CreateDialogComponents(openingBanter.text); ShmupGameManager.instance.PauseGameplay(); ConversationController.instance.StartConversation(dialogEntries); yield return(null); while (ShmupGameManager.instance.Paused) { yield return(null); } } ShmupGameManager.instance.player.gameObject.SetActive(true); ShmupGameManager.instance.RespawnPlayer(); ShmupGameManager.instance.ResumeGameplay(); }
public void SimpleEngineOutcomeRunner() { var player = new Actor(); player.MaxHealth = 100; player.Health = 100; var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" } }, Outcomes = new DialogRule.DialogOutcome[] { new DialogRule.DialogOutcome() { Command = "run", Target = "player.sampleFunc", Arguments = new Dictionary <string, string>() { { "h", "(/ player.maxHealth 2)" }, { "ammo", "55" } } } } } }; // new OFDA(player, "setAll", new Dictionary<string, string>(){ var attributes = new DialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), new ObjectFunctionDialogAttribute("player.sampleFunc", new Action <Dictionary <string, object> >(vars => { var health = (int)vars["h"]; var maxHealth = (int)vars["mx"]; var ammo = (int)vars["ammo"]; player.SetAll(health, maxHealth, ammo); }), new Dictionary <string, object> { { "mx", 200 } }) }; var engine = new DialogEngine(); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); engine.ExecuteRuleOutcomes(best); Assert.AreEqual(50, player.Health); Assert.AreEqual(200, player.MaxHealth); Assert.AreEqual(55, player.Ammo); }
public void StringAndIntBags() { var player = new { health = 10, nums = new BagIntElement[] { new BagIntElement() { name = "a", value = 5 } }.ToList(), strs = new BagStringElement[] { new BagStringElement() { name = "a", value = "tuna" } }.ToList() }; var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.nums.a", Op = "=", Right = "5" }, new DialogRule.DialogCondition() { Left = "player.nums.b", Op = ">", Right = "6" }, new DialogRule.DialogCondition() { Left = "player.strs.a", Op = "=!", Right = "player.strs.b" } } }, }; var engine = new DialogEngine() .AddHandler(new BagIntHandler()) .AddHandler(new BagStringHandler()); var attributes = new DialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), DialogAttribute.New("player.nums", 10, player.nums).UpdateElements(engine), DialogAttribute.New("player.strs", "eggs", player.strs).UpdateElements(engine) //new BagDialogAttribute<bool>("player.flags", player.flags).UpdateElements(engine) }; attributes.ToList().ForEach(a => engine.AddAttribute(a)); rules.ToList().ForEach(r => engine.AddRule(r)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); }
public void SimpleEngineWithConditionSetLoopDetected() { var player = new Actor(); player.Health = player.MaxHealth; var sets = new DialogConditionSet[] { new DialogConditionSet() { Name = "test", Conditions = new DialogConditionSet.DialogCondition[] { new DialogConditionSet.DialogCondition() { Left = "player.health", Op = ">", Right = "1" }, new DialogConditionSet.DialogCondition() { Left = "__.conditions.egg", Op = "=", Right = "true" } } }, new DialogConditionSet() { Name = "egg", Conditions = new DialogConditionSet.DialogCondition[] { new DialogConditionSet.DialogCondition() { Left = "__.conditions.test", Op = "=", Right = "true" }, new DialogConditionSet.DialogCondition() { Left = "player.ammo", Op = ">", Right = "5" } } } }; var rules = new DialogRule[] { new DialogRule() { Name = "I have full health!", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" }, new DialogRule.DialogCondition() { Left = "__.conditions.egg", Op = "=", Right = "true" } } }, new DialogRule() { Name = "I am less specific", Conditions = new DialogRule.DialogCondition[] { new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" }, new DialogRule.DialogCondition() { Left = "player.health", Op = "=", Right = "player.maxHealth" } } }, }; var attributes = new ObjectDialogAttribute[] { new ObjectDialogAttribute(player, "player", "health"), new ObjectDialogAttribute(player, "player", "maxHealth"), new ObjectDialogAttribute(player, "player", "ammo"), }; var engine = new DialogEngine().AddHandler(new ConditionSetEvalHandler()); sets.ToList().ForEach(r => engine.AddConditionSet(r)); rules.ToList().ForEach(r => engine.AddRule(r)); attributes.ToList().ForEach(a => engine.AddAttribute(a)); var best = engine.GetBestValidDialog(); Assert.IsNotNull(best); Assert.AreEqual("I have full health!", best.Name); }
protected void Page_Load(object sender, EventArgs e) { if (!isReadOnly) { ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("/Services/WidgetService.asmx")); } // Show customization bar if (!string.IsNullOrEmpty(Request.QueryString["edit"]) && !isReadOnly) { if (Request.QueryString["edit"] == "content") { CustomizationBarContent customizationBar = (CustomizationBarContent)LoadControl("~/UserControls/CustomizationBarContent.ascx"); customizationBar.ID = "cb"; customizationBar.CommunityID = PageInfo.EffectiveCommunityId.Value; PhCB.Controls.Add(customizationBar); } else if (Request.QueryString["edit"] == "style") { CustomizationBarStyle customizationBar = (CustomizationBarStyle)LoadControl("~/UserControls/CustomizationBarStyle.ascx"); customizationBar.ID = "cb"; customizationBar.CommunityID = PageInfo.EffectiveCommunityId.Value; PhCB.Controls.Add(customizationBar); } // Show dialogs if (pageOrCommunity.ObjectType == Helper.GetObjectTypeNumericID("ProfileCommunity")) { List <string> pageNames = new List <string>(); pageNames.Add("ProfileEditStyle"); List <Dialog> dialogs = DialogEngine.GetDialogByPageName(pageNames, UserProfile.Current.UserId); if (dialogs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (Dialog dialog in dialogs) { sb.AppendFormat("<div><b>{0}</b><br/>{1}</div>", dialog.Title, dialog.Content); sb.AppendFormat("<div style=\"margin-top:10px;margin-bottom:10px;height:1px;background-color:#CCCCCC;\"></div>"); } string content = Regex.Replace(sb.ToString(), "<(.*?)>", "<$1>"); // Ugly, but safari needs it ScriptManager.RegisterStartupScript(this, this.GetType(), "DialogWin", "SetPopupWindow('" + this.ClientID + "', 700, 0, 200, 'Mitteilungen', '" + content + "', true);", true); } } } // Load tabbar if (pageOrCommunity.ObjectType == Helper.GetObjectTypeNumericID("Community") || pageOrCommunity.ObjectType == Helper.GetObjectTypeNumericID("ProfileCommunity")) { TabBar tabBar = (TabBar)LoadControl("~/UserControls/TabBar.ascx"); tabBar.ID = "tb"; tabBar.WDC = wdc; tabBar.Pages = pages; tabBar.CurrentPage = currentPage; tabBar.IsOwner = isOwner; tabBar.IsMember = isMember; tabBar.PageOrCommunity = pageOrCommunity; tabBar.Community = community; Ph.Controls.Add(tabBar); } // Load layout Layout layout = Layouts.GetLayout(community.CTY_Layout); if (layout == null) { layout = Layouts.GetLayout("Default"); community.CTY_Layout = "Default"; wdc.SubmitChanges(); wdc.hisp_WidgetInstance_ReorderColumns(PageInfo.EffectiveCommunityId.Value, layout.NumberDropZones); } if (isReadOnly) { Ph2.Controls.Add(Page.ParseControl(layout.DisplayTemplate)); } else { Ph2.Controls.Add(Page.ParseControl(layout.DragDropTemplate)); } columnWidths = layout.ColumnWidths; columnPanels = new Panel[layout.NumberDropZones]; for (int i = 0; i < columnPanels.Length; i++) { columnPanels[i] = (Panel)Ph2.FindControl("WCP" + i); if (!isReadOnly) { columnPanels[i].Attributes["PageId"] = currentPage.PAG_ID.ToString(); } } LoadWidgets(); }
public static async Task Process(IDialogContext context) { var activity = context.Activity as Activity; Sesion sesion = context.UserData.GetValue <Sesion>("sesion"); context.UserData.SetValue("Usuario", sesion.Nombre); var container = new Container(); UnityConfig.RegisterTypes(container); /* 4.1.4 El Sistema crea una nueva Solicitud Académica con los datos indicados líneas abajo * en la entidad[GSAV_SolicitudAcadémica], generando un código único */ Solicitud solicitud = new Solicitud(); if (context.UserData.ContainsKey("solicitud")) { solicitud = LeerSolicitud(sesion, context, activity, container); if (solicitud.Estado != "P") { solicitud = CrearNuevaSolicitud(sesion, context, activity, container); } } else { solicitud = CrearNuevaSolicitud(sesion, context, activity, container); } try { DialogEngine handler = container.GetInstance <DialogEngine>(); Result receivedResult = await handler.GetSpeechAsync(activity, sesion, context); IIntencion intencionManager = container.GetInstance <IIntencion>(); /* * 4.1.5 El Sistema valida si existe una “Intención de Consulta” para la pregunta * ingresada por el alumno a través del Agente de Procesamiento de Lenguaje Natural. * GSAV _RN013 – Tipos de Consultas Académicas */ if (receivedResult.ExistIntent) { /* * 4.1.6 El Sistema valida si la “Intención de Consulta” obtenida tiene una probabilidad * mayor o igual al 80 %.GSAV _RN018– Porcentaje para respuestas certera */ var intentScore = receivedResult.Intents.FirstOrDefault().Score; if (receivedResult.ExistValidIntent) { string intent = receivedResult.GetValidIntent(); Intencion intencion = intencionManager.ObtenerCategoria(intent); context.UserData.SetValue("result", receivedResult); if (string.IsNullOrEmpty(intencion.NombreBase)) { intencion.NombreBase = intent; } context.UserData.SetValue("intencion", intencion); if (!string.IsNullOrEmpty(intent)) { string dfParams = receivedResult.Intents[0].Parameters; string dfContext = receivedResult.OutputContexts; Dictionary <string, string> listParams = JsonConvert.DeserializeObject <Dictionary <string, string> >(dfParams); string course = string.Empty; string assignment = string.Empty; int number = 0; if (listParams.Count > 0) { if (listParams.ContainsKey("Curso")) { course = listParams["Curso"]; context.UserData.SetValue("Curso", course); } if (listParams.ContainsKey("Tarea")) { assignment = listParams["Tarea"]; context.UserData.SetValue("Tarea", assignment); } if (listParams.ContainsKey("number")) { int.TryParse(listParams["number"], out number); context.UserData.SetValue("number", number); } } var message = context.MakeMessage(); switch (intencion.NombreBase) { case "ActividadAcademica": message.Text = $"Esta es una consulta de: {intent}"; context.PrivateConversationData.SetValue("custom", message.Text); await context.PostAsync(message); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO); context.Wait(MenuDialog.MessageReceivedAsync); break; case AppConstant.Intencion.PROGRAMACION: if (receivedResult.Intents[0].AllRequiredParamsPresent) { string fechaActividad = string.Empty; int numberSelected = context.UserData.GetValue <int>("number"); var actividadManager = container.GetInstance <IActividad>(); List <ActivitiesByCourseViewModel> activities = actividadManager.GetActivitiesByCourse(solicitud.IdAlumno); var filtered = activities.Where(o => o.Curso == course && o.Actividad == assignment); ActivitiesByCourseViewModel a = new ActivitiesByCourseViewModel(); if (filtered.Count() == 0) { //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.DERIVADA); context.Wait(MenuDialog.MessageReceivedAsync); return; } if (numberSelected > 0) { a = filtered.Where(o => o.NumeroActividad == numberSelected).FirstOrDefault(); fechaActividad = a?.FechaActividad.ToString("dd MMMM yyyy"); } else { a = filtered.Where(o => o.FechaActividad >= DateTime.Now).FirstOrDefault(); fechaActividad = a?.FechaActividad.ToString("dd MMMM yyyy"); } if (a == null) { a = new ActivitiesByCourseViewModel(); } context.UserData.SetValue("Actividad", a); if (!string.IsNullOrEmpty(fechaActividad)) { if (string.IsNullOrEmpty(receivedResult.Speech)) { string tareaConNumero = assignment; if (number > 0) { tareaConNumero = $"{assignment} {number}"; } receivedResult.Speech = $"La fecha de actividad de la {tareaConNumero} del Curso {course} es: {fechaActividad}"; } else { receivedResult.Speech = receivedResult.Speech + " " + fechaActividad; } context.UserData.SetValue("result", receivedResult); await context.PostAsync(receivedResult.Speech); //await context.Forward(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent, context, CancellationToken.None); //context.Wait(MenuDialog.ResumeAfterSuccessAcademicIntent); //context.Call(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO); context.Wait(MenuDialog.MessageReceivedAsync); } else { //context.Wait(MenuDialog.ResumeAfterFailedAcademicIntent); //await context.PostAsync(receivedResult.Speech); await context.PostAsync("La información ingresada es invalida, ingrese nuevamente su consulta"); //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent); //await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.FALTAINFORMACION); //context.Wait(MenuDialog.MessageReceivedAsync); //context.Call(new ProgramacionActividadesDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO); context.Wait(MenuDialog.MessageReceivedAsync); } } else { if (string.IsNullOrEmpty(course)) { var cursoManager = container.GetInstance <ICurso>(); List <CourseByModuleViewModel> studentActiveCourses = cursoManager.GetCourseByModuleActive(solicitud.IdAlumno); var questions = studentActiveCourses.Select(x => x.Curso).ToList();; string QuestionPrompt = "Por favor seleccione el curso?"; string invalidCourseInput = "La información ingresada es invalida, ingrese nuevamente su consulta"; PromptOptions <string> options = new PromptOptions <string>(QuestionPrompt, "", invalidCourseInput, questions, 0); // Overrided the PromptOptions Constructor. PromptDialog.Choice(context, MenuDialog.OnCourseSelected, options); } else { await context.PostAsync(receivedResult.Speech); } context.Wait(MenuDialog.MessageReceivedAsync); } break; case AppConstant.Intencion.CREDITOSCUSTOM: if (receivedResult.Intents[0].AllRequiredParamsPresent) { var actividadManager = container.GetInstance <IActividad>(); List <ActivitiesByCourseViewModel> activities = actividadManager.GetActivitiesByCourse(solicitud.IdAlumno); var filtered = activities.Where(o => o.Curso == course); await context.PostAsync(receivedResult.Speech + " " + 0); //context.Wait(MenuDialog.ResumeAfterSuccessAcademicIntent); //context.Call(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent); context.Wait(MenuDialog.MessageReceivedAsync); } else { if (string.IsNullOrEmpty(course)) { var cursoManager = container.GetInstance <ICurso>(); List <CourseByModuleViewModel> studentActiveCourses = cursoManager.GetCourseByModuleActive(solicitud.IdAlumno); var questions = studentActiveCourses.Select(x => x.Curso).ToList();; string QuestionPrompt = "Por favor seleccione el curso?"; string invalidCourseInput = "La información ingresada es invalida, ingrese nuevamente su consulta"; PromptOptions <string> options = new PromptOptions <string>(QuestionPrompt, "", invalidCourseInput, questions, 0); // Overrided the PromptOptions Constructor. PromptDialog.Choice(context, MenuDialog.OnCourseSelected, options); } else { await context.PostAsync(receivedResult.Speech); } context.Wait(MenuDialog.MessageReceivedAsync); } break; case AppConstant.Intencion.CREDITOS: case AppConstant.Intencion.ORGANIZACION: case AppConstant.Intencion.CALENDARIO: //case "OrganizacionAulaVirtual1": //context.Call(new CalendarioDialog(), ResumeAfterSuccessAcademicIntent); message = context.MakeMessage(); message.Text = $"Esta es una consulta de: {intent}"; //receivedResult.Speech = message.Text; context.PrivateConversationData.SetValue("custom", message.Text); await context.PostAsync(message); //context.Wait(MenuDialog.MessageReceivedAsync); //context.Call(new MenuDialog(), ResumeAfterSuccessAcademicIntent); //context.Wait(MenuDialog.ResumeAfterSuccessAcademicIntent); //context.Call(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO); context.Wait(MenuDialog.MessageReceivedAsync); break; //case AppConstant.Intencion.ORGANIZACION: // context.Call(new OrganizacionDialog(), ResumeAfterSuccessAcademicIntent); // break; case AppConstant.Intencion.MATRICULA: case AppConstant.Intencion.ASISTENCIA: case AppConstant.Intencion.RETIRO: case AppConstant.Intencion.PROMEDIO: //context.Call(new PreguntasFrecuentesDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent); //if (receivedResult.Speech.Equals(string.Empty)) //{ // receivedResult.Speech = "Por favor, canalice su consulta vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc"; //} await context.PostAsync(receivedResult.Speech); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO); context.Wait(MenuDialog.MessageReceivedAsync); break; //case AppConstant.Intencion.CREDITOS: // context.Call(new CreditosDialog(), ResumeAfterSuccessAcademicIntent); // break; case AppConstant.Intencion.DEFAULT: if (receivedResult.Speech.Equals(string.Empty)) { receivedResult.Speech = "Por favor, canalice su consulta vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc"; } await context.PostAsync(receivedResult.Speech); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO); context.Wait(MenuDialog.MessageReceivedAsync); //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterFailedAcademicIntent); break; default: //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.DERIVADA); context.Wait(MenuDialog.MessageReceivedAsync); break; } } else { var userName = context.UserData.GetValue <Sesion>("sesion").Nombre; var message = context.MakeMessage(); message.Text = $"Uhmmm... {userName} estoy entrenándome para ayudarte más adelante con este tipo de dudas.{Environment.NewLine} Pero recuerda que vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc puedes resolver tus dudas o consultas."; context.PrivateConversationData.SetValue("custom", message.Text); await context.PostAsync(message); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO); //context.Wait(MenuDialog.ResumeGetAcademicIntent); context.Wait(MenuDialog.MessageReceivedAsync); } } else { //ExistValidIntent = false //context.Call(new SinScoreDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent); var userName = context.UserData.GetValue <Sesion>("sesion").NombreApePaterno; var message = context.MakeMessage(); message.Text = $"Uhmmm... {userName} estoy entrenándome para ayudarte más adelante con este tipo de dudas.{Environment.NewLine} Pero recuerda que vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc puedes resolver tus dudas o consultas."; context.PrivateConversationData.SetValue("custom", message.Text); await context.PostAsync(message); //context.Call(new MenuDialog(), MenuDialog.ResumeAfterUnknownAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO); context.Wait(MenuDialog.MessageReceivedAsync); } } else { //ExistIntent = false //await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO); //context.Call(new SinScoreDialog(), MenuDialog.ResumeAfterUnknownAcademicIntent); var userName = context.UserData.GetValue <Sesion>("sesion").NombreApePaterno; string sinScoreDialogSpeech = $"Uhmmm... {userName} estoy entrenándome para ayudarte más adelante con este tipo de dudas.{Environment.NewLine}. Pero recuerda que vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc puedes resolver tus dudas o consultas"; await context.PostAsync(sinScoreDialogSpeech); //context.Call(new MenuDialog(), MenuDialog.ResumeAfterUnknownAcademicIntent); await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO); context.Wait(MenuDialog.MessageReceivedAsync); } } catch (Exception ex) { Console.WriteLine(ex.Message); BaseData.LogError(ex); } }