public void LoadData() { patcherData = new PatcherData(); var irTargetData = new PatcherTargetData(); irTargetData.Path = Path.Combine(Directory.GetCurrentDirectory(), "IR.exe"); irTargetData.Assembly = Assembly.Load(Resources.StreamToBytes(File.Open(irTargetData.Path, FileMode.Open))); using (var irAssemblyStream = File.Open(irTargetData.Path, FileMode.Open)) irTargetData.AssemblyDef = AssemblyDefinition.ReadAssembly(irAssemblyStream); irTargetData.Module = irTargetData.AssemblyDef.MainModule; patcherData.TargetData.Add(PatcherTarget.InterstellarRift, irTargetData); var plTargetData = new PatcherTargetData(); plTargetData.Path = Path.Combine(Directory.GetCurrentDirectory(), "PluginLoader.dll"); plTargetData.Assembly = Assembly.Load(Resources.StreamToBytes(Resources.LoadFileFromResources("PluginLoader.dll"))); plTargetData.AssemblyDef = AssemblyDefinition.ReadAssembly(Resources.LoadFileFromResources("PluginLoader.dll")); plTargetData.Module = plTargetData.AssemblyDef.MainModule; patcherData.TargetData.Add(PatcherTarget.PluginLoader, plTargetData); }
private void callPatches(PatcherData patcherData) { var irAssemblyReferences = patcherData.TargetData[PatcherTarget.InterstellarRift].Module.AssemblyReferences; if (irAssemblyReferences.Count(assembly => assembly.FullName.StartsWith(patcherData.TargetData[PatcherTarget.InterstellarRift].AssemblyDef.Name.Name)) > 0) { Logger.InfoLine($"Interstellar Rift seem to be already patched"); return; } try { Logger.Info("Interstellar Rift version "); Logger.SuccessLine(GetIRVersion()); } catch (Exception) { Logger.ErrorLine("could not be detected"); } try { Logger.Info("PluginLoader version "); Logger.SuccessLine(GetPLVersion()); } catch (Exception) { Logger.ErrorLine("could not be detected"); } var patches = new List <Type>(); patches.Add(typeof(AccessModifierPatch)); patches.Add(typeof(ProgramPatch)); //patches.Add(typeof(AgosGuiPatch)); patches.Add(typeof(ChatControllerPatch)); //patches.Add(typeof(ClientDeviceFactoryPatch)); //patches.Add(typeof(DeviceFactoryPatch)); //patches.Add(typeof(GameClientPatch)); //patches.Add(typeof(GameEditorPatch)); patches.Add(typeof(GameMenuPatch)); patches.Add(typeof(GameServerPatch)); try { patches.ForEach(delegate(Type patch) { Logger.Info($"Applying {patch.Name} ..."); Activator.CreateInstance(patch, patcherData); Logger.SuccessLine("done"); }); var irData = patcherData.TargetData[PatcherTarget.InterstellarRift]; var plData = patcherData.TargetData[PatcherTarget.PluginLoader]; saveAssembly(irData.AssemblyDef, irData.Path); saveAssembly(plData.AssemblyDef, plData.Path); saveResource("IronPython.dll", "IronPython.dll"); saveResource("IronPython.Modules.dll", "IronPython.Modules.dll"); saveResource("Microsoft.Dynamic.dll", "Microsoft.Dynamic.dll"); saveResource("Microsoft.Scripting.dll", "Microsoft.Scripting.dll"); extractResource("Lib.zip", Directory.GetCurrentDirectory()); } catch (Exception ex) { Logger.ErrorLine("error"); Logger.ErrorLine(ex.Message); saveExceptionInfo("patcher", ex); } finally { Logger.InfoLine("Finished patching"); } }
protected Patch(PatcherData patcherData) { this.patcherData = patcherData; }