/// <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)); }
/// <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 })); } }
/// <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); } }
/// <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) }); } }
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; } }
/// <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; } }
/// <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 })); } }
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("}; "); } }
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(); }
/// <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"; } }
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); } }
/// <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 })); } }
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); }
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 })); } }
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; }
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(".", "_")); }
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); } }