public static void WriteFromWowFile(string wowFileLocation) { using (var file = new WoWFile(wowFileLocation)) { Write(file); } }
public override void Process(WCell.Util.Commands.CmdTrigger<ToolCmdArgs> trigger) { using (var wowFile = new WoWFile(trigger.Text.NextWord())) { GameObjectTypeExtractor.Extract(wowFile); } //base.Process(trigger); }
private static void ExtractTypes(WoWFile wowFile) { List<GameObjectTypeInfo> types = new List<GameObjectTypeInfo>(); wowFile.BaseStream.Position = s_TypeOffset; for (int i = 0; i < s_TypeCount; i++) { types.Add(wowFile.ReadStruct<GameObjectTypeInfo>()); } s_Types = types; }
public static List<UpdateField>[] Extract(WoWFile wowFile) { FindStringOffset(wowFile); FindDataOffset(wowFile); FillList(wowFile); FillStartAndEndValues(); AdjustOffsets(); return s_updateFieldsByGroup; }
public static void Extract(WoWFile wowFile) { ExtractSounds(wowFile); ExtractTypes(wowFile); MakeFinal(wowFile); var file = new StreamWriter("gotypes.txt"); foreach (var go in s_GameObjects) { go.DumpInfo(file); } file.Close(); }
private static void ExtractSounds(WoWFile wowFile) { List<GameObjectSoundEntry> sounds = new List<GameObjectSoundEntry>(); wowFile.BaseStream.Position = s_SoundOffset; for (int i = 0; i < s_SoundCount; i++) { sounds.Add(wowFile.ReadStruct<GameObjectSoundEntry>()); } s_Sounds = sounds; }
public static void Extract(WoWFile wowFile, string outputFileName) { wowFile.BaseStream.Position = FindStartingOffset(wowFile); long endPosition = FindEndingOffset(wowFile); while (wowFile.BaseStream.Position < endPosition) { string name = wowFile.ReadCString(); SpellFailures.Add(name); while ((char)wowFile.PeekByte() != 'S') { wowFile.BaseStream.Position++; } } SpellFailures.Reverse(); DumpToFile(outputFileName); Console.WriteLine("SpellFailure Enum Extracted Successfully"); }
private static void MakeFinal(WoWFile wowFile) { List<GameObject> gameObjects = new List<GameObject>(); for (int i = 0; i < s_Types.Count; i++) { GameObject go = new GameObject(); go.InitFromType(wowFile, s_Types[i], i); /*long startPos = wowFile.BaseStream.Position; // 0x4A9724 wowFile.BaseStream.Position = s_Types[i].NameOffset - 0x401800; // 0x4988C4 go.Name = wowFile.ReadCString(); //wowFile.BaseStream.Position = startPos; go.TypeId = s_Types[i].TypeId; go.SoundCount = s_Types[i].soundCount; go.Sounds = new GameObjectSoundEntry[go.SoundCount];*/ gameObjects.Add(go); } s_GameObjects = gameObjects; }
private static long FindStartingOffset(WoWFile wowFile) { return wowFile.FileString.IndexOf(FirstFailure); }
private static long FindEndingOffset(WoWFile wowFile) { return wowFile.FileString.IndexOf(LastFailure) + LastFailure.Length; }
public static void SetWowDir(string dir) { _wowFile = null; ToolConfig.Instance.wowDir = dir; _extractor = new UpdateFieldExtractor(WoWFile); }
private static GameObjectSoundEntry[] GetSounds(WoWFile wowFile, GameObjectTypeInfo type) { return(null); }
public static List<FieldVariation>[] Comparer(WoWFile oldFile, WoWFile newFile) { return new UpdateFieldComparer(oldFile, newFile).Changes; }
public UpdateFieldExtractor(WoWFile wowFile) { this.wowFile = wowFile; }
public static void Write(WoWFile file) { var fields = UpdateFieldExtractor.Extract(file); var mgr = new UpdateFieldWriter(fields); mgr.Write(); }
public UpdateFieldComparer(WoWFile oldFile, WoWFile newFile) { this.origFields = UpdateFieldExtractor.Extract(oldFile); this.newVersionFields = UpdateFieldExtractor.Extract(newFile); Compare(); }
public static void Dump(WoWFile oldFile, WoWFile newFile, string dir) { using (var writer = new StreamWriter(ToolConfig.OutputDir + "UpdateField Changes from " + oldFile.Version + " to " + newFile.Version + ".txt")) { Dump(oldFile, newFile, writer); } }
private void ReadSounds(WoWFile wowFile, GameObjectTypeInfo type) { if (SoundCount < 1) return; //long start = type.SoundListOffset - 0x401A00; long start = type.SoundIdListOffset - 0x401600;// GameObjectTypeExtractor.s_VirtualOffset; wowFile.BaseStream.Position = start; for (int i = 0; i < SoundCount; i++) { Sounds[i] = new GameObjectSound(); Sounds[i].Id = wowFile.ReadInt32(); long startPos = wowFile.BaseStream.Position; if (Sounds[i].Id > GameObjectTypeExtractor.Sounds.Count) { System.Diagnostics.Debugger.Break(); } wowFile.BaseStream.Position = GameObjectTypeExtractor.Sounds[Sounds[i].Id].NameOffset - GameObjectTypeExtractor.s_VirtualOffset; Sounds[i].Name = wowFile.ReadCString(); wowFile.BaseStream.Position = startPos; } }
public void InitFromType(WoWFile wowFile, GameObjectTypeInfo type, int id) { // 0x4A9724 wowFile.BaseStream.Position = type.NameOffset - GameObjectTypeExtractor.s_VirtualOffset;//0x401800; // 0x4988C4 Name = wowFile.ReadCString(); TypeId = id; SoundCount = type.SoundCount; Sounds = new GameObjectSound[SoundCount]; ReadSounds(wowFile, type); //DumpInfo(RalekProgram.Log); }
public static ExtendedUpdateField[][] Extract(WoWFile file) { return new UpdateFieldExtractor(file).Extract(); }
public static ExtendedUpdateField[][] Extract(WoWFile file) { return(new UpdateFieldExtractor(file).Extract()); }
private static void FindDataOffset(WoWFile wowFile) { byte[] temp = new byte[16] { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }; StringBuilder sb = new StringBuilder(); foreach (byte b in temp) { sb.Append((char)b); } string toFind = sb.ToString(); // Should be at 6896020 for 2.1.3 int index = wowFile.FileString.IndexOf(toFind); if (index > 0) { s_dataStartOffset = index - 4; } else { Console.WriteLine("Data Offset Not Found!"); } }
public static bool DumpEnums(WoWFile file, string outputFile) { return(new UpdateFieldExtractor(file).DumpEnums(outputFile)); }
public static void Dump(WoWFile oldFile, WoWFile newFile, TextWriter output) { var comp = new UpdateFieldComparer(oldFile, newFile); comp.Dump(output); }
private static long FindStartingOffset(WoWFile wowFile) { return(wowFile.FileString.IndexOf(FirstFailure)); }
public static bool DumpEnums(WoWFile wowFile, string outputFileName) { FindStringOffset(wowFile); FindDataOffset(wowFile); FillList(wowFile); FillStartAndEndValues(); // not included in release builds apparently :/ //FillExtraFieldList(wowFile); AdjustOffsets(); WriteToFile(wowFile, outputFileName); Console.WriteLine("UpdateFields Extracted Successfully to: " + outputFileName); //FlagFinder(FieldFlag.Flag_0x10); //FlagFinder(FieldFlag.Flag_0x20); //FieldTypeFinder(FieldType.TwoInt16); return true; }
private static void FindStringOffset(WoWFile wowFile) { // Should be 3853356 for 2.1.3 int index = wowFile.FileString.IndexOf("OBJECT_FIELD_GUID\0"); if (index > 0) { s_stringStartOffset = index; } else { Console.WriteLine("String Offset Not Found!"); } }
private static void WriteToFile(WoWFile wowFile, string outputFile) { uint objectDelta = m_updateFieldList[m_objectEnd - 1].Offset + m_updateFieldList[m_objectEnd - 1].Size; uint unitDelta = m_updateFieldList[m_unitEnd - 1].Offset + m_updateFieldList[m_unitEnd - 1].Size; uint itemDelta = m_updateFieldList[m_itemEnd - 1].Offset + m_updateFieldList[m_unitEnd - 1].Size; using (StreamWriter writer = new StreamWriter(outputFile)) { writer.WriteLine(); writer.WriteLine("// UpdateFields generated for build {0}.{1}", wowFile.Version, wowFile.Build); writer.WriteLine(); writer.WriteLine("namespace WCell.Core"); writer.WriteLine("{"); DumpEnum(m_objectStart, m_objectEnd, 0, "ObjectFields", s_objectExtraFields, writer); DumpEnum(m_unitStart, m_unitEnd, objectDelta, "UnitFields", s_unitExtraFields, writer); DumpEnum(m_playerStart, m_playerEnd, unitDelta, "PlayerFields", s_playerExtraFields, writer); DumpEnum(m_itemStart, m_itemEnd, objectDelta, "ItemFields", s_itemExtraFields, writer); DumpEnum(m_containerStart, m_containerEnd, itemDelta, "ContainerFields", s_containerExtraFields, writer); DumpEnum(m_dynamicObjectStart, m_dynamicObjectEnd, objectDelta, "DynamicObjectFields", s_dynamicObjectExtraFields, writer); DumpEnum(m_gameObjectStart, m_gameObjectEnd, objectDelta, "GameObjectFields", s_gameObjectExtraFields, writer); DumpEnum(m_corpseStart, m_corpseEnd, objectDelta, "CorpseFields", s_corpseExtraFields, writer); writer.WriteLine("}"); } }
public static void SetWowDir(string dir) { _wowFile = new WoWFile(dir); _extractor = new UpdateFieldExtractor(_wowFile); }
/// <summary> /// Creates necessary information for the Update-PacketParser /// </summary> public static void CreatePacketParserInfo(string wowFile, string outputFile) { WoWFile file = new WoWFile(wowFile); var fields = UpdateFieldExtractor.Extract(file); using (var writer = new StreamWriter(outputFile)) { for (UpdateFieldGroup g = UpdateFieldGroup.Object; g < UpdateFieldGroup.Count; g++) { foreach (var field in s_updateFieldsByGroup[(int)g]) { var size = field.Size; if (size > 1) { writer.WriteLine("SetType({0}, {1}, {2});", field.FullTypeName, field.FullName, field.Size); } else { writer.WriteLine("FieldTypes[{0}] = {1};", field.FullName, field.FullTypeName); } } } } }
public static bool DumpEnums(WoWFile file, string outputFile) { return new UpdateFieldExtractor(file).DumpEnums(outputFile); }
private static GameObjectSoundEntry[] GetSounds(WoWFile wowFile, GameObjectTypeInfo type) { return null; }
public static List <FieldVariation>[] Comparer(WoWFile oldFile, WoWFile newFile) { return(new UpdateFieldComparer(oldFile, newFile).Changes); }