Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of GeneticVariantsPatch v0.4.0
GeneticVariantsPatch.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GeneticsArtifact; using On.RoR2; using R2API.Utils; using RoR2; using UnityEngine; using UnityEngine.Networking; using VAPI; using VAPI.Components; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("GeneticVariantsPatch")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("GeneticVariantsPatch")] [assembly: AssemblyTitle("GeneticVariantsPatch")] [assembly: AssemblyVersion("1.0.0.0")] namespace GeneticVariantsPatch; [BepInPlugin("com.RicoValdezio.GeneticVariantsPatch", "GenVarPatch", "0.4.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class GeneticVariantsPatchPlugin : BaseUnityPlugin { public const string ModVer = "0.4.0"; public const string ModName = "GenVarPatch"; public const string ModGuid = "com.RicoValdezio.GeneticVariantsPatch"; public static GeneticVariantsPatchPlugin Instance; internal static ManualLogSource LogSource; public static ConfigEntry<bool> enableChanceTweaking; public static ConfigEntry<bool> enableGeneBlocking; public static ConfigEntry<float> maxGeneChanceInfluence; private void Awake() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_005b: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Expected O, but got Unknown //IL_0099: Expected O, but got Unknown //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00cd: Expected O, but got Unknown if ((Object)(object)Instance == (Object)null) { Instance = this; } LogSource = ((BaseUnityPlugin)Instance).Logger; enableChanceTweaking = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General Settings", "Enable Variant Chance Tweaking"), true, new ConfigDescription("If true, the patch will allow the fitness algorithm to change the chance of variants spawning", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>())); enableGeneBlocking = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("General Settings", "Enable Variant Gene Blocking"), true, new ConfigDescription("If true, the patch will prevent variants from receiving genetic bonus and from participating in the fitness algorithm", (AcceptableValueBase)(object)new AcceptableValueList<bool>(new bool[2] { true, false }), Array.Empty<object>())); maxGeneChanceInfluence = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("General Settings", "Maximum Gene Chance Effect"), 0.5f, new ConfigDescription("The max difference percentage (as a decimal) that the algorithm can change the variant spawn rate - 0.5 is ±50%", (AcceptableValueBase)null, Array.Empty<object>())); GeneVariantDriver.RegisterHooks(); } } public class GeneVariantBehaviour { public BodyIndex bodyIndex; internal MasterGeneBehaviour masterGene; internal VariantDef variantDef; public string variantName; public float originalSpawnRate; public float fitness; public double totalScore; public void EvaluateFitness() { float num = masterGene.templateGenes[(GeneStat)0]; float num2 = masterGene.templateGenes[(GeneStat)1]; float num3 = masterGene.templateGenes[(GeneStat)2]; float num4 = masterGene.templateGenes[(GeneStat)3]; float num5 = Mathf.Min(num / variantDef.healthMultiplier, variantDef.healthMultiplier / num); float num6 = Mathf.Min(num2 / variantDef.moveSpeedMultiplier, variantDef.moveSpeedMultiplier / num2); float num7 = Mathf.Min(num3 / variantDef.attackSpeedMultiplier, variantDef.attackSpeedMultiplier / num3); float num8 = Mathf.Min(num4 / variantDef.damageMultiplier, variantDef.damageMultiplier / num4); totalScore = num5 + num6 + num7 + num8; fitness = (float)(2.0 / Math.Pow(Math.Cosh(totalScore - 4.0), 1.6)); variantDef.spawnRate = Mathf.Clamp(originalSpawnRate * fitness, originalSpawnRate * (1f - GeneticVariantsPatchPlugin.maxGeneChanceInfluence.Value), originalSpawnRate * (1f + GeneticVariantsPatchPlugin.maxGeneChanceInfluence.Value)); } public void ResetSpawnRate() { variantDef.spawnRate = originalSpawnRate; } } public class GeneVariantDriver : NetworkBehaviour { public static GeneVariantDriver instance; internal static GeneVariantBehaviour[] geneVariantBehaviours; public static float timeSinceUpdate; internal static void RegisterHooks() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown Run.Start += new hook_Start(Run_Start); Run.onRunDestroyGlobal += Run_onRunDestroyGlobal; Stage.onServerStageBegin += Stage_onServerStageBegin; CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); } private static void Run_Start(orig_Start orig, Run self) { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); timeSinceUpdate = 0f; if (NetworkServer.active) { instance = ((Component)self).gameObject.AddComponent<GeneVariantDriver>(); VariantDef[] obj = (VariantDef[])typeof(VariantCatalog).GetField("_registeredVariants", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); geneVariantBehaviours = new GeneVariantBehaviour[obj.Length]; int num = 0; VariantDef[] array = obj; foreach (VariantDef val in array) { BodyIndex bodyIndex = BodyCatalog.FindBodyIndex(val.bodyName); geneVariantBehaviours[num] = new GeneVariantBehaviour { variantDef = val, originalSpawnRate = val.spawnRate, bodyIndex = bodyIndex, variantName = ((Object)val).name }; num++; } } } private static void Run_onRunDestroyGlobal(Run obj) { if (NetworkServer.active) { GeneVariantBehaviour[] array = geneVariantBehaviours; for (int i = 0; i < array.Length; i++) { array[i].ResetSpawnRate(); } } } private static void Stage_onServerStageBegin(Stage obj) { if (NetworkServer.active) { UpdateAllGeneVariants(); } } private static void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { if (NetworkServer.active && GeneticVariantsPatchPlugin.enableGeneBlocking.Value) { Inventory inventory = self.inventory; if (inventory != null && inventory.GetItemCount(GeneTokens.blockerDef) == 0) { BodyVariantManager component = ((Component)self).GetComponent<BodyVariantManager>(); if (component != null && component.variantsInBody?.Count > 0) { self.inventory.GiveItem(GeneTokens.blockerDef, 1); } } } orig.Invoke(self); } private void Update() { if (NetworkServer.active) { timeSinceUpdate += Time.deltaTime; if (timeSinceUpdate >= 60f) { UpdateAllGeneVariants(); } } } public static void UpdateAllGeneVariants() { if (!NetworkServer.active || !RunArtifactManager.instance.IsArtifactEnabled(ArtifactOfGenetics.artifactDef)) { return; } GeneVariantBehaviour[] array = geneVariantBehaviours; foreach (GeneVariantBehaviour behaviour in array) { if (behaviour.masterGene == null && !GeneEngineDriver.masterGenes.Any((MasterGeneBehaviour master) => master.bodyIndex == behaviour.bodyIndex)) { continue; } if (behaviour.masterGene == null) { behaviour.masterGene = GeneEngineDriver.masterGenes.First((MasterGeneBehaviour master) => master.bodyIndex == behaviour.bodyIndex); } if (GeneticVariantsPatchPlugin.enableChanceTweaking.Value) { behaviour.EvaluateFitness(); } } timeSinceUpdate = 0f; } }