Ejemplo n.º 1
0
        public static bool ConversationTriggeredReplacement(RemoteDialogueTrigger __instance, out bool __result, out RemoteDialogueTrigger.RemoteDialogueCondition dialogue)
        {
            dialogue = default;
            var dialogueIndex = -1;

            for (var i = 0; i < __instance._listDialogues.Length; i++)
            {
                if (!__instance._activatedDialogues[i])
                {
                    var allConditionsMet = true;
                    var anyConditionsMet = __instance._listDialogues[i].prereqConditions.Length == 0;

                    foreach (var prereqCondition in __instance._listDialogues[i].prereqConditions)
                    {
                        if (DialogueConditionManager.SharedInstance.GetConditionState(prereqCondition))
                        {
                            anyConditionsMet = true;
                        }
                        else
                        {
                            allConditionsMet = false;
                        }
                    }

                    var conditionsMet       = false;
                    var prereqConditionType = __instance._listDialogues[i].prereqConditionType;
                    if (prereqConditionType != RemoteDialogueTrigger.MultiConditionType.OR)
                    {
                        if (prereqConditionType == RemoteDialogueTrigger.MultiConditionType.AND && allConditionsMet)
                        {
                            conditionsMet = true;
                        }
                    }
                    else if (anyConditionsMet)
                    {
                        conditionsMet = true;
                    }

                    if (conditionsMet && __instance._listDialogues[i].priority < int.MaxValue)
                    {
                        dialogue      = __instance._listDialogues[i];
                        dialogueIndex = i;
                    }
                }
            }

            if (dialogueIndex == -1)
            {
                __result = false;
                return(false);
            }

            __instance._activatedDialogues[dialogueIndex] = true;
            __result = true;

            __instance.GetWorldObject <QSBRemoteDialogueTrigger>()
            .SendMessage(new EnterRemoteDialogueMessage(dialogueIndex));

            return(false);
        }
 public RemoteDialogueInitialStateMessage(RemoteDialogueTrigger trigger)
 {
     _inRemoteDialogue   = trigger._inRemoteDialogue;
     _activatedDialogues = trigger._activatedDialogues;
     _dialogueIndex      = trigger._listDialogues
                           .IndexOf(x => x.dialogue == trigger._activeRemoteDialogue);
     _colliderEnabled = trigger._collider.enabled;
 }