public void ReadOffsets() { try { string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\exec\\offsets.txt"; if (!File.Exists(path)) { Println("No offsets.txt found!"); return; } string s = System.IO.File.ReadAllText(path); string[] entries = s.Split(';'); Offsets = new List <OffsetEntry>(); foreach (string e in entries) { string[] parms = e.Split(','); if (parms.Length == 2) { parms[0] = parms[0].Trim(); parms[1] = parms[1].Trim(); Println("Found MD5 : " + parms[0] + " @ 0x" + parms[1]); OffsetEntry oe = new OffsetEntry(); oe.md5 = parms[0]; oe.offset = (uint)Int32.Parse(parms[1], System.Globalization.NumberStyles.HexNumber); Offsets.Add(oe); } } } catch (Exception ex) { Println(ex.Message); } }
public Ttf_MaximumProfileTable(BinaryReader file, OffsetEntry table) { file.Seek(table.Offset); TableBase = table.Offset; Version = file.GetUint32(); NumGlyphs = file.GetUint16(); MaxPoints = file.GetUint16(); MaxContours = file.GetUint16(); MaxCompositePoints = file.GetUint16(); MaxCompositeContours = file.GetUint16(); MaxZones = file.GetUint16(); MaxTwilightPoints = file.GetUint16(); MaxStorage = file.GetUint16(); MaxFunctionDefs = file.GetUint16(); MaxInstructionDefs = file.GetUint16(); MaxStackElements = file.GetUint16(); MaxSizeOfInstructions = file.GetUint16(); MaxComponentElements = file.GetUint16(); MaxComponentDepth = file.GetUint16(); }
public Ttf_HorizontalHeaderTable(BinaryReader file, OffsetEntry table) { file.Seek(table.Offset); TableBase = table.Offset; // See https://docs.microsoft.com/en-us/typography/opentype/spec/hhea Version = file.GetUint32(); Ascender = file.GetFWord(); Descender = file.GetFWord(); LineGap = file.GetFWord(); AdvanceWidthMax = file.GetUint16(); MinLeftSideBearing = file.GetFWord(); MinRightSideBearing = file.GetFWord(); XMaxExtent = file.GetFWord(); CaretSlopeRise = file.GetInt16(); CaretSlopeRun = file.GetInt16(); Reserved1 = file.GetInt16(); Reserved2 = file.GetInt16(); Reserved3 = file.GetInt16(); Reserved4 = file.GetInt16(); Reserved5 = file.GetInt16(); MetricDataFormat = file.GetInt16(); NumberOfHMetrics = file.GetUint16(); }
public new Dictionary <int, byte[]> ReadOffsetData(BinaryReader dbReader, long pos) { var CopyTable = new Dictionary <int, byte[]>(); var offsetmap = new List <OffsetEntry>(); long indexTablePos = dbReader.BaseStream.Length - (HasIndexTable ? RecordCount * 4 : 0); long wch7TablePos = indexTablePos - UnknownWCH7 * 4; int[] m_indexes = null; //Offset table - Contains the index, offset and length meaning the index table is not used if (HasOffsetTable) { // Records table if (StringBlockSize > 0) { dbReader.Scrub(StringBlockSize); } for (var i = 0; i < RecordCount; i++) { int id = dbReader.ReadInt32(); int offset = dbReader.ReadInt32(); short length = dbReader.ReadInt16(); if (offset == 0 || length == 0) { continue; } offsetmap.Add(new OffsetEntry(id, offset, length)); } } //New WCH7 table if (UnknownWCH7 > 0) { WCH7Table = new int[UnknownWCH7]; dbReader.Scrub(wch7TablePos); for (var i = 0; i < UnknownWCH7; i++) { WCH7Table[i] = dbReader.ReadInt32(); } } //Index table if (HasIndexTable) { if (!HasOffsetTable || HasRelationshipData) { dbReader.Scrub(indexTablePos); } m_indexes = new int[RecordCount]; for (var i = 0; i < RecordCount; i++) { m_indexes[i] = dbReader.ReadInt32(); } } //Extract record data for (var i = 0; i < Math.Max(RecordCount, offsetmap.Count); i++) { if (HasOffsetTable) { OffsetEntry map = offsetmap[i]; dbReader.Scrub(map.Offset); var recordbytes = BitConverter.GetBytes(map.Id).Concat(dbReader.ReadBytes(map.Length)); CopyTable.Add(map.Id, recordbytes.ToArray()); } else { dbReader.Scrub(pos + i * RecordSize); byte[] recordbytes = dbReader.ReadBytes((int)RecordSize); if (HasIndexTable) { var newrecordbytes = BitConverter.GetBytes(m_indexes[i]).Concat(recordbytes); CopyTable.Add(m_indexes[i], newrecordbytes.ToArray()); } else { int bytecount = FieldStructure[IdIndex].ByteCount; int offset = FieldStructure[IdIndex].Offset; var id = 0; for (var j = 0; j < bytecount; j++) { id |= recordbytes[offset + j] << (j * 8); } CopyTable.Add(id, recordbytes); } } } return(CopyTable); }
public void ReadOffsets() { try { string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\exec\\offsets.txt"; if (!File.Exists(path)) { Println("No offsets.txt found!"); return; } string s = System.IO.File.ReadAllText(path); string[] entries = s.Split(';'); Offsets = new List<OffsetEntry>(); foreach (string e in entries) { string[] parms = e.Split(','); if (parms.Length == 2) { parms[0] = parms[0].Trim(); parms[1] = parms[1].Trim(); Println("Found MD5 : " + parms[0] + " @ 0x" + parms[1]); OffsetEntry oe = new OffsetEntry(); oe.md5 = parms[0]; oe.offset = (uint)Int32.Parse(parms[1], System.Globalization.NumberStyles.HexNumber); Offsets.Add(oe); } } } catch (Exception ex) { Println(ex.Message); } }
private void ParseHeader(IFile f) { headerStream.Position = 0; var numDataFiles = 0; var header = Header.Read(headerStream); var fileEntries = new FileEntry[header.num_files]; for (var i = 0; i < fileEntries.Length; i++) { fileEntries[i] = FileEntry.Read(headerStream); } var dirEntries = new DirEntry[header.num_dirs]; for (var i = 0; i < dirEntries.Length; i++) { dirEntries[i] = DirEntry.Read(headerStream); } var stringTable = new List <string>(); // # of strings doesn't always match file count var stringTableEnd = header.string_table_offset + header.string_table_size; while (headerStream.Position < stringTableEnd) { stringTable.Add(headerStream.ReadASCIINullTerminated()); } var fileOffsets = new OffsetEntry[header.num_offsets]; for (var i = 0; i < fileOffsets.Length; i++) { fileOffsets[i] = OffsetEntry.Read(headerStream); if (fileOffsets[i].pk_num > numDataFiles) { numDataFiles = fileOffsets[i].pk_num; } } var dirs_flat = new Common.DefaultDirectory[header.num_dirs]; dirs_flat[0] = root; for (var i = 1; i < dirs_flat.Length; i++) { var parent = dirs_flat[dirEntries[i].parent]; parent.AddDir(dirs_flat[i] = new Common.DefaultDirectory(parent, stringTable[(int)dirEntries[i].string_num])); } contentFiles = new Stream[numDataFiles + 1]; var baseName = f.Name.Replace(".hdr.e.2", ""); for (var i = 0; i <= numDataFiles; i++) { contentFiles[i] = f.Parent.GetFile($"{baseName}.pk{i}").GetStream(); } for (var i = 0; i < fileEntries.Length; i++) { var entry = fileEntries[i]; var name = entry.string_num < stringTable.Count ? stringTable[(int)entry.string_num] : "ERROR_FILENAME"; bool encrypted = false; if (name.EndsWith(".e.2")) { encrypted = true; name = name.Remove(name.Length - 4); } dirs_flat[entry.dir_num].AddFile(new Common.OffsetFile( name, dirs_flat[entry.dir_num], contentFiles[fileOffsets[entry.offset_num].pk_num], fileOffsets[entry.offset_num].pk_offset, entry.size, wrapStream: encrypted ? (s => new PowerChordCryptStream(s)) : (Func <Stream, Stream>)null)); } }
private void ParseHeader(IFile f) { headerStream.Position = 0; var numDataFiles = 0; var header = Header.Read(headerStream); var fileEntries = new FileEntry[header.num_files]; for (var i = 0; i < fileEntries.Length; i++) { fileEntries[i] = FileEntry.Read(headerStream); } var dirEntries = new DirEntry[header.num_dirs]; for (var i = 0; i < dirEntries.Length; i++) { dirEntries[i] = DirEntry.Read(headerStream); } var stringTable = new string[header.num_files]; var stringTableEnd = header.string_table_offset + header.string_table_size; var x = 0; while (headerStream.Position < stringTableEnd) { stringTable[x++] = headerStream.ReadASCIINullTerminated(); } var fileOffsets = new OffsetEntry[header.num_offsets]; for (var i = 0; i < fileOffsets.Length; i++) { fileOffsets[i] = OffsetEntry.Read(headerStream); if (fileOffsets[i].pk_num > numDataFiles) { numDataFiles = fileOffsets[i].pk_num; } } var dirs_flat = new Common.DefaultDirectory[header.num_dirs]; dirs_flat[0] = root; for (var i = 1; i < dirs_flat.Length; i++) { var parent = dirs_flat[dirEntries[i].parent]; parent.AddDir(dirs_flat[i] = new Common.DefaultDirectory(parent, stringTable[dirEntries[i].string_num])); } contentFiles = new Stream[numDataFiles + 1]; var baseName = f.Name.Replace(".hdr.e.2", ""); for (var i = 0; i <= numDataFiles; i++) { contentFiles[i] = f.Parent.GetFile($"{baseName}.pk{i}").GetStream(); } for (var i = 0; i < fileEntries.Length; i++) { var entry = fileEntries[i]; var name = entry.string_num < stringTable.Length ? stringTable[entry.string_num] : "ERROR_FILENAME"; dirs_flat[entry.dir_num].AddFile(new Common.OffsetFile( name, dirs_flat[entry.dir_num], contentFiles[fileOffsets[entry.offset_num].pk_num], fileOffsets[entry.offset_num].pk_offset, entry.size)); } }
protected override void OnTarget(Mobile from, object targeted) { if (m_Potion.Deleted || m_Potion.Map == Map.Internal) { return; } IPoint3D p = targeted as IPoint3D; if (p == null) { return; } Map map = from.Map; if (map == null) { return; } SpellHelper.GetSurfaceTop(ref p); from.RevealingAction(); IEntity to; if (p is Mobile) { to = (Mobile)p; } else { to = new DummyEntity(Serial.Zero, new Point3D(p), map); } Effects.SendMovingEffect(from, to, m_Potion.ItemID, 7, 0, false, false, m_Potion.Hue, 0); Effects.SendLocationParticles(EffectItem.Create(new Point3D(p.X, p.Y, p.Z), from.Map, EffectItem.DefaultDuration), 0x376A, 9, 4, 0, 0, 0x13AE, 0); int length = 0; switch (m_Potion.AreaSize) { case 1: length = 3; break; case 2: length = 15; break; case 3: length = 31; break; case 4: length = 55; break; case 5: length = 83; break; case 6: length = 123; break; case 7: length = 163; break; } for (int i = 0; i <= length; ++i) { OffsetEntry oe = Offsets[i] as OffsetEntry; Effects.SendLocationParticles(EffectItem.Create(new Point3D(p.X + oe.X, p.Y + oe.Y, p.Z), from.Map, EffectItem.DefaultDuration), 0x376A, 9, 4, 0, 0, 0x13AE, 0); } var eable = from.Map.GetMobilesInRange(new Point3D(p.X, p.Y, p.Z), m_Potion.AreaSize); foreach (object obj in eable) { if (obj is BaseCreature) { BaseCreature m = obj as BaseCreature; if (m != null && !m.Controlled) { m.Frozen = true; InternalTimer timer = new InternalTimer(new Point3D(p.X, p.Y, p.Z), m_Potion.AreaSize, from); timer.Start(); } } } m_Potion.SetNextDrinkTime(from); m_Potion.Consume(); }