public void OnBeginInteraction()
    {
        npc.npcEventHandler.NPCSelection += DialogueSelectionHandler;

        InfoSignAnim.Play(InfoSignAnimHash.EMPTY);
        DialogueBoxAnim.Play(DialogueBoxAnimHash.IDLE);
        initBox();

        if (npcConversation == null)
        {
            npcConversation = npcConversationOld;
        }

        if (npcConversation != null)
        {
            npcConversation.ResetIndex();
            getNextSentence();
            resetTotalTime();

            _currentConverseStatus = ConversationStatus.CONVERSE;
        }
        else
        {
            OnEndInteraction();
        }
    }
    public virtual void OnEndInteraction()
    {
        cleanUpBox();
        selectionBox.gameObject.SetActive(false);
        DialogueBoxAnim.Play(DialogueBoxAnimHash.EMPTY);
        InfoSignAnim?.Play(InfoSignAnimHash.INTRO);

        OP.DestroyGameObject();

        _currentConverseStatus = ConversationStatus.EMPTY;

        // Change conversation default to next conversation if presented
        if (npcConversation != null && currentConversationIndex + 1 < npcConversations.Count())
        {
            currentConversationIndex++;
            SetConversation(npcConversations[currentConversationIndex]);

            if (MiscData.conversationIndex.ContainsKey(GetComponent <GulchGUID>().ID))
            {
                MiscData.conversationIndex[GetComponent <GulchGUID>().ID] = currentConversationIndex;
            }
            else
            {
                MiscData.conversationIndex.Add(GetComponent <GulchGUID>().ID, currentConversationIndex);
            }
        }

        npc.npcEventHandler.NPCSelection -= DialogueSelectionHandler;
    }
    // --------------------------------------------------


    public void OnInteraction()
    {
        switch (_currentConverseStatus)
        {
        case ConversationStatus.EMPTY:
            // seek next converse or question
            if (npcConversation != null && npcConversation.HasNext())
            {
                getNextSentence();
                cleanUpBox();
                _currentConverseStatus = ConversationStatus.CONVERSE;
            }
            else
            {
                npc.npcEventHandler.OnNPCEndInteraction();
            }
            break;

        case ConversationStatus.CONVERSE:
            // skip converse
            totalTime = 100f;
            break;

        case ConversationStatus.SELECTION:
            confirmSelection();
            break;

        default:
            break;
        }
    }
    // Use this for initialization
    void Start()
    {
        this.player = GameObject.FindWithTag("PlayerObject");
        this.playerConversationStatus = player.GetComponent<ConversationStatus>();
        this.playerMovementScripts = player.GetComponents<MonoBehaviour>();

        this.currentDialog = dialogOption.GetComponent<MonoBehaviour>();
    }
Ejemplo n.º 5
0
        /// <summary>
        /// Triggers the ActiveStatus and changes it to the NextStatus
        /// </summary>
        /// <param name="dialogueManager">Dialogue Manager where the Dialogue will be displayed</param>
        private void TriggerStatus(DialogueManager dialogueManager)
        {
            ConversationStatus status = this.model.ActiveStatus;

            this.model.GameConversations.ConversationsToAdd.AddRange(status.NewConversations);
            dialogueManager.DialogueToShow = status.Dialogue;
            this.model.ActiveStatus        = status.NextStatus;
            this.model.ActiveStatusIndex   = status.NextStatusIndex;
        }
    // Use this for initialization
    void Start()
    {
        this.player = GameObject.FindWithTag("PlayerObject");
        this.playerConversationStatus = player.GetComponent<ConversationStatus>();

        this.moodObject = GameObject.FindWithTag("PlayerHealth");

        if (moodObject) {
            this.mood = moodObject.GetComponent<PlayerStatBar>();
        }
    }
Ejemplo n.º 7
0
        public async Task ChangeStatus(long conversationId, ConversationStatus status)
        {
            var payload = new
            {
                op    = "replace",
                path  = "/status",
                value = status.ToString().ToLowerInvariant()
            };

            await PerformPatch(conversationId, payload).ConfigureAwait(false);
        }
Ejemplo n.º 8
0
        private void startLogic(string username)
        {
            JObject obj = new APICaller("startConversation.php").AddParam("username", username).AddParam("privateKey", PrivateKey).Call();

            if (obj["status"].ToString() == "success")
            {
                Dictionary <string, User> users = new Dictionary <string, User>();
                Conversation conversation       = new Conversation
                {
                    Id           = obj["conversation"]["id"].ToObject <int>(),
                    Title        = obj["conversation"]["title"].ToString(),
                    Messages     = obj["conversation"]["messages"].ToObject <int>(),
                    LastActivity = obj["conversation"]["lastActivity"].ToObject <long>(),
                    LastMessage  = "",
                };
                try
                {
                    obj["conversation"]["users"].ToList().ForEach((user) =>
                    {
                        conversation.Users.Add(user.First.ToString());
                    });
                }
                catch (InvalidOperationException e)
                {
                    obj["conversation"]["users"].ToList().ForEach((user) =>
                    {
                        conversation.Users.Add(user.ToString());
                    });
                }
                obj["users"].ToList().ForEach((user) =>
                {
                    users[user.First["username"].ToString()] = new User
                    {
                        Username               = user.First["username"].ToString(),
                        FirstName              = user.First["firstName"].ToString(),
                        LastName               = user.First["lastName"].ToString(),
                        KarmaPoints            = user.First["karmaPoints"].ToObject <int>(),
                        IsLecturer             = Convert.ToBoolean(user.First["lecturer"].ToObject <int>()),
                        ProfilePictureLocation = user.First["profilePicture"].ToString(),
                    };
                });
                ConversationStartResult(ConversationStatus.Success, conversation, users);
            }
            else
            {
                ConversationStatus status = ConversationStatus.UnknownError;
                if (!Enum.TryParse <ConversationStatus>(obj["message"].ToString(), out status))
                {
                    status = ConversationStatus.UnknownError;
                }
                ConversationStartResult(status, null, null);
            }
        }
Ejemplo n.º 9
0
        public void UpdateConversationStatus(int ConversationId, int UserId, ConversationStatus Status)
        {
            SqlCommand command = DBUtils.StoredProcedure("Chat_UpdateConversationStatus", cte.lib);

            DBUtils.AddProcedureParameter(command, "@ConversationId", SqlDbType.Int, ConversationId, ParameterDirection.Input);
            DBUtils.AddProcedureParameter(command, "@UserId", SqlDbType.Int, UserId, ParameterDirection.Input);
            DBUtils.AddProcedureParameter(command, "@Status", SqlDbType.Int, (int)Status, ParameterDirection.Input);

            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }
        public static ConversationHistoryModel FindByDeviceId(string _deviceId, ConversationStatus _status)
        {
            var list = FindAllByDeviceId(_deviceId, _status);

            if (list.Count > 0)
            {
                return(list.First <ConversationHistoryModel>());
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// When the GUI is displayed
        /// </summary>
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();
            serializedObject.Update();
            ConversationComponent conversationComponent = ( ConversationComponent )target;
            Conversation          model = conversationComponent.Model;

            model.Name = EditorGUILayout.TextField("Name", model.Name);
            if (model.Status == null)
            {
                model.Status = new List <ConversationStatus>();
            }

            if (model.Status.Count > 0)
            {
                string[] statusListNames = model.Status.Select(s => s.Name).ToArray();
                model.ActiveStatusIndex = EditorGUILayout.Popup(
                    "Active Status",
                    model.ActiveStatusIndex,
                    statusListNames,
                    EditorStyles.popup);
                model.ActiveStatus = model.Status[model.ActiveStatusIndex];
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Status List", EditorStyles.boldLabel);
                ConversationStatusEditor.Display(model.Status, statusListNames);
            }

            if (GUILayout.Button(EditorButtons.AddStatusButton, EditorStyles.miniButton, EditorButtons.NormalButtonWidth))
            {
                ConversationStatus newStatus = new ConversationStatus();
                newStatus.Name = "Status " + (model.Status.Count + 1);
                model.Status.Add(newStatus);
            }

            EditorGUILayout.Space();
            EditorGUILayout.Space();

            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                EditorUtility.SetDirty(this.target);
                if (!Application.isPlaying)
                {
                    EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
                }
            }
        }
Ejemplo n.º 12
0
        public async Task <bool> UpdateConversationStatusAsync(ConversationStatus obj)
        {
            var tableClient = StorageAccount.CreateCloudTableClient();
            var tableRef    = tableClient.GetTableReference(TABLENAME_AGENT_CONVERSATION_STATUS);
            await tableRef.CreateIfNotExistsAsync();

            var blobClient    = StorageAccount.CreateCloudBlobClient();
            var blobContainer = blobClient.GetContainerReference(CONTAINERNAME_AGNET_LEASE_LOCK);

            blobContainer.CreateIfNotExists();

            var lockBlob = blobContainer.GetBlockBlobReference($"conversation{obj.ConversationId}.lock");

            if (!lockBlob.Exists())
            {
                lockBlob.UploadText("");
            }
            try
            {
                var leaseId = lockBlob.AcquireLease(
                    TimeSpan.FromSeconds(15),
                    null);
                try
                {
                    var tableOperation = TableOperation.InsertOrMerge(obj);
                    var result         = tableRef.Execute(tableOperation);

                    return(true);
                }
                catch (Exception exp)
                {
                    throw;
                }
                finally
                {
                    lockBlob.ReleaseLease(AccessCondition.GenerateLeaseCondition(leaseId));
                }
            }
            catch (Exception exp)
            {
                throw;
            }
            finally
            {
            }
        }
    public virtual void OnBeginInteraction()
    {
        if (player && MiscData.conversationIndex.ContainsKey(GetComponent <GulchGUID>().ID))
        {
            currentConversationIndex = MiscData.conversationIndex[GetComponent <GulchGUID>().ID];
        }
        else if (player)
        {
            currentConversationIndex = 0;
            MiscData.conversationIndex.Add(GetComponent <GulchGUID>().ID, 0);
        }
        if (npcConversations.Count() > 0)
        {
            npcConversation = npcConversations[currentConversationIndex];
        }

        npc.npcEventHandler.NPCSelection += DialogueSelectionHandler;

        InfoSignAnim?.Play(InfoSignAnimHash.EMPTY);
        DialogueBoxAnim.Play(DialogueBoxAnimHash.IDLE);
        initBox();

        selectionBox.gameObject.SetActive(false);

        ResetTotalTime();

        if (npcConversation != null)
        {
            if (npcConversation.isRandomConversation)
            {
                nextSentence = new Queue <char>(npcConversation.GetRandomSentence());
            }
            else
            {
                npcConversation.ResetIndex();
                getNextSentence();
            }
        }
        else
        {
            nextSentence = new Queue <char>("...");
        }
        _currentConverseStatus = ConversationStatus.CONVERSE;
    }
    private void confirmSelection()
    {
        if (_currentConverseStatus != ConversationStatus.SELECTION)
        {
            return;
        }

        NPCSelection selection = npcSelections[currentSelection];

        npcConversation = selection.conversation;

        if (npcConversation != null)
        {
            npcConversation.ResetIndex();
        }

        selectionBox.gameObject.SetActive(false);

        _currentConverseStatus = ConversationStatus.EMPTY;
        OnInteraction();
    }
    private void onConverse()
    {
        if (nextSentence.Count == 0)
        {
            if (!npcConversation.HasNext() && initSelectionBox())
            {
                _currentConverseStatus = ConversationStatus.SELECTION;
            }
            else
            {
                _currentConverseStatus = ConversationStatus.EMPTY;
                ResetTotalTime();
            }
            return;
        }

        int count = (int)(totalTime) - recycleObject.Count;

        //Debug.Log(count);

        for (int i = 0; i < count; i++)
        {
            if (!digestNextLetter())
            {
                if (!npcConversation.HasNext() && initSelectionBox())
                {
                    _currentConverseStatus = ConversationStatus.SELECTION;
                }
                else
                {
                    _currentConverseStatus = ConversationStatus.EMPTY;
                    ResetTotalTime();
                }
                break;
            }
        }
        totalTime += Time.deltaTime * textSpeed;
    }
 public static string ObtainStatus(this ConversationStatus value)
 {
     string[] values = { "None", "Learning", "Learned", "Notified", "DenyTeach", "Miss", "Closed" };
     return(values[(int)value]);
 }
        public static ApiResult AddMessageText(string _deviceId, string _fromUserId, string _fromMessage, string _toMessage, string _intent, double _score, long _synAppsAccountId, string _synAppsAccountName, long _assetId, ConversationStatus _status)
        {
            var apiResult = new ApiResult()
            {
                StatusCode = StatusCode.Success
            };
            var now = DateTime.UtcNow;
            var dc  = new ConversationHistoriesDataContext(SqlConnectionString);
            var conversationHistory = new ConversationHistory
            {
                DeviceId           = _deviceId,
                FromUserId         = _fromUserId,
                FromMessage        = _fromMessage,
                ToMessage          = _toMessage,
                Intent             = _intent,
                Score              = _score,
                SynAppsAccountId   = _synAppsAccountId,
                SynAppsAccountName = _synAppsAccountName,
                SynAppAssetId      = _assetId,
                Status             = _status.ObtainStatus(),
                UpdatedAt          = now,
                CreatedAt          = now
            };

            try
            {
                dc.ConversationHistories.InsertOnSubmit(conversationHistory);
                dc.SubmitChanges();
            }
            catch (Exception e)
            {
                apiResult.StatusCode = StatusCode.Error;
                apiResult.Message    = e.Message;
            }

            return(apiResult);
        }
        public static List <ConversationHistoryModel> FindAllByDeviceId(string _deviceId, ConversationStatus _status, string _fromMessage)
        {
            var dc        = new ConversationHistoriesDataContext(SqlConnectionString);
            var histories =
                from n in dc.ConversationHistories
                where n.DeviceId == _deviceId
                where n.Status == _status.ObtainStatus()
                where n.FromMessage == _fromMessage
                select n;

            return(Build(histories));
        }
Ejemplo n.º 19
0
    // Use this for initialization
    void Start()
    {
        this.player = GameObject.FindWithTag("PlayerObject");
        this.playerConversationStatus = player.GetComponent<ConversationStatus>();
        this.playerMovementScripts = player.GetComponents<MonoBehaviour>();

        if (this.barToImpact == null) {
            this.barToImpact = GameObject.FindWithTag("PlayerHealth");
        }

        if (barToImpact) {
            this.impactedStatBar = barToImpact.GetComponent<PlayerStatBar>();
        }

        if (GameObject.FindWithTag("DefaultDialogue")) {
            defaultDialogue =  GameObject.FindWithTag("DefaultDialogue").GetComponent<DefaultDialogue>();
        }

        if (GameObject.FindGameObjectWithTag("InnerMonologue")) {
            innerMonologue = GameObject.FindGameObjectWithTag("InnerMonologue");
        }
    }
        private async Task <Microsoft.Bot.Connector.DirectLine.Activity> PostToAgentBotAsync(Microsoft.Bot.Connector.DirectLine.Activity activityFromUser)
        {
            var directLineSecret = Configuration.ConfigurationHelper.GetString("AgentBot_DirectLine_Secret");
            var agentStatusDB    = Configuration.ConfigurationHelper.GetString("BotStatusDBConnectionString");
            var dc           = new DirectLineClient(directLineSecret);
            var agentStorage = new AgentStatusStorage(agentStatusDB);
            var agent        = await agentStorage.QueryAgentStatusAsync(activityFromUser.Recipient.Id);

            ConversationStatus convStatus = null;

            //var agentConversations = await agentStorage.QueryConversationStatusAsync(agent.Id);

            try
            {
                var uri = new Uri("https://directline.botframework.com");
                DirectLineClientCredentials creds  = new DirectLineClientCredentials(directLineSecret);                                //lot into the bot framework
                DirectLineClient            client = new DirectLineClient(uri, creds);                                                 //connect the client
                Microsoft.Bot.Connector.DirectLine.Conversations convs = new Microsoft.Bot.Connector.DirectLine.Conversations(client); //get the list of conversations belonging to the bot? Or does this start a new collection of conversations?

                Microsoft.Bot.Connector.DirectLine.Conversation conversation = null;
                if (string.IsNullOrEmpty(_agentConversationId))
                {
                    conversation         = dc.Conversations.StartConversation();
                    _agentConversationId = conversation.ConversationId;
                }
                else
                {
                    conversation = new Microsoft.Bot.Connector.DirectLine.Conversation()
                    {
                        ConversationId = _agentConversationId,
                    };
                }
                Logger.Info($"activityFromUser - From.Name:{activityFromUser.From.Name} - From.Id:{activityFromUser.From.Id}");
                Logger.Info($"activityFromUser - Recipient.Name:{activityFromUser.Recipient.Name} - Recipient.Id:{activityFromUser.Recipient.Name}");
                var toAgent = new Microsoft.Bot.Connector.DirectLine.Activity
                {
                    Type = Microsoft.Bot.Connector.DirectLine.ActivityTypes.Message,
                    Text = activityFromUser.Text,
                    From = new Microsoft.Bot.Connector.DirectLine.ChannelAccount
                    {
                        Id   = activityFromUser.From.Id,/*activityFromUser.From.Id,*/
                        Name = $"{activityFromUser.From.Name}@ocsuser"
                    },
                    Recipient   = activityFromUser.Recipient,
                    ChannelId   = agent.ChannelId,
                    ChannelData = new DirectLineChannelData
                    {
                        RoundTrip      = 0,
                        ConversationId = _agentConversationId,
                        UserID         = activityFromUser.From.Id,
                        UserName       = activityFromUser.From.Name
                    }
                };

                var resp = await dc.Conversations.PostActivityAsync(
                    conversation.ConversationId,
                    toAgent);

                Logger.Info($"OCSBot::Dialog:PostToAgent() - {JsonConvert.SerializeObject(toAgent)}");
                //convStatus = (await agentStorage.QueryConversationStatusAsync(agent.Id)).OrderByDescending(o => o.Timestamp).FirstOrDefault();
                //convStatus.OCSDirectlineConversationId = conversation.ConversationId;
                //convStatus.OCSEndUserId = activityFromUser.From.Id;
                //convStatus.OCSEndUserName = activityFromUser.From.Name;
                //convStatus.OCSBotName = activityFromUser.Recipient.Name;
                //convStatus.OCSBotId = activityFromUser.Recipient.Id;
                //await agentStorage.UpdateConversationStatusAsync(convStatus);
                return(null);
            }
            catch (Exception exp)
            {
                Logger.Info($"OCSBot::PostToAgent() - Exception while posting to Agent:{exp.Message}");
                throw;
            }
        }