using System; using System.Collections.Generic; using System.Reflection; using HarmonyLib; using undead_universal_patch_il2cpp.Core; using undead_universal_patch_il2cpp.Core.UndeadGameManager; namespace undead_universal_patch_il2cpp.Patches.UndeadGameManager; [HarmonyPatch] public class FreeSpawnsPatch_Array { public static List config = GameFreeSpawns.config.Get(); public static string TargetTypeName = "GamePlayerSpawnPoint"; public static string TargetMethodName = "Awake"; public static string Description = "FreeSpawns event patch"; public static Type targetType = AccessTools.TypeByName(TargetTypeName); public static bool Prepare() { if (!GameManagerConfig.AnyGameFreeSpawn.Value) return false; if (AccessTools.Method(targetType, TargetMethodName) == null) { Plugin.Log.LogWarning($"'{Description}' disabled. The method for this patch was not found."); return false; } Plugin.Log.LogInfo($"'{Description}' succeeded validation."); return true; } public static MethodBase TargetMethod() => AccessTools.Method(targetType, TargetMethodName); public static void Postfix(ref GamePlayerSpawnPoint __instance) { if (GenericConfig.PatchDebug.Value) Plugin.Log.LogDebug("Attempting FreeSpawns patch"); GameManager man = NetworkedSingletonMonoBehaviour.instance; if (man.CurrentGameConfiguration == null) { if (GenericConfig.PatchDebug.Value) Plugin.Log.LogDebug("CurrentGameConfiguration was null"); return; } if (man.CurrentGameConfiguration.configurationData == null) { if (GenericConfig.PatchDebug.Value) Plugin.Log.LogDebug("CurrentGameConfiguration.configurationData was null"); return; } if (!config.Contains(man.CurrentGameConfiguration.configurationData.Name)) { if (GenericConfig.PatchDebug.Value) Plugin.Log.LogDebug($"Game '{man.CurrentGameConfiguration.configurationData.Name}' is not specified by GameFreeSpawns"); return; } __instance.GameTeamPlayerIndex = GameTeamPlayerIndex.ANY_INDEX; } }