Пример #1
0
        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;
            }
            }
        }