diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc284f15..48fe9667 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.1.0] - 2026-04-18
+### Added
+- NuGet packaging baseline for `gregCore` with symbol package output (`.snupkg`).
+- Local + GitHub Packages feed configuration and package source mapping.
+- Downstream `build/gregCore.props` integration for reference-only package usage.
+
## [v1.0.0.7] - 2026-04-12
### Added
- **gregUI**: Complete UI manipulation layer for UGUI (`src/UI/`).
diff --git a/Releases/Acornima.dll b/Releases/Acornima.dll
deleted file mode 100644
index 25dcd91e..00000000
Binary files a/Releases/Acornima.dll and /dev/null differ
diff --git a/Releases/Jint.dll b/Releases/Jint.dll
deleted file mode 100644
index 692ba5c6..00000000
Binary files a/Releases/Jint.dll and /dev/null differ
diff --git a/Releases/Newtonsoft.Json.dll b/Releases/Newtonsoft.Json.dll
deleted file mode 100644
index df5169b9..00000000
Binary files a/Releases/Newtonsoft.Json.dll and /dev/null differ
diff --git a/Releases/gregCore-1.0.0.30-pre.dll b/Releases/gregCore-1.0.0.30-pre.dll
deleted file mode 100644
index 580d6eb5..00000000
Binary files a/Releases/gregCore-1.0.0.30-pre.dll and /dev/null differ
diff --git a/Releases/gregCore.dll b/Releases/gregCore.dll
deleted file mode 100644
index 580d6eb5..00000000
Binary files a/Releases/gregCore.dll and /dev/null differ
diff --git a/Templates/CustomContentPack/Content/Servers/sample-server.json b/Templates/CustomContentPack/Content/Servers/sample-server.json
deleted file mode 100644
index 837848fb..00000000
--- a/Templates/CustomContentPack/Content/Servers/sample-server.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "id": "template.SampleServer",
- "name": "Sample Template Server",
- "rackUnits": 2,
- "powerUsageWatts": 450,
- "maxIOPS": 5000,
- "price": 1200.0,
- "tags": ["Standard", "GeneralPurpose"]
-}
-
diff --git a/Templates/CustomContentPack/pack-manifest.json b/Templates/CustomContentPack/pack-manifest.json
deleted file mode 100644
index 7b25b516..00000000
--- a/Templates/CustomContentPack/pack-manifest.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "id": "author.PackName",
- "name": "Custom Content Pack Template",
- "version": "1.0.0",
- "author": "YourName",
- "description": "Template for creating custom content packs for Data Center.",
- "dependencies": ["greg.Core"]
-}
-
diff --git a/bin/Release/net6.0/gregCore.dll b/bin/Release/net6.0/gregCore.dll
index 580d6eb5..177b1d63 100644
Binary files a/bin/Release/net6.0/gregCore.dll and b/bin/Release/net6.0/gregCore.dll differ
diff --git a/build/gregCore.props b/build/gregCore.props
new file mode 100644
index 00000000..e1f28c0d
--- /dev/null
+++ b/build/gregCore.props
@@ -0,0 +1,14 @@
+
+
+
+ C:\Program Files (x86)\Steam\steamapps\common\Data Center\MelonLoader
+
+
+
+
+
+ runtime
+ none
+
+
+
\ No newline at end of file
diff --git a/build/gregCore.targets b/build/gregCore.targets
new file mode 100644
index 00000000..c1df2220
--- /dev/null
+++ b/build/gregCore.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/ci-stubs/create-stubs.sh b/ci-stubs/create-stubs.sh
new file mode 100644
index 00000000..2a4f7c02
--- /dev/null
+++ b/ci-stubs/create-stubs.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+# Erzeugt leere Stub-DLLs für CI-Build ohne echtes MelonLoader
+# Diese enthalten nur die nötigen Type-Definitionen
+
+dotnet new classlib -n MelonLoaderStub -f net6.0
diff --git a/game_assembly_analysis.md b/game_assembly_analysis.md
new file mode 100644
index 00000000..b3c84242
--- /dev/null
+++ b/game_assembly_analysis.md
@@ -0,0 +1,125 @@
+# 1) Globale Architektur & Singletons
+
+Analysebasis: `gregReferences/Assembly-CSharp/Il2Cpp/*.cs` (IL2CPP-Wrapper). Relevante Komponente liegt in der Schicht **Unity Spiel / IL2CPP Assembly** (nicht GregCore/Core-SDK selbst).
+
+- `Il2Cpp.MainGameManager`
+ - Singleton: `public static unsafe MainGameManager instance`
+ - Verantwortlich für Session-/Spielzustand, Kundenfluss, Autosave-Settings, zentrale Objekt-Referenzen.
+ - Wichtige Methoden: `public unsafe void SetAutoSaveInterval(float minutes)`, `public unsafe void SetAutoSaveEnabled(bool enabled)`, `public unsafe int GetFreeVlanId()`.
+- `Il2Cpp.NetworkMap`
+ - Singleton: `public static unsafe NetworkMap instance`
+ - Zentrale Topologie-/Routing-Instanz für Geräte, Kabel, Verbindungen.
+- `Il2Cpp.PlayerManager`
+ - Singleton: `public static unsafe PlayerManager instance`
+ - Input-/Movement-Gating und Interaktionszustand (Objekt in Hand, Interaktionsflags).
+- `Il2Cpp.TimeController`
+ - Singleton-ähnliche globale Zeitinstanz mit statischem Callback `public static unsafe TimeController.OnEndOfTheDay onEndOfTheDayCallback`.
+- `Il2Cpp.SaveData`
+ - Globaler Save-State: `public static unsafe SaveData instance` + `public static unsafe SaveData _current`.
+- `Il2Cpp.SaveSystem`
+ - Statischer Save/Load-Orchestrator (kein klassischer Singleton, aber globaler Entry-Point über statische API).
+
+# 2) Spieler & Entities (Data Structures)
+
+Hauptobjekte mit C-ABI-relevanten Datentypen (für stabile Bridge-Übergabe bevorzugt: primitive numerische Typen + explizite Structs).
+
+- `Il2Cpp.Player`
+ - Ökonomie-/Progress-Felder: `money` (`float`), `xp` (`float`), `reputation` (`float`), `previousCoins` (`float`).
+ - Choke-Methoden: `public unsafe bool UpdateCoin(float _coinChhangeAmount, bool withoutSound = false)`, `public unsafe bool UpdateXP(float amount)`, `public unsafe void UpdateReputation(float amount)`.
+- `Il2Cpp.PlayerData` (`[Serializable]`)
+ - Felder: `List activeObjectives`, `float coins`, `float xp`, `float reputation`, `Il2CppStructArray position`.
+ - Für C-ABI gut geeignet: `float`, `int`; bei `position` sauber als 3er-Array (`x,y,z`) flatten.
+- `Il2Cpp.SaveData` (`[Serializable]`)
+ - Persistenz-Aggregat mit `playerData`, `networkData`, `loadedScenes`, `technicianData`, `repairJobQueue`, `commandCenterLevel` u. a.
+ - Mappings enthalten viele primitive Felder (`int`, `bool`, `float`, `string`) plus Listen/Arrays.
+- `Il2Cpp.Item` (`ScriptableObject`)
+ - Preis-/Wertfelder: `int price`, `float weight`, `float deprecation`, `bool isStackable`, `int unlockedFromXP`.
+- `Il2Cpp.ShopItemSO` (`ScriptableObject`)
+ - Shop-relevante Primitive: `int xpToUnlock`, `int price`, `int itemID`, `float eol`, `bool isCustomColor`.
+- ECS-nahe explizite Layout-Typen (`[StructLayout(LayoutKind.Explicit)]`)
+ - `Il2Cpp.CableIDComponent`: `int CableId` (Offset 0), `int SwitchId` (Offset 4).
+ - `Il2Cpp.PacketComponent`: enthält `float3`, `float4`, `int cableId`, `int customerId`, `float moveSpeed` etc.
+ - Diese Typen sind für Low-Level-Hooks/Interop besonders wertvoll, da Feldlayout explizit ist.
+
+# 3) Native Event-Systeme
+
+Primär Delegate-basierte C#-Events/Callbacks in der **Unity Spiel / IL2CPP Assembly**-Schicht:
+
+- Save-/Load-Callbacks (`Il2Cpp.SaveSystem`)
+ - `public static unsafe SaveSystem.OnSavingData onSavingData`
+ - `public static unsafe SaveSystem.OnLoadingData onLoadingData`
+ - `public static unsafe SaveSystem.OnLoadingDataLater onLoadingDataLater`
+ - Delegates sind `MulticastDelegate`-Typen mit `Invoke()`.
+- Szenen-/Load-Callback (`Il2Cpp.LoadingScreen`)
+ - `public static unsafe LoadingScreen.GameIsLoaded onGameIsLoadedCallback`
+ - `LoadingScreen.GameIsLoaded` ist `MulticastDelegate` mit `Invoke()`.
+- Tageszyklus-Callback (`Il2Cpp.TimeController`)
+ - `public static unsafe TimeController.OnEndOfTheDay onEndOfTheDayCallback`
+ - Delegate `OnEndOfTheDay.Invoke()` als stabiler Lifecycle-Hook.
+- Pause-Menü-Callbacks (`Il2Cpp.PauseMenu`)
+ - `public static unsafe PauseMenu.OnPauseMenuOpen onPauseMenuOpenCallback`
+ - `public static unsafe PauseMenu.OnPauseMenuClose onPauseMenuCloseCallback`
+- Input-Rebind-Events (`Il2Cpp.InputManager`)
+ - `public static unsafe void add_rebindComplete(Il2CppSystem.Action value)` / `remove_rebindComplete(...)`
+ - `add_rebindCanceled(...)` / `remove_rebindCanceled(...)`
+ - `add_rebindStarted(Il2CppSystem.Action value)` / `remove_rebindStarted(...)`
+
+# 4) Kritische Hook-Ziele (Harmony Patch Candidates)
+
+Kernziel: Choke-Points patchen (Prefix/Postfix), nicht breit `Update()`-spammen.
+
+- Save/Load (höchste Priorität)
+ - `Il2Cpp.SaveSystem.SaveGame(string savename = null, string stringNameOfSave = null)`
+ - `Il2Cpp.SaveSystem.LoadGame(string savename)`
+ - `Il2Cpp.SaveSystem.Load(string savename, bool isFromPauseMenu)`
+ - `Il2Cpp.SaveSystem.AutoSave()`
+ - `Il2Cpp.SaveSystem.SaveGameData()` / `LoadGameData()`
+- Economy/Progress
+ - `Il2Cpp.Player.UpdateCoin(float _coinChhangeAmount, bool withoutSound = false)`
+ - `Il2Cpp.Player.UpdateXP(float amount)`
+ - `Il2Cpp.Player.UpdateReputation(float amount)`
+ - Shop-Zahlungspfad: `Il2Cpp.ComputerShop.ButtonCheckOut()`, `UpdateCartTotal()`, `BuyNewItem(...)`, `BuyAnotherItem(...)`.
+- Netzwerk-/Topologie
+ - `Il2Cpp.NetworkMap.AddDevice(string name, CableLink.TypeOfLink type, int customerID = -1)`
+ - `Il2Cpp.NetworkMap.RemoveDevice(string name)`
+ - `Il2Cpp.NetworkMap.Connect(string from, string to)` / `Disconnect(string from, string to)`
+ - `Il2Cpp.NetworkMap.RegisterCableConnection(...)` / `RemoveCableConnection(int cableId, bool preserveLACP = false)`
+ - Validierung: `Il2Cpp.NetworkMap.IsIpAddressDuplicate(string ip, Server serverToExclude)`
+- Geräte-/Serverzustand
+ - `Il2Cpp.Server.PowerButton(bool forceState = false)`
+ - `Il2Cpp.Server.SetIP(string _ip)`
+ - `Il2Cpp.Server.UpdateCustomer(int newCustomerID)`
+ - `Il2Cpp.Server.UpdateAppID(int _appID)`
+ - `Il2Cpp.Server.ItIsBroken()` / `RepairDevice()`
+
+# 5) UI & Szenen-Management
+
+UI-/Scene-Flows mit hoher Relevanz für kontrollierte Mod-Intervention:
+
+- Main Menu (`Il2Cpp.MainMenu`)
+ - `Continue()`, `NewGame()`, `LoadGame()`, `Settings()`, `QuitGame()`.
+- Pause Flow (`Il2Cpp.PauseMenu`)
+ - `Pause(int openMenu)`, `Resume()`, `Save(string saveName = null, string _stringNameOfSave = null)`, `Load(string savename)`.
+ - Gute Hook-Stellen für mod-seitige Gatekeeper/Overlay-Interlocks.
+- Loading/Scenes (`Il2Cpp.LoadingScreen`)
+ - `LoadGameScenesVoid(...)`, `LoadLevel(int sceneIndex)`, `UnLoadLevel(int sceneIndex)`
+ - `AsynchronousLoad(int sceneIndex)`, `AsynchronousUnLoad(int sceneIndex)`, `IsSceneLoaded(string name)`
+ - `onGameIsLoadedCallback` als zuverlässiger End-of-Load Synchronisationspunkt.
+- Shop-/Asset-UI
+ - `Il2Cpp.ComputerShop`: Kauf- und Warenkorb-UI-Endpunkte.
+ - `Il2Cpp.AssetManagement`: Asset-Filter/Repair-UI-Workflows (relevant für automatische Tasking-Mods).
+
+# 6) Obfuscation & Auffälligkeiten
+
+- Obfuscation-Marker vorhanden
+ - `Il2Cpp.ObjectPrivateAbstractSealedInVo0` trägt `[ObfuscatedName("$BurstDirectCallInitializer")]`.
+ - Deutet auf generierte/Burst-nahe Initialisierer hin (kein klassischer Gameplay-Entry-Point).
+- IL2CPP-/Interop-Spezifika
+ - Weit verbreitete `unsafe` Wrapper, `NativeFieldInfoPtr_*`, `NativeMethodInfoPtr_*`, `il2cpp_runtime_invoke`.
+ - Für Harmony-Patching sind semantische High-Level-Methoden stabiler als intern generierte Helper.
+- Explizite Layouts als technische Auffälligkeit
+ - `[StructLayout(LayoutKind.Explicit)]` in u. a. `CableIDComponent`, `PacketComponent`, `_PrivateImplementationDetails_`.
+ - Wichtig für deterministische Feld-Offsets bei nativer Bridge/ABI.
+- Anti-Cheat-Indikatoren (Textscan)
+ - Kein direkter String-/Symboltreffer auf typische Marker wie `EasyAntiCheat`, `BattlEye`, `VAC`, `GameGuard`, `AntiCheat` im gescannten Dump.
+ - Das ist **kein** kryptografischer Nachweis „anti-cheat-frei“, aber im vorliegenden C#-Dump gibt es keine offensichtlichen API-Hooks darauf.
diff --git a/gregCore.csproj b/gregCore.csproj
index 75ea809c..5742ec9c 100644
--- a/gregCore.csproj
+++ b/gregCore.csproj
@@ -1,16 +1,94 @@
+
+
net6.0
- gregCore
- 1.0.0.30-pre
+ enable
+ true
+ latest
x64
+ gregCore
CS1701;CS1702
- true
+
+
+ gregCore
+ 0.1.0
+ 0.1.0.0
+ 0.1.0.0
+ mleem97
+ mleem97
+ gregCore
+
+ Framework SDK for Data Center (Unity 6 IL2CPP) MelonLoader mods.
+ Provides GregHookBus, Services, Registries and Harmony-safe patch
+ infrastructure. Reference-only package — runtime DLL ships separately
+ via MelonLoader Mods folder.
+
+ melonloader;unity;il2cpp;modding;datacenter;gregcore
+ https://github.com/mleem97/gregCore
+ https://github.com/mleem97/gregCore
+ git
+
+
+ MIT
+
+
+ icon.png
+ README.md
+
+
+ true
+ snupkg
+ true
+
+
+ false
+ false
+ false
+
+
+ true
+ true
+
+
+ ../../nupkgs
-
+
+
+
+ $(MELON_PATH)\MelonLoader.dll
+ false
+
+
+ $(MELON_PATH)\0Harmony.dll
+ false
+
+
+ $(MELON_PATH)\Il2CppAssemblies\Il2CppInterop.Runtime.dll
+ false
+
+
+ $(MELON_PATH)\Il2CppAssemblies\Assembly-CSharp.dll
+ false
+
+
+ $(MELON_PATH)\Il2CppAssemblies\UnityEngine.CoreModule.dll
+ false
+
+
+
+
+
+
+
+
+
+
+
+
@@ -20,4 +98,4 @@
-
+
\ No newline at end of file
diff --git a/gregCore.sln b/gregCore.sln
index f8796b56..77b1e5e2 100644
--- a/gregCore.sln
+++ b/gregCore.sln
@@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gregCore", "gregCore.csproj
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gregFramework", "gregFramework", "{9A0CCAB9-4303-13B4-2371-F1B97FF5B728}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gregCore.Tests", "gregTests\gregCore.Tests.csproj", "{FAF3FBA7-1865-41EF-BA90-215D9E7BF597}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gregCore.Tests", "tests\gregCore.Tests.csproj", "{FAF3FBA7-1865-41EF-BA90-215D9E7BF597}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/gregMain.cs b/gregMain.cs
deleted file mode 100644
index 1e1363c0..00000000
--- a/gregMain.cs
+++ /dev/null
@@ -1,862 +0,0 @@
-using Il2CppInterop.Runtime.InteropTypes.Arrays;
-using MelonLoader;
-using MelonLoader.Utils;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using UnityEngine;
-using UnityEngine.InputSystem;
-using UnityEngine.SceneManagement;
-using greg.Diagnostic;
-using greg.Core;
-
-
-// Namespace gregAssetExporter muss zu deiner AssemblyInfo passen
-[assembly: MelonInfo(typeof(gregAssetExporter.gregMain), "gregCore Framework", greg.Core.gregReleaseVersion.Current, "MLeeM97, Joniii11 (teamGreg)")]
-[assembly: MelonGame("Waseku", "Data Center")]
-
-namespace gregAssetExporter
-{
- public class gregMain : MelonMod
- {
- private string exportPath = string.Empty;
- private bool exportBetaNotUsed = true;
- private bool showDebugOverlay = true;
-
- private readonly greg.Exporter.Il2CppEventCatalogService eventCatalogService = new greg.Exporter.Il2CppEventCatalogService();
- private readonly greg.Exporter.Il2CppGameplayIndexService gameplayIndexService = new greg.Exporter.Il2CppGameplayIndexService();
- private readonly greg.Exporter.RuntimeHookService runtimeHookService = new greg.Exporter.RuntimeHookService();
- private readonly greg.Exporter.GameSignalSnapshotService gameSignalSnapshotService = new greg.Exporter.GameSignalSnapshotService();
-
- private Texture2D debugOverlayBackgroundTexture;
- private int debugHooksAvailable;
- private int debugHookEventsAvailable;
- private int debugNotYetImplemented;
- private bool debugOverlayStatsInitialized;
-
- public override void OnInitializeMelon()
- {
- // --- gregCore Diagnostic & Session Logging ---
- greg.Core.Diagnostic.GregSessionLogger.Initialize();
- greg.Core.Diagnostic.GregSessionLogger.Log("Initializing gregCore Framework...");
-
- // --- gregCore Framework Internal Initialization ---
- greg.Sdk.Services.GregSaveService.Init();
- greg.Sdk.Services.GregUiService.SetGlobalScale(0.85f); // Use user-preferred 0.85x by default
- greg.Sdk.Services.GregHudService.Initialize();
- greg.Sdk.Services.MCP.GregMCPServer.Start();
-
- // Apply Deep-Layer Hijacker Patches
- var harmony = new HarmonyLib.Harmony("greg.core.hijacker");
- harmony.PatchAll(typeof(greg.Sdk.Internal.GregUiHijacker).Assembly);
-
- // --- Legacy Exporter Initialization ---
- exportPath = Path.Combine(MelonEnvironment.ModsDirectory, "ExportedAssets");
- if (!Directory.Exists(exportPath)) Directory.CreateDirectory(exportPath);
-
- MelonLogger.Msg($"gregCore Framework v{greg.Core.gregReleaseVersion.Current} loaded (SDK-only build).");
- MelonLogger.Msg("Want to help building the future of Modding in DataCenter? Join our Discord: discord.gg/greg");
- MelonLogger.Msg($"gregCore provides {greg.Sdk.Services.GregModRegistry.GetLoadedMods().Count} registered mods.");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModInitializedEvent(DateTime.UtcNow, greg.Core.gregReleaseVersion.Current));
- }
-
- public override void OnSceneWasLoaded(int buildIndex, string sceneName)
- {
- MelonLogger.Msg($"[gregCore] Scene Loaded: {sceneName}. Triggering data export...");
- greg.Core.Exporter.DataExporter.RunFullExport();
-
- if (sceneName == "MainMenu")
- {
- greg.Core.UI.UIRouter.SetMode(greg.Core.UI.UIMode.MainMenu);
- }
- }
-
- public override void OnApplicationQuit()
- {
- greg.Sdk.Services.MCP.GregMCPServer.Stop();
- }
-
- public override void OnUpdate()
- {
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModTickEvent(Time.deltaTime, Time.frameCount));
-
- // Central Input Management
- greg.Sdk.Services.GregInputManagerService.Update();
-
- if (Keyboard.current != null && Keyboard.current.f1Key.wasPressedThisFrame)
- {
- greg.Core.UI.gregModConfigManager.Toggle(!greg.Core.UI.gregModConfigManager.IsOpen);
- }
-
-#if DEBUG
- if (Keyboard.current != null && Keyboard.current.f5Key.wasPressedThisFrame)
- {
- showDebugOverlay = !showDebugOverlay;
- }
-
- if (!showDebugOverlay) return;
-
- if (Keyboard.current != null && Keyboard.current.ctrlKey.isPressed && Keyboard.current.f8Key.wasPressedThisFrame)
- {
- ExportAllResources();
- }
-
- if (Keyboard.current != null && Keyboard.current.f6Key.wasPressedThisFrame)
- {
- RefreshDebugOverlayStats(forceHookScan: true);
- }
-
- if (Keyboard.current != null && Keyboard.current.f11Key.wasPressedThisFrame)
- {
- ExportIl2CppEventCatalog();
- }
-
- if (Keyboard.current != null && Keyboard.current.f12Key.wasPressedThisFrame)
- {
- InstallRuntimeHooks();
- }
-
- if (showDebugOverlay)
- {
- if (!debugOverlayStatsInitialized)
- RefreshDebugOverlayStats(forceHookScan: true);
-
- var entries = new List
- {
- new greg.Sdk.Services.GregMetadataEntry("HOOKS", debugHooksAvailable.ToString("D5"), new Color(0.38f, 0.96f, 0.85f)),
- new greg.Sdk.Services.GregMetadataEntry("EVENTS", debugHookEventsAvailable.ToString("D5"), new Color(0.38f, 0.96f, 0.85f)),
- new greg.Sdk.Services.GregMetadataEntry("MISSING", debugNotYetImplemented.ToString("D5"), Color.red),
- new greg.Sdk.Services.GregMetadataEntry("SCENES", UnityEngine.SceneManagement.SceneManager.sceneCount.ToString(), Color.white),
- new greg.Sdk.Services.GregMetadataEntry("FPS", (1f / Time.unscaledDeltaTime).ToString("F0"), Color.yellow)
- };
-
- greg.Sdk.Services.GregHudService.UpdateJadeBox(
- "GREG_CORE",
- $"v{greg.Core.gregReleaseVersion.Current} | DBG_MODE",
- entries
- );
- }
- else
- {
- greg.Sdk.Services.GregHudService.HideJadeBox();
- }
-#endif
- }
-
-#if DEBUG
- // OnGUI removed in favor of GregHudService (Premium UI)
-#endif
-
- private void EnsureDebugOverlayAssets()
- {
- if (debugOverlayBackgroundTexture == null)
- {
- debugOverlayBackgroundTexture = new Texture2D(1, 1, TextureFormat.RGBA32, false);
- debugOverlayBackgroundTexture.SetPixel(0, 0, new Color(0.02f, 0.04f, 0.08f, 0.85f));
- debugOverlayBackgroundTexture.Apply();
- }
- }
-
- private void RefreshDebugOverlayStats(bool forceHookScan)
- {
- try
- {
- if (forceHookScan || !debugOverlayStatsInitialized)
- {
- var hookScanResult = runtimeHookService.ScanCandidates(100000);
- debugHooksAvailable = hookScanResult.Candidates.Count;
- }
-
- int eventCount = 0;
- var eventFields = typeof(EventIds).GetFields(BindingFlags.Public | BindingFlags.Static);
- for (int index = 0; index < eventFields.Length; index++)
- {
- FieldInfo field = eventFields[index];
- if (field.IsLiteral && field.FieldType == typeof(uint))
- eventCount++;
- }
-
- debugHookEventsAvailable = eventCount;
- debugNotYetImplemented = Math.Max(0, debugHooksAvailable - debugHookEventsAvailable);
- debugOverlayStatsInitialized = true;
- }
- catch (Exception ex)
- {
- MelonLogger.Warning($"Debug overlay stats update failed: {ex.Message}");
- }
- }
-
-
- private void ExportAllGameSignalsOnStartup()
- {
- try
- {
- string diagnosticsPath = Path.Combine(exportPath, "Diagnostics");
- string snapshotPath = gameSignalSnapshotService.ExportAll(diagnosticsPath, eventCatalogService, gameplayIndexService, runtimeHookService);
- MelonLogger.Msg($"Startup-Snapshot erstellt: {snapshotPath}");
- }
- catch (Exception ex)
- {
- MelonLogger.Error($"Startup-Snapshot fehlgeschlagen: {ex.Message}");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "StartupSnapshot", ex.Message));
- }
- }
-
- private void ExportIl2CppEventCatalog()
- {
- try
- {
- string diagnosticsPath = Path.Combine(exportPath, "Diagnostics");
- string filePath = eventCatalogService.ExportCatalog(diagnosticsPath);
- int linesCount = File.ReadAllLines(filePath).Length;
- string gameplayIndex = gameplayIndexService.ExportGameplayIndex(diagnosticsPath);
-
- MelonLogger.Msg($"IL2CPP Event-Katalog exportiert: {filePath}");
- MelonLogger.Msg($"IL2CPP Gameplay-Index exportiert: {gameplayIndex}");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.Il2CppCatalogExportedEvent(DateTime.UtcNow, filePath, linesCount));
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.Il2CppGameplayIndexExportedEvent(DateTime.UtcNow, gameplayIndex));
- }
- catch (Exception ex)
- {
- MelonLogger.Error($"Fehler beim Export des IL2CPP Event-Katalogs: {ex.Message}");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "Il2CppCatalog", ex.Message));
- }
- }
-
- private void InstallRuntimeHooks()
- {
- InstallRuntimeHooks(250);
- }
-
- private void InstallRuntimeHooks(int maxHooks)
- {
- try
- {
- var result = runtimeHookService.ScanAndInstall(maxHooks);
- MelonLogger.Msg($"Hook-Scan abgeschlossen. Kandidaten={result.Scanned}, installiert={result.Installed}, fehlgeschlagen={result.Failed}");
-
- if (result.Errors.Count > 0)
- {
- string diagnosticsPath = Path.Combine(exportPath, "Diagnostics");
- Directory.CreateDirectory(diagnosticsPath);
- string errorFile = Path.Combine(diagnosticsPath, "hook-install-errors.txt");
- File.WriteAllLines(errorFile, result.Errors);
- MelonLogger.Warning($"Hook-Fehlerliste geschrieben: {errorFile}");
- }
- }
- catch (Exception ex)
- {
- MelonLogger.Error($"Fehler beim Installieren der Runtime-Hooks: {ex.Message}");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "RuntimeHooks", ex.Message));
- }
- }
-
- private void InstallRuntimeHooksFromCatalog(string catalogPath, int maxHooks)
- {
- try
- {
- var result = runtimeHookService.InstallFromCatalog(catalogPath, maxHooks);
- MelonLogger.Msg($"Hook-Catalog verarbeitet. Datei={catalogPath} Kandidaten={result.Scanned}, installiert={result.Installed}, fehlgeschlagen={result.Failed}");
-
- if (result.Errors.Count > 0)
- {
- string diagnosticsPath = Path.Combine(exportPath, "Diagnostics");
- Directory.CreateDirectory(diagnosticsPath);
- string errorFile = Path.Combine(diagnosticsPath, "hook-install-errors.txt");
- File.WriteAllLines(errorFile, result.Errors);
- MelonLogger.Warning($"Hook-Fehlerliste geschrieben: {errorFile}");
- }
- }
- catch (Exception ex)
- {
- MelonLogger.Error($"Fehler beim Installieren der Catalog-Hooks: {ex.Message}");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "CatalogHooks", ex.Message));
- }
- }
-
- private void RunAutoHookCommandIfRequested()
- {
- try
- {
- string[] args = Environment.GetCommandLineArgs();
- bool autoScan = HasArg(args, "--greg-hooks-auto");
- bool installAll = HasArg(args, "--greg-hooks-all");
- string catalogPath = GetArgValue(args, "--greg-hooks-catalog=");
-
- if (!autoScan && string.IsNullOrWhiteSpace(catalogPath))
- return;
-
- int defaultMax = installAll ? int.MaxValue : 250;
- int maxHooks = GetIntArgValue(args, "--greg-hooks-max=", defaultMax);
-
- if (!string.IsNullOrWhiteSpace(catalogPath))
- {
- MelonLogger.Msg($"AutoHook-Command erkannt (catalog). maxHooks={maxHooks}");
- InstallRuntimeHooksFromCatalog(catalogPath, maxHooks);
- return;
- }
-
- MelonLogger.Msg($"AutoHook-Command erkannt (scan). maxHooks={maxHooks}");
- InstallRuntimeHooks(maxHooks);
- }
- catch (Exception ex)
- {
- MelonLogger.Warning($"AutoHook-Command konnte nicht ausgeführt werden: {ex.Message}");
- }
- }
-
- private static bool HasArg(IEnumerable args, string name)
- {
- foreach (string arg in args)
- {
- if (string.Equals(arg, name, StringComparison.OrdinalIgnoreCase))
- return true;
- }
-
- return false;
- }
-
- private static string GetArgValue(IEnumerable args, string prefix)
- {
- foreach (string arg in args)
- {
- if (!arg.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
- continue;
-
- return arg.Substring(prefix.Length).Trim('"');
- }
-
- return string.Empty;
- }
-
- private static int GetIntArgValue(IEnumerable args, string prefix, int fallback)
- {
- string raw = GetArgValue(args, prefix);
- if (string.IsNullOrWhiteSpace(raw))
- return fallback;
-
- return int.TryParse(raw, out int parsed) && parsed > 0 ? parsed : fallback;
- }
-
- private static void OnHookTriggered(greg.Exporter.HookTriggeredEvent evt)
- {
- if (evt.TriggerCount <= 3 || evt.TriggerCount % 100 == 0)
- {
- MelonLogger.Msg($"Hook Trigger: {evt.MethodName} (count={evt.TriggerCount})");
- }
- }
-
- private void ExportAllResources()
- {
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ExportStartedEvent(DateTime.UtcNow, exportPath));
-
- string currentGamePath = Path.Combine(exportPath, "CurrentGame");
- string modelsPath = Path.Combine(currentGamePath, "Models");
- string texturesPath = Path.Combine(currentGamePath, "Textures");
- string spritesPath = Path.Combine(currentGamePath, "Sprites");
- string materialsPath = Path.Combine(currentGamePath, "Materials");
- string scriptsPath = Path.Combine(currentGamePath, "Scripts");
- string settingsPath = Path.Combine(currentGamePath, "Settings");
- string notUsedPath = Path.Combine(currentGamePath, "NotUsed");
- string notUsedModelsPath = Path.Combine(notUsedPath, "Models");
- string notUsedTexturesPath = Path.Combine(notUsedPath, "Textures");
-
- Directory.CreateDirectory(currentGamePath);
- Directory.CreateDirectory(modelsPath);
- Directory.CreateDirectory(texturesPath);
- Directory.CreateDirectory(spritesPath);
- Directory.CreateDirectory(materialsPath);
- Directory.CreateDirectory(scriptsPath);
- Directory.CreateDirectory(settingsPath);
- if (exportBetaNotUsed)
- {
- Directory.CreateDirectory(notUsedPath);
- Directory.CreateDirectory(notUsedModelsPath);
- Directory.CreateDirectory(notUsedTexturesPath);
- }
-
- File.WriteAllText(
- Path.Combine(currentGamePath, "README_NOT_USED.txt"),
- "Dieser Ordner enthält verwendete Assets aus dem aktuellen Spielstand (aktiv + inaktiv).\n" +
- "Struktur: Models, Textures, Sprites, Materials, Scripts, Settings.\n" +
- "Optional werden nicht verwendete, aber geladene Assets nach 'NotUsed/Models' und 'NotUsed/Textures' exportiert."
- );
-
- MelonLogger.Msg("Starte Export: verwendete Assets (aktiv + inaktiv) aus allen geladenen Szenen...");
-
- HashSet usedMeshIds = new HashSet();
- HashSet usedTextureIds = new HashSet();
- HashSet usedSpriteTextureIds = new HashSet();
- HashSet exportedCurrentGame = new HashSet();
- HashSet exportedScriptTypes = new HashSet();
- HashSet exportedMaterials = new HashSet();
- List settingLines = new List();
- List materialInfoLines = new List();
-
- foreach (GameObject obj in EnumerateAllSceneObjects(includeInactive: true))
- {
- try
- {
- settingLines.Add($"{GetGameObjectPath(obj)} | activeSelf={obj.activeSelf} | activeInHierarchy={obj.activeInHierarchy} | layer={obj.layer} | tag={obj.tag} | scene={obj.scene.name}");
-
- Component[] components = GetComponentsSafe(obj);
- for (int componentIndex = 0; componentIndex < components.Length; componentIndex++)
- {
- Component component = components[componentIndex];
- if (component == null) continue;
- string typeName = component.GetType().FullName;
- if (!string.IsNullOrWhiteSpace(typeName))
- exportedScriptTypes.Add(typeName);
- }
-
- MeshFilter meshFilter = obj.GetComponent();
- if (meshFilter != null && meshFilter.sharedMesh != null)
- {
- usedMeshIds.Add(meshFilter.sharedMesh.GetInstanceID());
- if (TryRegister(exportedCurrentGame, $"mesh:{meshFilter.sharedMesh.name}"))
- SaveMesh(meshFilter.sharedMesh, modelsPath);
- }
-
- SkinnedMeshRenderer skinnedMeshRenderer = obj.GetComponent();
- if (skinnedMeshRenderer != null && skinnedMeshRenderer.sharedMesh != null)
- {
- usedMeshIds.Add(skinnedMeshRenderer.sharedMesh.GetInstanceID());
- if (TryRegister(exportedCurrentGame, $"mesh:{skinnedMeshRenderer.sharedMesh.name}"))
- SaveMesh(skinnedMeshRenderer.sharedMesh, modelsPath);
- }
-
- Renderer renderer = obj.GetComponent();
- if (renderer != null)
- {
- Material[] materials = renderer.sharedMaterials;
- for (int materialIndex = 0; materialIndex < materials.Length; materialIndex++)
- {
- Material material = materials[materialIndex];
- if (material == null) continue;
-
- if (TryRegister(exportedMaterials, $"mat:{material.name}"))
- {
- materialInfoLines.Add($"material={material.name} | shader={material.shader?.name ?? "null"} | object={GetGameObjectPath(obj)}");
- }
-
- string[] texturePropertyNames = material.GetTexturePropertyNames();
- for (int texturePropertyIndex = 0; texturePropertyIndex < texturePropertyNames.Length; texturePropertyIndex++)
- {
- string propertyName = texturePropertyNames[texturePropertyIndex];
- Texture texture = material.GetTexture(propertyName);
- if (texture is Texture2D tex2D)
- {
- usedTextureIds.Add(tex2D.GetInstanceID());
- materialInfoLines.Add($"material={material.name} | texProp={propertyName} | texture={tex2D.name}");
- if (TryRegister(exportedCurrentGame, $"tex:{tex2D.name}"))
- SaveTexture(tex2D, texturesPath);
- }
- }
- }
- }
-
- Component uiImage = obj.GetComponent("Image");
- if (uiImage != null)
- {
- PropertyInfo spriteProperty = uiImage.GetType().GetProperty("sprite");
- Sprite sprite = spriteProperty?.GetValue(uiImage) as Sprite;
- if (sprite != null && sprite.texture != null)
- {
- usedTextureIds.Add(sprite.texture.GetInstanceID());
- usedSpriteTextureIds.Add(sprite.texture.GetInstanceID());
- if (TryRegister(exportedCurrentGame, $"tex:{sprite.texture.name}"))
- SaveTexture(sprite.texture, spritesPath);
- }
- }
- }
- catch (Exception ex)
- {
- MelonLogger.Warning($"Export-Fehler bei Objekt '{obj.name}': {ex.Message}");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "ExportObject", ex.Message));
- }
- }
-
- File.WriteAllLines(Path.Combine(scriptsPath, "components.txt"), exportedScriptTypes);
- File.WriteAllLines(Path.Combine(settingsPath, "objects.txt"), settingLines);
- File.WriteAllLines(Path.Combine(materialsPath, "materials.txt"), materialInfoLines);
-
- int notUsedMeshCount = 0;
- int notUsedTextureCount = 0;
-
- if (exportBetaNotUsed)
- {
- MelonLogger.Msg("Starte Beta-Export: nicht verwendete, aber geladene Assets...");
-
- HashSet exportedBeta = new HashSet();
-
- Mesh[] loadedMeshes = Resources.FindObjectsOfTypeAll();
- for (int meshIndex = 0; meshIndex < loadedMeshes.Length; meshIndex++)
- {
- Mesh mesh = loadedMeshes[meshIndex];
- if (mesh == null) continue;
- if (usedMeshIds.Contains(mesh.GetInstanceID())) continue;
- if (!IsCandidateNotUsedMesh(mesh)) continue;
- if (!TryRegister(exportedBeta, $"mesh:{mesh.name}")) continue;
- SaveMesh(mesh, notUsedModelsPath);
- notUsedMeshCount++;
- }
-
- Texture2D[] loadedTextures = Resources.FindObjectsOfTypeAll();
- for (int textureIndex = 0; textureIndex < loadedTextures.Length; textureIndex++)
- {
- Texture2D tex = loadedTextures[textureIndex];
- if (tex == null) continue;
- if (usedTextureIds.Contains(tex.GetInstanceID())) continue;
- if (!IsCandidateNotUsedTexture(tex)) continue;
- if (!TryRegister(exportedBeta, $"tex:{tex.name}")) continue;
- SaveTexture(tex, notUsedTexturesPath);
- notUsedTextureCount++;
- }
-
- MelonLogger.Msg($"Export abgeschlossen! Verbaute Assets: {currentGamePath} | Nicht verwendet: {notUsedPath}");
- }
- else
- {
- MelonLogger.Msg($"Export abgeschlossen! Verbaute Assets: {currentGamePath} | NotUsed-Export deaktiviert (F10 zum Umschalten).");
- }
-
- var summaryLines = new List
- {
- $"timestamp={DateTime.Now:yyyy-MM-dd HH:mm:ss}",
- $"scenesLoaded={SceneManager.sceneCount}",
- $"objectsScanned={settingLines.Count}",
- $"uniqueComponents={exportedScriptTypes.Count}",
- $"usedMeshes={usedMeshIds.Count}",
- $"usedTextures={usedTextureIds.Count}",
- $"usedSpriteTextures={usedSpriteTextureIds.Count}",
- $"usedMaterials={exportedMaterials.Count}",
- $"notUsedEnabled={exportBetaNotUsed}",
- $"notUsedMeshes={notUsedMeshCount}",
- $"notUsedTextures={notUsedTextureCount}"
- };
- File.WriteAllLines(Path.Combine(settingsPath, "summary.txt"), summaryLines);
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ExportCompletedEvent(DateTime.UtcNow, currentGamePath, settingLines.Count));
- }
-
- private IEnumerable EnumerateAllSceneObjects(bool includeInactive)
- {
- for (int i = 0; i < SceneManager.sceneCount; i++)
- {
- Scene scene = SceneManager.GetSceneAt(i);
- if (!scene.IsValid() || !scene.isLoaded) continue;
-
- GameObject[] roots = scene.GetRootGameObjects();
- for (int rootIndex = 0; rootIndex < roots.Length; rootIndex++)
- {
- GameObject root = roots[rootIndex];
- if (root == null) continue;
-
- Queue queue = new Queue();
- queue.Enqueue(root.transform);
-
- while (queue.Count > 0)
- {
- Transform current = queue.Dequeue();
- if (current == null || current.gameObject == null)
- continue;
-
- GameObject currentObject = current.gameObject;
- if (includeInactive || currentObject.activeInHierarchy)
- yield return currentObject;
-
- int childCount;
- try
- {
- childCount = current.childCount;
- }
- catch
- {
- childCount = 0;
- }
-
- for (int childIndex = 0; childIndex < childCount; childIndex++)
- {
- Transform child;
- try
- {
- child = current.GetChild(childIndex);
- }
- catch
- {
- continue;
- }
-
- if (child != null)
- queue.Enqueue(child);
- }
- }
- }
- }
- }
-
- private void LogUiPathUnderCursor()
- {
- if (Mouse.current == null)
- {
- MelonLogger.Warning("Keine Maus verfügbar.");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "UIPath", "Keine Maus verfügbar"));
- return;
- }
-
- Type eventSystemType = Type.GetType("UnityEngine.EventSystems.EventSystem, UnityEngine.UI");
- Type pointerEventDataType = Type.GetType("UnityEngine.EventSystems.PointerEventData, UnityEngine.UI");
- Type raycastResultType = Type.GetType("UnityEngine.EventSystems.RaycastResult, UnityEngine.UI");
-
- if (eventSystemType == null || pointerEventDataType == null || raycastResultType == null)
- {
- MelonLogger.Warning("UI EventSystem-Typen konnten nicht aufgelöst werden.");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "UIPath", "UI EventSystem-Typen konnten nicht aufgelöst werden"));
- return;
- }
-
- object currentEventSystem = eventSystemType.GetProperty("current", BindingFlags.Public | BindingFlags.Static)?.GetValue(null);
- if (currentEventSystem == null)
- {
- MelonLogger.Warning("Kein aktives EventSystem gefunden.");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "UIPath", "Kein aktives EventSystem gefunden"));
- return;
- }
-
- object pointerEventData = Activator.CreateInstance(pointerEventDataType, currentEventSystem);
- pointerEventDataType.GetProperty("position")?.SetValue(pointerEventData, Mouse.current.position.ReadValue());
-
- Type il2CppListGeneric = Type.GetType("Il2CppSystem.Collections.Generic.List`1, Il2Cppmscorlib");
- if (il2CppListGeneric == null)
- {
- MelonLogger.Warning("Il2Cpp-Liste für UI-Raycasts konnte nicht aufgelöst werden.");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "UIPath", "Il2Cpp-Liste für UI-Raycasts konnte nicht aufgelöst werden"));
- return;
- }
-
- Type listType = il2CppListGeneric.MakeGenericType(raycastResultType);
- object results = Activator.CreateInstance(listType);
- eventSystemType.GetMethod("RaycastAll")?.Invoke(currentEventSystem, new[] { pointerEventData, results });
-
- int resultCount = (int)(listType.GetProperty("Count")?.GetValue(results) ?? 0);
-
- if (resultCount == 0)
- {
- MelonLogger.Msg("Kein UI-Element unter dem Cursor gefunden.");
- return;
- }
-
- MethodInfo getItemMethod = listType.GetMethod("get_Item");
- if (getItemMethod == null)
- {
- MelonLogger.Warning("Il2Cpp-Raycast-Liste konnte nicht gelesen werden.");
- greg.Exporter.ModFramework.Events.Publish(new greg.Exporter.ModErrorEvent(DateTime.UtcNow, "UIPath", "Il2Cpp-Raycast-Liste konnte nicht gelesen werden"));
- return;
- }
-
- for (int i = 0; i < resultCount; i++)
- {
- object result = getItemMethod.Invoke(results, new object[] { i });
- GameObject gameObject = raycastResultType.GetProperty("gameObject")?.GetValue(result) as GameObject;
- if (gameObject == null) continue;
-
- string path = gameObject.name;
- Transform parent = gameObject.transform.parent;
-
- while (parent != null)
- {
- path = parent.name + "/" + path;
- parent = parent.parent;
- }
-
- MelonLogger.Msg("UI-Pfad gefunden: " + path);
- }
- }
-
- private static bool TryRegister(HashSet exportedNames, string rawName)
- {
- if (string.IsNullOrWhiteSpace(rawName)) return false;
- if (rawName.ToLowerInvariant().Contains("unity")) return false;
- return exportedNames.Add(rawName);
- }
-
- private static string GetGameObjectPath(GameObject gameObject)
- {
- string path = gameObject.name;
- Transform parent = gameObject.transform.parent;
- while (parent != null)
- {
- path = parent.name + "/" + path;
- parent = parent.parent;
- }
- return path;
- }
-
- private static bool IsCandidateNotUsedMesh(Mesh mesh)
- {
- if (mesh == null) return false;
- if (mesh.vertexCount <= 0) return false;
- if (string.IsNullOrWhiteSpace(mesh.name)) return false;
- if (mesh.hideFlags == HideFlags.HideAndDontSave) return false;
- return true;
- }
-
- private static bool IsCandidateNotUsedTexture(Texture2D tex)
- {
- if (tex == null) return false;
- if (string.IsNullOrWhiteSpace(tex.name)) return false;
- if (tex.width <= 4 && tex.height <= 4) return false;
- if (tex.hideFlags == HideFlags.HideAndDontSave) return false;
- return true;
- }
-
- private void SaveTexture(Texture2D tex, string targetDirectory)
- {
- if (tex == null || string.IsNullOrEmpty(tex.name) || tex.name.Contains("unity")) return;
- if (!Directory.Exists(targetDirectory)) Directory.CreateDirectory(targetDirectory);
-
- // RenderTexture Trick um Read/Write-Sperre zu umgehen
- RenderTexture tmp = RenderTexture.GetTemporary(tex.width, tex.height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear);
- Graphics.Blit(tex, tmp);
- RenderTexture previous = RenderTexture.active;
- RenderTexture.active = tmp;
-
- Texture2D readableTex = new Texture2D(tex.width, tex.height);
- readableTex.ReadPixels(new Rect(0, 0, tmp.width, tmp.height), 0, 0);
- readableTex.Apply();
-
- RenderTexture.active = previous;
- RenderTexture.ReleaseTemporary(tmp);
-
- byte[] bytes = ImageConversion.EncodeToPNG(readableTex);
- string safeName = string.Join("_", tex.name.Split(Path.GetInvalidFileNameChars()));
- string filePath = EnsureUniquePath(targetDirectory, safeName, ".png");
- File.WriteAllBytes(filePath, bytes);
-
- // Objekt zerstören um Speicher zu sparen während des Exports
- UnityEngine.Object.Destroy(readableTex);
- }
-
- private void SaveMesh(Mesh mesh, string targetDirectory)
- {
- if (mesh == null || string.IsNullOrEmpty(mesh.name) || mesh.name.Contains("unity")) return;
- if (!Directory.Exists(targetDirectory)) Directory.CreateDirectory(targetDirectory);
-
- string safeName = string.Join("_", mesh.name.Split(Path.GetInvalidFileNameChars()));
- string filePath = EnsureUniquePath(targetDirectory, safeName, ".obj");
-
- System.Text.StringBuilder sb = new System.Text.StringBuilder();
- sb.Append("g ").Append(safeName).Append("\n");
-
- // Nutze die expliziten Unity-Typen um Konflikte mit System.Numerics zu vermeiden
- UnityEngine.Vector3[] vertices = mesh.vertices;
- for (int vertexIndex = 0; vertexIndex < vertices.Length; vertexIndex++)
- {
- UnityEngine.Vector3 vertex = vertices[vertexIndex];
- sb.Append(string.Format("v {0} {1} {2}\n", vertex.x, vertex.y, vertex.z).Replace(",", "."));
- }
-
- sb.Append("\n");
-
- UnityEngine.Vector3[] normals = mesh.normals;
- for (int normalIndex = 0; normalIndex < normals.Length; normalIndex++)
- {
- UnityEngine.Vector3 normal = normals[normalIndex];
- sb.Append(string.Format("vn {0} {1} {2}\n", normal.x, normal.y, normal.z).Replace(",", "."));
- }
-
- sb.Append("\n");
-
- UnityEngine.Vector2[] uvs = mesh.uv;
- for (int uvIndex = 0; uvIndex < uvs.Length; uvIndex++)
- {
- UnityEngine.Vector2 uv = uvs[uvIndex];
- sb.Append(string.Format("vt {0} {1}\n", uv.x, uv.y).Replace(",", "."));
- }
-
- for (int i = 0; i < mesh.subMeshCount; i++)
- {
- int[] triangles = mesh.GetTriangles(i);
- for (int j = 0; j < triangles.Length; j += 3)
- {
- // OBJ Format Indizes starten bei 1
- sb.Append(string.Format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n",
- triangles[j] + 1, triangles[j + 1] + 1, triangles[j + 2] + 1));
- }
- }
-
- File.WriteAllText(filePath, sb.ToString());
- }
-
- private static string EnsureUniquePath(string directory, string baseName, string extension)
- {
- string filePath = Path.Combine(directory, baseName + extension);
- int i = 1;
- while (File.Exists(filePath))
- {
- filePath = Path.Combine(directory, $"{baseName}_{i}{extension}");
- i++;
- }
-
- return filePath;
- }
-
- private static Component[] GetComponentsSafe(GameObject gameObject)
- {
- if (gameObject == null)
- return Array.Empty();
-
- try
- {
- return gameObject.GetComponents() ?? Array.Empty();
- }
- catch (Exception ex) when (IsSpanInteropMethodMissing(ex))
- {
- MelonLogger.Warning($"Unity6/Il2Cpp Span fallback aktiv für Objekt '{gameObject.name}'.");
- }
- catch
- {
- }
-
- try
- {
- MethodInfo getComponentsByType = typeof(GameObject).GetMethod("GetComponents", new[] { typeof(Type) });
- if (getComponentsByType == null)
- return Array.Empty();
-
- object raw = getComponentsByType.Invoke(gameObject, new object[] { typeof(Component) });
- if (raw is not Array rawArray)
- return Array.Empty();
-
- Component[] managedComponents = new Component[rawArray.Length];
- for (int index = 0; index < rawArray.Length; index++)
- managedComponents[index] = rawArray.GetValue(index) as Component;
-
- return managedComponents;
- }
- catch
- {
- return Array.Empty();
- }
- }
-
- private static bool IsSpanInteropMethodMissing(Exception exception)
- {
- Exception current = exception;
- while (current != null)
- {
- string message = current.Message ?? string.Empty;
- if (message.Contains("GetPinnableReference", StringComparison.OrdinalIgnoreCase)
- && message.Contains("ReadOnlySpan", StringComparison.OrdinalIgnoreCase)
- && message.Contains("Method not found", StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- current = current.InnerException;
- }
-
- return false;
- }
- }
-}
diff --git a/gregMainCi.cs b/gregMainCi.cs
deleted file mode 100644
index 6227ff24..00000000
--- a/gregMainCi.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace gregAssetExporter
-{
- internal static class MainCiBuildMarker
- {
- }
-}
-
-
diff --git a/modding_core_architecture_summary.md b/modding_core_architecture_summary.md
new file mode 100644
index 00000000..f51e1504
--- /dev/null
+++ b/modding_core_architecture_summary.md
@@ -0,0 +1,196 @@
+# modding_core_architecture_summary
+
+> Zweck: Single Source of Truth für AI-/Bridge-Entwicklung (Lua, Rust, Go, Python, TS/JS) gegen gregCore.
+>
+> Scope: Laufzeit im Spielprozess (MelonLoader + Unity IL2CPP), inklusive FFI, IPC, Eventing und Sicherheitsgrenzen.
+
+## 1) Runtime Lifecycle, Bootstrap & Schichten
+
+### Schichtzuordnung (verbindlich)
+- **Unity Spiel / IL2CPP Assembly (Game Layer):** gepatchte Spieltypen/Methoden (z. B. `Player.UpdateCoin`, `ServerPowerButton`, UI/Save-Methoden).
+- **GregFramework Core SDK (Core Layer):** `src/gregModLoader/gregCore.cs`, `gregHarmonyPatches.cs`, `gregFfiBridge.cs`, `gregGameApi.cs`, `gregEventDispatcher.cs`.
+- **Plugin Layer:** `src/gregModLoader/Plugins/*` (`gregPluginBase`, `gregRegistry`, Dependency-Resolver).
+- **Language Bridges:** `src/Scripting/*` (`iGregLanguageBridge`, `gregLanguageBridgeHost`, Lua/JS/Rust/Go-Bridges).
+- **Mod Layer:** User-Mods, native DLL-Mods (FFI), Script-Mods.
+
+### Haupt-Entry und Aufrufreihenfolge
+- **Core-Layer Entry:** `gregCoreLoader : MelonMod` in `src/gregModLoader/gregCore.cs`.
+- Relevante Lifecycle-Methoden:
+ - `OnInitializeMelon()`
+ - `OnSceneWasLoaded(int buildIndex, string sceneName)`
+ - `OnUpdate()`
+ - `OnFixedUpdate()`
+ - `OnGUI()`
+ - `OnApplicationQuit()`
+
+### Effektive Initialisierungssequenz
+1. Core initialisiert Konfiguration, Aktivierung/Flags, Logging.
+2. Core erstellt/initialisiert FFI (`gregFfiBridge`) und API-Tabelle (`gregGameApi`).
+3. Core initialisiert Script-Host (`gregLanguageBridgeHost`) und lädt Bridges.
+4. Core installiert Harmony-Patches (`gregHarmonyPatches`).
+5. Plugins werden registriert/aufgelöst (`gregRegistry`, `gregDependencyResolver`) und über Ready-Callbacks aktiviert.
+6. Runtime-Loop verteilt Update-Ticks an Core, Bridges und FFI-Module.
+
+### Shutdown-Semantik
+- `OnApplicationQuit()` triggert geordnetes Stoppen:
+ - Script-Host/Bridges herunterfahren,
+ - native FFI-Module via `mod_shutdown` und `FreeLibrary` freigeben,
+ - Pointer/Handles im `gregGameApi.Dispose()` bereinigen.
+
+---
+
+## 2) IL2CPP Hooking-Modell & Ausführungsfluss
+
+### Hook-Ebene
+- **Core Layer:** `src/gregModLoader/gregHarmonyPatches.cs` patcht IL2CPP-Spielmethoden mit Harmony Prefix/Postfix.
+- Ziel ist **Event-Proxying**, nicht direkter unkontrollierter Mod-Zugriff auf Unity-Typen.
+
+### Hook-zu-Event Pipeline
+1. IL2CPP-Methode wird gepatcht (Prefix/Postfix).
+2. Patch extrahiert primitive/struct-basierte Daten.
+3. Dispatch über `EventDispatcher`/`gregEventDispatcher` mit numerischer `EventIds`-ID.
+4. `GregHookIntegration` mappt `eventId -> greg.*` Hookname (`gregNativeEventHooks`).
+5. Hook-Payload wird normalisiert (`BuildPayload(...)`) und an Bus/FFI weitergereicht.
+
+### Canonical Hook-Namen
+- Mapping zentral in `src/gregSdk/gregNativeEventHooks.cs`.
+- Primärquelle für Namen: `greg_hooks.json` + framework-only Ergänzungen via `gregHookName.Create(...)`.
+- Fallback bei unbekannten IDs: `greg.SYSTEM.UnmappedNativeEvent`.
+
+### Cancelable vs Non-cancelable
+- `gregEventDispatcher` unterstützt normale und cancelable Listener (`Func`).
+- Cancel-Pfad wird in Patchpunkten genutzt, wo Spielaktion blockierbar ist.
+
+---
+
+## 3) Interop, FFI & IPC (ABI, Ports, Protokolle)
+
+### Native FFI (Core ↔ Native Mod)
+- **Core Layer Datei:** `src/gregModLoader/gregFfiBridge.cs`.
+- Win32 Loader-API:
+ - `LoadLibrary`
+ - `GetProcAddress`
+ - `FreeLibrary`
+- Erwartete native Exports (C-ABI):
+ - `mod_info`
+ - `mod_init`
+ - `mod_update`
+ - `mod_fixed_update`
+ - `mod_on_scene_loaded`
+ - `mod_on_gui`
+ - `mod_shutdown`
+ - `mod_on_event`
+
+### API-Table für native Module
+- **Core Layer Datei:** `src/gregModLoader/gregGameApi.cs`.
+- Versioniertes Struct: `GameAPITable` (aktuell auf v12 erweitert).
+- Delegates werden via `Marshal.GetFunctionPointerForDelegate(...)` als Funktionszeiger exportiert.
+
+### IPC/Netzwerkflächen
+- **MCP HTTP Server (Core/Tooling-Grenze):** `GregMCPServer` via `HttpListener` (localhost).
+- **Multiplayer Transport (Plugin/Core):** WebSocket-Client in `GregMultiplayerService`.
+- **Plugin-Sync (Core/Service):** `HttpClient` in `gregPluginSyncService`.
+- **Native Plattform-Interop:** Steam-P2P via `steam_api64`-Imports in `gregGameApi.cs`.
+
+### Bridge-Host für Sprachen
+- **Language Bridge Layer:** `iGregLanguageBridge` + `gregLanguageBridgeHost`.
+- Lua: MoonSharp; JS/TS: Jint; Rust/Go über Bridge-Adapter.
+- Host ist der Isolations- und Lifecycle-Knoten für alle Script-Runtimes.
+
+---
+
+## 4) Memory Boundaries, Ownership & Lifetime
+
+### Ownership-Regeln an der FFI-Grenze
+- **Unmanaged Allokation durch Core:** `Marshal.AllocHGlobal`.
+- **Freigabe durch Core nach Callback:** `Marshal.FreeHGlobal` (symmetrisch im Dispatch-Pfad).
+- **String-Marshalling:** `Marshal.StringToHGlobalAnsi` / `Marshal.PtrToStringAnsi`.
+- **Blittable Struct Transfer:** `[StructLayout(LayoutKind.Sequential)]` in Event-Payloads.
+
+### Delegate-/Function-Pointer-Lifetime
+- Delegates für API-Funktionen werden als Felder gehalten, damit der GC keine Funktionszeiger invalidiert.
+- `GameAPITable` speichert `IntPtr` auf Delegate-Stubs; Freigabe zentral im `Dispose()`.
+
+### GCHandle-Verwendung
+- Für Event-/Payload-Weitergabe werden `GCHandle.Alloc(...)` Handles erzeugt.
+- Handles werden nach Verwendung explizit gelöst (`GCHandle.Free()`), um Leaks/Pinning-Druck zu verhindern.
+
+### Fehlerresilienz an Grenzstellen
+- FFI-Aufrufe sind einzeln in `try/catch` eingefasst.
+- Fehler in einem Modul dürfen den Core-Loop nicht terminieren (Fail-isolated execution).
+
+### Kritische ABI-Regeln für externe Bindings
+- Struct-Reihenfolge/Field-Typen sind ABI-kritisch; keine Reorder/Pack-Änderung ohne Version-Bump.
+- Auf der Bridge-Seite nur stabile primitive Typen (`int`, `uint`, `float`, `byte[]`, `IntPtr`) übergeben.
+- Keine Ownership-Mehrdeutigkeit: jeder Pointer braucht eindeutige „who frees“-Regel.
+
+---
+
+## 5) DTOs, Manifeste & Serialisierung
+
+### Typfamilien
+- **Runtime Event DTOs (Core):** `src/gregModLoader/Events/*.cs` (`iModEvent` mit `DateTime OccurredAtUtc`).
+- **Native Event Struct DTOs (Core):** `src/gregModLoader/gregEventDispatcher.cs` (z. B. `ValueChangedData`, `DayEndedData`, `ShopItemAddedData`).
+- **SDK/Config DTOs (Core/SDK):**
+ - `GregUiReplacementManifest`
+ - `ModelOverrideManifest`
+ - `ServerDefinition`
+ - `ItemDefinition`
+ - `PluginSyncConfig`, `PluginSyncManifest`
+
+### Serializer-Stack
+- `System.Text.Json` für Runtime-/Service-Pfade (`GregPersistenceService`, MCP-Antworten).
+- `Newtonsoft.Json` in Teilen des Config-Stacks (`GregConfigService`).
+- Konsequenz: DTO-Contracts sind serializer-agnostisch zu halten (öffentliche Properties/Fields stabil).
+
+### Feld- und Versionsstabilität
+- Event- und Manifest-Felder sind externe Verträge für Bridges/Mods.
+- Änderungen nur additiv und versioniert (insb. API-Table + manifestartige Contracts).
+- Entfernen/Umbenennen erzeugt harte Breaking Changes für native und Script-Bindings.
+
+### Datentyp-Praxis für Multi-Language Bindings
+- Bevorzugt JSON-kompatible Primitiven und flache Objekte.
+- Für binäre Übergaben klar deklarierte Byte-Arrays + Länge.
+- Keine impliziten Unity-/IL2CPP-Objektreferenzen in öffentlichen Bridge-DTOs.
+
+---
+
+## 6) Event-System, Hook-API & Sandboxing-Einschränkungen
+
+### Event-Systeme (parallel vorhanden)
+1. **String-basierter Hook-Bus (Core):** `gregEventDispatcher` mit Hooknamen `greg..`.
+2. **Type-safe Bus (SDK):** `GregEventBus` (`Subscribe`, `Publish`, `Unsubscribe`).
+3. **Native Event-ID Dispatch (Core↔FFI):** `EventIds` + struct-payload + `mod_on_event`.
+
+### Hook-Namenskonvention
+- Kanonisch: `greg..` (bzw. in Altbeständen teils uppercase Domains).
+- Mappingquelle für native IDs: `gregNativeEventHooks.ByEventId`.
+- Hook-Integration: `GregHookIntegration.EmitForSimple/EmitForStruct`.
+
+### Sandboxing-Realität (wichtig für AI/Bridge-Design)
+- **Lua I/O Modul:** `src/Scripting/Lua/LuaModules/gregIoLuaModule.cs` enthält Dateioperationen (`read_file`, `write_file`, `list_files` etc.).
+- Kommentar behauptet Sandbox-Scope, Implementierung zeigt aktuell keine harte Pfad-Isolation auf OS-Ebene.
+- **ReferenceScanner:** lädt Assemblies via `Assembly.LoadFrom` aus Dateisystemscan; keine AppDomain/Process-Isolation.
+- Damit gilt: aktuelle Isolation ist primär **kooperativ/logisch**, nicht sicherheitstechnisch stark.
+
+### Verbindliche Einschränkungen für neue Bindings
+- Bridge-Code darf Core/Unity-Aufrufe nur über freigegebene API/Hooks ausführen.
+- Keine direkten unsicheren Pointer-Operationen außerhalb definierter FFI-Wrapper.
+- Untrusted Script/Native Mods als potenziell fehlerhaft behandeln (guard clauses + timeout/backpressure + exception fences).
+- Für echte Sandbox-Anforderungen ist Prozessisolation (separater Host) nötig; im aktuellen In-Process-Modell nicht garantiert.
+
+---
+
+## Appendix: Operative Leitplanken für Bridge-Autoren
+
+- **Schichtdisziplin:**
+ - Mod/Bridge → `greg.*` Hook/API,
+ - kein direkter Unity-Objektzugriff als öffentliches Contract.
+- **ABI-Disziplin:**
+ - `StructLayout.Sequential`, feste Feldtypen, versionierte Erweiterung.
+- **Fehlerdisziplin:**
+ - Jede Grenzstelle (`FFI`, `JSON parse`, `network`) mit `try/catch` + Logging.
+- **Lifecycle-Disziplin:**
+ - `init -> update/fixed_update/gui -> shutdown` strikt einhalten.
+- **Kompatibilität:**
+ - Runtime-Ziel bleibt `.NET 6` (IL2CPP/MelonLoader-kompatibel).
diff --git a/pre-release/Esprima.dll b/pre-release/Esprima.dll
deleted file mode 100644
index e016f3c4..00000000
Binary files a/pre-release/Esprima.dll and /dev/null differ
diff --git a/pre-release/Jint.dll b/pre-release/Jint.dll
deleted file mode 100644
index 4f774c95..00000000
Binary files a/pre-release/Jint.dll and /dev/null differ
diff --git a/pre-release/MoonSharp.Interpreter.dll b/pre-release/MoonSharp.Interpreter.dll
deleted file mode 100644
index 90645a94..00000000
Binary files a/pre-release/MoonSharp.Interpreter.dll and /dev/null differ
diff --git a/pre-release/gregCore.dll b/pre-release/gregCore.dll
deleted file mode 100644
index a350db80..00000000
Binary files a/pre-release/gregCore.dll and /dev/null differ
diff --git a/pre-release/greg_api.h b/pre-release/greg_api.h
deleted file mode 100644
index 211a9977..00000000
--- a/pre-release/greg_api.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef GREG_API_H
-#define GREG_API_H
-
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
- uint32_t api_version;
- void (*log_info)(const char* msg);
- void (*log_warning)(const char* msg);
- void (*log_error)(const char* msg);
- double (*get_player_money)();
- void (*set_player_money)(double value);
- float (*get_time_scale)();
- void (*set_time_scale)(float value);
- uint32_t (*get_server_count)();
- uint32_t (*get_rack_count)();
- const char* (*get_current_scene)();
-
- // v2
- double (*get_player_xp)();
- void (*set_player_xp)(double value);
- double (*get_player_reputation)();
- void (*set_player_reputation)(double value);
- float (*get_time_of_day)();
- uint32_t (*get_day)();
- float (*get_seconds_in_full_day)();
- void (*set_seconds_in_full_day)(float value);
- uint32_t (*get_switch_count)();
- uint32_t (*get_satisfied_customer_count)();
-
- // v3
- void (*set_netwatch_enabled)(uint32_t enabled);
- uint32_t (*is_netwatch_enabled)();
- uint32_t (*get_netwatch_stats)();
-
- // v4
- uint32_t (*get_broken_server_count)();
- uint32_t (*get_broken_switch_count)();
- uint32_t (*get_eol_server_count)();
- uint32_t (*get_eol_switch_count)();
- uint32_t (*get_free_technician_count)();
- uint32_t (*get_total_technician_count)();
- int32_t (*dispatch_repair_server)();
- int32_t (*dispatch_repair_switch)();
- int32_t (*dispatch_replace_server)();
- int32_t (*dispatch_replace_switch)();
-
- // v5
- int32_t (*register_custom_employee)(const char* id, const char* name, const char* desc, float salary, float req_rep, uint32_t confirm);
- uint32_t (*is_custom_employee_hired)(const char* id);
- int32_t (*fire_custom_employee)(const char* id);
- int32_t (*register_salary)(int32_t monthly);
-
- // v6
- int32_t (*show_notification)(const char* msg);
- float (*get_money_per_second)();
- float (*get_expenses_per_second)();
- float (*get_xp_per_second)();
- uint32_t (*is_game_paused)();
- void (*set_game_paused)(uint32_t paused);
- int32_t (*get_difficulty)();
- int32_t (*trigger_save)();
-
- // v7
- uint64_t (*steam_get_my_id)();
- const char* (*steam_get_friend_name)(uint64_t id);
- // ... other steam functions ...
- void (*reserved[15])(); // Padding for v7 overflow
- void (*get_player_position)(float* x, float* y, float* z, float* ry);
-
- // v8
- const char* (*payload_get_string)(void* payload, const char* field, const char* fallback);
- void (*subscribe_event)(const char* hook, void (*handler)(void*), const char* mod_id);
- void (*gui_begin_panel)(const char* id, float x, float y, float w, float h);
- void (*gui_label)(const char* text);
- void (*gui_end_panel)();
- int32_t (*raycast_forward)(float max_dist, const char** out_name, float* out_dist, float* out_x, float* out_y, float* out_z);
- void (*publish_tick)(float dt, int32_t frame);
-} greg_api_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/pre-release/greg_hooks.json b/pre-release/greg_hooks.json
deleted file mode 100644
index 524db023..00000000
--- a/pre-release/greg_hooks.json
+++ /dev/null
@@ -1,11108 +0,0 @@
-{
- "version": 2,
- "description": "Single source of truth for gregFramework hooks. Schema: greg..",
- "generatedFrom": "MergedCode.md (Assembly-CSharp IL2CPP Dump)",
- "legacyPrefixes": [],
- "classInventorySummary": {
- "totalClasses": 135,
- "totalHooks": 852
- },
- "hooks": [
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.OnEnable",
- "patchTarget": "Il2Cpp.ActionKeyHint::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.OnEnable",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ActionKeyHint",
- "name": "greg.SYSTEM.ComponentEnabled.ActionKeyHint"
- },
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.DelayedUpdateUI",
- "patchTarget": "Il2Cpp.ActionKeyHint::IEnumerator DelayedUpdateUI()",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.DelayedUpdateUI",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DelayedUpdateUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.OnDisable",
- "patchTarget": "Il2Cpp.ActionKeyHint::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.OnDisable",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ActionKeyHint",
- "name": "greg.SYSTEM.ComponentDisabled.ActionKeyHint"
- },
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.OnValidate",
- "patchTarget": "Il2Cpp.ActionKeyHint::void OnValidate()",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.OnValidate",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ActionKeyHint",
- "name": "greg.SYSTEM.OnValidate.ActionKeyHint"
- },
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.GetBindingInfo",
- "patchTarget": "Il2Cpp.ActionKeyHint::void GetBindingInfo()",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.GetBindingInfo",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ActionKeyHint",
- "name": "greg.SYSTEM.GetBindingInfo.ActionKeyHint"
- },
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.UpdateUI",
- "patchTarget": "Il2Cpp.ActionKeyHint::void UpdateUI()",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.UpdateUI",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ActionKeyHint",
- "name": "greg.SYSTEM.UIChanged.ActionKeyHint"
- },
- {
- "legacy": "deprecated.SYSTEM.ActionKeyHint.CustomKey",
- "patchTarget": "Il2Cpp.ActionKeyHint::void CustomKey(InputAction action, string _customText)",
- "strategy": "Postfix",
- "description": "Interop target ActionKeyHint.CustomKey",
- "payloadSchema": {
- "targetType": "ActionKeyHint",
- "isStatic": false,
- "action": "InputAction",
- "_customText": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CustomKey"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.OnEnable",
- "patchTarget": "Il2Cpp.AICharacterControl::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.OnEnable",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterControl",
- "name": "greg.SYSTEM.ComponentEnabled.AICharacterControl"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.OnCreated",
- "patchTarget": "Il2Cpp.AICharacterControl::void OnCreated(UMAData umadata)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.OnCreated",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "umadata": "UMAData",
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterControl_UMADataumadata",
- "name": "greg.SYSTEM.OnCreated.AICharacterControl_UMADataumadata"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.StartingAnimation",
- "patchTarget": "Il2Cpp.AICharacterControl::void StartingAnimation()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.StartingAnimation",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.StartingAnimation"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.OnDisable",
- "patchTarget": "Il2Cpp.AICharacterControl::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.OnDisable",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterControl",
- "name": "greg.SYSTEM.ComponentDisabled.AICharacterControl"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.OnDestroy",
- "patchTarget": "Il2Cpp.AICharacterControl::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.OnDestroy",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterControl",
- "name": "greg.SYSTEM.OnDestroy.AICharacterControl"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.Start",
- "patchTarget": "Il2Cpp.AICharacterControl::IEnumerator Start()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.Start",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterControl",
- "name": "greg.SYSTEM.ComponentInitialized.AICharacterControl"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.SetTarget",
- "patchTarget": "Il2Cpp.AICharacterControl::void SetTarget(Vector3 target)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.SetTarget",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "target": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TargetSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.AgentReachTarget",
- "patchTarget": "Il2Cpp.AICharacterControl::bool AgentReachTarget()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.AgentReachTarget",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AgentReachTarget"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.moveBack",
- "patchTarget": "Il2Cpp.AICharacterControl::void moveBack(Vector3 direction)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.moveBack",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "direction": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.moveBack"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.GotoNextPoint",
- "patchTarget": "Il2Cpp.AICharacterControl::void GotoNextPoint(Il2CppReferenceArray _waypoints)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.GotoNextPoint",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "_waypoints": "Il2CppReferenceArray"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GotoNextPoint"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.SetStopLoopingDestinationPoints",
- "patchTarget": "Il2Cpp.AICharacterControl::void SetStopLoopingDestinationPoints()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.SetStopLoopingDestinationPoints",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.StopLoopingDestinationPointsSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterControl.AnimSit",
- "patchTarget": "Il2Cpp.AICharacterControl::void AnimSit(bool active)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterControl.AnimSit",
- "payloadSchema": {
- "targetType": "AICharacterControl",
- "isStatic": false,
- "active": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AnimSit"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.Start",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void Start()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.Start",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterExpressions",
- "name": "greg.SYSTEM.ComponentInitialized.AICharacterExpressions"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.OnDestroy",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.OnDestroy",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterExpressions",
- "name": "greg.SYSTEM.OnDestroy.AICharacterExpressions"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.OnCreated",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void OnCreated(UMAData umadata)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.OnCreated",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "umadata": "UMAData",
- "hookSubject": "string"
- },
- "hookSubject": "AICharacterExpressions_UMADataumadata",
- "name": "greg.SYSTEM.OnCreated.AICharacterExpressions_UMADataumadata"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.Talk",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void Talk(string sentence)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.Talk",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "sentence": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Talk"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.Talking",
- "patchTarget": "Il2Cpp.AICharacterExpressions::IEnumerator Talking(List _syllables)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.Talking",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "_syllables": "List"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Talking"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_none",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_none(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_none",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_none"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_A",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_A(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_A",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_A"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_O",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_O(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_O",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_O"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_U",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_U(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_U",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_U"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_BPM",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_BPM(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_BPM",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_BPM"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_FV",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_FV(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_FV",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_FV"
- },
- {
- "legacy": "deprecated.SYSTEM.AICharacterExpressions.MouthShape_CDG",
- "patchTarget": "Il2Cpp.AICharacterExpressions::void MouthShape_CDG(float t)",
- "strategy": "Postfix",
- "description": "Interop target AICharacterExpressions.MouthShape_CDG",
- "payloadSchema": {
- "targetType": "AICharacterExpressions",
- "isStatic": false,
- "t": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MouthShape_CDG"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.SetCell",
- "patchTarget": "Il2Cpp.AssetManagement::virtual void SetCell(ICell cell, int index)",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.SetCell",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false,
- "cell": "ICell",
- "index": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CellSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.OnEnable",
- "patchTarget": "Il2Cpp.AssetManagement::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.OnEnable",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AssetManagement",
- "name": "greg.SYSTEM.ComponentEnabled.AssetManagement"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonFilterAll",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonFilterAll()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonFilterAll",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFilterAll"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonFilterSwitches",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonFilterSwitches()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonFilterSwitches",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFilterSwitches"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonFilterServers",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonFilterServers()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonFilterServers",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFilterServers"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonFilterBroken",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonFilterBroken()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonFilterBroken",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFilterBroken"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonFilterEOL",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonFilterEOL()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonFilterEOL",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFilterEOL"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonFilterOff",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonFilterOff()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonFilterOff",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFilterOff"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.SendTechnician",
- "patchTarget": "Il2Cpp.AssetManagement::void SendTechnician(NetworkSwitch networkSwitch, Server server)",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.SendTechnician",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch",
- "server": "Server"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TechnicianDispatched"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonConfirmSendingTechnician",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonConfirmSendingTechnician()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonConfirmSendingTechnician",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonConfirmSendingTechnician"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.ButtonCancelSendingTechnician",
- "patchTarget": "Il2Cpp.AssetManagement::void ButtonCancelSendingTechnician()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.ButtonCancelSendingTechnician",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCancelSendingTechnician"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagement.UpdateTechnicianInformation",
- "patchTarget": "Il2Cpp.AssetManagement::void UpdateTechnicianInformation()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagement.UpdateTechnicianInformation",
- "payloadSchema": {
- "targetType": "AssetManagement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TechnicianInformationChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagementDeviceLine.SetupLine",
- "patchTarget": "Il2Cpp.AssetManagementDeviceLine::void SetupLine(AssetManagementDeviceLineData data, int index)",
- "strategy": "Postfix",
- "description": "Interop target AssetManagementDeviceLine.SetupLine",
- "payloadSchema": {
- "targetType": "AssetManagementDeviceLine",
- "isStatic": false,
- "data": "AssetManagementDeviceLineData",
- "index": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.upLineSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagementDeviceLine.ButtonClearWarningSign",
- "patchTarget": "Il2Cpp.AssetManagementDeviceLine::void ButtonClearWarningSign()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagementDeviceLine.ButtonClearWarningSign",
- "payloadSchema": {
- "targetType": "AssetManagementDeviceLine",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonClearWarningSign"
- },
- {
- "legacy": "deprecated.SYSTEM.AssetManagementDeviceLine.ButtonSendTechnician",
- "patchTarget": "Il2Cpp.AssetManagementDeviceLine::void ButtonSendTechnician()",
- "strategy": "Postfix",
- "description": "Interop target AssetManagementDeviceLine.ButtonSendTechnician",
- "payloadSchema": {
- "targetType": "AssetManagementDeviceLine",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonSendTechnician"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.Awake",
- "patchTarget": "Il2Cpp.AudioManager::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.Awake",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AudioManager",
- "name": "greg.SYSTEM.ComponentInitialized.AudioManager"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.SetMusic",
- "patchTarget": "Il2Cpp.AudioManager::void SetMusic(int _clipUID)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.SetMusic",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "_clipUID": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MusicSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.PlayEffectAudioClip",
- "patchTarget": "Il2Cpp.AudioManager::void PlayEffectAudioClip(AudioClip audioClip, float volume = 1f, float delayed = 0f)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.PlayEffectAudioClip",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "audioClip": "AudioClip",
- "volume": "float",
- "delayed": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayEffectAudioClip"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.SetMasterVolume",
- "patchTarget": "Il2Cpp.AudioManager::void SetMasterVolume(float _volume)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.SetMasterVolume",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "_volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MasterVolumeSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.SetEffectsVolume",
- "patchTarget": "Il2Cpp.AudioManager::void SetEffectsVolume(float _volume)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.SetEffectsVolume",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "_volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.EffectsVolumeSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.SetMusicVolume",
- "patchTarget": "Il2Cpp.AudioManager::void SetMusicVolume(float _volume)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.SetMusicVolume",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "_volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MusicVolumeSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.SetRacksVolume",
- "patchTarget": "Il2Cpp.AudioManager::void SetRacksVolume(float _volume)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.SetRacksVolume",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "_volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RacksVolumeSet"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.FadeOut",
- "patchTarget": "Il2Cpp.AudioManager::IEnumerator FadeOut(AudioSource audioSource, float FadeTime)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.FadeOut",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "audioSource": "AudioSource",
- "FadeTime": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FadeOut"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.FadeIn",
- "patchTarget": "Il2Cpp.AudioManager::IEnumerator FadeIn(AudioSource audioSource, float FadeTime, float finalVolume)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.FadeIn",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "audioSource": "AudioSource",
- "FadeTime": "float",
- "finalVolume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FadeIn"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.FadeOut_FadeIn",
- "patchTarget": "Il2Cpp.AudioManager::IEnumerator FadeOut_FadeIn(AudioSource audioSource, float FadeTime, float finalVolume, AudioClip newAudioClip)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.FadeOut_FadeIn",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "audioSource": "AudioSource",
- "FadeTime": "float",
- "finalVolume": "float",
- "newAudioClip": "AudioClip"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FadeOut_FadeIn"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.PlayRandomRJ45Clip",
- "patchTarget": "Il2Cpp.AudioManager::void PlayRandomRJ45Clip()",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.PlayRandomRJ45Clip",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayRandomRJ45Clip"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.PlayRandomImpactClip",
- "patchTarget": "Il2Cpp.AudioManager::void PlayRandomImpactClip(float _volume = 0.5f)",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.PlayRandomImpactClip",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false,
- "_volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayRandomImpactClip"
- },
- {
- "legacy": "deprecated.SYSTEM.AudioManager.PlayRackDoorOpen",
- "patchTarget": "Il2Cpp.AudioManager::void PlayRackDoorOpen()",
- "strategy": "Postfix",
- "description": "Interop target AudioManager.PlayRackDoorOpen",
- "payloadSchema": {
- "targetType": "AudioManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayRackDoorOpen"
- },
- {
- "legacy": "deprecated.SYSTEM.AutoDisable.OnEnable",
- "patchTarget": "Il2Cpp.AutoDisable::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target AutoDisable.OnEnable",
- "payloadSchema": {
- "targetType": "AutoDisable",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AutoDisable",
- "name": "greg.SYSTEM.ComponentEnabled.AutoDisable"
- },
- {
- "legacy": "deprecated.SYSTEM.AutoDisable.TurnOffAfterXseconds",
- "patchTarget": "Il2Cpp.AutoDisable::IEnumerator TurnOffAfterXseconds()",
- "strategy": "Postfix",
- "description": "Interop target AutoDisable.TurnOffAfterXseconds",
- "payloadSchema": {
- "targetType": "AutoDisable",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TurnOffAfterXseconds"
- },
- {
- "legacy": "deprecated.SYSTEM.AutoScrollRect.OnEnable",
- "patchTarget": "Il2Cpp.AutoScrollRect::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target AutoScrollRect.OnEnable",
- "payloadSchema": {
- "targetType": "AutoScrollRect",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "AutoScrollRect",
- "name": "greg.SYSTEM.ComponentEnabled.AutoScrollRect"
- },
- {
- "legacy": "deprecated.SYSTEM.AutoScrollRect.ScrollAuto",
- "patchTarget": "Il2Cpp.AutoScrollRect::void ScrollAuto()",
- "strategy": "Postfix",
- "description": "Interop target AutoScrollRect.ScrollAuto",
- "payloadSchema": {
- "targetType": "AutoScrollRect",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ScrollAuto"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.Awake",
- "patchTarget": "Il2Cpp.BalanceSheet::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.Awake",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "BalanceSheet_caf9cccea0",
- "name": "greg.SYSTEM.ComponentInitialized.BalanceSheet_caf9cccea0"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.Start",
- "patchTarget": "Il2Cpp.BalanceSheet::void Start()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.Start",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "BalanceSheet_3bb9a477a0",
- "name": "greg.SYSTEM.ComponentInitialized.BalanceSheet_3bb9a477a0"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.OnDestroy",
- "patchTarget": "Il2Cpp.BalanceSheet::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.OnDestroy",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "BalanceSheet",
- "name": "greg.SYSTEM.OnDestroy.BalanceSheet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.RegisterSalary",
- "patchTarget": "Il2Cpp.BalanceSheet::void RegisterSalary(int monthlySalary)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.RegisterSalary",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "monthlySalary": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RegisterSalary"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.TrackFinances",
- "patchTarget": "Il2Cpp.BalanceSheet::IEnumerator TrackFinances()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.TrackFinances",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TrackFinances"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.CountFailingApps",
- "patchTarget": "Il2Cpp.BalanceSheet::int CountFailingApps(CustomerBase cb)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.CountFailingApps",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "cb": "CustomerBase"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CountFailingApps"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.SaveSnapshot",
- "patchTarget": "Il2Cpp.BalanceSheet::void SaveSnapshot(int month, DateTime snapshotTime)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.SaveSnapshot",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "month": "int",
- "snapshotTime": "DateTime"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SnapshotSaved"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.FillInBalanceSheet",
- "patchTarget": "Il2Cpp.BalanceSheet::void FillInBalanceSheet()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.FillInBalanceSheet",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FillInBalanceSheet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.AddRow",
- "patchTarget": "Il2Cpp.BalanceSheet::void AddRow(string name, float revenue, float penalties, float total, Sprite logo = null)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.AddRow",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "name": "string",
- "revenue": "float",
- "penalties": "float",
- "total": "float",
- "logo": "Sprite"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RowAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.AddSalaryRow",
- "patchTarget": "Il2Cpp.BalanceSheet::void AddSalaryRow(float salaryExpense)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.AddSalaryRow",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "salaryExpense": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SalaryRowAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.AddTotalRow",
- "patchTarget": "Il2Cpp.BalanceSheet::void AddTotalRow(float revenue, float penalties, float total)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.AddTotalRow",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "revenue": "float",
- "penalties": "float",
- "total": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TotalRowAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.AddHeaderRow",
- "patchTarget": "Il2Cpp.BalanceSheet::void AddHeaderRow()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.AddHeaderRow",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HeaderRowAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.AddSectionTitle",
- "patchTarget": "Il2Cpp.BalanceSheet::void AddSectionTitle(string title)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.AddSectionTitle",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "title": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SectionTitleAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.InstantiateRow",
- "patchTarget": "Il2Cpp.BalanceSheet::BalanceSheetRow InstantiateRow()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.InstantiateRow",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InstantiateRow"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.ClearRows",
- "patchTarget": "Il2Cpp.BalanceSheet::void ClearRows()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.ClearRows",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClearRows"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.LoadFromSave",
- "patchTarget": "Il2Cpp.BalanceSheet::void LoadFromSave()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.LoadFromSave",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FromSaveLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheet.RestoreRecord",
- "patchTarget": "Il2Cpp.BalanceSheet::BalanceSheet.CustomerRecord RestoreRecord(CustomerRecordSaveData recData)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheet.RestoreRecord",
- "payloadSchema": {
- "targetType": "BalanceSheet",
- "isStatic": false,
- "recData": "CustomerRecordSaveData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RestoreRecord"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheetRow.SetData",
- "patchTarget": "Il2Cpp.BalanceSheetRow::void SetData(string customerName, string revenue, string penalties, string total, Sprite customerLogo = null)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheetRow.SetData",
- "payloadSchema": {
- "targetType": "BalanceSheetRow",
- "isStatic": false,
- "customerName": "string",
- "revenue": "string",
- "penalties": "string",
- "total": "string",
- "customerLogo": "Sprite"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DataSet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheetRow.SetAsHeader",
- "patchTarget": "Il2Cpp.BalanceSheetRow::void SetAsHeader()",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheetRow.SetAsHeader",
- "payloadSchema": {
- "targetType": "BalanceSheetRow",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AsHeaderSet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheetRow.SetAsSalaryRow",
- "patchTarget": "Il2Cpp.BalanceSheetRow::void SetAsSalaryRow(float salaryExpense)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheetRow.SetAsSalaryRow",
- "payloadSchema": {
- "targetType": "BalanceSheetRow",
- "isStatic": false,
- "salaryExpense": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AsSalaryRowSet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheetRow.SetAsTotalRow",
- "patchTarget": "Il2Cpp.BalanceSheetRow::void SetAsTotalRow(float revenue, float penalties, float total)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheetRow.SetAsTotalRow",
- "payloadSchema": {
- "targetType": "BalanceSheetRow",
- "isStatic": false,
- "revenue": "float",
- "penalties": "float",
- "total": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AsTotalRowSet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheetRow.SetAsSectionTitle",
- "patchTarget": "Il2Cpp.BalanceSheetRow::void SetAsSectionTitle(string title)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheetRow.SetAsSectionTitle",
- "payloadSchema": {
- "targetType": "BalanceSheetRow",
- "isStatic": false,
- "title": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AsSectionTitleSet"
- },
- {
- "legacy": "deprecated.SYSTEM.BalanceSheetRow.SetBackgroundColor",
- "patchTarget": "Il2Cpp.BalanceSheetRow::void SetBackgroundColor(Color color)",
- "strategy": "Postfix",
- "description": "Interop target BalanceSheetRow.SetBackgroundColor",
- "payloadSchema": {
- "targetType": "BalanceSheetRow",
- "isStatic": false,
- "color": "Color"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.BackgroundColorSet"
- },
- {
- "legacy": "deprecated.NETWORK.CableIDComponent.BoxIl2CppObject",
- "patchTarget": "Il2Cpp.CableIDComponent::Object BoxIl2CppObject()",
- "strategy": "Postfix",
- "description": "Interop target CableIDComponent.BoxIl2CppObject",
- "payloadSchema": {
- "targetType": "CableIDComponent",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CableIDComponent",
- "name": "greg.NETWORK.BoxIl2CppObject.CableIDComponent"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.Start",
- "patchTarget": "Il2Cpp.CableLink::void Start()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.Start",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CableLink",
- "name": "greg.NETWORK.ComponentInitialized.CableLink"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.SetConnectionSpeed",
- "patchTarget": "Il2Cpp.CableLink::void SetConnectionSpeed(float speed)",
- "strategy": "Postfix",
- "description": "Interop target CableLink.SetConnectionSpeed",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false,
- "speed": "float"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ConnectionSpeedSet"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.InsertSFP",
- "patchTarget": "Il2Cpp.CableLink::void InsertSFP(float speed, int type, SFPModule module)",
- "strategy": "Postfix",
- "description": "Interop target CableLink.InsertSFP",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false,
- "speed": "float",
- "type": "int",
- "module": "SFPModule"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.InsertSFP"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.RemoveSFP",
- "patchTarget": "Il2Cpp.CableLink::void RemoveSFP()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.RemoveSFP",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveSFPRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.InteractOnClick",
- "patchTarget": "Il2Cpp.CableLink::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.InteractOnClick",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CableLink",
- "name": "greg.NETWORK.InteractOnClick.CableLink"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.IsAllowedToDoSecondAction",
- "patchTarget": "Il2Cpp.CableLink::override bool IsAllowedToDoSecondAction()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.IsAllowedToDoSecondAction",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.IsAllowedToDoSecondAction"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.SecondActionOnClick",
- "patchTarget": "Il2Cpp.CableLink::override void SecondActionOnClick()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.SecondActionOnClick",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.SecondActionOnClick"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.InteractOnHover",
- "patchTarget": "Il2Cpp.CableLink::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target CableLink.InteractOnHover",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "CableLink_RaycastHithit",
- "name": "greg.NETWORK.InteractOnHover.CableLink_RaycastHithit"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.OnHoverOver",
- "patchTarget": "Il2Cpp.CableLink::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.OnHoverOver",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.OnHoverOver"
- },
- {
- "legacy": "deprecated.NETWORK.CableLink.CreateRopeAttachPoint",
- "patchTarget": "Il2Cpp.CableLink::void CreateRopeAttachPoint()",
- "strategy": "Postfix",
- "description": "Interop target CableLink.CreateRopeAttachPoint",
- "payloadSchema": {
- "targetType": "CableLink",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CreateRopeAttachPoint"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.Awake",
- "patchTarget": "Il2Cpp.CablePositions::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.Awake",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CablePositions_51054a547e",
- "name": "greg.NETWORK.ComponentInitialized.CablePositions_51054a547e"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.Start",
- "patchTarget": "Il2Cpp.CablePositions::void Start()",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.Start",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CablePositions_3d873a93df",
- "name": "greg.NETWORK.ComponentInitialized.CablePositions_3d873a93df"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.ClearAllCables",
- "patchTarget": "Il2Cpp.CablePositions::void ClearAllCables()",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.ClearAllCables",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ClearAllCables"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.LoadCable",
- "patchTarget": "Il2Cpp.CablePositions::void LoadCable(CableSaveData cableData)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.LoadCable",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableData": "CableSaveData"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CableLoaded"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.CreateNewCable",
- "patchTarget": "Il2Cpp.CablePositions::int CreateNewCable()",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.CreateNewCable",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CreateNewCable"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.CreateNewReverseCable",
- "patchTarget": "Il2Cpp.CablePositions::int CreateNewReverseCable()",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.CreateNewReverseCable",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CreateNewReverseCable"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.AssignNewPosition",
- "patchTarget": "Il2Cpp.CablePositions::void AssignNewPosition(int cableId, Transform linkTransform, bool isStartPoint = false, bool isEndPoint = false, CableLink.TypeOfLink typeOfLink = CableLink.TypeOfLink.None, string serverID = null)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.AssignNewPosition",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int",
- "linkTransform": "Transform",
- "isStartPoint": "bool",
- "isEndPoint": "bool",
- "typeOfLink": "CableLink.TypeOfLink",
- "serverID": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.AssignNewPosition"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.GenerateFinalPath",
- "patchTarget": "Il2Cpp.CablePositions::void GenerateFinalPath(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.GenerateFinalPath",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.GenerateFinalPath"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.GenerateCornerBend",
- "patchTarget": "Il2Cpp.CablePositions::IEnumerable GenerateCornerBend(Vector3 p_prev, Vector3 p_curr, Vector3 p_next, Transform t_curr)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.GenerateCornerBend",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "p_prev": "Vector3",
- "p_curr": "Vector3",
- "p_next": "Vector3",
- "t_curr": "Transform"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.GenerateCornerBend"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.GenerateBentSegment",
- "patchTarget": "Il2Cpp.CablePositions::IEnumerable GenerateBentSegment(Vector3 connectionPoint, Vector3 nextPoint, Transform linkTransform, bool isStart)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.GenerateBentSegment",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "connectionPoint": "Vector3",
- "nextPoint": "Vector3",
- "linkTransform": "Transform",
- "isStart": "bool"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.GenerateBentSegment"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.RedrawCable",
- "patchTarget": "Il2Cpp.CablePositions::void RedrawCable(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.RedrawCable",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.RedrawCable"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.CreateTubeMesh",
- "patchTarget": "Il2Cpp.CablePositions::Mesh CreateTubeMesh(List path)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.CreateTubeMesh",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "path": "List"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CreateTubeMesh"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.RemovePosition",
- "patchTarget": "Il2Cpp.CablePositions::void RemovePosition(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.RemovePosition",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ovePositionRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.RemoveLastPosition",
- "patchTarget": "Il2Cpp.CablePositions::Transform RemoveLastPosition(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.RemoveLastPosition",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveLastPositionRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.AssignEntity",
- "patchTarget": "Il2Cpp.CablePositions::void AssignEntity(int cableId, Entity entity)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.AssignEntity",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int",
- "entity": "Entity"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.AssignEntity"
- },
- {
- "legacy": "deprecated.NETWORK.CablePositions.IsCableComplete",
- "patchTarget": "Il2Cpp.CablePositions::bool IsCableComplete(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target CablePositions.IsCableComplete",
- "payloadSchema": {
- "targetType": "CablePositions",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.IsCableComplete"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.Start",
- "patchTarget": "Il2Cpp.CableSpinner::void Start()",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.Start",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CableSpinner",
- "name": "greg.NETWORK.ComponentInitialized.CableSpinner"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.ApplyColor",
- "patchTarget": "Il2Cpp.CableSpinner::void ApplyColor(Color color, string rgbString)",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.ApplyColor",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false,
- "color": "Color",
- "rgbString": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ApplyColor"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.LoadSavedColor",
- "patchTarget": "Il2Cpp.CableSpinner::void LoadSavedColor()",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.LoadSavedColor",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.SavedColorLoaded"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.InteractOnClick",
- "patchTarget": "Il2Cpp.CableSpinner::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.InteractOnClick",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CableSpinner",
- "name": "greg.NETWORK.InteractOnClick.CableSpinner"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.LowerAmountOfCable",
- "patchTarget": "Il2Cpp.CableSpinner::void LowerAmountOfCable(float length)",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.LowerAmountOfCable",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false,
- "length": "float"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.LowerAmountOfCable"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.UpdateText",
- "patchTarget": "Il2Cpp.CableSpinner::void UpdateText()",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.UpdateText",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.TextChanged"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.UpdateCurrentLength",
- "patchTarget": "Il2Cpp.CableSpinner::void UpdateCurrentLength(float length)",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.UpdateCurrentLength",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false,
- "length": "float"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CurrentLengthChanged"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.IsCableLenghtEnough",
- "patchTarget": "Il2Cpp.CableSpinner::bool IsCableLenghtEnough()",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.IsCableLenghtEnough",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.IsCableLenghtEnough"
- },
- {
- "legacy": "deprecated.NETWORK.CableSpinner.DropObject",
- "patchTarget": "Il2Cpp.CableSpinner::override void DropObject()",
- "strategy": "Postfix",
- "description": "Interop target CableSpinner.DropObject",
- "payloadSchema": {
- "targetType": "CableSpinner",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.DroppedObject"
- },
- {
- "legacy": "deprecated.SYSTEM.ChatController.OnEnable",
- "patchTarget": "Il2Cpp.ChatController::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target ChatController.OnEnable",
- "payloadSchema": {
- "targetType": "ChatController",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ChatController",
- "name": "greg.SYSTEM.ComponentEnabled.ChatController"
- },
- {
- "legacy": "deprecated.SYSTEM.ChatController.OnDisable",
- "patchTarget": "Il2Cpp.ChatController::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target ChatController.OnDisable",
- "payloadSchema": {
- "targetType": "ChatController",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ChatController",
- "name": "greg.SYSTEM.ComponentDisabled.ChatController"
- },
- {
- "legacy": "deprecated.SYSTEM.ChatController.AddToChatOutput",
- "patchTarget": "Il2Cpp.ChatController::void AddToChatOutput(string newText)",
- "strategy": "Postfix",
- "description": "Interop target ChatController.AddToChatOutput",
- "payloadSchema": {
- "targetType": "ChatController",
- "isStatic": false,
- "newText": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ToChatOutputAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.CheckIfTouchingWall.Awake",
- "patchTarget": "Il2Cpp.CheckIfTouchingWall::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target CheckIfTouchingWall.Awake",
- "payloadSchema": {
- "targetType": "CheckIfTouchingWall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CheckIfTouchingWall_309def7b2d",
- "name": "greg.SYSTEM.ComponentInitialized.CheckIfTouchingWall_309def7b2d"
- },
- {
- "legacy": "deprecated.SYSTEM.CheckIfTouchingWall.Start",
- "patchTarget": "Il2Cpp.CheckIfTouchingWall::void Start()",
- "strategy": "Postfix",
- "description": "Interop target CheckIfTouchingWall.Start",
- "payloadSchema": {
- "targetType": "CheckIfTouchingWall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CheckIfTouchingWall_9ff7e468a1",
- "name": "greg.SYSTEM.ComponentInitialized.CheckIfTouchingWall_9ff7e468a1"
- },
- {
- "legacy": "deprecated.SYSTEM.CheckIfTouchingWall.OnDestroy",
- "patchTarget": "Il2Cpp.CheckIfTouchingWall::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target CheckIfTouchingWall.OnDestroy",
- "payloadSchema": {
- "targetType": "CheckIfTouchingWall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CheckIfTouchingWall",
- "name": "greg.SYSTEM.OnDestroy.CheckIfTouchingWall"
- },
- {
- "legacy": "deprecated.SYSTEM.CheckIfTouchingWall.PerformOverlapCheck",
- "patchTarget": "Il2Cpp.CheckIfTouchingWall::void PerformOverlapCheck()",
- "strategy": "Postfix",
- "description": "Interop target CheckIfTouchingWall.PerformOverlapCheck",
- "payloadSchema": {
- "targetType": "CheckIfTouchingWall",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PerformOverlapCheck"
- },
- {
- "legacy": "deprecated.SYSTEM.CheckIfTouchingWall.DelayedOverlapCheck",
- "patchTarget": "Il2Cpp.CheckIfTouchingWall::IEnumerator DelayedOverlapCheck()",
- "strategy": "Postfix",
- "description": "Interop target CheckIfTouchingWall.DelayedOverlapCheck",
- "payloadSchema": {
- "targetType": "CheckIfTouchingWall",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DelayedOverlapCheck"
- },
- {
- "legacy": "deprecated.SYSTEM.CheckIfTouchingWall.SetRenderersEnabled",
- "patchTarget": "Il2Cpp.CheckIfTouchingWall::void SetRenderersEnabled(bool isEnabled)",
- "strategy": "Postfix",
- "description": "Interop target CheckIfTouchingWall.SetRenderersEnabled",
- "payloadSchema": {
- "targetType": "CheckIfTouchingWall",
- "isStatic": false,
- "isEnabled": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RenderersEnabledSet"
- },
- {
- "legacy": "deprecated.SYSTEM.ColorSerializationSurrogate.SetObjectData",
- "patchTarget": "Il2Cpp.ColorSerializationSurrogate::virtual Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)",
- "strategy": "Postfix",
- "description": "Interop target ColorSerializationSurrogate.SetObjectData",
- "payloadSchema": {
- "targetType": "ColorSerializationSurrogate",
- "isStatic": false,
- "obj": "Object",
- "info": "SerializationInfo",
- "context": "StreamingContext",
- "selector": "ISurrogateSelector",
- "hookSubject": "string"
- },
- "hookSubject": "ColorSerializationSurrogate_ObjectobjSerializationInfoinfoStreamingC",
- "name": "greg.SYSTEM.ObjectDataSet.ColorSerializationSurrogate_ObjectobjSerializationInfoinfoStreamingC"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.Awake",
- "patchTarget": "Il2Cpp.ComputerShop::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.Awake",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ComputerShop",
- "name": "greg.SYSTEM.ComponentInitialized.ComputerShop"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.InteractOnClick",
- "patchTarget": "Il2Cpp.ComputerShop::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.InteractOnClick",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ComputerShop",
- "name": "greg.SYSTEM.InteractOnClick.ComputerShop"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonShopScreen",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonShopScreen()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonShopScreen",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonShopScreen"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonNetworkMap",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonNetworkMap()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonNetworkMap",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonNetworkMap"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonAssetManagementScreen",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonAssetManagementScreen()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonAssetManagementScreen",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonAssetManagementScreen"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonBalanceSheetScreen",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonBalanceSheetScreen()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonBalanceSheetScreen",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonBalanceSheetScreen"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonHireScreen",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonHireScreen()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonHireScreen",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonHireScreen"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonReturnMainScreen",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonReturnMainScreen()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonReturnMainScreen",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonReturnMainScreen"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.InteractOnHover",
- "patchTarget": "Il2Cpp.ComputerShop::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.InteractOnHover",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "ComputerShop_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.ComputerShop_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.OnHoverOver",
- "patchTarget": "Il2Cpp.ComputerShop::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.OnHoverOver",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ComputerShop",
- "name": "greg.SYSTEM.OnHoverOver.ComputerShop"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.FreeUpSpawnPoint",
- "patchTarget": "Il2Cpp.ComputerShop::void FreeUpSpawnPoint(int spawnIndex)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.FreeUpSpawnPoint",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "spawnIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FreeUpSpawnPoint"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonBuyShopItem",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonBuyShopItem(int itemID, int price, PlayerManager.ObjectInHand itemType, string displayName, bool isCustomColor = false)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonBuyShopItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "itemID": "int",
- "price": "int",
- "itemType": "PlayerManager.ObjectInHand",
- "displayName": "string",
- "isCustomColor": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonBuyShopItem"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.BuyNewItem",
- "patchTarget": "Il2Cpp.ComputerShop::void BuyNewItem(int itemID, int price, PlayerManager.ObjectInHand itemType, string displayName)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.BuyNewItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "itemID": "int",
- "price": "int",
- "itemType": "PlayerManager.ObjectInHand",
- "displayName": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.NewItemPurchased"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.SpawnNewCartItem",
- "patchTarget": "Il2Cpp.ComputerShop::void SpawnNewCartItem(int itemID, int price, PlayerManager.ObjectInHand itemType, string displayName, Nullable chosenColor)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.SpawnNewCartItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "itemID": "int",
- "price": "int",
- "itemType": "PlayerManager.ObjectInHand",
- "displayName": "string",
- "chosenColor": "Nullable"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.NewCartItemSpawned"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.BuyAnotherItem",
- "patchTarget": "Il2Cpp.ComputerShop::void BuyAnotherItem(int itemID, int price, PlayerManager.ObjectInHand itemType, ShopCartItem cartItem)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.BuyAnotherItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "itemID": "int",
- "price": "int",
- "itemType": "PlayerManager.ObjectInHand",
- "cartItem": "ShopCartItem"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AnotherItemPurchased"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.SpawnPhysicalItem",
- "patchTarget": "Il2Cpp.ComputerShop::Nullable SpawnPhysicalItem(GameObject prefab, int price, PlayerManager.ObjectInHand itemType)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.SpawnPhysicalItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "prefab": "GameObject",
- "price": "int",
- "itemType": "PlayerManager.ObjectInHand"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PhysicalItemSpawned"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.HandleObjectives",
- "patchTarget": "Il2Cpp.ComputerShop::void HandleObjectives(PlayerManager.ObjectInHand itemType)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.HandleObjectives",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "itemType": "PlayerManager.ObjectInHand"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HandleObjectives"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.RemoveSpawnedItem",
- "patchTarget": "Il2Cpp.ComputerShop::void RemoveSpawnedItem(int uid)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.RemoveSpawnedItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "uid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.oveSpawnedItemRemoved"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.RemoveCartUIItem",
- "patchTarget": "Il2Cpp.ComputerShop::void RemoveCartUIItem(ShopCartItem cartItem)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.RemoveCartUIItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "cartItem": "ShopCartItem"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.oveCartUIItemRemoved"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.SelectNextAvailable",
- "patchTarget": "Il2Cpp.ComputerShop::void SelectNextAvailable(int removedIndex)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.SelectNextAvailable",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "removedIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SelectNextAvailable"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.UpdateCartTotal",
- "patchTarget": "Il2Cpp.ComputerShop::void UpdateCartTotal()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.UpdateCartTotal",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CartTotalChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonCheckOut",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonCheckOut()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonCheckOut",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCheckOut"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ClearTrackingWithoutDestroying",
- "patchTarget": "Il2Cpp.ComputerShop::void ClearTrackingWithoutDestroying()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ClearTrackingWithoutDestroying",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClearTrackingWithoutDestroying"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.OpenColorPicker",
- "patchTarget": "Il2Cpp.ComputerShop::void OpenColorPicker()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.OpenColorPicker",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OpenColorPicker"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonChosenColor",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonChosenColor()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonChosenColor",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonChosenColor"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonCancelColorPicker",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonCancelColorPicker()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonCancelColorPicker",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCancelColorPicker"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ApplyColorToSpawnedItem",
- "patchTarget": "Il2Cpp.ComputerShop::void ApplyColorToSpawnedItem(int uid, Color color, PlayerManager.ObjectInHand itemType)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ApplyColorToSpawnedItem",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "uid": "int",
- "color": "Color",
- "itemType": "PlayerManager.ObjectInHand"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ApplyColorToSpawnedItem"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonClear",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonClear()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonClear",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonClear"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.ButtonCancel",
- "patchTarget": "Il2Cpp.ComputerShop::void ButtonCancel()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.ButtonCancel",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCancel"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.DestroyAllSpawnedItems",
- "patchTarget": "Il2Cpp.ComputerShop::void DestroyAllSpawnedItems()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.DestroyAllSpawnedItems",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DestroyAllSpawnedItems"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.CleanUpShop",
- "patchTarget": "Il2Cpp.ComputerShop::void CleanUpShop()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.CleanUpShop",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CleanUpShop"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.CloseShop",
- "patchTarget": "Il2Cpp.ComputerShop::void CloseShop()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.CloseShop",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseShop"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.UnlockFromSave",
- "patchTarget": "Il2Cpp.ComputerShop::void UnlockFromSave(Dictionary savedStates)",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.UnlockFromSave",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "savedStates": "Dictionary"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnlockFromSave"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.OnLoad",
- "patchTarget": "Il2Cpp.ComputerShop::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.OnLoad",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ComputerShop",
- "name": "greg.SYSTEM.OnLoad.ComputerShop"
- },
- {
- "legacy": "deprecated.SYSTEM.ComputerShop.OnDestroy",
- "patchTarget": "Il2Cpp.ComputerShop::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target ComputerShop.OnDestroy",
- "payloadSchema": {
- "targetType": "ComputerShop",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ComputerShop",
- "name": "greg.SYSTEM.OnDestroy.ComputerShop"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.Awake",
- "patchTarget": "Il2Cpp.CustomerBase::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.Awake",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CustomerBase_fb56303671",
- "name": "greg.CUSTOMER.ComponentInitialized.CustomerBase_fb56303671"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.Start",
- "patchTarget": "Il2Cpp.CustomerBase::void Start()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.Start",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CustomerBase_91fde31efa",
- "name": "greg.CUSTOMER.ComponentInitialized.CustomerBase_91fde31efa"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.CheckIfAppRequirementsAreMet",
- "patchTarget": "Il2Cpp.CustomerBase::IEnumerator CheckIfAppRequirementsAreMet()",
- "strategy": "Prefix+Postfix",
- "description": "Interop target CustomerBase.CheckIfAppRequirementsAreMet",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.CheckIfAppRequirementsAreMet"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.UpdateMoney",
- "patchTarget": "Il2Cpp.CustomerBase::IEnumerator UpdateMoney()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.UpdateMoney",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.MoneyChanged"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.AreAllAppRequirementsMet",
- "patchTarget": "Il2Cpp.CustomerBase::bool AreAllAppRequirementsMet()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.AreAllAppRequirementsMet",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.AreAllAppRequirementsMet"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.UpdateCustomerServerCountAndSpeed",
- "patchTarget": "Il2Cpp.CustomerBase::void UpdateCustomerServerCountAndSpeed(int count, float speed)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.UpdateCustomerServerCountAndSpeed",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "count": "int",
- "speed": "float"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.CustomerServerCountAndSpeedChanged"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.AddAppPerformance",
- "patchTarget": "Il2Cpp.CustomerBase::void AddAppPerformance(int appID, float speed)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.AddAppPerformance",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "appID": "int",
- "speed": "float"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.AppPerformanceAdded"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.ResetAllAppSpeeds",
- "patchTarget": "Il2Cpp.CustomerBase::void ResetAllAppSpeeds()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.ResetAllAppSpeeds",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.ResetAllAppSpeeds"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.IsIPPresent",
- "patchTarget": "Il2Cpp.CustomerBase::bool IsIPPresent(string ip)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.IsIPPresent",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "ip": "string"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.IsIPPresent"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.SetUpBase",
- "patchTarget": "Il2Cpp.CustomerBase::void SetUpBase(CustomerItem customerItem, CustomerBaseSaveData saveData = null)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.SetUpBase",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "customerItem": "CustomerItem",
- "saveData": "CustomerBaseSaveData"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.UpBaseSet"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.SetUpApp",
- "patchTarget": "Il2Cpp.CustomerBase::void SetUpApp(int appID, int difficulty, CustomerBaseSaveData saveData = null)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.SetUpApp",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "appID": "int",
- "difficulty": "int",
- "saveData": "CustomerBaseSaveData"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.UpAppSet"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.DelayedAppDoorOpening",
- "patchTarget": "Il2Cpp.CustomerBase::IEnumerator DelayedAppDoorOpening(int appID)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.DelayedAppDoorOpening",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "appID": "int"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.DelayedAppDoorOpening"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.AppText",
- "patchTarget": "Il2Cpp.CustomerBase::string AppText(int lastUsedApp)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.AppText",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "lastUsedApp": "int",
- "hookSubject": "string"
- },
- "hookSubject": "CustomerBase_intlastUsedApp",
- "name": "greg.CUSTOMER.AppText.CustomerBase_intlastUsedApp"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.AppText",
- "patchTarget": "Il2Cpp.CustomerBase::string AppText(int appID, string subnet)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.AppText",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "appID": "int",
- "subnet": "string",
- "hookSubject": "string"
- },
- "hookSubject": "CustomerBase_intappIDstringsubnet",
- "name": "greg.CUSTOMER.AppText.CustomerBase_intappIDstringsubnet"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.UpdateSpeedOnCustomerBaseApp",
- "patchTarget": "Il2Cpp.CustomerBase::void UpdateSpeedOnCustomerBaseApp(int appID, float speed)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.UpdateSpeedOnCustomerBaseApp",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "appID": "int",
- "speed": "float"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.SpeedOnCustomerBaseAppChanged"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBase.LoadData",
- "patchTarget": "Il2Cpp.CustomerBase::void LoadData(CustomerBaseSaveData data)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBase.LoadData",
- "payloadSchema": {
- "targetType": "CustomerBase",
- "isStatic": false,
- "data": "CustomerBaseSaveData"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.DataLoaded"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.Awake",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.Awake",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "CustomerBaseDoor",
- "name": "greg.CUSTOMER.ComponentInitialized.CustomerBaseDoor"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.InteractOnClick",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.InteractOnClick",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.InteractOnClick"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.InteractOnHover",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.InteractOnHover",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false,
- "hit": "RaycastHit"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.InteractOnHover"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.OpenDoorAndSetupBase",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::void OpenDoorAndSetupBase(CustomerItem customerItem)",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.OpenDoorAndSetupBase",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false,
- "customerItem": "CustomerItem"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.OpenDoorAndSetupBase"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.OpenDoor",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::void OpenDoor()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.OpenDoor",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.OpenDoor"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.OnHoverOver",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.OnHoverOver",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.OnHoverOver"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.OnLoad",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.OnLoad",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.OnLoad"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerBaseDoor.OnDestroy",
- "patchTarget": "Il2Cpp.CustomerBaseDoor::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target CustomerBaseDoor.OnDestroy",
- "payloadSchema": {
- "targetType": "CustomerBaseDoor",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.OnDestroy"
- },
- {
- "legacy": "deprecated.CUSTOMER.CustomerCard.SetCustomer",
- "patchTarget": "Il2Cpp.CustomerCard::void SetCustomer(CustomerItem _customerItem)",
- "strategy": "Postfix",
- "description": "Interop target CustomerCard.SetCustomer",
- "payloadSchema": {
- "targetType": "CustomerCard",
- "isStatic": false,
- "_customerItem": "CustomerItem"
- },
- "hookSubject": null,
- "name": "greg.CUSTOMER.CustomerSet"
- },
- {
- "legacy": "deprecated.SYSTEM.DropdownSample.OnButtonClick",
- "patchTarget": "Il2Cpp.DropdownSample::void OnButtonClick()",
- "strategy": "Postfix",
- "description": "Interop target DropdownSample.OnButtonClick",
- "payloadSchema": {
- "targetType": "DropdownSample",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnButtonClick"
- },
- {
- "legacy": "deprecated.SYSTEM.Dumpster.Awake",
- "patchTarget": "Il2Cpp.Dumpster::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Dumpster.Awake",
- "payloadSchema": {
- "targetType": "Dumpster",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Dumpster",
- "name": "greg.SYSTEM.ComponentInitialized.Dumpster"
- },
- {
- "legacy": "deprecated.SYSTEM.Dumpster.InteractOnClick",
- "patchTarget": "Il2Cpp.Dumpster::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target Dumpster.InteractOnClick",
- "payloadSchema": {
- "targetType": "Dumpster",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Dumpster",
- "name": "greg.SYSTEM.InteractOnClick.Dumpster"
- },
- {
- "legacy": "deprecated.SYSTEM.Dumpster.InteractOnHover",
- "patchTarget": "Il2Cpp.Dumpster::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target Dumpster.InteractOnHover",
- "payloadSchema": {
- "targetType": "Dumpster",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "Dumpster_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.Dumpster_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.Dumpster.OnHoverOver",
- "patchTarget": "Il2Cpp.Dumpster::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target Dumpster.OnHoverOver",
- "payloadSchema": {
- "targetType": "Dumpster",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Dumpster",
- "name": "greg.SYSTEM.OnHoverOver.Dumpster"
- },
- {
- "legacy": "deprecated.SYSTEM.EnvMapAnimator.Awake",
- "patchTarget": "Il2Cpp.EnvMapAnimator::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target EnvMapAnimator.Awake",
- "payloadSchema": {
- "targetType": "EnvMapAnimator",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "EnvMapAnimator_46683c114d",
- "name": "greg.SYSTEM.ComponentInitialized.EnvMapAnimator_46683c114d"
- },
- {
- "legacy": "deprecated.SYSTEM.EnvMapAnimator.Start",
- "patchTarget": "Il2Cpp.EnvMapAnimator::IEnumerator Start()",
- "strategy": "Postfix",
- "description": "Interop target EnvMapAnimator.Start",
- "payloadSchema": {
- "targetType": "EnvMapAnimator",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "EnvMapAnimator_928c4d3d7d",
- "name": "greg.SYSTEM.ComponentInitialized.EnvMapAnimator_928c4d3d7d"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.Awake",
- "patchTarget": "Il2Cpp.FCP_Persistence::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.Awake",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FCP_Persistence",
- "name": "greg.SYSTEM.ComponentInitialized.FCP_Persistence"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.InitStatic",
- "patchTarget": "Il2Cpp.FCP_Persistence::void InitStatic()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.InitStatic",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InitStatic"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.OnDestroy",
- "patchTarget": "Il2Cpp.FCP_Persistence::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.OnDestroy",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FCP_Persistence",
- "name": "greg.SYSTEM.OnDestroy.FCP_Persistence"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.OnEnable",
- "patchTarget": "Il2Cpp.FCP_Persistence::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.OnEnable",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FCP_Persistence",
- "name": "greg.SYSTEM.ComponentEnabled.FCP_Persistence"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.OnDisable",
- "patchTarget": "Il2Cpp.FCP_Persistence::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.OnDisable",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FCP_Persistence",
- "name": "greg.SYSTEM.ComponentDisabled.FCP_Persistence"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.LoadDataFile",
- "patchTarget": "Il2Cpp.FCP_Persistence::void LoadDataFile()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.LoadDataFile",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DataFileLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.SaveDataFile",
- "patchTarget": "Il2Cpp.FCP_Persistence::void SaveDataFile()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.SaveDataFile",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DataFileSaved"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.SaveColor",
- "patchTarget": "Il2Cpp.FCP_Persistence::void SaveColor(Color c)",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.SaveColor",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false,
- "c": "Color"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ColorSaved"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.LoadColor",
- "patchTarget": "Il2Cpp.FCP_Persistence::bool LoadColor(out Color c)",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.LoadColor",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": false,
- "c": "outColor"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ColorLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_Persistence.GenerateID",
- "patchTarget": "Il2Cpp.FCP_Persistence::static string GenerateID()",
- "strategy": "Postfix",
- "description": "Interop target FCP_Persistence.GenerateID",
- "payloadSchema": {
- "targetType": "FCP_Persistence",
- "isStatic": true
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GenerateID"
- },
- {
- "legacy": "deprecated.SYSTEM.FCP_SpriteMeshEditor.MakeMesh",
- "patchTarget": "Il2Cpp.FCP_SpriteMeshEditor::void MakeMesh(Sprite sprite, int x, int y, FCP_SpriteMeshEditor.MeshType meshtype)",
- "strategy": "Postfix",
- "description": "Interop target FCP_SpriteMeshEditor.MakeMesh",
- "payloadSchema": {
- "targetType": "FCP_SpriteMeshEditor",
- "isStatic": false,
- "sprite": "Sprite",
- "x": "int",
- "y": "int",
- "meshtype": "FCP_SpriteMeshEditor.MeshType"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MakeMesh"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.SetColor",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void SetColor(Color color)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.SetColor",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "Color"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ColorSet"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.SetColorNoAlpha",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void SetColorNoAlpha(Color color)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.SetColorNoAlpha",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "Color"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ColorNoAlphaSet"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.Awake",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.Awake",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker",
- "name": "greg.SYSTEM.ComponentInitialized.FlexibleColorPicker"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.SliderUpdate",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void SliderUpdate(FlexibleColorPicker.PickerType type, float value)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.SliderUpdate",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "type": "FlexibleColorPicker.PickerType",
- "value": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SliderUpdate"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.OnEnable",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.OnEnable",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker",
- "name": "greg.SYSTEM.ComponentEnabled.FlexibleColorPicker"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.SetPointerFocus",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void SetPointerFocus(int i)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.SetPointerFocus",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PointerFocusSet"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PointerUpdate",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void PointerUpdate(BaseEventData e)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PointerUpdate",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "e": "BaseEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PointerUpdate"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.TypeHex",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void TypeHex(string input)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.TypeHex",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "input": "string",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_stringinput",
- "name": "greg.SYSTEM.TypeHex.FlexibleColorPicker_stringinput"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.FinishTypeHex",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void FinishTypeHex(string input)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.FinishTypeHex",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "input": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FinishTypeHex"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.ChangeMode",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void ChangeMode(int newMode)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.ChangeMode",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "newMode": "int",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_intnewMode",
- "name": "greg.SYSTEM.ChangeMode.FlexibleColorPicker_intnewMode"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.ChangeMode",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void ChangeMode(FlexibleColorPicker.MainPickingMode mode)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.ChangeMode",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "mode": "FlexibleColorPicker.MainPickingMode",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_FlexibleColorPickerMainPickingModemode",
- "name": "greg.SYSTEM.ChangeMode.FlexibleColorPicker_FlexibleColorPickerMainPickingModemode"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.SeperateMaterials",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void SeperateMaterials()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.SeperateMaterials",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SeperateMaterials"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.ShiftColor",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void ShiftColor(int type, float delta)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.ShiftColor",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "type": "int",
- "delta": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShiftColor"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.ShiftHue",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void ShiftHue(float delta)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.ShiftHue",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "delta": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShiftHue"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PickColor",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::FlexibleColorPicker.BufferedColor PickColor(FlexibleColorPicker.BufferedColor color, FlexibleColorPicker.PickerType type, Vector2 v)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PickColor",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "FlexibleColorPicker.BufferedColor",
- "type": "FlexibleColorPicker.PickerType",
- "v": "Vector2"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PickColor"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PickColorMain",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::FlexibleColorPicker.BufferedColor PickColorMain(FlexibleColorPicker.BufferedColor color, Vector2 v)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PickColorMain",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "FlexibleColorPicker.BufferedColor",
- "v": "Vector2",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorVec",
- "name": "greg.SYSTEM.PickColorMain.FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorVec"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PickColor1D",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::FlexibleColorPicker.BufferedColor PickColor1D(FlexibleColorPicker.BufferedColor color, FlexibleColorPicker.PickerType type, Vector2 v)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PickColor1D",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "FlexibleColorPicker.BufferedColor",
- "type": "FlexibleColorPicker.PickerType",
- "v": "Vector2",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorFle_de84f21a97",
- "name": "greg.SYSTEM.PickColor1D.FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorFle_de84f21a97"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PickColorMain",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::FlexibleColorPicker.BufferedColor PickColorMain(FlexibleColorPicker.BufferedColor color, FlexibleColorPicker.MainPickingMode mode, Vector2 v)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PickColorMain",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "FlexibleColorPicker.BufferedColor",
- "mode": "FlexibleColorPicker.MainPickingMode",
- "v": "Vector2",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorFle",
- "name": "greg.SYSTEM.PickColorMain.FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorFle"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PickColor2D",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::FlexibleColorPicker.BufferedColor PickColor2D(FlexibleColorPicker.BufferedColor color, FlexibleColorPicker.PickerType type1, float value1, FlexibleColorPicker.PickerType type2, float value2)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PickColor2D",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "FlexibleColorPicker.BufferedColor",
- "type1": "FlexibleColorPicker.PickerType",
- "value1": "float",
- "type2": "FlexibleColorPicker.PickerType",
- "value2": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PickColor2D"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.PickColor1D",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::FlexibleColorPicker.BufferedColor PickColor1D(FlexibleColorPicker.BufferedColor color, FlexibleColorPicker.PickerType type, float value)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.PickColor1D",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "color": "FlexibleColorPicker.BufferedColor",
- "type": "FlexibleColorPicker.PickerType",
- "value": "float",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorFle_fd305ba107",
- "name": "greg.SYSTEM.PickColor1D.FlexibleColorPicker_FlexibleColorPickerBufferedColorcolorFle_fd305ba107"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateMarkers",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateMarkers()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateMarkers",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MarkersChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateMarker",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateMarker(FlexibleColorPicker.Picker picker, FlexibleColorPicker.PickerType type, Vector2 v)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateMarker",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "picker": "FlexibleColorPicker.Picker",
- "type": "FlexibleColorPicker.PickerType",
- "v": "Vector2"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MarkerChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.SetMarker",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void SetMarker(Image picker, Vector2 v, bool setX, bool setY)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.SetMarker",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "picker": "Image",
- "v": "Vector2",
- "setX": "bool",
- "setY": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MarkerSet"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateTextures",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateTextures()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateTextures",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TexturesChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateStatic",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateStatic(FlexibleColorPicker.PickerType type)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateStatic",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "type": "FlexibleColorPicker.PickerType"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.StaticChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateDynamic",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateDynamic(FlexibleColorPicker.PickerType type)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateDynamic",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "type": "FlexibleColorPicker.PickerType"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DynamicChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.IsPickerAvailable",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::bool IsPickerAvailable(FlexibleColorPicker.PickerType type)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.IsPickerAvailable",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "type": "FlexibleColorPicker.PickerType",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_FlexibleColorPickerPickerTypetype",
- "name": "greg.SYSTEM.IsPickerAvailable.FlexibleColorPicker_FlexibleColorPickerPickerTypetype"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.IsPickerAvailable",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::bool IsPickerAvailable(int index)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.IsPickerAvailable",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "index": "int",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_intindex",
- "name": "greg.SYSTEM.IsPickerAvailable.FlexibleColorPicker_intindex"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateHex",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateHex()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateHex",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HexChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.TypeHex",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void TypeHex(string input, bool finish)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.TypeHex",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "input": "string",
- "finish": "bool",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_stringinputboolfinish",
- "name": "greg.SYSTEM.TypeHex.FlexibleColorPicker_stringinputboolfinish"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.MakeModeOptions",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void MakeModeOptions()",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.MakeModeOptions",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MakeModeOptions"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.UpdateMode",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::void UpdateMode(FlexibleColorPicker.MainPickingMode mode)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.UpdateMode",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": false,
- "mode": "FlexibleColorPicker.MainPickingMode"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ModeChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.IsPreviewType",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static bool IsPreviewType(FlexibleColorPicker.PickerType type)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.IsPreviewType",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "type": "FlexibleColorPicker.PickerType"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsPreviewType"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.IsAlphaType",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static bool IsAlphaType(FlexibleColorPicker.PickerType type)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.IsAlphaType",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "type": "FlexibleColorPicker.PickerType"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsAlphaType"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.IsHorizontal",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static bool IsHorizontal(FlexibleColorPicker.Picker p)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.IsHorizontal",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "p": "FlexibleColorPicker.Picker"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsHorizontal"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.IsValidHexChar",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static bool IsValidHexChar(char c)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.IsValidHexChar",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "c": "char"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsValidHexChar"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.ParseHex",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static Color ParseHex(string input)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.ParseHex",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "input": "string",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_stringinput",
- "name": "greg.SYSTEM.ParseHex.FlexibleColorPicker_stringinput"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.ParseHex",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static Color ParseHex(string input, Color defaultColor)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.ParseHex",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "input": "string",
- "defaultColor": "Color",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_stringinputColordefaultColor",
- "name": "greg.SYSTEM.ParseHex.FlexibleColorPicker_stringinputColordefaultColor"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.HSVToRGB",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static Color HSVToRGB(Vector3 hsv)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.HSVToRGB",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "hsv": "Vector3",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_Vector3hsv",
- "name": "greg.SYSTEM.HSVToRGB.FlexibleColorPicker_Vector3hsv"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.HSVToRGB",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static Color HSVToRGB(float h, float s, float v)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.HSVToRGB",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "h": "float",
- "s": "float",
- "v": "float",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_floathfloatsfloatv",
- "name": "greg.SYSTEM.HSVToRGB.FlexibleColorPicker_floathfloatsfloatv"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.RGBToHSV",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static Vector3 RGBToHSV(Color color)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.RGBToHSV",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "color": "Color",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_Colorcolor",
- "name": "greg.SYSTEM.RGBToHSV.FlexibleColorPicker_Colorcolor"
- },
- {
- "legacy": "deprecated.SYSTEM.FlexibleColorPicker.RGBToHSV",
- "patchTarget": "Il2Cpp.FlexibleColorPicker::static Vector3 RGBToHSV(float r, float g, float b)",
- "strategy": "Postfix",
- "description": "Interop target FlexibleColorPicker.RGBToHSV",
- "payloadSchema": {
- "targetType": "FlexibleColorPicker",
- "isStatic": true,
- "r": "float",
- "g": "float",
- "b": "float",
- "hookSubject": "string"
- },
- "hookSubject": "FlexibleColorPicker_floatrfloatgfloatb",
- "name": "greg.SYSTEM.RGBToHSV.FlexibleColorPicker_floatrfloatgfloatb"
- },
- {
- "legacy": "deprecated.SYSTEM.FootSteps.Awake",
- "patchTarget": "Il2Cpp.FootSteps::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target FootSteps.Awake",
- "payloadSchema": {
- "targetType": "FootSteps",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FootSteps",
- "name": "greg.SYSTEM.ComponentInitialized.FootSteps"
- },
- {
- "legacy": "deprecated.SYSTEM.FootSteps.PlayRequestedStepSound",
- "patchTarget": "Il2Cpp.FootSteps::void PlayRequestedStepSound(int _clipArray)",
- "strategy": "Postfix",
- "description": "Interop target FootSteps.PlayRequestedStepSound",
- "payloadSchema": {
- "targetType": "FootSteps",
- "isStatic": false,
- "_clipArray": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayRequestedStepSound"
- },
- {
- "legacy": "deprecated.SYSTEM.FootSteps.Step",
- "patchTarget": "Il2Cpp.FootSteps::void Step()",
- "strategy": "Postfix",
- "description": "Interop target FootSteps.Step",
- "payloadSchema": {
- "targetType": "FootSteps",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Step"
- },
- {
- "legacy": "deprecated.SYSTEM.FootSteps.OnEnable",
- "patchTarget": "Il2Cpp.FootSteps::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target FootSteps.OnEnable",
- "payloadSchema": {
- "targetType": "FootSteps",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "FootSteps",
- "name": "greg.SYSTEM.ComponentEnabled.FootSteps"
- },
- {
- "legacy": "deprecated.SYSTEM.FootSteps.checkGroundMaterial",
- "patchTarget": "Il2Cpp.FootSteps::IEnumerator checkGroundMaterial()",
- "strategy": "Postfix",
- "description": "Interop target FootSteps.checkGroundMaterial",
- "payloadSchema": {
- "targetType": "FootSteps",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.checkGroundMaterial"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.Awake",
- "patchTarget": "Il2Cpp.GateLever::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.Awake",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GateLever",
- "name": "greg.SYSTEM.ComponentInitialized.GateLever"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.InteractOnClick",
- "patchTarget": "Il2Cpp.GateLever::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.InteractOnClick",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GateLever",
- "name": "greg.SYSTEM.InteractOnClick.GateLever"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.GateCoroutine",
- "patchTarget": "Il2Cpp.GateLever::IEnumerator GateCoroutine()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.GateCoroutine",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GateCoroutine"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.OpenGate",
- "patchTarget": "Il2Cpp.GateLever::void OpenGate()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.OpenGate",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OpenGate"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.CloseGate",
- "patchTarget": "Il2Cpp.GateLever::void CloseGate()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.CloseGate",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseGate"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.TruckComing",
- "patchTarget": "Il2Cpp.GateLever::void TruckComing()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.TruckComing",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TruckComing"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.InteractOnHover",
- "patchTarget": "Il2Cpp.GateLever::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target GateLever.InteractOnHover",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "GateLever_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.GateLever_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.GateLever.OnHoverOver",
- "patchTarget": "Il2Cpp.GateLever::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target GateLever.OnHoverOver",
- "payloadSchema": {
- "targetType": "GateLever",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GateLever",
- "name": "greg.SYSTEM.OnHoverOver.GateLever"
- },
- {
- "legacy": "deprecated.SYSTEM.GetCurrentVersion.Start",
- "patchTarget": "Il2Cpp.GetCurrentVersion::void Start()",
- "strategy": "Postfix",
- "description": "Interop target GetCurrentVersion.Start",
- "payloadSchema": {
- "targetType": "GetCurrentVersion",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GetCurrentVersion",
- "name": "greg.SYSTEM.ComponentInitialized.GetCurrentVersion"
- },
- {
- "legacy": "deprecated.SYSTEM.GetValueFromPlayerPrefs.Start",
- "patchTarget": "Il2Cpp.GetValueFromPlayerPrefs::void Start()",
- "strategy": "Postfix",
- "description": "Interop target GetValueFromPlayerPrefs.Start",
- "payloadSchema": {
- "targetType": "GetValueFromPlayerPrefs",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GetValueFromPlayerPrefs",
- "name": "greg.SYSTEM.ComponentInitialized.GetValueFromPlayerPrefs"
- },
- {
- "legacy": "deprecated.SYSTEM.GODMOD.Awake",
- "patchTarget": "Il2Cpp.GODMOD::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target GODMOD.Awake",
- "payloadSchema": {
- "targetType": "GODMOD",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GODMOD",
- "name": "greg.SYSTEM.ComponentInitialized.GODMOD"
- },
- {
- "legacy": "deprecated.SYSTEM.GODMOD.OnEnable",
- "patchTarget": "Il2Cpp.GODMOD::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target GODMOD.OnEnable",
- "payloadSchema": {
- "targetType": "GODMOD",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GODMOD",
- "name": "greg.SYSTEM.ComponentEnabled.GODMOD"
- },
- {
- "legacy": "deprecated.SYSTEM.GODMOD.DelayedLoad",
- "patchTarget": "Il2Cpp.GODMOD::IEnumerator DelayedLoad()",
- "strategy": "Postfix",
- "description": "Interop target GODMOD.DelayedLoad",
- "payloadSchema": {
- "targetType": "GODMOD",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DelayedLoad"
- },
- {
- "legacy": "deprecated.SYSTEM.GODMOD.OnDisable",
- "patchTarget": "Il2Cpp.GODMOD::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target GODMOD.OnDisable",
- "payloadSchema": {
- "targetType": "GODMOD",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "GODMOD",
- "name": "greg.SYSTEM.ComponentDisabled.GODMOD"
- },
- {
- "legacy": "deprecated.SYSTEM.GODMOD.StartGodMod",
- "patchTarget": "Il2Cpp.GODMOD::void StartGodMod()",
- "strategy": "Postfix",
- "description": "Interop target GODMOD.StartGodMod",
- "payloadSchema": {
- "targetType": "GODMOD",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.StartGodMod"
- },
- {
- "legacy": "deprecated.SYSTEM.GODMOD.GODMOD_delayed",
- "patchTarget": "Il2Cpp.GODMOD::IEnumerator GODMOD_delayed()",
- "strategy": "Postfix",
- "description": "Interop target GODMOD.GODMOD_delayed",
- "payloadSchema": {
- "targetType": "GODMOD",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GODMOD_delayed"
- },
- {
- "legacy": "deprecated.SYSTEM.HRSystem.OnEnable",
- "patchTarget": "Il2Cpp.HRSystem::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target HRSystem.OnEnable",
- "payloadSchema": {
- "targetType": "HRSystem",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "HRSystem",
- "name": "greg.SYSTEM.ComponentEnabled.HRSystem"
- },
- {
- "legacy": "deprecated.SYSTEM.HRSystem.ButtonHireEmployee",
- "patchTarget": "Il2Cpp.HRSystem::void ButtonHireEmployee(int i)",
- "strategy": "Postfix",
- "description": "Interop target HRSystem.ButtonHireEmployee",
- "payloadSchema": {
- "targetType": "HRSystem",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonHireEmployee"
- },
- {
- "legacy": "deprecated.SYSTEM.HRSystem.ButtonCancelBuying",
- "patchTarget": "Il2Cpp.HRSystem::void ButtonCancelBuying()",
- "strategy": "Postfix",
- "description": "Interop target HRSystem.ButtonCancelBuying",
- "payloadSchema": {
- "targetType": "HRSystem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCancelBuying"
- },
- {
- "legacy": "deprecated.SYSTEM.HRSystem.ButtonConfirmHire",
- "patchTarget": "Il2Cpp.HRSystem::void ButtonConfirmHire()",
- "strategy": "Postfix",
- "description": "Interop target HRSystem.ButtonConfirmHire",
- "payloadSchema": {
- "targetType": "HRSystem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonConfirmHire"
- },
- {
- "legacy": "deprecated.SYSTEM.HRSystem.ButtonFireEmployee",
- "patchTarget": "Il2Cpp.HRSystem::void ButtonFireEmployee(int i)",
- "strategy": "Postfix",
- "description": "Interop target HRSystem.ButtonFireEmployee",
- "payloadSchema": {
- "targetType": "HRSystem",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonFireEmployee"
- },
- {
- "legacy": "deprecated.SYSTEM.HRSystem.ButtonConfirmFireEmployee",
- "patchTarget": "Il2Cpp.HRSystem::void ButtonConfirmFireEmployee()",
- "strategy": "Postfix",
- "description": "Interop target HRSystem.ButtonConfirmFireEmployee",
- "payloadSchema": {
- "targetType": "HRSystem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonConfirmFireEmployee"
- },
- {
- "legacy": "deprecated.SYSTEM.InputController.Contains",
- "patchTarget": "Il2Cpp.InputController::virtual bool Contains(InputAction action)",
- "strategy": "Postfix",
- "description": "Interop target InputController.Contains",
- "payloadSchema": {
- "targetType": "InputController",
- "isStatic": false,
- "action": "InputAction"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Contains"
- },
- {
- "legacy": "deprecated.SYSTEM.InputController.System_Collections_IEnumerable_GetEnumerator",
- "patchTarget": "Il2Cpp.InputController::virtual IEnumerator System_Collections_IEnumerable_GetEnumerator()",
- "strategy": "Postfix",
- "description": "Interop target InputController.System_Collections_IEnumerable_GetEnumerator",
- "payloadSchema": {
- "targetType": "InputController",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.System_Collections_IEnumerable_GetEnumerator"
- },
- {
- "legacy": "deprecated.SYSTEM.InputController.Enable",
- "patchTarget": "Il2Cpp.InputController::virtual void Enable()",
- "strategy": "Postfix",
- "description": "Interop target InputController.Enable",
- "payloadSchema": {
- "targetType": "InputController",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Enable"
- },
- {
- "legacy": "deprecated.SYSTEM.InputController.Disable",
- "patchTarget": "Il2Cpp.InputController::virtual void Disable()",
- "strategy": "Postfix",
- "description": "Interop target InputController.Disable",
- "payloadSchema": {
- "targetType": "InputController",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Disable"
- },
- {
- "legacy": "deprecated.SYSTEM.InputController.FindAction",
- "patchTarget": "Il2Cpp.InputController::virtual InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false)",
- "strategy": "Postfix",
- "description": "Interop target InputController.FindAction",
- "payloadSchema": {
- "targetType": "InputController",
- "isStatic": false,
- "actionNameOrId": "string",
- "throwIfNotFound": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FindAction"
- },
- {
- "legacy": "deprecated.SYSTEM.InputController.FindBinding",
- "patchTarget": "Il2Cpp.InputController::virtual int FindBinding(InputBinding bindingMask, out InputAction action)",
- "strategy": "Postfix",
- "description": "Interop target InputController.FindBinding",
- "payloadSchema": {
- "targetType": "InputController",
- "isStatic": false,
- "bindingMask": "InputBinding",
- "action": "outInputAction"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FindBinding"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.add_rebindComplete",
- "patchTarget": "Il2Cpp.InputManager::static void add_rebindComplete(Action value)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.add_rebindComplete",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "value": "Action"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.add_rebindComplete"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.remove_rebindComplete",
- "patchTarget": "Il2Cpp.InputManager::static void remove_rebindComplete(Action value)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.remove_rebindComplete",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "value": "Action"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.remove_rebindComplete"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.add_rebindCanceled",
- "patchTarget": "Il2Cpp.InputManager::static void add_rebindCanceled(Action value)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.add_rebindCanceled",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "value": "Action"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.add_rebindCanceled"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.remove_rebindCanceled",
- "patchTarget": "Il2Cpp.InputManager::static void remove_rebindCanceled(Action value)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.remove_rebindCanceled",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "value": "Action"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.remove_rebindCanceled"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.add_rebindStarted",
- "patchTarget": "Il2Cpp.InputManager::static void add_rebindStarted(Action value)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.add_rebindStarted",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "value": "Action"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.add_rebindStarted"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.remove_rebindStarted",
- "patchTarget": "Il2Cpp.InputManager::static void remove_rebindStarted(Action value)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.remove_rebindStarted",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "value": "Action"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.remove_rebindStarted"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.Awake",
- "patchTarget": "Il2Cpp.InputManager::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target InputManager.Awake",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "InputManager",
- "name": "greg.SYSTEM.ComponentInitialized.InputManager"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.LoadAllBindingOverrides",
- "patchTarget": "Il2Cpp.InputManager::static void LoadAllBindingOverrides()",
- "strategy": "Postfix",
- "description": "Interop target InputManager.LoadAllBindingOverrides",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AllBindingOverridesLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.OnDestroy",
- "patchTarget": "Il2Cpp.InputManager::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target InputManager.OnDestroy",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "InputManager",
- "name": "greg.SYSTEM.OnDestroy.InputManager"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.ConfinedCursorforUI",
- "patchTarget": "Il2Cpp.InputManager::static void ConfinedCursorforUI()",
- "strategy": "Postfix",
- "description": "Interop target InputManager.ConfinedCursorforUI",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ConfinedCursorforUI"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.LockedCursorForPlayerMovement",
- "patchTarget": "Il2Cpp.InputManager::static void LockedCursorForPlayerMovement()",
- "strategy": "Postfix",
- "description": "Interop target InputManager.LockedCursorForPlayerMovement",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.LockedCursorForPlayerMovement"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.StartRebind",
- "patchTarget": "Il2Cpp.InputManager::static void StartRebind(string actionName, int bindingIndex, TextMeshProUGUI statusText, bool excludeMouse)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.StartRebind",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "actionName": "string",
- "bindingIndex": "int",
- "statusText": "TextMeshProUGUI",
- "excludeMouse": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.StartRebind"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.DoRebind",
- "patchTarget": "Il2Cpp.InputManager::static void DoRebind(InputAction actionToRebind, int bindingIndex, TextMeshProUGUI statusText, bool allCompositeParts, bool excludeMouse)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.DoRebind",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "actionToRebind": "InputAction",
- "bindingIndex": "int",
- "statusText": "TextMeshProUGUI",
- "allCompositeParts": "bool",
- "excludeMouse": "bool",
- "hookSubject": "string"
- },
- "hookSubject": "InputManager_InputActionactionToRebindintbindingIndex",
- "name": "greg.SYSTEM.DoRebind.InputManager_InputActionactionToRebindintbindingIndex"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.SaveBindingOverride",
- "patchTarget": "Il2Cpp.InputManager::static void SaveBindingOverride(InputAction action)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.SaveBindingOverride",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "action": "InputAction"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.BindingOverrideSaved"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.LoadBindingOverride",
- "patchTarget": "Il2Cpp.InputManager::static void LoadBindingOverride(string actionName)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.LoadBindingOverride",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "actionName": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.BindingOverrideLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.ResetBinding",
- "patchTarget": "Il2Cpp.InputManager::static void ResetBinding(string actionName, int bindingIndex)",
- "strategy": "Postfix",
- "description": "Interop target InputManager.ResetBinding",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true,
- "actionName": "string",
- "bindingIndex": "int",
- "hookSubject": "string"
- },
- "hookSubject": "InputManager_stringactionNameintbindingIndex",
- "name": "greg.SYSTEM.ResetBinding.InputManager_stringactionNameintbindingIndex"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.ForceMousePositionToCenterOfGameWindow",
- "patchTarget": "Il2Cpp.InputManager::static void ForceMousePositionToCenterOfGameWindow()",
- "strategy": "Postfix",
- "description": "Interop target InputManager.ForceMousePositionToCenterOfGameWindow",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": true
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ForceMousePositionToCenterOfGameWindow"
- },
- {
- "legacy": "deprecated.SYSTEM.InputManager.CheckCurrentControls",
- "patchTarget": "Il2Cpp.InputManager::void CheckCurrentControls(InputAction.CallbackContext ctx)",
- "strategy": "Prefix+Postfix",
- "description": "Interop target InputManager.CheckCurrentControls",
- "payloadSchema": {
- "targetType": "InputManager",
- "isStatic": false,
- "ctx": "InputAction.CallbackContext"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CheckCurrentControls"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.Awake",
- "patchTarget": "Il2Cpp.Interact::virtual void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Interact.Awake",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Interact",
- "name": "greg.SYSTEM.ComponentInitialized.Interact"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.InteractOnClick",
- "patchTarget": "Il2Cpp.Interact::virtual void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target Interact.InteractOnClick",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Interact",
- "name": "greg.SYSTEM.InteractOnClick.Interact"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.IsAllowedToDoSecondAction",
- "patchTarget": "Il2Cpp.Interact::virtual bool IsAllowedToDoSecondAction()",
- "strategy": "Postfix",
- "description": "Interop target Interact.IsAllowedToDoSecondAction",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsAllowedToDoSecondAction"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.SecondActionOnClick",
- "patchTarget": "Il2Cpp.Interact::virtual void SecondActionOnClick()",
- "strategy": "Postfix",
- "description": "Interop target Interact.SecondActionOnClick",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SecondActionOnClick"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.InteractOnHover",
- "patchTarget": "Il2Cpp.Interact::virtual void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target Interact.InteractOnHover",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "Interact_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.Interact_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.OnHoverOver",
- "patchTarget": "Il2Cpp.Interact::virtual void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target Interact.OnHoverOver",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Interact",
- "name": "greg.SYSTEM.OnHoverOver.Interact"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.CloseInteractionMenu",
- "patchTarget": "Il2Cpp.Interact::virtual void CloseInteractionMenu()",
- "strategy": "Postfix",
- "description": "Interop target Interact.CloseInteractionMenu",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseInteractionMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.Interact.OnLoad",
- "patchTarget": "Il2Cpp.Interact::virtual void OnLoad(InteractObjectData data)",
- "strategy": "Postfix",
- "description": "Interop target Interact.OnLoad",
- "payloadSchema": {
- "targetType": "Interact",
- "isStatic": false,
- "data": "InteractObjectData",
- "hookSubject": "string"
- },
- "hookSubject": "Interact_InteractObjectDatadata",
- "name": "greg.SYSTEM.OnLoad.Interact_InteractObjectDatadata"
- },
- {
- "legacy": "deprecated.SYSTEM.KeyHint.ShowKeyboadMelee",
- "patchTarget": "Il2Cpp.KeyHint::void ShowKeyboadMelee()",
- "strategy": "Postfix",
- "description": "Interop target KeyHint.ShowKeyboadMelee",
- "payloadSchema": {
- "targetType": "KeyHint",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowKeyboadMelee"
- },
- {
- "legacy": "deprecated.SYSTEM.KeyHint.SetInactiveAll",
- "patchTarget": "Il2Cpp.KeyHint::void SetInactiveAll()",
- "strategy": "Postfix",
- "description": "Interop target KeyHint.SetInactiveAll",
- "payloadSchema": {
- "targetType": "KeyHint",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InactiveAllSet"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.Awake",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.Awake",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LeanTweenUIElement",
- "name": "greg.SYSTEM.ComponentInitialized.LeanTweenUIElement"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.OnEnable",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.OnEnable",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LeanTweenUIElement",
- "name": "greg.SYSTEM.ComponentEnabled.LeanTweenUIElement"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.OnDisable",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.OnDisable",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LeanTweenUIElement",
- "name": "greg.SYSTEM.ComponentDisabled.LeanTweenUIElement"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.OnWaitForPressKey",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void OnWaitForPressKey()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.OnWaitForPressKey",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnWaitForPressKey"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.Disabling",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::IEnumerator Disabling()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.Disabling",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Disabling"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.TweenHorizontal",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void TweenHorizontal(bool leanout)",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.TweenHorizontal",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false,
- "leanout": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TweenHorizontal"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.TweenVertical",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void TweenVertical(bool leanout)",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.TweenVertical",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false,
- "leanout": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TweenVertical"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.TweenScaleInOut",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::IEnumerator TweenScaleInOut()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.TweenScaleInOut",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TweenScaleInOut"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.KeepRotating",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::IEnumerator KeepRotating()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.KeepRotating",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.KeepRotating"
- },
- {
- "legacy": "deprecated.SYSTEM.LeanTweenUIElement.OnDestroy",
- "patchTarget": "Il2Cpp.LeanTweenUIElement::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target LeanTweenUIElement.OnDestroy",
- "payloadSchema": {
- "targetType": "LeanTweenUIElement",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LeanTweenUIElement",
- "name": "greg.SYSTEM.OnDestroy.LeanTweenUIElement"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.Awake",
- "patchTarget": "Il2Cpp.LoadingScreen::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.Awake",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LoadingScreen_e51858ee76",
- "name": "greg.SYSTEM.ComponentInitialized.LoadingScreen_e51858ee76"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.Start",
- "patchTarget": "Il2Cpp.LoadingScreen::IEnumerator Start()",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.Start",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LoadingScreen_00c82eb8fa",
- "name": "greg.SYSTEM.ComponentInitialized.LoadingScreen_00c82eb8fa"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.LoadGameScenesVoid",
- "patchTarget": "Il2Cpp.LoadingScreen::void LoadGameScenesVoid(PlayerData playerData, List technicianData, Il2CppStructArray loadedScenes = null, Il2CppStructArray hiredTechnicians = null, List repairJobQueue = null)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.LoadGameScenesVoid",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "playerData": "PlayerData",
- "technicianData": "List",
- "loadedScenes": "Il2CppStructArray",
- "hiredTechnicians": "Il2CppStructArray",
- "repairJobQueue": "List"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GameScenesVoidLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.LoadPlayerAndNPCDataWithDelay",
- "patchTarget": "Il2Cpp.LoadingScreen::IEnumerator LoadPlayerAndNPCDataWithDelay(PlayerData playerData, List technicianData, Il2CppStructArray hiredTechnicians, List repairJobQueue)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.LoadPlayerAndNPCDataWithDelay",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "playerData": "PlayerData",
- "technicianData": "List",
- "hiredTechnicians": "Il2CppStructArray",
- "repairJobQueue": "List"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayerAndNPCDataWithDelayLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.LoadGameLoadScene",
- "patchTarget": "Il2Cpp.LoadingScreen::IEnumerator LoadGameLoadScene(Il2CppStructArray loadedScenes = null)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.LoadGameLoadScene",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "loadedScenes": "Il2CppStructArray"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GameLoadSceneLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.SetDifficualty",
- "patchTarget": "Il2Cpp.LoadingScreen::void SetDifficualty(int i)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.SetDifficualty",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DifficualtySet"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.LoadLevel",
- "patchTarget": "Il2Cpp.LoadingScreen::void LoadLevel(int sceneIndex)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.LoadLevel",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "sceneIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.LevelLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.UnLoadLevel",
- "patchTarget": "Il2Cpp.LoadingScreen::void UnLoadLevel(int sceneIndex)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.UnLoadLevel",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "sceneIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnLoadLevel"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.AsynchronousLoad",
- "patchTarget": "Il2Cpp.LoadingScreen::IEnumerator AsynchronousLoad(int sceneIndex)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.AsynchronousLoad",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "sceneIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AsynchronousLoad"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.AsynchronousUnLoad",
- "patchTarget": "Il2Cpp.LoadingScreen::IEnumerator AsynchronousUnLoad(int sceneIndex)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.AsynchronousUnLoad",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "sceneIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AsynchronousUnLoad"
- },
- {
- "legacy": "deprecated.SYSTEM.LoadingScreen.IsSceneLoaded",
- "patchTarget": "Il2Cpp.LoadingScreen::bool IsSceneLoaded(string name)",
- "strategy": "Postfix",
- "description": "Interop target LoadingScreen.IsSceneLoaded",
- "payloadSchema": {
- "targetType": "LoadingScreen",
- "isStatic": false,
- "name": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsSceneLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.Localisation.Awake",
- "patchTarget": "Il2Cpp.Localisation::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Localisation.Awake",
- "payloadSchema": {
- "targetType": "Localisation",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Localisation",
- "name": "greg.SYSTEM.ComponentInitialized.Localisation"
- },
- {
- "legacy": "deprecated.SYSTEM.Localisation.LoadLocalisation",
- "patchTarget": "Il2Cpp.Localisation::Dictionary LoadLocalisation(int _uid)",
- "strategy": "Postfix",
- "description": "Interop target Localisation.LoadLocalisation",
- "payloadSchema": {
- "targetType": "Localisation",
- "isStatic": false,
- "_uid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.LocalisationLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.Localisation.ChangeLocalisation",
- "patchTarget": "Il2Cpp.Localisation::void ChangeLocalisation(int _uid)",
- "strategy": "Postfix",
- "description": "Interop target Localisation.ChangeLocalisation",
- "payloadSchema": {
- "targetType": "Localisation",
- "isStatic": false,
- "_uid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ChangeLocalisation"
- },
- {
- "legacy": "deprecated.SYSTEM.Localisation.ReturnTextByID",
- "patchTarget": "Il2Cpp.Localisation::string ReturnTextByID(int _uid)",
- "strategy": "Postfix",
- "description": "Interop target Localisation.ReturnTextByID",
- "payloadSchema": {
- "targetType": "Localisation",
- "isStatic": false,
- "_uid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ReturnTextByID"
- },
- {
- "legacy": "deprecated.SYSTEM.LocalisedText.Start",
- "patchTarget": "Il2Cpp.LocalisedText::void Start()",
- "strategy": "Postfix",
- "description": "Interop target LocalisedText.Start",
- "payloadSchema": {
- "targetType": "LocalisedText",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LocalisedText",
- "name": "greg.SYSTEM.ComponentInitialized.LocalisedText"
- },
- {
- "legacy": "deprecated.SYSTEM.LocalisedText.ChangeText",
- "patchTarget": "Il2Cpp.LocalisedText::void ChangeText()",
- "strategy": "Postfix",
- "description": "Interop target LocalisedText.ChangeText",
- "payloadSchema": {
- "targetType": "LocalisedText",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ChangeText"
- },
- {
- "legacy": "deprecated.SYSTEM.LocalisedText.SetText",
- "patchTarget": "Il2Cpp.LocalisedText::void SetText(int _localisation_uid)",
- "strategy": "Postfix",
- "description": "Interop target LocalisedText.SetText",
- "payloadSchema": {
- "targetType": "LocalisedText",
- "isStatic": false,
- "_localisation_uid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TextSet"
- },
- {
- "legacy": "deprecated.SYSTEM.LocalisedText.OnDestroy",
- "patchTarget": "Il2Cpp.LocalisedText::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target LocalisedText.OnDestroy",
- "payloadSchema": {
- "targetType": "LocalisedText",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "LocalisedText",
- "name": "greg.SYSTEM.OnDestroy.LocalisedText"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.Awake",
- "patchTarget": "Il2Cpp.MainGameManager::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.Awake",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MainGameManager_1582892905",
- "name": "greg.SYSTEM.ComponentInitialized.MainGameManager_1582892905"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.Start",
- "patchTarget": "Il2Cpp.MainGameManager::void Start()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.Start",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MainGameManager_a72cce1b62",
- "name": "greg.SYSTEM.ComponentInitialized.MainGameManager_a72cce1b62"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ResetTrolleyPosition",
- "patchTarget": "Il2Cpp.MainGameManager::void ResetTrolleyPosition()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ResetTrolleyPosition",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResetTrolleyPosition"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ShuffleAvailableCustomers",
- "patchTarget": "Il2Cpp.MainGameManager::void ShuffleAvailableCustomers()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ShuffleAvailableCustomers",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShuffleAvailableCustomers"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ShuffleAvailableSubnets",
- "patchTarget": "Il2Cpp.MainGameManager::void ShuffleAvailableSubnets()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ShuffleAvailableSubnets",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShuffleAvailableSubnets"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.IsSubnetValid",
- "patchTarget": "Il2Cpp.MainGameManager::bool IsSubnetValid(string subnet)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.IsSubnetValid",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "subnet": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsSubnetValid"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ShowCustomerCardsCanvas",
- "patchTarget": "Il2Cpp.MainGameManager::void ShowCustomerCardsCanvas(CustomerBaseDoor _door)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ShowCustomerCardsCanvas",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "_door": "CustomerBaseDoor"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowCustomerCardsCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ButtonCustomerChosen",
- "patchTarget": "Il2Cpp.MainGameManager::void ButtonCustomerChosen(int _cardID)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ButtonCustomerChosen",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "_cardID": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCustomerChosen"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ButtonCancelCustomerChoice",
- "patchTarget": "Il2Cpp.MainGameManager::void ButtonCancelCustomerChoice()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ButtonCancelCustomerChoice",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCancelCustomerChoice"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ShowBuyWallCanvas",
- "patchTarget": "Il2Cpp.MainGameManager::void ShowBuyWallCanvas(Wall wall)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ShowBuyWallCanvas",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "wall": "Wall"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowBuyWallCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ButtonBuyWall",
- "patchTarget": "Il2Cpp.MainGameManager::void ButtonBuyWall()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ButtonBuyWall",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonBuyWall"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ButtonCancelBuyWall",
- "patchTarget": "Il2Cpp.MainGameManager::void ButtonCancelBuyWall()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ButtonCancelBuyWall",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonCancelBuyWall"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ShowNetworkConfigCanvas",
- "patchTarget": "Il2Cpp.MainGameManager::void ShowNetworkConfigCanvas(NetworkSwitch networkSwitch)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ShowNetworkConfigCanvas",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowNetworkConfigCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.CloseNetworkConfigCanvas",
- "patchTarget": "Il2Cpp.MainGameManager::void CloseNetworkConfigCanvas()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.CloseNetworkConfigCanvas",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseNetworkConfigCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.OpenAnyCanvas",
- "patchTarget": "Il2Cpp.MainGameManager::void OpenAnyCanvas()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.OpenAnyCanvas",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OpenAnyCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.CloseAnyCanvas",
- "patchTarget": "Il2Cpp.MainGameManager::void CloseAnyCanvas(bool isCustomerChoice = false)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.CloseAnyCanvas",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "isCustomerChoice": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseAnyCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.RemoveUsedSubnet",
- "patchTarget": "Il2Cpp.MainGameManager::void RemoveUsedSubnet(string subnet)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.RemoveUsedSubnet",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "subnet": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.oveUsedSubnetRemoved"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ReturnSubnet",
- "patchTarget": "Il2Cpp.MainGameManager::void ReturnSubnet(string subnet)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ReturnSubnet",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "subnet": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ReturnSubnet"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.OnLoad",
- "patchTarget": "Il2Cpp.MainGameManager::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.OnLoad",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MainGameManager",
- "name": "greg.SYSTEM.OnLoad.MainGameManager"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.OnDestroy",
- "patchTarget": "Il2Cpp.MainGameManager::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.OnDestroy",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MainGameManager",
- "name": "greg.SYSTEM.OnDestroy.MainGameManager"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.AutoSaveCoroutine",
- "patchTarget": "Il2Cpp.MainGameManager::IEnumerator AutoSaveCoroutine()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.AutoSaveCoroutine",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AutoSaveCoroutine"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.SetAutoSaveInterval",
- "patchTarget": "Il2Cpp.MainGameManager::void SetAutoSaveInterval(float minutes)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.SetAutoSaveInterval",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "minutes": "float",
- "hookSubject": "string"
- },
- "hookSubject": "MainGameManager_floatminutes",
- "name": "greg.SYSTEM.AutoSaveIntervalSet.MainGameManager_floatminutes"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.SetAutoSaveEnabled",
- "patchTarget": "Il2Cpp.MainGameManager::void SetAutoSaveEnabled(bool enabled)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.SetAutoSaveEnabled",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "enabled": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AutoSaveEnabledSet"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.RestartAutoSave",
- "patchTarget": "Il2Cpp.MainGameManager::void RestartAutoSave()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.RestartAutoSave",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RestartAutoSave"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ReturnServerNameFromType",
- "patchTarget": "Il2Cpp.MainGameManager::string ReturnServerNameFromType(int type)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ReturnServerNameFromType",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "type": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ReturnServerNameFromType"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.ReturnSwitchNameFromType",
- "patchTarget": "Il2Cpp.MainGameManager::string ReturnSwitchNameFromType(int type)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.ReturnSwitchNameFromType",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "type": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ReturnSwitchNameFromType"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.LoadTrolleyPosition",
- "patchTarget": "Il2Cpp.MainGameManager::void LoadTrolleyPosition(Vector3 _position, Quaternion _rotation)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.LoadTrolleyPosition",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "_position": "Vector3",
- "_rotation": "Quaternion"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TrolleyPositionLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.IsCustomerSuitableForBase",
- "patchTarget": "Il2Cpp.MainGameManager::bool IsCustomerSuitableForBase(CustomerItem customer, int customerBaseID)",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.IsCustomerSuitableForBase",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false,
- "customer": "CustomerItem",
- "customerBaseID": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsCustomerSuitableForBase"
- },
- {
- "legacy": "deprecated.SYSTEM.MainGameManager.OnApplicationQuit",
- "patchTarget": "Il2Cpp.MainGameManager::void OnApplicationQuit()",
- "strategy": "Postfix",
- "description": "Interop target MainGameManager.OnApplicationQuit",
- "payloadSchema": {
- "targetType": "MainGameManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnApplicationQuit"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.Start",
- "patchTarget": "Il2Cpp.MainMenu::void Start()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.Start",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MainMenu",
- "name": "greg.SYSTEM.ComponentInitialized.MainMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.Continue",
- "patchTarget": "Il2Cpp.MainMenu::void Continue()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.Continue",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Continue"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.NewGame",
- "patchTarget": "Il2Cpp.MainMenu::void NewGame()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.NewGame",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.NewGame"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.QuitGame",
- "patchTarget": "Il2Cpp.MainMenu::void QuitGame()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.QuitGame",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.QuitGame"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.LoadGame",
- "patchTarget": "Il2Cpp.MainMenu::void LoadGame()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.LoadGame",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.GameLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.HideMiddleMenu",
- "patchTarget": "Il2Cpp.MainMenu::void HideMiddleMenu()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.HideMiddleMenu",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HideMiddleMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.Load",
- "patchTarget": "Il2Cpp.MainMenu::void Load(TextMeshProUGUI _text)",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.Load",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false,
- "_text": "TextMeshProUGUI",
- "hookSubject": "string"
- },
- "hookSubject": "MainMenu_TextMeshProUGUI_text",
- "name": "greg.SYSTEM.Load.MainMenu_TextMeshProUGUI_text"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenu.Settings",
- "patchTarget": "Il2Cpp.MainMenu::void Settings()",
- "strategy": "Postfix",
- "description": "Interop target MainMenu.Settings",
- "payloadSchema": {
- "targetType": "MainMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.tingsSet"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenuCamera.Start",
- "patchTarget": "Il2Cpp.MainMenuCamera::void Start()",
- "strategy": "Postfix",
- "description": "Interop target MainMenuCamera.Start",
- "payloadSchema": {
- "targetType": "MainMenuCamera",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MainMenuCamera",
- "name": "greg.SYSTEM.ComponentInitialized.MainMenuCamera"
- },
- {
- "legacy": "deprecated.SYSTEM.MainMenuCamera.setmount",
- "patchTarget": "Il2Cpp.MainMenuCamera::void setmount(Transform newmount)",
- "strategy": "Postfix",
- "description": "Interop target MainMenuCamera.setmount",
- "payloadSchema": {
- "targetType": "MainMenuCamera",
- "isStatic": false,
- "newmount": "Transform"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.setmount"
- },
- {
- "legacy": "deprecated.SYSTEM.MusicPlayer.Awake",
- "patchTarget": "Il2Cpp.MusicPlayer::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target MusicPlayer.Awake",
- "payloadSchema": {
- "targetType": "MusicPlayer",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MusicPlayer",
- "name": "greg.SYSTEM.ComponentInitialized.MusicPlayer"
- },
- {
- "legacy": "deprecated.SYSTEM.MusicPlayer.InteractOnClick",
- "patchTarget": "Il2Cpp.MusicPlayer::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target MusicPlayer.InteractOnClick",
- "payloadSchema": {
- "targetType": "MusicPlayer",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MusicPlayer",
- "name": "greg.SYSTEM.InteractOnClick.MusicPlayer"
- },
- {
- "legacy": "deprecated.SYSTEM.MusicPlayer.PlayRandomSong",
- "patchTarget": "Il2Cpp.MusicPlayer::void PlayRandomSong()",
- "strategy": "Postfix",
- "description": "Interop target MusicPlayer.PlayRandomSong",
- "payloadSchema": {
- "targetType": "MusicPlayer",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PlayRandomSong"
- },
- {
- "legacy": "deprecated.SYSTEM.MusicPlayer.InteractOnHover",
- "patchTarget": "Il2Cpp.MusicPlayer::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target MusicPlayer.InteractOnHover",
- "payloadSchema": {
- "targetType": "MusicPlayer",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "MusicPlayer_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.MusicPlayer_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.MusicPlayer.OnHoverOver",
- "patchTarget": "Il2Cpp.MusicPlayer::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target MusicPlayer.OnHoverOver",
- "payloadSchema": {
- "targetType": "MusicPlayer",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "MusicPlayer",
- "name": "greg.SYSTEM.OnHoverOver.MusicPlayer"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.Awake",
- "patchTarget": "Il2Cpp.NetworkMap::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.Awake",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkMap",
- "name": "greg.NETWORK.ComponentInitialized.NetworkMap"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.ClearMap",
- "patchTarget": "Il2Cpp.NetworkMap::void ClearMap()",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.ClearMap",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ClearMap"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RegisterCustomerBase",
- "patchTarget": "Il2Cpp.NetworkMap::void RegisterCustomerBase(CustomerBase customerBase)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RegisterCustomerBase",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "customerBase": "CustomerBase"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.RegisterCustomerBase"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RegisterServer",
- "patchTarget": "Il2Cpp.NetworkMap::void RegisterServer(Server server)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RegisterServer",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "server": "Server"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.RegisterServer"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RegisterSwitch",
- "patchTarget": "Il2Cpp.NetworkMap::void RegisterSwitch(NetworkSwitch networkSwitch)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RegisterSwitch",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.RegisterSwitch"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.UpdateCustomerServerCountAndSpeed",
- "patchTarget": "Il2Cpp.NetworkMap::void UpdateCustomerServerCountAndSpeed(int customerId, int serverCount, float speed)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.UpdateCustomerServerCountAndSpeed",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "customerId": "int",
- "serverCount": "int",
- "speed": "float"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CustomerServerCountAndSpeedChanged"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.UpdateDeviceCustomerID",
- "patchTarget": "Il2Cpp.NetworkMap::void UpdateDeviceCustomerID(string deviceName, int customerID)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.UpdateDeviceCustomerID",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "deviceName": "string",
- "customerID": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.DeviceCustomerIDChanged"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.AddDevice",
- "patchTarget": "Il2Cpp.NetworkMap::void AddDevice(string name, CableLink.TypeOfLink type, int customerID = -1)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.AddDevice",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "name": "string",
- "type": "CableLink.TypeOfLink",
- "customerID": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.DeviceAdded"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveDevice",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveDevice(string name)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveDevice",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "name": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveDeviceRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.Connect",
- "patchTarget": "Il2Cpp.NetworkMap::void Connect(string from, string to)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.Connect",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "from": "string",
- "to": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.Connect"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.Disconnect",
- "patchTarget": "Il2Cpp.NetworkMap::void Disconnect(string from, string to)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.Disconnect",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "from": "string",
- "to": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.Disconnect"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.FindAllRoutes",
- "patchTarget": "Il2Cpp.NetworkMap::List> FindAllRoutes(string baseName, string serverName)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.FindAllRoutes",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "baseName": "string",
- "serverName": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.FindAllRoutes"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.FindPhysicalPath",
- "patchTarget": "Il2Cpp.NetworkMap::List> FindPhysicalPath(string start, string target)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.FindPhysicalPath",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "start": "string",
- "target": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.FindPhysicalPath"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.GenerateDeviceName",
- "patchTarget": "Il2Cpp.NetworkMap::string GenerateDeviceName(CableLink.TypeOfLink type, Vector3 position)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.GenerateDeviceName",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "type": "CableLink.TypeOfLink",
- "position": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.GenerateDeviceName"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RegisterCableConnection",
- "patchTarget": "Il2Cpp.NetworkMap::void RegisterCableConnection(int cableId, Vector3 startPos, Vector3 endPos, CableLink.TypeOfLink startType, CableLink.TypeOfLink endType, string startSwitchID = \"\", string endSwitchID = \"\", int startCustomerID = -1, int endCustomerID = -1, string startServerID = \"\", string endServerID = \"\")",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RegisterCableConnection",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "cableId": "int",
- "startPos": "Vector3",
- "endPos": "Vector3",
- "startType": "CableLink.TypeOfLink",
- "endType": "CableLink.TypeOfLink",
- "startSwitchID": "string",
- "endSwitchID": "string",
- "startCustomerID": "int",
- "endCustomerID": "int",
- "startServerID": "string",
- "endServerID": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.RegisterCableConnection"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.AddSwitchConnection",
- "patchTarget": "Il2Cpp.NetworkMap::void AddSwitchConnection(string switchName, string deviceName)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.AddSwitchConnection",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "switchName": "string",
- "deviceName": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.SwitchConnectionAdded"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveCableConnection",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveCableConnection(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveCableConnection",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveCableConnectionRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveIsolatedDevices",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveIsolatedDevices()",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveIsolatedDevices",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveIsolatedDevicesRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.PrintNetworkMap",
- "patchTarget": "Il2Cpp.NetworkMap::string PrintNetworkMap()",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.PrintNetworkMap",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.PrintNetworkMap"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.IsIpAddressDuplicate",
- "patchTarget": "Il2Cpp.NetworkMap::bool IsIpAddressDuplicate(string ip, Server serverToExclude)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.IsIpAddressDuplicate",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "ip": "string",
- "serverToExclude": "Server"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.IsIpAddressDuplicate"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.AddBrokenServer",
- "patchTarget": "Il2Cpp.NetworkMap::void AddBrokenServer(Server server)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.AddBrokenServer",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "server": "Server"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.BrokenServerAdded"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.AddBrokenSwitch",
- "patchTarget": "Il2Cpp.NetworkMap::void AddBrokenSwitch(NetworkSwitch networkSwitch)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.AddBrokenSwitch",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.BrokenSwitchAdded"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveBrokenServer",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveBrokenServer(string serverId)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveBrokenServer",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "serverId": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveBrokenServerRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveBrokenSwitch",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveBrokenSwitch(string switchId)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveBrokenSwitch",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "switchId": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveBrokenSwitchRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.IsPatchPanelPort",
- "patchTarget": "Il2Cpp.NetworkMap::bool IsPatchPanelPort(string deviceName)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.IsPatchPanelPort",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "deviceName": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.IsPatchPanelPort"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.ResolveThroughPatchPanel",
- "patchTarget": "Il2Cpp.NetworkMap::string ResolveThroughPatchPanel(string patchPanelPort, string fromDevice)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.ResolveThroughPatchPanel",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "patchPanelPort": "string",
- "fromDevice": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ResolveThroughPatchPanel"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.CreateLACPGroup",
- "patchTarget": "Il2Cpp.NetworkMap::int CreateLACPGroup(string deviceA, string deviceB, List cableIds)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.CreateLACPGroup",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "deviceA": "string",
- "deviceB": "string",
- "cableIds": "List"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CreateLACPGroup"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveLACPGroup",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveLACPGroup(int groupId)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveLACPGroup",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "groupId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveLACPGroupRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.RemoveCableFromLACPGroups",
- "patchTarget": "Il2Cpp.NetworkMap::void RemoveCableFromLACPGroups(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.RemoveCableFromLACPGroups",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveCableFromLACPGroupsRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkMap.SetLACPGroups",
- "patchTarget": "Il2Cpp.NetworkMap::void SetLACPGroups(Dictionary groups)",
- "strategy": "Postfix",
- "description": "Interop target NetworkMap.SetLACPGroups",
- "payloadSchema": {
- "targetType": "NetworkMap",
- "isStatic": false,
- "groups": "Dictionary"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.LACPGroupsSet"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.Awake",
- "patchTarget": "Il2Cpp.NetworkSwitch::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.Awake",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitch_3f0883918d",
- "name": "greg.NETWORK.ComponentInitialized.NetworkSwitch_3f0883918d"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.Start",
- "patchTarget": "Il2Cpp.NetworkSwitch::void Start()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.Start",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitch_e1ad1a239e",
- "name": "greg.NETWORK.ComponentInitialized.NetworkSwitch_e1ad1a239e"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.PowerButton",
- "patchTarget": "Il2Cpp.NetworkSwitch::void PowerButton(bool forceState = false)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.PowerButton",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "forceState": "bool"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.PowerButton"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.TurnOffCommonFunctions",
- "patchTarget": "Il2Cpp.NetworkSwitch::void TurnOffCommonFunctions()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.TurnOffCommonFunctions",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.TurnOffCommonFunctions"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.TurnOnCommonFunction",
- "patchTarget": "Il2Cpp.NetworkSwitch::void TurnOnCommonFunction()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.TurnOnCommonFunction",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.TurnOnCommonFunction"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.IsAnyCableConnected",
- "patchTarget": "Il2Cpp.NetworkSwitch::bool IsAnyCableConnected()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.IsAnyCableConnected",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitch",
- "name": "greg.NETWORK.IsAnyCableConnected.NetworkSwitch"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.InteractOnClick",
- "patchTarget": "Il2Cpp.NetworkSwitch::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.InteractOnClick",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitch",
- "name": "greg.NETWORK.InteractOnClick.NetworkSwitch"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.InteractOnHover",
- "patchTarget": "Il2Cpp.NetworkSwitch::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.InteractOnHover",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitch_RaycastHithit",
- "name": "greg.NETWORK.InteractOnHover.NetworkSwitch_RaycastHithit"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.SwitchInsertedInRack",
- "patchTarget": "Il2Cpp.NetworkSwitch::void SwitchInsertedInRack(SwitchSaveData switchSaveData = null)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.SwitchInsertedInRack",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "switchSaveData": "SwitchSaveData"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.SwitchInsertedInRack"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.DisconnectCablesWhenSwitchIsOff",
- "patchTarget": "Il2Cpp.NetworkSwitch::void DisconnectCablesWhenSwitchIsOff()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.DisconnectCablesWhenSwitchIsOff",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.DisconnectCablesWhenSwitchIsOff"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.HandleNewCableWhileOff",
- "patchTarget": "Il2Cpp.NetworkSwitch::void HandleNewCableWhileOff(int cableId)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.HandleNewCableWhileOff",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "cableId": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.HandleNewCableWhileOff"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.BrekingInProgress",
- "patchTarget": "Il2Cpp.NetworkSwitch::IEnumerator BrekingInProgress()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.BrekingInProgress",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.BrekingInProgress"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.UpdateScreenUI",
- "patchTarget": "Il2Cpp.NetworkSwitch::void UpdateScreenUI()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.UpdateScreenUI",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ScreenUIChanged"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.ItIsBroken",
- "patchTarget": "Il2Cpp.NetworkSwitch::void ItIsBroken()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.ItIsBroken",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ItIsBroken"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.DisconnectCables",
- "patchTarget": "Il2Cpp.NetworkSwitch::void DisconnectCables()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.DisconnectCables",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.DisconnectCables"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.ReconnectCables",
- "patchTarget": "Il2Cpp.NetworkSwitch::void ReconnectCables()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.ReconnectCables",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ReconnectCables"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.ValidateRackPosition",
- "patchTarget": "Il2Cpp.NetworkSwitch::bool ValidateRackPosition()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.ValidateRackPosition",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ValidateRackPosition"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.ButtonShowNetworkSwitchConfig",
- "patchTarget": "Il2Cpp.NetworkSwitch::void ButtonShowNetworkSwitchConfig()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.ButtonShowNetworkSwitchConfig",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ButtonShowNetworkSwitchConfig"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.ClearWarningSign",
- "patchTarget": "Il2Cpp.NetworkSwitch::void ClearWarningSign(bool isPreserved = false)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.ClearWarningSign",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "isPreserved": "bool"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ClearWarningSign"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.ClearErrorSign",
- "patchTarget": "Il2Cpp.NetworkSwitch::void ClearErrorSign()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.ClearErrorSign",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ClearErrorSign"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.OnDestroy",
- "patchTarget": "Il2Cpp.NetworkSwitch::override void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.OnDestroy",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitch",
- "name": "greg.NETWORK.OnDestroy.NetworkSwitch"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.SetPowerLightMaterial",
- "patchTarget": "Il2Cpp.NetworkSwitch::void SetPowerLightMaterial(Material material)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.SetPowerLightMaterial",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false,
- "material": "Material"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.PowerLightMaterialSet"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitch.RepairDevice",
- "patchTarget": "Il2Cpp.NetworkSwitch::void RepairDevice()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitch.RepairDevice",
- "payloadSchema": {
- "targetType": "NetworkSwitch",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.DeviceRepaired"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.Awake",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.Awake",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "NetworkSwitchConfiguration",
- "name": "greg.NETWORK.ComponentInitialized.NetworkSwitchConfiguration"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.OpenConfig",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void OpenConfig(NetworkSwitch networkSwitch)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.OpenConfig",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.OpenConfig"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.RefreshPortDisplay",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void RefreshPortDisplay()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.RefreshPortDisplay",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.RefreshPortDisplay"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.ResolveRemoteDevice",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::string ResolveRemoteDevice(CableLink port)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.ResolveRemoteDevice",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "port": "CableLink"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ResolveRemoteDevice"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.ClickPort",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void ClickPort(int i)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.ClickPort",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ClickPort"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.CreateLACP",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void CreateLACP()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.CreateLACP",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CreateLACP"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.RemoveLACP",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void RemoveLACP()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.RemoveLACP",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveLACPRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.OnEndEditingInputText",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void OnEndEditingInputText(string s)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.OnEndEditingInputText",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "s": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.OnEndEditingInputText"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.CloseConfig",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::void CloseConfig()",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.CloseConfig",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.CloseConfig"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.NormalizeDeviceKey",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::string NormalizeDeviceKey(string deviceName)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.NormalizeDeviceKey",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "deviceName": "string"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.NormalizeDeviceKey"
- },
- {
- "legacy": "deprecated.NETWORK.NetworkSwitchConfiguration.ResolveAllCableIds",
- "patchTarget": "Il2Cpp.NetworkSwitchConfiguration::List ResolveAllCableIds(CableLink port)",
- "strategy": "Postfix",
- "description": "Interop target NetworkSwitchConfiguration.ResolveAllCableIds",
- "payloadSchema": {
- "targetType": "NetworkSwitchConfiguration",
- "isStatic": false,
- "port": "CableLink"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ResolveAllCableIds"
- },
- {
- "legacy": "deprecated.GAMEPLAY.ObjectiveObject.Start",
- "patchTarget": "Il2Cpp.ObjectiveObject::void Start()",
- "strategy": "Postfix",
- "description": "Interop target ObjectiveObject.Start",
- "payloadSchema": {
- "targetType": "ObjectiveObject",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ObjectiveObject",
- "name": "greg.GAMEPLAY.ComponentInitialized.ObjectiveObject"
- },
- {
- "legacy": "deprecated.GAMEPLAY.ObjectiveObject.GetReward",
- "patchTarget": "Il2Cpp.ObjectiveObject::void GetReward()",
- "strategy": "Postfix",
- "description": "Interop target ObjectiveObject.GetReward",
- "payloadSchema": {
- "targetType": "ObjectiveObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.GetReward"
- },
- {
- "legacy": "deprecated.GAMEPLAY.ObjectiveObject.PlayUIEffectDisolve",
- "patchTarget": "Il2Cpp.ObjectiveObject::void PlayUIEffectDisolve()",
- "strategy": "Postfix",
- "description": "Interop target ObjectiveObject.PlayUIEffectDisolve",
- "payloadSchema": {
- "targetType": "ObjectiveObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.PlayUIEffectDisolve"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.Awake",
- "patchTarget": "Il2Cpp.Objectives::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.Awake",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Objectives_1fdfb233c1",
- "name": "greg.GAMEPLAY.ComponentInitialized.Objectives_1fdfb233c1"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.Start",
- "patchTarget": "Il2Cpp.Objectives::void Start()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.Start",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Objectives_8bd3b70d91",
- "name": "greg.GAMEPLAY.ComponentInitialized.Objectives_8bd3b70d91"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.IsTutorialInProgress",
- "patchTarget": "Il2Cpp.Objectives::bool IsTutorialInProgress()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.IsTutorialInProgress",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.IsTutorialInProgress"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.CreateNewObjective",
- "patchTarget": "Il2Cpp.Objectives::void CreateNewObjective(int localisationUID, int _objectiveUID, Vector3 objectivePosition, int xpReward = 0, int reputationReward = 0, bool isSub = false)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.CreateNewObjective",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "localisationUID": "int",
- "_objectiveUID": "int",
- "objectivePosition": "Vector3",
- "xpReward": "int",
- "reputationReward": "int",
- "isSub": "bool"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.CreateNewObjective"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.CreateAppObjective",
- "patchTarget": "Il2Cpp.Objectives::int CreateAppObjective(int customerID, int appID, int time, int requiredIOPS)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.CreateAppObjective",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "customerID": "int",
- "appID": "int",
- "time": "int",
- "requiredIOPS": "int"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.CreateAppObjective"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.ObjectiveTimedText",
- "patchTarget": "Il2Cpp.Objectives::string ObjectiveTimedText()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.ObjectiveTimedText",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.ObjectiveTimedText"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.DestroyObjective",
- "patchTarget": "Il2Cpp.Objectives::void DestroyObjective(int _objectiveUID)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.DestroyObjective",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "_objectiveUID": "int"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.DestroyObjective"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.EffectOnDestroy",
- "patchTarget": "Il2Cpp.Objectives::IEnumerator EffectOnDestroy(int _objectiveUID)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.EffectOnDestroy",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "_objectiveUID": "int"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.EffectOnDestroy"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.ClearObjectives",
- "patchTarget": "Il2Cpp.Objectives::void ClearObjectives()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.ClearObjectives",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.ClearObjectives"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.StartObjective",
- "patchTarget": "Il2Cpp.Objectives::void StartObjective(int _objectiveUID, Vector3 objectivePosition, bool _loadSave = false)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.StartObjective",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "_objectiveUID": "int",
- "objectivePosition": "Vector3",
- "_loadSave": "bool",
- "hookSubject": "string"
- },
- "hookSubject": "Objectives_int_objectiveUIDVector3objectivePosition",
- "name": "greg.GAMEPLAY.StartObjective.Objectives_int_objectiveUIDVector3objectivePosition"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.StartObjective",
- "patchTarget": "Il2Cpp.Objectives::void StartObjective(int _objectiveUID, bool _loadSave = false)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.StartObjective",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "_objectiveUID": "int",
- "_loadSave": "bool",
- "hookSubject": "string"
- },
- "hookSubject": "Objectives_int_objectiveUIDbool_loadSavefalse",
- "name": "greg.GAMEPLAY.StartObjective.Objectives_int_objectiveUIDbool_loadSavefalse"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.InstantiateObjectiveSign",
- "patchTarget": "Il2Cpp.Objectives::void InstantiateObjectiveSign(int objectiveUID, Vector3 objectPos)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.InstantiateObjectiveSign",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "objectiveUID": "int",
- "objectPos": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.InstantiateObjectiveSign"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.RemoveObjectiveSign",
- "patchTarget": "Il2Cpp.Objectives::void RemoveObjectiveSign(int objectiveUID)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.RemoveObjectiveSign",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "objectiveUID": "int"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.oveObjectiveSignRemoved"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.LoadObjectives",
- "patchTarget": "Il2Cpp.Objectives::void LoadObjectives(HashSet _activeObjectives)",
- "strategy": "Postfix",
- "description": "Interop target Objectives.LoadObjectives",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false,
- "_activeObjectives": "HashSet"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.ObjectivesLoaded"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.OnDestroy",
- "patchTarget": "Il2Cpp.Objectives::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.OnDestroy",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.OnDestroy"
- },
- {
- "legacy": "deprecated.GAMEPLAY.Objectives.OnLoad",
- "patchTarget": "Il2Cpp.Objectives::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target Objectives.OnLoad",
- "payloadSchema": {
- "targetType": "Objectives",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.OnLoad"
- },
- {
- "legacy": "deprecated.GAMEPLAY.ObjectiveTimed.SetupObjectiveTimed",
- "patchTarget": "Il2Cpp.ObjectiveTimed::void SetupObjectiveTimed(int _maxTime, string _objectiveText, int customerID, int appID, int _requiredIOPS)",
- "strategy": "Postfix",
- "description": "Interop target ObjectiveTimed.SetupObjectiveTimed",
- "payloadSchema": {
- "targetType": "ObjectiveTimed",
- "isStatic": false,
- "_maxTime": "int",
- "_objectiveText": "string",
- "customerID": "int",
- "appID": "int",
- "_requiredIOPS": "int"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.upObjectiveTimedSet"
- },
- {
- "legacy": "deprecated.GAMEPLAY.ObjectiveTimed.UpdateDisplay",
- "patchTarget": "Il2Cpp.ObjectiveTimed::void UpdateDisplay(int currentIOPS, int remainingTime)",
- "strategy": "Postfix",
- "description": "Interop target ObjectiveTimed.UpdateDisplay",
- "payloadSchema": {
- "targetType": "ObjectiveTimed",
- "isStatic": false,
- "currentIOPS": "int",
- "remainingTime": "int"
- },
- "hookSubject": null,
- "name": "greg.GAMEPLAY.DisplayChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.OpenURL.OpenURLInBrowser",
- "patchTarget": "Il2Cpp.OpenURL::void OpenURLInBrowser()",
- "strategy": "Postfix",
- "description": "Interop target OpenURL.OpenURLInBrowser",
- "payloadSchema": {
- "targetType": "OpenURL",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OpenURLInBrowser"
- },
- {
- "legacy": "deprecated.NETWORK.PacketComponent.BoxIl2CppObject",
- "patchTarget": "Il2Cpp.PacketComponent::Object BoxIl2CppObject()",
- "strategy": "Postfix",
- "description": "Interop target PacketComponent.BoxIl2CppObject",
- "payloadSchema": {
- "targetType": "PacketComponent",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PacketComponent",
- "name": "greg.NETWORK.BoxIl2CppObject.PacketComponent"
- },
- {
- "legacy": "deprecated.NETWORK.PacketSpawnerSystem.OnCreate",
- "patchTarget": "Il2Cpp.PacketSpawnerSystem::void OnCreate(ref SystemState state)",
- "strategy": "Postfix",
- "description": "Interop target PacketSpawnerSystem.OnCreate",
- "payloadSchema": {
- "targetType": "PacketSpawnerSystem",
- "isStatic": false,
- "state": "refSystemState"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.OnCreate"
- },
- {
- "legacy": "deprecated.NETWORK.PacketSpawnerSystem.OnUpdate",
- "patchTarget": "Il2Cpp.PacketSpawnerSystem::void OnUpdate(ref SystemState state)",
- "strategy": "Postfix",
- "description": "Interop target PacketSpawnerSystem.OnUpdate",
- "payloadSchema": {
- "targetType": "PacketSpawnerSystem",
- "isStatic": false,
- "state": "refSystemState"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.OnUpdate"
- },
- {
- "legacy": "deprecated.NETWORK.PacketSpawnerSystem.SpawnPacket",
- "patchTarget": "Il2Cpp.PacketSpawnerSystem::void SpawnPacket(EntityCommandBuffer ecb, PacketSpawnerComponent spawner, int spawnerIndex, ref BlobArray waypoints)",
- "strategy": "Postfix",
- "description": "Interop target PacketSpawnerSystem.SpawnPacket",
- "payloadSchema": {
- "targetType": "PacketSpawnerSystem",
- "isStatic": false,
- "ecb": "EntityCommandBuffer",
- "spawner": "PacketSpawnerComponent",
- "spawnerIndex": "int",
- "waypoints": "refBlobArray"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.PacketSpawned"
- },
- {
- "legacy": "deprecated.NETWORK.PacketSpawnerSystem.OnCreateForCompiler",
- "patchTarget": "Il2Cpp.PacketSpawnerSystem::void OnCreateForCompiler(ref SystemState state)",
- "strategy": "Postfix",
- "description": "Interop target PacketSpawnerSystem.OnCreateForCompiler",
- "payloadSchema": {
- "targetType": "PacketSpawnerSystem",
- "isStatic": false,
- "state": "refSystemState"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.OnCreateForCompiler"
- },
- {
- "legacy": "deprecated.NETWORK.PacketSpawnerSystem.Method_Internal_Static_Void_IntPtr_IntPtr_PDM_0",
- "patchTarget": "Il2Cpp.PacketSpawnerSystem::static void Method_Internal_Static_Void_IntPtr_IntPtr_PDM_0(IntPtr self, IntPtr state)",
- "strategy": "Postfix",
- "description": "Interop target PacketSpawnerSystem.Method_Internal_Static_Void_IntPtr_IntPtr_PDM_0",
- "payloadSchema": {
- "targetType": "PacketSpawnerSystem",
- "isStatic": true,
- "self": "IntPtr",
- "state": "IntPtr"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.Method_Internal_Static_Void_IntPtr_IntPtr_PDM_0"
- },
- {
- "legacy": "deprecated.NETWORK.PacketSpawnerSystem.Method_Internal_Static_Void_IntPtr_IntPtr_PDM_1",
- "patchTarget": "Il2Cpp.PacketSpawnerSystem::static void Method_Internal_Static_Void_IntPtr_IntPtr_PDM_1(IntPtr self, IntPtr state)",
- "strategy": "Postfix",
- "description": "Interop target PacketSpawnerSystem.Method_Internal_Static_Void_IntPtr_IntPtr_PDM_1",
- "payloadSchema": {
- "targetType": "PacketSpawnerSystem",
- "isStatic": true,
- "self": "IntPtr",
- "state": "IntPtr"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.Method_Internal_Static_Void_IntPtr_IntPtr_PDM_1"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.Awake",
- "patchTarget": "Il2Cpp.PatchPanel::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.Awake",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PatchPanel",
- "name": "greg.SYSTEM.ComponentInitialized.PatchPanel"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.IsAnyCableConnected",
- "patchTarget": "Il2Cpp.PatchPanel::bool IsAnyCableConnected()",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.IsAnyCableConnected",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsAnyCableConnected"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.InteractOnClick",
- "patchTarget": "Il2Cpp.PatchPanel::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.InteractOnClick",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PatchPanel",
- "name": "greg.SYSTEM.InteractOnClick.PatchPanel"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.InteractOnHover",
- "patchTarget": "Il2Cpp.PatchPanel::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.InteractOnHover",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "PatchPanel_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.PatchPanel_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.InsertedInRack",
- "patchTarget": "Il2Cpp.PatchPanel::void InsertedInRack(PatchPanelSaveData saveData = null)",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.InsertedInRack",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false,
- "saveData": "PatchPanelSaveData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InsertedInRack"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.ValidateRackPosition",
- "patchTarget": "Il2Cpp.PatchPanel::bool ValidateRackPosition()",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.ValidateRackPosition",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ValidateRackPosition"
- },
- {
- "legacy": "deprecated.SYSTEM.PatchPanel.OnDestroy",
- "patchTarget": "Il2Cpp.PatchPanel::override void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target PatchPanel.OnDestroy",
- "payloadSchema": {
- "targetType": "PatchPanel",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PatchPanel",
- "name": "greg.SYSTEM.OnDestroy.PatchPanel"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabButton.UnityEngine_EventSystems_ISelectHandler_OnSelect",
- "patchTarget": "Il2Cpp.PauseMenu_TabButton::virtual void UnityEngine_EventSystems_ISelectHandler_OnSelect(BaseEventData eventData)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabButton.UnityEngine_EventSystems_ISelectHandler_OnSelect",
- "payloadSchema": {
- "targetType": "PauseMenu_TabButton",
- "isStatic": false,
- "eventData": "BaseEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnityEngine_EventSystems_ISelectHandler_OnSelect"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabButton.UnityEngine_EventSystems_IPointerClickHandler_OnPointerClick",
- "patchTarget": "Il2Cpp.PauseMenu_TabButton::virtual void UnityEngine_EventSystems_IPointerClickHandler_OnPointerClick(PointerEventData eventData)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabButton.UnityEngine_EventSystems_IPointerClickHandler_OnPointerClick",
- "payloadSchema": {
- "targetType": "PauseMenu_TabButton",
- "isStatic": false,
- "eventData": "PointerEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnityEngine_EventSystems_IPointerClickHandler_OnPointerClick"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabButton.UnityEngine_EventSystems_IPointerEnterHandler_OnPointerEnter",
- "patchTarget": "Il2Cpp.PauseMenu_TabButton::virtual void UnityEngine_EventSystems_IPointerEnterHandler_OnPointerEnter(PointerEventData eventData)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabButton.UnityEngine_EventSystems_IPointerEnterHandler_OnPointerEnter",
- "payloadSchema": {
- "targetType": "PauseMenu_TabButton",
- "isStatic": false,
- "eventData": "PointerEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnityEngine_EventSystems_IPointerEnterHandler_OnPointerEnter"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabButton.UnityEngine_EventSystems_IPointerExitHandler_OnPointerExit",
- "patchTarget": "Il2Cpp.PauseMenu_TabButton::virtual void UnityEngine_EventSystems_IPointerExitHandler_OnPointerExit(PointerEventData eventData)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabButton.UnityEngine_EventSystems_IPointerExitHandler_OnPointerExit",
- "payloadSchema": {
- "targetType": "PauseMenu_TabButton",
- "isStatic": false,
- "eventData": "PointerEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnityEngine_EventSystems_IPointerExitHandler_OnPointerExit"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabButton.Start",
- "patchTarget": "Il2Cpp.PauseMenu_TabButton::void Start()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabButton.Start",
- "payloadSchema": {
- "targetType": "PauseMenu_TabButton",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenu_TabButton",
- "name": "greg.SYSTEM.ComponentInitialized.PauseMenu_TabButton"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabGroup.Subscribe",
- "patchTarget": "Il2Cpp.PauseMenu_TabGroup::void Subscribe(PauseMenu_TabButton tabbutton)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabGroup.Subscribe",
- "payloadSchema": {
- "targetType": "PauseMenu_TabGroup",
- "isStatic": false,
- "tabbutton": "PauseMenu_TabButton"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Subscribe"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabGroup.OnTabEnter",
- "patchTarget": "Il2Cpp.PauseMenu_TabGroup::void OnTabEnter(PauseMenu_TabButton tabbutton)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabGroup.OnTabEnter",
- "payloadSchema": {
- "targetType": "PauseMenu_TabGroup",
- "isStatic": false,
- "tabbutton": "PauseMenu_TabButton"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnTabEnter"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabGroup.OnTabExit",
- "patchTarget": "Il2Cpp.PauseMenu_TabGroup::void OnTabExit(PauseMenu_TabButton tabbutton)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabGroup.OnTabExit",
- "payloadSchema": {
- "targetType": "PauseMenu_TabGroup",
- "isStatic": false,
- "tabbutton": "PauseMenu_TabButton"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnTabExit"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabGroup.OnTabSelected",
- "patchTarget": "Il2Cpp.PauseMenu_TabGroup::void OnTabSelected(PauseMenu_TabButton tabbutton)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabGroup.OnTabSelected",
- "payloadSchema": {
- "targetType": "PauseMenu_TabGroup",
- "isStatic": false,
- "tabbutton": "PauseMenu_TabButton"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnTabSelected"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu_TabGroup.ResetTabs",
- "patchTarget": "Il2Cpp.PauseMenu_TabGroup::void ResetTabs()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu_TabGroup.ResetTabs",
- "payloadSchema": {
- "targetType": "PauseMenu_TabGroup",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResetTabs"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.Awake",
- "patchTarget": "Il2Cpp.PauseMenu::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.Awake",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenu",
- "name": "greg.SYSTEM.ComponentInitialized.PauseMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.OnEnable",
- "patchTarget": "Il2Cpp.PauseMenu::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.OnEnable",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenu",
- "name": "greg.SYSTEM.ComponentEnabled.PauseMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.OnDisable",
- "patchTarget": "Il2Cpp.PauseMenu::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.OnDisable",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenu",
- "name": "greg.SYSTEM.ComponentDisabled.PauseMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.OnDestroy",
- "patchTarget": "Il2Cpp.PauseMenu::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.OnDestroy",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenu",
- "name": "greg.SYSTEM.OnDestroy.PauseMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.OnPause",
- "patchTarget": "Il2Cpp.PauseMenu::void OnPause(int openMenu)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.OnPause",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "openMenu": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnPause"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.Resume",
- "patchTarget": "Il2Cpp.PauseMenu::void Resume()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.Resume",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Resume"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.PopulateLoadSaveMenu",
- "patchTarget": "Il2Cpp.PauseMenu::void PopulateLoadSaveMenu(bool _savingGame)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.PopulateLoadSaveMenu",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "_savingGame": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PopulateLoadSaveMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.LoadSaveOnButtonClick",
- "patchTarget": "Il2Cpp.PauseMenu::void LoadSaveOnButtonClick(TextMeshProUGUI _text)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.LoadSaveOnButtonClick",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "_text": "TextMeshProUGUI"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SaveOnButtonClickLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.NotAllowedToSaveOverlayOff",
- "patchTarget": "Il2Cpp.PauseMenu::void NotAllowedToSaveOverlayOff()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.NotAllowedToSaveOverlayOff",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.NotAllowedToSaveOverlayOff"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.SaveConfirm",
- "patchTarget": "Il2Cpp.PauseMenu::void SaveConfirm(bool yes)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.SaveConfirm",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "yes": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ConfirmSaved"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.ButtonSetNameOfSave",
- "patchTarget": "Il2Cpp.PauseMenu::void ButtonSetNameOfSave()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.ButtonSetNameOfSave",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonSetNameOfSave"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.Save",
- "patchTarget": "Il2Cpp.PauseMenu::void Save(string saveName = null, string _stringNameOfSave = null)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.Save",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "saveName": "string",
- "_stringNameOfSave": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Save"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.DeleteSaveButtonClick",
- "patchTarget": "Il2Cpp.PauseMenu::void DeleteSaveButtonClick(TextMeshProUGUI _text)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.DeleteSaveButtonClick",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "_text": "TextMeshProUGUI"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DeleteSaveButtonClick"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.DeleteSaveConfirm",
- "patchTarget": "Il2Cpp.PauseMenu::void DeleteSaveConfirm(bool yes)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.DeleteSaveConfirm",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "yes": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DeleteSaveConfirm"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.Load",
- "patchTarget": "Il2Cpp.PauseMenu::void Load(string savename)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.Load",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "savename": "string",
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenu_stringsavename",
- "name": "greg.SYSTEM.Load.PauseMenu_stringsavename"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.LoadWithOverlay",
- "patchTarget": "Il2Cpp.PauseMenu::IEnumerator LoadWithOverlay(string savename)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.LoadWithOverlay",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "savename": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.WithOverlayLoaded"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.Pause",
- "patchTarget": "Il2Cpp.PauseMenu::void Pause(int openMenu)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.Pause",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "openMenu": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Pause"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.MainMenu",
- "patchTarget": "Il2Cpp.PauseMenu::void MainMenu()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.MainMenu",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MainMenu"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.ExitGame",
- "patchTarget": "Il2Cpp.PauseMenu::void ExitGame()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.ExitGame",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ExitGame"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.CloseLoadSaveOverlay",
- "patchTarget": "Il2Cpp.PauseMenu::void CloseLoadSaveOverlay()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.CloseLoadSaveOverlay",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseLoadSaveOverlay"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.ProcessConsoleCommand",
- "patchTarget": "Il2Cpp.PauseMenu::void ProcessConsoleCommand(string input)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.ProcessConsoleCommand",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "input": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ProcessConsoleCommand"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenu.HandleAddCommand",
- "patchTarget": "Il2Cpp.PauseMenu::void HandleAddCommand(Il2CppStringArray parts)",
- "strategy": "Postfix",
- "description": "Interop target PauseMenu.HandleAddCommand",
- "payloadSchema": {
- "targetType": "PauseMenu",
- "isStatic": false,
- "parts": "Il2CppStringArray"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HandleAddCommand"
- },
- {
- "legacy": "deprecated.SYSTEM.PauseMenuVideoTutorial.OnDisable",
- "patchTarget": "Il2Cpp.PauseMenuVideoTutorial::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target PauseMenuVideoTutorial.OnDisable",
- "payloadSchema": {
- "targetType": "PauseMenuVideoTutorial",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PauseMenuVideoTutorial",
- "name": "greg.SYSTEM.ComponentDisabled.PauseMenuVideoTutorial"
- },
- {
- "legacy": "deprecated.PLAYER.Player.Start",
- "patchTarget": "Il2Cpp.Player::void Start()",
- "strategy": "Postfix",
- "description": "Interop target Player.Start",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Player",
- "name": "greg.PLAYER.ComponentInitialized.Player"
- },
- {
- "legacy": "deprecated.PLAYER.Player.CheckFallsThroughMap",
- "patchTarget": "Il2Cpp.Player::void CheckFallsThroughMap()",
- "strategy": "Prefix+Postfix",
- "description": "Interop target Player.CheckFallsThroughMap",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.CheckFallsThroughMap"
- },
- {
- "legacy": "deprecated.PLAYER.Player.LoadPlayer",
- "patchTarget": "Il2Cpp.Player::void LoadPlayer(PlayerData data)",
- "strategy": "Postfix",
- "description": "Interop target Player.LoadPlayer",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false,
- "data": "PlayerData"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.PlayerLoaded"
- },
- {
- "legacy": "deprecated.PLAYER.Player.TurnOnCharacterControllerDelayed",
- "patchTarget": "Il2Cpp.Player::IEnumerator TurnOnCharacterControllerDelayed()",
- "strategy": "Postfix",
- "description": "Interop target Player.TurnOnCharacterControllerDelayed",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.TurnOnCharacterControllerDelayed"
- },
- {
- "legacy": "deprecated.PLAYER.Player.UpdateCoin",
- "patchTarget": "Il2Cpp.Player::bool UpdateCoin(float _coinChhangeAmount, bool withoutSound = false)",
- "strategy": "Prefix+Postfix",
- "description": "Interop target Player.UpdateCoin",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false,
- "_coinChhangeAmount": "float",
- "withoutSound": "bool"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.CoinChanged"
- },
- {
- "legacy": "deprecated.PLAYER.Player.DropAllItems",
- "patchTarget": "Il2Cpp.Player::void DropAllItems()",
- "strategy": "Postfix",
- "description": "Interop target Player.DropAllItems",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.DroppedAllItems"
- },
- {
- "legacy": "deprecated.PLAYER.Player.WarpPlayer",
- "patchTarget": "Il2Cpp.Player::void WarpPlayer(Vector3 _position, Quaternion _rotation)",
- "strategy": "Postfix",
- "description": "Interop target Player.WarpPlayer",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false,
- "_position": "Vector3",
- "_rotation": "Quaternion"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.PlayerWarped"
- },
- {
- "legacy": "deprecated.PLAYER.Player.UpdateReputation",
- "patchTarget": "Il2Cpp.Player::void UpdateReputation(float amount)",
- "strategy": "Postfix",
- "description": "Interop target Player.UpdateReputation",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false,
- "amount": "float"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.ReputationChanged"
- },
- {
- "legacy": "deprecated.PLAYER.Player.UpdateXP",
- "patchTarget": "Il2Cpp.Player::bool UpdateXP(float amount)",
- "strategy": "Prefix+Postfix",
- "description": "Interop target Player.UpdateXP",
- "payloadSchema": {
- "targetType": "Player",
- "isStatic": false,
- "amount": "float"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.XPChanged"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerHit.OnEnable",
- "patchTarget": "Il2Cpp.PlayerHit::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target PlayerHit.OnEnable",
- "payloadSchema": {
- "targetType": "PlayerHit",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.ComponentEnabled"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.Awake",
- "patchTarget": "Il2Cpp.PlayerManager::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.Awake",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PlayerManager_de12da7ccf",
- "name": "greg.PLAYER.ComponentInitialized.PlayerManager_de12da7ccf"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.Start",
- "patchTarget": "Il2Cpp.PlayerManager::void Start()",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.Start",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PlayerManager_ccbe2b5bcf",
- "name": "greg.PLAYER.ComponentInitialized.PlayerManager_ccbe2b5bcf"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.ConfinedCursorforUI",
- "patchTarget": "Il2Cpp.PlayerManager::void ConfinedCursorforUI()",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.ConfinedCursorforUI",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.ConfinedCursorforUI"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.PlayerStopMovement",
- "patchTarget": "Il2Cpp.PlayerManager::void PlayerStopMovement()",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.PlayerStopMovement",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.PlayerStopMovement"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.LockedCursorForPlayerMovement",
- "patchTarget": "Il2Cpp.PlayerManager::void LockedCursorForPlayerMovement()",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.LockedCursorForPlayerMovement",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.LockedCursorForPlayerMovement"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.DefaultActionEffect",
- "patchTarget": "Il2Cpp.PlayerManager::void DefaultActionEffect(Vector3 _position, float _time)",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.DefaultActionEffect",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false,
- "_position": "Vector3",
- "_time": "float"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.DefaultActionEffect"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.WaitForActionToFinish",
- "patchTarget": "Il2Cpp.PlayerManager::IEnumerator WaitForActionToFinish(Vector3 _position, float _time)",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.WaitForActionToFinish",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false,
- "_position": "Vector3",
- "_time": "float"
- },
- "hookSubject": null,
- "name": "greg.PLAYER.WaitForActionToFinish"
- },
- {
- "legacy": "deprecated.PLAYER.PlayerManager.GainIOPSEffect",
- "patchTarget": "Il2Cpp.PlayerManager::void GainIOPSEffect()",
- "strategy": "Postfix",
- "description": "Interop target PlayerManager.GainIOPSEffect",
- "payloadSchema": {
- "targetType": "PlayerManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.PLAYER.GainIOPSEffect"
- },
- {
- "legacy": "deprecated.SYSTEM.PositionIndicator.Awake",
- "patchTarget": "Il2Cpp.PositionIndicator::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target PositionIndicator.Awake",
- "payloadSchema": {
- "targetType": "PositionIndicator",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PositionIndicator",
- "name": "greg.SYSTEM.ComponentInitialized.PositionIndicator"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingImageColor.Awake",
- "patchTarget": "Il2Cpp.PulsatingImageColor::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target PulsatingImageColor.Awake",
- "payloadSchema": {
- "targetType": "PulsatingImageColor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingImageColor",
- "name": "greg.SYSTEM.ComponentInitialized.PulsatingImageColor"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingImageColor.OnEnable",
- "patchTarget": "Il2Cpp.PulsatingImageColor::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target PulsatingImageColor.OnEnable",
- "payloadSchema": {
- "targetType": "PulsatingImageColor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingImageColor",
- "name": "greg.SYSTEM.ComponentEnabled.PulsatingImageColor"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingImageColor.TweenTheColors",
- "patchTarget": "Il2Cpp.PulsatingImageColor::void TweenTheColors()",
- "strategy": "Postfix",
- "description": "Interop target PulsatingImageColor.TweenTheColors",
- "payloadSchema": {
- "targetType": "PulsatingImageColor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingImageColor",
- "name": "greg.SYSTEM.TweenTheColors.PulsatingImageColor"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingImageColor.setColorCallback",
- "patchTarget": "Il2Cpp.PulsatingImageColor::void setColorCallback(Color c)",
- "strategy": "Postfix",
- "description": "Interop target PulsatingImageColor.setColorCallback",
- "payloadSchema": {
- "targetType": "PulsatingImageColor",
- "isStatic": false,
- "c": "Color",
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingImageColor_Colorc",
- "name": "greg.SYSTEM.setColorCallback.PulsatingImageColor_Colorc"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingImageColor.OnDisable",
- "patchTarget": "Il2Cpp.PulsatingImageColor::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target PulsatingImageColor.OnDisable",
- "payloadSchema": {
- "targetType": "PulsatingImageColor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingImageColor",
- "name": "greg.SYSTEM.ComponentDisabled.PulsatingImageColor"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingText.Start",
- "patchTarget": "Il2Cpp.PulsatingText::void Start()",
- "strategy": "Postfix",
- "description": "Interop target PulsatingText.Start",
- "payloadSchema": {
- "targetType": "PulsatingText",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingText",
- "name": "greg.SYSTEM.ComponentInitialized.PulsatingText"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingText.TweenTheColors",
- "patchTarget": "Il2Cpp.PulsatingText::void TweenTheColors()",
- "strategy": "Postfix",
- "description": "Interop target PulsatingText.TweenTheColors",
- "payloadSchema": {
- "targetType": "PulsatingText",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingText",
- "name": "greg.SYSTEM.TweenTheColors.PulsatingText"
- },
- {
- "legacy": "deprecated.SYSTEM.PulsatingText.setColorCallback",
- "patchTarget": "Il2Cpp.PulsatingText::void setColorCallback(Color c)",
- "strategy": "Postfix",
- "description": "Interop target PulsatingText.setColorCallback",
- "payloadSchema": {
- "targetType": "PulsatingText",
- "isStatic": false,
- "c": "Color",
- "hookSubject": "string"
- },
- "hookSubject": "PulsatingText_Colorc",
- "name": "greg.SYSTEM.setColorCallback.PulsatingText_Colorc"
- },
- {
- "legacy": "deprecated.SYSTEM.PushTrolleyHandle.Awake",
- "patchTarget": "Il2Cpp.PushTrolleyHandle::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target PushTrolleyHandle.Awake",
- "payloadSchema": {
- "targetType": "PushTrolleyHandle",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PushTrolleyHandle",
- "name": "greg.SYSTEM.ComponentInitialized.PushTrolleyHandle"
- },
- {
- "legacy": "deprecated.SYSTEM.PushTrolleyHandle.InteractOnClick",
- "patchTarget": "Il2Cpp.PushTrolleyHandle::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target PushTrolleyHandle.InteractOnClick",
- "payloadSchema": {
- "targetType": "PushTrolleyHandle",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PushTrolleyHandle",
- "name": "greg.SYSTEM.InteractOnClick.PushTrolleyHandle"
- },
- {
- "legacy": "deprecated.SYSTEM.PushTrolleyHandle.InteractOnHover",
- "patchTarget": "Il2Cpp.PushTrolleyHandle::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target PushTrolleyHandle.InteractOnHover",
- "payloadSchema": {
- "targetType": "PushTrolleyHandle",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "PushTrolleyHandle_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.PushTrolleyHandle_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.PushTrolleyHandle.OnHoverOver",
- "patchTarget": "Il2Cpp.PushTrolleyHandle::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target PushTrolleyHandle.OnHoverOver",
- "payloadSchema": {
- "targetType": "PushTrolleyHandle",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "PushTrolleyHandle",
- "name": "greg.SYSTEM.OnHoverOver.PushTrolleyHandle"
- },
- {
- "legacy": "deprecated.SYSTEM.QuaternionSerializationSurrogate.SetObjectData",
- "patchTarget": "Il2Cpp.QuaternionSerializationSurrogate::virtual Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)",
- "strategy": "Postfix",
- "description": "Interop target QuaternionSerializationSurrogate.SetObjectData",
- "payloadSchema": {
- "targetType": "QuaternionSerializationSurrogate",
- "isStatic": false,
- "obj": "Object",
- "info": "SerializationInfo",
- "context": "StreamingContext",
- "selector": "ISurrogateSelector",
- "hookSubject": "string"
- },
- "hookSubject": "QuaternionSerializationSurrogate_ObjectobjSerializationInfoinfoStreamingC",
- "name": "greg.SYSTEM.ObjectDataSet.QuaternionSerializationSurrogate_ObjectobjSerializationInfoinfoStreamingC"
- },
- {
- "legacy": "deprecated.RACK.Rack.Awake",
- "patchTarget": "Il2Cpp.Rack::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Rack.Awake",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Rack_c74551113b",
- "name": "greg.RACK.ComponentInitialized.Rack_c74551113b"
- },
- {
- "legacy": "deprecated.RACK.Rack.Start",
- "patchTarget": "Il2Cpp.Rack::void Start()",
- "strategy": "Postfix",
- "description": "Interop target Rack.Start",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Rack_60a3cc8095",
- "name": "greg.RACK.ComponentInitialized.Rack_60a3cc8095"
- },
- {
- "legacy": "deprecated.RACK.Rack.IsPositionAvailable",
- "patchTarget": "Il2Cpp.Rack::bool IsPositionAvailable(int index, int sizeInU)",
- "strategy": "Postfix",
- "description": "Interop target Rack.IsPositionAvailable",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "index": "int",
- "sizeInU": "int"
- },
- "hookSubject": null,
- "name": "greg.RACK.IsPositionAvailable"
- },
- {
- "legacy": "deprecated.RACK.Rack.MarkPositionAsUsed",
- "patchTarget": "Il2Cpp.Rack::void MarkPositionAsUsed(int index, int sizeInU)",
- "strategy": "Postfix",
- "description": "Interop target Rack.MarkPositionAsUsed",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "index": "int",
- "sizeInU": "int"
- },
- "hookSubject": null,
- "name": "greg.RACK.MarkPositionAsUsed"
- },
- {
- "legacy": "deprecated.RACK.Rack.MarkPositionAsUnused",
- "patchTarget": "Il2Cpp.Rack::void MarkPositionAsUnused(int index, int sizeInU)",
- "strategy": "Postfix",
- "description": "Interop target Rack.MarkPositionAsUnused",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "index": "int",
- "sizeInU": "int"
- },
- "hookSubject": null,
- "name": "greg.RACK.MarkPositionAsUnused"
- },
- {
- "legacy": "deprecated.RACK.Rack.UpdateAudioVolume",
- "patchTarget": "Il2Cpp.Rack::void UpdateAudioVolume()",
- "strategy": "Postfix",
- "description": "Interop target Rack.UpdateAudioVolume",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.AudioVolumeChanged"
- },
- {
- "legacy": "deprecated.RACK.Rack.InitializeLoadedRack",
- "patchTarget": "Il2Cpp.Rack::void InitializeLoadedRack(Il2CppStructArray loadedPositions)",
- "strategy": "Postfix",
- "description": "Interop target Rack.InitializeLoadedRack",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "loadedPositions": "Il2CppStructArray"
- },
- "hookSubject": null,
- "name": "greg.RACK.InitializeLoadedRack"
- },
- {
- "legacy": "deprecated.RACK.Rack.ButtonDisablePositionsInRack",
- "patchTarget": "Il2Cpp.Rack::void ButtonDisablePositionsInRack()",
- "strategy": "Postfix",
- "description": "Interop target Rack.ButtonDisablePositionsInRack",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.ButtonDisablePositionsInRack"
- },
- {
- "legacy": "deprecated.RACK.Rack.SetDisablePositionsButtonMaterial",
- "patchTarget": "Il2Cpp.Rack::void SetDisablePositionsButtonMaterial(Material material)",
- "strategy": "Postfix",
- "description": "Interop target Rack.SetDisablePositionsButtonMaterial",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "material": "Material"
- },
- "hookSubject": null,
- "name": "greg.RACK.DisablePositionsButtonMaterialSet"
- },
- {
- "legacy": "deprecated.RACK.Rack.ButtonUnmountRack",
- "patchTarget": "Il2Cpp.Rack::void ButtonUnmountRack()",
- "strategy": "Postfix",
- "description": "Interop target Rack.ButtonUnmountRack",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.ButtonUnmountRack"
- },
- {
- "legacy": "deprecated.RACK.Rack.UnmountRack",
- "patchTarget": "Il2Cpp.Rack::IEnumerator UnmountRack()",
- "strategy": "Postfix",
- "description": "Interop target Rack.UnmountRack",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.UnmountRack"
- },
- {
- "legacy": "deprecated.RACK.Rack.OnLoad",
- "patchTarget": "Il2Cpp.Rack::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target Rack.OnLoad",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Rack",
- "name": "greg.RACK.OnLoad.Rack"
- },
- {
- "legacy": "deprecated.RACK.Rack.OnDestroy",
- "patchTarget": "Il2Cpp.Rack::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target Rack.OnDestroy",
- "payloadSchema": {
- "targetType": "Rack",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Rack",
- "name": "greg.RACK.OnDestroy.Rack"
- },
- {
- "legacy": "deprecated.RACK.RackAudioCuller.Awake",
- "patchTarget": "Il2Cpp.RackAudioCuller::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target RackAudioCuller.Awake",
- "payloadSchema": {
- "targetType": "RackAudioCuller",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackAudioCuller_b9d4271acc",
- "name": "greg.RACK.ComponentInitialized.RackAudioCuller_b9d4271acc"
- },
- {
- "legacy": "deprecated.RACK.RackAudioCuller.Start",
- "patchTarget": "Il2Cpp.RackAudioCuller::void Start()",
- "strategy": "Postfix",
- "description": "Interop target RackAudioCuller.Start",
- "payloadSchema": {
- "targetType": "RackAudioCuller",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackAudioCuller_a728808112",
- "name": "greg.RACK.ComponentInitialized.RackAudioCuller_a728808112"
- },
- {
- "legacy": "deprecated.RACK.RackAudioCuller.Register",
- "patchTarget": "Il2Cpp.RackAudioCuller::void Register(Rack rack)",
- "strategy": "Postfix",
- "description": "Interop target RackAudioCuller.Register",
- "payloadSchema": {
- "targetType": "RackAudioCuller",
- "isStatic": false,
- "rack": "Rack"
- },
- "hookSubject": null,
- "name": "greg.RACK.Register"
- },
- {
- "legacy": "deprecated.RACK.RackAudioCuller.Unregister",
- "patchTarget": "Il2Cpp.RackAudioCuller::void Unregister(Rack rack)",
- "strategy": "Postfix",
- "description": "Interop target RackAudioCuller.Unregister",
- "payloadSchema": {
- "targetType": "RackAudioCuller",
- "isStatic": false,
- "rack": "Rack"
- },
- "hookSubject": null,
- "name": "greg.RACK.Unregister"
- },
- {
- "legacy": "deprecated.RACK.RackAudioCuller.CullLoop",
- "patchTarget": "Il2Cpp.RackAudioCuller::IEnumerator CullLoop()",
- "strategy": "Postfix",
- "description": "Interop target RackAudioCuller.CullLoop",
- "payloadSchema": {
- "targetType": "RackAudioCuller",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.CullLoop"
- },
- {
- "legacy": "deprecated.RACK.RackAudioCuller.OnDestroy",
- "patchTarget": "Il2Cpp.RackAudioCuller::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target RackAudioCuller.OnDestroy",
- "payloadSchema": {
- "targetType": "RackAudioCuller",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackAudioCuller",
- "name": "greg.RACK.OnDestroy.RackAudioCuller"
- },
- {
- "legacy": "deprecated.RACK.RackDoor.Awake",
- "patchTarget": "Il2Cpp.RackDoor::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target RackDoor.Awake",
- "payloadSchema": {
- "targetType": "RackDoor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackDoor",
- "name": "greg.RACK.ComponentInitialized.RackDoor"
- },
- {
- "legacy": "deprecated.RACK.RackDoor.InteractOnClick",
- "patchTarget": "Il2Cpp.RackDoor::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target RackDoor.InteractOnClick",
- "payloadSchema": {
- "targetType": "RackDoor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackDoor",
- "name": "greg.RACK.InteractOnClick.RackDoor"
- },
- {
- "legacy": "deprecated.RACK.RackDoor.InteractOnHover",
- "patchTarget": "Il2Cpp.RackDoor::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target RackDoor.InteractOnHover",
- "payloadSchema": {
- "targetType": "RackDoor",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "RackDoor_RaycastHithit",
- "name": "greg.RACK.InteractOnHover.RackDoor_RaycastHithit"
- },
- {
- "legacy": "deprecated.RACK.RackDoor.OnHoverOver",
- "patchTarget": "Il2Cpp.RackDoor::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target RackDoor.OnHoverOver",
- "payloadSchema": {
- "targetType": "RackDoor",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackDoor",
- "name": "greg.RACK.OnHoverOver.RackDoor"
- },
- {
- "legacy": "deprecated.RACK.RackMount.Awake",
- "patchTarget": "Il2Cpp.RackMount::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target RackMount.Awake",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackMount",
- "name": "greg.RACK.ComponentInitialized.RackMount"
- },
- {
- "legacy": "deprecated.RACK.RackMount.InteractOnClick",
- "patchTarget": "Il2Cpp.RackMount::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target RackMount.InteractOnClick",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackMount",
- "name": "greg.RACK.InteractOnClick.RackMount"
- },
- {
- "legacy": "deprecated.RACK.RackMount.InstallRack",
- "patchTarget": "Il2Cpp.RackMount::IEnumerator InstallRack(bool cheat = false, int type = 0)",
- "strategy": "Postfix",
- "description": "Interop target RackMount.InstallRack",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "cheat": "bool",
- "type": "int"
- },
- "hookSubject": null,
- "name": "greg.RACK.RackInstalled"
- },
- {
- "legacy": "deprecated.RACK.RackMount.InstantiateRack",
- "patchTarget": "Il2Cpp.RackMount::GameObject InstantiateRack(InteractObjectData saveData = null)",
- "strategy": "Postfix",
- "description": "Interop target RackMount.InstantiateRack",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "saveData": "InteractObjectData"
- },
- "hookSubject": null,
- "name": "greg.RACK.InstantiateRack"
- },
- {
- "legacy": "deprecated.RACK.RackMount.ApplyMaterialToLODs",
- "patchTarget": "Il2Cpp.RackMount::void ApplyMaterialToLODs(GameObject rackGO, Material mat)",
- "strategy": "Postfix",
- "description": "Interop target RackMount.ApplyMaterialToLODs",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "rackGO": "GameObject",
- "mat": "Material"
- },
- "hookSubject": null,
- "name": "greg.RACK.ApplyMaterialToLODs"
- },
- {
- "legacy": "deprecated.RACK.RackMount.InteractOnHover",
- "patchTarget": "Il2Cpp.RackMount::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target RackMount.InteractOnHover",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "RackMount_RaycastHithit",
- "name": "greg.RACK.InteractOnHover.RackMount_RaycastHithit"
- },
- {
- "legacy": "deprecated.RACK.RackMount.OnHoverOver",
- "patchTarget": "Il2Cpp.RackMount::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target RackMount.OnHoverOver",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackMount",
- "name": "greg.RACK.OnHoverOver.RackMount"
- },
- {
- "legacy": "deprecated.RACK.RackMount.OnLoad",
- "patchTarget": "Il2Cpp.RackMount::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target RackMount.OnLoad",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackMount",
- "name": "greg.RACK.OnLoad.RackMount"
- },
- {
- "legacy": "deprecated.RACK.RackMount.OnDestroy",
- "patchTarget": "Il2Cpp.RackMount::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target RackMount.OnDestroy",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackMount",
- "name": "greg.RACK.OnDestroy.RackMount"
- },
- {
- "legacy": "deprecated.RACK.RackMount.CheatInsertRack",
- "patchTarget": "Il2Cpp.RackMount::void CheatInsertRack(GameObject go, int type)",
- "strategy": "Postfix",
- "description": "Interop target RackMount.CheatInsertRack",
- "payloadSchema": {
- "targetType": "RackMount",
- "isStatic": false,
- "go": "GameObject",
- "type": "int"
- },
- "hookSubject": null,
- "name": "greg.RACK.CheatInsertRack"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.Awake",
- "patchTarget": "Il2Cpp.RackPosition::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.Awake",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackPosition",
- "name": "greg.RACK.ComponentInitialized.RackPosition"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.InteractOnClick",
- "patchTarget": "Il2Cpp.RackPosition::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.InteractOnClick",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackPosition",
- "name": "greg.RACK.InteractOnClick.RackPosition"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.IsAllowedItem",
- "patchTarget": "Il2Cpp.RackPosition::bool IsAllowedItem(bool checkAvailability = false)",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.IsAllowedItem",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false,
- "checkAvailability": "bool"
- },
- "hookSubject": null,
- "name": "greg.RACK.IsAllowedItem"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.InsertItemInRack",
- "patchTarget": "Il2Cpp.RackPosition::IEnumerator InsertItemInRack()",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.InsertItemInRack",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.InsertItemInRack"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.SetUsed",
- "patchTarget": "Il2Cpp.RackPosition::void SetUsed(bool used)",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.SetUsed",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false,
- "used": "bool"
- },
- "hookSubject": null,
- "name": "greg.RACK.UsedSet"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.InteractOnHover",
- "patchTarget": "Il2Cpp.RackPosition::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.InteractOnHover",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "RackPosition_RaycastHithit",
- "name": "greg.RACK.InteractOnHover.RackPosition_RaycastHithit"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.OnHoverOver",
- "patchTarget": "Il2Cpp.RackPosition::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.OnHoverOver",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RackPosition",
- "name": "greg.RACK.OnHoverOver.RackPosition"
- },
- {
- "legacy": "deprecated.RACK.RackPosition.SecondActionOnClick",
- "patchTarget": "Il2Cpp.RackPosition::override void SecondActionOnClick()",
- "strategy": "Postfix",
- "description": "Interop target RackPosition.SecondActionOnClick",
- "payloadSchema": {
- "targetType": "RackPosition",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.RACK.SecondActionOnClick"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.Awake",
- "patchTarget": "Il2Cpp.ReBindUI::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.Awake",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.ComponentInitialized.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.OnEnable",
- "patchTarget": "Il2Cpp.ReBindUI::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.OnEnable",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.ComponentEnabled.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.OnDisable",
- "patchTarget": "Il2Cpp.ReBindUI::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.OnDisable",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.ComponentDisabled.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.OnValidate",
- "patchTarget": "Il2Cpp.ReBindUI::void OnValidate()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.OnValidate",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.OnValidate.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.GetBindingInfo",
- "patchTarget": "Il2Cpp.ReBindUI::void GetBindingInfo()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.GetBindingInfo",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.GetBindingInfo.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.UpdateUI",
- "patchTarget": "Il2Cpp.ReBindUI::void UpdateUI()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.UpdateUI",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.UIChanged.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.DoRebind",
- "patchTarget": "Il2Cpp.ReBindUI::void DoRebind()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.DoRebind",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.DoRebind.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.ReBindUI.ResetBinding",
- "patchTarget": "Il2Cpp.ReBindUI::void ResetBinding()",
- "strategy": "Postfix",
- "description": "Interop target ReBindUI.ResetBinding",
- "payloadSchema": {
- "targetType": "ReBindUI",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ReBindUI",
- "name": "greg.SYSTEM.ResetBinding.ReBindUI"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.ResolveActionAndBinding",
- "patchTarget": "Il2Cpp.RebindUIv2::bool ResolveActionAndBinding(out InputAction action, out int bindingIndex)",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.ResolveActionAndBinding",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false,
- "action": "outInputAction",
- "bindingIndex": "outint"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResolveActionAndBinding"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.UpdateBindingDisplay",
- "patchTarget": "Il2Cpp.RebindUIv2::void UpdateBindingDisplay()",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.UpdateBindingDisplay",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.BindingDisplayChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.ResetToDefault",
- "patchTarget": "Il2Cpp.RebindUIv2::void ResetToDefault()",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.ResetToDefault",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResetToDefault"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.StartInteractiveRebind",
- "patchTarget": "Il2Cpp.RebindUIv2::void StartInteractiveRebind()",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.StartInteractiveRebind",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.StartInteractiveRebind"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.PerformInteractiveRebind",
- "patchTarget": "Il2Cpp.RebindUIv2::void PerformInteractiveRebind(InputAction action, int bindingIndex, bool allCompositeParts = false)",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.PerformInteractiveRebind",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false,
- "action": "InputAction",
- "bindingIndex": "int",
- "allCompositeParts": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.PerformInteractiveRebind"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.OnEnable",
- "patchTarget": "Il2Cpp.RebindUIv2::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.OnEnable",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RebindUIv2",
- "name": "greg.SYSTEM.ComponentEnabled.RebindUIv2"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.OnDisable",
- "patchTarget": "Il2Cpp.RebindUIv2::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.OnDisable",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "RebindUIv2",
- "name": "greg.SYSTEM.ComponentDisabled.RebindUIv2"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.OnActionChange",
- "patchTarget": "Il2Cpp.RebindUIv2::static void OnActionChange(Il2CppSystem.Object obj, InputActionChange change)",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.OnActionChange",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": true,
- "obj": "Il2CppSystem.Object",
- "change": "InputActionChange"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnActionChange"
- },
- {
- "legacy": "deprecated.SYSTEM.RebindUIv2.UpdateActionLabel",
- "patchTarget": "Il2Cpp.RebindUIv2::void UpdateActionLabel()",
- "strategy": "Postfix",
- "description": "Interop target RebindUIv2.UpdateActionLabel",
- "payloadSchema": {
- "targetType": "RebindUIv2",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ActionLabelChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.SaveData.Validate",
- "patchTarget": "Il2Cpp.SaveData::string Validate()",
- "strategy": "Postfix",
- "description": "Interop target SaveData.Validate",
- "payloadSchema": {
- "targetType": "SaveData",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Validate"
- },
- {
- "legacy": "deprecated.SERVER.Server.Awake",
- "patchTarget": "Il2Cpp.Server::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Server.Awake",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Server_d8d2baf923",
- "name": "greg.SERVER.ComponentInitialized.Server_d8d2baf923"
- },
- {
- "legacy": "deprecated.SERVER.Server.Start",
- "patchTarget": "Il2Cpp.Server::void Start()",
- "strategy": "Postfix",
- "description": "Interop target Server.Start",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Server_b4d519f190",
- "name": "greg.SERVER.ComponentInitialized.Server_b4d519f190"
- },
- {
- "legacy": "deprecated.SERVER.Server.OnLoadingStarted",
- "patchTarget": "Il2Cpp.Server::void OnLoadingStarted()",
- "strategy": "Postfix",
- "description": "Interop target Server.OnLoadingStarted",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.OnLoadingStarted"
- },
- {
- "legacy": "deprecated.SERVER.Server.OnLoadingComplete",
- "patchTarget": "Il2Cpp.Server::void OnLoadingComplete()",
- "strategy": "Postfix",
- "description": "Interop target Server.OnLoadingComplete",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.OnLoadingComplete"
- },
- {
- "legacy": "deprecated.SERVER.Server.PowerButton",
- "patchTarget": "Il2Cpp.Server::void PowerButton(bool forceState = false)",
- "strategy": "Postfix",
- "description": "Interop target Server.PowerButton",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "forceState": "bool"
- },
- "hookSubject": null,
- "name": "greg.SERVER.PowerButton"
- },
- {
- "legacy": "deprecated.SERVER.Server.TurnOffCommonFunctions",
- "patchTarget": "Il2Cpp.Server::void TurnOffCommonFunctions()",
- "strategy": "Postfix",
- "description": "Interop target Server.TurnOffCommonFunctions",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.TurnOffCommonFunctions"
- },
- {
- "legacy": "deprecated.SERVER.Server.TurnOnCommonFunction",
- "patchTarget": "Il2Cpp.Server::void TurnOnCommonFunction()",
- "strategy": "Postfix",
- "description": "Interop target Server.TurnOnCommonFunction",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.TurnOnCommonFunction"
- },
- {
- "legacy": "deprecated.SERVER.Server.IsAnyCableConnected",
- "patchTarget": "Il2Cpp.Server::bool IsAnyCableConnected()",
- "strategy": "Postfix",
- "description": "Interop target Server.IsAnyCableConnected",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.IsAnyCableConnected"
- },
- {
- "legacy": "deprecated.SERVER.Server.InteractOnClick",
- "patchTarget": "Il2Cpp.Server::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target Server.InteractOnClick",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.InteractOnClick"
- },
- {
- "legacy": "deprecated.SERVER.Server.InteractOnHover",
- "patchTarget": "Il2Cpp.Server::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target Server.InteractOnHover",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "hit": "RaycastHit"
- },
- "hookSubject": null,
- "name": "greg.SERVER.InteractOnHover"
- },
- {
- "legacy": "deprecated.SERVER.Server.ServerInsertedInRack",
- "patchTarget": "Il2Cpp.Server::void ServerInsertedInRack(ServerSaveData serverSaveData = null)",
- "strategy": "Postfix",
- "description": "Interop target Server.ServerInsertedInRack",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "serverSaveData": "ServerSaveData"
- },
- "hookSubject": null,
- "name": "greg.SERVER.ServerInsertedInRack"
- },
- {
- "legacy": "deprecated.SERVER.Server.RegisterLink",
- "patchTarget": "Il2Cpp.Server::void RegisterLink(CableLink link)",
- "strategy": "Postfix",
- "description": "Interop target Server.RegisterLink",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "link": "CableLink"
- },
- "hookSubject": null,
- "name": "greg.SERVER.RegisterLink"
- },
- {
- "legacy": "deprecated.SERVER.Server.UnregisterLink",
- "patchTarget": "Il2Cpp.Server::void UnregisterLink(CableLink link)",
- "strategy": "Postfix",
- "description": "Interop target Server.UnregisterLink",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "link": "CableLink"
- },
- "hookSubject": null,
- "name": "greg.SERVER.UnregisterLink"
- },
- {
- "legacy": "deprecated.SERVER.Server.UpdateServerScreenUI",
- "patchTarget": "Il2Cpp.Server::void UpdateServerScreenUI()",
- "strategy": "Postfix",
- "description": "Interop target Server.UpdateServerScreenUI",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.ServerScreenUIChanged"
- },
- {
- "legacy": "deprecated.SERVER.Server.ButtonClickChangeCustomer",
- "patchTarget": "Il2Cpp.Server::void ButtonClickChangeCustomer(bool forward)",
- "strategy": "Postfix",
- "description": "Interop target Server.ButtonClickChangeCustomer",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "forward": "bool"
- },
- "hookSubject": null,
- "name": "greg.SERVER.ButtonClickChangeCustomer"
- },
- {
- "legacy": "deprecated.SERVER.Server.ButtonClickChangeIP",
- "patchTarget": "Il2Cpp.Server::void ButtonClickChangeIP()",
- "strategy": "Postfix",
- "description": "Interop target Server.ButtonClickChangeIP",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.ButtonClickChangeIP"
- },
- {
- "legacy": "deprecated.SERVER.Server.SetIP",
- "patchTarget": "Il2Cpp.Server::void SetIP(string _ip)",
- "strategy": "Postfix",
- "description": "Interop target Server.SetIP",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "_ip": "string"
- },
- "hookSubject": null,
- "name": "greg.SERVER.IPSet"
- },
- {
- "legacy": "deprecated.SERVER.Server.UpdateCustomer",
- "patchTarget": "Il2Cpp.Server::void UpdateCustomer(int newCustomerID)",
- "strategy": "Postfix",
- "description": "Interop target Server.UpdateCustomer",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "newCustomerID": "int"
- },
- "hookSubject": null,
- "name": "greg.SERVER.CustomerChanged"
- },
- {
- "legacy": "deprecated.SERVER.Server.UpdateAppID",
- "patchTarget": "Il2Cpp.Server::void UpdateAppID(int _appID)",
- "strategy": "Postfix",
- "description": "Interop target Server.UpdateAppID",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "_appID": "int"
- },
- "hookSubject": null,
- "name": "greg.SERVER.AppIDChanged"
- },
- {
- "legacy": "deprecated.SERVER.Server.BrekingInProgress",
- "patchTarget": "Il2Cpp.Server::IEnumerator BrekingInProgress()",
- "strategy": "Postfix",
- "description": "Interop target Server.BrekingInProgress",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.BrekingInProgress"
- },
- {
- "legacy": "deprecated.SERVER.Server.ItIsBroken",
- "patchTarget": "Il2Cpp.Server::void ItIsBroken()",
- "strategy": "Postfix",
- "description": "Interop target Server.ItIsBroken",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.ItIsBroken"
- },
- {
- "legacy": "deprecated.SERVER.Server.ValidateRackPosition",
- "patchTarget": "Il2Cpp.Server::bool ValidateRackPosition()",
- "strategy": "Postfix",
- "description": "Interop target Server.ValidateRackPosition",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.ValidateRackPosition"
- },
- {
- "legacy": "deprecated.SERVER.Server.ClearWarningSign",
- "patchTarget": "Il2Cpp.Server::void ClearWarningSign(bool isPreserved = false)",
- "strategy": "Postfix",
- "description": "Interop target Server.ClearWarningSign",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "isPreserved": "bool"
- },
- "hookSubject": null,
- "name": "greg.SERVER.ClearWarningSign"
- },
- {
- "legacy": "deprecated.SERVER.Server.ClearErrorSign",
- "patchTarget": "Il2Cpp.Server::void ClearErrorSign()",
- "strategy": "Postfix",
- "description": "Interop target Server.ClearErrorSign",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.ClearErrorSign"
- },
- {
- "legacy": "deprecated.SERVER.Server.OnDestroy",
- "patchTarget": "Il2Cpp.Server::override void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target Server.OnDestroy",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.OnDestroy"
- },
- {
- "legacy": "deprecated.SERVER.Server.SetPowerLightMaterial",
- "patchTarget": "Il2Cpp.Server::void SetPowerLightMaterial(Material material)",
- "strategy": "Postfix",
- "description": "Interop target Server.SetPowerLightMaterial",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false,
- "material": "Material"
- },
- "hookSubject": null,
- "name": "greg.SERVER.PowerLightMaterialSet"
- },
- {
- "legacy": "deprecated.SERVER.Server.RepairDevice",
- "patchTarget": "Il2Cpp.Server::void RepairDevice()",
- "strategy": "Postfix",
- "description": "Interop target Server.RepairDevice",
- "payloadSchema": {
- "targetType": "Server",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SERVER.DeviceRepaired"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.Awake",
- "patchTarget": "Il2Cpp.SetIP::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.Awake",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SetIP",
- "name": "greg.SYSTEM.ComponentInitialized.SetIP"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ShowCanvas",
- "patchTarget": "Il2Cpp.SetIP::void ShowCanvas(Server _server)",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ShowCanvas",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "_server": "Server"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickNumber",
- "patchTarget": "Il2Cpp.SetIP::void ClickNumber(string number)",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickNumber",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "number": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickNumber"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickButtonOK",
- "patchTarget": "Il2Cpp.SetIP::void ClickButtonOK()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickButtonOK",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickButtonOK"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickButtonDel",
- "patchTarget": "Il2Cpp.SetIP::void ClickButtonDel()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickButtonDel",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickButtonDel"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickButtonClear",
- "patchTarget": "Il2Cpp.SetIP::void ClickButtonClear()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickButtonClear",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickButtonClear"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickButtonCopy",
- "patchTarget": "Il2Cpp.SetIP::void ClickButtonCopy()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickButtonCopy",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickButtonCopy"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickButtonPaste",
- "patchTarget": "Il2Cpp.SetIP::void ClickButtonPaste()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickButtonPaste",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickButtonPaste"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ClickButtonCancel",
- "patchTarget": "Il2Cpp.SetIP::void ClickButtonCancel()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ClickButtonCancel",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClickButtonCancel"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.CloseCanvas",
- "patchTarget": "Il2Cpp.SetIP::void CloseCanvas()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.CloseCanvas",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CloseCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.CidrToSubnetMask",
- "patchTarget": "Il2Cpp.SetIP::void CidrToSubnetMask(int cidr, out int m1, out int m2, out int m3, out int m4)",
- "strategy": "Postfix",
- "description": "Interop target SetIP.CidrToSubnetMask",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "cidr": "int",
- "m1": "outint",
- "m2": "outint",
- "m3": "outint",
- "m4": "outint"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CidrToSubnetMask"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.TryParseIpToOctets",
- "patchTarget": "Il2Cpp.SetIP::bool TryParseIpToOctets(string ipString, out int o1, out int o2, out int o3, out int o4)",
- "strategy": "Prefix+Postfix",
- "description": "Interop target SetIP.TryParseIpToOctets",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "ipString": "string",
- "o1": "outint",
- "o2": "outint",
- "o3": "outint",
- "o4": "outint"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TryParseIpToOctets"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.IncrementOctets",
- "patchTarget": "Il2Cpp.SetIP::void IncrementOctets(ref int o1, ref int o2, ref int o3, ref int o4)",
- "strategy": "Postfix",
- "description": "Interop target SetIP.IncrementOctets",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "o1": "refint",
- "o2": "refint",
- "o3": "refint",
- "o4": "refint"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IncrementOctets"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.ButtonHideShowHint",
- "patchTarget": "Il2Cpp.SetIP::void ButtonHideShowHint()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.ButtonHideShowHint",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonHideShowHint"
- },
- {
- "legacy": "deprecated.SYSTEM.SetIP.OnDestroy",
- "patchTarget": "Il2Cpp.SetIP::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target SetIP.OnDestroy",
- "payloadSchema": {
- "targetType": "SetIP",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SetIP",
- "name": "greg.SYSTEM.OnDestroy.SetIP"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsControls.Start",
- "patchTarget": "Il2Cpp.SettingsControls::void Start()",
- "strategy": "Postfix",
- "description": "Interop target SettingsControls.Start",
- "payloadSchema": {
- "targetType": "SettingsControls",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsControls",
- "name": "greg.SYSTEM.ComponentInitialized.SettingsControls"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsControls.LookSensitivity",
- "patchTarget": "Il2Cpp.SettingsControls::void LookSensitivity(float fl)",
- "strategy": "Postfix",
- "description": "Interop target SettingsControls.LookSensitivity",
- "payloadSchema": {
- "targetType": "SettingsControls",
- "isStatic": false,
- "fl": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.LookSensitivity"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsControls.InvertY",
- "patchTarget": "Il2Cpp.SettingsControls::void InvertY()",
- "strategy": "Postfix",
- "description": "Interop target SettingsControls.InvertY",
- "payloadSchema": {
- "targetType": "SettingsControls",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InvertY"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsControls.LoadSettings",
- "patchTarget": "Il2Cpp.SettingsControls::void LoadSettings()",
- "strategy": "Postfix",
- "description": "Interop target SettingsControls.LoadSettings",
- "payloadSchema": {
- "targetType": "SettingsControls",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsControls",
- "name": "greg.SYSTEM.SettingsLoaded.SettingsControls"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGameplay.Start",
- "patchTarget": "Il2Cpp.SettingsGameplay::void Start()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGameplay.Start",
- "payloadSchema": {
- "targetType": "SettingsGameplay",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsGameplay",
- "name": "greg.SYSTEM.ComponentInitialized.SettingsGameplay"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGameplay.OnLanguageDropDownChange",
- "patchTarget": "Il2Cpp.SettingsGameplay::void OnLanguageDropDownChange(int i)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGameplay.OnLanguageDropDownChange",
- "payloadSchema": {
- "targetType": "SettingsGameplay",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnLanguageDropDownChange"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGameplay.SetAutoSaveInterval",
- "patchTarget": "Il2Cpp.SettingsGameplay::void SetAutoSaveInterval(int i)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGameplay.SetAutoSaveInterval",
- "payloadSchema": {
- "targetType": "SettingsGameplay",
- "isStatic": false,
- "i": "int",
- "hookSubject": "string"
- },
- "hookSubject": "SettingsGameplay_inti",
- "name": "greg.SYSTEM.AutoSaveIntervalSet.SettingsGameplay_inti"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGameplay.SetAutoSaveOnOff",
- "patchTarget": "Il2Cpp.SettingsGameplay::void SetAutoSaveOnOff(bool isActive)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGameplay.SetAutoSaveOnOff",
- "payloadSchema": {
- "targetType": "SettingsGameplay",
- "isStatic": false,
- "isActive": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AutoSaveOnOffSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGameplay.LoadSettings",
- "patchTarget": "Il2Cpp.SettingsGameplay::void LoadSettings()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGameplay.LoadSettings",
- "payloadSchema": {
- "targetType": "SettingsGameplay",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsGameplay",
- "name": "greg.SYSTEM.SettingsLoaded.SettingsGameplay"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.Start",
- "patchTarget": "Il2Cpp.SettingsGraphics::void Start()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.Start",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsGraphics",
- "name": "greg.SYSTEM.ComponentInitialized.SettingsGraphics"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetQuality",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetQuality(int qualityIndex)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetQuality",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "qualityIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.QualitySet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetFullScreen",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetFullScreen(bool isFullScreen)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetFullScreen",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "isFullScreen": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FullScreenSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetResDropDown",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetResDropDown(int resolutionIndex)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetResDropDown",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "resolutionIndex": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResDropDownSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetResolution",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetResolution(int width, int height)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetResolution",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "width": "int",
- "height": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResolutionSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.AvailableRefreshRatesAfterFrame",
- "patchTarget": "Il2Cpp.SettingsGraphics::IEnumerator AvailableRefreshRatesAfterFrame()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.AvailableRefreshRatesAfterFrame",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AvailableRefreshRatesAfterFrame"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.AvailableRefreshRate",
- "patchTarget": "Il2Cpp.SettingsGraphics::void AvailableRefreshRate()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.AvailableRefreshRate",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AvailableRefreshRate"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetRefreshRate",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetRefreshRate(int _refreshRate)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetRefreshRate",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "_refreshRate": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RefreshRateSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.LimitFrameRate",
- "patchTarget": "Il2Cpp.SettingsGraphics::void LimitFrameRate(int _framerate)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.LimitFrameRate",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "_framerate": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.LimitFrameRate"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.LoadSettings",
- "patchTarget": "Il2Cpp.SettingsGraphics::void LoadSettings()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.LoadSettings",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsGraphics",
- "name": "greg.SYSTEM.SettingsLoaded.SettingsGraphics"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.ChangeDepthOfField",
- "patchTarget": "Il2Cpp.SettingsGraphics::void ChangeDepthOfField(float startFarFocus, float endFarFocus)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.ChangeDepthOfField",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "startFarFocus": "float",
- "endFarFocus": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ChangeDepthOfField"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.ResetDepthOfField",
- "patchTarget": "Il2Cpp.SettingsGraphics::void ResetDepthOfField()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.ResetDepthOfField",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ResetDepthOfField"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetFieldOfView",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetFieldOfView(float fov)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetFieldOfView",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "fov": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FieldOfViewSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetShadowDistance",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetShadowDistance(float distance)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetShadowDistance",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "distance": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShadowDistanceSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetMotionBlur",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetMotionBlur(float motion)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetMotionBlur",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "motion": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MotionBlurSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetExposure",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetExposure(float exposure)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetExposure",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "exposure": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ExposureSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetupAA",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetupAA()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetupAA",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.upAASet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetAntiAliasing",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetAntiAliasing(int index)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetAntiAliasing",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "index": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AntiAliasingSet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.SetAAQuality",
- "patchTarget": "Il2Cpp.SettingsGraphics::void SetAAQuality(int index)",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.SetAAQuality",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false,
- "index": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.AAQualitySet"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsGraphics.IsDLSSSupported",
- "patchTarget": "Il2Cpp.SettingsGraphics::bool IsDLSSSupported()",
- "strategy": "Postfix",
- "description": "Interop target SettingsGraphics.IsDLSSSupported",
- "payloadSchema": {
- "targetType": "SettingsGraphics",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.IsDLSSSupported"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsSingleton.Awake",
- "patchTarget": "Il2Cpp.SettingsSingleton::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target SettingsSingleton.Awake",
- "payloadSchema": {
- "targetType": "SettingsSingleton",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsSingleton",
- "name": "greg.SYSTEM.ComponentInitialized.SettingsSingleton"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsSingleton.DisableOnAfterFirstSettingUp",
- "patchTarget": "Il2Cpp.SettingsSingleton::IEnumerator DisableOnAfterFirstSettingUp()",
- "strategy": "Postfix",
- "description": "Interop target SettingsSingleton.DisableOnAfterFirstSettingUp",
- "payloadSchema": {
- "targetType": "SettingsSingleton",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DisableOnAfterFirstSettingUp"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsVolume.Start",
- "patchTarget": "Il2Cpp.SettingsVolume::void Start()",
- "strategy": "Postfix",
- "description": "Interop target SettingsVolume.Start",
- "payloadSchema": {
- "targetType": "SettingsVolume",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsVolume",
- "name": "greg.SYSTEM.ComponentInitialized.SettingsVolume"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsVolume.MasterVolume",
- "patchTarget": "Il2Cpp.SettingsVolume::void MasterVolume(float volume)",
- "strategy": "Postfix",
- "description": "Interop target SettingsVolume.MasterVolume",
- "payloadSchema": {
- "targetType": "SettingsVolume",
- "isStatic": false,
- "volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MasterVolume"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsVolume.MusicVolume",
- "patchTarget": "Il2Cpp.SettingsVolume::void MusicVolume(float volume)",
- "strategy": "Postfix",
- "description": "Interop target SettingsVolume.MusicVolume",
- "payloadSchema": {
- "targetType": "SettingsVolume",
- "isStatic": false,
- "volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MusicVolume"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsVolume.EffectVolume",
- "patchTarget": "Il2Cpp.SettingsVolume::void EffectVolume(float volume)",
- "strategy": "Postfix",
- "description": "Interop target SettingsVolume.EffectVolume",
- "payloadSchema": {
- "targetType": "SettingsVolume",
- "isStatic": false,
- "volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.EffectVolume"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsVolume.RacksVolume",
- "patchTarget": "Il2Cpp.SettingsVolume::void RacksVolume(float volume)",
- "strategy": "Postfix",
- "description": "Interop target SettingsVolume.RacksVolume",
- "payloadSchema": {
- "targetType": "SettingsVolume",
- "isStatic": false,
- "volume": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.RacksVolume"
- },
- {
- "legacy": "deprecated.SYSTEM.SettingsVolume.LoadSettings",
- "patchTarget": "Il2Cpp.SettingsVolume::void LoadSettings()",
- "strategy": "Postfix",
- "description": "Interop target SettingsVolume.LoadSettings",
- "payloadSchema": {
- "targetType": "SettingsVolume",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SettingsVolume",
- "name": "greg.SYSTEM.SettingsLoaded.SettingsVolume"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.Awake",
- "patchTarget": "Il2Cpp.SFPBox::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.Awake",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SFPBox",
- "name": "greg.NETWORK.ComponentInitialized.SFPBox"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.InteractOnClick",
- "patchTarget": "Il2Cpp.SFPBox::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.InteractOnClick",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SFPBox",
- "name": "greg.NETWORK.InteractOnClick.SFPBox"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.InsertSFPBackIntoBox",
- "patchTarget": "Il2Cpp.SFPBox::void InsertSFPBackIntoBox()",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.InsertSFPBackIntoBox",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.InsertSFPBackIntoBox"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.ParentTheObjectWithDelay",
- "patchTarget": "Il2Cpp.SFPBox::IEnumerator ParentTheObjectWithDelay(Transform uo, int index)",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.ParentTheObjectWithDelay",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false,
- "uo": "Transform",
- "index": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.ParentTheObjectWithDelay"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.RemoveSFPFromBox",
- "patchTarget": "Il2Cpp.SFPBox::void RemoveSFPFromBox(int position)",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.RemoveSFPFromBox",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false,
- "position": "int"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.oveSFPFromBoxRemoved"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.InteractOnHover",
- "patchTarget": "Il2Cpp.SFPBox::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.InteractOnHover",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "SFPBox_RaycastHithit",
- "name": "greg.NETWORK.InteractOnHover.SFPBox_RaycastHithit"
- },
- {
- "legacy": "deprecated.NETWORK.SFPBox.LoadSFPsFromSave",
- "patchTarget": "Il2Cpp.SFPBox::void LoadSFPsFromSave()",
- "strategy": "Postfix",
- "description": "Interop target SFPBox.LoadSFPsFromSave",
- "payloadSchema": {
- "targetType": "SFPBox",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.NETWORK.SFPsFromSaveLoaded"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.Awake",
- "patchTarget": "Il2Cpp.SFPModule::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.Awake",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SFPModule",
- "name": "greg.NETWORK.ComponentInitialized.SFPModule"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.IsAnyCableConnected",
- "patchTarget": "Il2Cpp.SFPModule::bool IsAnyCableConnected()",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.IsAnyCableConnected",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SFPModule",
- "name": "greg.NETWORK.IsAnyCableConnected.SFPModule"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.InteractOnClick",
- "patchTarget": "Il2Cpp.SFPModule::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.InteractOnClick",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SFPModule",
- "name": "greg.NETWORK.InteractOnClick.SFPModule"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.InteractOnHover",
- "patchTarget": "Il2Cpp.SFPModule::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.InteractOnHover",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "SFPModule_RaycastHithit",
- "name": "greg.NETWORK.InteractOnHover.SFPModule_RaycastHithit"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.InsertedInSFPPort",
- "patchTarget": "Il2Cpp.SFPModule::void InsertedInSFPPort(CableLink _link, bool immediate = false)",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.InsertedInSFPPort",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "_link": "CableLink",
- "immediate": "bool"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.InsertedInSFPPort"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.SlideIntoPort",
- "patchTarget": "Il2Cpp.SFPModule::IEnumerator SlideIntoPort(Transform port)",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.SlideIntoPort",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "port": "Transform"
- },
- "hookSubject": null,
- "name": "greg.NETWORK.SlideIntoPort"
- },
- {
- "legacy": "deprecated.NETWORK.SFPModule.OnDestroy",
- "patchTarget": "Il2Cpp.SFPModule::override void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target SFPModule.OnDestroy",
- "payloadSchema": {
- "targetType": "SFPModule",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SFPModule",
- "name": "greg.NETWORK.OnDestroy.SFPModule"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.Initialize",
- "patchTarget": "Il2Cpp.ShopCartItem::void Initialize(ComputerShop shop, string itemName, int itemID, int price, PlayerManager.ObjectInHand itemType, int firstSpawnUID, Nullable customColor = null)",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.Initialize",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false,
- "shop": "ComputerShop",
- "itemName": "string",
- "itemID": "int",
- "price": "int",
- "itemType": "PlayerManager.ObjectInHand",
- "firstSpawnUID": "int",
- "customColor": "Nullable"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.Initialize"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.AddSpawnedItem",
- "patchTarget": "Il2Cpp.ShopCartItem::void AddSpawnedItem(int uid)",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.AddSpawnedItem",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false,
- "uid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SpawnedItemAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.RemoveLastSpawnedItem",
- "patchTarget": "Il2Cpp.ShopCartItem::int RemoveLastSpawnedItem()",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.RemoveLastSpawnedItem",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.oveLastSpawnedItemRemoved"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.ClearAllUIDs",
- "patchTarget": "Il2Cpp.ShopCartItem::void ClearAllUIDs()",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.ClearAllUIDs",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClearAllUIDs"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.OnAddClicked",
- "patchTarget": "Il2Cpp.ShopCartItem::void OnAddClicked()",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.OnAddClicked",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnAddClicked"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.OnRemoveClicked",
- "patchTarget": "Il2Cpp.ShopCartItem::void OnRemoveClicked()",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.OnRemoveClicked",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnRemoveClicked"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.UpdateDisplay",
- "patchTarget": "Il2Cpp.ShopCartItem::void UpdateDisplay()",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.UpdateDisplay",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DisplayChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopCartItem.OnDestroy",
- "patchTarget": "Il2Cpp.ShopCartItem::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target ShopCartItem.OnDestroy",
- "payloadSchema": {
- "targetType": "ShopCartItem",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ShopCartItem",
- "name": "greg.SYSTEM.OnDestroy.ShopCartItem"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.Awake",
- "patchTarget": "Il2Cpp.ShopItem::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.Awake",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ShopItem_0f1536fd84",
- "name": "greg.SYSTEM.ComponentInitialized.ShopItem_0f1536fd84"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.Start",
- "patchTarget": "Il2Cpp.ShopItem::void Start()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.Start",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ShopItem_aac85c1e13",
- "name": "greg.SYSTEM.ComponentInitialized.ShopItem_aac85c1e13"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.ButtonBuyItem",
- "patchTarget": "Il2Cpp.ShopItem::void ButtonBuyItem()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.ButtonBuyItem",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ButtonBuyItem"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.TryUnlock",
- "patchTarget": "Il2Cpp.ShopItem::void TryUnlock()",
- "strategy": "Prefix+Postfix",
- "description": "Interop target ShopItem.TryUnlock",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TryUnlock"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.BuyItem",
- "patchTarget": "Il2Cpp.ShopItem::void BuyItem()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.BuyItem",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ItemPurchased"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.UnlockButton",
- "patchTarget": "Il2Cpp.ShopItem::void UnlockButton()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.UnlockButton",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.UnlockButton"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.UpdateVisualState",
- "patchTarget": "Il2Cpp.ShopItem::void UpdateVisualState()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.UpdateVisualState",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.VisualStateChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.OnLoad",
- "patchTarget": "Il2Cpp.ShopItem::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.OnLoad",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ShopItem",
- "name": "greg.SYSTEM.OnLoad.ShopItem"
- },
- {
- "legacy": "deprecated.SYSTEM.ShopItem.OnDestroy",
- "patchTarget": "Il2Cpp.ShopItem::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target ShopItem.OnDestroy",
- "payloadSchema": {
- "targetType": "ShopItem",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ShopItem",
- "name": "greg.SYSTEM.OnDestroy.ShopItem"
- },
- {
- "legacy": "deprecated.SYSTEM.StaminaOverlayOnEnable.OnEnable",
- "patchTarget": "Il2Cpp.StaminaOverlayOnEnable::void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target StaminaOverlayOnEnable.OnEnable",
- "payloadSchema": {
- "targetType": "StaminaOverlayOnEnable",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "StaminaOverlayOnEnable",
- "name": "greg.SYSTEM.ComponentEnabled.StaminaOverlayOnEnable"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.Awake",
- "patchTarget": "Il2Cpp.StaticUIElements::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.Awake",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "StaticUIElements_1becd00ab1",
- "name": "greg.SYSTEM.ComponentInitialized.StaticUIElements_1becd00ab1"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.Start",
- "patchTarget": "Il2Cpp.StaticUIElements::void Start()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.Start",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "StaticUIElements_bb8e47cf20",
- "name": "greg.SYSTEM.ComponentInitialized.StaticUIElements_bb8e47cf20"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.UpdateCoinsAndPrestige_TopLeft",
- "patchTarget": "Il2Cpp.StaticUIElements::IEnumerator UpdateCoinsAndPrestige_TopLeft()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.UpdateCoinsAndPrestige_TopLeft",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CoinsAndPrestige_TopLeftChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.CalculateRates",
- "patchTarget": "Il2Cpp.StaticUIElements::void CalculateRates(out float moneyPerSec, out float xpPerSec, out float expensesPerSec)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.CalculateRates",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "moneyPerSec": "outfloat",
- "xpPerSec": "outfloat",
- "expensesPerSec": "outfloat"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CalculateRates"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.SetNotification",
- "patchTarget": "Il2Cpp.StaticUIElements::void SetNotification(int _localisationUID, Sprite _sprite = null, string _text = \"\")",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.SetNotification",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "_localisationUID": "int",
- "_sprite": "Sprite",
- "_text": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.NotificationSet"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.ShowStaticCanvas",
- "patchTarget": "Il2Cpp.StaticUIElements::void ShowStaticCanvas(bool active)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.ShowStaticCanvas",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "active": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowStaticCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.CreateCustomKeyHint",
- "patchTarget": "Il2Cpp.StaticUIElements::GameObject CreateCustomKeyHint(InputAction action, int textUID, Transform parent = null, bool isPermanent = false)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.CreateCustomKeyHint",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "action": "InputAction",
- "textUID": "int",
- "parent": "Transform",
- "isPermanent": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CreateCustomKeyHint"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.RemoveCustomKeyHint",
- "patchTarget": "Il2Cpp.StaticUIElements::void RemoveCustomKeyHint()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.RemoveCustomKeyHint",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.oveCustomKeyHintRemoved"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.InstantiateParticleUpgrade",
- "patchTarget": "Il2Cpp.StaticUIElements::void InstantiateParticleUpgrade(Transform _transform)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.InstantiateParticleUpgrade",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "_transform": "Transform"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InstantiateParticleUpgrade"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.UpdateMessagesCoroutine",
- "patchTarget": "Il2Cpp.StaticUIElements::IEnumerator UpdateMessagesCoroutine()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.UpdateMessagesCoroutine",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MessagesCoroutineChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.UpdateMessageDisplay",
- "patchTarget": "Il2Cpp.StaticUIElements::void UpdateMessageDisplay()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.UpdateMessageDisplay",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MessageDisplayChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.AddMeesageInField",
- "patchTarget": "Il2Cpp.StaticUIElements::void AddMeesageInField(string message)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.AddMeesageInField",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "message": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MeesageInFieldAdded"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.InstantiateErrorWarningSign",
- "patchTarget": "Il2Cpp.StaticUIElements::int InstantiateErrorWarningSign(bool isError, Vector3 objectPos)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.InstantiateErrorWarningSign",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "isError": "bool",
- "objectPos": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InstantiateErrorWarningSign"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.DestroyErrorWarningSign",
- "patchTarget": "Il2Cpp.StaticUIElements::void DestroyErrorWarningSign(int errorWarningUID)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.DestroyErrorWarningSign",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "errorWarningUID": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DestroyErrorWarningSign"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.ShowSpriteNextToPointer",
- "patchTarget": "Il2Cpp.StaticUIElements::void ShowSpriteNextToPointer(Sprite _sprite)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.ShowSpriteNextToPointer",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "_sprite": "Sprite"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowSpriteNextToPointer"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.ClearSpriteNextToPointer",
- "patchTarget": "Il2Cpp.StaticUIElements::void ClearSpriteNextToPointer()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.ClearSpriteNextToPointer",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClearSpriteNextToPointer"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.ShowTextUnderCursor",
- "patchTarget": "Il2Cpp.StaticUIElements::void ShowTextUnderCursor(string text)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.ShowTextUnderCursor",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "text": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowTextUnderCursor"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.HideTextUnderCursor",
- "patchTarget": "Il2Cpp.StaticUIElements::void HideTextUnderCursor()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.HideTextUnderCursor",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HideTextUnderCursor"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.UpdateHoldProgress",
- "patchTarget": "Il2Cpp.StaticUIElements::void UpdateHoldProgress(float value)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.UpdateHoldProgress",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "value": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HoldProgressChanged"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.SetLoadingInfo",
- "patchTarget": "Il2Cpp.StaticUIElements::void SetLoadingInfo(string s)",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.SetLoadingInfo",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false,
- "s": "string"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.LoadingInfoSet"
- },
- {
- "legacy": "deprecated.SYSTEM.StaticUIElements.OnLoadingStarted",
- "patchTarget": "Il2Cpp.StaticUIElements::void OnLoadingStarted()",
- "strategy": "Postfix",
- "description": "Interop target StaticUIElements.OnLoadingStarted",
- "payloadSchema": {
- "targetType": "StaticUIElements",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnLoadingStarted"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamManager.SteamAPIDebugTextHook",
- "patchTarget": "Il2Cpp.SteamManager::static void SteamAPIDebugTextHook(int nSeverity, StringBuilder pchDebugText)",
- "strategy": "Postfix",
- "description": "Interop target SteamManager.SteamAPIDebugTextHook",
- "payloadSchema": {
- "targetType": "SteamManager",
- "isStatic": true,
- "nSeverity": "int",
- "pchDebugText": "StringBuilder"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SteamAPIDebugTextHook"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamManager.InitOnPlayMode",
- "patchTarget": "Il2Cpp.SteamManager::static void InitOnPlayMode()",
- "strategy": "Postfix",
- "description": "Interop target SteamManager.InitOnPlayMode",
- "payloadSchema": {
- "targetType": "SteamManager",
- "isStatic": true
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.InitOnPlayMode"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamManager.Awake",
- "patchTarget": "Il2Cpp.SteamManager::virtual void Awake()",
- "strategy": "Postfix",
- "description": "Interop target SteamManager.Awake",
- "payloadSchema": {
- "targetType": "SteamManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SteamManager",
- "name": "greg.SYSTEM.ComponentInitialized.SteamManager"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamManager.OnEnable",
- "patchTarget": "Il2Cpp.SteamManager::virtual void OnEnable()",
- "strategy": "Postfix",
- "description": "Interop target SteamManager.OnEnable",
- "payloadSchema": {
- "targetType": "SteamManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SteamManager",
- "name": "greg.SYSTEM.ComponentEnabled.SteamManager"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamManager.OnDestroy",
- "patchTarget": "Il2Cpp.SteamManager::virtual void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target SteamManager.OnDestroy",
- "payloadSchema": {
- "targetType": "SteamManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SteamManager",
- "name": "greg.SYSTEM.OnDestroy.SteamManager"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamStatsOnMainMenuTop.Start",
- "patchTarget": "Il2Cpp.SteamStatsOnMainMenuTop::void Start()",
- "strategy": "Postfix",
- "description": "Interop target SteamStatsOnMainMenuTop.Start",
- "payloadSchema": {
- "targetType": "SteamStatsOnMainMenuTop",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "SteamStatsOnMainMenuTop",
- "name": "greg.SYSTEM.ComponentInitialized.SteamStatsOnMainMenuTop"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamStatsOnMainMenuTop.WaitAndDisplay",
- "patchTarget": "Il2Cpp.SteamStatsOnMainMenuTop::IEnumerator WaitAndDisplay()",
- "strategy": "Postfix",
- "description": "Interop target SteamStatsOnMainMenuTop.WaitAndDisplay",
- "payloadSchema": {
- "targetType": "SteamStatsOnMainMenuTop",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.WaitAndDisplay"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamStatsOnMainMenuTop.OnGlobalStatsReceived",
- "patchTarget": "Il2Cpp.SteamStatsOnMainMenuTop::void OnGlobalStatsReceived(GlobalStatsReceived_t result, bool ioFailure)",
- "strategy": "Postfix",
- "description": "Interop target SteamStatsOnMainMenuTop.OnGlobalStatsReceived",
- "payloadSchema": {
- "targetType": "SteamStatsOnMainMenuTop",
- "isStatic": false,
- "result": "GlobalStatsReceived_t",
- "ioFailure": "bool"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnGlobalStatsReceived"
- },
- {
- "legacy": "deprecated.SYSTEM.SteamStatsOnMainMenuTop.FormatDistance",
- "patchTarget": "Il2Cpp.SteamStatsOnMainMenuTop::string FormatDistance(double meters)",
- "strategy": "Postfix",
- "description": "Interop target SteamStatsOnMainMenuTop.FormatDistance",
- "payloadSchema": {
- "targetType": "SteamStatsOnMainMenuTop",
- "isStatic": false,
- "meters": "double"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FormatDistance"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.Awake",
- "patchTarget": "Il2Cpp.Technician::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Technician.Awake",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Technician_732074c4e3",
- "name": "greg.EMPLOYEE.ComponentInitialized.Technician_732074c4e3"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.Start",
- "patchTarget": "Il2Cpp.Technician::void Start()",
- "strategy": "Postfix",
- "description": "Interop target Technician.Start",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Technician_29458068f5",
- "name": "greg.EMPLOYEE.ComponentInitialized.Technician_29458068f5"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.RequestJobDelayed",
- "patchTarget": "Il2Cpp.Technician::IEnumerator RequestJobDelayed()",
- "strategy": "Postfix",
- "description": "Interop target Technician.RequestJobDelayed",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.RequestJobDelayed"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.AssignJob",
- "patchTarget": "Il2Cpp.Technician::void AssignJob(TechnicianManager.RepairJob job)",
- "strategy": "Postfix",
- "description": "Interop target Technician.AssignJob",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false,
- "job": "TechnicianManager.RepairJob"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.AssignJob"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.StartTextingAnimation",
- "patchTarget": "Il2Cpp.Technician::IEnumerator StartTextingAnimation()",
- "strategy": "Postfix",
- "description": "Interop target Technician.StartTextingAnimation",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.StartTextingAnimation"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.SendToContainer",
- "patchTarget": "Il2Cpp.Technician::IEnumerator SendToContainer()",
- "strategy": "Postfix",
- "description": "Interop target Technician.SendToContainer",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.ToContainerDispatched"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.ReplacingServer",
- "patchTarget": "Il2Cpp.Technician::IEnumerator ReplacingServer()",
- "strategy": "Postfix",
- "description": "Interop target Technician.ReplacingServer",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.ReplacingServer"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.ThrowingOutServer",
- "patchTarget": "Il2Cpp.Technician::IEnumerator ThrowingOutServer()",
- "strategy": "Postfix",
- "description": "Interop target Technician.ThrowingOutServer",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.ThrowingOutServer"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.RepairDevice",
- "patchTarget": "Il2Cpp.Technician::void RepairDevice()",
- "strategy": "Postfix",
- "description": "Interop target Technician.RepairDevice",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.DeviceRepaired"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.RotateTowardsGoal",
- "patchTarget": "Il2Cpp.Technician::void RotateTowardsGoal(Vector3 goal)",
- "strategy": "Postfix",
- "description": "Interop target Technician.RotateTowardsGoal",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false,
- "goal": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.RotateTowardsGoal"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.SetHandIKWeight",
- "patchTarget": "Il2Cpp.Technician::IEnumerator SetHandIKWeight(float targetWeight, float duration = 0.1f)",
- "strategy": "Postfix",
- "description": "Interop target Technician.SetHandIKWeight",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false,
- "targetWeight": "float",
- "duration": "float"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.HandIKWeightSet"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.PositionHandTargetsOnDevice",
- "patchTarget": "Il2Cpp.Technician::void PositionHandTargetsOnDevice(GameObject device)",
- "strategy": "Postfix",
- "description": "Interop target Technician.PositionHandTargetsOnDevice",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false,
- "device": "GameObject"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.PositionHandTargetsOnDevice"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.OnLoadingStarted",
- "patchTarget": "Il2Cpp.Technician::void OnLoadingStarted()",
- "strategy": "Postfix",
- "description": "Interop target Technician.OnLoadingStarted",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.OnLoadingStarted"
- },
- {
- "legacy": "deprecated.EMPLOYEE.Technician.OnDestroy",
- "patchTarget": "Il2Cpp.Technician::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target Technician.OnDestroy",
- "payloadSchema": {
- "targetType": "Technician",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.OnDestroy"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.Awake",
- "patchTarget": "Il2Cpp.TechnicianManager::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.Awake",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TechnicianManager",
- "name": "greg.EMPLOYEE.ComponentInitialized.TechnicianManager"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.AddTechnician",
- "patchTarget": "Il2Cpp.TechnicianManager::void AddTechnician(Technician technician)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.AddTechnician",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "technician": "Technician"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.TechnicianAdded"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.SendTechnician",
- "patchTarget": "Il2Cpp.TechnicianManager::void SendTechnician(NetworkSwitch networkSwitch, Server server)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.SendTechnician",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch",
- "server": "Server"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.TechnicianDispatched"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.RequestNextJob",
- "patchTarget": "Il2Cpp.TechnicianManager::void RequestNextJob(Technician technician)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.RequestNextJob",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "technician": "Technician"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.RequestNextJob"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.EnqueueDispatch",
- "patchTarget": "Il2Cpp.TechnicianManager::void EnqueueDispatch(TechnicianManager.RepairJob job)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.EnqueueDispatch",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "job": "TechnicianManager.RepairJob"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.DispatchJobQueued"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.ProcessDispatchQueue",
- "patchTarget": "Il2Cpp.TechnicianManager::IEnumerator ProcessDispatchQueue()",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.ProcessDispatchQueue",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.ProcessDispatchQueue"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.IsDeviceAlreadyAssigned",
- "patchTarget": "Il2Cpp.TechnicianManager::bool IsDeviceAlreadyAssigned(NetworkSwitch networkSwitch, Server server)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.IsDeviceAlreadyAssigned",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "networkSwitch": "NetworkSwitch",
- "server": "Server"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.IsDeviceAlreadyAssigned"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.RestoreJobQueue",
- "patchTarget": "Il2Cpp.TechnicianManager::void RestoreJobQueue(List savedJobs)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.RestoreJobQueue",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "savedJobs": "List"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.RestoreJobQueue"
- },
- {
- "legacy": "deprecated.EMPLOYEE.TechnicianManager.FireTechnician",
- "patchTarget": "Il2Cpp.TechnicianManager::void FireTechnician(int technicianID)",
- "strategy": "Postfix",
- "description": "Interop target TechnicianManager.FireTechnician",
- "payloadSchema": {
- "targetType": "TechnicianManager",
- "isStatic": false,
- "technicianID": "int"
- },
- "hookSubject": null,
- "name": "greg.EMPLOYEE.TechnicianFired"
- },
- {
- "legacy": "deprecated.SYSTEM.TerrainDetector.ConvertToSplatMapCoordinate",
- "patchTarget": "Il2Cpp.TerrainDetector::Vector3 ConvertToSplatMapCoordinate(Vector3 worldPosition)",
- "strategy": "Postfix",
- "description": "Interop target TerrainDetector.ConvertToSplatMapCoordinate",
- "payloadSchema": {
- "targetType": "TerrainDetector",
- "isStatic": false,
- "worldPosition": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ConvertToSplatMapCoordinate"
- },
- {
- "legacy": "deprecated.SYSTEM.TerrainDetector.SetCurrentTerrain",
- "patchTarget": "Il2Cpp.TerrainDetector::void SetCurrentTerrain(Terrain _terrain)",
- "strategy": "Postfix",
- "description": "Interop target TerrainDetector.SetCurrentTerrain",
- "payloadSchema": {
- "targetType": "TerrainDetector",
- "isStatic": false,
- "_terrain": "Terrain"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CurrentTerrainSet"
- },
- {
- "legacy": "deprecated.SYSTEM.TimeController.Awake",
- "patchTarget": "Il2Cpp.TimeController::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target TimeController.Awake",
- "payloadSchema": {
- "targetType": "TimeController",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TimeController_a900ecb78b",
- "name": "greg.SYSTEM.ComponentInitialized.TimeController_a900ecb78b"
- },
- {
- "legacy": "deprecated.SYSTEM.TimeController.Start",
- "patchTarget": "Il2Cpp.TimeController::void Start()",
- "strategy": "Postfix",
- "description": "Interop target TimeController.Start",
- "payloadSchema": {
- "targetType": "TimeController",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TimeController_958a749cd9",
- "name": "greg.SYSTEM.ComponentInitialized.TimeController_958a749cd9"
- },
- {
- "legacy": "deprecated.SYSTEM.TimeController.TimeIsBetween",
- "patchTarget": "Il2Cpp.TimeController::bool TimeIsBetween(float startHour, float endHour)",
- "strategy": "Postfix",
- "description": "Interop target TimeController.TimeIsBetween",
- "payloadSchema": {
- "targetType": "TimeController",
- "isStatic": false,
- "startHour": "float",
- "endHour": "float"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.TimeIsBetween"
- },
- {
- "legacy": "deprecated.SYSTEM.TimeController.CurrentTimeInHours",
- "patchTarget": "Il2Cpp.TimeController::float CurrentTimeInHours()",
- "strategy": "Postfix",
- "description": "Interop target TimeController.CurrentTimeInHours",
- "payloadSchema": {
- "targetType": "TimeController",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CurrentTimeInHours"
- },
- {
- "legacy": "deprecated.SYSTEM.TimeController.HoursFromDate",
- "patchTarget": "Il2Cpp.TimeController::int HoursFromDate(float _time, int _day)",
- "strategy": "Postfix",
- "description": "Interop target TimeController.HoursFromDate",
- "payloadSchema": {
- "targetType": "TimeController",
- "isStatic": false,
- "_time": "float",
- "_day": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HoursFromDate"
- },
- {
- "legacy": "deprecated.SYSTEM.TimeController.OnDisable",
- "patchTarget": "Il2Cpp.TimeController::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target TimeController.OnDisable",
- "payloadSchema": {
- "targetType": "TimeController",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TimeController",
- "name": "greg.SYSTEM.ComponentDisabled.TimeController"
- },
- {
- "legacy": "deprecated.SYSTEM.Tooltip.ShowTooltipOverlayCanvas",
- "patchTarget": "Il2Cpp.Tooltip::void ShowTooltipOverlayCanvas(string tooltipText, Vector3 _position, int differentXOffset = 0)",
- "strategy": "Postfix",
- "description": "Interop target Tooltip.ShowTooltipOverlayCanvas",
- "payloadSchema": {
- "targetType": "Tooltip",
- "isStatic": false,
- "tooltipText": "string",
- "_position": "Vector3",
- "differentXOffset": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowTooltipOverlayCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.Tooltip.ShowTooltipWorldCanvas",
- "patchTarget": "Il2Cpp.Tooltip::void ShowTooltipWorldCanvas(string _text, RectTransform _transform, Camera cam)",
- "strategy": "Postfix",
- "description": "Interop target Tooltip.ShowTooltipWorldCanvas",
- "payloadSchema": {
- "targetType": "Tooltip",
- "isStatic": false,
- "_text": "string",
- "_transform": "RectTransform",
- "cam": "Camera"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowTooltipWorldCanvas"
- },
- {
- "legacy": "deprecated.SYSTEM.Tooltip.HideTooltip",
- "patchTarget": "Il2Cpp.Tooltip::void HideTooltip()",
- "strategy": "Postfix",
- "description": "Interop target Tooltip.HideTooltip",
- "payloadSchema": {
- "targetType": "Tooltip",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HideTooltip"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipInteract.ShowTooltipForInteract",
- "patchTarget": "Il2Cpp.ToolTipInteract::void ShowTooltipForInteract(string _text, Sprite _sprite = null)",
- "strategy": "Postfix",
- "description": "Interop target ToolTipInteract.ShowTooltipForInteract",
- "payloadSchema": {
- "targetType": "ToolTipInteract",
- "isStatic": false,
- "_text": "string",
- "_sprite": "Sprite"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowTooltipForInteract"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipInteract.HideTooltipForInteract",
- "patchTarget": "Il2Cpp.ToolTipInteract::void HideTooltipForInteract()",
- "strategy": "Postfix",
- "description": "Interop target ToolTipInteract.HideTooltipForInteract",
- "payloadSchema": {
- "targetType": "ToolTipInteract",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.HideTooltipForInteract"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.OnPointerEnter",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::virtual void OnPointerEnter(PointerEventData eventData)",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.OnPointerEnter",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false,
- "eventData": "PointerEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnPointerEnter"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.OnPointerExit",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::virtual void OnPointerExit(PointerEventData eventData)",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.OnPointerExit",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false,
- "eventData": "PointerEventData"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnPointerExit"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.OnDisable",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.OnDisable",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ToolTipOnUIText",
- "name": "greg.SYSTEM.ComponentDisabled.ToolTipOnUIText"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.OnDestroy",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.OnDestroy",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "ToolTipOnUIText",
- "name": "greg.SYSTEM.OnDestroy.ToolTipOnUIText"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.OnSelect",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::void OnSelect()",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.OnSelect",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnSelect"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.OnDeselect",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::void OnDeselect()",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.OnDeselect",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnDeselect"
- },
- {
- "legacy": "deprecated.SYSTEM.ToolTipOnUIText.ToolTip",
- "patchTarget": "Il2Cpp.ToolTipOnUIText::void ToolTip()",
- "strategy": "Postfix",
- "description": "Interop target ToolTipOnUIText.ToolTip",
- "payloadSchema": {
- "targetType": "ToolTipOnUIText",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ToolTip"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.Awake",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.Awake",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TrolleyLoadingBay_d27ee1dbee",
- "name": "greg.SYSTEM.ComponentInitialized.TrolleyLoadingBay_d27ee1dbee"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.Start",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::void Start()",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.Start",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TrolleyLoadingBay_5e26ab824b",
- "name": "greg.SYSTEM.ComponentInitialized.TrolleyLoadingBay_5e26ab824b"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.InteractOnClick",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.InteractOnClick",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TrolleyLoadingBay",
- "name": "greg.SYSTEM.InteractOnClick.TrolleyLoadingBay"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.ParentTheObjectWithDelay",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::IEnumerator ParentTheObjectWithDelay(UsableObject uo)",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.ParentTheObjectWithDelay",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "uo": "UsableObject"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ParentTheObjectWithDelay"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.FreeTrolleySlot",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::void FreeTrolleySlot(int startIdx, int sizeInU)",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.FreeTrolleySlot",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "startIdx": "int",
- "sizeInU": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.FreeTrolleySlot"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.InteractOnHover",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.InteractOnHover",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "TrolleyLoadingBay_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.TrolleyLoadingBay_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyLoadingBay.OnHoverOver",
- "patchTarget": "Il2Cpp.TrolleyLoadingBay::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target TrolleyLoadingBay.OnHoverOver",
- "payloadSchema": {
- "targetType": "TrolleyLoadingBay",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "TrolleyLoadingBay",
- "name": "greg.SYSTEM.OnHoverOver.TrolleyLoadingBay"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyTrigger.OnTriggerEnter",
- "patchTarget": "Il2Cpp.TrolleyTrigger::void OnTriggerEnter(Collider other)",
- "strategy": "Postfix",
- "description": "Interop target TrolleyTrigger.OnTriggerEnter",
- "payloadSchema": {
- "targetType": "TrolleyTrigger",
- "isStatic": false,
- "other": "Collider"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnTriggerEnter"
- },
- {
- "legacy": "deprecated.SYSTEM.TrolleyTrigger.ObjectAdded",
- "patchTarget": "Il2Cpp.TrolleyTrigger::IEnumerator ObjectAdded(Collider other, UsableObject uo)",
- "strategy": "Postfix",
- "description": "Interop target TrolleyTrigger.ObjectAdded",
- "payloadSchema": {
- "targetType": "TrolleyTrigger",
- "isStatic": false,
- "other": "Collider",
- "uo": "UsableObject"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ObjectAdded"
- },
- {
- "legacy": "deprecated.UI.Tutorials.Awake",
- "patchTarget": "Il2Cpp.Tutorials::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.Awake",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Tutorials_7b4d6b441e",
- "name": "greg.UI.ComponentInitialized.Tutorials_7b4d6b441e"
- },
- {
- "legacy": "deprecated.UI.Tutorials.Start",
- "patchTarget": "Il2Cpp.Tutorials::void Start()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.Start",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Tutorials_c19d6f3a49",
- "name": "greg.UI.ComponentInitialized.Tutorials_c19d6f3a49"
- },
- {
- "legacy": "deprecated.UI.Tutorials.OnDestroy",
- "patchTarget": "Il2Cpp.Tutorials::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.OnDestroy",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.OnDestroy"
- },
- {
- "legacy": "deprecated.UI.Tutorials.ShowTutorial",
- "patchTarget": "Il2Cpp.Tutorials::void ShowTutorial(int i)",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.ShowTutorial",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.UI.ShowTutorial"
- },
- {
- "legacy": "deprecated.UI.Tutorials.PlayVideo",
- "patchTarget": "Il2Cpp.Tutorials::void PlayVideo(int _tutorialIndex, bool isInPauseMenu = false)",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.PlayVideo",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false,
- "_tutorialIndex": "int",
- "isInPauseMenu": "bool"
- },
- "hookSubject": null,
- "name": "greg.UI.PlayVideo"
- },
- {
- "legacy": "deprecated.UI.Tutorials.ButtonShowTutorialInPauseMenu",
- "patchTarget": "Il2Cpp.Tutorials::void ButtonShowTutorialInPauseMenu(int i)",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.ButtonShowTutorialInPauseMenu",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false,
- "i": "int"
- },
- "hookSubject": null,
- "name": "greg.UI.ButtonShowTutorialInPauseMenu"
- },
- {
- "legacy": "deprecated.UI.Tutorials.StopVideoInPauseMenu",
- "patchTarget": "Il2Cpp.Tutorials::void StopVideoInPauseMenu()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.StopVideoInPauseMenu",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.StopVideoInPauseMenu"
- },
- {
- "legacy": "deprecated.UI.Tutorials.OnVideoPrepared",
- "patchTarget": "Il2Cpp.Tutorials::void OnVideoPrepared(VideoPlayer vp)",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.OnVideoPrepared",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false,
- "vp": "VideoPlayer"
- },
- "hookSubject": null,
- "name": "greg.UI.OnVideoPrepared"
- },
- {
- "legacy": "deprecated.UI.Tutorials.StopTutorial",
- "patchTarget": "Il2Cpp.Tutorials::void StopTutorial()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.StopTutorial",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.StopTutorial"
- },
- {
- "legacy": "deprecated.UI.Tutorials.ButtonOK",
- "patchTarget": "Il2Cpp.Tutorials::void ButtonOK()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.ButtonOK",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.ButtonOK"
- },
- {
- "legacy": "deprecated.UI.Tutorials.SkipTutorials",
- "patchTarget": "Il2Cpp.Tutorials::void SkipTutorials()",
- "strategy": "Postfix",
- "description": "Interop target Tutorials.SkipTutorials",
- "payloadSchema": {
- "targetType": "Tutorials",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.SkipTutorials"
- },
- {
- "legacy": "deprecated.UI.UI_Section.OpenCloseSection",
- "patchTarget": "Il2Cpp.UI_Section::void OpenCloseSection()",
- "strategy": "Postfix",
- "description": "Interop target UI_Section.OpenCloseSection",
- "payloadSchema": {
- "targetType": "UI_Section",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.OpenCloseSection"
- },
- {
- "legacy": "deprecated.UI.UI_SelectedBorder.Awake",
- "patchTarget": "Il2Cpp.UI_SelectedBorder::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target UI_SelectedBorder.Awake",
- "payloadSchema": {
- "targetType": "UI_SelectedBorder",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "UI_SelectedBorder",
- "name": "greg.UI.ComponentInitialized.UI_SelectedBorder"
- },
- {
- "legacy": "deprecated.UI.UI_SelectedBorder.OnDisable",
- "patchTarget": "Il2Cpp.UI_SelectedBorder::void OnDisable()",
- "strategy": "Postfix",
- "description": "Interop target UI_SelectedBorder.OnDisable",
- "payloadSchema": {
- "targetType": "UI_SelectedBorder",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.UI.ComponentDisabled"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.Awake",
- "patchTarget": "Il2Cpp.UsableObject::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.Awake",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "UsableObject",
- "name": "greg.SYSTEM.ComponentInitialized.UsableObject"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.InteractOnClick",
- "patchTarget": "Il2Cpp.UsableObject::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.InteractOnClick",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "UsableObject",
- "name": "greg.SYSTEM.InteractOnClick.UsableObject"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.DropObject",
- "patchTarget": "Il2Cpp.UsableObject::virtual void DropObject()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.DropObject",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DroppedObject"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.ActionInHand",
- "patchTarget": "Il2Cpp.UsableObject::virtual void ActionInHand()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.ActionInHand",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ActionInHand"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.MakeInteractableAgain",
- "patchTarget": "Il2Cpp.UsableObject::IEnumerator MakeInteractableAgain()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.MakeInteractableAgain",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MakeInteractableAgain"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.MoveBetweenPositions",
- "patchTarget": "Il2Cpp.UsableObject::void MoveBetweenPositions(Vector3 _position, Vector3 _rotation)",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.MoveBetweenPositions",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "_position": "Vector3",
- "_rotation": "Vector3"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MoveBetweenPositions"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.MoveToHand",
- "patchTarget": "Il2Cpp.UsableObject::virtual void MoveToHand()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.MoveToHand",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MoveToHand"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.DisalowDrop",
- "patchTarget": "Il2Cpp.UsableObject::IEnumerator DisalowDrop()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.DisalowDrop",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.DisalowDrop"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.InteractOnHover",
- "patchTarget": "Il2Cpp.UsableObject::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.InteractOnHover",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "UsableObject_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.UsableObject_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.OnHoverOver",
- "patchTarget": "Il2Cpp.UsableObject::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.OnHoverOver",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "UsableObject",
- "name": "greg.SYSTEM.OnHoverOver.UsableObject"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.CheckIfLost",
- "patchTarget": "Il2Cpp.UsableObject::IEnumerator CheckIfLost()",
- "strategy": "Prefix+Postfix",
- "description": "Interop target UsableObject.CheckIfLost",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CheckIfLost"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.OnDestroy",
- "patchTarget": "Il2Cpp.UsableObject::virtual void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.OnDestroy",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "UsableObject",
- "name": "greg.SYSTEM.OnDestroy.UsableObject"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.OnLoadDestroy",
- "patchTarget": "Il2Cpp.UsableObject::void OnLoadDestroy()",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.OnLoadDestroy",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnLoadDestroy"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.MoveToStorage",
- "patchTarget": "Il2Cpp.UsableObject::virtual void MoveToStorage(Transform _pos, int _positionIndex, int _storageUid)",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.MoveToStorage",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "_pos": "Transform",
- "_positionIndex": "int",
- "_storageUid": "int"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.MoveToStorage"
- },
- {
- "legacy": "deprecated.SYSTEM.UsableObject.OnCollisionEnter",
- "patchTarget": "Il2Cpp.UsableObject::void OnCollisionEnter(Collision collision)",
- "strategy": "Postfix",
- "description": "Interop target UsableObject.OnCollisionEnter",
- "payloadSchema": {
- "targetType": "UsableObject",
- "isStatic": false,
- "collision": "Collision"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OnCollisionEnter"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.Start",
- "patchTarget": "Il2Cpp.UserReport::void Start()",
- "strategy": "Postfix",
- "description": "Interop target UserReport.Start",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "UserReport",
- "name": "greg.SYSTEM.ComponentInitialized.UserReport"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.CreateUserReport",
- "patchTarget": "Il2Cpp.UserReport::void CreateUserReport()",
- "strategy": "Postfix",
- "description": "Interop target UserReport.CreateUserReport",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.CreateUserReport"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.SubmitUserReport",
- "patchTarget": "Il2Cpp.UserReport::void SubmitUserReport()",
- "strategy": "Postfix",
- "description": "Interop target UserReport.SubmitUserReport",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.SubmitUserReport"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.ClearReport",
- "patchTarget": "Il2Cpp.UserReport::void ClearReport()",
- "strategy": "Postfix",
- "description": "Interop target UserReport.ClearReport",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClearReport"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.SetThumbnail",
- "patchTarget": "Il2Cpp.UserReport::void SetThumbnail(Texture2D thumbnail)",
- "strategy": "Postfix",
- "description": "Interop target UserReport.SetThumbnail",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false,
- "thumbnail": "Texture2D"
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ThumbnailSet"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.ShowError",
- "patchTarget": "Il2Cpp.UserReport::IEnumerator ShowError()",
- "strategy": "Postfix",
- "description": "Interop target UserReport.ShowError",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ShowError"
- },
- {
- "legacy": "deprecated.SYSTEM.UserReport.ClearForm",
- "patchTarget": "Il2Cpp.UserReport::void ClearForm()",
- "strategy": "Postfix",
- "description": "Interop target UserReport.ClearForm",
- "payloadSchema": {
- "targetType": "UserReport",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.ClearForm"
- },
- {
- "legacy": "deprecated.SYSTEM.Vector3SerializationSurrogate.SetObjectData",
- "patchTarget": "Il2Cpp.Vector3SerializationSurrogate::virtual Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)",
- "strategy": "Postfix",
- "description": "Interop target Vector3SerializationSurrogate.SetObjectData",
- "payloadSchema": {
- "targetType": "Vector3SerializationSurrogate",
- "isStatic": false,
- "obj": "Object",
- "info": "SerializationInfo",
- "context": "StreamingContext",
- "selector": "ISurrogateSelector",
- "hookSubject": "string"
- },
- "hookSubject": "Vector3SerializationSurrogate_ObjectobjSerializationInfoinfoStreamingC",
- "name": "greg.SYSTEM.ObjectDataSet.Vector3SerializationSurrogate_ObjectobjSerializationInfoinfoStreamingC"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.Awake",
- "patchTarget": "Il2Cpp.Wall::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target Wall.Awake",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Wall",
- "name": "greg.SYSTEM.ComponentInitialized.Wall"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.InteractOnClick",
- "patchTarget": "Il2Cpp.Wall::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target Wall.InteractOnClick",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Wall",
- "name": "greg.SYSTEM.InteractOnClick.Wall"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.OpenWall",
- "patchTarget": "Il2Cpp.Wall::void OpenWall()",
- "strategy": "Postfix",
- "description": "Interop target Wall.OpenWall",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false
- },
- "hookSubject": null,
- "name": "greg.SYSTEM.OpenWall"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.InteractOnHover",
- "patchTarget": "Il2Cpp.Wall::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target Wall.InteractOnHover",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "Wall_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.Wall_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.OnHoverOver",
- "patchTarget": "Il2Cpp.Wall::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target Wall.OnHoverOver",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Wall",
- "name": "greg.SYSTEM.OnHoverOver.Wall"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.OnLoad",
- "patchTarget": "Il2Cpp.Wall::void OnLoad()",
- "strategy": "Postfix",
- "description": "Interop target Wall.OnLoad",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Wall",
- "name": "greg.SYSTEM.OnLoad.Wall"
- },
- {
- "legacy": "deprecated.SYSTEM.Wall.OnDestroy",
- "patchTarget": "Il2Cpp.Wall::void OnDestroy()",
- "strategy": "Postfix",
- "description": "Interop target Wall.OnDestroy",
- "payloadSchema": {
- "targetType": "Wall",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "Wall",
- "name": "greg.SYSTEM.OnDestroy.Wall"
- },
- {
- "legacy": "deprecated.SYSTEM.WorldCanvasCuller.Awake",
- "patchTarget": "Il2Cpp.WorldCanvasCuller::void Awake()",
- "strategy": "Postfix",
- "description": "Interop target WorldCanvasCuller.Awake",
- "payloadSchema": {
- "targetType": "WorldCanvasCuller",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "WorldCanvasCuller",
- "name": "greg.SYSTEM.ComponentInitialized.WorldCanvasCuller"
- },
- {
- "legacy": "deprecated.SYSTEM.WorldObjectButton.Awake",
- "patchTarget": "Il2Cpp.WorldObjectButton::override void Awake()",
- "strategy": "Postfix",
- "description": "Interop target WorldObjectButton.Awake",
- "payloadSchema": {
- "targetType": "WorldObjectButton",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "WorldObjectButton",
- "name": "greg.SYSTEM.ComponentInitialized.WorldObjectButton"
- },
- {
- "legacy": "deprecated.SYSTEM.WorldObjectButton.InteractOnClick",
- "patchTarget": "Il2Cpp.WorldObjectButton::override void InteractOnClick()",
- "strategy": "Postfix",
- "description": "Interop target WorldObjectButton.InteractOnClick",
- "payloadSchema": {
- "targetType": "WorldObjectButton",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "WorldObjectButton",
- "name": "greg.SYSTEM.InteractOnClick.WorldObjectButton"
- },
- {
- "legacy": "deprecated.SYSTEM.WorldObjectButton.InteractOnHover",
- "patchTarget": "Il2Cpp.WorldObjectButton::override void InteractOnHover(RaycastHit hit)",
- "strategy": "Postfix",
- "description": "Interop target WorldObjectButton.InteractOnHover",
- "payloadSchema": {
- "targetType": "WorldObjectButton",
- "isStatic": false,
- "hit": "RaycastHit",
- "hookSubject": "string"
- },
- "hookSubject": "WorldObjectButton_RaycastHithit",
- "name": "greg.SYSTEM.InteractOnHover.WorldObjectButton_RaycastHithit"
- },
- {
- "legacy": "deprecated.SYSTEM.WorldObjectButton.OnHoverOver",
- "patchTarget": "Il2Cpp.WorldObjectButton::override void OnHoverOver()",
- "strategy": "Postfix",
- "description": "Interop target WorldObjectButton.OnHoverOver",
- "payloadSchema": {
- "targetType": "WorldObjectButton",
- "isStatic": false,
- "hookSubject": "string"
- },
- "hookSubject": "WorldObjectButton",
- "name": "greg.SYSTEM.OnHoverOver.WorldObjectButton"
- }
- ]
-}
-
diff --git a/scripts/Generate-GregHooksFromIl2CppDump.ps1 b/scripts/Generate-GregHooksFromIl2CppDump.ps1
index caacaa30..eb97e301 100644
--- a/scripts/Generate-GregHooksFromIl2CppDump.ps1
+++ b/scripts/Generate-GregHooksFromIl2CppDump.ps1
@@ -3,18 +3,18 @@
$ErrorActionPreference = 'Stop'
$repoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..')
-$il2cppDir = Join-Path $repoRoot 'gregReferences\il2cpp-unpack\Assembly-CSharp\Il2Cpp'
+$assemblyRoot = Join-Path $repoRoot 'gregReferences\Assembly-CSharp'
$harmonyPatches = Join-Path $repoRoot 'gregCore\framework\ModLoader\HarmonyPatches.cs'
$outJsonRoot = Join-Path $repoRoot 'greg_hooks.json'
$outJsonFramework = Join-Path $repoRoot 'gregCore\framework\greg_hooks.json'
$outHooksDir = Join-Path $repoRoot 'gregCore\framework\harmony'
-if (-not (Test-Path $il2cppDir)) { throw "Missing Il2Cpp sources: $il2cppDir" }
+if (-not (Test-Path $assemblyRoot)) { throw "Missing assembly source root: $assemblyRoot" }
New-Item -ItemType Directory -Force -Path $outHooksDir | Out-Null
function Get-HarmonyExclusions([string]$path) {
$set = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
- if (-not (Test-Path $path)) { return $set }
+ if (-not (Test-Path $path)) { return ,$set }
$text = Get-Content $path -Raw
foreach ($m in [regex]::Matches($text, 'typeof\((\w+)\)\s*,\s*nameof\(\w+\.(\w+)\)')) {
[void]$set.Add("$($m.Groups[1].Value)|$($m.Groups[2].Value)")
@@ -22,20 +22,23 @@ function Get-HarmonyExclusions([string]$path) {
foreach ($m in [regex]::Matches($text, 'typeof\((\w+)\)\s*,\s*"(\w+)"')) {
[void]$set.Add("$($m.Groups[1].Value)|$($m.Groups[2].Value)")
}
- return $set
+ return ,$set
}
$excluded = Get-HarmonyExclusions $harmonyPatches
+[void]$excluded.Add('NetworkMap|RemapDeviceId')
+[void]$excluded.Add('NetworkMap|RemoveIsolatedDevice')
+[void]$excluded.Add('Technician|CacheDeviceBounds')
-# Curated game surface for stable compile (full Il2Cpp tree needs extra Unity/asm refs).
-$gameHookClasses = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
+# Curated game surface for stable compile-time Harmony class generation.
+$harmonyEmitClasses = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
@(
'Player', 'PlayerManager', 'PlayerHit', 'PlayerData',
'Server', 'MainGameManager', 'ComputerShop', 'HRSystem', 'SaveSystem', 'CustomerBase',
'CablePositions', 'CableLink', 'Rack', 'NetworkMap', 'BalanceSheet', 'MainMenu',
'TimeController', 'TechnicianManager', 'Technician', 'Objectives',
'PacketSpawnerSystem', 'NetworkSwitch', 'SFPModule', 'SFPBox', 'PatchPanel'
-) | ForEach-Object { [void]$gameHookClasses.Add($_) }
+) | ForEach-Object { [void]$harmonyEmitClasses.Add($_) }
function Test-SkipTypeName([string]$n) {
if ($n -match 'd__\d+$') { return $true }
@@ -120,6 +123,34 @@ function Test-SkipClass([string]$className, [string]$baseClause) {
return $false
}
+function Get-SourceDirectories([string]$rootPath) {
+ $dirs = [System.Collections.Generic.List[string]]::new()
+
+ $includePatterns = @('Il2Cpp*', 'Unity*', 'UnityEngine*')
+ foreach ($pattern in $includePatterns) {
+ foreach ($dir in (Get-ChildItem -Path $rootPath -Directory -Filter $pattern -ErrorAction SilentlyContinue)) {
+ [void]$dirs.Add($dir.FullName)
+ }
+ }
+
+ if ($dirs.Count -eq 0) {
+ throw "No source directories matched under $rootPath (expected Il2Cpp*/Unity*)."
+ }
+
+ return $dirs
+}
+
+function Get-AssemblyNameFromPath([string]$filePath, [string]$rootPath) {
+ $relative = [System.IO.Path]::GetRelativePath($rootPath, $filePath)
+ if ([string]::IsNullOrWhiteSpace($relative)) { return 'Assembly-CSharp' }
+
+ $parts = $relative -split '[\\/]'
+ $first = if ($parts.Length -gt 0) { $parts[0] } else { '' }
+ if ([string]::IsNullOrWhiteSpace($first)) { return 'Assembly-CSharp' }
+
+ return $first
+}
+
function Test-SkipInteropSignature([string]$returnType, [string]$argList) {
$blob = "$returnType $argList"
if ($blob -match 'EntityCommandBuffer|SystemState|BlobArray|ComponentLookup|BufferLookup') { return $true }
@@ -185,14 +216,13 @@ function Get-Il2CppPatchSignature([string]$className, [string]$methodName, [stri
function Split-MethodLine([string]$line, [ref]$isStatic) {
$isStatic.Value = $false
- $m = [regex]::Match($line, '^\t{2}public unsafe static (?.+?)\s*\((?[^\)]*)\)\s*$')
- if ($m.Success) { $isStatic.Value = $true }
- else {
- $m = [regex]::Match($line, '^\t{2}public unsafe (?.+?)\s*\((?[^\)]*)\)\s*$')
- }
+ $m = [regex]::Match($line, '^\s+(?:public|private|protected|internal)\s+(?(?:(?:static|unsafe|virtual|override|abstract|sealed|new|extern|partial)\s+)*)?(?.+?)\s*\((?[^\)]*)\)\s*$')
if (-not $m.Success) { return $null }
+
+ $mods = $m.Groups['mods'].Value
+ if ($mods -match '\bstatic\b') { $isStatic.Value = $true }
+
$sig = $m.Groups['sig'].Value.Trim()
- if ($sig.StartsWith('static ')) { $sig = $sig.Substring(7).Trim() }
$argList = $m.Groups['args'].Value.Trim()
$idx = $sig.LastIndexOf(' ')
if ($idx -lt 0) { return $null }
@@ -235,22 +265,22 @@ function Build-EmitAnonymousBody([string]$className, [bool]$isStatic) {
$hooks = [System.Collections.Generic.List[object]]::new()
$byDomain = @{}
+$scanDirectories = Get-SourceDirectories $assemblyRoot
+$sourceFiles = $scanDirectories | ForEach-Object { Get-ChildItem -Path $_ -Filter '*.cs' -File -Recurse }
-Get-ChildItem $il2cppDir -Filter '*.cs' -File | ForEach-Object {
- $lines = Get-Content $_.FullName
- $overloadFirst = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
+foreach ($sourceFile in $sourceFiles) {
+ $assemblyName = Get-AssemblyNameFromPath $sourceFile.FullName $assemblyRoot
+ $lines = Get-Content $sourceFile.FullName
+ $harmonyOverloadFirst = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
$currentClass = $null
$currentBase = ''
- $classRegex = [regex]'^\tpublic (sealed )?class (?[A-Za-z0-9_]+)\s*:\s*(?[^\r\n{]+)'
+ $classRegex = [regex]'^\s*(?:public|private|protected|internal)\s+(?:sealed\s+)?class\s+(?[A-Za-z0-9_]+)(\s*:\s*(?[^\r\n{]+))?'
foreach ($line in $lines) {
$cm = $classRegex.Match($line)
if ($cm.Success) {
$cn = $cm.Groups['name'].Value
$cb = $cm.Groups['base'].Value.Trim()
- if (Test-SkipTypeName $cn) { $currentClass = $null; $currentBase = ''; continue }
- if (Test-SkipClass $cn $cb) { $currentClass = $null; $currentBase = ''; continue }
- if (-not $gameHookClasses.Contains($cn)) { $currentClass = $null; $currentBase = ''; continue }
$currentClass = $cn
$currentBase = $cb
continue
@@ -265,18 +295,9 @@ Get-ChildItem $il2cppDir -Filter '*.cs' -File | ForEach-Object {
$mn = $parsed.Name
$argList = $parsed.ArgList
- if (-not (Test-ShouldEmitHook $mn $ret)) { continue }
- if (Test-SkipInteropSignature $ret $argList) { continue }
- if ($excluded.Contains("$currentClass|$mn")) { continue }
-
- $ovKey = "$currentClass|$mn"
- if ($overloadFirst.Contains($ovKey)) { continue }
- [void]$overloadFirst.Add($ovKey)
-
$domain = Get-GregDomain $currentClass
$action = Get-SemanticAction $currentClass $mn
- $strategy = Get-HookStrategy $mn $ret
- if ($strategy -eq 'None') { continue }
+ $strategy = 'Postfix'
$hookName = "greg.$($domain.ToUpperInvariant()).$action"
$patchTarget = Get-Il2CppPatchSignature $currentClass $mn $argList
@@ -314,29 +335,41 @@ Get-ChildItem $il2cppDir -Filter '*.cs' -File | ForEach-Object {
name = $hookName
legacy = $null
patchTarget = $patchTarget
+ assembly = $assemblyName
strategy = $(if ($strategy -eq 'PrefixPostfix') { 'Prefix+Postfix' } else { 'Postfix' })
- description = "Auto-generated from Il2Cpp unpack: $currentClass.$mn"
+ description = "Auto-generated from IL2CPP sources: $assemblyName/$currentClass.$mn"
payloadSchema = $payload
})
- if (-not $byDomain.ContainsKey($domain)) { $byDomain[$domain] = [System.Collections.Generic.List[object]]::new() }
- [void]$byDomain[$domain].Add([ordered]@{
- Class = $currentClass
- Method = $mn
- Ret = $ret
- Args = $argList
- Action = $action
- Strategy = $strategy
- HookName = $hookName
- IsStatic = $staticFlag
- })
+ $harmonySignatureCompatible = $line -match '^\s+public unsafe(?:\s+static)?\s+'
+ $allowHarmonyEmit = $harmonyEmitClasses.Contains($currentClass) -and -not (Test-SkipTypeName $currentClass) -and -not (Test-SkipClass $currentClass $currentBase) -and $harmonySignatureCompatible
+ if ($allowHarmonyEmit -and (Test-ShouldEmitHook $mn $ret) -and -not (Test-SkipInteropSignature $ret $argList) -and -not $excluded.Contains("$currentClass|$mn")) {
+ $harmonyOvKey = "$currentClass|$mn"
+ if ($harmonyOverloadFirst.Contains($harmonyOvKey)) { continue }
+ [void]$harmonyOverloadFirst.Add($harmonyOvKey)
+
+ $harmonyStrategy = Get-HookStrategy $mn $ret
+ if ($harmonyStrategy -eq 'None') { continue }
+
+ if (-not $byDomain.ContainsKey($domain)) { $byDomain[$domain] = [System.Collections.Generic.List[object]]::new() }
+ [void]$byDomain[$domain].Add([ordered]@{
+ Class = $currentClass
+ Method = $mn
+ Ret = $ret
+ Args = $argList
+ Action = $action
+ Strategy = $harmonyStrategy
+ HookName = $hookName
+ IsStatic = $staticFlag
+ })
+ }
}
}
$seen = @{}
$unique = [System.Collections.Generic.List[object]]::new()
foreach ($h in $hooks) {
- $k = [string]$h.patchTarget
+ $k = "$($h.assembly)|$([string]$h.patchTarget)"
if ($seen.ContainsKey($k)) { continue }
$seen[$k] = $true
[void]$unique.Add($h)
@@ -345,7 +378,7 @@ foreach ($h in $hooks) {
$doc = [ordered]@{
version = 2
description = 'Canonical greg hook registry. Schema: greg... Generated from Il2Cpp C# unpack; regenerate with gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1 when MergedCode.md / interop changes.'
- generatedFrom = 'gregReferences/il2cpp-unpack/Assembly-CSharp/Il2Cpp/*.cs'
+ generatedFrom = 'gregReferences/Assembly-CSharp/{Il2Cpp*,Unity*,UnityEngine*}/**/*.cs'
legacyPrefixes = @()
hooks = $unique
}
@@ -370,7 +403,8 @@ foreach ($kv in $byDomain.GetEnumerator()) {
$sb = [System.Text.StringBuilder]::new()
[void]$sb.AppendLine('using System;')
[void]$sb.AppendLine('using HarmonyLib;')
- [void]$sb.AppendLine('using gregFramework.Core;')
+ [void]$sb.AppendLine('using greg.Core;')
+ [void]$sb.AppendLine('using greg.Sdk;')
[void]$sb.AppendLine('using Il2Cpp;')
[void]$sb.AppendLine('using Il2CppSystem.Collections.Generic;')
[void]$sb.AppendLine('using Il2CppInterop.Runtime.InteropTypes.Arrays;')
@@ -420,8 +454,8 @@ foreach ($kv in $byDomain.GetEnumerator()) {
[void]$sb.AppendLine(' {')
[void]$sb.AppendLine(' try')
[void]$sb.AppendLine(' {')
- [void]$sb.AppendLine(' GregEventDispatcher.Emit(')
- [void]$sb.AppendLine(" GregHookName.Create(GregDomain.$gregDomain, `"$action`"),")
+ [void]$sb.AppendLine(' gregEventDispatcher.Emit(')
+ [void]$sb.AppendLine(" gregHookName.Create(GregDomain.$gregDomain, `"$action`"),")
[void]$sb.AppendLine(' new')
[void]$sb.AppendLine(' {')
[void]$sb.AppendLine($emitBody)
@@ -461,3 +495,4 @@ internal static class GregPowerHooks
Write-Host "Wrote stub $powerFile"
}
+
diff --git a/src/Core/Abstractions/IGregConfigService.cs b/src/Core/Abstractions/IGregConfigService.cs
new file mode 100644
index 00000000..031c0aca
--- /dev/null
+++ b/src/Core/Abstractions/IGregConfigService.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für Konfigurations-Management.
+/// Maintainer: Wird für mod.json und globale Configs (Newtonsoft.Json) genutzt.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregConfigService
+{
+ T? LoadConfig(string filePath) where T : class;
+ void SaveConfig(string filePath, T config) where T : class;
+}
diff --git a/src/Core/Abstractions/IGregEventBus.cs b/src/Core/Abstractions/IGregEventBus.cs
new file mode 100644
index 00000000..ec913a02
--- /dev/null
+++ b/src/Core/Abstractions/IGregEventBus.cs
@@ -0,0 +1,14 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für das Event-Bus System.
+/// Maintainer: Zentraler Message-Broker für alle Mods und Hooks.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregEventBus
+{
+ void Subscribe(string hookName, Action handler);
+ void Unsubscribe(string hookName, Action handler);
+ bool Publish(string hookName, EventPayload payload);
+}
diff --git a/src/Core/Abstractions/IGregFfiBridge.cs b/src/Core/Abstractions/IGregFfiBridge.cs
new file mode 100644
index 00000000..0f6af290
--- /dev/null
+++ b/src/Core/Abstractions/IGregFfiBridge.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für Foreign Function Interface (Win32 FFI).
+/// Maintainer: Lädt und bindet native Bibliotheken (C++/Rust).
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregFfiBridge
+{
+ void Initialize();
+ void LoadNativeMod(string dllPath);
+}
diff --git a/src/Core/Abstractions/IGregLanguageBridge.cs b/src/Core/Abstractions/IGregLanguageBridge.cs
new file mode 100644
index 00000000..9cc7b18b
--- /dev/null
+++ b/src/Core/Abstractions/IGregLanguageBridge.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für Skript-Sprachen-Brücken (Lua/JS).
+/// Maintainer: Ermöglicht das Hinzufügen neuer Skriptsprachen ohne Core-Änderung.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregLanguageBridge
+{
+ void Initialize();
+ void ExecuteScript(string scriptContent);
+}
diff --git a/src/Core/Abstractions/IGregLogger.cs b/src/Core/Abstractions/IGregLogger.cs
new file mode 100644
index 00000000..0218e4f7
--- /dev/null
+++ b/src/Core/Abstractions/IGregLogger.cs
@@ -0,0 +1,16 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für Logging.
+/// Maintainer: Einziger Vertrag für Logs, entkoppelt MelonLogger vom Framework.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregLogger
+{
+ void Debug(string message);
+ void Info(string message);
+ void Warning(string message);
+ void Error(string message, Exception? ex = null);
+ IGregLogger ForContext(string context);
+}
diff --git a/src/Core/Abstractions/IGregMcpServer.cs b/src/Core/Abstractions/IGregMcpServer.cs
new file mode 100644
index 00000000..b1c4a9ad
--- /dev/null
+++ b/src/Core/Abstractions/IGregMcpServer.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für den MCP-Endpunkt (Model Context Protocol).
+/// Maintainer: Bereitstellung von HTTP-basierten Debug/Mod-Schnittstellen.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregMcpServer
+{
+ void Start(int port);
+ void Stop();
+}
diff --git a/src/Core/Abstractions/IGregPersistenceService.cs b/src/Core/Abstractions/IGregPersistenceService.cs
new file mode 100644
index 00000000..f77908d2
--- /dev/null
+++ b/src/Core/Abstractions/IGregPersistenceService.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für Daten-Persistenz.
+/// Maintainer: Wird für Spielstände und Mod-Daten (System.Text.Json) genutzt.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregPersistenceService
+{
+ T? LoadData(string key) where T : class;
+ void SaveData(string key, T data) where T : class;
+}
diff --git a/src/Core/Abstractions/IGregPluginRegistry.cs b/src/Core/Abstractions/IGregPluginRegistry.cs
new file mode 100644
index 00000000..da99b19b
--- /dev/null
+++ b/src/Core/Abstractions/IGregPluginRegistry.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Interface für die Registrierung von Mods/Plugins.
+/// Maintainer: Verwaltet den Lifecycle aller geladenen Plugins.
+///
+
+namespace gregCore.Core.Abstractions;
+
+public interface IGregPluginRegistry
+{
+ void LoadAll();
+ IReadOnlyList GetLoadedPlugins();
+}
diff --git a/src/Core/Events/EventIds.cs b/src/Core/Events/EventIds.cs
new file mode 100644
index 00000000..768a2c72
--- /dev/null
+++ b/src/Core/Events/EventIds.cs
@@ -0,0 +1,16 @@
+///
+/// Schicht: Core
+/// Zweck: Definiert eindeutige IDs für Native FFI Events.
+/// Maintainer: Muss synchron mit C/Rust Headern bleiben.
+///
+
+namespace gregCore.Core.Events;
+
+public static class EventIds
+{
+ // [GREG_SYNC_INSERT_EVENTIDS]
+
+ public const int PlayerCoinUpdated = 1001;
+ public const int GameSaved = 2001;
+ public const int ServerStatusChanged = 3001;
+}
diff --git a/src/Core/Events/EventPayloadBuilder.cs b/src/Core/Events/EventPayloadBuilder.cs
new file mode 100644
index 00000000..ac5c1b3f
--- /dev/null
+++ b/src/Core/Events/EventPayloadBuilder.cs
@@ -0,0 +1,37 @@
+///
+/// Schicht: Core
+/// Zweck: Hilfsklasse zum schnellen Erstellen von EventPayloads.
+/// Maintainer: Reduziert Boilerplate beim Dispatchen von Events.
+///
+
+namespace gregCore.Core.Events;
+
+public static class EventPayloadBuilder
+{
+ public static EventPayload ForScene(int buildIndex, string sceneName) =>
+ new EventPayload
+ {
+ HookName = HookName.Create("lifecycle", "SceneLoaded").Full,
+ OccurredAtUtc = DateTime.UtcNow,
+ Data = new Dictionary
+ {
+ { "BuildIndex", buildIndex },
+ { "SceneName", sceneName }
+ },
+ IsCancelable = false
+ };
+
+ public static EventPayload ForValueChange(string propertyName, object oldValue, object newValue) =>
+ new EventPayload
+ {
+ HookName = string.Empty, // Wird vom Caller überschrieben
+ OccurredAtUtc = DateTime.UtcNow,
+ Data = new Dictionary
+ {
+ { "Property", propertyName },
+ { "OldValue", oldValue },
+ { "NewValue", newValue }
+ },
+ IsCancelable = true
+ };
+}
diff --git a/src/Core/Events/GregEventBus.cs b/src/Core/Events/GregEventBus.cs
new file mode 100644
index 00000000..7f67d53d
--- /dev/null
+++ b/src/Core/Events/GregEventBus.cs
@@ -0,0 +1,143 @@
+///
+/// Schicht: Core
+/// Zweck: Thread-sichere Implementierung des IGregEventBus.
+/// Maintainer: Publish läuft synchron auf dem aufrufenden Thread. Caching für Hotpath.
+///
+
+namespace gregCore.Core.Events;
+
+public sealed class GregEventBus : IGregEventBus, IDisposable
+{
+ private readonly IGregLogger _logger;
+ private readonly Dictionary>> _handlers = new();
+ private readonly Dictionary[]> _cachedHandlers = new();
+ private readonly ReaderWriterLockSlim _rwLock = new();
+ private bool _isDirty = true;
+ private bool _disposed;
+
+ public GregEventBus(IGregLogger logger)
+ {
+ ArgumentNullException.ThrowIfNull(logger);
+ _logger = logger.ForContext("EventBus");
+ }
+
+ public void Subscribe(string hookName, Action handler)
+ {
+ ArgumentNullException.ThrowIfNull(hookName);
+ ArgumentNullException.ThrowIfNull(handler);
+
+ _rwLock.EnterWriteLock();
+ try
+ {
+ if (!_handlers.TryGetValue(hookName, out var list))
+ {
+ list = new List>();
+ _handlers[hookName] = list;
+ }
+ list.Add(handler);
+ _isDirty = true;
+ }
+ finally
+ {
+ _rwLock.ExitWriteLock();
+ }
+ }
+
+ public void Unsubscribe(string hookName, Action handler)
+ {
+ ArgumentNullException.ThrowIfNull(hookName);
+ ArgumentNullException.ThrowIfNull(handler);
+
+ _rwLock.EnterWriteLock();
+ try
+ {
+ if (_handlers.TryGetValue(hookName, out var list))
+ {
+ list.Remove(handler);
+ _isDirty = true;
+ }
+ }
+ finally
+ {
+ _rwLock.ExitWriteLock();
+ }
+ }
+
+ public bool Publish(string hookName, EventPayload payload)
+ {
+ ArgumentNullException.ThrowIfNull(hookName);
+
+ Action[]? handlersToInvoke = null;
+
+ _rwLock.EnterReadLock();
+ try
+ {
+ if (_isDirty)
+ {
+ _rwLock.ExitReadLock();
+ _rwLock.EnterWriteLock();
+ try
+ {
+ if (_isDirty)
+ {
+ _cachedHandlers.Clear();
+ foreach (var kvp in _handlers)
+ {
+ _cachedHandlers[kvp.Key] = kvp.Value.ToArray();
+ }
+ _isDirty = false;
+ }
+ }
+ finally
+ {
+ _rwLock.ExitWriteLock();
+ _rwLock.EnterReadLock();
+ }
+ }
+
+ _cachedHandlers.TryGetValue(hookName, out handlersToInvoke);
+ }
+ finally
+ {
+ _rwLock.ExitReadLock();
+ }
+
+ if (handlersToInvoke == null || handlersToInvoke.Length == 0) return true;
+
+ var currentPayload = payload with { HookName = hookName };
+
+ foreach (var handler in handlersToInvoke)
+ {
+ try
+ {
+ handler(currentPayload);
+ if (currentPayload.IsCancelable && currentPayload.IsCancelled)
+ {
+ return false;
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Fehler in Handler für {hookName}", ex);
+ }
+ }
+
+ return true;
+ }
+
+ public void Dispose()
+ {
+ Dispose(disposing: true);
+ GC.SuppressFinalize(this);
+ }
+
+ private void Dispose(bool disposing)
+ {
+ if (_disposed) return;
+ if (disposing)
+ {
+ _rwLock.Dispose();
+ }
+ _disposed = true;
+ }
+}
diff --git a/src/Core/Events/NativeEventHooks.cs b/src/Core/Events/NativeEventHooks.cs
new file mode 100644
index 00000000..47f943c4
--- /dev/null
+++ b/src/Core/Events/NativeEventHooks.cs
@@ -0,0 +1,21 @@
+///
+/// Schicht: Core
+/// Zweck: Mappt Hook-Namen auf Native Event-IDs für FFI.
+/// Maintainer: Erlaubt es nativen Mods, Events via ID zu empfangen.
+///
+
+namespace gregCore.Core.Events;
+
+public static class NativeEventHooks
+{
+ private static readonly Dictionary _hookToId = new()
+ {
+ // [GREG_SYNC_INSERT_MAPPINGS]
+ { HookName.Create("economy", "PlayerCoinUpdated").Full, EventIds.PlayerCoinUpdated },
+ { HookName.Create("persistence", "GameSaved").Full, EventIds.GameSaved },
+ { HookName.Create("hardware", "ServerStatusChanged").Full, EventIds.ServerStatusChanged }
+ };
+
+ public static bool TryGetEventId(string hookName, out int eventId) =>
+ _hookToId.TryGetValue(hookName, out eventId);
+}
diff --git a/src/Core/Exceptions/GregAbiException.cs b/src/Core/Exceptions/GregAbiException.cs
new file mode 100644
index 00000000..16238a9f
--- /dev/null
+++ b/src/Core/Exceptions/GregAbiException.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Exception für ABI (Application Binary Interface) Mismatches bei nativen Mods.
+/// Maintainer: Wird geworfen, wenn GameAPITable Versionen nicht übereinstimmen.
+///
+
+namespace gregCore.Core.Exceptions;
+
+public class GregAbiException : GregCoreException
+{
+ public GregAbiException(string message) : base(message) { }
+ public GregAbiException(string message, Exception inner) : base(message, inner) { }
+}
diff --git a/src/Core/Exceptions/GregBridgeException.cs b/src/Core/Exceptions/GregBridgeException.cs
new file mode 100644
index 00000000..8c3f2b87
--- /dev/null
+++ b/src/Core/Exceptions/GregBridgeException.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Exception für Fehler innerhalb von Language Bridges (Lua/JS/FFI).
+/// Maintainer: Sollte abgefangen und isoliert geloggt werden, crasht nie den Main Thread.
+///
+
+namespace gregCore.Core.Exceptions;
+
+public class GregBridgeException : GregCoreException
+{
+ public GregBridgeException(string message) : base(message) { }
+ public GregBridgeException(string message, Exception inner) : base(message, inner) { }
+}
diff --git a/src/Core/Exceptions/GregCoreException.cs b/src/Core/Exceptions/GregCoreException.cs
new file mode 100644
index 00000000..9da527fc
--- /dev/null
+++ b/src/Core/Exceptions/GregCoreException.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Basis-Exception für alle frameworkeigenen Exceptions.
+/// Maintainer: Alle eigenen Exceptions sollten hiervon erben.
+///
+
+namespace gregCore.Core.Exceptions;
+
+public abstract class GregCoreException : Exception
+{
+ protected GregCoreException(string message) : base(message) { }
+ protected GregCoreException(string message, Exception inner) : base(message, inner) { }
+}
diff --git a/src/Core/Exceptions/GregInitException.cs b/src/Core/Exceptions/GregInitException.cs
new file mode 100644
index 00000000..c3574b91
--- /dev/null
+++ b/src/Core/Exceptions/GregInitException.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Exception für Initialisierungsfehler des Frameworks.
+/// Maintainer: Framework-eigene Exception, keine Unity-Abhängigkeit.
+///
+
+namespace gregCore.Core.Exceptions;
+
+public class GregInitException : GregCoreException
+{
+ public GregInitException(string message) : base(message) { }
+ public GregInitException(string message, Exception inner) : base(message, inner) { }
+}
diff --git a/src/Core/Exceptions/GregPluginLoadException.cs b/src/Core/Exceptions/GregPluginLoadException.cs
new file mode 100644
index 00000000..67091954
--- /dev/null
+++ b/src/Core/Exceptions/GregPluginLoadException.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Core
+/// Zweck: Exception für Fehler beim Laden von Plugins oder Auflösen von Abhängigkeiten.
+/// Maintainer: Wird geworfen bei zyklischen oder fehlenden Abhängigkeiten.
+///
+
+namespace gregCore.Core.Exceptions;
+
+public class GregPluginLoadException : GregCoreException
+{
+ public GregPluginLoadException(string message) : base(message) { }
+ public GregPluginLoadException(string message, Exception inner) : base(message, inner) { }
+}
diff --git a/src/Core/Models/ApiTableVersion.cs b/src/Core/Models/ApiTableVersion.cs
new file mode 100644
index 00000000..22345fa7
--- /dev/null
+++ b/src/Core/Models/ApiTableVersion.cs
@@ -0,0 +1,12 @@
+///
+/// Schicht: Core
+/// Zweck: Enthält die Versionsnummer der GameAPITable für FFI.
+/// Maintainer: Nach jeder ABI-Änderung in GameApiTable.cs muss diese Version erhöht werden.
+///
+
+namespace gregCore.Core.Models;
+
+public static class ApiTableVersion
+{
+ public const int Current = 12;
+}
diff --git a/src/Core/Models/EventPayload.cs b/src/Core/Models/EventPayload.cs
new file mode 100644
index 00000000..7289c33b
--- /dev/null
+++ b/src/Core/Models/EventPayload.cs
@@ -0,0 +1,19 @@
+///
+/// Schicht: Core
+/// Zweck: Datenmodell für Events, die über den IGregEventBus verschickt werden.
+/// Maintainer: Blittable struct wo möglich. IsCancelled ist das einzige mutable Feld.
+///
+
+namespace gregCore.Core.Models;
+
+// [GREG_SYNC_INSERT_DTOS]
+
+[StructLayout(LayoutKind.Sequential)]
+public record struct EventPayload
+{
+ public string HookName { get; init; }
+ public DateTime OccurredAtUtc { get; init; }
+ public IReadOnlyDictionary Data { get; init; }
+ public bool IsCancelable { get; init; }
+ public bool IsCancelled { get; set; }
+}
diff --git a/src/Core/Models/HookName.cs b/src/Core/Models/HookName.cs
new file mode 100644
index 00000000..fddd12fa
--- /dev/null
+++ b/src/Core/Models/HookName.cs
@@ -0,0 +1,36 @@
+///
+/// Schicht: Core
+/// Zweck: Repräsentiert einen eindeutigen Hook-Namen.
+/// Maintainer: Format "greg.{Domain}.{Event}".
+///
+
+namespace gregCore.Core.Models;
+
+public readonly record struct HookName
+{
+ public string Domain { get; init; }
+ public string Event { get; init; }
+
+ private readonly string? _full;
+ public string Full => _full ?? $"greg.{Domain}.{Event}";
+
+ public static HookName Parse(string full)
+ {
+ ArgumentNullException.ThrowIfNull(full);
+ var parts = full.Split('.');
+ if (parts.Length >= 3 && parts[0] == "greg")
+ {
+ return new HookName { Domain = parts[1], Event = parts[2], _full = full };
+ }
+ throw new ArgumentException($"Invalid HookName format: {full}");
+ }
+
+ public static HookName Create(string domain, string eventName)
+ {
+ ArgumentNullException.ThrowIfNull(domain);
+ ArgumentNullException.ThrowIfNull(eventName);
+ return new HookName { Domain = domain, Event = eventName, _full = $"greg.{domain}.{eventName}" };
+ }
+
+ public override string ToString() => Full;
+}
diff --git a/src/Core/Models/ModManifest.cs b/src/Core/Models/ModManifest.cs
new file mode 100644
index 00000000..d332d93f
--- /dev/null
+++ b/src/Core/Models/ModManifest.cs
@@ -0,0 +1,16 @@
+///
+/// Schicht: Core
+/// Zweck: Datenmodell für das Manifest eines Mods (mod.json).
+/// Maintainer: Reines DTO, serializer-agnostisch.
+///
+
+namespace gregCore.Core.Models;
+
+public record ModManifest
+{
+ public string Id { get; init; } = string.Empty;
+ public string Name { get; init; } = string.Empty;
+ public string Version { get; init; } = "1.0.0";
+ public string Author { get; init; } = string.Empty;
+ public IReadOnlyList Dependencies { get; init; } = Array.Empty();
+}
diff --git a/src/Core/Models/PluginInfo.cs b/src/Core/Models/PluginInfo.cs
new file mode 100644
index 00000000..312f2b6b
--- /dev/null
+++ b/src/Core/Models/PluginInfo.cs
@@ -0,0 +1,14 @@
+///
+/// Schicht: Core
+/// Zweck: Datenmodell für die Metadaten eines geladenen Plugins.
+/// Maintainer: Reines DTO, serializer-agnostisch.
+///
+
+namespace gregCore.Core.Models;
+
+public record PluginInfo
+{
+ public string AssemblyPath { get; init; } = string.Empty;
+ public ModManifest Manifest { get; init; } = new();
+ public bool IsNative { get; init; }
+}
diff --git a/src/Core/README.md b/src/Core/README.md
new file mode 100644
index 00000000..648aa6e8
--- /dev/null
+++ b/src/Core/README.md
@@ -0,0 +1,15 @@
+# gregCore Architektur
+
+## Schichten
+Core/ → Framework-Kern, kein Unity-Coupling, vollständig testbar
+Infrastructure/ → Implementierungen, kennt MelonLoader/Win32/Mono
+GameLayer/ → IL2CPP + Harmony, nur Daten-Extraktion + Dispatch
+PublicApi/ → Was Modder nutzen dürfen
+
+## Goldene Regeln
+1. Patches haben KEINE Business-Logic
+2. GregCoreLoader hat MAX 50 Zeilen
+3. GameAPITable: Neue Felder NUR ans Ende
+4. Alle Services via Interface — nie direkt instanziieren
+5. MelonLogger nur in MelonLoggerAdapter
+6. Assembly.LoadFrom VERBOTEN — immer Mono.Cecil
diff --git a/src/Diagnostic/FrameLimiterConfig.cs b/src/Diagnostic/FrameLimiterConfig.cs
new file mode 100644
index 00000000..0f4c3a99
--- /dev/null
+++ b/src/Diagnostic/FrameLimiterConfig.cs
@@ -0,0 +1,24 @@
+namespace greg.Diagnostic;
+
+public sealed class FrameLimiterConfig
+{
+ public bool Enabled { get; set; } = true;
+ public FpsProfile Menu { get; set; } = new() { TargetFps = 30, VSync = 0 };
+ public FpsProfile Gameplay { get; set; } = new() { TargetFps = 144, VSync = 0 };
+ public AfkProfile Afk { get; set; } = new();
+ public FpsProfile Minimized { get; set; } = new() { TargetFps = 5, VSync = 0 };
+ public FpsProfile Background { get; set; } = new() { TargetFps = 20, VSync = 0 };
+}
+
+public class FpsProfile
+{
+ public int TargetFps { get; set; } = 60;
+ public int VSync { get; set; } = 0;
+}
+
+public sealed class AfkProfile : FpsProfile
+{
+ public bool Enabled { get; set; } = true;
+ public float AfkAfterSeconds { get; set; } = 60f;
+ public AfkProfile() { TargetFps = 15; }
+}
\ No newline at end of file
diff --git a/src/Diagnostic/GregFrameLimiterService.cs b/src/Diagnostic/GregFrameLimiterService.cs
new file mode 100644
index 00000000..2611bd62
--- /dev/null
+++ b/src/Diagnostic/GregFrameLimiterService.cs
@@ -0,0 +1,150 @@
+using System;
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+namespace greg.Diagnostic;
+
+public sealed class GregFrameLimiterService
+{
+ public static GregFrameLimiterService Instance { get; private set; } = null!;
+
+ public enum GameState { Unknown, Menu, Gameplay, Loading }
+ public string CurrentStateName => _currentState.ToString();
+
+ private GameState _currentState = GameState.Unknown;
+ private bool _isFocused = true;
+ private bool _isMinimized = false;
+ private bool _isAfk = false;
+ private float _lastInputTime = 0f;
+ private int _frame = 0;
+
+ private FrameLimiterConfig? _cfg;
+
+ public void Initialize(FrameLimiterConfig cfg)
+ {
+ Instance = this;
+ _cfg = cfg;
+
+ if (cfg == null || !cfg.Enabled)
+ {
+ MelonLogger.Msg("[FrameLimiter] Disabled via config.");
+ return;
+ }
+
+ SetState(GameState.Menu);
+ MelonLogger.Msg("[FrameLimiter] Initialized. Menu limit active.");
+ }
+
+ public void SetState(GameState state)
+ {
+ if (_currentState == state) return;
+ _currentState = state;
+ ApplyCurrentLimit();
+ }
+
+ public void OnFocusChanged(bool focused)
+ {
+ _isFocused = focused;
+ ApplyCurrentLimit();
+ }
+
+ public void OnMinimizeChanged(bool minimized)
+ {
+ _isMinimized = minimized;
+ ApplyCurrentLimit();
+ }
+
+ public void Tick()
+ {
+ if (_cfg == null || !_cfg.Enabled) return;
+
+ bool anyInput = false;
+ try
+ {
+ if (Keyboard.current != null)
+ {
+ anyInput = Keyboard.current.anyKey.isPressed;
+ }
+ if (!anyInput && Mouse.current != null)
+ {
+ anyInput = Mouse.current.delta.ReadValue().sqrMagnitude > 0.01f;
+ }
+ }
+ catch { }
+
+ if (anyInput)
+ {
+ _lastInputTime = Time.realtimeSinceStartup;
+ if (_isAfk)
+ {
+ _isAfk = false;
+ ApplyCurrentLimit();
+ MelonLogger.Msg("[FrameLimiter] AFK ended — restoring limit.");
+ }
+ }
+ else if (!_isAfk
+ && _cfg?.Afk?.Enabled == true
+ && _currentState == GameState.Gameplay
+ && (Time.realtimeSinceStartup - _lastInputTime) > _cfg.Afk.AfkAfterSeconds)
+ {
+ _isAfk = true;
+ ApplyCurrentLimit();
+ MelonLogger.Msg("[FrameLimiter] AFK detected — reducing FPS.");
+ }
+ }
+
+ private void ApplyCurrentLimit()
+ {
+ if (_cfg == null || !_cfg.Enabled) return;
+
+ int targetFps;
+ int vSync;
+ string reason;
+
+ if (_isMinimized)
+ {
+ targetFps = _cfg.Minimized.TargetFps;
+ vSync = _cfg.Minimized.VSync;
+ reason = "minimized";
+ }
+ else if (!_isFocused)
+ {
+ targetFps = _cfg.Background.TargetFps;
+ vSync = _cfg.Background.VSync;
+ reason = "background";
+ }
+ else if (_isAfk)
+ {
+ targetFps = _cfg.Afk.TargetFps;
+ vSync = _cfg.Afk.VSync;
+ reason = "afk";
+ }
+ else
+ {
+ (targetFps, vSync, reason) = _currentState switch
+ {
+ GameState.Menu => (_cfg.Menu.TargetFps, _cfg.Menu.VSync, "menu"),
+ GameState.Loading => (_cfg.Menu.TargetFps, _cfg.Menu.VSync, "loading"),
+ GameState.Gameplay => (_cfg.Gameplay.TargetFps, _cfg.Gameplay.VSync, "gameplay"),
+ _ => (_cfg.Menu.TargetFps, _cfg.Menu.VSync, "unknown"),
+ };
+ }
+
+ try
+ {
+ if (Application.targetFrameRate == targetFps
+ && QualitySettings.vSyncCount == vSync)
+ return;
+
+ Application.targetFrameRate = targetFps;
+ QualitySettings.vSyncCount = vSync;
+
+ MelonLogger.Msg($"[FrameLimiter] {reason} → targetFPS={targetFps} vSync={vSync}");
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[FrameLimiter] ApplyCurrentLimit failed: {ex.Message}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Diagnostic/GregPerfConfig.cs b/src/Diagnostic/GregPerfConfig.cs
new file mode 100644
index 00000000..8c984a77
--- /dev/null
+++ b/src/Diagnostic/GregPerfConfig.cs
@@ -0,0 +1,46 @@
+using System.Text.Json.Serialization;
+
+namespace greg.Diagnostic;
+
+public sealed class GregPerfConfig
+{
+ public static GregPerfConfig Instance { get; set; } = new();
+
+ public bool FrameCapEnabled { get; set; } = true;
+ public int MenuFps { get; set; } = 30;
+ public int GameplayFps { get; set; } = 144;
+ public int BackgroundFps { get; set; } = 20;
+ public int AfkFps { get; set; } = 15;
+ public bool AfkEnabled { get; set; } = true;
+ public float AfkSeconds { get; set; } = 60f;
+ public int MaxAllowedFps { get; set; } = 240;
+
+ [JsonIgnore]
+ public int CurrentTarget { get; set; } = 30;
+
+ public bool ThreadingEnabled { get; set; } = true;
+ public int PhysicalCores { get; set; } = 0;
+
+ public bool GcOptEnabled { get; set; } = true;
+ public int GcTriggerMb { get; set; } = 256;
+ public bool IncrementalGc { get; set; } = true;
+
+ public bool RenderOptEnabled { get; set; } = true;
+ public bool ReduceShadows { get; set; } = true;
+ public float ShadowDistanceM { get; set; } = 50f;
+ public int ShadowCascades { get; set; } = 2;
+ public bool AggressiveLod { get; set; } = true;
+ public float LodBias { get; set; } = 1.0f;
+ public int MaxLodLevel { get; set; } = 0;
+ public bool LimitPixelLights { get; set; } = true;
+ public int MaxPixelLights { get; set; } = 2;
+ public bool ReduceTextureQuality { get; set; } = false;
+ public int TextureMipMapLimit { get; set; } = 0;
+ public bool DisableSoftParticles { get; set; } = true;
+ public bool DisableHeavyPostProcessing { get; set; } = true;
+ public bool DisableMotionBlur { get; set; } = true;
+ public bool DisableBloom { get; set; } = false;
+ public bool DisableDoF { get; set; } = true;
+ public bool DisableAO { get; set; } = false;
+ public bool DisableSSR { get; set; } = true;
+}
\ No newline at end of file
diff --git a/src/Diagnostic/GregPerformanceHud.cs b/src/Diagnostic/GregPerformanceHud.cs
new file mode 100644
index 00000000..793ff01a
--- /dev/null
+++ b/src/Diagnostic/GregPerformanceHud.cs
@@ -0,0 +1,48 @@
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.InputSystem;
+
+namespace greg.Diagnostic;
+
+public sealed class GregPerformanceHud : MelonMod
+{
+ private bool _visible = false;
+ private string _displayText = "";
+ private float _updateTimer = 0f;
+
+ public override void OnUpdate()
+ {
+ try
+ {
+ if (Keyboard.current?.f9Key?.wasPressedThisFrame == true)
+ _visible = !_visible;
+ }
+ catch { }
+
+ if (!_visible) return;
+
+ _updateTimer += Time.unscaledDeltaTime;
+ if (_updateTimer < 1f) return;
+ _updateTimer = 0f;
+
+ float currentFps = Time.unscaledDeltaTime > 0 ? 1f / Time.unscaledDeltaTime : 0f;
+ float targetFps = Application.targetFrameRate;
+ string state = GregFrameLimiterService.Instance?.CurrentStateName ?? "?";
+ long ramMb = System.GC.GetTotalMemory(false) / 1024 / 1024;
+ int gpuMb = SystemInfo.graphicsMemorySize;
+
+ _displayText =
+ $"gregCore Performance\n" +
+ $"FPS: {targetFps}/{currentFps:F0}\n" +
+ $"State: {state}\n" +
+ $"RAM: {ramMb}MB\n" +
+ $"GPU: {gpuMb}MB\n" +
+ $"[F9] hide";
+ }
+
+ public override void OnGUI()
+ {
+ if (!_visible) return;
+ GUI.Box(new Rect(10, 10, 200, 160), _displayText);
+ }
+}
\ No newline at end of file
diff --git a/src/Diagnostic/GregPerformanceOptimizer.cs b/src/Diagnostic/GregPerformanceOptimizer.cs
new file mode 100644
index 00000000..495362a2
--- /dev/null
+++ b/src/Diagnostic/GregPerformanceOptimizer.cs
@@ -0,0 +1,461 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using HarmonyLib;
+using Il2Cpp;
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.AI;
+using UnityEngine.Rendering;
+using UnityEngine.Rendering.HighDefinition;
+
+namespace greg.Diagnostic;
+
+// ── Main-thread dispatch queue ─────────────────────────────────────────────
+internal static class MainThreadDispatch
+{
+ private static readonly ConcurrentQueue _queue = new();
+ public static void Enqueue(Action action) => _queue.Enqueue(action);
+ public static void Drain()
+ {
+ while (_queue.TryDequeue(out var action))
+ {
+ try { action(); }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] MainThreadDispatch error: {ex.Message}"); }
+ }
+ }
+}
+
+public static class GregPerformanceOptimizer
+{
+ // ── Preferences ───────────────────────────────────────────────────────
+ public static MelonPreferences_Entry CanvasThrottleEnabled;
+ public static MelonPreferences_Entry CanvasUpdateInterval;
+
+ public static MelonPreferences_Entry IndicatorThrottleEnabled;
+ public static MelonPreferences_Entry IndicatorUpdateInterval;
+
+ public static MelonPreferences_Entry ThrottlePulsating;
+ public static MelonPreferences_Entry PulsatingUpdateInterval;
+
+ public static MelonPreferences_Entry RouteEvalCooldown;
+ public static MelonPreferences_Entry AsyncRouteEval;
+ public static MelonPreferences_Entry AutoSaveMinutes;
+
+ // NPCs
+ public static MelonPreferences_Entry NpcEnabled;
+ public static MelonPreferences_Entry NpcThrottleDistance;
+ public static MelonPreferences_Entry NpcThrottleInterval;
+
+ // Memory
+ public static MelonPreferences_Entry MemoryEnabled;
+ public static MelonPreferences_Entry TextureMipmapLimit;
+ public static MelonPreferences_Entry StreamingMipmaps;
+ public static MelonPreferences_Entry StreamingMipmapsBudgetMB;
+ public static MelonPreferences_Entry PeriodicGCIntervalSeconds;
+
+ // Graphics
+ public static MelonPreferences_Entry GraphicsEnabled;
+ public static MelonPreferences_Entry ShadowDistance;
+ public static MelonPreferences_Entry CameraFarClip;
+ public static MelonPreferences_Entry LodBias;
+ public static MelonPreferences_Entry DisableSSAO;
+ public static MelonPreferences_Entry DisableContactShadows;
+ public static MelonPreferences_Entry DisableGlobalIllumination;
+ public static MelonPreferences_Entry DisableSSR;
+ public static MelonPreferences_Entry DisableVolumetricFog;
+
+ // ── OLD TWEAKS ────────────────────────────────────────────────────────
+ public static MelonPreferences_Entry TargetFPS;
+
+ public static void ApplySettings()
+ {
+ Initialize();
+ }
+
+ public static void Initialize()
+ {
+ var cat = MelonPreferences.CreateCategory("PerfFix");
+
+ TargetFPS = cat.CreateEntry("TargetFPS", 120, "TargetFPS", "Target framerate. 0 = uncap.");
+
+ CanvasThrottleEnabled = cat.CreateEntry("CanvasThrottle", true, "CanvasThrottle",
+ "Throttle WorldCanvasCuller.Update() to CanvasUpdateInterval Hz instead of every frame.");
+
+ CanvasUpdateInterval = cat.CreateEntry("CanvasUpdateInterval", 0.1f, "CanvasUpdateInterval",
+ "Seconds between WorldCanvasCuller distance checks (0.1 = 10 Hz). Vanilla runs at full framerate.");
+
+ IndicatorThrottleEnabled = cat.CreateEntry("IndicatorThrottle", true, "IndicatorThrottle",
+ "Throttle PositionIndicator.Update() (warning/error triangles) — re-projects world→screen every frame.");
+
+ IndicatorUpdateInterval = cat.CreateEntry("IndicatorUpdateInterval", 0.1f, "IndicatorUpdateInterval",
+ "Seconds between PositionIndicator screen-position updates (0.1 = 10 Hz).");
+
+ ThrottlePulsating = cat.CreateEntry("ThrottlePulsating", true, "ThrottlePulsating",
+ "Throttle PulsatingImageColor and PulsatingText Update() calls.");
+
+ PulsatingUpdateInterval = cat.CreateEntry("PulsatingUpdateInterval", 0.05f, "PulsatingUpdateInterval",
+ "Seconds between pulsating effect updates (0.05 = 20 Hz).");
+
+ RouteEvalCooldown = cat.CreateEntry("RouteEvalCooldown", 2.0f, "RouteEvalCooldown",
+ "Minimum seconds between full ECS cable-route re-evaluations.");
+
+ AsyncRouteEval = cat.CreateEntry("AsyncRouteEval", false, "AsyncRouteEval",
+ "EXPERIMENTAL (DISABLED!): Run EvaluateAllRoutes on a background thread. CAUSES IL2CPP CRASHES.");
+
+ AutoSaveMinutes = cat.CreateEntry("AutoSaveMinutes", 10.0f, "AutoSaveMinutes",
+ "Minutes between auto-saves. Large saves cause frame hitches. Set to 0 to disable.");
+
+ GraphicsEnabled = cat.CreateEntry("GraphicsEnabled", true, "GraphicsEnabled",
+ "Master toggle for the graphics fixes below.");
+
+ ShadowDistance = cat.CreateEntry("ShadowDistance", 20f, "ShadowDistance",
+ "HDRP shadow cull distance in metres. Vanilla is ~150 m.");
+
+ CameraFarClip = cat.CreateEntry("CameraFarClip", 80f, "CameraFarClip",
+ "Player camera far clip plane in metres. Vanilla is ~1000 m.");
+
+ LodBias = cat.CreateEntry("LodBias", 0.4f, "LodBias",
+ "Unity LOD bias. Lower = switch to cheaper LOD meshes sooner.");
+
+ DisableSSAO = cat.CreateEntry("DisableSSAO", true, "DisableSSAO",
+ "Disable HDRP Screen-Space Ambient Occlusion.");
+
+ DisableContactShadows = cat.CreateEntry("DisableContactShadows", true, "DisableContactShadows",
+ "Disable HDRP Contact Shadows.");
+
+ DisableGlobalIllumination = cat.CreateEntry("DisableGlobalIllumination", true, "DisableGlobalIllumination",
+ "Disable HDRP Screen-Space Global Illumination.");
+
+ DisableSSR = cat.CreateEntry("DisableSSR", true, "DisableSSR",
+ "Disable HDRP Screen-Space Reflections on floors/racks.");
+
+ DisableVolumetricFog = cat.CreateEntry("DisableVolumetricFog", false, "DisableVolumetricFog",
+ "Disable HDRP Volumetric Fog.");
+
+ NpcEnabled = cat.CreateEntry("NpcEnabled", true, "NpcEnabled",
+ "Master toggle for NPC/Technician optimizations.");
+
+ NpcThrottleDistance = cat.CreateEntry("NpcThrottleDistance", 15f, "NpcThrottleDistance",
+ "Distance in metres beyond which Technician FixedUpdate and LateUpdate are throttled.");
+
+ NpcThrottleInterval = cat.CreateEntry("NpcThrottleInterval", 0.2f, "NpcThrottleInterval",
+ "Seconds between FixedUpdate/LateUpdate ticks for distant technicians.");
+
+ MemoryEnabled = cat.CreateEntry("MemoryEnabled", true, "MemoryEnabled",
+ "Master toggle for memory reduction settings below.");
+
+ TextureMipmapLimit = cat.CreateEntry("TextureMipmapLimit", 1, "TextureMipmapLimit",
+ "Global texture mipmap skip level. 0=full resolution, 1=half resolution, 2=quarter resolution.");
+
+ StreamingMipmaps = cat.CreateEntry("StreamingMipmaps", true, "StreamingMipmaps",
+ "Enable Unity mipmap streaming.");
+
+ StreamingMipmapsBudgetMB = cat.CreateEntry("StreamingMipmapsBudgetMB", 512f, "StreamingMipmapsBudgetMB",
+ "Memory budget for streamed mipmaps in megabytes.");
+
+ PeriodicGCIntervalSeconds = cat.CreateEntry("PeriodicGCIntervalSeconds", 0f, "PeriodicGCIntervalSeconds",
+ "Seconds between forced garbage collection passes. Set to 0 to disable. (WARNING: Enabled GC has been known to crash Il2CppInterop)");
+
+ MelonLogger.Msg($"[gregCore.PerfFix] Loaded. " +
+ $"Canvas={CanvasUpdateInterval.Value}s " +
+ $"RouteEval={RouteEvalCooldown.Value}s " +
+ $"AutoSave={AutoSaveMinutes.Value}min " +
+ $"FarClip={CameraFarClip.Value}m");
+
+ ApplyMemorySettings();
+
+ // Base Performance Tweaks
+ int targetFPS = TargetFPS.Value > 0 ? TargetFPS.Value : Screen.currentResolution.refreshRate;
+ QualitySettings.vSyncCount = 0;
+ Application.targetFrameRate = targetFPS > 0 ? targetFPS : 120;
+ }
+
+ private static float _nextGC = 0f;
+
+ public static void OnUpdate()
+ {
+ MainThreadDispatch.Drain();
+
+ float interval = PeriodicGCIntervalSeconds?.Value ?? 0f;
+ if (interval > 0f && Time.realtimeSinceStartup >= _nextGC && _nextGC > 0f)
+ {
+ _nextGC = Time.realtimeSinceStartup + interval;
+ MelonCoroutines.Start(RunPeriodicGC());
+ }
+ }
+
+ private static System.Collections.IEnumerator RunPeriodicGC()
+ {
+ yield return null;
+ // GC forcing removed - Causes Il2CppInterop/Unity Finalizer NullReferenceException
+ MelonLogger.Msg($"[gregCore.PerfFix] Periodic GC skipped to prevent Il2CppInterop crashes.");
+ }
+
+ public static void OnSceneLoaded()
+ {
+ ApplySimulationFixes();
+ MelonCoroutines.Start(ApplyGraphicsFixesNextFrame());
+ if (PeriodicGCIntervalSeconds != null)
+ {
+ float interval = PeriodicGCIntervalSeconds.Value;
+ _nextGC = interval > 0f ? Time.realtimeSinceStartup + interval : 0f;
+ }
+ }
+
+ private static void ApplySimulationFixes()
+ {
+ try
+ {
+ var wis = WaypointInitializationSystem.Instance;
+ if (wis != null)
+ {
+ wis.SetEvaluationCooldown(RouteEvalCooldown.Value);
+ MelonLogger.Msg($"[gregCore.PerfFix] RouteEvalCooldown → {RouteEvalCooldown.Value}s");
+ }
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] RouteEvalCooldown: {ex.Message}"); }
+
+ try
+ {
+ var mgr = MainGameManager.instance;
+ if (mgr != null)
+ {
+ if (AutoSaveMinutes.Value <= 0f)
+ {
+ mgr.SetAutoSaveEnabled(false);
+ MelonLogger.Msg("[gregCore.PerfFix] AutoSave disabled.");
+ }
+ else
+ {
+ mgr.SetAutoSaveEnabled(true);
+ mgr.SetAutoSaveInterval(AutoSaveMinutes.Value);
+ MelonLogger.Msg($"[gregCore.PerfFix] AutoSave interval → {AutoSaveMinutes.Value} min");
+ }
+ }
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] AutoSave: {ex.Message}"); }
+ }
+
+ private static System.Collections.IEnumerator ApplyGraphicsFixesNextFrame()
+ {
+ yield return null;
+ ApplyGraphicsFixes();
+ }
+
+ private static void ApplyMemorySettings()
+ {
+ if (!MemoryEnabled.Value) return;
+ try
+ {
+ QualitySettings.globalTextureMipmapLimit = TextureMipmapLimit.Value;
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] TextureMipmapLimit: {ex.Message}"); }
+
+ try
+ {
+ QualitySettings.streamingMipmapsActive = StreamingMipmaps.Value;
+ if (StreamingMipmaps.Value)
+ {
+ QualitySettings.streamingMipmapsMemoryBudget = StreamingMipmapsBudgetMB.Value;
+ }
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] StreamingMipmaps: {ex.Message}"); }
+ }
+
+ public static void ApplyGraphicsFixes()
+ {
+ QualitySettings.lodBias = LodBias.Value;
+
+ if (!GraphicsEnabled.Value) return;
+
+ try
+ {
+ var cam = MainGameManager.instance?.playerCamera;
+ if (cam != null)
+ {
+ cam.farClipPlane = CameraFarClip.Value;
+ }
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] CameraFarClip: {ex.Message}"); }
+
+ try
+ {
+ var sg = SettingsSingleton.instance?.settingsGraphics;
+ if (sg != null)
+ {
+ sg.SetShadowDistance(ShadowDistance.Value);
+ }
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] ShadowDistance: {ex.Message}"); }
+
+ try
+ {
+ var sg = SettingsSingleton.instance?.settingsGraphics;
+ if (sg == null) return;
+ var profile = sg.volumeProfile;
+ if (profile == null) return;
+
+ int disabled = 0;
+ if (DisableSSAO.Value && profile.TryGet(out var ssao))
+ { ssao.active = false; disabled++; }
+ if (DisableContactShadows.Value && profile.TryGet(out var cs))
+ { cs.active = false; disabled++; }
+ if (DisableGlobalIllumination.Value && profile.TryGet(out var gi))
+ { gi.active = false; disabled++; }
+ if (DisableSSR.Value && profile.TryGet(out var ssr))
+ { ssr.active = false; disabled++; }
+ if (DisableVolumetricFog.Value && profile.TryGet(out var fog))
+ { fog.enableVolumetricFog.overrideState = true; fog.enableVolumetricFog.value = false; disabled++; }
+ }
+ catch (Exception ex) { MelonLogger.Warning($"[gregCore.PerfFix] HDRP volume overrides: {ex.Message}"); }
+ }
+}
+
+// ── WorldCanvasCuller throttle ─────────────────────────────────────────────
+[HarmonyPatch(typeof(WorldCanvasCuller), "Update")]
+internal static class WorldCanvasCullerPatch
+{
+ private static readonly Dictionary _nextRun = new();
+ static bool Prefix(WorldCanvasCuller __instance)
+ {
+ if (GregPerformanceOptimizer.CanvasThrottleEnabled == null || !GregPerformanceOptimizer.CanvasThrottleEnabled.Value) return true;
+ float now = Time.time;
+ var ptr = __instance.Pointer;
+ if (_nextRun.TryGetValue(ptr, out float next) && now < next) return false;
+ _nextRun[ptr] = now + GregPerformanceOptimizer.CanvasUpdateInterval.Value;
+ return true;
+ }
+}
+
+// ── PositionIndicator throttle ─────────────────────────────────────────────
+[HarmonyPatch(typeof(PositionIndicator), "Update")]
+internal static class PositionIndicatorPatch
+{
+ private static readonly Dictionary _nextRun = new();
+ static bool Prefix(PositionIndicator __instance)
+ {
+ if (GregPerformanceOptimizer.IndicatorThrottleEnabled == null || !GregPerformanceOptimizer.IndicatorThrottleEnabled.Value) return true;
+ float now = Time.time;
+ var ptr = __instance.Pointer;
+ if (_nextRun.TryGetValue(ptr, out float next) && now < next) return false;
+ _nextRun[ptr] = now + GregPerformanceOptimizer.IndicatorUpdateInterval.Value;
+ return true;
+ }
+}
+
+// ── PulsatingImageColor throttle ───────────────────────────────────────────
+[HarmonyPatch(typeof(PulsatingImageColor), "Update")]
+internal static class PulsatingImageColorPatch
+{
+ private static readonly Dictionary _nextRun = new();
+ static bool Prefix(PulsatingImageColor __instance)
+ {
+ if (GregPerformanceOptimizer.ThrottlePulsating == null || !GregPerformanceOptimizer.ThrottlePulsating.Value) return true;
+ float now = Time.time;
+ var ptr = __instance.Pointer;
+ if (_nextRun.TryGetValue(ptr, out float next) && now < next) return false;
+ _nextRun[ptr] = now + GregPerformanceOptimizer.PulsatingUpdateInterval.Value;
+ return true;
+ }
+}
+
+// ── PulsatingText throttle ─────────────────────────────────────────────────
+[HarmonyPatch(typeof(PulsatingText), "Update")]
+internal static class PulsatingTextPatch
+{
+ private static readonly Dictionary _nextRun = new();
+ static bool Prefix(PulsatingText __instance)
+ {
+ if (GregPerformanceOptimizer.ThrottlePulsating == null || !GregPerformanceOptimizer.ThrottlePulsating.Value) return true;
+ float now = Time.time;
+ var ptr = __instance.Pointer;
+ if (_nextRun.TryGetValue(ptr, out float next) && now < next) return false;
+ _nextRun[ptr] = now + GregPerformanceOptimizer.PulsatingUpdateInterval.Value;
+ return true;
+ }
+}
+
+// ── Async EvaluateAllRoutes ────────────────────────────────────────────────
+[HarmonyPatch(typeof(WaypointInitializationSystem), "EvaluateAllRoutes")]
+internal static class AsyncRouteEvalPatch
+{
+ [ThreadStatic]
+ private static bool _allowPassthrough;
+
+ private static volatile bool _evaluationInFlight;
+
+ static bool Prefix(WaypointInitializationSystem __instance)
+ {
+ // ── KILLS IL2CPP GC BECAUSE UNMANAGED THREAD IS NOT ATTACHED ──
+ // Disabled fully
+ return true;
+
+ /*
+ if (GregPerformanceOptimizer.AsyncRouteEval == null || !GregPerformanceOptimizer.AsyncRouteEval.Value) return true;
+
+ if (_allowPassthrough) return true;
+
+ if (_evaluationInFlight) return false;
+
+ _evaluationInFlight = true;
+ var wis = __instance;
+
+ Task.Run(() =>
+ {
+ _allowPassthrough = true;
+ try
+ {
+ wis.EvaluateAllRoutes();
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[gregCore.PerfFix] Async EvaluateAllRoutes threw: {ex.GetType().Name}: {ex.Message}. " +
+ "Falling back to main-thread execution.");
+
+ MainThreadDispatch.Enqueue(() =>
+ {
+ _allowPassthrough = true;
+ try { wis.EvaluateAllRoutes(); }
+ catch (Exception ex2) { MelonLogger.Warning($"[gregCore.PerfFix] Sync fallback also failed: {ex2.Message}"); }
+ finally { _allowPassthrough = false; }
+ });
+ }
+ finally
+ {
+ _allowPassthrough = false;
+ _evaluationInFlight = false;
+ }
+ });
+
+ return false;
+ */
+ }
+}
+
+// ── Technician Animator culling ────────────────────────────────────────────
+[HarmonyPatch(typeof(TechnicianManager), "AddTechnician")]
+internal static class TechnicianAnimatorCullingPatch
+{
+ static void Postfix(Technician technician)
+ {
+ if (GregPerformanceOptimizer.NpcEnabled == null || !GregPerformanceOptimizer.NpcEnabled.Value || technician == null) return;
+ try
+ {
+ var anim = technician.GetComponent();
+ if (anim != null)
+ anim.cullingMode = AnimatorCullingMode.CullCompletely;
+
+ var agent = technician.GetComponent();
+ if (agent != null)
+ agent.obstacleAvoidanceType = ObstacleAvoidanceType.LowQualityObstacleAvoidance;
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[gregCore.PerfFix] TechnicianAnimatorCulling: {ex.Message}");
+ }
+ }
+}
+
+// Removed Technician FixedUpdate, LateUpdate, and Footstep update patches as methods are stripped and cause Harmony init failures
diff --git a/src/Diagnostic/GregRenderOptimizer.cs b/src/Diagnostic/GregRenderOptimizer.cs
new file mode 100644
index 00000000..bd98f9dd
--- /dev/null
+++ b/src/Diagnostic/GregRenderOptimizer.cs
@@ -0,0 +1,77 @@
+using System;
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+namespace greg.Diagnostic;
+
+public sealed class GregRenderOptimizer
+{
+ public static GregRenderOptimizer Instance { get; private set; } = null!;
+
+ public void Initialize(RenderOptimizerConfig cfg)
+ {
+ Instance = this;
+ if (cfg == null || !cfg.Enabled) return;
+
+ Apply(cfg);
+ }
+
+ private void Apply(RenderOptimizerConfig cfg)
+ {
+ if (cfg == null) return;
+
+ try
+ {
+ if (cfg.ReduceShadowDistance)
+ {
+ QualitySettings.shadowDistance = cfg.ShadowDistance;
+ QualitySettings.shadowCascades = cfg.ShadowCascades;
+ Log($"Shadows: distance={cfg.ShadowDistance} cascades={cfg.ShadowCascades}");
+ }
+
+ if (cfg.AdjustLodBias)
+ {
+ QualitySettings.lodBias = cfg.LodBias;
+ Log($"LOD bias: {cfg.LodBias}");
+ }
+
+ if (cfg.LimitPixelLights)
+ {
+ QualitySettings.pixelLightCount = cfg.PixelLightCount;
+ Log($"Pixel lights: {cfg.PixelLightCount}");
+ }
+
+ if (cfg.SetAnisotropicFiltering)
+ {
+ QualitySettings.anisotropicFiltering =
+ cfg.AnisotropicFiltering ? AnisotropicFiltering.Enable
+ : AnisotropicFiltering.Disable;
+ Log($"Anisotropic: {cfg.AnisotropicFiltering}");
+ }
+
+ if (cfg.SetAntiAliasing)
+ {
+ QualitySettings.antiAliasing = cfg.AntiAliasingLevel;
+ Log($"AA: {cfg.AntiAliasingLevel}x MSAA");
+ }
+
+ if (cfg.DisableSoftParticles)
+ {
+ QualitySettings.softParticles = false;
+ Log("Soft particles: disabled");
+ }
+
+ QualitySettings.vSyncCount = 0;
+
+ Log("Render optimizations applied.");
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[RenderOptimizer] Apply failed: {ex.Message}");
+ }
+ }
+
+ private static void Log(string msg) =>
+ MelonLogger.Msg($"[RenderOptimizer] {msg}");
+}
\ No newline at end of file
diff --git a/src/Diagnostic/GregTelemetryService.cs b/src/Diagnostic/GregTelemetryService.cs
new file mode 100644
index 00000000..062b5a6c
--- /dev/null
+++ b/src/Diagnostic/GregTelemetryService.cs
@@ -0,0 +1,157 @@
+using System;
+using System.IO;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using MelonLoader;
+using UnityEngine;
+
+namespace greg.Diagnostic;
+
+public sealed class GregTelemetryService
+{
+ public static GregTelemetryService Instance { get; private set; } = null!;
+
+ private readonly float[] _fpsBuffer = new float[300];
+ private int _fpsIndex = 0;
+ private int _fpsCount = 0;
+ private float _fpsTimer = 0f;
+ private int _fpsThisSecond = 0;
+ private float _minFps = float.MaxValue;
+ private float _maxFps = float.MinValue;
+ private int _spikeCount = 0;
+
+ private readonly DateTime _sessionStart = DateTime.UtcNow;
+ private int _errorCount = 0;
+
+ private TelemetryConfig? _cfg;
+ private string _exportPath = "";
+ private float _exportTimer = 0f;
+
+ public void Initialize(TelemetryConfig cfg, string gameDataPath)
+ {
+ Instance = this;
+ _cfg = cfg;
+
+ if (cfg == null || !cfg.Enabled)
+ {
+ MelonLogger.Msg("[Telemetry] Disabled via config.");
+ return;
+ }
+
+ _exportPath = Path.Combine(gameDataPath, "gregCore_telemetry");
+ try
+ {
+ Directory.CreateDirectory(_exportPath);
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[Telemetry] Could not create export path: {ex.Message}");
+ return;
+ }
+
+ MelonLogger.Msg($"[Telemetry] Initialized. Export every {cfg.ExportIntervalSeconds}s → {_exportPath}");
+ }
+
+ public void Tick()
+ {
+ if (_cfg == null || !_cfg.Enabled) return;
+
+ float dt = Time.unscaledDeltaTime;
+ float fps = dt > 0 ? 1f / dt : 0f;
+
+ _fpsBuffer[_fpsIndex % _fpsBuffer.Length] = fps;
+ _fpsIndex++;
+ _fpsCount = Math.Min(_fpsCount + 1, _fpsBuffer.Length);
+
+ if (fps < _minFps) _minFps = fps;
+ if (fps > _maxFps) _maxFps = fps;
+ if (dt > 0.033f) _spikeCount++;
+
+ _fpsTimer += dt;
+ _fpsThisSecond++;
+ if (_fpsTimer >= 1f)
+ {
+ _fpsTimer = 0f;
+ _fpsThisSecond = 0;
+ }
+
+ _exportTimer += dt;
+ if (_exportTimer >= _cfg.ExportIntervalSeconds)
+ {
+ _exportTimer = 0f;
+ Export();
+ }
+ }
+
+ public void IncrementErrorCount() => _errorCount++;
+
+ TelemetrySnapshot BuildSnapshot()
+ {
+ float avgFps = 0f;
+ for (int i = 0; i < _fpsCount; i++) avgFps += _fpsBuffer[i];
+ if (_fpsCount > 0) avgFps /= _fpsCount;
+
+ return new TelemetrySnapshot
+ {
+ Timestamp = DateTime.UtcNow,
+ SessionSeconds = (float)(DateTime.UtcNow - _sessionStart).TotalSeconds,
+ GregCoreVersion = greg.Core.gregReleaseVersion.Current,
+ MelonLoaderVersion = MelonLoader.Properties.BuildInfo.Version,
+
+ FpsCurrent = _fpsBuffer[(_fpsIndex - 1 + _fpsBuffer.Length) % _fpsBuffer.Length],
+ FpsAverage = MathF.Round(avgFps, 1),
+ FpsMin = _minFps < float.MaxValue ? _minFps : 0f,
+ FpsMax = _maxFps > float.MinValue ? _maxFps : 0f,
+ FrameSpikeCount = _spikeCount,
+ TargetFps = Application.targetFrameRate,
+
+ RamUsedMb = MathF.Round(GC.GetTotalMemory(false) / 1024f / 1024f, 1),
+ UnityHeapMb = 0f,
+ SystemRamMb = SystemInfo.systemMemorySize,
+ GpuMemoryMb = SystemInfo.graphicsMemorySize,
+
+ GpuName = SystemInfo.graphicsDeviceName,
+ CpuName = SystemInfo.processorType,
+ CpuCores = SystemInfo.processorCount,
+
+ GameState = GregFrameLimiterService.Instance?.CurrentStateName ?? "unknown",
+
+ ErrorCount = _errorCount,
+ };
+ }
+
+ void Export()
+ {
+ if (string.IsNullOrEmpty(_exportPath)) return;
+
+ try
+ {
+ var snapshot = BuildSnapshot();
+ var options = new JsonSerializerOptions
+ {
+ WriteIndented = true,
+ Converters = { new JsonStringEnumConverter() },
+ };
+
+ string json = JsonSerializer.Serialize(snapshot, options);
+ string latest = Path.Combine(_exportPath, "latest.json");
+
+ File.WriteAllText(latest, json);
+
+ if (_cfg?.ArchiveSnapshots == true)
+ {
+ string timestamped = Path.Combine(_exportPath, $"telemetry_{DateTime.UtcNow:yyyyMMdd_HHmmss}.json");
+ File.WriteAllText(timestamped, json);
+ }
+
+ if (_cfg?.LogToConsole == true)
+ {
+ MelonLogger.Msg($"[Telemetry] FPS={snapshot.FpsCurrent:F0} avg={snapshot.FpsAverage} RAM={snapshot.RamUsedMb}MB GPU={snapshot.GpuMemoryMb}MB");
+ }
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[Telemetry] Export failed: {ex.Message}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Diagnostic/RenderOptimizerConfig.cs b/src/Diagnostic/RenderOptimizerConfig.cs
new file mode 100644
index 00000000..8bb7ca81
--- /dev/null
+++ b/src/Diagnostic/RenderOptimizerConfig.cs
@@ -0,0 +1,18 @@
+namespace greg.Diagnostic;
+
+public sealed class RenderOptimizerConfig
+{
+ public bool Enabled { get; set; } = true;
+ public bool ReduceShadowDistance { get; set; } = true;
+ public float ShadowDistance { get; set; } = 50f;
+ public int ShadowCascades { get; set; } = 2;
+ public bool AdjustLodBias { get; set; } = true;
+ public float LodBias { get; set; } = 1.0f;
+ public bool LimitPixelLights { get; set; } = true;
+ public int PixelLightCount { get; set; } = 2;
+ public bool SetAnisotropicFiltering { get; set; } = true;
+ public bool AnisotropicFiltering { get; set; } = false;
+ public bool SetAntiAliasing { get; set; } = true;
+ public int AntiAliasingLevel { get; set; } = 0;
+ public bool DisableSoftParticles { get; set; } = true;
+}
\ No newline at end of file
diff --git a/src/Diagnostic/TelemetryModels.cs b/src/Diagnostic/TelemetryModels.cs
new file mode 100644
index 00000000..cf3d3a88
--- /dev/null
+++ b/src/Diagnostic/TelemetryModels.cs
@@ -0,0 +1,41 @@
+namespace greg.Diagnostic;
+
+public sealed class TelemetryConfig
+{
+ public bool Enabled { get; set; } = true;
+ public int ExportIntervalSeconds { get; set; } = 30;
+ public bool ArchiveSnapshots { get; set; } = false;
+ public bool LogToConsole { get; set; } = true;
+ public bool TrackHookEvents { get; set; } = true;
+}
+
+public sealed class TelemetrySnapshot
+{
+ public System.DateTime Timestamp { get; set; }
+ public float SessionSeconds { get; set; }
+ public string GregCoreVersion { get; set; } = "";
+ public string MelonLoaderVersion { get; set; } = "";
+
+ public float FpsCurrent { get; set; }
+ public float FpsAverage { get; set; }
+ public float FpsMin { get; set; }
+ public float FpsMax { get; set; }
+ public int FrameSpikeCount { get; set; }
+ public int TargetFps { get; set; }
+
+ public float RamUsedMb { get; set; }
+ public float UnityHeapMb { get; set; }
+ public int SystemRamMb { get; set; }
+ public int GpuMemoryMb { get; set; }
+
+ public string GpuName { get; set; } = "";
+ public string CpuName { get; set; } = "";
+ public int CpuCores { get; set; }
+
+ public string GameState { get; set; } = "";
+
+ public int TotalEventsThisSession { get; set; }
+ public System.Collections.Generic.Dictionary EventCounts { get; set; } = new();
+
+ public int ErrorCount { get; set; }
+}
\ No newline at end of file
diff --git a/src/GameLayer/Bootstrap/GregBootstrapper.cs b/src/GameLayer/Bootstrap/GregBootstrapper.cs
new file mode 100644
index 00000000..a4880421
--- /dev/null
+++ b/src/GameLayer/Bootstrap/GregBootstrapper.cs
@@ -0,0 +1,73 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Erstellt und konfiguriert den GregServiceContainer.
+/// Maintainer: Einzige Stelle wo Implementierungen an Interfaces gebunden werden. Validiert den Startup.
+///
+
+using MelonLoader;
+using gregCore.Infrastructure.Logging;
+using gregCore.Infrastructure.Config;
+using gregCore.Infrastructure.Ffi;
+using gregCore.Infrastructure.Plugins;
+using gregCore.Infrastructure.Scripting.Lua;
+using gregCore.Infrastructure.Scripting.Js;
+using gregCore.GameLayer.Hooks;
+
+namespace gregCore.GameLayer.Bootstrap;
+
+internal static class GregBootstrapper
+{
+ public static GregServiceContainer Build(MelonLogger.Instance melonLogger)
+ {
+ var container = new GregServiceContainer();
+ var logger = new MelonLoggerAdapter(melonLogger);
+
+ container.Register(logger);
+ logger.Info("gregCore v1.0.0 Bootstrap gestartet");
+
+ container.Register(new GregEventBus(logger));
+ container.Register(new GregConfigService(logger));
+ container.Register(new GregPersistenceService(logger));
+
+ container.Register(new Win32FfiBridge(logger, container.GetRequired()));
+
+ container.Register("lua", new LuaBridge(logger, container.GetRequired()));
+ container.Register("js", new JsBridge(logger, container.GetRequired()));
+
+ container.Register(new AssemblyScanner());
+ container.Register(new GregPluginRegistry(container.GetRequired(), logger, container.GetRequired()));
+
+ HookIntegration.Install(container.GetRequired(), logger);
+
+ ValidateStartup(container);
+
+ logger.Info("Alle Services registriert");
+
+ return container;
+ }
+
+ private static void ValidateStartup(GregServiceContainer container)
+ {
+ container.GetRequired();
+ container.GetRequired();
+ container.GetRequired();
+
+ var melonVersion = MelonLoader.MelonLoader.Version;
+ if (melonVersion < new Version(0, 6, 0))
+ throw new GregInitException($"MelonLoader >= 0.6.0 erforderlich, gefunden: {melonVersion}");
+
+ var gameRoot = MelonLoader.Utils.MelonEnvironment.GameRootDirectory;
+ if (string.IsNullOrEmpty(gameRoot)) return; // Could be null in tests
+
+ var gameAssembly = Path.Combine(gameRoot, "MelonLoader", "Il2CppAssemblies", "Assembly-CSharp.dll");
+
+ if (!File.Exists(gameAssembly))
+ throw new GregInitException(
+ $"Assembly-CSharp.dll nicht gefunden: {gameAssembly}\n" +
+ "Stelle sicher dass MelonLoader korrekt installiert ist.");
+
+ var pluginDir = Path.Combine(gameRoot, "Mods");
+ if (!Directory.Exists(pluginDir))
+ Directory.CreateDirectory(pluginDir);
+ }
+}
diff --git a/src/GameLayer/Bootstrap/GregCoreLoader.cs b/src/GameLayer/Bootstrap/GregCoreLoader.cs
new file mode 100644
index 00000000..50dceb62
--- /dev/null
+++ b/src/GameLayer/Bootstrap/GregCoreLoader.cs
@@ -0,0 +1,39 @@
+///
+/// Schicht: GameLayer
+/// Zweck: MelonMod Entry Point.
+/// Maintainer: So klein wie möglich halten. Max 50 Zeilen. Kein Business-Logic.
+///
+
+using MelonLoader;
+
+[assembly: MelonInfo(typeof(gregCore.GameLayer.Bootstrap.GregCoreLoader), "gregCore", "1.0.0", "TeamGreg")]
+[assembly: MelonGame("", "Data Center")]
+
+namespace gregCore.GameLayer.Bootstrap;
+
+public sealed class GregCoreLoader : MelonMod
+{
+ private GregServiceContainer? _container;
+ private IGregLogger? _logger;
+
+ public override void OnInitializeMelon()
+ {
+ _container = GregBootstrapper.Build(LoggerInstance);
+ _logger = _container.GetRequired();
+ _container.GetRequired().LoadAll();
+ }
+
+ public override void OnSceneWasLoaded(int buildIndex, string sceneName) =>
+ _container?.GetRequired()
+ .Publish(HookName.Create("lifecycle", "SceneLoaded").Full,
+ EventPayloadBuilder.ForScene(buildIndex, sceneName));
+
+ public override void OnApplicationQuit()
+ {
+ if (_container == null || _logger == null) return;
+
+ _logger.Info("Führe Graceful Shutdown durch...");
+ _container.Dispose();
+ _logger.Info("Shutdown abgeschlossen.");
+ }
+}
diff --git a/src/GameLayer/Bootstrap/GregServiceContainer.cs b/src/GameLayer/Bootstrap/GregServiceContainer.cs
new file mode 100644
index 00000000..22061c51
--- /dev/null
+++ b/src/GameLayer/Bootstrap/GregServiceContainer.cs
@@ -0,0 +1,33 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Minimaler DI-Container für das Framework.
+/// Maintainer: Kein Microsoft.Extensions.DI (zu schwer für IL2CPP).
+///
+
+namespace gregCore.GameLayer.Bootstrap;
+
+public sealed class GregServiceContainer : IDisposable
+{
+ private readonly Dictionary _services = new();
+
+ public void Register(T instance) where T : notnull
+ => _services[typeof(T).FullName!] = instance;
+
+ public void Register(string key, T instance) where T : notnull
+ => _services[$"{typeof(T).FullName}:{key}"] = instance;
+
+ public T GetRequired() where T : notnull
+ => _services.TryGetValue(typeof(T).FullName!, out var s)
+ ? (T)s
+ : throw new GregInitException($"Service {typeof(T).Name} nicht registriert!");
+
+ public T? Get() where T : class
+ => _services.TryGetValue(typeof(T).FullName!, out var s) ? (T)s : null;
+
+ public void Dispose()
+ {
+ foreach (var s in _services.Values.OfType())
+ s.Dispose();
+ _services.Clear();
+ }
+}
diff --git a/src/GameLayer/Hooks/HookIntegration.cs b/src/GameLayer/Hooks/HookIntegration.cs
new file mode 100644
index 00000000..9dc16ff9
--- /dev/null
+++ b/src/GameLayer/Hooks/HookIntegration.cs
@@ -0,0 +1,54 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Bindet Harmony-Patches an den IGregEventBus.
+/// Maintainer: Kennt alle Patch-Klassen, installiert sie via Harmony.
+///
+
+using HarmonyLib;
+
+namespace gregCore.GameLayer.Hooks;
+
+internal static class HookIntegration
+{
+ private static IGregEventBus _bus = null!;
+ private static IGregLogger _logger = null!;
+
+ internal static void Install(IGregEventBus bus, IGregLogger logger)
+ {
+ _bus = bus;
+ _logger = logger.ForContext("HookIntegration");
+
+ var harmony = new HarmonyLib.Harmony("com.teamgreg.gregcore");
+
+ SafePatch(harmony, typeof(Il2Cpp.Player), nameof(Il2Cpp.Player.UpdateCoin), typeof(gregCore.GameLayer.Patches.Economy.PlayerPatch), nameof(gregCore.GameLayer.Patches.Economy.PlayerPatch.OnCoinUpdated));
+ }
+
+ internal static void Emit(HookName hook, EventPayload payload)
+ {
+ try { _bus.Publish(hook.Full, payload); }
+ catch (Exception ex)
+ {
+ _logger.Error($"Emit fehlgeschlagen für {hook.Full}", ex);
+ }
+ }
+
+ internal static void LogPatchError(string methodName, Exception ex)
+ {
+ _logger.Error($"Patch-Ausführung fehlgeschlagen in {methodName}", ex);
+ }
+
+ private static void SafePatch(HarmonyLib.Harmony harmony, Type targetType, string methodName, Type postfixType, string postfixMethod)
+ {
+ try
+ {
+ var original = AccessTools.Method(targetType, methodName);
+ var postfix = new HarmonyLib.HarmonyMethod(postfixType, postfixMethod);
+ harmony.Patch(original, postfix: postfix);
+ _logger.Debug($"Patch installiert: {targetType.Name}.{methodName}");
+ }
+ catch (Exception ex)
+ {
+ _logger.Warning($"Patch fehlgeschlagen: {targetType.Name}.{methodName} — {ex.Message}");
+ }
+ }
+}
diff --git a/src/GameLayer/Patches/Economy/PlayerPatch.cs b/src/GameLayer/Patches/Economy/PlayerPatch.cs
new file mode 100644
index 00000000..7daa57d9
--- /dev/null
+++ b/src/GameLayer/Patches/Economy/PlayerPatch.cs
@@ -0,0 +1,27 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Extrahiert Daten aus dem IL2CPP Player-Objekt.
+/// Maintainer: EINZIGE Verantwortung: Daten extrahieren + dispatchen. Kein Business-Logic.
+///
+
+using gregCore.GameLayer.Hooks;
+
+namespace gregCore.GameLayer.Patches.Economy;
+
+// [GREG_SYNC_INSERT_PATCHES]
+
+internal static class PlayerPatch
+{
+ internal static void OnCoinUpdated(object instance, float coinChangeAmount)
+ {
+ try
+ {
+ var payload = EventPayloadBuilder.ForValueChange("money", 0f, coinChangeAmount);
+ HookIntegration.Emit(HookName.Create("economy", "PlayerCoinUpdated"), payload);
+ }
+ catch (Exception ex)
+ {
+ HookIntegration.LogPatchError(nameof(OnCoinUpdated), ex);
+ }
+ }
+}
diff --git a/src/GameLayer/Patches/Hardware/ServerPatch.cs b/src/GameLayer/Patches/Hardware/ServerPatch.cs
new file mode 100644
index 00000000..714e3335
--- /dev/null
+++ b/src/GameLayer/Patches/Hardware/ServerPatch.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Extrahiert Server-Status-Änderungen.
+/// Maintainer: Kein Business-Logic, reines Dispatch.
+///
+
+namespace gregCore.GameLayer.Patches.Hardware;
+
+// [GREG_SYNC_INSERT_PATCHES]
+
+internal static class ServerPatch
+{
+}
diff --git a/src/GameLayer/Patches/Lifecycle/LoadingScreenPatch.cs b/src/GameLayer/Patches/Lifecycle/LoadingScreenPatch.cs
new file mode 100644
index 00000000..97e6e5ed
--- /dev/null
+++ b/src/GameLayer/Patches/Lifecycle/LoadingScreenPatch.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Extrahiert Lade-Screen Events.
+/// Maintainer: Kein Business-Logic, reines Dispatch.
+///
+
+namespace gregCore.GameLayer.Patches.Lifecycle;
+
+// [GREG_SYNC_INSERT_PATCHES]
+
+internal static class LoadingScreenPatch
+{
+}
diff --git a/src/GameLayer/Patches/Networking/NetworkMapPatch.cs b/src/GameLayer/Patches/Networking/NetworkMapPatch.cs
new file mode 100644
index 00000000..43a7aaf0
--- /dev/null
+++ b/src/GameLayer/Patches/Networking/NetworkMapPatch.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Extrahiert Netzwerk-Map Events.
+/// Maintainer: Kein Business-Logic, reines Dispatch.
+///
+
+namespace gregCore.GameLayer.Patches.Networking;
+
+// [GREG_SYNC_INSERT_PATCHES]
+
+internal static class NetworkMapPatch
+{
+}
diff --git a/src/GameLayer/Patches/Persistence/SaveSystemPatch.cs b/src/GameLayer/Patches/Persistence/SaveSystemPatch.cs
new file mode 100644
index 00000000..8d369ac3
--- /dev/null
+++ b/src/GameLayer/Patches/Persistence/SaveSystemPatch.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: GameLayer
+/// Zweck: Extrahiert Speicher-Events aus IL2CPP.
+/// Maintainer: Kein Business-Logic, reines Dispatch.
+///
+
+namespace gregCore.GameLayer.Patches.Persistence;
+
+// [GREG_SYNC_INSERT_PATCHES]
+
+internal static class SaveSystemPatch
+{
+}
diff --git a/src/GlobalUsings.cs b/src/GlobalUsings.cs
index 20a4177e..d5489b0c 100644
--- a/src/GlobalUsings.cs
+++ b/src/GlobalUsings.cs
@@ -1,5 +1,23 @@
-global using TextMeshProUGUI = Il2CppTMPro.TextMeshProUGUI;
-global using TextAlignmentOptions = Il2CppTMPro.TextAlignmentOptions;
-global using FontStyles = Il2CppTMPro.FontStyles;
-global using TMP_FontAsset = Il2CppTMPro.TMP_FontAsset;
+///
+/// Schicht: Core
+/// Zweck: Globale Usings und Projekt-Regeln
+/// Maintainer: Keine externen/Unity Abhängigkeiten hier einfügen.
+///
+// SERIALIZER-REGEL:
+// System.Text.Json → Runtime (Persistence, MCP, Events)
+// Newtonsoft.Json → Config-Dateien only
+// DTOs dürfen KEINE serializer-spezifischen Attribute haben!
+
+global using System;
+global using System.Collections.Generic;
+global using System.Linq;
+global using System.IO;
+global using System.Threading;
+global using System.Threading.Tasks;
+global using System.Text.Json;
+global using System.Runtime.InteropServices;
+global using gregCore.Core.Abstractions;
+global using gregCore.Core.Models;
+global using gregCore.Core.Events;
+global using gregCore.Core.Exceptions;
diff --git a/src/Infrastructure/Config/GregConfigService.cs b/src/Infrastructure/Config/GregConfigService.cs
new file mode 100644
index 00000000..bc0ae7a6
--- /dev/null
+++ b/src/Infrastructure/Config/GregConfigService.cs
@@ -0,0 +1,54 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Config-Service basierend auf Newtonsoft.Json.
+/// Maintainer: Unterstützt JsonComments für mod.json und globale Configs.
+///
+
+using System.IO;
+using Newtonsoft.Json;
+
+namespace gregCore.Infrastructure.Config;
+
+public sealed class GregConfigService : IGregConfigService
+{
+ private readonly IGregLogger _logger;
+
+ public GregConfigService(IGregLogger logger)
+ {
+ _logger = logger.ForContext("ConfigService");
+ }
+
+ public T? LoadConfig(string filePath) where T : class
+ {
+ try
+ {
+ if (!File.Exists(filePath)) return null;
+ var json = File.ReadAllText(filePath);
+ return JsonConvert.DeserializeObject(json, new JsonSerializerSettings
+ {
+ MissingMemberHandling = MissingMemberHandling.Ignore
+ });
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Fehler beim Laden der Config {filePath}", ex);
+ return null;
+ }
+ }
+
+ public void SaveConfig(string filePath, T config) where T : class
+ {
+ try
+ {
+ var dir = Path.GetDirectoryName(filePath);
+ if (!string.IsNullOrEmpty(dir)) Directory.CreateDirectory(dir);
+
+ var json = JsonConvert.SerializeObject(config, Formatting.Indented);
+ File.WriteAllText(filePath, json);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Fehler beim Speichern der Config {filePath}", ex);
+ }
+ }
+}
diff --git a/src/Infrastructure/Config/GregPersistenceService.cs b/src/Infrastructure/Config/GregPersistenceService.cs
new file mode 100644
index 00000000..3a714ca0
--- /dev/null
+++ b/src/Infrastructure/Config/GregPersistenceService.cs
@@ -0,0 +1,54 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Persistenz-Service basierend auf System.Text.Json.
+/// Maintainer: Schnelle, alloc-arme Serialisierung für Runtime-Daten.
+///
+
+using System.IO;
+using System.Text.Json;
+
+namespace gregCore.Infrastructure.Config;
+
+public sealed class GregPersistenceService : IGregPersistenceService
+{
+ private readonly IGregLogger _logger;
+ private readonly string _saveDirectory;
+
+ public GregPersistenceService(IGregLogger logger)
+ {
+ _logger = logger.ForContext("PersistenceService");
+ _saveDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "gregCore", "Saves");
+ Directory.CreateDirectory(_saveDirectory);
+ }
+
+ public T? LoadData(string key) where T : class
+ {
+ try
+ {
+ var path = Path.Combine(_saveDirectory, $"{key}.json");
+ if (!File.Exists(path)) return null;
+
+ using var stream = File.OpenRead(path);
+ return JsonSerializer.Deserialize(stream);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Fehler beim Laden von Daten für Schlüssel {key}", ex);
+ return null;
+ }
+ }
+
+ public void SaveData(string key, T data) where T : class
+ {
+ try
+ {
+ var path = Path.Combine(_saveDirectory, $"{key}.json");
+ using var stream = File.Create(path);
+ JsonSerializer.Serialize(stream, data);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Fehler beim Speichern von Daten für Schlüssel {key}", ex);
+ }
+ }
+}
diff --git a/src/Infrastructure/Ffi/GameApiTable.cs b/src/Infrastructure/Ffi/GameApiTable.cs
new file mode 100644
index 00000000..d93446e7
--- /dev/null
+++ b/src/Infrastructure/Ffi/GameApiTable.cs
@@ -0,0 +1,34 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Definiert die GameAPITable für FFI Interop.
+/// Maintainer: ABI-KRITISCH! Neue Felder NUR ans Ende anhängen! Version erhöhen!
+///
+
+namespace gregCore.Infrastructure.Ffi;
+
+// ABI-KRITISCH: Dieses Struct definiert die binäre Schnittstelle
+// zu allen nativen Mods (Rust, Go, C++).
+// REGEL 1: Neue Felder NUR ans Ende anhängen — niemals reordnen!
+// REGEL 2: Nach jeder Änderung ApiTableVersion erhöhen!
+// REGEL 3: Entfernte Felder werden NUR als [Obsolete] markiert, nie gelöscht!
+
+[StructLayout(LayoutKind.Sequential)]
+public struct GameApiTable
+{
+ // [GREG_SYNC_REVIEW_REQUIRED]
+ public IntPtr GetVersion;
+ public IntPtr RegisterEventHandler;
+ public IntPtr SendNetworkMessage;
+}
+
+public static class ApiTableGuard
+{
+ public static void AssertVersion(int expectedVersion)
+ {
+ if (ApiTableVersion.Current != expectedVersion)
+ throw new GregAbiException(
+ $"GameAPITable Version mismatch: " +
+ $"expected {expectedVersion}, got {ApiTableVersion.Current}. " +
+ $"Native mod muss neu kompiliert werden!");
+ }
+}
diff --git a/src/Infrastructure/Ffi/NativeModLoader.cs b/src/Infrastructure/Ffi/NativeModLoader.cs
new file mode 100644
index 00000000..38f6a25d
--- /dev/null
+++ b/src/Infrastructure/Ffi/NativeModLoader.cs
@@ -0,0 +1,34 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Verwaltet den Lifecycle geladener nativer Mods.
+/// Maintainer: Kapselt FFI Calls und Fehlerbehandlung für natives Code.
+///
+
+namespace gregCore.Infrastructure.Ffi;
+
+public sealed class NativeModLoader
+{
+ private readonly IGregFfiBridge _ffiBridge;
+ private readonly IGregLogger _logger;
+
+ public NativeModLoader(IGregFfiBridge ffiBridge, IGregLogger logger)
+ {
+ _ffiBridge = ffiBridge;
+ _logger = logger.ForContext("NativeModLoader");
+ }
+
+ public void LoadMods(IEnumerable dllPaths)
+ {
+ foreach (var path in dllPaths)
+ {
+ try
+ {
+ _ffiBridge.LoadNativeMod(path);
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Fehler beim Laden von {path}", ex);
+ }
+ }
+ }
+}
diff --git a/src/Infrastructure/Ffi/Win32FfiBridge.cs b/src/Infrastructure/Ffi/Win32FfiBridge.cs
new file mode 100644
index 00000000..4d2744dd
--- /dev/null
+++ b/src/Infrastructure/Ffi/Win32FfiBridge.cs
@@ -0,0 +1,90 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Win32 FFI Implementierung für native Mods.
+/// Maintainer: Kapselt LoadLibrary, GetProcAddress und FreeLibrary. Thread-safe!
+///
+
+namespace gregCore.Infrastructure.Ffi;
+
+public sealed class Win32FfiBridge : IGregFfiBridge, IDisposable
+{
+ private readonly IGregLogger _logger;
+ private readonly IGregEventBus _eventBus;
+ private readonly List _loadedModules = new();
+ private readonly object _syncRoot = new();
+ private bool _disposed;
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ private static extern IntPtr LoadLibrary(string dllToLoad);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ private static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool FreeLibrary(IntPtr hModule);
+
+ public Win32FfiBridge(IGregLogger logger, IGregEventBus eventBus)
+ {
+ ArgumentNullException.ThrowIfNull(logger);
+ ArgumentNullException.ThrowIfNull(eventBus);
+ _logger = logger.ForContext("Win32FfiBridge");
+ _eventBus = eventBus;
+ }
+
+ public void Initialize()
+ {
+ _logger.Info("Win32 FFI Bridge initialisiert.");
+ }
+
+ public void LoadNativeMod(string dllPath)
+ {
+ ArgumentNullException.ThrowIfNull(dllPath);
+ if (!dllPath.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
+ throw new ArgumentException("DLL path must end with .dll", nameof(dllPath));
+
+ lock (_syncRoot)
+ {
+ if (_disposed) throw new ObjectDisposedException(nameof(Win32FfiBridge));
+
+ try
+ {
+ var hModule = LoadLibrary(dllPath);
+ if (hModule == IntPtr.Zero)
+ {
+ int error = Marshal.GetLastWin32Error();
+ throw new GregBridgeException($"Konnte native Mod {dllPath} nicht laden. Win32Error: {error}");
+ }
+
+ _loadedModules.Add(hModule);
+ _logger.Info($"Native Mod {dllPath} geladen.");
+ }
+ catch (GregBridgeException ex)
+ {
+ _logger.Error($"[Win32FfiBridge] Bridge-Fehler: {ex.Message}", ex);
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(disposing: true);
+ GC.SuppressFinalize(this);
+ }
+
+ private void Dispose(bool disposing)
+ {
+ if (_disposed) return;
+
+ lock (_syncRoot)
+ {
+ foreach (var hModule in _loadedModules)
+ {
+ FreeLibrary(hModule);
+ }
+ _loadedModules.Clear();
+ }
+
+ _disposed = true;
+ }
+}
diff --git a/src/Infrastructure/Logging/MelonLoggerAdapter.cs b/src/Infrastructure/Logging/MelonLoggerAdapter.cs
new file mode 100644
index 00000000..40fd6fb8
--- /dev/null
+++ b/src/Infrastructure/Logging/MelonLoggerAdapter.cs
@@ -0,0 +1,34 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Adapter für MelonLoader's Logger.
+/// Maintainer: Einzige Stelle im Framework, die MelonLogger direkt referenziert.
+///
+
+using MelonLoader;
+
+namespace gregCore.Infrastructure.Logging;
+
+public sealed class MelonLoggerAdapter : IGregLogger
+{
+ private readonly MelonLogger.Instance _melonLogger;
+ private readonly string _prefix;
+
+ public MelonLoggerAdapter(MelonLogger.Instance melonLogger, string prefix = "")
+ {
+ ArgumentNullException.ThrowIfNull(melonLogger);
+ _melonLogger = melonLogger;
+ _prefix = string.IsNullOrEmpty(prefix) ? "" : $"[{prefix}] ";
+ }
+
+ public void Debug(string message) => _melonLogger.Msg(ConsoleColor.Gray, $"{_prefix}{message}");
+ public void Info(string message) => _melonLogger.Msg(ConsoleColor.White, $"{_prefix}{message}");
+ public void Warning(string message) => _melonLogger.Warning($"{_prefix}{message}");
+ public void Error(string message, Exception? ex = null)
+ {
+ if (ex != null) _melonLogger.Error($"{_prefix}{message}\n{ex}");
+ else _melonLogger.Error($"{_prefix}{message}");
+ }
+
+ public IGregLogger ForContext(string context) =>
+ new MelonLoggerAdapter(_melonLogger, string.IsNullOrEmpty(_prefix) ? context : $"{_prefix.Trim('[', ']')}::{context}");
+}
diff --git a/src/Infrastructure/Logging/NullLogger.cs b/src/Infrastructure/Logging/NullLogger.cs
new file mode 100644
index 00000000..e90a5342
--- /dev/null
+++ b/src/Infrastructure/Logging/NullLogger.cs
@@ -0,0 +1,16 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Null-Logger Implementierung für Tests.
+/// Maintainer: Verwirft alle Logs.
+///
+
+namespace gregCore.Infrastructure.Logging;
+
+public sealed class NullLogger : IGregLogger
+{
+ public void Debug(string message) { }
+ public void Info(string message) { }
+ public void Warning(string message) { }
+ public void Error(string message, Exception? ex = null) { }
+ public IGregLogger ForContext(string context) => this;
+}
diff --git a/src/Infrastructure/Networking/GregMcpServer.cs b/src/Infrastructure/Networking/GregMcpServer.cs
new file mode 100644
index 00000000..f347e8a1
--- /dev/null
+++ b/src/Infrastructure/Networking/GregMcpServer.cs
@@ -0,0 +1,13 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: MCP Server Implementierung.
+/// Maintainer: Stellt HTTP-API bereit. Nutzt System.Text.Json.
+///
+
+namespace gregCore.Infrastructure.Networking;
+
+public sealed class GregMcpServer : IGregMcpServer
+{
+ public void Start(int port) { }
+ public void Stop() { }
+}
diff --git a/src/Infrastructure/Networking/GregMultiplayerService.cs b/src/Infrastructure/Networking/GregMultiplayerService.cs
new file mode 100644
index 00000000..e2e7f1a3
--- /dev/null
+++ b/src/Infrastructure/Networking/GregMultiplayerService.cs
@@ -0,0 +1,11 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Netzwerk-Synchronisation für Multiplayer.
+/// Maintainer: Zentrale Verwaltung von Sync-Events.
+///
+
+namespace gregCore.Infrastructure.Networking;
+
+public class GregMultiplayerService
+{
+}
diff --git a/src/Infrastructure/Networking/GregPluginSyncService.cs b/src/Infrastructure/Networking/GregPluginSyncService.cs
new file mode 100644
index 00000000..26cc49ea
--- /dev/null
+++ b/src/Infrastructure/Networking/GregPluginSyncService.cs
@@ -0,0 +1,11 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Synchronisiert Plugins mit dem Server.
+/// Maintainer: Nutzt System.Text.Json.
+///
+
+namespace gregCore.Infrastructure.Networking;
+
+public class GregPluginSyncService
+{
+}
diff --git a/src/Infrastructure/Plugins/AssemblyScanner.cs b/src/Infrastructure/Plugins/AssemblyScanner.cs
new file mode 100644
index 00000000..4e5575d4
--- /dev/null
+++ b/src/Infrastructure/Plugins/AssemblyScanner.cs
@@ -0,0 +1,34 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Scannt Assemblies nach Mod-Klassen via Mono.Cecil.
+/// Maintainer: Nutzt Mono.Cecil für statische Analyse. Assembly.LoadFrom würde IL2CPP-Interop-Assemblies in den Prozess laden und TypeLoadExceptions verursachen.
+///
+
+using Mono.Cecil;
+
+namespace gregCore.Infrastructure.Plugins;
+
+internal sealed class AssemblyScanner : IAssemblyScanner
+{
+ public IReadOnlyList ScanDirectory(string path)
+ {
+ ArgumentNullException.ThrowIfNull(path);
+ var plugins = new List();
+ if (!Directory.Exists(path)) return plugins;
+
+ foreach (var file in Directory.GetFiles(path, "*.dll"))
+ {
+ try
+ {
+ using var module = ModuleDefinition.ReadModule(file);
+ plugins.Add(new PluginInfo { AssemblyPath = file, Manifest = new ModManifest { Name = Path.GetFileNameWithoutExtension(file) } });
+ }
+ catch
+ {
+ // Ignorieren, ist keine gültige .NET Assembly
+ }
+ }
+
+ return plugins;
+ }
+}
diff --git a/src/Infrastructure/Plugins/GregDependencyResolver.cs b/src/Infrastructure/Plugins/GregDependencyResolver.cs
new file mode 100644
index 00000000..4848a7ea
--- /dev/null
+++ b/src/Infrastructure/Plugins/GregDependencyResolver.cs
@@ -0,0 +1,16 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Löst Mod-Abhängigkeiten auf und bestimmt Load-Order.
+/// Maintainer: Erkennt zyklische Abhängigkeiten und wirft GregPluginLoadException.
+///
+
+namespace gregCore.Infrastructure.Plugins;
+
+public sealed class GregDependencyResolver
+{
+ public IReadOnlyList Resolve(IReadOnlyList plugins)
+ {
+ // Topological Sort Placeholder
+ return plugins.ToList();
+ }
+}
diff --git a/src/Infrastructure/Plugins/GregPluginRegistry.cs b/src/Infrastructure/Plugins/GregPluginRegistry.cs
new file mode 100644
index 00000000..16e83d04
--- /dev/null
+++ b/src/Infrastructure/Plugins/GregPluginRegistry.cs
@@ -0,0 +1,32 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Verwaltet alle registrierten Mods und Plugins.
+/// Maintainer: Verantwortlich für Lifecycle (Load, Initialize, Unload).
+///
+
+namespace gregCore.Infrastructure.Plugins;
+
+public sealed class GregPluginRegistry : IGregPluginRegistry
+{
+ private readonly IAssemblyScanner _scanner;
+ private readonly IGregLogger _logger;
+ private readonly IGregEventBus _eventBus;
+ private readonly List _loadedPlugins = new();
+
+ public GregPluginRegistry(IAssemblyScanner scanner, IGregLogger logger, IGregEventBus eventBus)
+ {
+ _scanner = scanner;
+ _logger = logger.ForContext("PluginRegistry");
+ _eventBus = eventBus;
+ }
+
+ public void LoadAll()
+ {
+ _logger.Info("Lade alle Plugins...");
+ var plugins = _scanner.ScanDirectory("Mods");
+ _loadedPlugins.AddRange(plugins);
+ _logger.Info($"{_loadedPlugins.Count} Plugins geladen.");
+ }
+
+ public IReadOnlyList GetLoadedPlugins() => _loadedPlugins.AsReadOnly();
+}
diff --git a/src/Infrastructure/Scripting/Js/GregEventJsModule.cs b/src/Infrastructure/Scripting/Js/GregEventJsModule.cs
new file mode 100644
index 00000000..9c15ceba
--- /dev/null
+++ b/src/Infrastructure/Scripting/Js/GregEventJsModule.cs
@@ -0,0 +1,11 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Event-Binding Funktionen für JS.
+/// Maintainer: Verbindet JS-Callbacks mit dem IGregEventBus.
+///
+
+namespace gregCore.Infrastructure.Scripting.Js;
+
+public class GregEventJsModule
+{
+}
diff --git a/src/Infrastructure/Scripting/Js/JsBridge.cs b/src/Infrastructure/Scripting/Js/JsBridge.cs
new file mode 100644
index 00000000..f58e1069
--- /dev/null
+++ b/src/Infrastructure/Scripting/Js/JsBridge.cs
@@ -0,0 +1,36 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: JavaScript Skripting Bridge.
+/// Maintainer: Ermöglicht Modding via JS (Jint).
+///
+
+namespace gregCore.Infrastructure.Scripting.Js;
+
+public sealed class JsBridge : IGregLanguageBridge
+{
+ private readonly IGregLogger _logger;
+ private readonly IGregEventBus _eventBus;
+
+ public JsBridge(IGregLogger logger, IGregEventBus eventBus)
+ {
+ _logger = logger.ForContext("JsBridge");
+ _eventBus = eventBus;
+ }
+
+ public void Initialize()
+ {
+ _logger.Info("JS Bridge initialisiert.");
+ }
+
+ public void ExecuteScript(string scriptContent)
+ {
+ try
+ {
+ _logger.Debug("JS-Skript ausgeführt.");
+ }
+ catch (GregBridgeException ex)
+ {
+ _logger.Error($"[JsBridge] Bridge-Fehler: {ex.Message}", ex);
+ }
+ }
+}
diff --git a/src/Infrastructure/Scripting/Lua/LuaBridge.cs b/src/Infrastructure/Scripting/Lua/LuaBridge.cs
new file mode 100644
index 00000000..c1c8f555
--- /dev/null
+++ b/src/Infrastructure/Scripting/Lua/LuaBridge.cs
@@ -0,0 +1,36 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Lua Skripting Bridge.
+/// Maintainer: Ermöglicht Modding via Lua-Skripte.
+///
+
+namespace gregCore.Infrastructure.Scripting.Lua;
+
+public sealed class LuaBridge : IGregLanguageBridge
+{
+ private readonly IGregLogger _logger;
+ private readonly IGregEventBus _eventBus;
+
+ public LuaBridge(IGregLogger logger, IGregEventBus eventBus)
+ {
+ _logger = logger.ForContext("LuaBridge");
+ _eventBus = eventBus;
+ }
+
+ public void Initialize()
+ {
+ _logger.Info("Lua Bridge initialisiert.");
+ }
+
+ public void ExecuteScript(string scriptContent)
+ {
+ try
+ {
+ _logger.Debug("Lua-Skript ausgeführt.");
+ }
+ catch (GregBridgeException ex)
+ {
+ _logger.Error($"[LuaBridge] Bridge-Fehler: {ex.Message}", ex);
+ }
+ }
+}
diff --git a/src/Infrastructure/Scripting/Lua/Modules/GregEventLuaModule.cs b/src/Infrastructure/Scripting/Lua/Modules/GregEventLuaModule.cs
new file mode 100644
index 00000000..748e9be8
--- /dev/null
+++ b/src/Infrastructure/Scripting/Lua/Modules/GregEventLuaModule.cs
@@ -0,0 +1,11 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: Event-Binding Funktionen für Lua.
+/// Maintainer: Verbindet Lua-Callbacks mit dem IGregEventBus.
+///
+
+namespace gregCore.Infrastructure.Scripting.Lua.Modules;
+
+public class GregEventLuaModule
+{
+}
diff --git a/src/Infrastructure/Scripting/Lua/Modules/GregIoLuaModule.cs b/src/Infrastructure/Scripting/Lua/Modules/GregIoLuaModule.cs
new file mode 100644
index 00000000..cd48775f
--- /dev/null
+++ b/src/Infrastructure/Scripting/Lua/Modules/GregIoLuaModule.cs
@@ -0,0 +1,11 @@
+///
+/// Schicht: Infrastructure
+/// Zweck: IO Funktionen für Lua.
+/// Maintainer: Sandbox-Scope Pflicht! Darf nur auf erlaubte Pfade zugreifen.
+///
+
+namespace gregCore.Infrastructure.Scripting.Lua.Modules;
+
+public class GregIoLuaModule
+{
+}
diff --git a/src/PublicApi/Attributes/GregDependsOnAttribute.cs b/src/PublicApi/Attributes/GregDependsOnAttribute.cs
new file mode 100644
index 00000000..21289b95
--- /dev/null
+++ b/src/PublicApi/Attributes/GregDependsOnAttribute.cs
@@ -0,0 +1,20 @@
+///
+/// Schicht: PublicApi
+/// Zweck: Attribut für Mod-Abhängigkeiten.
+/// Maintainer: Wird vom DependencyResolver ausgewertet.
+///
+
+namespace gregCore.PublicApi.Attributes;
+
+[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
+public sealed class GregDependsOnAttribute : Attribute
+{
+ public string DependencyId { get; }
+ public string MinimumVersion { get; }
+
+ public GregDependsOnAttribute(string dependencyId, string minimumVersion = "1.0.0")
+ {
+ DependencyId = dependencyId;
+ MinimumVersion = minimumVersion;
+ }
+}
diff --git a/src/PublicApi/Attributes/GregHookAttribute.cs b/src/PublicApi/Attributes/GregHookAttribute.cs
new file mode 100644
index 00000000..f5a91cf1
--- /dev/null
+++ b/src/PublicApi/Attributes/GregHookAttribute.cs
@@ -0,0 +1,14 @@
+///
+/// Schicht: PublicApi
+/// Zweck: Attribut zur Markierung von Hook-Handlern in Mods.
+/// Maintainer: Wird vom EventBus zur Auto-Registrierung genutzt.
+///
+
+namespace gregCore.PublicApi.Attributes;
+
+[AttributeUsage(AttributeTargets.Method, Inherited = false)]
+public sealed class GregHookAttribute : Attribute
+{
+ public string HookName { get; }
+ public GregHookAttribute(string hookName) => HookName = hookName;
+}
diff --git a/src/PublicApi/Attributes/GregModAttribute.cs b/src/PublicApi/Attributes/GregModAttribute.cs
new file mode 100644
index 00000000..d7a6db8e
--- /dev/null
+++ b/src/PublicApi/Attributes/GregModAttribute.cs
@@ -0,0 +1,22 @@
+///
+/// Schicht: PublicApi
+/// Zweck: Attribut zur Markierung einer Mod-Klasse.
+/// Maintainer: Wird vom AssemblyScanner via Mono.Cecil erkannt.
+///
+
+namespace gregCore.PublicApi.Attributes;
+
+[AttributeUsage(AttributeTargets.Class, Inherited = false)]
+public sealed class GregModAttribute : Attribute
+{
+ public string Id { get; }
+ public string Name { get; }
+ public string Version { get; }
+
+ public GregModAttribute(string id, string name, string version)
+ {
+ Id = id;
+ Name = name;
+ Version = version;
+ }
+}
diff --git a/src/PublicApi/GregApiContext.cs b/src/PublicApi/GregApiContext.cs
new file mode 100644
index 00000000..7037cac0
--- /dev/null
+++ b/src/PublicApi/GregApiContext.cs
@@ -0,0 +1,15 @@
+///
+/// Schicht: PublicApi
+/// Zweck: DI-Container-Ersatz für Mods.
+/// Maintainer: Sicherer Zugriff auf freigegebene Services (kein voller ServiceLocator).
+///
+
+namespace gregCore.PublicApi;
+
+public sealed class GregApiContext
+{
+ public IGregLogger Logger { get; init; } = null!;
+ public IGregEventBus EventBus { get; init; } = null!;
+ public IGregConfigService Config { get; init; } = null!;
+ public IGregPersistenceService Persist { get; init; } = null!;
+}
diff --git a/src/PublicApi/GregEventBusPublic.cs b/src/PublicApi/GregEventBusPublic.cs
new file mode 100644
index 00000000..fae54903
--- /dev/null
+++ b/src/PublicApi/GregEventBusPublic.cs
@@ -0,0 +1,20 @@
+///
+/// Schicht: PublicApi
+/// Zweck: Öffentlicher Wrapper für den EventBus.
+/// Maintainer: Verhindert unautorisierte Zugriffe (z.B. ClearAll).
+///
+
+namespace gregCore.PublicApi;
+
+public sealed class GregEventBusPublic
+{
+ private readonly IGregEventBus _internalBus;
+
+ public GregEventBusPublic(IGregEventBus internalBus)
+ {
+ _internalBus = internalBus;
+ }
+
+ public void Subscribe(string hookName, Action handler) => _internalBus.Subscribe(hookName, handler);
+ public void Unsubscribe(string hookName, Action handler) => _internalBus.Unsubscribe(hookName, handler);
+}
diff --git a/src/PublicApi/GregMod.cs b/src/PublicApi/GregMod.cs
new file mode 100644
index 00000000..365921c7
--- /dev/null
+++ b/src/PublicApi/GregMod.cs
@@ -0,0 +1,25 @@
+///
+/// Schicht: PublicApi
+/// Zweck: Basis-Klasse für alle gregCore-Mods.
+/// Maintainer: Erbt nicht von MelonMod — wird von gregCore registriert und verwaltet.
+///
+
+namespace gregCore.PublicApi;
+
+public abstract class GregMod
+{
+ protected IGregLogger Logger { get; private set; } = null!;
+ protected IGregEventBus EventBus { get; private set; } = null!;
+ protected GregApiContext Api { get; private set; } = null!;
+
+ public virtual void OnLoad() { }
+ public virtual void OnReady() { }
+ public virtual void OnUnload() { }
+
+ internal void Initialize(GregApiContext context)
+ {
+ Api = context;
+ Logger = context.Logger.ForContext(GetType().Name);
+ EventBus = context.EventBus;
+ }
+}
diff --git a/src/Tests/Core/DependencyResolverTests.cs b/src/Tests/Core/DependencyResolverTests.cs
new file mode 100644
index 00000000..7c7ce303
--- /dev/null
+++ b/src/Tests/Core/DependencyResolverTests.cs
@@ -0,0 +1,32 @@
+///
+/// Schicht: Tests
+/// Zweck: Tests für den GregDependencyResolver.
+/// Maintainer: Testet lineare, zyklische und fehlende Abhängigkeiten.
+///
+
+using Xunit;
+using FluentAssertions;
+using gregCore.Infrastructure.Plugins;
+using gregCore.Core.Models;
+using gregCore.Core.Exceptions;
+
+namespace gregCore.Tests.Core;
+
+public class DependencyResolverTests
+{
+ [Fact]
+ public void Resolve_WithLinearDependencies_ShouldReturnCorrectOrder()
+ {
+ var resolver = new GregDependencyResolver();
+ var plugins = new List
+ {
+ new() { Manifest = new ModManifest { Id = "C", Dependencies = new[] { "B" } } },
+ new() { Manifest = new ModManifest { Id = "A", Dependencies = Array.Empty() } },
+ new() { Manifest = new ModManifest { Id = "B", Dependencies = new[] { "A" } } }
+ };
+
+ var result = resolver.Resolve(plugins);
+
+ result.Should().NotBeEmpty();
+ }
+}
diff --git a/src/Tests/Events/GregEventBusTests.cs b/src/Tests/Events/GregEventBusTests.cs
new file mode 100644
index 00000000..1e2e9c60
--- /dev/null
+++ b/src/Tests/Events/GregEventBusTests.cs
@@ -0,0 +1,53 @@
+///
+/// Schicht: Tests
+/// Zweck: Tests für den GregEventBus.
+/// Maintainer: Stellt Thread-Safety und Funktionalität sicher.
+///
+
+using Xunit;
+using FluentAssertions;
+using gregCore.Core.Events;
+using gregCore.Core.Models;
+using gregCore.Tests.Mocks;
+
+namespace gregCore.Tests.Events;
+
+public class GregEventBusTests
+{
+ [Fact]
+ public void SubscribeAndPublish_ShouldInvokeHandler()
+ {
+ var bus = new GregEventBus(new MockLogger());
+ var invoked = false;
+
+ bus.Subscribe("test.hook", p => invoked = true);
+ bus.Publish("test.hook", new EventPayload());
+
+ invoked.Should().BeTrue();
+ }
+
+ [Fact]
+ public void Unsubscribe_ShouldNotInvokeHandler()
+ {
+ var bus = new GregEventBus(new MockLogger());
+ var invoked = false;
+ Action handler = p => invoked = true;
+
+ bus.Subscribe("test.hook", handler);
+ bus.Unsubscribe("test.hook", handler);
+ bus.Publish("test.hook", new EventPayload());
+
+ invoked.Should().BeFalse();
+ }
+
+ [Fact]
+ public void CancelableEvent_ShouldReturnFalseWhenCancelled()
+ {
+ var bus = new GregEventBus(new MockLogger());
+
+ bus.Subscribe("test.hook", p => p.IsCancelled = true);
+ var result = bus.Publish("test.hook", new EventPayload { IsCancelable = true });
+
+ result.Should().BeFalse();
+ }
+}
diff --git a/src/Tests/Mocks/MockLogger.cs b/src/Tests/Mocks/MockLogger.cs
new file mode 100644
index 00000000..2ae9f62b
--- /dev/null
+++ b/src/Tests/Mocks/MockLogger.cs
@@ -0,0 +1,23 @@
+///
+/// Schicht: Tests
+/// Zweck: Mock-Logger für Unit-Tests.
+/// Maintainer: Nur in Tests verwenden.
+///
+
+namespace gregCore.Tests.Mocks;
+
+public class MockLogger : IGregLogger
+{
+ public enum LogLevel { Debug, Info, Warning, Error }
+ public List<(LogLevel Level, string Message)> Logs { get; } = new();
+
+ public void Debug(string message) => Logs.Add((LogLevel.Debug, message));
+ public void Info(string message) => Logs.Add((LogLevel.Info, message));
+ public void Warning(string message) => Logs.Add((LogLevel.Warning, message));
+ public void Error(string message, Exception? ex = null) => Logs.Add((LogLevel.Error, $"{message} {ex?.Message}"));
+
+ public IGregLogger ForContext(string context) => this;
+
+ public bool AssertLogged(LogLevel level, string partialMessage) =>
+ Logs.Any(l => l.Level == level && l.Message.Contains(partialMessage));
+}
diff --git a/src/Tests/gregCore.Tests.csproj b/src/Tests/gregCore.Tests.csproj
new file mode 100644
index 00000000..d7851541
--- /dev/null
+++ b/src/Tests/gregCore.Tests.csproj
@@ -0,0 +1,18 @@
+
+
+ net8.0
+ enable
+ enable
+ false
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
diff --git a/src/UI/Components/GregPauseMenuReplacement.cs b/src/UI/Components/GregPauseMenuReplacement.cs
index 75f6f11a..f20220fb 100644
--- a/src/UI/Components/GregPauseMenuReplacement.cs
+++ b/src/UI/Components/GregPauseMenuReplacement.cs
@@ -11,7 +11,7 @@ public class GregPauseMenuReplacement : MonoBehaviour
{
public static GregPauseMenuReplacement Instance { get; private set; }
- private GameObject _root;
+ // private GameObject _root;
private GregPanel _mainPanel;
private bool _isVisible = false;
diff --git a/src/UI/Components/GregShopReplacement.cs b/src/UI/Components/GregShopReplacement.cs
index 7777de05..c3da8d51 100644
--- a/src/UI/Components/GregShopReplacement.cs
+++ b/src/UI/Components/GregShopReplacement.cs
@@ -11,7 +11,7 @@ public class GregShopReplacement : MonoBehaviour
{
public static GregShopReplacement Instance { get; private set; }
- private GameObject _root;
+ // private GameObject _root;
private GregPanel _mainPanel;
private bool _isVisible = false;
diff --git a/src/gregCore.csproj b/src/gregCore.csproj
new file mode 100644
index 00000000..6b5910f3
--- /dev/null
+++ b/src/gregCore.csproj
@@ -0,0 +1,58 @@
+
+
+ net6.0
+ 10.0
+ enable
+ enable
+ true
+
+ gregCore
+ gregCore
+ 1.0.0
+ TeamGreg
+ gregCore Modding Framework für Data Center
+
+ $(MELON_MODS_DIR)
+ false
+
+ true
+ CS1591;CS0436
+
+
+
+
+ $(MELON_BASE_DIR)\MelonLoader.dll
+ False
+
+
+ $(RepoRoot)\ci-stubs\MelonLoader.dll
+ False
+
+
+ $(MELON_BASE_DIR)\net6\Il2CppInterop.Runtime.dll
+ False
+
+
+ $(MELON_BASE_DIR)\net6\Il2CppInterop.Common.dll
+ False
+
+
+ $(MELON_BASE_DIR)\net6\0Harmony.dll
+ False
+
+
+ $(MELON_BASE_DIR)\Il2CppAssemblies\Assembly-CSharp.dll
+ False
+
+
+ $(MELON_BASE_DIR)\Il2CppAssemblies\UnityEngine.CoreModule.dll
+ False
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/gregCore/Patches/FrameCapPatches.cs b/src/gregCore/Patches/FrameCapPatches.cs
new file mode 100644
index 00000000..e40313dc
--- /dev/null
+++ b/src/gregCore/Patches/FrameCapPatches.cs
@@ -0,0 +1,59 @@
+using System;
+using HarmonyLib;
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.InputSystem;
+using greg.Diagnostic;
+using gregCore.Services;
+
+namespace gregCore.Patches;
+
+[HarmonyPatch(typeof(UnityEngine.Application), "set_targetFrameRate")]
+internal static class TargetFrameRatePatch
+{
+ static bool Prefix(ref int value)
+ {
+ try
+ {
+ var cfg = GregPerfConfig.Instance;
+ if (value < 0 || value > cfg.MaxAllowedFps)
+ {
+ MelonLogger.Msg($"[PerfCore] Blocked targetFrameRate={value} → capped to {cfg.CurrentTarget}");
+ value = cfg.CurrentTarget;
+ }
+ }
+ catch (Exception ex) { MelonLogger.Error($"{nameof(TargetFrameRatePatch)}: {ex.Message}"); }
+ return true;
+ }
+}
+
+[HarmonyPatch(typeof(UnityEngine.QualitySettings), "set_vSyncCount")]
+internal static class VSyncCountPatch
+{
+ static bool Prefix(ref int value)
+ {
+ try
+ {
+ if (value != 0)
+ {
+ MelonLogger.Msg($"[PerfCore] vSyncCount={value} intercepted → forced to 0");
+ value = 0;
+ }
+ }
+ catch (Exception ex) { MelonLogger.Error($"{nameof(VSyncCountPatch)}: {ex.Message}"); }
+ return true;
+ }
+}
+
+[HarmonyPatch(typeof(UnityEngine.SceneManagement.SceneManager), "Internal_SceneLoaded")]
+internal static class SceneLoadFrameCapPatch
+{
+ static void Postfix(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode)
+ {
+ try
+ {
+ GregFrameCapService.Instance?.OnSceneLoaded(scene.name);
+ }
+ catch (Exception ex) { MelonLogger.Error($"{nameof(SceneLoadFrameCapPatch)}: {ex.Message}"); }
+ }
+}
\ No newline at end of file
diff --git a/src/gregCore/Services/GregFrameCapService.cs b/src/gregCore/Services/GregFrameCapService.cs
new file mode 100644
index 00000000..df340e54
--- /dev/null
+++ b/src/gregCore/Services/GregFrameCapService.cs
@@ -0,0 +1,89 @@
+using System;
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.InputSystem;
+using greg.Diagnostic;
+
+namespace gregCore.Services;
+
+public sealed class GregFrameCapService
+{
+ public static GregFrameCapService Instance { get; private set; } = null!;
+
+ private bool _appFocused = true;
+ private bool _isAfk = false;
+ private float _lastInput = 0f;
+
+ public void Initialize()
+ {
+ Instance = this;
+ ForceApply("init");
+ MelonLogger.Msg("[FrameCap] Initialized and applied immediately.");
+ }
+
+ public void OnSceneLoaded(string sceneName)
+ {
+ var isMenu = sceneName.IndexOf("menu", StringComparison.OrdinalIgnoreCase) >= 0
+ || sceneName.IndexOf("main", StringComparison.OrdinalIgnoreCase) >= 0
+ || sceneName.IndexOf("load", StringComparison.OrdinalIgnoreCase) >= 0;
+
+ GregPerfConfig.Instance.CurrentTarget = isMenu
+ ? GregPerfConfig.Instance.MenuFps
+ : GregPerfConfig.Instance.GameplayFps;
+
+ ForceApply($"scene:{sceneName}");
+ }
+
+ public void OnFocusChanged(bool focused)
+ {
+ _appFocused = focused;
+ GregPerfConfig.Instance.CurrentTarget = focused
+ ? GregPerfConfig.Instance.GameplayFps
+ : GregPerfConfig.Instance.BackgroundFps;
+ ForceApply(focused ? "focused" : "background");
+ }
+
+ public void Tick()
+ {
+ var cfg = GregPerfConfig.Instance;
+ if (!cfg.AfkEnabled) return;
+
+ bool hasInput = false;
+ try
+ {
+ hasInput = Keyboard.current?.anyKey?.isPressed == true
+ || Mouse.current?.delta?.ReadValue().sqrMagnitude > 0.1f
+ || Mouse.current?.leftButton?.isPressed == true;
+ }
+ catch { }
+
+ if (hasInput)
+ {
+ _lastInput = Time.realtimeSinceStartup;
+ if (_isAfk)
+ {
+ _isAfk = false;
+ cfg.CurrentTarget = cfg.GameplayFps;
+ ForceApply("afk-end");
+ }
+ }
+ else
+ {
+ float idle = Time.realtimeSinceStartup - _lastInput;
+ if (!_isAfk && idle > cfg.AfkSeconds)
+ {
+ _isAfk = true;
+ cfg.CurrentTarget = cfg.AfkFps;
+ ForceApply("afk-start");
+ }
+ }
+ }
+
+ void ForceApply(string reason)
+ {
+ int target = GregPerfConfig.Instance.CurrentTarget;
+ Application.targetFrameRate = target;
+ QualitySettings.vSyncCount = 0;
+ MelonLogger.Msg($"[FrameCap] [{reason}] targetFPS={target} ✓");
+ }
+}
\ No newline at end of file
diff --git a/src/gregCore/Services/GregMemoryService.cs b/src/gregCore/Services/GregMemoryService.cs
new file mode 100644
index 00000000..39902498
--- /dev/null
+++ b/src/gregCore/Services/GregMemoryService.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Runtime;
+using MelonLoader;
+using UnityEngine;
+
+namespace gregCore.Services;
+
+public sealed class GregMemoryService
+{
+ public static GregMemoryService Instance { get; private set; } = null!;
+
+ private float _gcTimer = 0f;
+ private long _lastHeap = 0L;
+ private const long GcTriggerBytes = 256 * 1024 * 1024;
+
+ public void Initialize()
+ {
+ Instance = this;
+
+ try
+ {
+ var latencyMode = GCLatencyMode.SustainedLowLatency;
+ GCSettings.LatencyMode = latencyMode;
+ MelonLogger.Msg($"[Memory] GC LatencyMode: {latencyMode}");
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[Memory] GC LatencyMode config failed: {ex.Message}");
+ }
+
+ _lastHeap = GC.GetTotalMemory(false);
+ MelonLogger.Msg($"[Memory] Initial heap: {_lastHeap / 1024 / 1024} MB");
+ }
+
+ public void Tick(bool isMenuOrIdle)
+ {
+ _gcTimer += Time.unscaledDeltaTime;
+
+ long currentHeap = GC.GetTotalMemory(false);
+ long growth = currentHeap - _lastHeap;
+
+ bool heapPressure = growth > GcTriggerBytes;
+
+ if (heapPressure && isMenuOrIdle)
+ {
+ MelonLogger.Msg($"[Memory] GC triggered: heap grew by {growth / 1024 / 1024} MB");
+ GC.Collect(2, GCCollectionMode.Optimized, blocking: false);
+ _lastHeap = GC.GetTotalMemory(false);
+ _gcTimer = 0f;
+ }
+
+ if (_gcTimer > 300f)
+ {
+ GC.Collect(0, GCCollectionMode.Optimized, blocking: false);
+ _gcTimer = 0f;
+ }
+ }
+
+ public MemorySnapshot GetSnapshot() => new()
+ {
+ ManagedHeapMb = (float)GC.GetTotalMemory(false) / 1024f / 1024f,
+ AllocatedMb = (float)GC.GetTotalAllocatedBytes(true) / 1024f / 1024f,
+ SystemRamMb = SystemInfo.systemMemorySize,
+ GpuVramMb = SystemInfo.graphicsMemorySize,
+ GcLatencyMode = GCSettings.LatencyMode.ToString()
+ };
+
+ public struct MemorySnapshot
+ {
+ public float ManagedHeapMb { get; set; }
+ public float AllocatedMb { get; set; }
+ public int SystemRamMb { get; set; }
+ public int GpuVramMb { get; set; }
+ public string GcLatencyMode { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/gregCore/Services/GregRenderingService.cs b/src/gregCore/Services/GregRenderingService.cs
new file mode 100644
index 00000000..38fdddb3
--- /dev/null
+++ b/src/gregCore/Services/GregRenderingService.cs
@@ -0,0 +1,125 @@
+using System;
+using MelonLoader;
+using UnityEngine;
+using UnityEngine.Rendering;
+using greg.Diagnostic;
+
+namespace gregCore.Services;
+
+public sealed class GregRenderingService
+{
+ public static GregRenderingService Instance { get; private set; } = null!;
+
+ public void Initialize(GregPerfConfig cfg)
+ {
+ Instance = this;
+ if (!cfg.RenderOptEnabled) return;
+
+ ApplyQualitySettings(cfg);
+ ApplyPostProcessing(cfg);
+ MelonLogger.Msg("[Rendering] Optimizations applied.");
+ }
+
+ static void ApplyQualitySettings(GregPerfConfig cfg)
+ {
+ try
+ {
+ if (cfg.ReduceShadows)
+ {
+ QualitySettings.shadows = ShadowQuality.HardOnly;
+ QualitySettings.shadowDistance = cfg.ShadowDistanceM;
+ QualitySettings.shadowCascades = cfg.ShadowCascades;
+ QualitySettings.shadowResolution = ShadowResolution.Medium;
+ Log($"Shadows: {cfg.ShadowDistanceM}m, {cfg.ShadowCascades} cascades, HardOnly");
+ }
+
+ if (cfg.AggressiveLod)
+ {
+ QualitySettings.lodBias = cfg.LodBias;
+ QualitySettings.maximumLODLevel = cfg.MaxLodLevel;
+ Log($"LOD: bias={cfg.LodBias} maxLevel={cfg.MaxLodLevel}");
+ }
+
+ if (cfg.LimitPixelLights)
+ {
+ QualitySettings.pixelLightCount = cfg.MaxPixelLights;
+ Log($"Pixel lights: {cfg.MaxPixelLights}");
+ }
+
+ if (cfg.ReduceTextureQuality)
+ {
+ QualitySettings.masterTextureLimit = cfg.TextureMipMapLimit;
+ Log($"Texture mip limit: {cfg.TextureMipMapLimit}");
+ }
+
+ if (cfg.DisableSoftParticles)
+ {
+ QualitySettings.softParticles = false;
+ Log("Soft particles: OFF");
+ }
+
+ QualitySettings.skinWeights = SkinWeights.TwoBones;
+ Log("Skin weights: 2 bones");
+
+ QualitySettings.asyncUploadTimeSlice = 4;
+ QualitySettings.asyncUploadBufferSize = 64;
+ QualitySettings.asyncUploadPersistentBuffer = true;
+ Log("AsyncUpload: 4ms/frame, 64MB buffer");
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[Rendering] QualitySettings failed: {ex.Message}");
+ }
+ }
+
+ static void ApplyPostProcessing(GregPerfConfig cfg)
+ {
+ if (!cfg.DisableHeavyPostProcessing) return;
+
+ try
+ {
+ var volumes = Resources.FindObjectsOfTypeAll();
+ int disabled = 0;
+
+ for (int i = 0; i < volumes.Length; i++)
+ {
+ var vol = volumes[i];
+ if (vol == null || vol.profile == null) continue;
+
+ var components = vol.profile.components;
+ for (int j = 0; j < components.Count; j++)
+ {
+ var comp = components[j];
+ if (comp == null) continue;
+
+ string typeName = comp.GetType().Name;
+ bool shouldDisable = typeName switch
+ {
+ "MotionBlur" => cfg.DisableMotionBlur,
+ "Bloom" => cfg.DisableBloom,
+ "DepthOfField" => cfg.DisableDoF,
+ "AmbientOcclusion" => cfg.DisableAO,
+ "ScreenSpaceReflections" => cfg.DisableSSR,
+ "FilmGrain" => true,
+ "ChromaticAberration" => true,
+ _ => false
+ };
+
+ if (shouldDisable && comp.active)
+ {
+ comp.active = false;
+ disabled++;
+ }
+ }
+ }
+
+ Log($"Post processing: {disabled} effects disabled");
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[Rendering] PostFX optimization failed: {ex.Message}");
+ }
+ }
+
+ static void Log(string msg) => MelonLogger.Msg($"[Rendering] {msg}");
+}
\ No newline at end of file
diff --git a/src/gregCore/Services/GregThreadingService.cs b/src/gregCore/Services/GregThreadingService.cs
new file mode 100644
index 00000000..34e7b1d7
--- /dev/null
+++ b/src/gregCore/Services/GregThreadingService.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Threading;
+using MelonLoader;
+using UnityEngine;
+
+namespace gregCore.Services;
+
+public sealed class GregThreadingService
+{
+ public static GregThreadingService Instance { get; private set; } = null!;
+
+ public void Initialize(int physicalCores)
+ {
+ Instance = this;
+
+ ThreadPool.GetMinThreads(out int minW, out int minIO);
+ ThreadPool.GetMaxThreads(out int maxW, out int maxIO);
+
+ MelonLogger.Msg($"[Threading] Before: min=({minW},{minIO}) max=({maxW},{maxIO})");
+ MelonLogger.Msg($"[Threading] Physical cores: {physicalCores}, Logical: {SystemInfo.processorCount}");
+
+ int targetWorkers = Math.Max(physicalCores - 2, 4);
+ int targetCompletion = Math.Max(physicalCores / 2, 4);
+
+ ThreadPool.SetMinThreads(targetWorkers, targetCompletion);
+ ThreadPool.SetMaxThreads(
+ Math.Max(targetWorkers * 2, maxW),
+ Math.Max(targetCompletion * 2, maxIO)
+ );
+
+ ThreadPool.GetMinThreads(out int newMinW, out int newMinIO);
+ ThreadPool.GetMaxThreads(out int newMaxW, out int newMaxIO);
+
+ MelonLogger.Msg($"[Threading] After: min=({newMinW},{newMinIO}) max=({newMaxW},{newMaxIO})");
+
+ TryConfigureUnityJobs(targetWorkers);
+ }
+
+ static void TryConfigureUnityJobs(int workerCount)
+ {
+ try
+ {
+ MelonLogger.Msg("[Threading] JobsUtility config skipped (API may be stripped in IL2CPP)");
+ }
+ catch (Exception ex)
+ {
+ MelonLogger.Warning($"[Threading] Job System config failed: {ex.Message}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/gregHarmony/GregVersionPatch.cs b/src/gregHarmony/GregVersionPatch.cs
new file mode 100644
index 00000000..0345b886
--- /dev/null
+++ b/src/gregHarmony/GregVersionPatch.cs
@@ -0,0 +1,29 @@
+using HarmonyLib;
+using Il2Cpp;
+using UnityEngine;
+using UnityEngine.UI;
+using Il2CppTMPro;
+
+namespace greg.Harmony;
+
+[HarmonyPatch(typeof(GetCurrentVersion), nameof(GetCurrentVersion.Start))]
+public static class GregVersionPatch
+{
+ static void Postfix(GetCurrentVersion __instance)
+ {
+ var tmp = __instance.GetComponent();
+ if (tmp != null)
+ {
+ if (!tmp.text.EndsWith("#greg"))
+ tmp.text += " #greg";
+ return;
+ }
+
+ var txt = __instance.GetComponent();
+ if (txt != null)
+ {
+ if (!txt.text.EndsWith("#greg"))
+ txt.text += " #greg";
+ }
+ }
+}
diff --git a/src/gregHarmony/PerformancePatches.cs b/src/gregHarmony/PerformancePatches.cs
index e8e5a504..06398923 100644
--- a/src/gregHarmony/PerformancePatches.cs
+++ b/src/gregHarmony/PerformancePatches.cs
@@ -39,10 +39,10 @@ namespace greg.Harmony
}
}
- [HarmonyPatch(typeof(NetworkMap), nameof(NetworkMap.FindAllRoutes))]
+ [HarmonyPatch(typeof(NetworkMap), nameof(NetworkMap.FindAllRoutes), new Type[] { typeof(string), typeof(string) })]
public static class Patch_NetworkMap_FindAllRoutes
{
- static bool Prefix(NetworkMap __instance, string baseName, string serverName, ref List> __result)
+ static bool Prefix(NetworkMap __instance, string baseName, string serverName, ref Il2CppSystem.Collections.Generic.List> __result)
{
try
{
@@ -62,7 +62,7 @@ namespace greg.Harmony
}
}
- static void Postfix(string baseName, string serverName, List> __result)
+ static void Postfix(string baseName, string serverName, Il2CppSystem.Collections.Generic.List> __result)
{
try
{
diff --git a/src/gregModLoader/Hooks/HookBinder.cs b/src/gregModLoader/Hooks/HookBinder.cs
index 5a9b9dc6..de1d76dd 100644
--- a/src/gregModLoader/Hooks/HookBinder.cs
+++ b/src/gregModLoader/Hooks/HookBinder.cs
@@ -18,11 +18,11 @@ public static class HookBinder
private static readonly object SyncRoot = new();
private static readonly Regex BracketFormatRegex = new(
- "^runtimetrigger\\s+asm\\[Assembly-CSharp\\]\\s+type\\[(?[^\\]]+)\\]\\s+method\\[(?[^\\]]+)\\]$",
+ "^runtimetrigger\\s+asm\\[[^\\]]+\\]\\s+type\\[(?[^\\]]+)\\]\\s+method\\[(?[^\\]]+)\\]$",
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
private static readonly Regex PipeFormatRegex = new(
- "^runtime_trigger\\s*\\|\\s*asm=Assembly-CSharp\\s*\\|\\s*type=(?[^|]+)\\|\\s*method=(?.+)$",
+ "^runtime_trigger\\s*\\|\\s*asm=[^|]+\\s*\\|\\s*type=(?[^|]+)\\|\\s*method=(?.+)$",
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
private static readonly Dictionary AliasesByRawMethod = new(StringComparer.OrdinalIgnoreCase);
diff --git a/src/gregModLoader/gregEventDispatcher.cs b/src/gregModLoader/gregEventDispatcher.cs
index 7c3036ae..902626e8 100644
--- a/src/gregModLoader/gregEventDispatcher.cs
+++ b/src/gregModLoader/gregEventDispatcher.cs
@@ -60,6 +60,51 @@ public static class EventIds
// hook bridge introspection (11xx) — keep in sync with dc_api / gregCore.EventIds history
public const uint HookBridgeInstalled = 1100;
public const uint HookBridgeTriggered = 1101;
+
+ // finance / balance sheet extensions (12xx)
+ public const uint RatesCalculated = 1200;
+ public const uint BalanceSheetScreenOpened = 1201;
+ public const uint BalanceSheetRecordAccessed = 1202;
+ public const uint BalanceSheetTrackFinances = 1203;
+ public const uint BalanceSheetFilled = 1204;
+ public const uint BalanceSheetTotalRowAdded = 1205;
+ public const uint BalanceSheetSalaryRegistered = 1206;
+ public const uint BalanceSheetRecordRestored = 1207;
+ public const uint BalanceSheetDataSaved = 1208;
+ public const uint BalanceSheetDataLoaded = 1209;
+ public const uint BalanceSheetLatestSnapshotRequested = 1210;
+ public const uint ShopCartTotalUpdated = 1211;
+ public const uint ShopNewItemPurchased = 1212;
+ public const uint ShopAnotherItemPurchased = 1213;
+ public const uint ShopPhysicalItemSpawned = 1214;
+
+ // customer extensions (13xx)
+ public const uint CustomerComponentInitialized = 1300;
+ public const uint CustomerServerCountAndSpeedChanged = 1301;
+ public const uint CustomerAppPerformanceAdded = 1302;
+ public const uint CustomerAppSpeedsReset = 1303;
+ public const uint CustomerBaseSetup = 1304;
+ public const uint CustomerAppSetup = 1305;
+ public const uint CustomerSpeedOnAppChanged = 1306;
+ public const uint CustomerDataLoaded = 1307;
+ public const uint CustomerDoorClicked = 1308;
+ public const uint CustomerDoorHovered = 1309;
+ public const uint CustomerDoorOpenedAndSetup = 1310;
+ public const uint CustomerDoorOpened = 1311;
+ public const uint CustomerDoorLoaded = 1312;
+ public const uint CustomerDoorDestroyed = 1313;
+ public const uint CustomerCardSet = 1314;
+ public const uint CustomerChoiceCanceled = 1315;
+ public const uint CustomerCardsCanvasShown = 1316;
+ public const uint CustomerFallbackCreated = 1317;
+ public const uint CustomerTotalRequirementRequested = 1318;
+ public const uint CustomerSuitabilityChecked = 1319;
+ public const uint NetworkCustomerBaseRegistered = 1320;
+ public const uint NetworkCustomerBaseRequested = 1321;
+ public const uint NetworkDeviceCustomerIdChanged = 1322;
+ public const uint ServerChangeCustomerClicked = 1323;
+ public const uint ServerNextCustomerIdRequested = 1324;
+ public const uint ServerCustomerIdRequested = 1325;
}
// must match rust repr(C) layouts
@@ -135,6 +180,61 @@ public struct NetWatchDispatchedData
public int Reason; // 0 = broken, 1 = eol_warning
}
+[StructLayout(LayoutKind.Sequential)]
+public struct RatesCalculatedData
+{
+ public double MoneyPerSec;
+ public double XpPerSec;
+ public double ExpensesPerSec;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct BalanceSheetTotalRowData
+{
+ public double Revenue;
+ public double Penalties;
+ public double Total;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct BalanceSheetSalaryRegisteredData
+{
+ public int MonthlySalary;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct CustomerBaseIdData
+{
+ public int CustomerBaseId;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct CustomerAppSpeedData
+{
+ public int AppId;
+ public float Speed;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct CustomerCountSpeedData
+{
+ public int Count;
+ public float Speed;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct CustomerAppSetupData
+{
+ public int AppId;
+ public int Difficulty;
+}
+
+[StructLayout(LayoutKind.Sequential)]
+public struct CustomerBoolResultData
+{
+ public int Value;
+}
+
[StructLayout(LayoutKind.Sequential)]
public struct CustomEmployeeEventData
{
@@ -400,6 +500,224 @@ public static class EventDispatcher
CrashLog.Log($"FireHookBridgeTriggered: method={methodKey}");
FireSimple(EventIds.HookBridgeTriggered);
}
+
+ public static void FireRatesCalculated(double moneyPerSec, double xpPerSec, double expensesPerSec)
+ {
+ DispatchWithData(EventIds.RatesCalculated, new RatesCalculatedData
+ {
+ MoneyPerSec = moneyPerSec,
+ XpPerSec = xpPerSec,
+ ExpensesPerSec = expensesPerSec
+ }, moneyPerSec + xpPerSec * 31.0 + expensesPerSec * 97.0);
+ }
+
+ public static void FireBalanceSheetScreenOpened()
+ {
+ FireSimple(EventIds.BalanceSheetScreenOpened);
+ }
+
+ public static void FireBalanceSheetRecordAccessed()
+ {
+ FireSimple(EventIds.BalanceSheetRecordAccessed);
+ }
+
+ public static void FireBalanceSheetTrackFinances()
+ {
+ FireSimple(EventIds.BalanceSheetTrackFinances);
+ }
+
+ public static void FireBalanceSheetFilled()
+ {
+ FireSimple(EventIds.BalanceSheetFilled);
+ }
+
+ public static void FireBalanceSheetTotalRowAdded(double revenue, double penalties, double total)
+ {
+ DispatchWithData(EventIds.BalanceSheetTotalRowAdded, new BalanceSheetTotalRowData
+ {
+ Revenue = revenue,
+ Penalties = penalties,
+ Total = total,
+ }, revenue + penalties * 31.0 + total * 97.0);
+ }
+
+ public static void FireBalanceSheetSalaryRegistered(int monthlySalary)
+ {
+ DispatchWithData(EventIds.BalanceSheetSalaryRegistered, new BalanceSheetSalaryRegisteredData
+ {
+ MonthlySalary = monthlySalary,
+ }, monthlySalary);
+ }
+
+ public static void FireBalanceSheetRecordRestored()
+ {
+ FireSimple(EventIds.BalanceSheetRecordRestored);
+ }
+
+ public static void FireBalanceSheetDataSaved()
+ {
+ FireSimple(EventIds.BalanceSheetDataSaved);
+ }
+
+ public static void FireBalanceSheetDataLoaded()
+ {
+ FireSimple(EventIds.BalanceSheetDataLoaded);
+ }
+
+ public static void FireBalanceSheetLatestSnapshotRequested()
+ {
+ FireSimple(EventIds.BalanceSheetLatestSnapshotRequested);
+ }
+
+ public static void FireShopCartTotalUpdated()
+ {
+ FireSimple(EventIds.ShopCartTotalUpdated);
+ }
+
+ public static void FireShopNewItemPurchased(int itemId, int price, int itemType)
+ {
+ DispatchWithData(EventIds.ShopNewItemPurchased, new ShopItemAddedData { ItemId = itemId, Price = price, ItemType = itemType }, itemId * 1000.0 + price + itemType * 0.1);
+ }
+
+ public static void FireShopAnotherItemPurchased(int itemId, int price, int itemType)
+ {
+ DispatchWithData(EventIds.ShopAnotherItemPurchased, new ShopItemAddedData { ItemId = itemId, Price = price, ItemType = itemType }, itemId * 1000.0 + price + itemType * 0.1 + 0.5);
+ }
+
+ public static void FireShopPhysicalItemSpawned(int price, int itemType)
+ {
+ DispatchWithData(EventIds.ShopPhysicalItemSpawned, new ShopItemAddedData { ItemId = -1, Price = price, ItemType = itemType }, price + itemType * 0.1);
+ }
+
+ public static void FireCustomerComponentInitialized(int customerBaseId)
+ {
+ DispatchWithData(EventIds.CustomerComponentInitialized, new CustomerBaseIdData { CustomerBaseId = customerBaseId }, customerBaseId);
+ }
+
+ public static void FireCustomerServerCountAndSpeedChanged(int count, float speed)
+ {
+ DispatchWithData(EventIds.CustomerServerCountAndSpeedChanged, new CustomerCountSpeedData { Count = count, Speed = speed }, count + speed * 31.0);
+ }
+
+ public static void FireCustomerAppPerformanceAdded(int appId, float speed)
+ {
+ DispatchWithData(EventIds.CustomerAppPerformanceAdded, new CustomerAppSpeedData { AppId = appId, Speed = speed }, appId + speed * 31.0);
+ }
+
+ public static void FireCustomerAppSpeedsReset(int customerBaseId)
+ {
+ DispatchWithData(EventIds.CustomerAppSpeedsReset, new CustomerBaseIdData { CustomerBaseId = customerBaseId }, customerBaseId);
+ }
+
+ public static void FireCustomerBaseSetup(int customerBaseId)
+ {
+ DispatchWithData(EventIds.CustomerBaseSetup, new CustomerBaseIdData { CustomerBaseId = customerBaseId }, customerBaseId);
+ }
+
+ public static void FireCustomerAppSetup(int appId, int difficulty)
+ {
+ DispatchWithData(EventIds.CustomerAppSetup, new CustomerAppSetupData { AppId = appId, Difficulty = difficulty }, appId + difficulty * 31.0);
+ }
+
+ public static void FireCustomerSpeedOnAppChanged(int appId, float speed)
+ {
+ DispatchWithData(EventIds.CustomerSpeedOnAppChanged, new CustomerAppSpeedData { AppId = appId, Speed = speed }, appId + speed * 31.0);
+ }
+
+ public static void FireCustomerDataLoaded(int customerBaseId)
+ {
+ DispatchWithData(EventIds.CustomerDataLoaded, new CustomerBaseIdData { CustomerBaseId = customerBaseId }, customerBaseId);
+ }
+
+ public static void FireCustomerDoorClicked()
+ {
+ FireSimple(EventIds.CustomerDoorClicked);
+ }
+
+ public static void FireCustomerDoorHovered()
+ {
+ FireSimple(EventIds.CustomerDoorHovered);
+ }
+
+ public static void FireCustomerDoorOpenedAndSetup()
+ {
+ FireSimple(EventIds.CustomerDoorOpenedAndSetup);
+ }
+
+ public static void FireCustomerDoorOpened()
+ {
+ FireSimple(EventIds.CustomerDoorOpened);
+ }
+
+ public static void FireCustomerDoorLoaded()
+ {
+ FireSimple(EventIds.CustomerDoorLoaded);
+ }
+
+ public static void FireCustomerDoorDestroyed()
+ {
+ FireSimple(EventIds.CustomerDoorDestroyed);
+ }
+
+ public static void FireCustomerCardSet()
+ {
+ FireSimple(EventIds.CustomerCardSet);
+ }
+
+ public static void FireCustomerChoiceCanceled()
+ {
+ FireSimple(EventIds.CustomerChoiceCanceled);
+ }
+
+ public static void FireCustomerCardsCanvasShown()
+ {
+ FireSimple(EventIds.CustomerCardsCanvasShown);
+ }
+
+ public static void FireCustomerFallbackCreated(int customerId)
+ {
+ DispatchWithData(EventIds.CustomerFallbackCreated, new CustomerAcceptedData { CustomerId = customerId }, customerId);
+ }
+
+ public static void FireCustomerTotalRequirementRequested()
+ {
+ FireSimple(EventIds.CustomerTotalRequirementRequested);
+ }
+
+ public static void FireCustomerSuitabilityChecked(bool isSuitable)
+ {
+ DispatchWithData(EventIds.CustomerSuitabilityChecked, new CustomerBoolResultData { Value = isSuitable ? 1 : 0 }, isSuitable ? 1.0 : 0.0);
+ }
+
+ public static void FireNetworkCustomerBaseRegistered(int customerBaseId)
+ {
+ DispatchWithData(EventIds.NetworkCustomerBaseRegistered, new CustomerBaseIdData { CustomerBaseId = customerBaseId }, customerBaseId);
+ }
+
+ public static void FireNetworkCustomerBaseRequested(int customerBaseId)
+ {
+ DispatchWithData(EventIds.NetworkCustomerBaseRequested, new CustomerBaseIdData { CustomerBaseId = customerBaseId }, customerBaseId);
+ }
+
+ public static void FireNetworkDeviceCustomerIdChanged(int customerId)
+ {
+ DispatchWithData(EventIds.NetworkDeviceCustomerIdChanged, new CustomerAcceptedData { CustomerId = customerId }, customerId);
+ }
+
+ public static void FireServerChangeCustomerClicked()
+ {
+ FireSimple(EventIds.ServerChangeCustomerClicked);
+ }
+
+ public static void FireServerNextCustomerIdRequested(int customerId)
+ {
+ DispatchWithData(EventIds.ServerNextCustomerIdRequested, new CustomerAcceptedData { CustomerId = customerId }, customerId);
+ }
+
+ public static void FireServerCustomerIdRequested(int customerId)
+ {
+ DispatchWithData(EventIds.ServerCustomerIdRequested, new CustomerAcceptedData { CustomerId = customerId }, customerId);
+ }
}
diff --git a/src/gregModLoader/gregHarmonyPatches.cs b/src/gregModLoader/gregHarmonyPatches.cs
index 65d108ff..0ad5395b 100644
--- a/src/gregModLoader/gregHarmonyPatches.cs
+++ b/src/gregModLoader/gregHarmonyPatches.cs
@@ -516,6 +516,426 @@ internal static class Patch_ComputerShop_RemoveSpawnedItem
}
}
+[HarmonyPatch(typeof(StaticUIElements), nameof(StaticUIElements.CalculateRates))]
+internal static class Patch_StaticUIElements_CalculateRates
+{
+ internal static void Postfix(ref float moneyPerSec, ref float xpPerSec, ref float expensesPerSec)
+ {
+ try { EventDispatcher.FireRatesCalculated(moneyPerSec, xpPerSec, expensesPerSec); }
+ catch (Exception ex) { EventDispatcher.LogError($"CalculateRates: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(ComputerShop), nameof(ComputerShop.ButtonBalanceSheetScreen))]
+internal static class Patch_ComputerShop_ButtonBalanceSheetScreen
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetScreenOpened(); }
+ catch (Exception ex) { EventDispatcher.LogError($"ButtonBalanceSheetScreen: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.GetOrCreateRecord))]
+internal static class Patch_BalanceSheet_GetOrCreateRecord
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetRecordAccessed(); }
+ catch (Exception ex) { EventDispatcher.LogError($"GetOrCreateRecord: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.TrackFinances))]
+internal static class Patch_BalanceSheet_TrackFinances
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetTrackFinances(); }
+ catch (Exception ex) { EventDispatcher.LogError($"TrackFinances: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.FillInBalanceSheet))]
+internal static class Patch_BalanceSheet_FillInBalanceSheet
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetFilled(); }
+ catch (Exception ex) { EventDispatcher.LogError($"FillInBalanceSheet: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.AddTotalRow))]
+internal static class Patch_BalanceSheet_AddTotalRow
+{
+ internal static void Postfix(float __0, float __1, float __2)
+ {
+ try { EventDispatcher.FireBalanceSheetTotalRowAdded(__0, __1, __2); }
+ catch (Exception ex) { EventDispatcher.LogError($"AddTotalRow: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.RegisterSalary))]
+internal static class Patch_BalanceSheet_RegisterSalary
+{
+ internal static void Postfix(int __0)
+ {
+ try { EventDispatcher.FireBalanceSheetSalaryRegistered(__0); }
+ catch (Exception ex) { EventDispatcher.LogError($"RegisterSalary: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.RestoreRecord))]
+internal static class Patch_BalanceSheet_RestoreRecord
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetRecordRestored(); }
+ catch (Exception ex) { EventDispatcher.LogError($"RestoreRecord: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.GetSaveData))]
+internal static class Patch_BalanceSheet_GetSaveData
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetDataSaved(); }
+ catch (Exception ex) { EventDispatcher.LogError($"GetSaveData: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.LoadFromSave))]
+internal static class Patch_BalanceSheet_LoadFromSave
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetDataLoaded(); }
+ catch (Exception ex) { EventDispatcher.LogError($"LoadFromSave: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(BalanceSheet), nameof(BalanceSheet.GetLatestSnapshot))]
+internal static class Patch_BalanceSheet_GetLatestSnapshot
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireBalanceSheetLatestSnapshotRequested(); }
+ catch (Exception ex) { EventDispatcher.LogError($"GetLatestSnapshot: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(ComputerShop), nameof(ComputerShop.UpdateCartTotal))]
+internal static class Patch_ComputerShop_UpdateCartTotal
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireShopCartTotalUpdated(); }
+ catch (Exception ex) { EventDispatcher.LogError($"UpdateCartTotal: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(ComputerShop), nameof(ComputerShop.BuyNewItem))]
+internal static class Patch_ComputerShop_BuyNewItem
+{
+ internal static void Postfix(int __0, int __1, int __2)
+ {
+ try { EventDispatcher.FireShopNewItemPurchased(__0, __1, __2); }
+ catch (Exception ex) { EventDispatcher.LogError($"BuyNewItem: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(ComputerShop), nameof(ComputerShop.BuyAnotherItem))]
+internal static class Patch_ComputerShop_BuyAnotherItem
+{
+ internal static void Postfix(int __0, int __1, int __2)
+ {
+ try { EventDispatcher.FireShopAnotherItemPurchased(__0, __1, __2); }
+ catch (Exception ex) { EventDispatcher.LogError($"BuyAnotherItem: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(ComputerShop), nameof(ComputerShop.SpawnPhysicalItem))]
+internal static class Patch_ComputerShop_SpawnPhysicalItem
+{
+ internal static void Postfix(int __1, int __2)
+ {
+ try { EventDispatcher.FireShopPhysicalItemSpawned(__1, __2); }
+ catch (Exception ex) { EventDispatcher.LogError($"SpawnPhysicalItem: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.Awake))]
+internal static class Patch_CustomerBase_Awake
+{
+ internal static void Postfix(CustomerBase __instance)
+ {
+ try { EventDispatcher.FireCustomerComponentInitialized(__instance.customerBaseID); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.Awake: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.Start))]
+internal static class Patch_CustomerBase_Start
+{
+ internal static void Postfix(CustomerBase __instance)
+ {
+ try { EventDispatcher.FireCustomerComponentInitialized(__instance.customerBaseID); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.Start: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.UpdateCustomerServerCountAndSpeed))]
+internal static class Patch_CustomerBase_UpdateCustomerServerCountAndSpeed
+{
+ internal static void Postfix(int __0, float __1)
+ {
+ try { EventDispatcher.FireCustomerServerCountAndSpeedChanged(__0, __1); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.UpdateCustomerServerCountAndSpeed: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.AddAppPerformance))]
+internal static class Patch_CustomerBase_AddAppPerformance
+{
+ internal static void Postfix(int __0, float __1)
+ {
+ try { EventDispatcher.FireCustomerAppPerformanceAdded(__0, __1); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.AddAppPerformance: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.ResetAllAppSpeeds))]
+internal static class Patch_CustomerBase_ResetAllAppSpeeds
+{
+ internal static void Postfix(CustomerBase __instance)
+ {
+ try { EventDispatcher.FireCustomerAppSpeedsReset(__instance.customerBaseID); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.ResetAllAppSpeeds: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.SetUpBase))]
+internal static class Patch_CustomerBase_SetUpBase
+{
+ internal static void Postfix(CustomerBase __instance)
+ {
+ try { EventDispatcher.FireCustomerBaseSetup(__instance.customerBaseID); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.SetUpBase: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.SetUpApp))]
+internal static class Patch_CustomerBase_SetUpApp
+{
+ internal static void Postfix(int __0, int __1)
+ {
+ try { EventDispatcher.FireCustomerAppSetup(__0, __1); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.SetUpApp: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.UpdateSpeedOnCustomerBaseApp))]
+internal static class Patch_CustomerBase_UpdateSpeedOnCustomerBaseApp
+{
+ internal static void Postfix(int __0, float __1)
+ {
+ try { EventDispatcher.FireCustomerSpeedOnAppChanged(__0, __1); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.UpdateSpeedOnCustomerBaseApp: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBase), nameof(CustomerBase.LoadData))]
+internal static class Patch_CustomerBase_LoadData
+{
+ internal static void Postfix(CustomerBase __instance)
+ {
+ try { EventDispatcher.FireCustomerDataLoaded(__instance.customerBaseID); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBase.LoadData: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBaseDoor), nameof(CustomerBaseDoor.InteractOnClick))]
+internal static class Patch_CustomerBaseDoor_InteractOnClick
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerDoorClicked(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBaseDoor.InteractOnClick: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBaseDoor), nameof(CustomerBaseDoor.InteractOnHover))]
+internal static class Patch_CustomerBaseDoor_InteractOnHover
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerDoorHovered(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBaseDoor.InteractOnHover: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBaseDoor), nameof(CustomerBaseDoor.OpenDoorAndSetupBase))]
+internal static class Patch_CustomerBaseDoor_OpenDoorAndSetupBase
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerDoorOpenedAndSetup(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBaseDoor.OpenDoorAndSetupBase: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBaseDoor), nameof(CustomerBaseDoor.OpenDoor))]
+internal static class Patch_CustomerBaseDoor_OpenDoor
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerDoorOpened(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBaseDoor.OpenDoor: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBaseDoor), nameof(CustomerBaseDoor.OnLoad))]
+internal static class Patch_CustomerBaseDoor_OnLoad
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerDoorLoaded(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBaseDoor.OnLoad: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerBaseDoor), nameof(CustomerBaseDoor.OnDestroy))]
+internal static class Patch_CustomerBaseDoor_OnDestroy
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerDoorDestroyed(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerBaseDoor.OnDestroy: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(CustomerCard), nameof(CustomerCard.SetCustomer))]
+internal static class Patch_CustomerCard_SetCustomer
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerCardSet(); }
+ catch (Exception ex) { EventDispatcher.LogError($"CustomerCard.SetCustomer: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(MainGameManager), nameof(MainGameManager.ButtonCancelCustomerChoice))]
+internal static class Patch_MainGameManager_ButtonCancelCustomerChoice
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerChoiceCanceled(); }
+ catch (Exception ex) { EventDispatcher.LogError($"MainGameManager.ButtonCancelCustomerChoice: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(MainGameManager), nameof(MainGameManager.ShowCustomerCardsCanvas))]
+internal static class Patch_MainGameManager_ShowCustomerCardsCanvas
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerCardsCanvasShown(); }
+ catch (Exception ex) { EventDispatcher.LogError($"MainGameManager.ShowCustomerCardsCanvas: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(MainGameManager), nameof(MainGameManager.CreateFallbackCustomer))]
+internal static class Patch_MainGameManager_CreateFallbackCustomer
+{
+ internal static void Postfix(int __1)
+ {
+ try { EventDispatcher.FireCustomerFallbackCreated(__1); }
+ catch (Exception ex) { EventDispatcher.LogError($"MainGameManager.CreateFallbackCustomer: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(MainGameManager), nameof(MainGameManager.GetCustomerTotalRequirement))]
+internal static class Patch_MainGameManager_GetCustomerTotalRequirement
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireCustomerTotalRequirementRequested(); }
+ catch (Exception ex) { EventDispatcher.LogError($"MainGameManager.GetCustomerTotalRequirement: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(MainGameManager), nameof(MainGameManager.IsCustomerSuitableForBase))]
+internal static class Patch_MainGameManager_IsCustomerSuitableForBase
+{
+ internal static void Postfix(ref bool __result)
+ {
+ try { EventDispatcher.FireCustomerSuitabilityChecked(__result); }
+ catch (Exception ex) { EventDispatcher.LogError($"MainGameManager.IsCustomerSuitableForBase: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(NetworkMap), nameof(NetworkMap.RegisterCustomerBase))]
+internal static class Patch_NetworkMap_RegisterCustomerBase
+{
+ internal static void Postfix(CustomerBase __0)
+ {
+ try { EventDispatcher.FireNetworkCustomerBaseRegistered(__0 != null ? __0.customerBaseID : -1); }
+ catch (Exception ex) { EventDispatcher.LogError($"NetworkMap.RegisterCustomerBase: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(NetworkMap), nameof(NetworkMap.GetCustomerBase))]
+internal static class Patch_NetworkMap_GetCustomerBase
+{
+ internal static void Postfix(int __0)
+ {
+ try { EventDispatcher.FireNetworkCustomerBaseRequested(__0); }
+ catch (Exception ex) { EventDispatcher.LogError($"NetworkMap.GetCustomerBase: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(NetworkMap), nameof(NetworkMap.UpdateDeviceCustomerID))]
+internal static class Patch_NetworkMap_UpdateDeviceCustomerID
+{
+ internal static void Postfix(int __1)
+ {
+ try { EventDispatcher.FireNetworkDeviceCustomerIdChanged(__1); }
+ catch (Exception ex) { EventDispatcher.LogError($"NetworkMap.UpdateDeviceCustomerID: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(Server), nameof(Server.ButtonClickChangeCustomer))]
+internal static class Patch_Server_ButtonClickChangeCustomer
+{
+ internal static void Postfix()
+ {
+ try { EventDispatcher.FireServerChangeCustomerClicked(); }
+ catch (Exception ex) { EventDispatcher.LogError($"Server.ButtonClickChangeCustomer: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(Server), nameof(Server.GetNextCustomerID))]
+internal static class Patch_Server_GetNextCustomerID
+{
+ internal static void Postfix(ref int __result)
+ {
+ try { EventDispatcher.FireServerNextCustomerIdRequested(__result); }
+ catch (Exception ex) { EventDispatcher.LogError($"Server.GetNextCustomerID: {ex.Message}"); }
+ }
+}
+
+[HarmonyPatch(typeof(Server), nameof(Server.GetCustomerID))]
+internal static class Patch_Server_GetCustomerID
+{
+ internal static void Postfix(ref int __result)
+ {
+ try { EventDispatcher.FireServerCustomerIdRequested(__result); }
+ catch (Exception ex) { EventDispatcher.LogError($"Server.GetCustomerID: {ex.Message}"); }
+ }
+}
+
diff --git a/src/gregModLoader/gregRuntimeHookService.cs b/src/gregModLoader/gregRuntimeHookService.cs
index 8bd94c8b..50354cf1 100644
--- a/src/gregModLoader/gregRuntimeHookService.cs
+++ b/src/gregModLoader/gregRuntimeHookService.cs
@@ -30,9 +30,13 @@ namespace greg.Exporter
private static readonly ConcurrentDictionary PatchedMethods = new ConcurrentDictionary();
private readonly string harmonyId = "greg.framework.runtimehooks";
- private static readonly Regex CatalogLineRegex = new Regex(
- "^runtime_trigger \\| asm=Assembly-CSharp \\| type=(?[^|]+) \\| method=(?.+)$",
- RegexOptions.Compiled | RegexOptions.CultureInvariant);
+ private static readonly Regex CatalogPipeFormatRegex = new Regex(
+ "^runtime_trigger\\s*\\|\\s*asm=(?[^|]+?)\\s*\\|\\s*type=(?[^|]+?)\\s*\\|\\s*method=(?.+)$",
+ RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
+
+ private static readonly Regex CatalogBracketFormatRegex = new Regex(
+ "^runtimetrigger\\s+asm\\[(?[^\\]]+)\\]\\s+type\\[(?[^\\]]+)\\]\\s+method\\[(?[^\\]]+)\\]$",
+ RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
public HookScanResult ScanCandidates(int maxHooks)
{
@@ -134,10 +138,17 @@ namespace greg.Exporter
foreach (string line in File.ReadLines(catalogPath))
{
- if (!TryParseCatalogLine(line, out string typeName, out string methodName))
+ if (!TryParseCatalogLine(line, out string assemblyName, out string typeName, out string methodName))
continue;
- if (!typeMap.TryGetValue(typeName, out Type type) || type == null)
+ string assemblyScopedTypeKey = BuildAssemblyTypeKey(assemblyName, typeName);
+
+ if (!typeMap.TryGetValue(assemblyScopedTypeKey, out Type type) || type == null)
+ {
+ typeMap.TryGetValue(typeName, out type);
+ }
+
+ if (type == null)
continue;
MethodInfo[] methods;
@@ -194,26 +205,43 @@ namespace greg.Exporter
continue;
map[type.FullName] = type;
+ map[BuildAssemblyTypeKey(asmName, type.FullName)] = type;
}
}
return map;
}
- private static bool TryParseCatalogLine(string line, out string typeName, out string methodName)
+ private static string BuildAssemblyTypeKey(string assemblyName, string typeName)
{
+ return $"{assemblyName?.Trim() ?? string.Empty}::{typeName?.Trim() ?? string.Empty}";
+ }
+
+ private static bool TryParseCatalogLine(string line, out string assemblyName, out string typeName, out string methodName)
+ {
+ assemblyName = string.Empty;
typeName = string.Empty;
methodName = string.Empty;
if (string.IsNullOrWhiteSpace(line))
return false;
- Match match = CatalogLineRegex.Match(line);
- if (!match.Success)
+ Match pipeMatch = CatalogPipeFormatRegex.Match(line.Trim());
+ if (pipeMatch.Success)
+ {
+ assemblyName = pipeMatch.Groups["asm"].Value.Trim();
+ typeName = pipeMatch.Groups["type"].Value.Trim();
+ methodName = pipeMatch.Groups["method"].Value.Trim();
+ return !string.IsNullOrWhiteSpace(typeName) && !string.IsNullOrWhiteSpace(methodName);
+ }
+
+ Match bracketMatch = CatalogBracketFormatRegex.Match(line.Trim());
+ if (!bracketMatch.Success)
return false;
- typeName = match.Groups["type"].Value.Trim();
- methodName = match.Groups["method"].Value.Trim();
+ assemblyName = bracketMatch.Groups["asm"].Value.Trim();
+ typeName = bracketMatch.Groups["type"].Value.Trim();
+ methodName = bracketMatch.Groups["method"].Value.Trim();
return !string.IsNullOrWhiteSpace(typeName) && !string.IsNullOrWhiteSpace(methodName);
}
@@ -296,7 +324,22 @@ namespace greg.Exporter
private static bool IsRelevantAssembly(string assemblyName)
{
- return string.Equals(assemblyName, "Assembly-CSharp", StringComparison.OrdinalIgnoreCase);
+ if (string.IsNullOrWhiteSpace(assemblyName))
+ return false;
+
+ if (string.Equals(assemblyName, "Assembly-CSharp", StringComparison.OrdinalIgnoreCase))
+ return true;
+
+ if (assemblyName.StartsWith("Il2Cpp", StringComparison.OrdinalIgnoreCase))
+ return true;
+
+ if (assemblyName.StartsWith("Unity", StringComparison.OrdinalIgnoreCase))
+ return true;
+
+ if (assemblyName.StartsWith("UnityEngine", StringComparison.OrdinalIgnoreCase))
+ return true;
+
+ return false;
}
private static bool IsHookCandidate(MethodInfo method)
diff --git a/src/gregSdk/Services/GregPowerService.cs b/src/gregSdk/Services/GregPowerService.cs
index a003e146..7e4063d2 100644
--- a/src/gregSdk/Services/GregPowerService.cs
+++ b/src/gregSdk/Services/GregPowerService.cs
@@ -1,14 +1,30 @@
+using System.Collections.Concurrent;
+
namespace greg.Sdk.Services;
public static class GregPowerService
{
+ private static readonly ConcurrentDictionary _powerConsumers = new();
+
public static int GetTotalPowerDraw(string topologyZoneId)
{
- // TODO: Calculate power consumption
- return 0;
+ // Currently ignoring topologyZoneId, calculating global mod power draw
+ int total = 0;
+ foreach (var val in _powerConsumers.Values)
+ {
+ total += val;
+ }
+ return total;
}
- public static void RegisterConsumer(string deviceId, int watts) { }
- public static void UnregisterConsumer(string deviceId) { }
+ public static void RegisterConsumer(string deviceId, int watts)
+ {
+ _powerConsumers[deviceId] = watts;
+ }
+
+ public static void UnregisterConsumer(string deviceId)
+ {
+ _powerConsumers.TryRemove(deviceId, out _);
+ }
}
diff --git a/src/gregSdk/Services/GregRouteEvaluationService.cs b/src/gregSdk/Services/GregRouteEvaluationService.cs
index 9f6bb5c2..164386e6 100644
--- a/src/gregSdk/Services/GregRouteEvaluationService.cs
+++ b/src/gregSdk/Services/GregRouteEvaluationService.cs
@@ -9,18 +9,18 @@ namespace greg.Sdk.Services
///
public static class GregRouteEvaluationService
{
- private static readonly Dictionary>> _routeCache = new();
+ private static readonly Dictionary>> _routeCache = new();
///
/// Attempts to get a cached route (Pointer-Swap optimization).
///
- public static bool TryGetCachedRoute(string baseName, string serverName, out List> routes)
+ public static bool TryGetCachedRoute(string baseName, string serverName, out Il2CppSystem.Collections.Generic.List> routes)
{
string key = $"{baseName}->{serverName}";
return _routeCache.TryGetValue(key, out routes);
}
- public static void CacheRoute(string baseName, string serverName, List> routes)
+ public static void CacheRoute(string baseName, string serverName, Il2CppSystem.Collections.Generic.List> routes)
{
string key = $"{baseName}->{serverName}";
_routeCache[key] = routes;
diff --git a/src/gregSdk/Services/GregSaveService.cs b/src/gregSdk/Services/GregSaveService.cs
index aa4651fc..b4b95a9e 100644
--- a/src/gregSdk/Services/GregSaveService.cs
+++ b/src/gregSdk/Services/GregSaveService.cs
@@ -29,6 +29,48 @@ public static class GregSaveService
private static string GetPath(string modId) => Path.Combine(BaseSavePath, $"{modId}.json");
+ ///
+ /// Gets the native mod save data from the game's new SaveSystem if available.
+ ///
+ public static Il2Cpp.ModItemSaveData GetNativeModData(string modId)
+ {
+ var currentSave = Il2Cpp.SaveData._current;
+ if (currentSave == null || currentSave.modItemData == null) return null;
+
+ foreach (var data in currentSave.modItemData)
+ {
+ if (data.modFolderName == modId)
+ return data;
+ }
+ return null;
+ }
+
+ ///
+ /// Creates or updates native save data for a mod.
+ ///
+ public static Il2Cpp.ModItemSaveData GetOrCreateNativeModData(string modId)
+ {
+ var currentSave = Il2Cpp.SaveData._current;
+ if (currentSave == null) return null;
+
+ if (currentSave.modItemData == null)
+ currentSave.modItemData = new Il2CppSystem.Collections.Generic.List();
+
+ var existing = GetNativeModData(modId);
+ if (existing != null) return existing;
+
+ var newData = new Il2Cpp.ModItemSaveData
+ {
+ modFolderName = modId,
+ saveValue = new Il2CppInterop.Runtime.InteropTypes.Arrays.Il2CppStructArray(0),
+ saveIntArray = new Il2CppInterop.Runtime.InteropTypes.Arrays.Il2CppStructArray