public static ItemlistArrNamFiles ReadDataTextFiles(string dataPath, string textPath)
        {
            if (!File.Exists(dataPath))
            {
                Console.WriteLine("The file {0} not exists.", dataPath);
                return(null);
            }
            if (!File.Exists(textPath))
            {
                Console.WriteLine("The file {0} not exists.", textPath);
                return(null);
            }

            ItemlistArrNamFiles arrNamFile = new ItemlistArrNamFiles();

            using (BinaryReader dataReader = new BinaryReader(File.Open(dataPath, FileMode.Open)))
            {
                while (dataReader.BaseStream.Position < dataReader.BaseStream.Length)
                {
                    byte length = dataReader.ReadByte();
                    arrNamFile.Blocks.Add(dataReader.ReadBytes(length));
                }
            }

            using (BinaryReader textReader = new BinaryReader(File.Open(textPath, FileMode.Open), Encoding.Default))
            {
                char[] chars = textReader.ReadChars((int)textReader.BaseStream.Length);
                string text  = new string(chars).ReplaceSpanishChars();
                var    texts = text.Split(new string[] { "\n<end>\n\n" }, StringSplitOptions.None).Reverse()
                               .Skip(1).Reverse().ToArray();

                ushort length = 0;
                foreach (var txt in texts)
                {
                    if (Regex.IsMatch(txt, "<\\d+>"))
                    {
                        var index = ushort.Parse(txt.Replace("<", "").Replace(">", ""));
                        arrNamFile.Pointers.Add(arrNamFile.Pointers[index]);
                    }
                    else
                    {
                        arrNamFile.Pointers.Add(length);
                        arrNamFile.Texts.Add(txt.ToCharArray().Concat(new char[] { '\0' }).ToArray());
                        length += (ushort)(txt.Length + 1);
                    }
                }
            }

            arrNamFile.Path = textPath;
            return(arrNamFile);
        }
Example #2
0
        private static void UnpackItemlistArrNamFiles()
        {
            Console.Clear();
            Console.Write("Insert path of itemlist .arr and .nam files (without filenames): ");
            string arrPath = Console.ReadLine();

            if (string.IsNullOrEmpty(arrPath))
            {
                arrPath = ".";
            }
            string namPath = arrPath + "\\itemlist.nam";

            arrPath += "\\itemlist.arr";
            ItemlistArrNamFiles.ReadFiles(arrPath, namPath).Extract();
        }
Example #3
0
        private static void RepackItemlistArrNamFiles()
        {
            Console.Clear();
            Console.Write("Insert path of itemlist .data and .text files (without filenames): ");
            string textPath = Console.ReadLine();

            if (string.IsNullOrEmpty(textPath))
            {
                textPath = ".";
            }
            string dataPath = textPath + "\\itemlist.data";

            textPath += "\\itemlist.text";
            ItemlistArrNamFiles.ReadDataTextFiles(dataPath, textPath).WriteArrNamFiles();
        }
        public static ItemlistArrNamFiles ReadFiles(string arrPath, string namPath)
        {
            ItemlistArrNamFiles arrNamFile = new ItemlistArrNamFiles();

            if (!File.Exists(arrPath))
            {
                Console.WriteLine("The file {0} not exists.", arrPath);
                return(null);
            }
            if (!File.Exists(namPath))
            {
                Console.WriteLine("The file {0} not exists.", namPath);
                return(null);
            }

            using (BinaryReader arrReader = new BinaryReader(File.Open(arrPath, FileMode.Open)))
            {
                arrNamFile.Blocks.Add(arrReader.ReadBytes(0x26));

                for (int i = 0x26; i < arrReader.BaseStream.Length; i += 0x24)
                {
                    ushort pointer = arrReader.ReadUInt16();
                    arrNamFile.Pointers.Add(pointer);

                    if (arrReader.BaseStream.Length == arrReader.BaseStream.Position)
                    {
                        break;
                    }

                    pointer = arrReader.ReadUInt16();
                    arrNamFile.Pointers.Add(pointer);

                    arrNamFile.Blocks.Add(arrReader.ReadBytes(0x24));
                }
            }

            using (BinaryReader namReader = new BinaryReader(File.Open(namPath, FileMode.Open), Encoding.Default))
            {
                for (int i = 0; i < arrNamFile.Pointers.Count; i++)
                {
                    ushort      pointer   = arrNamFile.Pointers[i];
                    List <char> charArray = new List <char>();
                    int         p;
                    if ((p = arrNamFile.Pointers.IndexOf(pointer)) < i)
                    {
                        charArray.AddRange(string.Format("<{0}>", p).ToCharArray());
                    }
                    else
                    {
                        namReader.BaseStream.Seek(pointer, SeekOrigin.Begin);
                        char c;
                        while ((c = namReader.ReadChar()) != '\0')
                        {
                            charArray.Add(c);
                        }
                    }
                    charArray.Add('\0');
                    arrNamFile.Texts.Add(charArray.ToArray());
                }
            }

            arrNamFile.Path = arrPath;
            return(arrNamFile);
        }