Esempio n. 1
0
 void SetStringsIndexes(ref BymlFile File, GenericNode Node)
 {
     for (int i = 0; i < Node.SubNodes.Count; i++)
     {
         if (Node.SubNodes[i].Name != null)
         {
             Node.SubNodes[i].StringIndex = (uint)File.NodeNames.Strings.IndexOf(Node.SubNodes[i].Name);
             Node.SubNodes[i].Name        = null;
         }
         else
         {
             Node.SubNodes[i].StringIndex = 0;
         }
         if (Node.SubNodes[i].NodeType == (byte)SubNodeValTypes.String)
         {
             if (Node.SubNodes[i].StringValue != null && Node.SubNodes[i].StringValue.Trim() != "")
             {
                 Node.SubNodes[i].Value = BitConverter.GetBytes((UInt32)File.StringRes.Strings.IndexOf(StringFromXml(Node.SubNodes[i].StringValue)));
             }
             else
             {
                 Node.SubNodes[i].Value = new byte[4];
             }
         }
         if (Node.SubNodes[i].NodeType == 0xC0 || Node.SubNodes[i].NodeType == 0xC1)
         {
             SetStringsIndexes(ref File, Node.SubNodes[i]);
         }
     }
 }
Esempio n. 2
0
        BymlFile ImportFromXml(string file)
        {
            BymlFile    ret = new BymlFile();
            XmlDocument xml = new XmlDocument();

            xml.LoadXml(file);
            XmlNode n = xml.SelectSingleNode("/Root/isBigEndian");

            ret.header           = new Header();
            ret.header.BigEndian = Convert.ToBoolean(n.Attributes["Value"].Value);
            n = xml.SelectSingleNode("/Root/BymlFormatVersion");
            if (n == null)
            {
                ret.header.Version = 1;
            }
            else
            {
                ret.header.Version = UInt16.Parse(n.Attributes["Value"].Value);
            }
            n = xml.SelectSingleNode("/Root");
            ret.RootNode.NodeType = n.LastChild.Name == "C1" ? (byte)0xC1 : (byte)0xC0;
            ret.RootNode.SubNodes.AddRange(XmlToNode(n.LastChild.ChildNodes));
            ProcessStrings(ref ret, ret.RootNode);
            List <string> tmp = new List <string>();

            for (int i = 0; i < ret.StringRes.Strings.Count; i++)
            {
                ret.StringRes.Strings[i] = StringToJapChar(ret.StringRes.Strings[i]);                                                   //Some tricks to get the right order, i HATE text encondings
            }
            for (int i = 0; i < ret.NodeNames.Strings.Count; i++)
            {
                ret.NodeNames.Strings[i] = StringToJapChar(ret.NodeNames.Strings[i]);
            }
            ret.StringRes.Strings.Sort(StringComparer.Ordinal);
            ret.NodeNames.Strings.Sort(StringComparer.Ordinal);
            if (ret.StringRes.Strings.Count == 0)
            {
                ret.StringRes.IsNull = true;
            }
            if (ret.NodeNames.Strings.Count == 0)
            {
                ret.NodeNames.IsNull = true;
            }
            for (int i = 0; i < ret.StringRes.Strings.Count; i++)
            {
                ret.StringRes.Strings[i] = StringFromXml(ret.StringRes.Strings[i]);
            }
            for (int i = 0; i < ret.NodeNames.Strings.Count; i++)
            {
                ret.NodeNames.Strings[i] = StringFromXml(ret.NodeNames.Strings[i]);
            }
            SetStringsIndexes(ref ret, ret.RootNode);
            return(ret);
        }
Esempio n. 3
0
        string exportToXml(BymlFile File)
        {
            CustomStringWriter str = new CustomStringWriter(Encoding.GetEncoding(932));
            XmlTextWriter      xr;

            xr            = new XmlTextWriter(str);
            xr.Formatting = System.Xml.Formatting.Indented;
            xr.WriteStartDocument();
            xr.WriteStartElement("Root");
            xr.WriteStartElement("isBigEndian");
            xr.WriteAttributeString("Value", File.header.BigEndian.ToString());
            xr.WriteEndElement();
            xr.WriteStartElement("BymlFormatVersion");
            xr.WriteAttributeString("Value", File.header.Version.ToString());
            xr.WriteEndElement();
            GenericNode RootNode = File.RootNode;

            xr.WriteStartElement(RootNode.NodeType == (byte)0xC1 ? "C1" : "C0");
            saveNode(RootNode.SubNodes.ToArray(), xr);
            xr.WriteEndElement();
            xr.WriteEndElement();
            xr.Close();
            return(str.ToString());
        }
Esempio n. 4
0
 void ProcessStrings(ref BymlFile File, GenericNode Node)
 {
     for (int i = 0; i < Node.SubNodes.Count; i++)
     {
         if (Node.SubNodes[i].Name != null)
         {
             if (!File.NodeNames.Strings.Contains(Node.SubNodes[i].Name))
             {
                 File.NodeNames.Strings.Add(Node.SubNodes[i].Name);
             }
         }
         if (Node.SubNodes[i].NodeType == (byte)SubNodeValTypes.String)
         {
             if (!File.StringRes.Strings.Contains(StringFromXml(Node.SubNodes[i].StringValue)))
             {
                 File.StringRes.Strings.Add(StringFromXml(Node.SubNodes[i].StringValue));
             }
         }
         if (Node.SubNodes[i].NodeType == 0xC0 || Node.SubNodes[i].NodeType == 0xC1)
         {
             ProcessStrings(ref File, Node.SubNodes[i]);
         }
     }
 }