A conversation is a line that may have several lines or responses. It may also have an action script that is executed when the line is activated. There can also be a condition script and if it evaluates to true then the line is visible. This means that there can be several roots in a conversation and the one that is used is the first one whose condition evaluates to true.
A line can also be a link to another line which means that the conversation jumps to that line instead, this can be great for conversations that repeat.
This is what I got so far:
class ConversationLine {public: Guid ID; Guid Link; // optional string Condition; // Optional string Action; // Optional string Text; List Lines;};typedef List Conversation;
I made an editor for this conversation system in C# and I will probably implement it in the actual game as soon as I have got the GUI up and running. I have attached a screenshot of the editor below.