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 | ||
|  | 
 | ||
|  |     } | ||
|  | } |