示例#1
0
 /// <summary>
 /// Deletes a quest from the Lua Item[] table. Use this method if you want to remove a quest entirely.
 /// If you just want to set the state of a quest, use SetQuestState.
 /// </summary>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <example>
 /// QuestLog.RemoveQuest("Kill 5 Rats");
 /// </example>
 public static void DeleteQuest(string title)
 {
     if (!string.IsNullOrEmpty(title))
     {
         Lua.Run(string.Format("Item[\"{0}\"] = nil", new System.Object[] { DialogueLua.StringToTableIndex(title) }), DialogueDebug.LogInfo);
     }
 }
        public static bool FindLuaFunction(string funcName, string originalName, string replacementName, bool replace, ref string text)
        {
            var originalLuaCode    = funcName + "(\"" + DialogueLua.StringToTableIndex(originalName) + "\"";
            var replacementLuaCode = string.IsNullOrEmpty(replacementName.Trim()) ? string.Empty : funcName + "(\"" + DialogueLua.StringToTableIndex(replacementName) + "\"";

            return(FindText(originalLuaCode, replacementLuaCode, replace, ref text));
        }
示例#3
0
 /// <summary>
 /// Appends the actor table to a saved-game string.
 /// </summary>
 private static void AppendActorData(StringBuilder sb)
 {
     try {
         LuaTableWrapper actorTable = Lua.Run("return Actor").AsTable;
         if (actorTable == null)
         {
             if (DialogueDebug.LogErrors)
             {
                 Debug.LogError(string.Format("{0}: Persistent Data Manager couldn't access Lua Actor[] table", new System.Object[] { DialogueDebug.Prefix }));
             }
             return;
         }
         foreach (var key in actorTable.Keys)
         {
             LuaTableWrapper fields = actorTable[key.ToString()] as LuaTableWrapper;
             sb.AppendFormat("Actor[\"{0}\"]={1}", new System.Object[] { DialogueLua.StringToTableIndex(key), '{' });
             try {
                 AppendActorFieldData(sb, fields);
             } finally {
                 sb.Append("}; ");
             }
         }
     } catch (System.Exception e) {
         Debug.LogError(string.Format("{0}: GetSaveData() failed to get actor data: {1}", new System.Object[] { DialogueDebug.Prefix, e.Message }));
     }
 }
示例#4
0
 /// <summary>
 /// Adds a quest to the Lua Item[] table.
 /// </summary>
 /// <param name='title'>
 /// Title of the quest.
 /// </param>
 /// <param name='description'>
 /// Description of the quest.
 /// </param>
 /// <param name='state'>
 /// Quest state.
 /// </param>
 /// <example>
 /// QuestLog.AddQuest("Kill 5 Rats", "The baker asked me to bring 5 rat corpses.", QuestState.Unassigned);
 /// </example>
 public static void AddQuest(string title, string description, QuestState state)
 {
     if (!string.IsNullOrEmpty(title))
     {
         Lua.Run(string.Format("Item[\"{0}\"] = {{ Name = \"{1}\", Description = \"{2}\", State = \"{3}\" }}",
                               new System.Object[] { DialogueLua.StringToTableIndex(title),
                                                     DialogueLua.DoubleQuotesToSingle(title),
                                                     DialogueLua.DoubleQuotesToSingle(description),
                                                     StateToString(state) }),
                 DialogueDebug.LogInfo);
     }
 }
示例#5
0
 /// <summary>
 /// Appends an actor record to a saved-game string.
 /// </summary>
 private static void AppendActorFieldData(StringBuilder sb, LuaTableWrapper fields)
 {
     if (fields == null)
     {
         return;
     }
     foreach (var key in fields.Keys)
     {
         var value = fields[key.ToString()];
         sb.AppendFormat("{0}={1}, ", new System.Object[] { DialogueLua.StringToTableIndex(key), GetFieldValueString(value) });
     }
 }
示例#6
0
        private void AppendFormat(StringBuilder sb, string tableName, string elementName, string fieldName, FieldType fieldType, ConditionItem item)
        {
            switch (fieldType)
            {
            case FieldType.Boolean:
                sb.AppendFormat("{0}{1}[\"{2}\"].{3} {4} {5}{6}",
                                openParen,
                                tableName,
                                DialogueLua.StringToTableIndex(elementName),
                                DialogueLua.StringToTableIndex(fieldName),
                                GetWizardEqualityText(item.equalityType),
                                (item.booleanValue == BooleanType.True) ? "true" : "false",
                                closeParen);
                break;

            case FieldType.Number:
                if (item.comparisonType == ComparisonType.Between)
                {
                    sb.AppendFormat("{0}{5} <= {1}[\"{2}\"].{3} and {1}[\"{2}\"].{3} <= {6}{7}",
                                    openParen,
                                    tableName,
                                    DialogueLua.StringToTableIndex(elementName),
                                    DialogueLua.StringToTableIndex(fieldName),
                                    GetWizardComparisonText(item.comparisonType),
                                    item.floatValue,
                                    item.floatValue2,
                                    closeParen);
                }
                else
                {
                    sb.AppendFormat("{0}{1}[\"{2}\"].{3} {4} {5}{6}",
                                    openParen,
                                    tableName,
                                    DialogueLua.StringToTableIndex(elementName),
                                    DialogueLua.StringToTableIndex(fieldName),
                                    GetWizardComparisonText(item.comparisonType),
                                    item.floatValue,
                                    closeParen);
                }
                break;

            default:
                sb.AppendFormat("{0}{1}[\"{2}\"].{3} {4} \"{5}\"{6}",
                                openParen,
                                tableName,
                                DialogueLua.StringToTableIndex(elementName),
                                DialogueLua.StringToTableIndex(fieldName),
                                GetWizardEqualityText(item.equalityType),
                                item.stringValue,
                                closeParen);
                break;
            }
        }
示例#7
0
        /// <summary>
        /// Instructs the Dialogue System to add any missing variables that are in the master
        /// database but not in Lua.
        /// </summary>
        public static void InitializeNewVariablesFromDatabase()
        {
            try
            {
                LuaTableWrapper variableTable = Lua.Run("return Variable").asTable;
                if (variableTable == null)
                {
                    if (DialogueDebug.logErrors)
                    {
                        Debug.LogError(string.Format("{0}: Persistent Data Manager couldn't access Lua Variable[] table", new System.Object[] { DialogueDebug.Prefix }));
                    }
                    return;
                }
                var database = DialogueManager.masterDatabase;
                if (database == null)
                {
                    return;
                }
                var inLua = new HashSet <string>(variableTable.keys);
                for (int i = 0; i < database.variables.Count; i++)
                {
                    var variable      = database.variables[i];
                    var variableName  = variable.Name;
                    var variableIndex = DialogueLua.StringToTableIndex(variableName);
                    if (!inLua.Contains(variableIndex))
                    {
                        switch (variable.Type)
                        {
                        case FieldType.Boolean:
                            DialogueLua.SetVariable(variableName, variable.InitialBoolValue);
                            break;

                        case FieldType.Actor:
                        case FieldType.Item:
                        case FieldType.Location:
                        case FieldType.Number:
                            DialogueLua.SetVariable(variableName, variable.InitialFloatValue);
                            break;

                        default:
                            DialogueLua.SetVariable(variableName, variable.InitialValue);
                            break;
                        }
                    }
                }
            }
            catch (System.Exception e)
            {
                Debug.LogError(string.Format("{0}: InitializeNewVariablesFromDatabase() failed to get variable data: {1}", new System.Object[] { DialogueDebug.Prefix, e.Message }));
            }
        }
        private void AppendFormat(StringBuilder sb, string tableName, string elementName, string fieldName, FieldType fieldType, ScriptItem item)
        {
            switch (fieldType)
            {
            case FieldType.Boolean:
                sb.AppendFormat("{0}[\"{1}\"].{2} = {3}",
                                tableName,
                                DialogueLua.StringToTableIndex(elementName),
                                DialogueLua.StringToTableIndex(fieldName),
                                (item.booleanValue == BooleanType.True) ? "true" : "false");
                break;

            case FieldType.Number:
                switch (item.valueSetMode)
                {
                case ValueSetMode.To:
                    sb.AppendFormat("{0}[\"{1}\"].{2} = {3}",
                                    tableName,
                                    DialogueLua.StringToTableIndex(elementName),
                                    DialogueLua.StringToTableIndex(fieldName),
                                    item.floatValue);
                    break;

                case ValueSetMode.Add:
                    sb.AppendFormat("{0}[\"{1}\"].{2} = {0}[\"{1}\"].{2} + {3}",
                                    tableName,
                                    DialogueLua.StringToTableIndex(elementName),
                                    DialogueLua.StringToTableIndex(fieldName),
                                    item.floatValue);
                    break;

                case ValueSetMode.Subtract:
                    sb.AppendFormat("{0}[\"{1}\"].{2} = {0}[\"{1}\"].{2} - {3}",
                                    tableName,
                                    DialogueLua.StringToTableIndex(elementName),
                                    DialogueLua.StringToTableIndex(fieldName),
                                    item.floatValue);
                    break;
                }
                break;

            default:
                sb.AppendFormat("{0}[\"{1}\"].{2} = \"{3}\"",
                                tableName,
                                DialogueLua.StringToTableIndex(elementName),
                                DialogueLua.StringToTableIndex(fieldName),
                                item.stringValue);
                break;
            }
        }
示例#9
0
 /// <summary>
 /// Appends the item table to a (saved-game) string.
 /// </summary>
 public static void AppendItemData(StringBuilder sb)
 {
     try
     {
         LuaTableWrapper itemTable = Lua.Run("return Item").asTable;
         if (itemTable == null)
         {
             if (DialogueDebug.logErrors)
             {
                 Debug.LogError(string.Format("{0}: Persistent Data Manager couldn't access Lua Item[] table", new System.Object[] { DialogueDebug.Prefix }));
             }
             return;
         }
         foreach (var title in itemTable.keys)
         {
             LuaTableWrapper fields            = itemTable[title.ToString()] as LuaTableWrapper;
             bool            onlySaveQuestData = !includeAllItemData && (DialogueManager.masterDatabase.items.Find(i => string.Equals(DialogueLua.StringToTableIndex(i.Name), title)) != null);
             if (fields != null)
             {
                 if (onlySaveQuestData)
                 {
                     // If in the database, just record quest statuses and tracking:
                     foreach (var fieldKey in fields.keys)
                     {
                         string fieldTitle = fieldKey.ToString();
                         if (fieldTitle.EndsWith("State"))
                         {
                             sb.AppendFormat("Item[\"{0}\"].{1}=\"{2}\"; ", new System.Object[] { DialogueLua.StringToTableIndex(title), (System.Object)fieldTitle, (System.Object)fields[fieldTitle] });
                         }
                         else if (string.Equals(fieldTitle, "Track"))
                         {
                             sb.AppendFormat("Item[\"{0}\"].Track={1}; ", new System.Object[] { DialogueLua.StringToTableIndex(title), fields[fieldTitle].ToString().ToLower() });
                         }
                     }
                 }
                 else
                 {
                     // If not in the database, record all fields:
                     sb.AppendFormat("Item[\"{0}\"]=", new System.Object[] { DialogueLua.StringToTableIndex(title) });
                     AppendFields(sb, fields);
                 }
             }
         }
     }
     catch (System.Exception e)
     {
         Debug.LogError(string.Format("{0}: GetSaveData() failed to get item data: {1}", new System.Object[] { DialogueDebug.Prefix, e.Message }));
     }
 }
示例#10
0
 private static void AppendFields(StringBuilder sb, LuaTableWrapper fields)
 {
     sb.Append("{");
     try {
         if (fields != null)
         {
             foreach (var key in fields.Keys)
             {
                 var value = fields[key.ToString()];
                 sb.AppendFormat("{0}={1}, ", new System.Object[] { DialogueLua.StringToTableIndex(key), GetFieldValueString(value) });
             }
         }
     } finally {
         sb.Append("}; ");
     }
 }
示例#11
0
 private void AssignUniquePersistentDataName()
 {
     serializedObject.ApplyModifiedProperties();
     foreach (var t in targets)
     {
         var dialogueActor = t as DialogueActor;
         if (dialogueActor == null)
         {
             continue;
         }
         Undo.RecordObject(dialogueActor, "Unique ID");
         dialogueActor.persistentDataName = DialogueLua.StringToTableIndex(DialogueActor.GetActorName(dialogueActor.transform) + "_" + dialogueActor.GetInstanceID());
         EditorUtility.SetDirty(dialogueActor);
         UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(dialogueActor.gameObject.scene);
     }
     serializedObject.Update();
 }
示例#12
0
 /// <summary>
 /// Appends the user variable table to a saved-game string.
 /// </summary>
 private static void AppendVariableData(StringBuilder sb)
 {
     try {
         LuaTableWrapper variableTable = Lua.Run("return Variable").AsTable;
         if (variableTable == null)
         {
             if (DialogueDebug.LogErrors)
             {
                 Debug.LogError(string.Format("{0}: Persistent Data Manager couldn't access Lua Variable[] table", new System.Object[] { DialogueDebug.Prefix }));
             }
             return;
         }
         foreach (var key in variableTable.Keys)
         {
             var value = variableTable[key.ToString()];
             sb.AppendFormat("Variable[\"{0}\"]={1}; ", new System.Object[] { DialogueLua.StringToTableIndex(key), GetFieldValueString(value) });
         }
     } catch (System.Exception e) {
         Debug.LogError(string.Format("{0}: GetSaveData() failed to get variable data: {1}", new System.Object[] { DialogueDebug.Prefix, e.Message }));
     }
 }
        public static void ProcessQuestInFile(string filename, string assetPath, string originalName, string replacementName,
                                              ProcessSceneDelegate processSceneHandler, ProcessPrefabDelegate processPrefabHandler)
        {
            if (string.IsNullOrEmpty(filename) || string.IsNullOrEmpty(originalName))
            {
                return;
            }
            var text = File.ReadAllText(filename);

            if (string.IsNullOrEmpty(text))
            {
                return;
            }
            var replace = !string.IsNullOrEmpty(replacementName);

            // Find/replace Lua expressions that use the original quest name:
            // Item[]
            var originalLuaExpression    = "Item[\"" + DialogueLua.StringToTableIndex(originalName) + "\"]";
            var replacementLuaExpression = string.IsNullOrEmpty(replacementName.Trim()) ? string.Empty : "Item[\"" + DialogueLua.StringToTableIndex(replacementName) + "\"]";
            var found = FindText(originalLuaExpression, replacementLuaExpression, replace, ref text);

            // Quest[]
            originalLuaExpression    = "Quest[\"" + DialogueLua.StringToTableIndex(originalName) + "\"]";
            replacementLuaExpression = string.IsNullOrEmpty(replacementName.Trim()) ? string.Empty : "Quest[\"" + DialogueLua.StringToTableIndex(replacementName) + "\"]";
            found = FindText(originalLuaExpression, replacementLuaExpression, replace, ref text) || found;
            // Quest functions
            found = FindLuaFunction("CurrentQuestState", originalName, replacementName, replace, ref text) || found;
            found = FindLuaFunction("SetQuestState", originalName, replacementName, replace, ref text) || found;
            found = FindLuaFunction("CurrentQuestEntryState", originalName, replacementName, replace, ref text) || found;
            found = FindLuaFunction("SetQuestEntryState", originalName, replacementName, replace, ref text) || found;

            if (found && replace)
            {
                File.WriteAllText(filename, text);
                AssetDatabase.Refresh();
            }

            // If it's a dialogue database, find/replace actual quest name, too:
            if (text.Contains("globalUserScript")) // DBs contain this string; used to minimize attempts to load non-database assets.
            {
                AssetDatabase.Refresh();
                var database = AssetDatabase.LoadAssetAtPath <DialogueDatabase>(assetPath);
                if (database != null)
                {
                    var quest = database.GetItem(originalName);
                    if (quest != null)
                    {
                        found = true;
                        if (replace)
                        {
                            quest.Name = replacementName;
                            EditorUtility.SetDirty(database);
                            AssetDatabase.SaveAssets();
                        }
                    }
                }
            }

            // If file is a scene, open it to check for any components such as DialogueSystemTrigger that use QuestPopup:
            if (assetPath.EndsWith(".unity"))
            {
                // Open scene:
                var sceneName = Path.GetFileNameWithoutExtension(filename);
                EditorSceneManager.OpenScene(filename);
                var scene = EditorSceneManager.GetSceneByName(sceneName);
                if (!scene.IsValid())
                {
                    return;
                }

                // Call scene checking delegate:
                var foundInScene = processSceneHandler(originalName, replacementName);
                if (foundInScene)
                {
                    // If found and replaced, save scene:
                    found = true;
                    if (replace)
                    {
                        EditorSceneManager.MarkSceneDirty(scene);
                        EditorSceneManager.SaveScene(scene);
                    }
                }
            }
            // If file is a prefab, check it:
            else if (assetPath.EndsWith(".prefab"))
            {
                var foundInPrefab = processPrefabHandler(assetPath, originalName, replacementName);
                if (foundInPrefab)
                {
                    found = true;
                    if (replace)
                    {
                        AssetDatabase.SaveAssets();
                    }
                }
            }

            // Update report:
            if (found)
            {
                report += (replace ? "Replaced in: " : "Found in: ") + assetPath + "\n";
            }
        }
        public static void ProcessVariableInFile(string filename, string assetPath, string originalName, string replacementName,
                                                 ProcessSceneDelegate processSceneHandler, ProcessPrefabDelegate processPrefabHandler)
        {
            if (string.IsNullOrEmpty(filename) || string.IsNullOrEmpty(originalName))
            {
                return;
            }
            var text = File.ReadAllText(filename);

            if (string.IsNullOrEmpty(text))
            {
                return;
            }
            var replace = !string.IsNullOrEmpty(replacementName);

            // Find/replace Lua expressions that use the original variable name:
            var originalLuaExpression    = "Variable[\"" + DialogueLua.StringToTableIndex(originalName) + "\"]";
            var replacementLuaExpression = string.IsNullOrEmpty(replacementName.Trim()) ? string.Empty : "Variable[\"" + DialogueLua.StringToTableIndex(replacementName) + "\"]";
            var found = text.Contains(originalLuaExpression);

            if (found && replace)
            {
                text = text.Replace(originalLuaExpression, replacementLuaExpression);
            }

            // Find/replace [var=variable] tags that use the original variable name:
            var originalVarTag    = "[var=" + DialogueLua.StringToTableIndex(originalName) + "]";
            var replacementVarTag = string.IsNullOrEmpty(replacementName.Trim()) ? string.Empty : "Variable[\"" + DialogueLua.StringToTableIndex(replacementName) + "\"]";
            var foundVarTag       = text.Contains(originalVarTag);

            if (foundVarTag)
            {
                found = true;
                if (replace)
                {
                    text = text.Replace(originalVarTag, replacementVarTag);
                }
            }

            if (found && replace)
            {
                File.WriteAllText(filename, text);
                AssetDatabase.Refresh();
            }

            // If it's a dialogue database, find/replace actual variable name, too:
            if (text.Contains("globalUserScript")) // DBs contain this string; used to minimize attempts to load non-database assets.
            {
                AssetDatabase.Refresh();
                var database = AssetDatabase.LoadAssetAtPath <DialogueDatabase>(assetPath);
                if (database != null)
                {
                    var variable = database.GetVariable(originalName);
                    if (variable != null)
                    {
                        found = true;
                        if (replace)
                        {
                            variable.Name = replacementName;
                            EditorUtility.SetDirty(database);
                            AssetDatabase.SaveAssets();
                        }
                    }
                }
            }

            // If file is a scene, open it to check for any components such as IncrementOnDestroy that use VariablePopup:
            if (assetPath.EndsWith(".unity"))
            {
                // Open scene:
                var sceneName = Path.GetFileNameWithoutExtension(filename);
                EditorSceneManager.OpenScene(filename);
                var scene = EditorSceneManager.GetSceneByName(sceneName);
                if (!scene.IsValid())
                {
                    return;
                }

                // Call scene checking delegate:
                var foundInScene = processSceneHandler(originalName, replacementName);
                if (foundInScene)
                {
                    // If found and replaced, save scene:
                    found = true;
                    if (replace)
                    {
                        EditorSceneManager.MarkSceneDirty(scene);
                        EditorSceneManager.SaveScene(scene);
                    }
                }
            }
            // If file is a prefab, check it:
            else if (assetPath.EndsWith(".prefab"))
            {
                var foundInPrefab = processPrefabHandler(assetPath, originalName, replacementName);
                if (foundInPrefab)
                {
                    found = true;
                    if (replace)
                    {
                        AssetDatabase.SaveAssets();
                    }
                }
            }

            // Update report:
            if (found)
            {
                report += (replace ? "Replaced in: " : "Found in: ") + assetPath + "\n";
            }
        }
示例#15
0
 private static string GetFieldKeyString(string key)
 {
     key = DialogueLua.StringToTableIndex(key);
     return(matchValidVarName.IsMatch(key) ? key : ("[\"" + key + "\"]"));
 }
        private string ApplyScriptWizard()
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                if (append && !string.IsNullOrEmpty(savedLuaCode))
                {
                    sb.AppendFormat("{0};\n", savedLuaCode);
                }
                string endText = (scriptItems.Count > 1) ? ";\n" : string.Empty;
                for (int i = 0; i < scriptItems.Count; i++)
                {
                    var item = scriptItems[i];
                    if (item.resourceType == ScriptWizardResourceType.Quest)
                    {
                        // Quest:
                        string questName = GetWizardQuestName(questNames, item.questNamesIndex);
                        if (item.netSetMode == NetSetMode.NetSet)
                        {
                            sb.Append("Net");
                        }
                        sb.AppendFormat("SetQuestState(\"{0}\", \"{1}\")",
                                        questName,
                                        QuestLog.StateToString(item.questState));
                    }
                    else if (item.resourceType == ScriptWizardResourceType.QuestEntry)
                    {
                        // Quest Entry:
                        string questName = GetWizardQuestName(complexQuestNames, item.questNamesIndex);
                        if (item.netSetMode == NetSetMode.NetSet)
                        {
                            sb.Append("Net");
                        }
                        sb.AppendFormat("SetQuestEntryState(\"{0}\", {1}, \"{2}\")",
                                        questName,
                                        item.questEntryIndex + 1,
                                        QuestLog.StateToString(item.questState));
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Variable)
                    {
                        // Variable:
                        string variableName = (0 <= item.variableNamesIndex && item.variableNamesIndex < variableNames.Length) ? variableNames[item.variableNamesIndex] : "Alert";
                        switch (GetWizardVariableType(item.variableNamesIndex))
                        {
                        case FieldType.Boolean:
                            if (item.netSetMode == NetSetMode.NetSet)
                            {
                                sb.AppendFormat("NetSetBool(\"{0}\", {1})",
                                                DialogueLua.StringToTableIndex(variableName),
                                                (item.booleanValue == BooleanType.True) ? "true" : "false");
                            }
                            else
                            {
                                sb.AppendFormat("Variable[\"{0}\"] = {1}",
                                                DialogueLua.StringToTableIndex(variableName),
                                                (item.booleanValue == BooleanType.True) ? "true" : "false");
                            }
                            break;

                        case FieldType.Number:
                            if (item.netSetMode == NetSetMode.NetSet)
                            {
                                switch (item.valueSetMode)
                                {
                                case ValueSetMode.To:
                                    sb.AppendFormat("NetSetNumber(\"{0}\", {1})",
                                                    DialogueLua.StringToTableIndex(variableName),
                                                    item.floatValue);
                                    break;

                                case ValueSetMode.Add:
                                    sb.AppendFormat("NetSetNumber(\"{0}\", Variable[\"{0}\"] + {1})",
                                                    DialogueLua.StringToTableIndex(variableName),
                                                    item.floatValue);
                                    break;

                                case ValueSetMode.Subtract:
                                    sb.AppendFormat("NetSetNumber(\"{0}\", Variable[\"{0}\"] - {1})",
                                                    DialogueLua.StringToTableIndex(variableName),
                                                    item.floatValue);
                                    break;
                                }
                            }
                            else
                            {
                                switch (item.valueSetMode)
                                {
                                case ValueSetMode.To:
                                    sb.AppendFormat("Variable[\"{0}\"] = {1}",
                                                    DialogueLua.StringToTableIndex(variableName),
                                                    item.floatValue);
                                    break;

                                case ValueSetMode.Add:
                                    sb.AppendFormat("Variable[\"{0}\"] = Variable[\"{0}\"] + {1}",
                                                    DialogueLua.StringToTableIndex(variableName),
                                                    item.floatValue);
                                    break;

                                case ValueSetMode.Subtract:
                                    sb.AppendFormat("Variable[\"{0}\"] = Variable[\"{0}\"] - {1}",
                                                    DialogueLua.StringToTableIndex(variableName),
                                                    item.floatValue);
                                    break;
                                }
                            }
                            break;

                        default:
                            if (item.netSetMode == NetSetMode.NetSet)
                            {
                                sb.AppendFormat("NetSetString(\"{0}\", \"{1}\")",
                                                DialogueLua.StringToTableIndex(variableName),
                                                item.stringValue);
                            }
                            else
                            {
                                sb.AppendFormat("Variable[\"{0}\"] = \"{1}\"",
                                                DialogueLua.StringToTableIndex(variableName),
                                                item.stringValue);
                            }
                            break;
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Actor)
                    {
                        // Actor:
                        if (item.actorNamesIndex < actorNames.Length)
                        {
                            item.actorFieldIndex = Mathf.Clamp(item.actorFieldIndex, 0, actorFieldNames.Length - 1);
                            var actorName      = actorNames[item.actorNamesIndex];
                            var actorFieldName = actorFieldNames[item.actorFieldIndex];
                            var fieldType      = GetWizardActorFieldType(item.actorFieldIndex);
                            AppendFormat(sb, "Actor", actorName, actorFieldName, fieldType, item);
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Item)
                    {
                        // Item:
                        if (item.itemNamesIndex < itemNames.Length)
                        {
                            item.itemFieldIndex = Mathf.Clamp(item.itemFieldIndex, 0, itemFieldNames.Length - 1);
                            var itemName      = itemNames[item.itemNamesIndex];
                            var itemFieldName = itemFieldNames[item.itemFieldIndex];
                            var fieldType     = GetWizardItemFieldType(item.itemFieldIndex);
                            AppendFormat(sb, "Item", itemName, itemFieldName, fieldType, item);
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Location)
                    {
                        // Location:
                        if (item.locationNamesIndex < locationNames.Length)
                        {
                            item.locationFieldIndex = Mathf.Clamp(item.locationFieldIndex, 0, locationFieldNames.Length - 1);
                            var locationName      = locationNames[item.locationNamesIndex];
                            var locationFieldName = locationFieldNames[item.locationFieldIndex];
                            var fieldType         = GetWizardLocationFieldType(item.locationFieldIndex);
                            AppendFormat(sb, "Location", locationName, locationFieldName, fieldType, item);
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.SimStatus)
                    {
                        // SimStatus:
                        sb.AppendFormat("Dialog[{0}].SimStatus = \"{1}\"", item.simStatusID, item.simStatusType);
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Alert)
                    {
                        // Custom:
                        sb.Append("ShowAlert(\"" + item.stringValue.Replace("\"", "\\\"") + "\")");
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Custom)
                    {
                        // Custom:
                        if (0 <= item.customLuaFuncIndex && item.customLuaFuncIndex < customLuaFuncs.Length)
                        {
                            var luaFuncRecord = customLuaFuncs[item.customLuaFuncIndex];
                            sb.Append(luaFuncRecord.functionName + "(");
                            for (int p = 0; p < luaFuncRecord.parameters.Length; p++)
                            {
                                if (p > 0)
                                {
                                    sb.Append(", ");
                                }
                                switch (luaFuncRecord.parameters[p])
                                {
                                case CustomLuaParameterType.Bool:
                                    sb.Append(((BooleanType)item.customParamValues[p] == BooleanType.True) ? "true" : "false");
                                    break;

                                case CustomLuaParameterType.Double:
                                    sb.Append((float)item.customParamValues[p]);
                                    break;

                                case CustomLuaParameterType.String:
                                    sb.Append("\"" + (string)item.customParamValues[p] + "\"");
                                    break;

                                case CustomLuaParameterType.Actor:
                                    var actorIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= actorIndex && actorIndex < actorNames.Length) ? ("\"" + actorNames[actorIndex] + "\"") : "\"\"");
                                    break;

                                case CustomLuaParameterType.Quest:
                                    var questIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= questIndex && questIndex < questNames.Length) ? ("\"" + questNames[questIndex] + "\"") : "\"\"");
                                    break;

                                case CustomLuaParameterType.QuestEntry:
                                    sb.Append(((int)item.customParamValues[p] + 1).ToString());
                                    break;

                                case CustomLuaParameterType.Variable:
                                    var variableIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= variableIndex && variableIndex < variableNames.Length) ? ("Variable[\"" + variableNames[variableIndex] + "\"]") : "\"\"");
                                    break;

                                case CustomLuaParameterType.Item:
                                    var itemIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= itemIndex && itemIndex < itemNames.Length) ? ("\"" + itemNames[itemIndex] + "\"") : "\"\"");
                                    break;
                                }
                            }
                            sb.Append(")");
                        }
                    }

                    else if (item.resourceType == ScriptWizardResourceType.ManualEnter)
                    {
                        // Custom:
                        sb.Append(item.stringValue);
                    }

                    if (i < (scriptItems.Count - 1))
                    {
                        sb.AppendFormat(endText);
                    }
                }
                return(sb.ToString());
            }
            catch (Exception e)
            {
                Debug.LogError(string.Format("{0}: Internal error building script: {1}", DialogueDebug.Prefix, e.Message));
                return(savedLuaCode);
            }
        }
示例#17
0
        /// <summary>
        /// Appends the conversation table to a (saved-game) string. To conserve space, only the
        /// SimStatus is recorded. If includeSimStatus is <c>false</c>, nothing is recorded.
        /// The exception is if includeAllConversationFields is true.
        /// </summary>
        public static void AppendConversationData(StringBuilder sb)
        {
            if (includeAllConversationFields || DialogueManager.instance.persistentDataSettings.includeAllConversationFields)
            {
                AppendAllConversationFields(sb);
            }
            if (!(includeSimStatus && DialogueManager.instance.includeSimStatus))
            {
                return;
            }
            try
            {
#if USE_NLUA
                var useConversationID = string.IsNullOrEmpty(saveConversationSimStatusWithField);
                var useEntryID        = string.IsNullOrEmpty(saveDialogueEntrySimStatusWithField);
                foreach (var conversation in DialogueManager.MasterDatabase.conversations)
                {
                    if (useConversationID)
                    {
                        sb.AppendFormat("Conversation[{0}].SimX=\"", conversation.id);
                    }
                    else
                    {
                        var fieldValue = DialogueLua.StringToTableIndex(conversation.LookupValue(saveConversationSimStatusWithField));
                        if (string.IsNullOrEmpty(fieldValue))
                        {
                            fieldValue = conversation.id.ToString();
                        }
                        sb.AppendFormat("Variable[\"Conversation_SimX_{0}\"]=\"", fieldValue);
                    }
                    var dialogTable = Lua.Run("return Conversation[" + conversation.id + "].Dialog").AsLuaTable;
                    var first       = true;
                    for (int i = 0; i < conversation.dialogueEntries.Count; i++)
                    {
                        var entry        = conversation.dialogueEntries[i];
                        var entryID      = entry.id;
                        var dialogFields = dialogTable[entryID] as NLua.LuaTable;
                        if (dialogFields != null)
                        {
                            if (!first)
                            {
                                sb.Append(";");
                            }
                            first = false;
                            sb.Append(useEntryID ? entryID.ToString() : Field.LookupValue(entry.fields, saveDialogueEntrySimStatusWithField));
                            sb.Append(";");
                            var simStatus = dialogFields["SimStatus"].ToString();
                            sb.Append(SimStatusToChar(simStatus));
                        }
                    }
                    sb.Append("\"; ");
                }
#else
                var useConversationID = string.IsNullOrEmpty(saveConversationSimStatusWithField);
                var useEntryID        = string.IsNullOrEmpty(saveDialogueEntrySimStatusWithField);
                foreach (var conversation in DialogueManager.masterDatabase.conversations)
                {
                    if (useConversationID)
                    {
                        sb.AppendFormat("Conversation[{0}].SimX=\"", conversation.id);
                    }
                    else
                    {
                        sb.AppendFormat("Variable[\"Conversation_SimX_{0}\"]=\"", DialogueLua.StringToTableIndex(conversation.LookupValue(saveConversationSimStatusWithField)));
                    }
                    var conversationTable = Lua.Run("return Conversation[" + conversation.id + "]").asTable;
                    var dialogTable       = conversationTable.luaTable.GetValue("Dialog") as Language.Lua.LuaTable;
                    var first             = true;
                    for (int i = 0; i < conversation.dialogueEntries.Count; i++)
                    {
                        var entry        = conversation.dialogueEntries[i];
                        var entryID      = entry.id;
                        var dialogFields = dialogTable.GetValue(entryID) as Language.Lua.LuaTable;
                        if (dialogFields != null)
                        {
                            if (!first)
                            {
                                sb.Append(";");
                            }
                            first = false;
                            sb.Append(useEntryID ? entryID.ToString() : Field.LookupValue(entry.fields, saveDialogueEntrySimStatusWithField));
                            sb.Append(";");
                            var simStatus = dialogFields.GetValue("SimStatus").ToString();
                            sb.Append(SimStatusToChar(simStatus));
                        }
                    }
                    sb.Append("\"; ");
                }
#endif
            }
            catch (System.Exception e)
            {
                Debug.LogError(string.Format("{0}: GetSaveData() failed to get conversation data: {1}", new System.Object[] { DialogueDebug.Prefix, e.Message }));
            }
        }
示例#18
0
 public QuestWatchItem(string title, int entryNumber, LuaWatchFrequency frequency, QuestChangedDelegate questChangedHandler)
 {
     this.title               = title;
     this.entryNumber         = entryNumber;
     this.frequency           = frequency;
     this.luaExpression       = string.Format("return Item[\"{0}\"].Entry_{1}_State", new System.Object[] { DialogueLua.StringToTableIndex(title), entryNumber });
     this.questChangedHandler = questChangedHandler;
     DialogueManager.AddLuaObserver(luaExpression, frequency, OnLuaChanged);
 }
示例#19
0
 private static void ExpandCompressedSimStatusData()
 {
     if (!(includeSimStatus && DialogueManager.instance.includeSimStatus))
     {
         return;
     }
     try
     {
         var useConversationID = string.IsNullOrEmpty(saveConversationSimStatusWithField);
         var useEntryID        = string.IsNullOrEmpty(saveDialogueEntrySimStatusWithField);
         var entryDict         = new Dictionary <string, DialogueEntry>();
         foreach (var conversation in DialogueManager.masterDatabase.conversations)
         {
             // If saving dialogue entries' SimStatus with value of a field, make a lookup table:
             if (!useEntryID)
             {
                 entryDict.Clear();
                 for (int i = 0; i < conversation.dialogueEntries.Count; i++)
                 {
                     var entry           = conversation.dialogueEntries[i];
                     var entryFieldValue = Field.LookupValue(entry.fields, saveDialogueEntrySimStatusWithField);
                     if (!entryDict.ContainsKey(entryFieldValue))
                     {
                         entryDict.Add(entryFieldValue, entry);
                     }
                 }
             }
             var    sb = new StringBuilder();
             string simX;
             if (useConversationID)
             {
                 simX = Lua.Run("return Conversation[" + conversation.id + "].SimX").asString;
             }
             else
             {
                 var fieldValue = DialogueLua.StringToTableIndex(conversation.LookupValue(saveConversationSimStatusWithField));
                 if (string.IsNullOrEmpty(fieldValue))
                 {
                     fieldValue = conversation.id.ToString();
                 }
                 simX = Lua.Run("return Variable[\"Conversation_SimX_" + fieldValue + "\"]").asString;
             }
             if (string.IsNullOrEmpty(simX) || string.Equals(simX, "nil"))
             {
                 continue;
             }
             var clearSimXCommand = useConversationID ? ("Conversation[" + conversation.id + "].SimX=nil;")
                 : ("Variable[\"Conversation_SimX_" + DialogueLua.StringToTableIndex(conversation.LookupValue(saveConversationSimStatusWithField)) + "\"]=nil;");
             sb.Append("Conversation[");
             sb.Append(conversation.id);
             sb.Append("].Dialog={}; ");
             var simXFields = simX.Split(';');
             var numFields  = simXFields.Length / 2;
             for (int i = 0; i < numFields; i++)
             {
                 var    simXEntryIDValue = simXFields[2 * i];
                 string entryID;
                 if (useEntryID)
                 {
                     entryID = simXEntryIDValue;
                 }
                 else
                 {
                     entryID = entryDict.ContainsKey(simXEntryIDValue) ? entryDict[simXEntryIDValue].id.ToString() : "-1";
                 }
                 var simStatus = CharToSimStatus(simXFields[(2 * i) + 1][0]);
                 sb.Append("Conversation[");
                 sb.Append(conversation.id);
                 sb.Append("].Dialog[");
                 sb.Append(entryID);
                 sb.Append("]={SimStatus='");
                 sb.Append(simStatus);
                 sb.Append("'}; ");
             }
             sb.Append(clearSimXCommand);
             Lua.Run(sb.ToString());
         }
     }
     catch (System.Exception e)
     {
         Debug.LogError(string.Format("{0}: ApplySaveData() failed to re-expand compressed SimStatus data: {1}", new System.Object[] { DialogueDebug.Prefix, e.Message }));
     }
 }
示例#20
0
        private string ApplyConditionsWizard()
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                string        logicalOperator = GetLogicalOperatorText(conditionsLogicalOperator);
                var           needParens      = (conditionItems.Count > 1) || (append && !string.IsNullOrEmpty(savedLuaCode));
                openParen  = needParens ? "(" : string.Empty;
                closeParen = needParens ? ")" : string.Empty;
                if (append && !string.IsNullOrEmpty(savedLuaCode))
                {
                    sb.AppendFormat("{0} {1} ", savedLuaCode, logicalOperator);
                }
                bool first = true;
                foreach (ConditionItem item in conditionItems)
                {
                    if (!first)
                    {
                        sb.AppendFormat(" {0} ", logicalOperator);
                    }
                    first = false;
                    if (item.conditionType == ConditionWizardResourceType.Quest)
                    {
                        // Quest:
                        string questName = GetWizardQuestName(questNames, item.questNamesIndex);
                        //sb.AppendFormat("{0}Quest[\"{1}\"].State {2} \"{3}\"{4}",
                        //                openParen,
                        //                DialogueLua.StringToTableIndex(questName),
                        //                GetWizardEqualityText(item.equalityType),
                        //                QuestLog.StateToString(item.questState),
                        //                closeParen);
                        sb.AppendFormat("{0}CurrentQuestState(\"{1}\") {2} \"{3}\"{4}",
                                        openParen,
                                        questName,
                                        GetWizardEqualityText(item.equalityType),
                                        QuestLog.StateToString(item.questState),
                                        closeParen);
                    }
                    else if (item.conditionType == ConditionWizardResourceType.QuestEntry)
                    {
                        // Quest Entry:
                        string questName = GetWizardQuestName(complexQuestNames, item.questNamesIndex);
                        //sb.AppendFormat("{0}Quest[\"{1}\"].Entry_{2}_State {3} \"{4}\"{5}",
                        //                openParen,
                        //                DialogueLua.StringToTableIndex(questName),
                        //                item.questEntryIndex + 1,
                        //                GetWizardEqualityText(item.equalityType),
                        //                QuestLog.StateToString(item.questState),
                        //                closeParen);
                        sb.AppendFormat("{0}CurrentQuestEntryState(\"{1}\", {2}) {3} \"{4}\"{5}",
                                        openParen,
                                        questName,
                                        item.questEntryIndex + 1,
                                        GetWizardEqualityText(item.equalityType),
                                        QuestLog.StateToString(item.questState),
                                        closeParen);
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Variable)
                    {
                        // Variable:
                        string variableName = variableNames[item.variableNamesIndex];
                        switch (GetWizardVariableType(item.variableNamesIndex))
                        {
                        case FieldType.Boolean:
                            sb.AppendFormat("{0}Variable[\"{1}\"] {2} {3}{4}",
                                            openParen,
                                            DialogueLua.StringToTableIndex(variableName),
                                            GetWizardEqualityText(item.equalityType),
                                            (item.booleanValue == BooleanType.True) ? "true" : "false",
                                            closeParen);
                            break;

                        case FieldType.Number:
                            if (item.comparisonType == ComparisonType.Between)
                            {
                                sb.AppendFormat("{0}{3} <= Variable[\"{1}\"] and Variable[\"{1}\"] <= {4}{5}",
                                                openParen,
                                                DialogueLua.StringToTableIndex(variableName),
                                                GetWizardComparisonText(item.comparisonType),
                                                item.floatValue,
                                                item.floatValue2,
                                                closeParen);
                            }
                            else
                            {
                                sb.AppendFormat("{0}Variable[\"{1}\"] {2} {3}{4}",
                                                openParen,
                                                DialogueLua.StringToTableIndex(variableName),
                                                GetWizardComparisonText(item.comparisonType),
                                                item.floatValue,
                                                closeParen);
                            }
                            break;

                        default:
                            sb.AppendFormat("{0}Variable[\"{1}\"] {2} \"{3}\"{4}",
                                            openParen,
                                            DialogueLua.StringToTableIndex(variableName),
                                            GetWizardEqualityText(item.equalityType),
                                            item.stringValue,
                                            closeParen);
                            break;
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Actor)
                    {
                        // Actor:
                        if (item.actorNamesIndex < actorNames.Length)
                        {
                            var actorName      = actorNames[item.actorNamesIndex];
                            var actorField     = actorFieldNames[item.actorFieldIndex];
                            var actorFieldType = GetWizardActorFieldType(item.actorFieldIndex);
                            AppendFormat(sb, "Actor", actorName, actorField, actorFieldType, item);
                        }
                        else
                        {
                            sb.Append("(true)");
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Item)
                    {
                        // Item:
                        if (item.itemNamesIndex < itemNames.Length)
                        {
                            var itemName      = itemNames[item.itemNamesIndex];
                            var itemField     = itemFieldNames[item.itemFieldIndex];
                            var itemFieldType = GetWizardItemFieldType(item.itemFieldIndex);
                            AppendFormat(sb, "Item", itemName, itemField, itemFieldType, item);
                        }
                        else
                        {
                            sb.Append("(true)");
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Location)
                    {
                        // Location:
                        if (item.locationNamesIndex < locationNames.Length)
                        {
                            var locationName      = locationNames[item.locationNamesIndex];
                            var locationField     = locationFieldNames[item.locationFieldIndex];
                            var locationFieldType = GetWizardLocationFieldType(item.locationFieldIndex);
                            AppendFormat(sb, "Location", locationName, locationField, locationFieldType, item);
                        }
                        else
                        {
                            sb.Append("(true)");
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.SimStatus)
                    {
                        // SimStatus:
                        string simStatusID = item.simStatusThisID ? "thisID" : item.simStatusID.ToString();
                        sb.AppendFormat("{0}Dialog[{1}].SimStatus {2} \"{3}\"{4}",
                                        openParen,
                                        simStatusID,
                                        GetWizardEqualityText(item.equalityType),
                                        item.simStatusType,
                                        closeParen);
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Custom)
                    {
                        // Custom:
                        sb.AppendFormat("{0}{1}{2}", openParen, item.stringValue, closeParen);
                    }
                }
                return(sb.ToString());
            }
            catch (Exception e)
            {
                Debug.LogError(string.Format("{0}: Internal error building condition: {1}", DialogueDebug.Prefix, e.Message));
                return(savedLuaCode);
            }
            //-- Moved to AcceptConditionsWizard: currentConditionsWizardEntry = null;
        }
示例#21
0
        private string ApplyConditionsWizard()
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                string        logicalOperator = GetLogicalOperatorText(conditionsLogicalOperator);
                var           needParens      = (conditionItems.Count > 1) || (append && !string.IsNullOrEmpty(savedLuaCode));
                openParen  = needParens ? "(" : string.Empty;
                closeParen = needParens ? ")" : string.Empty;
                if (append && !string.IsNullOrEmpty(savedLuaCode))
                {
                    sb.AppendFormat("{0} {1} ", savedLuaCode, logicalOperator);
                }
                bool first = true;
                foreach (ConditionItem item in conditionItems)
                {
                    if (!first)
                    {
                        sb.AppendFormat(" {0} ", logicalOperator);
                    }
                    first = false;
                    if (item.conditionType == ConditionWizardResourceType.Quest)
                    {
                        // Quest:
                        string questName = GetWizardQuestName(questNames, item.questNamesIndex);
                        sb.AppendFormat("{0}CurrentQuestState(\"{1}\") {2} \"{3}\"{4}",
                                        openParen,
                                        questName,
                                        GetWizardEqualityText(item.equalityType),
                                        QuestLog.StateToString(item.questState),
                                        closeParen);
                    }
                    else if (item.conditionType == ConditionWizardResourceType.QuestEntry)
                    {
                        // Quest Entry:
                        string questName = GetWizardQuestName(complexQuestNames, item.questNamesIndex);
                        sb.AppendFormat("{0}CurrentQuestEntryState(\"{1}\", {2}) {3} \"{4}\"{5}",
                                        openParen,
                                        questName,
                                        item.questEntryIndex + 1,
                                        GetWizardEqualityText(item.equalityType),
                                        QuestLog.StateToString(item.questState),
                                        closeParen);
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Variable)
                    {
                        // Variable:
                        string variableName = variableNames[item.variableNamesIndex];
                        switch (GetWizardVariableType(item.variableNamesIndex))
                        {
                        case FieldType.Boolean:
                            sb.AppendFormat("{0}Variable[\"{1}\"] {2} {3}{4}",
                                            openParen,
                                            DialogueLua.StringToTableIndex(variableName),
                                            GetWizardEqualityText(item.equalityType),
                                            (item.booleanValue == BooleanType.True) ? "true" : "false",
                                            closeParen);
                            break;

                        case FieldType.Number:
                            if (item.comparisonType == ComparisonType.Between)
                            {
                                sb.AppendFormat("{0}{3} <= Variable[\"{1}\"] and Variable[\"{1}\"] <= {4}{5}",
                                                openParen,
                                                DialogueLua.StringToTableIndex(variableName),
                                                GetWizardComparisonText(item.comparisonType),
                                                item.floatValue,
                                                item.floatValue2,
                                                closeParen);
                            }
                            else
                            {
                                sb.AppendFormat("{0}Variable[\"{1}\"] {2} {3}{4}",
                                                openParen,
                                                DialogueLua.StringToTableIndex(variableName),
                                                GetWizardComparisonText(item.comparisonType),
                                                item.floatValue,
                                                closeParen);
                            }
                            break;

                        default:
                            sb.AppendFormat("{0}Variable[\"{1}\"] {2} \"{3}\"{4}",
                                            openParen,
                                            DialogueLua.StringToTableIndex(variableName),
                                            GetWizardEqualityText(item.equalityType),
                                            item.stringValue,
                                            closeParen);
                            break;
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Actor)
                    {
                        // Actor:
                        if (item.actorNamesIndex < actorNames.Length)
                        {
                            var actorName      = actorNames[item.actorNamesIndex];
                            var actorField     = actorFieldNames[item.actorFieldIndex];
                            var actorFieldType = GetWizardActorFieldType(item.actorFieldIndex);
                            AppendFormat(sb, "Actor", actorName, actorField, actorFieldType, item);
                        }
                        else
                        {
                            sb.Append("(true)");
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Item)
                    {
                        // Item:
                        if (item.itemNamesIndex < itemNames.Length)
                        {
                            var itemName      = itemNames[item.itemNamesIndex];
                            var itemField     = itemFieldNames[item.itemFieldIndex];
                            var itemFieldType = GetWizardItemFieldType(item.itemFieldIndex);
                            AppendFormat(sb, "Item", itemName, itemField, itemFieldType, item);
                        }
                        else
                        {
                            sb.Append("(true)");
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Location)
                    {
                        // Location:
                        if (item.locationNamesIndex < locationNames.Length)
                        {
                            var locationName      = locationNames[item.locationNamesIndex];
                            var locationField     = locationFieldNames[item.locationFieldIndex];
                            var locationFieldType = GetWizardLocationFieldType(item.locationFieldIndex);
                            AppendFormat(sb, "Location", locationName, locationField, locationFieldType, item);
                        }
                        else
                        {
                            sb.Append("(true)");
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.SimStatus)
                    {
                        // SimStatus:
                        string simStatusID = item.simStatusThisID ? "thisID" : item.simStatusID.ToString();
                        sb.AppendFormat("{0}Dialog[{1}].SimStatus {2} \"{3}\"{4}",
                                        openParen,
                                        simStatusID,
                                        GetWizardEqualityText(item.equalityType),
                                        item.simStatusType,
                                        closeParen);
                    }
                    else if (item.conditionType == ConditionWizardResourceType.Custom)
                    {
                        // Custom:
                        if (0 <= item.customLuaFuncIndex && item.customLuaFuncIndex < customLuaFuncs.Length)
                        {
                            sb.Append(openParen);
                            var luaFuncRecord = customLuaFuncs[item.customLuaFuncIndex];
                            sb.Append(luaFuncRecord.functionName + "(");
                            if (item.customParamValues == null)
                            {
                                InitCustomParamValues(luaFuncRecord, out item.customParamValues);
                            }
                            for (int p = 0; p < luaFuncRecord.parameters.Length; p++)
                            {
                                if (p > 0)
                                {
                                    sb.Append(", ");
                                }
                                switch (luaFuncRecord.parameters[p])
                                {
                                case CustomLuaParameterType.Bool:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = BooleanType.True;
                                    }
                                    sb.Append(((BooleanType)item.customParamValues[p] == BooleanType.True) ? "true" : "false");
                                    break;

                                case CustomLuaParameterType.Double:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = (float)0;
                                    }
                                    sb.Append((float)item.customParamValues[p]);
                                    break;

                                case CustomLuaParameterType.String:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = string.Empty;
                                    }
                                    sb.Append("\"" + (string)item.customParamValues[p] + "\"");
                                    break;

                                case CustomLuaParameterType.Actor:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = (int)0;
                                    }
                                    var actorIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= actorIndex && actorIndex < actorNames.Length) ? ("\"" + actorNames[actorIndex] + "\"") : "\"\"");
                                    break;

                                case CustomLuaParameterType.Quest:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = (int)0;
                                    }
                                    var questIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= questIndex && questIndex < questNames.Length) ? ("\"" + questNames[questIndex] + "\"") : "\"\"");
                                    break;

                                case CustomLuaParameterType.QuestEntry:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = (int)0;
                                    }
                                    sb.Append(((int)item.customParamValues[p] + 1).ToString());
                                    break;

                                case CustomLuaParameterType.Variable:
                                    if (item.customParamValues[p] == null)
                                    {
                                        item.customParamValues[p] = (int)0;
                                    }
                                    var variableIndex = (int)item.customParamValues[p];
                                    sb.Append((0 <= variableIndex && variableIndex < variableNames.Length) ? ("Variable[\"" + variableNames[variableIndex] + "\"]") : "\"\"");
                                    break;
                                }
                            }
                            sb.Append(") ");
                            switch (luaFuncRecord.returnValue)
                            {
                            case CustomLuaReturnType.Bool:
                                sb.Append(((item.equalityType == EqualityType.Is) ? " == " : " ~= ") +
                                          ((item.booleanValue == BooleanType.True) ? "true" : "false"));
                                break;

                            case CustomLuaReturnType.Double:
                                sb.Append(GetWizardComparisonText(item.comparisonType) + " " + item.floatValue);
                                break;

                            case CustomLuaReturnType.String:
                                sb.Append(((item.equalityType == EqualityType.Is) ? " == " : " ~= ") +
                                          "\"" + item.stringValue + "\"");
                                break;
                            }
                            sb.Append(closeParen);
                        }
                    }
                    else if (item.conditionType == ConditionWizardResourceType.ManualEnter)
                    {
                        // Manual Enter:
                        sb.AppendFormat("{0}{1}{2}", openParen, item.stringValue, closeParen);
                    }
                }
                return(sb.ToString());
            }
            catch (Exception e)
            {
                Debug.LogError(string.Format("{0}: Internal error building condition: {1}", DialogueDebug.Prefix, e.Message));
                return(savedLuaCode);
            }
            //-- Moved to AcceptConditionsWizard: currentConditionsWizardEntry = null;
        }
 public virtual bool IsQuestVisible(string questTitle)
 {
     return(!checkVisibleField || Lua.IsTrue("Quest[\"" + DialogueLua.StringToTableIndex(questTitle) + "\"].Visible ~= false"));
 }
 public static string SanitizeLevelName(string levelName)
 {
     return(DialogueLua.StringToTableIndex(levelName).Replace(".", "_"));
 }
示例#24
0
        private string ApplyScriptWizard()
        {
            try
            {
                StringBuilder sb = new StringBuilder();
                if (append && !string.IsNullOrEmpty(savedLuaCode))
                {
                    sb.AppendFormat("{0};\n", savedLuaCode);
                }
                string endText = (scriptItems.Count > 1) ? ";\n" : string.Empty;
                for (int i = 0; i < scriptItems.Count; i++)
                {
                    var item = scriptItems[i];
                    if (item.resourceType == ScriptWizardResourceType.Quest)
                    {
                        // Quest:
                        string questName = GetWizardQuestName(questNames, item.questNamesIndex);
                        //sb.AppendFormat("Quest[\"{0}\"].State = \"{1}\"",
                        //                DialogueLua.StringToTableIndex(questName),
                        //                QuestLog.StateToString(item.questState));
                        sb.AppendFormat("SetQuestState(\"{0}\", \"{1}\")",
                                        questName,
                                        QuestLog.StateToString(item.questState));
                    }
                    else if (item.resourceType == ScriptWizardResourceType.QuestEntry)
                    {
                        // Quest Entry:
                        string questName = GetWizardQuestName(complexQuestNames, item.questNamesIndex);
                        //sb.AppendFormat("Quest[\"{0}\"].Entry_{1}_State = \"{2}\"",
                        //                DialogueLua.StringToTableIndex(questName),
                        //                item.questEntryIndex + 1,
                        //                QuestLog.StateToString(item.questState));
                        sb.AppendFormat("SetQuestEntryState(\"{0}\", {1}, \"{2}\")",
                                        questName,
                                        item.questEntryIndex + 1,
                                        QuestLog.StateToString(item.questState));
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Variable)
                    {
                        // Variable:
                        string variableName = variableNames[item.variableNamesIndex];
                        switch (GetWizardVariableType(item.variableNamesIndex))
                        {
                        case FieldType.Boolean:
                            sb.AppendFormat("Variable[\"{0}\"] = {1}",
                                            DialogueLua.StringToTableIndex(variableName),
                                            (item.booleanValue == BooleanType.True) ? "true" : "false");
                            break;

                        case FieldType.Number:
                            if (item.valueSetMode == ValueSetMode.To)
                            {
                                sb.AppendFormat("Variable[\"{0}\"] = {1}",
                                                DialogueLua.StringToTableIndex(variableName),
                                                item.floatValue);
                            }
                            else
                            {
                                sb.AppendFormat("Variable[\"{0}\"] = Variable[\"{0}\"] + {1}",
                                                DialogueLua.StringToTableIndex(variableName),
                                                item.floatValue);
                            }
                            break;

                        default:
                            sb.AppendFormat("Variable[\"{0}\"] = \"{1}\"",
                                            DialogueLua.StringToTableIndex(variableName),
                                            item.stringValue);
                            break;
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Actor)
                    {
                        // Actor:
                        if (item.actorNamesIndex < actorNames.Length)
                        {
                            var actorName      = actorNames[item.actorNamesIndex];
                            var actorFieldName = actorFieldNames[item.actorFieldIndex];
                            var fieldType      = GetWizardActorFieldType(item.actorFieldIndex);
                            AppendFormat(sb, "Actor", actorName, actorFieldName, fieldType, item);
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Item)
                    {
                        // Item:
                        if (item.itemNamesIndex < itemNames.Length)
                        {
                            var itemName      = itemNames[item.itemNamesIndex];
                            var itemFieldName = itemFieldNames[item.itemFieldIndex];
                            var fieldType     = GetWizardItemFieldType(item.itemFieldIndex);
                            AppendFormat(sb, "Item", itemName, itemFieldName, fieldType, item);
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Location)
                    {
                        // Location:
                        if (item.locationNamesIndex < locationNames.Length)
                        {
                            var locationName      = locationNames[item.locationNamesIndex];
                            var locationFieldName = locationFieldNames[item.locationFieldIndex];
                            var fieldType         = GetWizardLocationFieldType(item.locationFieldIndex);
                            AppendFormat(sb, "Location", locationName, locationFieldName, fieldType, item);
                        }
                    }
                    else if (item.resourceType == ScriptWizardResourceType.SimStatus)
                    {
                        // SimStatus:
                        sb.AppendFormat("Dialog[{0}].SimStatus = \"{1}\"", item.simStatusID, item.simStatusType);
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Alert)
                    {
                        // Custom:
                        sb.Append("ShowAlert(\"" + item.stringValue.Replace("\"", "\\\"") + "\")");
                    }
                    else if (item.resourceType == ScriptWizardResourceType.Custom)
                    {
                        // Custom:
                        sb.Append(item.stringValue);
                    }

                    if (i < (scriptItems.Count - 1))
                    {
                        sb.AppendFormat(endText);
                    }
                }
                return(sb.ToString());
            }
            catch (Exception e)
            {
                Debug.LogError(string.Format("{0}: Internal error building script: {1}", DialogueDebug.Prefix, e.Message));
                return(savedLuaCode);
            }
        }