Guest User

Untitled

a guest
Mar 20th, 2017
2,613
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using System.Windows.Forms;
  6.  
  7. namespace Redscript
  8. {
  9.     class Program
  10.     {
  11.         [STAThread]
  12.         static void Main(string[] args)
  13.         {
  14.             Console.Title = "Redscript reader by Traderain";
  15.             using (var of = new OpenFileDialog())
  16.             {
  17.                 of.Title = "Select a redscript file!";
  18.                 of.Filter = "Redscript files | *.redscripts";
  19.                 if (of.ShowDialog() == DialogResult.OK)
  20.                 {
  21.                     var strings = ParseRedscript(of.FileName);
  22.                     for (var index = 0; index < strings.Length; index++)
  23.                     {
  24.                         Console.WriteLine("[" + index + "]: " + strings[index]);
  25.                     }
  26.                 }
  27.             }
  28.         }
  29.  
  30.         public static string[] ParseRedscript(string filename)
  31.         {
  32.             var strings = new List<string>();
  33.             using (var br = new BinaryReader(new FileStream(filename, FileMode.Open)))
  34.             {
  35.                 br.BaseStream.Seek(-4, SeekOrigin.End);
  36.                 var offset = br.ReadUInt32();
  37.                 Console.WriteLine("Offset: " + offset);
  38.                 br.BaseStream.Seek(offset, SeekOrigin.Begin);
  39.                 var count = br.ReadUInt32();
  40.                 for (var i = 0; i < count; i++)
  41.                 {
  42.                     strings.Add(ReadString(br));
  43.                 }
  44.             }
  45.             return strings.ToArray();
  46.         }
  47.  
  48.         public static string ReadString(BinaryReader br)
  49.         {
  50.             int len = br.ReadByte();
  51.             if (len > 191)
  52.                 len = br.ReadByte()*64 + len - 192;
  53.             else if (len > 127)
  54.                 len = len - 128;
  55.             else
  56.             {
  57.                 throw new Exception("Error can't read length of string at " + br.BaseStream.Position);
  58.             }
  59.  
  60.             return br.ReadCr2WString(len);
  61.         }
  62.     }
  63.  
  64.     public static class RedscriptBinaryreaderExtensions
  65.     {
  66.         public static string ReadCr2WString(this BinaryReader file, int len = 0)
  67.         {
  68.             string str = null;
  69.             if (len > 0)
  70.             {
  71.                 str = Encoding.Default.GetString(file.ReadBytes(len));
  72.             }
  73.             else
  74.             {
  75.                 var sb = new StringBuilder();
  76.                 while (true)
  77.                 {
  78.                     var c = (char)file.ReadByte();
  79.                     if (c == 0)
  80.                         break;
  81.                     sb.Append(c);
  82.                 }
  83.                 str = sb.ToString();
  84.             }
  85.             return str;
  86.         }
  87.     }
  88. }
Add Comment
Please, Sign In to add comment