173 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C#
		
	
	
		
		
			
		
	
	
			173 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C#
		
	
	
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.IO;
							 | 
						||
| 
								 | 
							
								using System.Linq;
							 | 
						||
| 
								 | 
							
								using Guru.Editor;
							 | 
						||
| 
								 | 
							
								using NUnit.Framework;
							 | 
						||
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Guru.Editor.Max
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public class ApplovinMod: GuruModifier
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        private const string IntergrationManagerPath = "MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs";
							 | 
						||
| 
								 | 
							
								        private const string MenuItemsPath =  "MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs";
							 | 
						||
| 
								 | 
							
								        private const string SettingsPath =   "MaxSdk/Resources/AppLovinSettings.asset";
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        private static readonly string K_IsPluginOutside = "public static bool IsPluginOutsideAssetsDirectory";
							 | 
						||
| 
								 | 
							
								        private const string EXT_BACKUP = ".backup";
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public static void Apply()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            ApplovinMod mod = new ApplovinMod();
							 | 
						||
| 
								 | 
							
								            // 替换代码内的组件路径
							 | 
						||
| 
								 | 
							
								            mod.FixIntegrationManager();
							 | 
						||
| 
								 | 
							
								            // 隐藏编辑器菜单
							 | 
						||
| 
								 | 
							
								            mod.DoBackup();
							 | 
						||
| 
								 | 
							
								            // 删除其他的 AppLovinSettings 组件
							 | 
						||
| 
								 | 
							
								            mod.CheckAndCleanOtherSettings();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #region IntegrationManager 注入
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								         /// <summary>
							 | 
						||
| 
								 | 
							
								        /// 修复脚本
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <param name="path"></param>
							 | 
						||
| 
								 | 
							
								        [Test]
							 | 
						||
| 
								 | 
							
								        public void FixIntegrationManager()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var path = GetFullPath(IntergrationManagerPath);
							 | 
						||
| 
								 | 
							
								            if (!File.Exists(path))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                Debug.LogError($"File not found: {path}");
							 | 
						||
| 
								 | 
							
								                return;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // --------- Scan All the code lines -------------
							 | 
						||
| 
								 | 
							
								            List<string> lines = File.ReadLines(path).ToList();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            string line = "";
							 | 
						||
| 
								 | 
							
								            int i = 0;
							 | 
						||
| 
								 | 
							
								            int incNum = 0;
							 | 
						||
| 
								 | 
							
								            int count = lines.Count;
							 | 
						||
| 
								 | 
							
								            while (i < count)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                line = lines[i];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if (line.TrimStart(new char[] { '\t', ' ' }).Contains(K_IsPluginOutside))
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    incNum = FixupIsPluginOutside(lines, i);
							 | 
						||
| 
								 | 
							
								                    i += incNum;
							 | 
						||
| 
								 | 
							
								                    count = lines.Count;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                i++;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            File.WriteAllLines(path, lines.ToArray());
							 | 
						||
| 
								 | 
							
								            Debug.Log($"[GuruMax] <color=#88ff00>--- code fixed: {path} ---</color>");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        private const string MK_PluginOutside_START = "//--- INJECT PluginOutside START ---";
							 | 
						||
| 
								 | 
							
								        private const string MK_PluginOutside_OVER = "//--- INJECT PluginOutside OVER ---";
							 | 
						||
| 
								 | 
							
								        private int FixupIsPluginOutside(List<string> lines, int startIndex)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            int inc = 0;
							 | 
						||
| 
								 | 
							
								            string line = "";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            line = lines[startIndex - 1];
							 | 
						||
| 
								 | 
							
								            if (line.Contains(MK_PluginOutside_START)) return 0; // 已经修复过了
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            line = lines[startIndex + 1].Trim();
							 | 
						||
| 
								 | 
							
								            if (line.Contains("{"))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                lines[startIndex + 1] = $"//{lines[startIndex + 1]}";
							 | 
						||
| 
								 | 
							
								                lines[startIndex + 2] = $"//{lines[startIndex + 2]}";
							 | 
						||
| 
								 | 
							
								                lines[startIndex + 3] = $"//{lines[startIndex + 3]}";
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            lines.Insert(startIndex, $"{MK_PluginOutside_START}");
							 | 
						||
| 
								 | 
							
								            lines.Insert(startIndex + 2, "\t\t{ get => !(PluginParentDirectory.StartsWith(\"Assets\") || PluginParentDirectory.StartsWith(\"Packages\")); }");
							 | 
						||
| 
								 | 
							
								            lines.Insert(startIndex + 3, $"{MK_PluginOutside_OVER}");
							 | 
						||
| 
								 | 
							
								            inc += 3;
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            return inc;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #endregion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #region MenuItems 隐藏
							 | 
						||
| 
								 | 
							
								        [Test]
							 | 
						||
| 
								 | 
							
								        public static bool MenuItemsHide()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return new ApplovinMod().DoBackup();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        [Test]
							 | 
						||
| 
								 | 
							
								        public static bool MenuItemsRecover()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return new ApplovinMod().DoRecover();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        private bool DoBackup()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var path = GetFullPath(MenuItemsPath);
							 | 
						||
| 
								 | 
							
								            string backup = $"{path}.backup";
							 | 
						||
| 
								 | 
							
								            if (File.Exists(path) && !path.EndsWith(EXT_BACKUP))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                File.Move(path, backup);
							 | 
						||
| 
								 | 
							
								                Debug.Log($"[GuruMax]<color=#88ff00> --- Max Menu backuped </color>");
							 | 
						||
| 
								 | 
							
								                return true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								       
							 | 
						||
| 
								 | 
							
								            Debug.Log($"<color=orange>File not found or different name: {path}</color>");
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        private bool DoRecover()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var path = GetFullPath(MenuItemsPath);
							 | 
						||
| 
								 | 
							
								            string backup = $"{path}{EXT_BACKUP}";
							 | 
						||
| 
								 | 
							
								            if (path.EndsWith(EXT_BACKUP))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                backup = path;
							 | 
						||
| 
								 | 
							
								                path = backup.Replace(EXT_BACKUP, "");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (File.Exists(backup))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                File.Move(backup, path);
							 | 
						||
| 
								 | 
							
								                Debug.Log($"[GuruMax] --- Max Menu recovered");
							 | 
						||
| 
								 | 
							
								                return true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            Debug.LogError($"File not found: {path}");
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #endregion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #region AppLovinSettings
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        //销毁其他路径的 AppLovinSettings
							 | 
						||
| 
								 | 
							
								        [Test]
							 | 
						||
| 
								 | 
							
								        public void CheckAndCleanOtherSettings()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var path = GetFullPath(SettingsPath);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (this.FileExists(path))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                this.DeleteFile(path);
							 | 
						||
| 
								 | 
							
								                Debug.Log($"[GuruMax]<color=#88ff00> --- AppLovinSettings has been removed: {path} </color>");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        #endregion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |