using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using HarmonyLib; using Il2CppInterop.Runtime.InteropTypes.Arrays; using RecRoom.Core.GameManagement; using undead_universal_patch_il2cpp.Core; using undead_universal_patch_il2cpp.Core.UndeadGameManager; namespace undead_universal_patch_il2cpp.Patches.UndeadGameManager; [HarmonyPatch] public class TeamConfiguratorPatch { static List gameConfig = TeamConfigurator.config.Get(); static string TargetTypeName = "GameConfigurationTool"; static string TargetMethodName = "SetGameConfiguration"; static string Description = "TeamConfigurator event patch"; static Type targetType = AccessTools.TypeByName(TargetTypeName); static MethodInfo targetMethod = AccessTools.Method(targetType, TargetMethodName); public static bool Prepare() { if (!GameManagerConfig.StaticGameTeamConfig.Value) return false; if (targetMethod == 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() => targetMethod; public static void Prefix(ref GameConfigurationAsset config, ref bool showNotification) { var conf = config; showNotification = GenericConfig.PatchDebug.Value; var teamConf = gameConfig.Find(match => match.GameName == conf.Name); if (teamConf == null) { if (GenericConfig.PatchDebug.Value) Plugin.Log.LogDebug($"'{config.Name}' does not have explicit team configurations"); return; } var arr = new Il2CppStructArray(teamConf.TeamConfigurations.Count); for (int i = 0; i < arr.Length; i++) arr[i] = new TeamConfiguration { MaxTeamSize = teamConf.TeamConfigurations[i].Size }; config.TeamConfigurations = arr; if (GenericConfig.PatchDebug.Value) Plugin.Log.LogDebug($"New team configuration length for '{config.Name}': {arr.Length}"); } }