Beispiel #1
0
        //save format:
        //write this element's position
        //for each sub-element
        //write their ID
        //write their element

        public static CharaIndexNode Load(BinaryReader reader)
        {
            CharaIndexNode node = new CharaIndexNode();

            node.Position = reader.ReadInt64();
            int count = reader.ReadInt32();

            for (int ii = 0; ii < count; ii++)
            {
                int            id      = reader.ReadInt32();
                CharaIndexNode subNode = CharaIndexNode.Load(reader);
                node.Nodes[id] = subNode;
            }
            return(node);
        }
Beispiel #2
0
        private static CharaIndexNode LoadCharaIndices(string charaDir)
        {
            CharaIndexNode fullGuide = null;

            try
            {
                using (FileStream stream = File.OpenRead(charaDir + "index.idx"))
                {
                    using (BinaryReader reader = new BinaryReader(stream))
                        fullGuide = CharaIndexNode.Load(reader);
                }
            }
            catch (Exception ex)
            {
                DiagManager.Instance.LogError(new Exception("Error reading header at " + charaDir + "\n", ex));
            }
            return(fullGuide);
        }
Beispiel #3
0
        public static MonsterID GetFallbackForm(CharaIndexNode guide, MonsterID data)
        {
            MonsterID fallback = MonsterID.Invalid;
            MonsterID buffer   = MonsterID.Invalid;

            if (guide.Nodes.ContainsKey(data.Species))
            {
                buffer.Species = data.Species;
                //if (guide.Nodes[data.Species].Position > 0)
                fallback = buffer;
                if (guide.Nodes[data.Species].Nodes.ContainsKey(data.Form))
                {
                    buffer.Form = data.Form;
                    if (guide.Nodes[data.Species].Nodes[data.Form].Position > 0)
                    {
                        fallback = buffer;
                    }
                    int trialSkin = data.Skin;
                    while (trialSkin > -1)
                    {
                        if (guide.Nodes[data.Species].Nodes[data.Form].Nodes.ContainsKey(trialSkin))
                        {
                            buffer.Skin = trialSkin;
                            if (guide.Nodes[data.Species].Nodes[data.Form].Nodes[trialSkin].Position > 0)
                            {
                                fallback = buffer;
                            }
                            if (guide.Nodes[data.Species].Nodes[data.Form].Nodes[trialSkin].Nodes.ContainsKey((int)data.Gender))
                            {
                                buffer.Gender = data.Gender;
                                if (guide.Nodes[data.Species].Nodes[data.Form].Nodes[trialSkin].Nodes[(int)data.Gender].Position > 0)
                                {
                                    fallback = buffer;
                                }
                            }
                            break;
                        }
                        trialSkin--;
                    }
                }
            }
            return(fallback);
        }
Beispiel #4
0
 private void addSubValue(long position, int[] subIDs, int subIDIndex)
 {
     if (subIDIndex < subIDs.Length)
     {
         int nodeIndex = subIDs[subIDIndex];
         if (nodeIndex == -1)
         {
             Position = position;
         }
         else
         {
             if (!Nodes.ContainsKey(nodeIndex))
             {
                 Nodes[nodeIndex] = new CharaIndexNode();
             }
             Nodes[nodeIndex].addSubValue(position, subIDs, subIDIndex + 1);
         }
     }
     else
     {
         Position = position;
     }
 }