public override void LoadData(Dictionary <string, GameMasterNode> allNodes) { mOutEdgeStrings = new List <string>(); mChoiceEdgeInfo = new Dictionary <string, List <string> >(); mEncounterType = NodeFile.Json["encounter_type"].ToString(); mInEdge = NodeFile.Json["in_edge"].ToString(); if (mInEdge.Equals("start")) { mIsStartNode = true; } mOutEdgeStrings = ParseOutEdges(NodeFile.Json["out_edge"]); switch (mEncounterType) { case "generator": JToken generatorInfo = NodeFile.Json["generator_info"]; if (generatorInfo.SelectToken("spawn_edge") != null) { AddOutEdgesRecursive(generatorInfo["spawn_edge"], mOutEdgeStrings); } break; case "collection_quest": Dictionary <string, string> collectionEdges = JsonHelper.GetJsonStringDictionary(NodeFile.Json["collection_quest_info"], "out_edges"); foreach (KeyValuePair <string, string> collectionEdge in collectionEdges) { string outEdge = collectionEdge.Value; string choice = collectionEdge.Key; if (!outEdge.Equals("none")) { List <string> list; if (!mChoiceEdgeInfo.TryGetValue(outEdge, out list)) { list = new List <string>(); } list.Add(choice); mChoiceEdgeInfo[outEdge] = list; if (!mOutEdgeStrings.Contains(outEdge)) { mOutEdgeStrings.Add(outEdge); } } } break; case "town_upgrade_choice": { var choices = NodeFile.Json.SelectToken("town_upgrade_choice_info.choices"); if (choices != null) { foreach (JToken nodeData in choices.Values()) { if (nodeData["out_edge"] != null) { AddOutEdgesRecursive(nodeData["out_edge"], mOutEdgeStrings); } } } break; } case "delivery_quest": if (NodeFile.Json.SelectToken("delivery_quest_info.abandon_out_edge") != null) { AddOutEdgesRecursive(NodeFile.Json.SelectToken("delivery_quest_info.abandon_out_edge"), mOutEdgeStrings); } break; case "dispatch_quest": if (NodeFile.Json.SelectToken("dispatch_quest_info.abandon_out_edge") != null) { AddOutEdgesRecursive(NodeFile.Json.SelectToken("dispatch_quest_info.abandon_out_edge"), mOutEdgeStrings); } break; case "dialog_tree": // Go through all the dialog nodes and add ot edges foreach (JToken dialogNode in NodeFile.Json["dialog_tree_info"]["nodes"].Children()) { JToken choices = dialogNode.First["bulletin"]["choices"]; foreach (JToken nodeData in choices.Values()) { string parentName = (nodeData.Parent as JProperty).Name; string translatedParentName = ModuleDataManager.GetInstance().LocalizeString(parentName); JToken outEdgeSpec = nodeData["out_edge"]; if (outEdgeSpec != null) { List <string> outEdges = new List <string>(); AddOutEdgesRecursive(nodeData["out_edge"], outEdges); foreach (string outEdge in outEdges) { List <string> list; if (!mChoiceEdgeInfo.TryGetValue(outEdge, out list)) { list = new List <string>(); } list.Add(translatedParentName); mChoiceEdgeInfo[outEdge] = list; if (!mOutEdgeStrings.Contains(outEdge)) { mOutEdgeStrings.Add(outEdge); } } } } } break; case "counter": foreach (JToken nodeData in NodeFile.Json["counter_info"]["out_edges"].Values()) { mOutEdgeStrings.Add(nodeData.ToString()); } break; case "city_tier_quest": { var choices = NodeFile.Json.SelectToken("city_tier_quest_info.satisfaction_requirements"); if (choices != null) { foreach (JToken nodeData in choices.Values()) { if (nodeData["out_edge"] != null) { AddOutEdgesRecursive(nodeData["out_edge"], mOutEdgeStrings); } } } break; } } }