示例#1
0
        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);
        }
示例#2
0
        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");
            }
        }
示例#3
0
 protected Patch(PatcherData patcherData)
 {
     this.patcherData = patcherData;
 }