I haven't created a reproduction project yet because it'd bit a bit more finicky than usual (I'd have to include the AC save files + profiles, etc). But I did follow your advice and did this:
which resulted in this:
Those are all the conversations, correctly listed!
But I'm still getting errors like this after loading the old save, when a check makes a reference to conversation 28, as long as conversation 28 has not been run yet (if it is run after loading the save, then the check doesn't produce an error):
Code: Select all
Dialogue System: Lua code 'return Conversation[28].Dialog[3].SimStatus ~= "WasDisplayed"' threw exception 'Lookup of field 'SimStatus' in the table element failed because the table element itself isn't in the table.'
UnityEngine.Debug:LogError (object)
PixelCrushers.DialogueSystem.Lua:RunRaw (string,bool,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Lua/Lua Wrapper/Lua Interpreter/Lua.cs:228)
PixelCrushers.DialogueSystem.Lua:Run (string,bool,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Lua/Lua Wrapper/Lua Interpreter/Lua.cs:129)
PixelCrushers.DialogueSystem.Lua:IsTrue (string,bool,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Lua/Lua Wrapper/Lua Interpreter/Lua.cs:171)
PixelCrushers.DialogueSystem.ConversationModel:EvaluateLinksAtPriority (PixelCrushers.DialogueSystem.ConditionPriority,PixelCrushers.DialogueSystem.DialogueEntry,System.Collections.Generic.List`1<PixelCrushers.DialogueSystem.Response>,System.Collections.Generic.List`1<PixelCrushers.DialogueSystem.Response>,System.Collections.Generic.List`1<PixelCrushers.DialogueSystem.DialogueEntry>,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Model/Logic/Model/ConversationModel.cs:426)
PixelCrushers.DialogueSystem.ConversationModel:EvaluateLinks (PixelCrushers.DialogueSystem.DialogueEntry,System.Collections.Generic.List`1<PixelCrushers.DialogueSystem.Response>,System.Collections.Generic.List`1<PixelCrushers.DialogueSystem.Response>,System.Collections.Generic.List`1<PixelCrushers.DialogueSystem.DialogueEntry>,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Model/Logic/Model/ConversationModel.cs:406)
PixelCrushers.DialogueSystem.ConversationModel:GetState (PixelCrushers.DialogueSystem.DialogueEntry,bool,bool,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Model/Logic/Model/ConversationModel.cs:300)
PixelCrushers.DialogueSystem.ConversationModel:.ctor (PixelCrushers.DialogueSystem.DialogueDatabase,string,UnityEngine.Transform,UnityEngine.Transform,bool,PixelCrushers.DialogueSystem.IsDialogueEntryValidDelegate,int,bool,bool) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/MVC/Model/Logic/Model/ConversationModel.cs:146)
PixelCrushers.DialogueSystem.DialogueSystemController:StartConversation (string,UnityEngine.Transform,UnityEngine.Transform,int) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Manager/DialogueSystemController.cs:1008)
PixelCrushers.DialogueSystem.DialogueSystemController:StartConversation (string,UnityEngine.Transform,UnityEngine.Transform) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Manager/DialogueSystemController.cs:1083)
PixelCrushers.DialogueSystem.DialogueManager:StartConversation (string,UnityEngine.Transform,UnityEngine.Transform) (at Assets/Plugins/Pixel Crushers/Dialogue System/Scripts/Manager/DialogueManager.cs:490)
AC.ActionDialogueSystemConversation:Run () (at Assets/AdventureCreator/Scripts/Actions/ActionDialogueSystemConversation.cs:105)
AC.ActionList/<RunAction>d__46:MoveNext () (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:467)
UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator)
AC.ActionList:ProcessAction (int) (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:408)
AC.ActionList:ProcessActionEnd (AC.ActionEnd,int,bool) (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:616)
AC.ActionList:EndAction (AC.Action) (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:575)
AC.ActionList/<RunAction>d__46:MoveNext () (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:539)
UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator)
AC.ActionList:ProcessAction (int) (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:408)
AC.ActionList:ProcessActionEnd (AC.ActionEnd,int,bool) (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:616)
AC.ActionList:EndAction (AC.Action) (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:575)
AC.ActionList/<RunAction>d__46:MoveNext () (at Assets/AdventureCreator/Scripts/ActionList/ActionList.cs:539)
UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)
Interestingly, if I click "Play" and run an unrelated conversation (the DialogueSystemEnvironment AC variable is an empty string, but after we run any conversation it becomes populated), the conversation 28 entry looks like this:
Code: Select all
Conversation[28].SimX="1;u;2;u;3;u;4;u;5;u;0;u";
But after loading the old AC save, it looks like this:
That is, as the debug logs in the beginning of this post show, conversation 28 was processed on load! The issue seems to be that the entry doesn't actually become populated until the conversation is run, and so any checks against it return an error.
This I suppose leads me to another question: if rather than adding a new conversation, we added a new NODE to an existing conversation, and then we loaded an old AC save, the same error would likely occur, correct? Meaning, if we checked against the new node's status after loading the old save but before running the conversation (which seems to update the data), we'd likely run into the error too.