public void NewConversationEvent(ConversationEvent conEvent) { messageDisplayed = true; currentConversationEvent = conEvent; currentMessageIndex = 0; ActivateConversationElement(conEvent.orderedConversation[0]); }
public void ActivateEvent(string eventID) { ConversationEvent eventToSend = allConvoEvents.Find(x => x.conversationUniqueID == eventID); if (eventToSend != null) { convoUI.NewConversationEvent(eventToSend); } }
/// <summary> /// Trigger conversation event function. /// </summary> /// <param name="clip"></param> public static void TriggerConversationEvent(string sentence) { ConversationEvent thisEvent = null; if (instance.conversationEventDictionary.TryGetValue(CONVERSATIONEVENT, out thisEvent)) { thisEvent.Invoke(sentence); } }
private void TestStep(ConversationEvent step) { var response = apiAi.TextRequest(step.Text); Assert.IsTrue(response.Result.Metadata.IntentName.StartsWith(step.IntentStartsWith), $"Expected {step.IntentStartsWith} but intent was {response.Result.Metadata.IntentName}"); var contexts = string.Join(", ", response.Result.Contexts.Select(s => s.Name)); Assert.AreEqual(step.Context, contexts); }
public static ConversationEvent Prepare( Conversation conversation, bool started ) { var e = new ConversationEvent(); e.Conversation = conversation; e.Started = started; return(e); }
public void StartConversation(ConversationEvent e) { if (e.Started) { if (ConversationInProgress) { Debug.LogError("Tried to start conversation while one was in progress."); } StartCoroutine(DisplayConversation(e.Conversation)); } }
/// <summary> /// Remove conversation listener function. /// </summary> /// <param name="listener"></param> public static void RemoveConversationListener(UnityAction <string> listener) { if (eventManager == null) { return; } ConversationEvent thisEvent = null; if (instance.conversationEventDictionary.TryGetValue(CONVERSATIONEVENT, out thisEvent)) { thisEvent.RemoveListener(listener); } }
private void Conversation_Event(ConversationEvent e) { if (!e.Started && e.Conversation == conversation) { // enable if our conversation is over Enable(); } if (e.Started && e.Conversation == conversation) { // disable to prevent multiple interactions Disable(); } }
public void OnStart(ConversationEvent eventdata) { ConversationModeOn = true; //Space.DispatchEvent(Events.OpenUI, new UIEvent(this)); Converse = eventdata.conversation; //interuptFlags = new List<ConvInteruprt>(); //InteruptFailNode = 0; // PhoneInterupt = false; //ExaminedItem = false; //ExamineInterupt = false; //ItemExamined = null; NextNode(0); //print("on"); }
/// <summary> /// Add conversation listener function. /// </summary> /// <param name="eventName"></param> /// <param name="listener"></param> public static void AddConversationListener(UnityAction <string> listener) { ConversationEvent thisEvent = null; if (instance.conversationEventDictionary.TryGetValue(CONVERSATIONEVENT, out thisEvent)) { thisEvent.AddListener(listener); } else { thisEvent = new ConversationEvent(); thisEvent.AddListener(listener); instance.conversationEventDictionary.Add(CONVERSATIONEVENT, thisEvent); } }
private void IncrementWordCountInDictionary(ConversationEvent messageEvent, Dictionary <string, int> dict) { //For non chat messages like call notifications if (messageEvent.chat_message == null) { return; } if (messageEvent.chat_message.message_content == null || messageEvent.chat_message.message_content.segment == null) { return; } foreach (MessageSegment messageText in messageEvent.chat_message.message_content.segment) { if (messageText == null || messageText.text == null) { continue; } string[] messageSplit = messageText.text.Split(' '); foreach (string word in messageSplit) { string lcWord = word.ToLower(); lcWord = lcWord.Replace("\"", ""); lcWord = lcWord.Replace("?", ""); lcWord = lcWord.Replace(".", ""); lcWord = lcWord.Replace("!", ""); lcWord = lcWord.Replace("-", ""); lcWord = lcWord.Replace("`", ""); lcWord = lcWord.Replace("(", ""); lcWord = lcWord.Replace(")", ""); lcWord = lcWord.Replace(",", ""); lcWord = lcWord.Replace(":", ""); lcWord = lcWord.Replace("\n", ""); lcWord = lcWord.Trim(); if (!dict.ContainsKey(lcWord)) { dict.Add(lcWord, 0); } dict[lcWord]++; } } }
private void TestStep(ConversationEvent step) { var message = new MessageReceived(new NameValueCollection() { { "CallSid", sessionId }, { "SpeechResult", step.Text } }); var response = MsgIn.ProcessMessage(botState, message); Assert.IsTrue(response.Intent.StartsWith(step.IntentStartsWith), $"Expected {step.IntentStartsWith} but intent was {response.Intent}"); var contexts = string.Join(", ", response.Contexts); Assert.AreEqual(step.Context, contexts); botState = response.BotState; }
private void _worker_DoWork(object sender, DoWorkEventArgs e) { var since = ReadLastPull(); SaveLastPull(since); while (true) { Thread.Sleep(4000); var request = new RestRequest($"/sms/pushes/{since.ToString("s", CultureInfo.InvariantCulture)}", Method.GET, DataFormat.Json); var response = RestClient.Execute <IEnumerable <Push> >(request); if (response.StatusCode != HttpStatusCode.OK) { since = DateTime.UtcNow; SaveLastPull(since); continue; } if (!response.Data.Any()) { since = DateTime.UtcNow; SaveLastPull(since); continue; } since = response.Data.Max(d => d.DateCreated).ToUniversalTime() + TimeSpan.FromSeconds(1); SaveLastPull(since); foreach (var push in response.Data) { switch (push.Name) { case "message-created": { var messageItem = JsonConvert.DeserializeObject <MessageItem>(push.Body); var messageEventPayload = new MessageEventPayload { EventType = MessageEventPayload.MessageEventType.Created, MessageItem = messageItem }; MessageEvent?.Invoke(this, messageEventPayload); break; } case "message-deleted": { var messageItem = JsonConvert.DeserializeObject <MessageItem>(push.Body); var messageEventPayload = new MessageEventPayload { EventType = MessageEventPayload.MessageEventType.Deleted, MessageItem = messageItem }; MessageEvent?.Invoke(this, messageEventPayload); break; } case "conversation-created": { var conversation = JsonConvert.DeserializeObject <Conversation>(push.Body); var conversationEventPayload = new ConversationEventPayload { EventType = ConversationEventPayload.ConversationEventType.Created, ConversationItem = conversation }; ConversationEvent?.Invoke(this, conversationEventPayload); break; } case "conversation-updated": { var conversation = JsonConvert.DeserializeObject <Conversation>(push.Body); var conversationEventPayload = new ConversationEventPayload { EventType = ConversationEventPayload.ConversationEventType.Updated, ConversationItem = conversation }; ConversationEvent?.Invoke(this, conversationEventPayload); break; } case "contact-created": { var contact = JsonConvert.DeserializeObject <Contact>(push.Body); var payload = new ContactUpdatedPayload { Contact = contact, UpdateType = ContactUpdatedPayload.UpdateTypes.Created }; ContactUpdatedEvent?.Invoke(this, payload); break; } case "contact-updated": { var contact = JsonConvert.DeserializeObject <Contact>(push.Body); var payload = new ContactUpdatedPayload { Contact = contact, UpdateType = ContactUpdatedPayload.UpdateTypes.Updated }; ContactUpdatedEvent?.Invoke(this, payload); break; } } } } }
public void OnStart(ConversationEvent eventdata) { TimeCheck = eventdata.conversation; NextNode(0); }
public void StartConversation() { EventDispatcher.Dispatch(ConversationEvent.Prepare(Conversation, true)); }
IEnumerator DisplayConversation(Conversation convo) { // Initialize the conversation convo.Init(); // get the current dialogue DialogueNode current = convo.current; // Safety in case this conversation is empty if (!current) { Debug.LogError("Tried to start empty conversation!"); } ConversationInProgress = true; DialogueManager.Instance.SetState(DialogueManager.GameState.Dialogue); // Clear text box DialogueText.text = ""; NameText.text = ""; // And show it Fader.FadeIn(); // Wait to make sure it's shown yield return(new WaitForSeconds(Fader.FadeInTime)); // while there's still dialogue to be had while (current != null) { // Show the dialogue yield return(StartCoroutine(DisplayDialogue(current))); // attempt to move to the next node if (convo.Next()) { // if we can, set it to current current = convo.current; } else { // otherwise, the conversation is over current = null; // hide the text box Fader.FadeOut(); // wait to make sure it's gone yield return(new WaitForSeconds(Fader.FadeOutTime)); } } ConversationInProgress = false; // Dispatch an event saying this conversation is over EventDispatcher.Dispatch(ConversationEvent.Prepare(convo, false)); // Return the game state to gameplay DialogueManager.Instance.SetState(DialogueManager.GameState.Gameplay); }
static Event ParseEvent(IDataReader dataReader) { Event @event; var type = (EventType)dataReader.ReadByte(); switch (type) { case EventType.Teleport: { // 1. byte is the x coordinate // 2. byte is the y coordinate // 3. byte is the character direction // Then 1 unknown byte // Then 1 byte for the transtion type (0-5) // Then a word for the map index // Then 2 unknown bytes (seem to be 00 FF) uint x = dataReader.ReadByte(); uint y = dataReader.ReadByte(); var direction = (CharacterDirection)dataReader.ReadByte(); var unknown1 = dataReader.ReadByte(); var transition = (TeleportEvent.TransitionType)dataReader.ReadByte(); uint mapIndex = dataReader.ReadWord(); var unknown2 = dataReader.ReadBytes(2); @event = new TeleportEvent { MapIndex = mapIndex, X = x, Y = y, Direction = direction, Transition = transition, Unknown1 = unknown1, Unknown2 = unknown2, }; break; } case EventType.Door: { // 1. byte is a lockpicking chance reduction (0: already open, 100: can't open via lockpicking) // 2. byte is the door index (used for unlock bits in savegame) // 3. byte is an optional text index that is shown initially (0xff = no text) // 4. byte is an optional text index if the door was unlocked (0xff = no text) // 5. byte is unknown (always 0) // word at position 6 is the key index if a key must unlock it // last word is the event index (0-based) of the event that is called when unlocking fails var lockpickingChanceReduction = dataReader.ReadByte(); var doorIndex = dataReader.ReadByte(); var textIndex = dataReader.ReadByte(); var unlockTextIndex = dataReader.ReadByte(); var unused = dataReader.ReadByte(); uint keyIndex = dataReader.ReadWord(); var unlockFailEventIndex = dataReader.ReadWord(); @event = new DoorEvent { LockpickingChanceReduction = lockpickingChanceReduction, DoorIndex = doorIndex, TextIndex = textIndex, UnlockTextIndex = unlockTextIndex, Unused = unused, KeyIndex = keyIndex, UnlockFailedEventIndex = unlockFailEventIndex }; break; } case EventType.Chest: { // 1. byte is a lockpicking chance reduction (0: already open, 100: can't open via lockpicking) // 2. byte are the chest flags // 3. byte is an optional text index (0xff = no text) // 4. byte is the chest index (0-based) // 5. byte (0 = chest, 1 = pile/removable loot or item) or "remove if empty" // word at position 6 is the key index if a key must unlock it // last word is the event index (0-based) of the event that is called when unlocking fails var lockpickingChanceReduction = dataReader.ReadByte(); var flags = (ChestEvent.ChestFlags)dataReader.ReadByte(); var textIndex = dataReader.ReadByte(); uint chestIndex = dataReader.ReadByte(); bool removeWhenEmpty = dataReader.ReadByte() != 0; uint keyIndex = dataReader.ReadWord(); var unlockFailEventIndex = dataReader.ReadWord(); @event = new ChestEvent { LockpickingChanceReduction = lockpickingChanceReduction, Flags = flags, TextIndex = textIndex, ChestIndex = chestIndex, RemoveWhenEmpty = removeWhenEmpty, KeyIndex = keyIndex, UnlockFailedEventIndex = unlockFailEventIndex }; break; } case EventType.PopupText: { // event image index (0xff = no image) // trigger (1 = move, 2 = eye cursor, 3 = both) // unknown boolean // map text index as word // 4 unknown bytes var eventImageIndex = dataReader.ReadByte(); var popupTrigger = (EventTrigger)dataReader.ReadByte(); var unknownBool = dataReader.ReadByte() != 0; var textIndex = dataReader.ReadWord(); var unknown = dataReader.ReadBytes(4); @event = new PopupTextEvent { EventImageIndex = eventImageIndex, PopupTrigger = popupTrigger, TextIndex = textIndex, UnknownBool = unknownBool, Unknown = unknown }; break; } case EventType.Spinner: { var direction = (CharacterDirection)dataReader.ReadByte(); var unused = dataReader.ReadBytes(8); @event = new SpinnerEvent { Direction = direction, Unused = unused }; break; } case EventType.Trap: { var ailment = (TrapEvent.TrapAilment)dataReader.ReadByte(); var target = (TrapEvent.TrapTarget)dataReader.ReadByte(); var affectedGenders = (GenderFlag)dataReader.ReadByte(); var baseDamage = dataReader.ReadByte(); var unused = dataReader.ReadBytes(5); // unused @event = new TrapEvent { Ailment = ailment, Target = target, AffectedGenders = affectedGenders, BaseDamage = baseDamage, Unused = unused }; break; } case EventType.RemoveBuffs: { byte affectedBuffs = dataReader.ReadByte(); var unused = dataReader.ReadBytes(8); @event = new RemoveBuffsEvent { AffectedBuff = affectedBuffs == 0 ? (ActiveSpellType?)null: (ActiveSpellType)(affectedBuffs - 1), Unused = unused }; break; } case EventType.Riddlemouth: { var introTextIndex = dataReader.ReadByte(); var solutionTextIndex = dataReader.ReadByte(); var unused = dataReader.ReadBytes(3); var correctAnswerTextIndex1 = dataReader.ReadWord(); var correctAnswerTextIndex2 = dataReader.ReadWord(); @event = new RiddlemouthEvent { RiddleTextIndex = introTextIndex, SolutionTextIndex = solutionTextIndex, CorrectAnswerDictionaryIndex1 = correctAnswerTextIndex1, CorrectAnswerDictionaryIndex2 = correctAnswerTextIndex2, Unused = unused }; break; } case EventType.Award: { var awardType = (AwardEvent.AwardType)dataReader.ReadByte(); var awardOperation = (AwardEvent.AwardOperation)dataReader.ReadByte(); var random = dataReader.ReadByte() != 0; var awardTarget = (AwardEvent.AwardTarget)dataReader.ReadByte(); var unknown = dataReader.ReadByte(); var awardTypeValue = dataReader.ReadWord(); var value = dataReader.ReadWord(); @event = new AwardEvent { TypeOfAward = awardType, Operation = awardOperation, Random = random, Target = awardTarget, AwardTypeValue = awardTypeValue, Value = value, Unknown = unknown }; break; } case EventType.ChangeTile: { var x = dataReader.ReadByte(); var y = dataReader.ReadByte(); var unknown = dataReader.ReadBytes(3); var frontTileIndex = dataReader.ReadWord(); // also wall/object index in lower byte var mapIndex = dataReader.ReadWord(); @event = new ChangeTileEvent { X = x, Y = y, FrontTileIndex = frontTileIndex, MapIndex = mapIndex, Unknown = unknown }; break; } case EventType.StartBattle: { var unknown1 = dataReader.ReadBytes(6); var monsterGroupIndex = dataReader.ReadByte(); var unknown2 = dataReader.ReadBytes(2); @event = new StartBattleEvent { MonsterGroupIndex = monsterGroupIndex, Unknown1 = unknown1, Unknown2 = unknown2 }; break; } case EventType.EnterPlace: { // map text index when closed (0xff is default message) // place type (see PlaceType) // opening hour // closing hour // text index for using the place (sleep, train, buy, etc) // place index (1-based, word) // 2 unknown bytes var textIndexWhenClosed = dataReader.ReadByte(); var placeType = (PlaceType)dataReader.ReadByte(); var openingHour = dataReader.ReadByte(); var closingHour = dataReader.ReadByte(); var usePlaceTextIndex = dataReader.ReadByte(); var placeIndex = dataReader.ReadWord(); var merchantIndex = dataReader.ReadWord(); @event = new EnterPlaceEvent { ClosedTextIndex = textIndexWhenClosed, PlaceType = placeType, OpeningHour = openingHour, ClosingHour = closingHour, PlaceIndex = placeIndex, UsePlaceTextIndex = usePlaceTextIndex, MerchantDataIndex = merchantIndex }; break; } case EventType.Condition: { var conditionType = (ConditionEvent.ConditionType)dataReader.ReadByte(); var value = dataReader.ReadByte(); var count = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(2); var objectIndex = dataReader.ReadWord(); var jumpToIfNotFulfilled = dataReader.ReadWord(); @event = new ConditionEvent { TypeOfCondition = conditionType, ObjectIndex = objectIndex, Value = value, Count = count, Unknown1 = unknown1, ContinueIfFalseWithMapEventIndex = jumpToIfNotFulfilled }; break; } case EventType.Action: { var actionType = (ActionEvent.ActionType)dataReader.ReadByte(); var value = dataReader.ReadByte(); var count = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(2); var objectIndex = dataReader.ReadWord(); var unknown2 = dataReader.ReadBytes(2); @event = new ActionEvent { TypeOfAction = actionType, ObjectIndex = objectIndex, Value = value, Unknown1 = unknown1, Unknown2 = unknown2 }; break; } case EventType.Dice100Roll: { var chance = dataReader.ReadByte(); var unused = dataReader.ReadBytes(6); var jumpToIfNotFulfilled = dataReader.ReadWord(); @event = new Dice100RollEvent { Chance = chance, Unused = unused, ContinueIfFalseWithMapEventIndex = jumpToIfNotFulfilled }; break; } case EventType.Conversation: { var interaction = (ConversationEvent.InteractionType)dataReader.ReadByte(); var unused1 = dataReader.ReadBytes(4); // unused var value = dataReader.ReadWord(); var unused2 = dataReader.ReadBytes(2); // unused @event = new ConversationEvent { Interaction = interaction, Value = value, Unused1 = unused1, Unused2 = unused2 }; break; } case EventType.PrintText: { var npcTextIndex = dataReader.ReadByte(); var unused = dataReader.ReadBytes(8); // unused @event = new PrintTextEvent { NPCTextIndex = npcTextIndex, Unused = unused }; break; } case EventType.Create: { var createType = (CreateEvent.CreateType)dataReader.ReadByte(); var unused = dataReader.ReadBytes(4); var amount = dataReader.ReadWord(); var itemIndex = dataReader.ReadWord(); @event = new CreateEvent { TypeOfCreation = createType, Unused = unused, Amount = amount, ItemIndex = itemIndex }; break; } case EventType.Decision: { var textIndex = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(6); var noEventIndex = dataReader.ReadWord(); @event = new DecisionEvent { TextIndex = textIndex, NoEventIndex = noEventIndex, Unknown1 = unknown1 }; break; } case EventType.ChangeMusic: { var musicIndex = dataReader.ReadWord(); var volume = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(6); @event = new ChangeMusicEvent { MusicIndex = musicIndex, Volume = volume, Unknown1 = unknown1 }; break; } case EventType.Exit: { @event = new ExitEvent { Unused = dataReader.ReadBytes(9) }; break; } case EventType.Spawn: { // byte0: x // byte1: y // byte2: travel type (see TravelType) // byte3-4: unused? // byte5-6: map index // byte7-8: unused? var x = dataReader.ReadByte(); var y = dataReader.ReadByte(); var travelType = (TravelType)dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(2); // unknown var mapIndex = dataReader.ReadWord(); var unknown2 = dataReader.ReadBytes(2); // unknown @event = new SpawnEvent { X = x, Y = y, TravelType = travelType, Unknown1 = unknown1, MapIndex = mapIndex, Unknown2 = unknown2 }; break; } case EventType.Interact: { @event = new InteractEvent { Unused = dataReader.ReadBytes(9) }; break; } default: { @event = new DebugEvent { Data = dataReader.ReadBytes(9) }; break; } } @event.Type = type; return(@event); }
public override void OnInteraction() { EventDispatcher.Dispatch(ConversationEvent.Prepare(conversation, true)); base.OnInteraction(); }
private ConversationWithActions GetConversation(ConversationEvent ce) { return(conversations.FirstOrDefault(t => t.conversationEvent == ce)); }
public void StartPassiveDialogue(ConversationEvent ce) { StartDialogue(GetConversation(ce), true); }
public void StartActiveDialogue(ConversationEvent ce) { StartDialogue(GetConversation(ce), false); }