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