using System; using System.Collections; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Logging; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.Scripting; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace RepoOptimizationMod; [BepInPlugin("com.yourname.repo.optimization", "RepoOptimizer Ultra", "1.0.0")] public class Plugin : BaseUnityPlugin { public static ManualLogSource Log; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)"!!! [RepoOptimizer Ultra] Мега-сборка успешно запущена! !!!"); GarbageCollector.GCMode = (Mode)1; SceneManager.sceneLoaded += OnSceneLoaded; ((MonoBehaviour)this).StartCoroutine(CullPhysicsAndGraphicsRoutine()); } private void Start() { ApplyGlobalSettings(); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { ApplyGlobalSettings(); OptimizeCamera(); ExecuteDeepClean(); ((MonoBehaviour)this).StartCoroutine(DrawInterfaceWithDelayRoutine()); } private void ApplyGlobalSettings() { Application.targetFrameRate = 144; QualitySettings.vSyncCount = 0; QualitySettings.antiAliasing = 0; QualitySettings.anisotropicFiltering = (AnisotropicFiltering)0; QualitySettings.pixelLightCount = 1; QualitySettings.shadowCascades = 1; QualitySettings.shadowDistance = 15f; QualitySettings.globalTextureMipmapLimit = 0; QualitySettings.particleRaycastBudget = 4; Time.fixedDeltaTime = 0.033f; } private void OptimizeCamera() { Camera main = Camera.main; if ((Object)(object)main != (Object)null) { main.farClipPlane = 45f; } } private IEnumerator DrawInterfaceWithDelayRoutine() { yield return (object)new WaitForSeconds(2f); try { Assembly assembly = Assembly.GetExecutingAssembly(); Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly2 in assemblies) { if (assembly2.FullName.Contains("Assembly-CSharp")) { assembly = assembly2; break; } } Type type = assembly.GetType("MenuAPI"); if (type != null) { MethodInfo method = type.GetMethod("CreateREPOLabel", new Type[3] { typeof(string), typeof(Transform), typeof(Vector2) }); if (method != null) { method.Invoke(null, new object[3] { "REPO OPTIMIZER: ACTIVE", null, (object)new Vector2(20f, 20f) }); Log.LogInfo((object)"[RepoOptimizer] Официальная надпись успешно создана через MenuAPI игры!"); } } } catch (Exception ex) { Log.LogWarning((object)("Не удалось вызвать MenuAPI (возможно, сцена еще не готова): " + ex.Message)); } } private IEnumerator CullPhysicsAndGraphicsRoutine() { yield return (object)new WaitForSeconds(5f); while (true) { Camera mainCam = Camera.main; if ((Object)(object)mainCam != (Object)null) { Vector3 position = ((Component)mainCam).transform.position; Rigidbody[] array = Object.FindObjectsOfType(); Rigidbody[] array2 = array; foreach (Rigidbody val in array2) { if (!((Object)(object)val == (Object)null) && !val.isKinematic) { float num = Vector3.Distance(position, ((Component)val).transform.position); int num2; if (num > 35f) { Vector3 velocity = val.velocity; num2 = ((!(((Vector3)(ref velocity)).sqrMagnitude < 0.1f)) ? 1 : 0); } else { num2 = 1; } if (num2 == 0) { val.Sleep(); } } } MeshRenderer[] array3 = Object.FindObjectsOfType(); MeshRenderer[] array4 = array3; foreach (MeshRenderer val2 in array4) { if ((Object)(object)val2 == (Object)null) { continue; } float num = Vector3.Distance(position, ((Component)val2).transform.position); if (num > 25f) { if ((int)((Renderer)val2).shadowCastingMode != 0) { ((Renderer)val2).shadowCastingMode = (ShadowCastingMode)0; ((Renderer)val2).receiveShadows = false; } } else if ((int)((Renderer)val2).shadowCastingMode == 0) { ((Renderer)val2).shadowCastingMode = (ShadowCastingMode)1; ((Renderer)val2).receiveShadows = true; } } } yield return (object)new WaitForSeconds(3f); } } private void ExecuteDeepClean() { try { Resources.UnloadUnusedAssets(); GC.Collect(); } catch (Exception) { } } private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; } }