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 FasterBossWait2 v1.1.9
EvenFasterBossWait.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EvenFasterBossWait")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+6a5c6aebb9dbedb597f46ed9edca8b69d77e2b77")] [assembly: AssemblyProduct("EvenFasterBossWait")] [assembly: AssemblyTitle("EvenFasterBossWait")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace EvenFasterBossWait { public static class Extensions { public static bool victimIsMiniboss(this DamageReport report) { return (report?.victimMaster?.isMiniboss()).GetValueOrDefault(); } public static bool isMiniboss(this CharacterBody body) { return ((body == null) ? null : body.master?.isMiniboss()).GetValueOrDefault(); } public static bool isMiniboss(this CharacterMaster master) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return Hooks.Minibosses.Contains((master != null) ? master.masterIndex : MasterIndex.none); } public static EliteDef[] affixes(this CharacterBody body) { return body?.activeBuffsList?.ToList()?.FindAll(delegate(BuffIndex x) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) BuffDef buffDef = BuffCatalog.GetBuffDef(x); return buffDef != null && buffDef.isElite; }).ConvertAll((BuffIndex x) => BuffCatalog.GetBuffDef(x).eliteDef).ToArray() ?? Array.Empty<EliteDef>(); } public static bool isT2(this EliteDef elite) { return (CombatDirector.eliteTiers?.First((EliteTierDef x) => x.eliteTypes.Contains(Elites.Poison))?.eliteTypes?.Contains(elite)).GetValueOrDefault(); } } public class Hooks { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action<Run> <>9__4_0; public static Predicate<Category> <>9__4_11; public static hook_GenerateDirectorCardWeightedSelection <>9__4_1; public static hook_OnEnable <>9__4_2; public static hook_FixedUpdate <>9__4_3; public static hook_OnDisable <>9__4_4; public static hook_OnEnable <>9__4_5; public static Func<EliteDef, bool> <>9__4_16; public static Func<EliteDef, bool> <>9__4_15; public static Action<DamageReport> <>9__4_6; public static Action<BossGroup> <>9__4_7; public static hook_OnDisable <>9__4_8; public static hook_ApplyRate <>9__4_9; public static hook_ApplyRadius <>9__4_10; internal void <Patch>b__4_0(Run _) { ActiveZones.Clear(); BossKilled.Clear(); ChargeCredit.Clear(); } internal WeightedSelection<DirectorCard> <Patch>b__4_1(orig_GenerateDirectorCardWeightedSelection orig, DirectorCardCategorySelection self) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) Category val = self.categories.ToList().Find((Category x) => x.name == Helpers.GetVanillaMonsterCategoryName((MonsterCategory)3)); if (!((object)(Category)(ref val)).Equals((object)default(Category))) { Minibosses.Clear(); DirectorCard[] cards = val.cards; foreach (DirectorCard val2 in cards) { if (!val2.IsAvailable()) { continue; } object obj; if (val2 == null) { obj = null; } else { SpawnCard spawnCard = val2.spawnCard; if (spawnCard == null) { obj = null; } else { GameObject prefab = spawnCard.prefab; obj = ((prefab != null) ? prefab.GetComponent<CharacterMaster>() : null); } } if (obj == null) { obj = null; } CharacterMaster val3 = (CharacterMaster)obj; if (!((Object)(object)val3 == (Object)null)) { Minibosses.Add(val3.masterIndex); } } Main.Log.LogDebug((object)("Repopulated miniboss list with " + Minibosses.Count + " element(s).")); } return orig.Invoke(self); } internal bool <Patch>b__4_11(Category x) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return x.name == Helpers.GetVanillaMonsterCategoryName((MonsterCategory)3); } internal void <Patch>b__4_2(orig_OnEnable orig, OutsideInteractableLocker self) { if (!Main.UnlockInteractables.Value && (!Main.UnlockVoidSeeds.Value || !(((Object)self.lockPrefab).name == "PurchaseLockVoid"))) { orig.Invoke(self); } } internal void <Patch>b__4_3(orig_FixedUpdate orig, OutsideInteractableLocker self) { if (!Main.UnlockInteractables.Value && (!Main.UnlockVoidSeeds.Value || !(((Object)self.lockPrefab).name == "PurchaseLockVoid"))) { orig.Invoke(self); } } internal void <Patch>b__4_4(orig_OnDisable orig, OutsideInteractableLocker self) { if (!Main.UnlockInteractables.Value && (!Main.UnlockVoidSeeds.Value || !(((Object)self.lockPrefab).name == "PurchaseLockVoid"))) { orig.Invoke(self); } } internal void <Patch>b__4_5(orig_OnEnable orig, HoldoutZoneController self) { //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Expected O, but got Unknown //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Expected O, but got Unknown //IL_0654: Unknown result type (might be due to invalid IL or missing references) //IL_065e: Expected O, but got Unknown <>c__DisplayClass4_0 CS$<>8__locals0 = new <>c__DisplayClass4_0 { self = self }; if (Run.instance is InfiniteTowerRun) { return; } foreach (Main.HoldoutMultiplierInfo holdoutMultiplier in Main.HoldoutMultipliers) { if (((Object)((Component)CS$<>8__locals0.self).gameObject).name.Contains(holdoutMultiplier.name)) { ActiveZones.Add(CS$<>8__locals0.self, holdoutMultiplier); } } if (!ActiveZones.ContainsKey(CS$<>8__locals0.self)) { ActiveZones.Add(CS$<>8__locals0.self, Main.DefaultHoldoutInfo); } BossKilled.Add(CS$<>8__locals0.self, value: false); ChargeCredit.Add(CS$<>8__locals0.self, 0f); if (ActiveZones[CS$<>8__locals0.self].time >= 0f) { CS$<>8__locals0.self.baseChargeDuration = ActiveZones[CS$<>8__locals0.self].time * Mathf.Lerp(1f, Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount - 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount), ActiveZones[CS$<>8__locals0.self].mult); } if (ActiveZones[CS$<>8__locals0.self].area >= 0f) { CS$<>8__locals0.self.baseRadius = ActiveZones[CS$<>8__locals0.self].area * Mathf.Lerp(1f, Main.Calc(Main.ModePerPersonArea.Value, Main.ValuePerPersonArea.Value, Run.instance.participatingPlayerCount), ActiveZones[CS$<>8__locals0.self].mult); } if ((Object)(object)((Component)CS$<>8__locals0.self).gameObject.GetComponent<BossGroup>() != (Object)null && ActiveZones[CS$<>8__locals0.self].multBoss >= 0f) { CS$<>8__locals0.self.calcChargeRate += (CalcChargeRateDelegate)delegate(ref float rate) { if (BossKilled[CS$<>8__locals0.self]) { rate *= ActiveZones[CS$<>8__locals0.self].multBoss; } }; } if ((Object)(object)((Component)CS$<>8__locals0.self).gameObject.GetComponent<BossGroup>() != (Object)null && ActiveZones[CS$<>8__locals0.self].areaBoss >= 0f) { CS$<>8__locals0.self.calcRadius += (CalcRadiusDelegate)delegate(ref float radius) { if (BossKilled[CS$<>8__locals0.self]) { radius *= ActiveZones[CS$<>8__locals0.self].areaBoss / ActiveZones[CS$<>8__locals0.self].area; } }; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("Holdout Zone Begin, boss: " + (object)((Component)CS$<>8__locals0.self).gameObject.GetComponent<BossGroup>() != null)); Main.Log.LogInfo((object)$"Zone Info ({ActiveZones[CS$<>8__locals0.self].name}): {ActiveZones[CS$<>8__locals0.self].time} time, {ActiveZones[CS$<>8__locals0.self].mult} mult, {ActiveZones[CS$<>8__locals0.self].area} area, {ActiveZones[CS$<>8__locals0.self].multBoss} multBoss, {ActiveZones[CS$<>8__locals0.self].areaBoss} areaBoss"); Main.Log.LogInfo((object)$"Config: {Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount - 1)}({Main.ModePerPerson.Value} {Main.ValuePerPerson.Value}x{Run.instance.participatingPlayerCount - 1}) / {Main.Calc(Main.ModePerPersonArea.Value, Main.ValuePerPersonArea.Value, Run.instance.participatingPlayerCount)}({Main.ModePerPersonArea.Value} {Main.ValuePerPersonArea.Value}x{Run.instance.participatingPlayerCount - 1})(area) per person, {Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount)}({Main.ModePerStage.Value} {Main.ValuePerStage.Value}x{Run.instance.stageClearCount}) per stage, {Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)}({Main.ModePerLoop.Value} {Main.ValuePerLoop.Value}x{Run.instance.loopClearCount}) per loop"); Main.Log.LogInfo((object)$"Result: {CS$<>8__locals0.self.baseChargeDuration}(x{ActiveZones[CS$<>8__locals0.self].multBoss}b) time, {CS$<>8__locals0.self.baseRadius}(x{ActiveZones[CS$<>8__locals0.self].areaBoss / ActiveZones[CS$<>8__locals0.self].area}b) area"); } CS$<>8__locals0.self.calcAccumulatedCharge += (CalcAccumulatedChargeDelegate)delegate(ref float charge) { if (ChargeCredit[CS$<>8__locals0.self] > 0f) { charge += ChargeCredit[CS$<>8__locals0.self]; ChargeCredit[CS$<>8__locals0.self] = 0f; } }; orig.Invoke(CS$<>8__locals0.self); } internal void <Patch>b__4_6(DamageReport report) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_0471: Unknown result type (might be due to invalid IL or missing references) if (report == null) { return; } CharacterBody victimBody = report.victimBody; if (victimBody == null) { return; } TeamComponent teamComponent = victimBody.teamComponent; if (teamComponent == null) { return; } _ = teamComponent.teamIndex; if (false || report == null) { return; } CharacterBody attackerBody = report.attackerBody; if (attackerBody == null) { return; } TeamComponent teamComponent2 = attackerBody.teamComponent; if (teamComponent2 == null) { return; } _ = teamComponent2.teamIndex; if (false || !TeamManager.IsTeamEnemy((TeamIndex)1, report.victimBody.teamComponent.teamIndex) || (int)report.attackerBody.teamComponent.teamIndex != 1) { return; } foreach (HoldoutZoneController key in ActiveZones.Keys) { if (report.victimIsBoss || key.baseChargeDuration <= 0f) { continue; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("Kill Credited, base: " + ActiveZones[key].kill)); } if (ActiveZones[key].kill == 0f) { continue; } float num = Main.Value.Value + report.victimBody.baseMaxHealth * Main.ValuePerHP.Value; if (Main.DebugMode.Value) { Main.Log.LogInfo((object)$"base: {Main.Value.Value}({Main.Value.Value}+{report.victimBody.baseMaxHealth}x{Main.ValuePerHP.Value})"); } if (report.victimIsElite) { num += Main.EliteBonus.Value; } if (report.victimBody.affixes().Any((EliteDef x) => x.isT2())) { num += Main.EliteT2Bonus.Value; } if (report.victimIsMiniboss()) { num += Main.MinibossBonus.Value; } if (report.victimIsChampion) { num += Main.BossBonus.Value; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("bonuses: " + (report.victimIsElite ? $"+{Main.EliteBonus.Value} (elite)" : "") + (report.victimBody.affixes().Any((EliteDef x) => x.isT2()) ? $"+{Main.EliteT2Bonus.Value} (T2)" : "") + (report.victimIsMiniboss() ? $"+{Main.MinibossBonus.Value} (miniboss)" : "") + (report.victimIsChampion ? $"+{Main.BossBonus.Value} (champion)" : ""))); } num *= ActiveZones[key].kill; if ((Object)(object)((Component)key).gameObject.GetComponent<BossGroup>() != (Object)null && !BossKilled[key]) { num *= Main.PreBossKillPenalty.Value; } if (!((BaseZoneBehavior)key).IsInBounds(report.attackerBody.footPosition)) { num *= Main.OutsideRangePenalty.Value; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("multipliers: " + ActiveZones[key].kill + (((Object)(object)((Component)key).gameObject.GetComponent<BossGroup>() != (Object)null && !BossKilled[key]) ? $"x{Main.PreBossKillPenalty.Value} (prebosskill)" : "") + ((!((BaseZoneBehavior)key).IsInBounds(report.attackerBody.footPosition)) ? $"x{Main.OutsideRangePenalty.Value} (outsiderange)" : "") + (Main.UseFixedTime.Value ? $"x1s(out of {key.baseChargeDuration})" : "x1%"))); } if (num == 0f) { break; } ChargeCredit[key] += num * (Main.UseFixedTime.Value ? (1f / key.baseChargeDuration) : 0.01f); if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("Return:" + num * (Main.UseFixedTime.Value ? (1f / key.baseChargeDuration) : 0.01f))); } if (Main.CompensateKills.Value == 0f) { continue; } if (!Main.UseFixedTime.Value) { float num2 = 1f / key.baseChargeDuration; CalcChargeRateDelegate val = AccessTools.FieldRefAccess<CalcChargeRateDelegate>(typeof(HoldoutZoneController), "calcChargeRate").Invoke((object)key); if (val != null) { val.Invoke(ref num2); } num *= 0.01f / num2; if (Main.DebugMode.Value) { Main.Log.LogInfo((object)"ChargeRate accessed"); } } if (Main.GeneralScalingCompensation.Value != 0f) { num /= Mathf.Lerp(ActiveZones[key].mult * (Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount + 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)), 1f, Main.GeneralScalingCompensation.Value); } Run.instance.SetRunStopwatch(Run.instance.GetRunStopwatch() + num * Main.CompensateKills.Value); if (Main.DebugMode.Value) { Main.Log.LogInfo((object)"Time Compensated"); Main.Log.LogInfo((object)$"Config: {Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount - 1)}({Main.ModePerPerson.Value} {Main.ValuePerPerson.Value}x{Run.instance.participatingPlayerCount - 1}) / {Main.Calc(Main.ModePerPersonArea.Value, Main.ValuePerPersonArea.Value, Run.instance.participatingPlayerCount)}({Main.ModePerPersonArea.Value} {Main.ValuePerPersonArea.Value}x{Run.instance.participatingPlayerCount - 1})(area) per person, {Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount)}({Main.ModePerStage.Value} {Main.ValuePerStage.Value}x{Run.instance.stageClearCount}) per stage, {Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)}({Main.ModePerLoop.Value} {Main.ValuePerLoop.Value}x{Run.instance.loopClearCount}) per loop"); Main.Log.LogInfo((object)$"Result: a{ActiveZones[key].mult * (Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount + 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount))}, b{Mathf.Lerp(ActiveZones[key].mult * (Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount + 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)), 1f, Main.GeneralScalingCompensation.Value)}({ActiveZones[key].mult} mult), charge{num}, d{Main.CompensateKills.Value}"); } } } internal bool <Patch>b__4_16(EliteDef x) { return x.isT2(); } internal bool <Patch>b__4_15(EliteDef x) { return x.isT2(); } internal void <Patch>b__4_7(BossGroup group) { if ((Object)(object)TeleporterInteraction.instance?.bossGroup != (Object)null && (Object)(object)TeleporterInteraction.instance.bossGroup == (Object)(object)group && BossKilled.ContainsKey(TeleporterInteraction.instance.holdoutZoneController)) { BossKilled[TeleporterInteraction.instance.holdoutZoneController] = true; if (Main.UnlockInteractablesPostBoss.Value && Object.op_Implicit((Object)(object)TeleporterInteraction.instance.outsideInteractableLocker)) { ((Behaviour)TeleporterInteraction.instance.outsideInteractableLocker).enabled = false; } } } internal void <Patch>b__4_8(orig_OnDisable orig, HoldoutZoneController self) { if (ActiveZones.ContainsKey(self)) { ActiveZones.Remove(self); } if (BossKilled.ContainsKey(self)) { BossKilled.Remove(self); } if (ChargeCredit.ContainsKey(self)) { ChargeCredit.Remove(self); } orig.Invoke(self); } internal void <Patch>b__4_9(orig_ApplyRate orig, MonoBehaviour self, ref float rate) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) int currentFocusConvergenceCount = ((FocusConvergenceController)self).currentFocusConvergenceCount; if (Main.FocusedConvergenceRateLimit.Value >= 0) { ((FocusConvergenceController)self).currentFocusConvergenceCount = (int)MathF.Min(currentFocusConvergenceCount, Main.FocusedConvergenceRateLimit.Value); } orig.Invoke(self, ref rate); ((FocusConvergenceController)self).currentFocusConvergenceCount = currentFocusConvergenceCount; } internal void <Patch>b__4_10(orig_ApplyRadius orig, MonoBehaviour self, ref float radius) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) int currentFocusConvergenceCount = ((FocusConvergenceController)self).currentFocusConvergenceCount; if (Main.FocusedConvergenceRangeLimit.Value >= 0) { ((FocusConvergenceController)self).currentFocusConvergenceCount = (int)MathF.Min(currentFocusConvergenceCount, Main.FocusedConvergenceRangeLimit.Value); } orig.Invoke(self, ref radius); ((FocusConvergenceController)self).currentFocusConvergenceCount = currentFocusConvergenceCount; } } [CompilerGenerated] private sealed class <>c__DisplayClass4_0 { public HoldoutZoneController self; internal void <Patch>b__12(ref float rate) { if (BossKilled[self]) { rate *= ActiveZones[self].multBoss; } } internal void <Patch>b__13(ref float radius) { if (BossKilled[self]) { radius *= ActiveZones[self].areaBoss / ActiveZones[self].area; } } internal void <Patch>b__14(ref float charge) { if (ChargeCredit[self] > 0f) { charge += ChargeCredit[self]; ChargeCredit[self] = 0f; } } } public static List<MasterIndex> Minibosses = new List<MasterIndex>(); public static Dictionary<HoldoutZoneController, Main.HoldoutMultiplierInfo> ActiveZones = new Dictionary<HoldoutZoneController, Main.HoldoutMultiplierInfo>(); public static Dictionary<HoldoutZoneController, bool> BossKilled = new Dictionary<HoldoutZoneController, bool>(); public static Dictionary<HoldoutZoneController, float> ChargeCredit = new Dictionary<HoldoutZoneController, float>(); public static void Patch() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Expected O, but got Unknown //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Expected O, but got Unknown //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Expected O, but got Unknown Run.onRunStartGlobal += delegate { ActiveZones.Clear(); BossKilled.Clear(); ChargeCredit.Clear(); }; object obj = <>c.<>9__4_1; if (obj == null) { hook_GenerateDirectorCardWeightedSelection val = delegate(orig_GenerateDirectorCardWeightedSelection orig, DirectorCardCategorySelection self) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) Category val10 = self.categories.ToList().Find((Category x) => x.name == Helpers.GetVanillaMonsterCategoryName((MonsterCategory)3)); if (!((object)(Category)(ref val10)).Equals((object)default(Category))) { Minibosses.Clear(); DirectorCard[] cards = val10.cards; foreach (DirectorCard val11 in cards) { if (val11.IsAvailable()) { object obj9; if (val11 == null) { obj9 = null; } else { SpawnCard spawnCard = val11.spawnCard; if (spawnCard == null) { obj9 = null; } else { GameObject prefab = spawnCard.prefab; obj9 = ((prefab != null) ? prefab.GetComponent<CharacterMaster>() : null); } } if (obj9 == null) { obj9 = null; } CharacterMaster val12 = (CharacterMaster)obj9; if (!((Object)(object)val12 == (Object)null)) { Minibosses.Add(val12.masterIndex); } } } Main.Log.LogDebug((object)("Repopulated miniboss list with " + Minibosses.Count + " element(s).")); } return orig.Invoke(self); }; <>c.<>9__4_1 = val; obj = (object)val; } DirectorCardCategorySelection.GenerateDirectorCardWeightedSelection += (hook_GenerateDirectorCardWeightedSelection)obj; object obj2 = <>c.<>9__4_2; if (obj2 == null) { hook_OnEnable val2 = delegate(orig_OnEnable orig, OutsideInteractableLocker self) { if (!Main.UnlockInteractables.Value && (!Main.UnlockVoidSeeds.Value || !(((Object)self.lockPrefab).name == "PurchaseLockVoid"))) { orig.Invoke(self); } }; <>c.<>9__4_2 = val2; obj2 = (object)val2; } OutsideInteractableLocker.OnEnable += (hook_OnEnable)obj2; object obj3 = <>c.<>9__4_3; if (obj3 == null) { hook_FixedUpdate val3 = delegate(orig_FixedUpdate orig, OutsideInteractableLocker self) { if (!Main.UnlockInteractables.Value && (!Main.UnlockVoidSeeds.Value || !(((Object)self.lockPrefab).name == "PurchaseLockVoid"))) { orig.Invoke(self); } }; <>c.<>9__4_3 = val3; obj3 = (object)val3; } OutsideInteractableLocker.FixedUpdate += (hook_FixedUpdate)obj3; object obj4 = <>c.<>9__4_4; if (obj4 == null) { hook_OnDisable val4 = delegate(orig_OnDisable orig, OutsideInteractableLocker self) { if (!Main.UnlockInteractables.Value && (!Main.UnlockVoidSeeds.Value || !(((Object)self.lockPrefab).name == "PurchaseLockVoid"))) { orig.Invoke(self); } }; <>c.<>9__4_4 = val4; obj4 = (object)val4; } OutsideInteractableLocker.OnDisable += (hook_OnDisable)obj4; object obj5 = <>c.<>9__4_5; if (obj5 == null) { hook_OnEnable val5 = delegate(orig_OnEnable orig, HoldoutZoneController self) { //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Expected O, but got Unknown //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Expected O, but got Unknown //IL_0654: Unknown result type (might be due to invalid IL or missing references) //IL_065e: Expected O, but got Unknown if (!(Run.instance is InfiniteTowerRun)) { foreach (Main.HoldoutMultiplierInfo holdoutMultiplier in Main.HoldoutMultipliers) { if (((Object)((Component)self).gameObject).name.Contains(holdoutMultiplier.name)) { ActiveZones.Add(self, holdoutMultiplier); } } if (!ActiveZones.ContainsKey(self)) { ActiveZones.Add(self, Main.DefaultHoldoutInfo); } BossKilled.Add(self, value: false); ChargeCredit.Add(self, 0f); if (ActiveZones[self].time >= 0f) { self.baseChargeDuration = ActiveZones[self].time * Mathf.Lerp(1f, Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount - 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount), ActiveZones[self].mult); } if (ActiveZones[self].area >= 0f) { self.baseRadius = ActiveZones[self].area * Mathf.Lerp(1f, Main.Calc(Main.ModePerPersonArea.Value, Main.ValuePerPersonArea.Value, Run.instance.participatingPlayerCount), ActiveZones[self].mult); } if ((Object)(object)((Component)self).gameObject.GetComponent<BossGroup>() != (Object)null && ActiveZones[self].multBoss >= 0f) { self.calcChargeRate += (CalcChargeRateDelegate)delegate(ref float rate) { if (BossKilled[self]) { rate *= ActiveZones[self].multBoss; } }; } if ((Object)(object)((Component)self).gameObject.GetComponent<BossGroup>() != (Object)null && ActiveZones[self].areaBoss >= 0f) { self.calcRadius += (CalcRadiusDelegate)delegate(ref float radius) { if (BossKilled[self]) { radius *= ActiveZones[self].areaBoss / ActiveZones[self].area; } }; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("Holdout Zone Begin, boss: " + (object)((Component)self).gameObject.GetComponent<BossGroup>() != null)); Main.Log.LogInfo((object)$"Zone Info ({ActiveZones[self].name}): {ActiveZones[self].time} time, {ActiveZones[self].mult} mult, {ActiveZones[self].area} area, {ActiveZones[self].multBoss} multBoss, {ActiveZones[self].areaBoss} areaBoss"); Main.Log.LogInfo((object)$"Config: {Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount - 1)}({Main.ModePerPerson.Value} {Main.ValuePerPerson.Value}x{Run.instance.participatingPlayerCount - 1}) / {Main.Calc(Main.ModePerPersonArea.Value, Main.ValuePerPersonArea.Value, Run.instance.participatingPlayerCount)}({Main.ModePerPersonArea.Value} {Main.ValuePerPersonArea.Value}x{Run.instance.participatingPlayerCount - 1})(area) per person, {Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount)}({Main.ModePerStage.Value} {Main.ValuePerStage.Value}x{Run.instance.stageClearCount}) per stage, {Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)}({Main.ModePerLoop.Value} {Main.ValuePerLoop.Value}x{Run.instance.loopClearCount}) per loop"); Main.Log.LogInfo((object)$"Result: {self.baseChargeDuration}(x{ActiveZones[self].multBoss}b) time, {self.baseRadius}(x{ActiveZones[self].areaBoss / ActiveZones[self].area}b) area"); } self.calcAccumulatedCharge += (CalcAccumulatedChargeDelegate)delegate(ref float charge) { if (ChargeCredit[self] > 0f) { charge += ChargeCredit[self]; ChargeCredit[self] = 0f; } }; orig.Invoke(self); } }; <>c.<>9__4_5 = val5; obj5 = (object)val5; } HoldoutZoneController.OnEnable += (hook_OnEnable)obj5; GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport report) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_0471: Unknown result type (might be due to invalid IL or missing references) if (report != null) { CharacterBody victimBody = report.victimBody; if (victimBody != null) { TeamComponent teamComponent = victimBody.teamComponent; if (teamComponent != null) { _ = teamComponent.teamIndex; if (0 == 0 && report != null) { CharacterBody attackerBody = report.attackerBody; if (attackerBody != null) { TeamComponent teamComponent2 = attackerBody.teamComponent; if (teamComponent2 != null) { _ = teamComponent2.teamIndex; if (0 == 0 && TeamManager.IsTeamEnemy((TeamIndex)1, report.victimBody.teamComponent.teamIndex) && (int)report.attackerBody.teamComponent.teamIndex == 1) { foreach (HoldoutZoneController key in ActiveZones.Keys) { if (!report.victimIsBoss && !(key.baseChargeDuration <= 0f)) { if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("Kill Credited, base: " + ActiveZones[key].kill)); } if (ActiveZones[key].kill != 0f) { float num = Main.Value.Value + report.victimBody.baseMaxHealth * Main.ValuePerHP.Value; if (Main.DebugMode.Value) { Main.Log.LogInfo((object)$"base: {Main.Value.Value}({Main.Value.Value}+{report.victimBody.baseMaxHealth}x{Main.ValuePerHP.Value})"); } if (report.victimIsElite) { num += Main.EliteBonus.Value; } if (report.victimBody.affixes().Any((EliteDef x) => x.isT2())) { num += Main.EliteT2Bonus.Value; } if (report.victimIsMiniboss()) { num += Main.MinibossBonus.Value; } if (report.victimIsChampion) { num += Main.BossBonus.Value; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("bonuses: " + (report.victimIsElite ? $"+{Main.EliteBonus.Value} (elite)" : "") + (report.victimBody.affixes().Any((EliteDef x) => x.isT2()) ? $"+{Main.EliteT2Bonus.Value} (T2)" : "") + (report.victimIsMiniboss() ? $"+{Main.MinibossBonus.Value} (miniboss)" : "") + (report.victimIsChampion ? $"+{Main.BossBonus.Value} (champion)" : ""))); } num *= ActiveZones[key].kill; if ((Object)(object)((Component)key).gameObject.GetComponent<BossGroup>() != (Object)null && !BossKilled[key]) { num *= Main.PreBossKillPenalty.Value; } if (!((BaseZoneBehavior)key).IsInBounds(report.attackerBody.footPosition)) { num *= Main.OutsideRangePenalty.Value; } if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("multipliers: " + ActiveZones[key].kill + (((Object)(object)((Component)key).gameObject.GetComponent<BossGroup>() != (Object)null && !BossKilled[key]) ? $"x{Main.PreBossKillPenalty.Value} (prebosskill)" : "") + ((!((BaseZoneBehavior)key).IsInBounds(report.attackerBody.footPosition)) ? $"x{Main.OutsideRangePenalty.Value} (outsiderange)" : "") + (Main.UseFixedTime.Value ? $"x1s(out of {key.baseChargeDuration})" : "x1%"))); } if (num == 0f) { break; } ChargeCredit[key] += num * (Main.UseFixedTime.Value ? (1f / key.baseChargeDuration) : 0.01f); if (Main.DebugMode.Value) { Main.Log.LogInfo((object)("Return:" + num * (Main.UseFixedTime.Value ? (1f / key.baseChargeDuration) : 0.01f))); } if (Main.CompensateKills.Value != 0f) { if (!Main.UseFixedTime.Value) { float num2 = 1f / key.baseChargeDuration; CalcChargeRateDelegate val9 = AccessTools.FieldRefAccess<CalcChargeRateDelegate>(typeof(HoldoutZoneController), "calcChargeRate").Invoke((object)key); if (val9 != null) { val9.Invoke(ref num2); } num *= 0.01f / num2; if (Main.DebugMode.Value) { Main.Log.LogInfo((object)"ChargeRate accessed"); } } if (Main.GeneralScalingCompensation.Value != 0f) { num /= Mathf.Lerp(ActiveZones[key].mult * (Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount + 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)), 1f, Main.GeneralScalingCompensation.Value); } Run.instance.SetRunStopwatch(Run.instance.GetRunStopwatch() + num * Main.CompensateKills.Value); if (Main.DebugMode.Value) { Main.Log.LogInfo((object)"Time Compensated"); Main.Log.LogInfo((object)$"Config: {Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount - 1)}({Main.ModePerPerson.Value} {Main.ValuePerPerson.Value}x{Run.instance.participatingPlayerCount - 1}) / {Main.Calc(Main.ModePerPersonArea.Value, Main.ValuePerPersonArea.Value, Run.instance.participatingPlayerCount)}({Main.ModePerPersonArea.Value} {Main.ValuePerPersonArea.Value}x{Run.instance.participatingPlayerCount - 1})(area) per person, {Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount)}({Main.ModePerStage.Value} {Main.ValuePerStage.Value}x{Run.instance.stageClearCount}) per stage, {Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)}({Main.ModePerLoop.Value} {Main.ValuePerLoop.Value}x{Run.instance.loopClearCount}) per loop"); Main.Log.LogInfo((object)$"Result: a{ActiveZones[key].mult * (Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount + 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount))}, b{Mathf.Lerp(ActiveZones[key].mult * (Main.Calc(Main.ModePerPerson.Value, Main.ValuePerPerson.Value, Run.instance.participatingPlayerCount + 1) * Main.Calc(Main.ModePerStage.Value, Main.ValuePerStage.Value, Run.instance.stageClearCount) * Main.Calc(Main.ModePerLoop.Value, Main.ValuePerLoop.Value, Run.instance.loopClearCount)), 1f, Main.GeneralScalingCompensation.Value)}({ActiveZones[key].mult} mult), charge{num}, d{Main.CompensateKills.Value}"); } } } } } } } } } } } } }; BossGroup.onBossGroupDefeatedServer += delegate(BossGroup group) { if ((Object)(object)TeleporterInteraction.instance?.bossGroup != (Object)null && (Object)(object)TeleporterInteraction.instance.bossGroup == (Object)(object)group && BossKilled.ContainsKey(TeleporterInteraction.instance.holdoutZoneController)) { BossKilled[TeleporterInteraction.instance.holdoutZoneController] = true; if (Main.UnlockInteractablesPostBoss.Value && Object.op_Implicit((Object)(object)TeleporterInteraction.instance.outsideInteractableLocker)) { ((Behaviour)TeleporterInteraction.instance.outsideInteractableLocker).enabled = false; } } }; object obj6 = <>c.<>9__4_8; if (obj6 == null) { hook_OnDisable val6 = delegate(orig_OnDisable orig, HoldoutZoneController self) { if (ActiveZones.ContainsKey(self)) { ActiveZones.Remove(self); } if (BossKilled.ContainsKey(self)) { BossKilled.Remove(self); } if (ChargeCredit.ContainsKey(self)) { ChargeCredit.Remove(self); } orig.Invoke(self); }; <>c.<>9__4_8 = val6; obj6 = (object)val6; } HoldoutZoneController.OnDisable += (hook_OnDisable)obj6; FocusConvergenceController.cap = int.MaxValue; object obj7 = <>c.<>9__4_9; if (obj7 == null) { hook_ApplyRate val7 = delegate(orig_ApplyRate orig, MonoBehaviour self, ref float rate) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) int currentFocusConvergenceCount2 = ((FocusConvergenceController)self).currentFocusConvergenceCount; if (Main.FocusedConvergenceRateLimit.Value >= 0) { ((FocusConvergenceController)self).currentFocusConvergenceCount = (int)MathF.Min(currentFocusConvergenceCount2, Main.FocusedConvergenceRateLimit.Value); } orig.Invoke(self, ref rate); ((FocusConvergenceController)self).currentFocusConvergenceCount = currentFocusConvergenceCount2; }; <>c.<>9__4_9 = val7; obj7 = (object)val7; } FocusConvergenceController.ApplyRate += (hook_ApplyRate)obj7; object obj8 = <>c.<>9__4_10; if (obj8 == null) { hook_ApplyRadius val8 = delegate(orig_ApplyRadius orig, MonoBehaviour self, ref float radius) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) int currentFocusConvergenceCount = ((FocusConvergenceController)self).currentFocusConvergenceCount; if (Main.FocusedConvergenceRangeLimit.Value >= 0) { ((FocusConvergenceController)self).currentFocusConvergenceCount = (int)MathF.Min(currentFocusConvergenceCount, Main.FocusedConvergenceRangeLimit.Value); } orig.Invoke(self, ref radius); ((FocusConvergenceController)self).currentFocusConvergenceCount = currentFocusConvergenceCount; }; <>c.<>9__4_10 = val8; obj8 = (object)val8; } FocusConvergenceController.ApplyRadius += (hook_ApplyRadius)obj8; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("prodzpod.FasterBossWait2", "FasterBossWait2", "1.1.9")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { public struct HoldoutMultiplierInfo { public string name; public float time; public float mult; public float multBoss; public float kill; public float area; public float areaBoss; } public enum StackingMode { Linear, Exponential, Hyperbolic, Asymptotic } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_ShouldUpdateRunStopwatch <>9__78_0; internal bool <Awake>b__78_0(orig_ShouldUpdateRunStopwatch orig, Run self) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) bool result = orig.Invoke(self); TeleporterInteraction instance = TeleporterInteraction.instance; if (instance != null && instance.isCharged) { foreach (NetworkUser instances in NetworkUser.instancesList) { CharacterBody currentBody = instances.GetCurrentBody(); if (!((Object)(object)currentBody == (Object)null)) { Vector3 val = ((Component)TeleporterInteraction.instance).transform.position - currentBody.corePosition; if (((Vector3)(ref val)).magnitude > TeleporterTimestopArea.Value) { return result; } } } if (DebugMode.Value) { Log.LogInfo((object)"Time Stopped"); } return false; } return result; } } public const string PluginGUID = "prodzpod.FasterBossWait2"; public const string PluginAuthor = "prodzpod"; public const string PluginName = "FasterBossWait2"; public const string PluginVersion = "1.1.9"; public static ManualLogSource Log; internal static PluginInfo pluginInfo; public static ConfigFile Config; public static ConfigEntry<bool> UseFixedTime; public static ConfigEntry<float> CompensateKills; public static ConfigEntry<float> GeneralScalingCompensation; public static ConfigEntry<float> Value; public static ConfigEntry<float> ValuePerHP; public static ConfigEntry<float> EliteBonus; public static ConfigEntry<float> EliteT2Bonus; public static ConfigEntry<float> VariantBonus; public static ConfigEntry<float> MinibossBonus; public static ConfigEntry<float> BossBonus; public static ConfigEntry<float> PreBossKillPenalty; public static ConfigEntry<float> OutsideRangePenalty; public static ConfigEntry<bool> UnlockInteractables; public static ConfigEntry<bool> UnlockInteractablesPostBoss; public static ConfigEntry<bool> UnlockVoidSeeds; public static ConfigEntry<StackingMode> ModePerPerson; public static ConfigEntry<float> ValuePerPerson; public static ConfigEntry<StackingMode> ModePerPersonArea; public static ConfigEntry<float> ValuePerPersonArea; public static ConfigEntry<StackingMode> ModePerStage; public static ConfigEntry<float> ValuePerStage; public static ConfigEntry<StackingMode> ModePerLoop; public static ConfigEntry<float> ValuePerLoop; public static ConfigEntry<int> FocusedConvergenceRateLimit; public static ConfigEntry<int> FocusedConvergenceRangeLimit; public static ConfigEntry<float> TeleporterTime; public static ConfigEntry<float> TeleporterMult; public static ConfigEntry<float> TeleporterKill; public static ConfigEntry<float> TeleporterArea; public static ConfigEntry<float> TeleporterMultBoss; public static ConfigEntry<float> TeleporterAreaBoss; public static ConfigEntry<float> TeleporterTimestopArea; public static ConfigEntry<float> PrimordialTime; public static ConfigEntry<float> PrimordialMult; public static ConfigEntry<float> PrimordialKill; public static ConfigEntry<float> PrimordialArea; public static ConfigEntry<float> PrimordialMultBoss; public static ConfigEntry<float> PrimordialAreaBoss; public static ConfigEntry<float> PillarMassTime; public static ConfigEntry<float> PillarMassMult; public static ConfigEntry<float> PillarMassKill; public static ConfigEntry<float> PillarMassArea; public static ConfigEntry<float> PillarDesignTime; public static ConfigEntry<float> PillarDesignMult; public static ConfigEntry<float> PillarDesignKill; public static ConfigEntry<float> PillarDesignArea; public static ConfigEntry<float> PillarBloodTime; public static ConfigEntry<float> PillarBloodMult; public static ConfigEntry<float> PillarBloodKill; public static ConfigEntry<float> PillarBloodArea; public static ConfigEntry<float> PillarSoulTime; public static ConfigEntry<float> PillarSoulMult; public static ConfigEntry<float> PillarSoulKill; public static ConfigEntry<float> PillarSoulArea; public static ConfigEntry<float> EndingTime; public static ConfigEntry<float> EndingMult; public static ConfigEntry<float> EndingKill; public static ConfigEntry<float> EndingArea; public static ConfigEntry<float> FieldTime; public static ConfigEntry<float> FieldMult; public static ConfigEntry<float> FieldKill; public static ConfigEntry<float> FieldArea; public static ConfigEntry<float> LocusTime; public static ConfigEntry<float> LocusMult; public static ConfigEntry<float> LocusKill; public static ConfigEntry<float> LocusArea; public static ConfigEntry<bool> DebugMode; public static List<HoldoutMultiplierInfo> HoldoutMultipliers; public static HoldoutMultiplierInfo DefaultHoldoutInfo = new HoldoutMultiplierInfo { name = "", time = -1f, mult = 1f, multBoss = -1f, kill = 1f, area = -1f, areaBoss = -1f }; public void Awake() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_04b1: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_04bc: Expected O, but got Unknown pluginInfo = ((BaseUnityPlugin)this).Info; Log = ((BaseUnityPlugin)this).Logger; Config = new ConfigFile(Path.Combine(Paths.ConfigPath, "prodzpod.FasterBossWait2.cfg"), true); UseFixedTime = Config.Bind<bool>("Kills to Time", "Use Fixed Time", true, "If true, value will be seconds instead of percent."); CompensateKills = Config.Bind<float>("Kills to Time", "Kill Compensation Ratio", 1f, "Time saved by kills multiplied by this amount will be added to run timer."); GeneralScalingCompensation = Config.Bind<float>("Kills to Time", "General Scaling Compensation Ratio", 1f, "0: Kill Compensation will account for total time. 1: Kill compensation will only account for time before general scaling is applied."); Value = Config.Bind<float>("Kills to Time", "Base Value", 1f, "Charge value per kill."); ValuePerHP = Config.Bind<float>("Kills to Time", "Additional Value Per HP", 0f, "Charge value per base HP of the enemy, takes elites into account but not ambient level."); EliteBonus = Config.Bind<float>("Kills to Time", "Elite Bonus Value", 1f, "Extra charge given for defeating an elite."); EliteT2Bonus = Config.Bind<float>("Kills to Time", "Elite T2 Bonus Value", 10f, "Extra charge given for defeating a tier 2 elite. stacks with general elite bonus."); VariantBonus = Config.Bind<float>("Kills to Time", "Variant Bonus Value", 1f, "Extra charge given for defeating a variant enemy, multiplied by experience multiplier."); MinibossBonus = Config.Bind<float>("Kills to Time", "Miniboss Bonus Value", 2f, "Extra charge given for defeating a miniboss."); BossBonus = Config.Bind<float>("Kills to Time", "Boss Bonus Value", 9f, "Extra charge given for defeating a champion."); PreBossKillPenalty = Config.Bind<float>("Kills to Time", "Pre Bosskill Penalty", 0f, "Every kill % before the boss is defeated will be multiplied by this amount."); OutsideRangePenalty = Config.Bind<float>("Kills to Time", "Outside Range Penalty", 1f, "Every kill % while you're outside the teleporter range will be multiplied by this amount."); UnlockInteractables = Config.Bind<bool>("Unlock Interactables", "Unlock Interactables", false, "Unlock interactables with a teleporter enabled."); UnlockInteractablesPostBoss = Config.Bind<bool>("Unlock Interactables", "Unlock Interactables Post Boss", false, "Unlock interactables with a teleporter enabled."); UnlockVoidSeeds = Config.Bind<bool>("Unlock Interactables", "Unlock Void Seeds", false, "Unlock interactables with void seed enabled."); ModePerPerson = Config.Bind<StackingMode>("General Scaling", "Per Person Multiplier Mode", StackingMode.Exponential, "Linear: Value*Count+1, Exponential: Value^Count, Hyperbolic: Value*(Count/(Count+1))+1, Asymptotic: Value - (Value-1)*(1-0.5^Count)"); ValuePerPerson = Config.Bind<float>("General Scaling", "Multiplier Per Person", 1f, "For people who are well coordinated?? idk"); ModePerPersonArea = Config.Bind<StackingMode>("General Scaling", "Per Person Area Multiplier Mode", StackingMode.Exponential, "Linear: Value*Count+1, Exponential: Value^Count, Hyperbolic: Value*(Count/(Count+1))+1, Asymptotic: Value - (Value-1)*(1-0.5^Count)"); ValuePerPersonArea = Config.Bind<float>("General Scaling", "Area Multiplier Per Person", 1f, "For people who are well coordinated?? idk"); ModePerStage = Config.Bind<StackingMode>("General Scaling", "Per Stage Multiplier Mode", StackingMode.Exponential, "Linear: Value*Count+1, Exponential: Value^Count, Hyperbolic: Value*(Count/(Count+1))+1, Asymptotic: Value - (Value-1)*(1-0.5^Count)"); ValuePerStage = Config.Bind<float>("General Scaling", "Multiplier Per Stage", 1f, "multiplier per stage."); ModePerLoop = Config.Bind<StackingMode>("General Scaling", "Per Loop Multiplier Mode", StackingMode.Linear, "Linear: Value*Count+1, Exponential: Value^Count, Hyperbolic: Value*(Count/(Count+1))+1, Asymptotic: Value - (Value-1)*(1-0.5^Count)"); ValuePerLoop = Config.Bind<float>("General Scaling", "Multiplier Per Loop", 1f, "This is also a ChargeInHalf continuation"); FocusedConvergenceRateLimit = Config.Bind<int>("General Scaling", "Focused Convergence Rate Max Stack", -1, "Set to -1 for infinite."); FocusedConvergenceRangeLimit = Config.Bind<int>("General Scaling", "Focused Convergence Range Max Stack", 3, "Set to -1 for infinite."); TeleporterTime = Config.Bind<float>("Zones", "Teleporter Base Charge Time", 90f, "Good ol' Teleporter."); TeleporterMult = Config.Bind<float>("Zones", "Teleporter Charge Multiplier", 1f, "General Scaling's effect on Teleporters. (except focused convergence)"); TeleporterKill = Config.Bind<float>("Zones", "Teleporter Kills Multiplier", 1f, "Kills to Time's effect on Teleporters."); TeleporterArea = Config.Bind<float>("Zones", "Teleporter Base Area", 60f, ""); TeleporterMultBoss = Config.Bind<float>("Zones", "Teleporter Charge Rate post Bosskill", 1f, ""); TeleporterAreaBoss = Config.Bind<float>("Zones", "Teleporter Base Area post Bosskill", 60f, ""); TeleporterTimestopArea = Config.Bind<float>("Zones", "Telepoter Time Stop Area", 12f, "Radius in meters. Set to 0 to disable."); DebugMode = Config.Bind<bool>("If some configs dont work enable this", "Debug Mode", false, "Enable Detailed Log Messages."); if (TeleporterTimestopArea.Value > 0f) { object obj = <>c.<>9__78_0; if (obj == null) { hook_ShouldUpdateRunStopwatch val = delegate(orig_ShouldUpdateRunStopwatch orig, Run self) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) bool result = orig.Invoke(self); TeleporterInteraction instance = TeleporterInteraction.instance; if (instance != null && instance.isCharged) { foreach (NetworkUser instances in NetworkUser.instancesList) { CharacterBody currentBody = instances.GetCurrentBody(); if (!((Object)(object)currentBody == (Object)null)) { Vector3 val2 = ((Component)TeleporterInteraction.instance).transform.position - currentBody.corePosition; if (((Vector3)(ref val2)).magnitude > TeleporterTimestopArea.Value) { return result; } } } if (DebugMode.Value) { Log.LogInfo((object)"Time Stopped"); } return false; } return result; }; <>c.<>9__78_0 = val; obj = (object)val; } Run.ShouldUpdateRunStopwatch += (hook_ShouldUpdateRunStopwatch)obj; } PrimordialTime = Config.Bind<float>("Zones", "Primordial Teleporter Base Charge Time", 90f, "Primordial Teleporter, in case you want Stage 5 to be special."); PrimordialMult = Config.Bind<float>("Zones", "Primordial Teleporter Charge Multiplier", 1f, "General Scaling's effect on Primordial Teleporters. (except focused convergence)"); PrimordialKill = Config.Bind<float>("Zones", "Primordial Teleporter Kills Multiplier", 0f, "Kills to Time's effect on Primordial Teleporters."); PrimordialArea = Config.Bind<float>("Zones", "Primordial Teleporter Base Area", 60f, ""); PrimordialMultBoss = Config.Bind<float>("Zones", "Primordial Teleporter Charge Rate post Bosskill", 1f, ""); PrimordialAreaBoss = Config.Bind<float>("Zones", "Primordial Teleporter Base Area post Bosskill", 60f, ""); PillarMassTime = Config.Bind<float>("Zones", "Pillar of Mass Base Charge Time", 60f, "Who doesn't like Moon Pillars?"); PillarMassMult = Config.Bind<float>("Zones", "Pillar of Mass Charge Multiplier", 0f, "General Scaling's effect on Moon Pillars. (except focused convergence)"); PillarMassKill = Config.Bind<float>("Zones", "Pillar of Mass Kills Multiplier", 0f, "Kills to Time's effect on Moon Pillars."); PillarMassArea = Config.Bind<float>("Zones", "Pillar of Mass Base Area", 20f, ""); PillarDesignTime = Config.Bind<float>("Zones", "Pillar of Design Base Charge Time", 30f, "Who doesn't like Moon Pillars?"); PillarDesignMult = Config.Bind<float>("Zones", "Pillar of Design Charge Multiplier", 0f, "General Scaling's effect on Moon Pillars. (except focused convergence)"); PillarDesignKill = Config.Bind<float>("Zones", "Pillar of Design Kills Multiplier", 0f, "Kills to Time's effect on Moon Pillars."); PillarDesignArea = Config.Bind<float>("Zones", "Pillar of Design Base Area", 20f, ""); PillarSoulTime = Config.Bind<float>("Zones", "Pillar of Soul Base Charge Time", 30f, "Who doesn't like Moon Pillars?"); PillarSoulMult = Config.Bind<float>("Zones", "Pillar of Soul Charge Multiplier", 0f, "General Scaling's effect on Moon Pillars. (except focused convergence)"); PillarSoulKill = Config.Bind<float>("Zones", "Pillar of Soul Kills Multiplier", 0f, "Kills to Time's effect on Moon Pillars."); PillarSoulArea = Config.Bind<float>("Zones", "Pillar of Soul Base Area", 20f, ""); PillarBloodTime = Config.Bind<float>("Zones", "Pillar of Blood Base Charge Time", 10f, "Who doesn't like Moon Pillars?"); PillarBloodMult = Config.Bind<float>("Zones", "Pillar of Blood Charge Multiplier", 0f, "General Scaling's effect on Moon Pillars. (except focused convergence)"); PillarBloodKill = Config.Bind<float>("Zones", "Pillar of Blood Kills Multiplier", 0f, "Kills to Time's effect on Moon Pillars."); PillarBloodArea = Config.Bind<float>("Zones", "Pillar of Blood Base Area", 20f, ""); EndingTime = Config.Bind<float>("Zones", "The Final Spacecraft Base Charge Time", 120f, "And so they left..."); EndingMult = Config.Bind<float>("Zones", "The Final Spacecraft Charge Multiplier", 0f, "General Scaling's effect on The Final Spacecraft. (except focused convergence)"); EndingKill = Config.Bind<float>("Zones", "The Final Spacecraft Kills Multiplier", 2f, "Kills to Time's effect on The Final Spacecraft."); EndingArea = Config.Bind<float>("Zones", "The Final Spacecraft Base Area", 40f, ""); FieldTime = Config.Bind<float>("Zones", "Void Field Base Charge Time", 60f, "Void Fields"); FieldMult = Config.Bind<float>("Zones", "Void Field Charge Multiplier", 1f, "General Scaling's effect on Void Fields. (except focused convergence)"); FieldKill = Config.Bind<float>("Zones", "Void Field Kills Multiplier", 1f, "Kills to Time's effect on Void Fields."); FieldArea = Config.Bind<float>("Zones", "Void Field Base Area", 15f, ""); LocusTime = Config.Bind<float>("Zones", "Deep Void Beacon Base Charge Time", 90f, "Deep Void Beacons"); LocusMult = Config.Bind<float>("Zones", "Deep Void Beacon Charge Multiplier", 1f, "General Scaling's effect on Deep Void Beacons. (except focused convergence)"); LocusKill = Config.Bind<float>("Zones", "Deep Void Beacon Kills Multiplier", 1f, "Kills to Time's effect on Deep Void Beacons."); LocusArea = Config.Bind<float>("Zones", "Deep Void Beacon Base Area", 20f, ""); HoldoutMultipliers = new List<HoldoutMultiplierInfo>(9) { new HoldoutMultiplierInfo { name = "Teleporter1", time = TeleporterTime.Value, mult = TeleporterMult.Value, multBoss = TeleporterMultBoss.Value, kill = TeleporterKill.Value, area = TeleporterArea.Value, areaBoss = TeleporterAreaBoss.Value }, new HoldoutMultiplierInfo { name = "LunarTeleporter", time = PrimordialTime.Value, mult = PrimordialMult.Value, multBoss = PrimordialMultBoss.Value, kill = PrimordialKill.Value, area = PrimordialArea.Value, areaBoss = PrimordialAreaBoss.Value }, new HoldoutMultiplierInfo { name = "MoonBatteryMass", time = PillarMassTime.Value, mult = PillarMassMult.Value, multBoss = -1f, kill = PillarMassKill.Value, area = PillarMassArea.Value, areaBoss = -1f }, new HoldoutMultiplierInfo { name = "MoonBatteryDesign", time = PillarDesignTime.Value, mult = PillarDesignMult.Value, multBoss = -1f, kill = PillarDesignKill.Value, area = PillarDesignArea.Value, areaBoss = -1f }, new HoldoutMultiplierInfo { name = "MoonBatteryBlood", time = PillarBloodTime.Value, mult = PillarBloodMult.Value, multBoss = -1f, kill = PillarBloodKill.Value, area = PillarBloodArea.Value, areaBoss = -1f }, new HoldoutMultiplierInfo { name = "MoonBatterySoul", time = PillarSoulTime.Value, mult = PillarSoulMult.Value, multBoss = -1f, kill = PillarSoulKill.Value, area = PillarSoulArea.Value, areaBoss = -1f }, new HoldoutMultiplierInfo { name = "HoldoutZone", time = EndingTime.Value, mult = EndingMult.Value, multBoss = -1f, kill = EndingKill.Value, area = EndingArea.Value, areaBoss = -1f }, new HoldoutMultiplierInfo { name = "NullSafeZone", time = FieldTime.Value, mult = FieldMult.Value, multBoss = -1f, kill = FieldKill.Value, area = FieldArea.Value, areaBoss = -1f }, new HoldoutMultiplierInfo { name = "DeepVoidPortalBattery", time = LocusTime.Value, mult = LocusMult.Value, multBoss = -1f, kill = LocusKill.Value, area = LocusArea.Value, areaBoss = -1f } }; Hooks.Patch(); } public static float Calc(StackingMode mode, float value, float count) { switch (mode) { case StackingMode.Linear: return value * count + 1f; case StackingMode.Exponential: return Mathf.Pow(value, count); case StackingMode.Hyperbolic: return value * count / (count + 1f) + 1f; case StackingMode.Asymptotic: return (1f - value) * (1f - Mathf.Pow(2f, 0f - count)) + value; default: Log.LogError((object)"Invalid Mode??"); return 0f; } } } }