/// <summary> /// Compiles the result script. /// </summary> public static void CompileResultScript(SubRecord sr, out Record r2, out string msg) { Record r; try { ((FalloutCSharpScriptFunctionProxy)Functions).CompileResultScript(sr, out r, out msg); } catch (Exception e) { LastError = e.Message; r = null; msg = null; } if (r != null) r2 = (Record)r.Clone(); else r2 = null; }
/// <summary> /// A simple constructor that initializes the object with the given values. /// </summary> /// <param name="name">The name of the record.</param> /// <param name="br">The reader containing the record data.</param> internal Record(string name, BinaryReader br) { Name = name; br.BaseStream.Position += 12; uint AmountRead = 0; string s = ReadRecName(br); if (s == "HEDR") { br.BaseStream.Position += 10; SubRecord r = new SubRecord("CNAM", br, 32); AmountRead += (uint)(r.Size2); SubRecords.Add(r); br.BaseStream.Position -= 2; r = new SubRecord("SNAM", br, 256); AmountRead += (uint)(r.Size2); SubRecords.Add(r); br.BaseStream.Position += 4; s = ReadRecName(br); while (s == "MAST") { r = new SubRecord(s, br, br.ReadUInt16()); SubRecords.Add(r); br.BaseStream.Position += 16; s = ReadRecName(br); } } }
/// <summary> /// The copy constructor. /// </summary> /// <param name="sr">The sub-record to copy.</param> private SubRecord(SubRecord sr) { Name = sr.Name; Data = (byte[])sr.Data.Clone(); }
/// <summary> /// A simple constructor that initializes the object with the given values. /// </summary> /// <param name="name">The name of the record.</param> /// <param name="Size">The size of the record.</param> /// <param name="br">The reader containing the record data.</param> /// <param name="Oblivion">Whether the recrod is in Oblivion format.</param> internal Record(string name, uint Size, BinaryReader br, bool Oblivion) { Name = name; Flags1 = br.ReadUInt32(); FormID = br.ReadUInt32(); Flags2 = br.ReadUInt32(); if (!Oblivion) Flags3 = br.ReadUInt32(); if ((Flags1 & 0x00040000) > 0) { Flags1 ^= 0x00040000; uint newSize = br.ReadUInt32(); br = Decompress(br, (int)(Size - 4), (int)newSize); Size = newSize; } uint AmountRead = 0; while (AmountRead < Size) { string s = ReadRecName(br); uint i = 0; if (s == "XXXX") { br.ReadUInt16(); i = br.ReadUInt32(); s = ReadRecName(br); } SubRecord r = new SubRecord(s, br, i); AmountRead += (uint)(r.Size2); SubRecords.Add(r); } if (AmountRead > Size) { throw new TESParserException("Subrecord block did not match the size specified in the record header"); } //br.BaseStream.Position+=Size; if (SubRecords.Count > 0 && SubRecords[0].Name == "EDID") descriptiveName = " (" + SubRecords[0].GetStrData() + ")"; }
/// <summary> /// Compiles the result script. /// </summary> public void CompileResultScript(SubRecord sr, out Record r2, out string msg) { ScriptCompiler.CompileResultScript(sr, out r2, out msg); }