少年修仙传客户端基础资源
hch
2023-11-22 83177326017423a050cdc6b9f9a36fcb9a1aebcd
0312 最新版本ifix
5个文件已修改
110 ■■■■ 已修改文件
Assets/IFix/Editor/Configure.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/IFix/Editor/ILFixEditor.cs 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Plugins/IFix.Core.dll 补丁 | 查看 | 原始文档 | blame | 历史
IFixToolKit/IFix.exe 补丁 | 查看 | 原始文档 | blame | 历史
IFixToolKit/IFix.exe.mdb 补丁 | 查看 | 原始文档 | blame | 历史
Assets/IFix/Editor/Configure.cs
@@ -82,7 +82,7 @@
                        select type;
            var tagsMap = tags.ToDictionary(t => t, t => new List<KeyValuePair<object, int>>());
            foreach (var type in types)
            foreach(var type in types)
            {
                foreach (var prop in type.GetProperties(BindingFlags.Static | BindingFlags.Public
                    | BindingFlags.NonPublic | BindingFlags.DeclaredOnly))
@@ -126,7 +126,7 @@
                foreach (var method in type.GetMethods(BindingFlags.Static | BindingFlags.Public
                    | BindingFlags.NonPublic | BindingFlags.DeclaredOnly))
                {
                    if (method.IsDefined(typeof(IFix.FilterAttribute), false))
                    if(method.IsDefined(typeof(IFix.FilterAttribute), false))
                    {
                        filters.Add(method);
                    }
@@ -147,6 +147,33 @@
                    where method.IsDefined(tagType, false)
                    select method);
        }
        public static IEnumerable<FieldInfo> GetTagFields(Type tagType, string searchAssembly)
        {
            return (from assembly in AppDomain.CurrentDomain.GetAssemblies()
                    where !(assembly.ManifestModule is System.Reflection.Emit.ModuleBuilder)
                        && (assembly.GetName().Name == searchAssembly)
                    where assembly.CodeBase.IndexOf("ScriptAssemblies") != -1
                    from type in assembly.GetTypes()
                    from field in type.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public
                        | BindingFlags.NonPublic)
                    where field.IsDefined(tagType, false)
                    select field);
        }
        public static IEnumerable<PropertyInfo> GetTagProperties(Type tagType, string searchAssembly)
        {
            return (from assembly in AppDomain.CurrentDomain.GetAssemblies()
                    where !(assembly.ManifestModule is System.Reflection.Emit.ModuleBuilder)
                        && (assembly.GetName().Name == searchAssembly)
                    where assembly.CodeBase.IndexOf("ScriptAssemblies") != -1
                    from type in assembly.GetTypes()
                    from property in type.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public
                        | BindingFlags.NonPublic)
                    where property.IsDefined(tagType, false)
                    select property);
        }
        public static IEnumerable<Type> GetTagClasses(Type tagType, string searchAssembly)
        {
            return (from assembly in AppDomain.CurrentDomain.GetAssemblies()
@@ -157,6 +184,7 @@
                    where type.IsDefined(tagType, false)
                    select type
                    );
        }
    }
}
Assets/IFix/Editor/ILFixEditor.cs
@@ -25,7 +25,7 @@
    public class VersionSelector : EditorWindow
    {
        public string buttonText = "Patch";
        public string[] options = new string[] { };
        public string[] options = new string[] {};
        public int index = 0;
        public Action<int> callback = null;
@@ -68,7 +68,7 @@
        //system("mono ifix.exe [args]")
        public static void CallIFix(List<string> args)
        {
#if UNITY_EDITOR_OSX
#if UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX
            var mono_path = Path.Combine(Path.GetDirectoryName(typeof(UnityEngine.Debug).Module.FullyQualifiedName),
                "../MonoBleedingEdge/bin/mono");
            if(!File.Exists(mono_path))
@@ -110,7 +110,7 @@
            //UnityEngine.Debug.Log(hotfix_injection.StartInfo.Arguments);
            StringBuilder exceptionInfo = null;
            while (!hotfix_injection.StandardOutput.EndOfStream)
            while(!hotfix_injection.StandardOutput.EndOfStream)
            {
                string line = hotfix_injection.StandardOutput.ReadLine();
                if (exceptionInfo != null)
@@ -157,11 +157,14 @@
            {
                InjectAllAssemblys();
            }
            catch (Exception e)
            catch(Exception e)
            {
                UnityEngine.Debug.LogError(e);
            }
            EditorUtility.ClearProgressBar();
#if UNITY_2019_3_OR_NEWER
            EditorUtility.RequestScriptReload();
#endif
        }
        public static bool AutoInject = true; //可以在外部禁用掉自动注入
@@ -259,11 +262,11 @@
                        writer.Write(cfgItem.Value);
                        if (filters.Count > 0 && kv.Key == "IFix.IFixAttribute")
                        {
                            foreach (var method in cfgItem.Key.GetMethods(BindingFlags.Instance
                                | BindingFlags.Static | BindingFlags.Public
                            foreach(var method in cfgItem.Key.GetMethods(BindingFlags.Instance
                                | BindingFlags.Static | BindingFlags.Public
                                | BindingFlags.NonPublic | BindingFlags.DeclaredOnly))
                            {
                                foreach (var filter in filters)
                                foreach(var filter in filters)
                                {
                                    if ((bool)filter.Invoke(null, new object[]
                                    {
@@ -292,7 +295,7 @@
                foreach (var path in
                    (from asm in AppDomain.CurrentDomain.GetAssemblies()
                     select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct())
                        select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct())
                {
                    try
                    {
@@ -324,7 +327,7 @@
            {
                InjectAssembly(assembly);
            }
            //doBackup(DateTime.Now.ToString(TIMESTAMP_FORMAT));
            AssetDatabase.Refresh();
@@ -491,7 +494,7 @@
            foreach (var file in Directory.GetFiles(dir))
            {
                //排除调Editor下的东西
                if (file.IndexOf(Path.DirectorySeparatorChar + "Editor" + Path.DirectorySeparatorChar) > 0)
                if (file.IndexOf(Path.DirectorySeparatorChar + "Editor" + Path.DirectorySeparatorChar) > 0 )
                {
                    continue;
                }
@@ -508,7 +511,7 @@
                }
            }
            foreach (var subDir in Directory.GetDirectories(dir))
            foreach(var subDir in Directory.GetDirectories(dir))
            {
                appendDirectory(src, subDir);
            }
@@ -564,8 +567,7 @@
#if (UNITY_EDITOR || XLUA_GENERAL) && !NET_STANDARD_2_0
                    }
#endif
                }
                catch { }
                } catch { }
            }
            cmd.AppendLine(compileTemplate);
@@ -585,7 +587,7 @@
        //TODO: 目前的做法挺繁琐的,需要用户去获取Unity的编译命令文件,更好的做法应该是直接
        public static void Compile(string compileArgFile)
        {
#if UNITY_EDITOR_OSX
#if UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX
            var monoPath = Path.Combine(Path.GetDirectoryName(typeof(UnityEngine.Debug).Module.FullyQualifiedName),
                "../MonoBleedingEdge/bin/mono");
            var mcsPath = Path.Combine(Path.GetDirectoryName(typeof(UnityEngine.Debug).Module.FullyQualifiedName),
@@ -630,7 +632,7 @@
            {
                UnityEngine.Debug.Log(compileProcess.StandardOutput.ReadLine());
            }
            compileProcess.WaitForExit();
        }
@@ -648,7 +650,7 @@
                scriptCompilationSettings.group = BuildTargetGroup.Android;
                scriptCompilationSettings.target = BuildTarget.Android;
            }
            else if (platform == Platform.ios)
            else if(platform == Platform.ios)
            {
                scriptCompilationSettings.group = BuildTargetGroup.iOS;
                scriptCompilationSettings.target = BuildTarget.iOS;
@@ -709,6 +711,38 @@
            }
        }
        static void writeFields(BinaryWriter writer, List<FieldInfo> fields)
        {
            var fieldGroups = fields.GroupBy(m => m.DeclaringType).ToList();
            writer.Write(fieldGroups.Count);
            foreach (var fieldGroup in fieldGroups)
            {
                writer.Write(GetCecilTypeName(fieldGroup.Key));
                writer.Write(fieldGroup.Count());
                foreach (var field in fieldGroup)
                {
                    writer.Write(field.Name);
                    writer.Write(GetCecilTypeName(field.FieldType));
                }
            }
        }
        static void writeProperties(BinaryWriter writer, List<PropertyInfo> properties)
        {
            var PropertyGroups = properties.GroupBy(m => m.DeclaringType).ToList();
            writer.Write(PropertyGroups.Count);
            foreach (var PropertyGroup in PropertyGroups)
            {
                writer.Write(GetCecilTypeName(PropertyGroup.Key));
                writer.Write(PropertyGroup.Count());
                foreach (var Property in PropertyGroup)
                {
                    writer.Write(Property.Name);
                    writer.Write(GetCecilTypeName(Property.PropertyType));
                }
            }
        }
        static void writeClasses(BinaryWriter writer, List<Type> classes)
        {
            writer.Write(classes.Count);
@@ -762,7 +796,7 @@
        /// <param name="corePath">IFix.Core.dll所在路径</param>
        /// <param name="patchPath">生成的patch的保存路径</param>
        public static void GenPatch(string assembly, string assemblyCSharpPath
            = "./Library/ScriptAssemblies/Assembly-CSharp.dll",
            = "./Library/ScriptAssemblies/Assembly-CSharp.dll",
            string corePath = "./Assets/Plugins/IFix.Core.dll", string patchPath = ResourcesPath.PATCH_EDITOR)
        {
            var patchMethods = Configure.GetTagMethods(typeof(PatchAttribute), assembly).ToList();
@@ -778,6 +812,8 @@
            }
            var newMethods = Configure.GetTagMethods(typeof(InterpretAttribute), assembly).ToList();
            var newFields = Configure.GetTagFields(typeof(InterpretAttribute), assembly).ToList();
            var newProperties = Configure.GetTagProperties(typeof(InterpretAttribute), assembly).ToList();
            var newClasses = Configure.GetTagClasses(typeof(InterpretAttribute), assembly).ToList();
            genericMethod = newMethods.FirstOrDefault(m => hasGenericParameter(m));
            if (genericMethod != null)
@@ -792,6 +828,8 @@
            {
                writeMethods(writer, patchMethods);
                writeMethods(writer, newMethods);
                writeFields(writer, newFields);
                writeProperties(writer, newProperties);
                writeClasses(writer, newClasses);
            }
@@ -800,7 +838,7 @@
            foreach (var path in
                (from asm in AppDomain.CurrentDomain.GetAssemblies()
                 select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct())
                    select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct())
            {
                try
                {
@@ -849,7 +887,7 @@
            {
                GenPlatformPatch(Platform.android, ResourcesPath.PATCH_ANDROID);
            }
            catch (Exception e)
            catch(Exception e)
            {
                UnityEngine.Debug.LogError(e);
            }
@@ -864,7 +902,7 @@
            {
                GenPlatformPatch(Platform.ios, ResourcesPath.PATCH_IOS);
            }
            catch (Exception e)
            catch(Exception e)
            {
                UnityEngine.Debug.LogError(e);
            }
Assets/Plugins/IFix.Core.dll
Binary files differ
IFixToolKit/IFix.exe
Binary files differ
IFixToolKit/IFix.exe.mdb
Binary files differ