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