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 AdvancedPrediction v1.0.4
AdvPrediction.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AdvancedPrediction.Prediction; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EnemiesPlus.Content.Beetle; using EnemiesPlus.Content.Imp; using EntityStates; using EntityStates.BeetleGuardMonster; using EntityStates.Bell.BellWeapon; using EntityStates.ClayBoss; using EntityStates.ClayBoss.ClayBossWeapon; using EntityStates.GravekeeperBoss; using EntityStates.GreaterWispMonster; using EntityStates.ImpBossMonster; using EntityStates.ImpMonster; using EntityStates.LemurianBruiserMonster; using EntityStates.LemurianMonster; using EntityStates.RoboBallBoss.Weapon; using EntityStates.ScavMonster; using EntityStates.VagrantMonster.Weapon; using EntityStates.Vulture.Weapon; using HarmonyLib; using IL.EntityStates; using IL.EntityStates.BeetleGuardMonster; using IL.EntityStates.Bell.BellWeapon; using IL.EntityStates.ClayBoss; using IL.EntityStates.ClayBoss.ClayBossWeapon; using IL.EntityStates.GravekeeperBoss; using IL.EntityStates.GreaterWispMonster; using IL.EntityStates.ImpBossMonster; using IL.EntityStates.ImpMonster; using IL.EntityStates.LemurianBruiserMonster; using IL.EntityStates.LemurianMonster; using IL.EntityStates.RoboBallBoss.Weapon; using IL.EntityStates.ScavMonster; using IL.EntityStates.VagrantMonster.Weapon; using IL.EntityStates.Vulture.Weapon; using Inferno; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2.CharacterAI; using R2API.Utils; using RiftTitansMod.Modules; using RiftTitansMod.SkillStates.Chicken; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using Risky_Artifacts.Artifacts; using RoR2; using RoR2.CharacterAI; using RoR2.Projectile; 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("AdvPrediction")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("AdvPrediction")] [assembly: AssemblyTitle("AdvPrediction")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] 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 AdvancedPrediction { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.score.AdvancedPrediction", "AdvancedPrediction", "1.0.4")] public class AdvPredictionPlugin : BaseUnityPlugin { public const string PluginGUID = "com.score.AdvancedPrediction"; public const string PluginAuthor = "score"; public const string PluginName = "AdvancedPrediction"; public const string PluginVersion = "1.0.4"; public static AdvPredictionPlugin Instance { get; private set; } public static bool RooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); public static bool InfernoInstalled => Chainloader.PluginInfos.ContainsKey("HIFU.Inferno"); public static bool RiskyArtifactsInstalled => Chainloader.PluginInfos.ContainsKey("com.Moffein.RiskyArtifacts"); public static bool LeagueOfLiteralGays => Chainloader.PluginInfos.ContainsKey("com.phreel.TitansOfTheRiftSOTV"); public static bool EnemiesPlusInstalled => Chainloader.PluginInfos.ContainsKey("com.score.EnemiesPlusPlus"); public void Awake() { Instance = this; Log.Init(((BaseUnityPlugin)this).Logger); AdvPredictionConfig.Init(((BaseUnityPlugin)this).Config); PredictionHooks.Init(); HarmonyHooks.Init(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static float GetRiskyArtifactsWarfareProjectileSpeedMult() { if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(Warfare.artifact)) { return Warfare.projSpeed; } return 1f; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static float GetInfernoProjectileSpeedMult() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)Run.instance) && Run.instance.selectedDifficulty == Main.InfernoDiffIndex) { return Main.ProjectileSpeed.Value; } return 1f; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void GetProjectileSpeedModifiers(ref float speed) { if (InfernoInstalled) { speed *= GetInfernoProjectileSpeedMult(); } if (RiskyArtifactsInstalled) { speed *= GetRiskyArtifactsWarfareProjectileSpeedMult(); } } } public static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } public static void Debug(string data) { _logSource.LogDebug((object)data); } public static void Error(string data) { _logSource.LogError((object)data); } public static void Fatal(string data) { _logSource.LogFatal((object)data); } public static void Info(string data) { _logSource.LogInfo((object)data); } public static void Message(string data) { _logSource.LogMessage((object)data); } public static void Warning(string data) { _logSource.LogWarning((object)data); } } public static class AdvPredictionConfig { public static ConfigEntry<bool> enablePrediction; public static ConfigEntry<int> accuracy; private static ConfigFile PluginConfigFile { get; set; } public static void Init(ConfigFile cfg) { PluginConfigFile = cfg; string section = "Skills"; enablePrediction = PluginConfigFile.BindOption(section, "Enable Aim Prediction", defaultValue: true, "Allows enemies to use prediction."); accuracy = PluginConfigFile.BindOptionSlider(section, "Accuracy", 100, "Percent determining how accurate the prediction should be.", 0f, 100f); } public static ConfigEntry<T> BindOption<T>(this ConfigFile myConfig, string section, string name, T defaultValue, string description = "", bool restartRequired = false) { if (string.IsNullOrEmpty(description)) { description = name; } if (restartRequired) { description += " (restart required)"; } ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, description); if (AdvPredictionPlugin.RooInstalled) { TryRegisterOption<T>(val, restartRequired); } return val; } public static ConfigEntry<T> BindOptionSlider<T>(this ConfigFile myConfig, string section, string name, T defaultValue, string description = "", float min = 0f, float max = 20f, bool restartRequired = false) { if (string.IsNullOrEmpty(description)) { description = name; } string text = description; T val = defaultValue; description = text + " (Default: " + val?.ToString() + ")"; if (restartRequired) { description += " (restart required)"; } ConfigEntry<T> val2 = myConfig.Bind<T>(section, name, defaultValue, description); if (AdvPredictionPlugin.RooInstalled) { TryRegisterOptionSlider<T>(val2, min, max, restartRequired); } return val2; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void TryRegisterOption<T>(ConfigEntry<T> entry, bool restartRequired) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown //IL_00aa: 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_00d8: Expected O, but got Unknown //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Expected O, but got Unknown if (entry is ConfigEntry<string> val) { ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(val, restartRequired)); } else if (entry is ConfigEntry<float> val2) { ModSettingsManager.AddOption((BaseOption)new SliderOption(val2, new SliderConfig { min = 0f, max = 20f, formatString = "{0:0.00}", restartRequired = restartRequired })); } else if (entry is ConfigEntry<int> val3) { ModSettingsManager.AddOption((BaseOption)new IntSliderOption(val3, restartRequired)); } else if (entry is ConfigEntry<bool> val4) { ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val4, restartRequired)); } else if (entry is ConfigEntry<KeyboardShortcut> val5) { ModSettingsManager.AddOption((BaseOption)new KeyBindOption(val5, restartRequired)); } else if (typeof(T).IsEnum) { ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)entry, restartRequired)); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void TryRegisterOptionSlider<T>(ConfigEntry<T> entry, float min, float max, bool restartRequired) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0056: Unknown result type (might be due to invalid IL or missing references) //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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown if (entry is ConfigEntry<int> val) { ModSettingsManager.AddOption((BaseOption)new IntSliderOption(val, new IntSliderConfig { min = (int)min, max = (int)max, formatString = "{0:0.00}", restartRequired = restartRequired })); } else if (entry is ConfigEntry<float> val2) { ModSettingsManager.AddOption((BaseOption)new SliderOption(val2, new SliderConfig { min = min, max = max, formatString = "{0:0.00}", restartRequired = restartRequired })); } } } } namespace AdvancedPrediction.Prediction { public static class HarmonyHooks { public static Harmony Patcher; public static void Init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown Patcher = new Harmony("com.score.AdvancedPrediction"); if (AdvPredictionPlugin.LeagueOfLiteralGays) { League(); } if (AdvPredictionPlugin.EnemiesPlusInstalled) { Enemies(); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void League() { Patcher.CreateClassProcessor(typeof(RaptorPrediction)).Patch(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void Enemies() { Patcher.CreateClassProcessor(typeof(EnemiesPlusBeetle)).Patch(); Patcher.CreateClassProcessor(typeof(EnemiesPlusImp)).Patch(); } } [HarmonyPatch(typeof(Shoot), "Fire")] public class RaptorPrediction { [HarmonyTranspiler] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { foreach (CodeInstruction code in instructions) { yield return code; if (CodeInstructionExtensions.Calls(code, AccessTools.Method(typeof(BaseState), "GetAimRay", (Type[])null, (Type[])null))) { yield return new CodeInstruction(OpCodes.Ldarg_0, (object)null); yield return new CodeInstruction(OpCodes.Call, (object)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")); yield return new CodeInstruction(OpCodes.Ldsfld, (object)AccessTools.DeclaredField(typeof(Projectiles), "chickenProjectilePrefab")); yield return new CodeInstruction(OpCodes.Call, (object)Reflection.GetMethodCached(typeof(PredictionUtils), "PredictAimray")); } } } } [HarmonyPatch(typeof(BeetleSpit), "Fire")] public class EnemiesPlusBeetle { [HarmonyILManipulator] public static void ILBeetle(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown PredictionHooks.FireProjectile<BeetleSpit>(new ILCursor(il)); } } [HarmonyPatch(typeof(ImpVoidSpike), "HandleSlash")] public class EnemiesPlusImp { [HarmonyILManipulator] public static void ILImp(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown PredictionHooks.FireProjectile<ImpVoidSpike>(new ILCursor(il)); } } public class PredictionHooks { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_FindEnemyHurtBox <>9__0_0; public static Manipulator <>9__0_1; public static Manipulator <>9__0_2; public static Manipulator <>9__0_3; public static Manipulator <>9__0_4; public static Manipulator <>9__0_5; public static Manipulator <>9__0_6; public static Manipulator <>9__0_7; public static Manipulator <>9__0_8; public static Manipulator <>9__0_9; public static Manipulator <>9__0_10; public static Manipulator <>9__0_11; public static Manipulator <>9__0_12; public static Manipulator <>9__0_13; public static Manipulator <>9__0_14; public static Manipulator <>9__0_15; public static Func<Instruction, bool> <>9__4_0; public static Func<Instruction, bool> <>9__4_2; public static Func<Instruction, bool> <>9__5_1; public static Func<Instruction, bool> <>9__5_3; public static Func<Instruction, bool> <>9__5_5; public static Func<Ray, Transform, CharacterBody, GameObject, Ray> <>9__5_0; internal HurtBox <Init>b__0_0(orig_FindEnemyHurtBox orig, BaseAI self, float maxDist, bool _, bool filterByLoS) { return orig.Invoke(self, maxDist, true, filterByLoS); } internal void <Init>b__0_1(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireSunder_FixedUpdate(new ILCursor(il)); } internal void <Init>b__0_2(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown ChargeTrioBomb_FixedUpdate(new ILCursor(il)); } internal void <Init>b__0_3(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<GenericProjectileBaseState>(new ILCursor(il)); } internal void <Init>b__0_4(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireCannons>(new ILCursor(il)); } internal void <Init>b__0_5(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireEyeBlast>(new ILCursor(il)); } internal void <Init>b__0_6(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireWindblade>(new ILCursor(il)); } internal void <Init>b__0_7(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireHook>(new ILCursor(il)); } internal void <Init>b__0_8(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireFireball>(new ILCursor(il)); } internal void <Init>b__0_9(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireMegaFireball>(new ILCursor(il)); } internal void <Init>b__0_10(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireEnergyCannon>(new ILCursor(il)); } internal void <Init>b__0_11(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireBombardment>(new ILCursor(il)); } internal void <Init>b__0_12(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireTarball>(new ILCursor(il)); } internal void <Init>b__0_13(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireSpines>(new ILCursor(il)); } internal void <Init>b__0_14(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectileGroup<JellyBarrage>(new ILCursor(il)); } internal void <Init>b__0_15(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectileGroup<FireVoidspikes>(new ILCursor(il)); } internal bool <FireSunder_FixedUpdate>b__4_0(Instruction x) { return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay"); } internal bool <FireSunder_FixedUpdate>b__4_2(Instruction x) { return ILPatternMatchingExt.MatchCall(x, (MethodBase)AccessTools.PropertyGetter(typeof(ProjectileManager), "instance")); } internal bool <ChargeTrioBomb_FixedUpdate>b__5_1(Instruction x) { return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay"); } internal bool <ChargeTrioBomb_FixedUpdate>b__5_3(Instruction x) { return ILPatternMatchingExt.MatchCall<ChargeTrioBomb>(x, "FindTargetChildTransformFromBombIndex"); } internal bool <ChargeTrioBomb_FixedUpdate>b__5_5(Instruction x) { return ILPatternMatchingExt.MatchCall(x, (MethodBase)AccessTools.PropertyGetter(typeof(ProjectileManager), "instance")); } internal Ray <ChargeTrioBomb_FixedUpdate>b__5_0(Ray aimRay, Transform transform, CharacterBody body, GameObject prefab) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) ((Ray)(ref aimRay)).origin = transform.position; return PredictionUtils.PredictAimray(aimRay, body, prefab); } } public static void Init() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Expected O, but got Unknown //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0123: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Expected O, but got Unknown //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Expected O, but got Unknown //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Expected O, but got Unknown //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Expected O, but got Unknown //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Expected O, but got Unknown //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Expected O, but got Unknown //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Expected O, but got Unknown object obj = <>c.<>9__0_0; if (obj == null) { hook_FindEnemyHurtBox val = (orig_FindEnemyHurtBox orig, BaseAI self, float maxDist, bool _, bool filterByLoS) => orig.Invoke(self, maxDist, true, filterByLoS); <>c.<>9__0_0 = val; obj = (object)val; } BaseAI.FindEnemyHurtBox += (hook_FindEnemyHurtBox)obj; object obj2 = <>c.<>9__0_1; if (obj2 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireSunder_FixedUpdate(new ILCursor(il)); }; <>c.<>9__0_1 = val2; obj2 = (object)val2; } FireSunder.FixedUpdate += (Manipulator)obj2; object obj3 = <>c.<>9__0_2; if (obj3 == null) { Manipulator val3 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown ChargeTrioBomb_FixedUpdate(new ILCursor(il)); }; <>c.<>9__0_2 = val3; obj3 = (object)val3; } ChargeTrioBomb.FixedUpdate += (Manipulator)obj3; object obj4 = <>c.<>9__0_3; if (obj4 == null) { Manipulator val4 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<GenericProjectileBaseState>(new ILCursor(il)); }; <>c.<>9__0_3 = val4; obj4 = (object)val4; } GenericProjectileBaseState.FireProjectile += (Manipulator)obj4; object obj5 = <>c.<>9__0_4; if (obj5 == null) { Manipulator val5 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireCannons>(new ILCursor(il)); }; <>c.<>9__0_4 = val5; obj5 = (object)val5; } FireCannons.OnEnter += (Manipulator)obj5; object obj6 = <>c.<>9__0_5; if (obj6 == null) { Manipulator val6 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireEyeBlast>(new ILCursor(il)); }; <>c.<>9__0_5 = val6; obj6 = (object)val6; } FireEyeBlast.FixedUpdate += (Manipulator)obj6; object obj7 = <>c.<>9__0_6; if (obj7 == null) { Manipulator val7 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireWindblade>(new ILCursor(il)); }; <>c.<>9__0_6 = val7; obj7 = (object)val7; } FireWindblade.OnEnter += (Manipulator)obj7; object obj8 = <>c.<>9__0_7; if (obj8 == null) { Manipulator val8 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireHook>(new ILCursor(il)); }; <>c.<>9__0_7 = val8; obj8 = (object)val8; } FireHook.OnEnter += (Manipulator)obj8; object obj9 = <>c.<>9__0_8; if (obj9 == null) { Manipulator val9 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireFireball>(new ILCursor(il)); }; <>c.<>9__0_8 = val9; obj9 = (object)val9; } FireFireball.OnEnter += (Manipulator)obj9; object obj10 = <>c.<>9__0_9; if (obj10 == null) { Manipulator val10 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireMegaFireball>(new ILCursor(il)); }; <>c.<>9__0_9 = val10; obj10 = (object)val10; } FireMegaFireball.FixedUpdate += (Manipulator)obj10; object obj11 = <>c.<>9__0_10; if (obj11 == null) { Manipulator val11 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireEnergyCannon>(new ILCursor(il)); }; <>c.<>9__0_10 = val11; obj11 = (object)val11; } FireEnergyCannon.OnEnter += (Manipulator)obj11; object obj12 = <>c.<>9__0_11; if (obj12 == null) { Manipulator val12 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireBombardment>(new ILCursor(il)); }; <>c.<>9__0_11 = val12; obj12 = (object)val12; } FireBombardment.FireGrenade += (Manipulator)obj12; object obj13 = <>c.<>9__0_12; if (obj13 == null) { Manipulator val13 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireTarball>(new ILCursor(il)); }; <>c.<>9__0_12 = val13; obj13 = (object)val13; } FireTarball.FireSingleTarball += (Manipulator)obj13; object obj14 = <>c.<>9__0_13; if (obj14 == null) { Manipulator val14 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectile<FireSpines>(new ILCursor(il)); }; <>c.<>9__0_13 = val14; obj14 = (object)val14; } FireSpines.FixedUpdate += (Manipulator)obj14; object obj15 = <>c.<>9__0_14; if (obj15 == null) { Manipulator val15 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectileGroup<JellyBarrage>(new ILCursor(il)); }; <>c.<>9__0_14 = val15; obj15 = (object)val15; } JellyBarrage.FixedUpdate += (Manipulator)obj15; object obj16 = <>c.<>9__0_15; if (obj16 == null) { Manipulator val16 = delegate(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown FireProjectileGroup<FireVoidspikes>(new ILCursor(il)); }; <>c.<>9__0_15 = val16; obj16 = (object)val16; } FireVoidspikes.FixedUpdate += (Manipulator)obj16; } public static void FireProjectile<T>(ILCursor c, string prefabName) { if (c.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay") })) { c.EmitPredictAimray<T>(prefabName); } else { Log.Error("AccurateEnemies: Generic OnEnter IL Hook failed "); } } public static void FireProjectile<T>(ILCursor c) { if (c.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay") })) { c.EmitPredictAimray<T>(); } else { Log.Error("AccurateEnemies: Generic OnEnter IL Hook failed "); } } public static void FireProjectileGroup<T>(ILCursor c) { while (c.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay") })) { c.EmitPredictAimray<T>(); } } private static void FireSunder_FixedUpdate(ILCursor c) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) int loc = -1; if (c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay") }) && c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref loc) }) && loc != -1 && c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall(x, (MethodBase)AccessTools.PropertyGetter(typeof(ProjectileManager), "instance")) })) { c.Emit(OpCodes.Ldloc, loc); c.EmitPredictAimray<FireSunder>(); c.Emit(OpCodes.Stloc, loc); } else { Log.Error("AccurateEnemies: EntityStates.BeetleGuardMonster.FireSunder.FixedUpdate IL Hook failed"); } } private static void ChargeTrioBomb_FixedUpdate(ILCursor c) { //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) int rayLoc = -1; int transformLoc = -1; if (c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay") }) && c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref rayLoc) }) && rayLoc != -1 && c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall<ChargeTrioBomb>(x, "FindTargetChildTransformFromBombIndex") }) && c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref transformLoc) }) && transformLoc != -1 && c.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall(x, (MethodBase)AccessTools.PropertyGetter(typeof(ProjectileManager), "instance")) })) { c.Emit(OpCodes.Ldloc, rayLoc); c.Emit(OpCodes.Ldloc, transformLoc); c.Emit(OpCodes.Ldarg_0); c.Emit(OpCodes.Call, (MethodBase)AccessTools.PropertyGetter(typeof(ChargeTrioBomb), "characterBody")); c.Emit(OpCodes.Ldsfld, AccessTools.DeclaredField(typeof(ChargeTrioBomb), "bombProjectilePrefab")); c.EmitDelegate<Func<Ray, Transform, CharacterBody, GameObject, Ray>>((Func<Ray, Transform, CharacterBody, GameObject, Ray>)delegate(Ray aimRay, Transform transform, CharacterBody body, GameObject prefab) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) ((Ray)(ref aimRay)).origin = transform.position; return PredictionUtils.PredictAimray(aimRay, body, prefab); }); c.Emit(OpCodes.Stloc, rayLoc); } else { Log.Error("AccurateEnemies: EntityStates.Bell.BellWeapon.ChargeTrioBomb.FixedUpdate IL Hook failed"); } } } public static class PredictionUtils { private const float zero = 1E-05f; internal static void EmitPredictAimray<T>(this ILCursor c, string prefabName = "projectilePrefab") { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) c.Emit(OpCodes.Ldarg_0); c.Emit(OpCodes.Call, (MethodBase)AccessTools.PropertyGetter(typeof(EntityState), "characterBody")); FieldInfo fieldInfo = AccessTools.Field(typeof(T), prefabName); if (!fieldInfo.IsStatic) { c.Emit(OpCodes.Ldarg_0); } if (!fieldInfo.IsStatic) { c.Emit(OpCodes.Ldfld, fieldInfo); } else { c.Emit(OpCodes.Ldsfld, fieldInfo); } c.Emit(OpCodes.Call, (MethodBase)Reflection.GetMethodCached(typeof(PredictionUtils), "PredictAimray")); } public static Ray PredictAimray(Ray aimRay, CharacterBody body, GameObject projectilePrefab) { //IL_0034: 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_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Invalid comparison between Unknown and I4 //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0140: 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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) if (!AdvPredictionConfig.enablePrediction.Value || !Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)body.master) || !Object.op_Implicit((Object)(object)projectilePrefab)) { return aimRay; } float speed = 0f; ProjectileSimple val = default(ProjectileSimple); if (projectilePrefab.TryGetComponent<ProjectileSimple>(ref val)) { speed = val.desiredForwardSpeed; } ProjectileCharacterController val2 = default(ProjectileCharacterController); if (projectilePrefab.TryGetComponent<ProjectileCharacterController>(ref val2)) { speed = val2.velocity; } if ((int)body.teamComponent.teamIndex != 1) { AdvPredictionPlugin.GetProjectileSpeedModifiers(ref speed); } CharacterBody aimTargetBody = GetAimTargetBody(body); if (speed > 0f && Object.op_Implicit((Object)(object)aimTargetBody)) { Vector3 position = aimTargetBody.transform.position; Vector3 aP = Vector3.zero; CharacterMotor characterMotor = aimTargetBody.characterMotor; Vector3 val3; Vector3 aT; if (Object.op_Implicit((Object)(object)characterMotor) && characterMotor.hasEffectiveAuthority) { val3 = characterMotor.velocity; aT = (PreMove(characterMotor) - val3) / Time.fixedDeltaTime; } else { val3 = (position - aimTargetBody.previousPosition) / Time.fixedDeltaTime; aT = Vector3.zero; } if (((Vector3)(ref val3)).sqrMagnitude > 1E-05f) { return GetRay(aimRay, speed, aP, position, val3, aT); } } return aimRay; } private static CharacterBody GetAimTargetBody(CharacterBody body) { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) BaseAI[] aiComponents = body.master.aiComponents; foreach (BaseAI val in aiComponents) { if (Object.op_Implicit((Object)(object)val) && val.hasAimTarget) { Target aimTarget = val.skillDriverEvaluation.aimTarget; if (Object.op_Implicit((Object)(object)aimTarget.characterBody) && aimTarget.characterBody.teamComponent.teamIndex != body.teamComponent.teamIndex && Object.op_Implicit((Object)(object)aimTarget.healthComponent) && aimTarget.healthComponent.alive) { return aimTarget.characterBody; } } } return null; } private static Vector3 PreMove(CharacterMotor motor) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) float num = motor.acceleration; if (motor.isAirControlForced || !motor.isGrounded) { num *= (motor.disableAirControlUntilCollision ? 0f : motor.airControl); } Vector3 val = motor.moveDirection; if (!motor.isFlying) { val.y = 0f; } if (motor.body.isSprinting) { float magnitude = ((Vector3)(ref val)).magnitude; if (magnitude < 1f && magnitude > 0f) { val *= 1f / ((Vector3)(ref val)).magnitude; } } val *= motor.walkSpeed; if (!motor.isFlying) { val.y = motor.velocity.y; } Vector3 result = Vector3.MoveTowards(motor.velocity, val, num * Time.fixedDeltaTime); if (motor.useGravity) { ref float y = ref result.y; y += Physics.gravity.y * Time.fixedDeltaTime; if (motor.isGrounded) { y = Mathf.Max(y, 0f); } } return result; } private static Ray GetRay(Ray aimRay, float sP, Vector3 aP, Vector3 pT, Vector3 vT, Vector3 aT) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: 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_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) pT -= ((Ray)(ref aimRay)).origin; bool flag = ((Vector3)(ref aT)).sqrMagnitude > 1E-05f; float num = ((Vector3)(ref vT)).sqrMagnitude - sP * sP; float num2 = 2f * Vector3.Dot(vT, pT); float sqrMagnitude = ((Vector3)(ref pT)).sqrMagnitude; double[] array; if (flag) { float num3 = ((Vector3)(ref aT)).sqrMagnitude * 0.25f; float num4 = Vector3.Dot(aT, vT); num += Vector3.Dot(aT, pT); array = SolveQuartic(num3, num4, num, num2, sqrMagnitude); } else { array = SolveQuadratic(num, num2, sqrMagnitude); } if (array != null) { float num5 = float.MaxValue; for (int i = 0; i < array.Length; i++) { float num6 = (float)array[i]; if (num6 > 0f && num6 < num5) { num5 = num6; } } if (num5 > 0f && num5 < float.MaxValue) { Vector3 val = pT + vT * num5 + 0.5f * aT * num5 * num5; RaycastHit val2 = default(RaycastHit); if (Physics.Linecast(pT + ((Ray)(ref aimRay)).origin, val + ((Ray)(ref aimRay)).origin, ref val2)) { val = Vector3.MoveTowards(pT, val, ((RaycastHit)(ref val2)).distance) + ((RaycastHit)(ref val2)).normal; } Vector3 val3 = val / num5 - 0.5f * aP * num5; ((Vector3)(ref val3)).Normalize(); return new Ray(((Ray)(ref aimRay)).origin, Vector3.Lerp(((Ray)(ref aimRay)).direction, val3, (float)AdvPredictionConfig.accuracy.Value * 0.01f)); } } return aimRay; } public static double[] SolveQuadratic(double a, double b, double c) { double num = b * b - 4.0 * a * c; if (num < 0.0) { return null; } num = Math.Sqrt(num); double num2 = ((b < 0.0) ? (-0.5 * (b - num)) : (-0.5 * (b + num))); double num3 = num2 / a; double num4 = c / num2; return (!(num3 > num4)) ? new double[2] { num3, num4 } : new double[2] { num4, num3 }; } public static double[] SolveQuartic(double a, double b, double c, double d, double e) { double num = 1.0 / a; double num2 = b * num; double num3 = c * num; double num4 = d * num; double num5 = e * num; double num6 = num2 * num2; double num7 = -0.375 * num6 + num3; double num8 = 0.125 * num6 * num2 - 0.5 * num2 * num3 + num4; double num9 = -3.0 / 256.0 * num6 * num6 + 0.0625 * num6 * num3 - 0.25 * num2 * num4 + num5; double num10 = SolveCubicForQuartic(-0.5 * num7, 0.0 - num9, 0.5 * num9 * num7 - 0.125 * num8 * num8); double num11 = 2.0 * num10 - num7; if (num11 < 0.0) { if (!(num11 > 1E-10)) { return null; } num11 = 0.0; } double num12; if (num11 < 1E-10) { num12 = num10 * num10 - num9; if (num12 < 0.0) { return null; } num12 = Math.Sqrt(num12); } else { num11 = Math.Sqrt(num11); num12 = 0.5 * num8 / num11; } double num13 = num11 * num11; double num14 = -0.25 * num2; double num15 = num13 - 4.0 * (num10 - num12); double num16 = num13 - 4.0 * (num10 + num12); if (num15 >= 0.0 && num16 >= 0.0) { num15 = Math.Sqrt(num15); num16 = Math.Sqrt(num16); double[] array = new double[4] { -0.5 * (num11 + num15) + num14, -0.5 * (num11 - num15) + num14, 0.5 * (num11 + num16) + num14, 0.5 * (num11 - num16) + num14 }; for (int i = 1; i < 4; i++) { int num17 = i; while (num17 > 0 && array[num17 - 1] > array[num17]) { ref double reference = ref array[num17 - 1]; ref double reference2 = ref array[num17]; double num18 = array[num17]; double num19 = array[num17 - 1]; reference = num18; reference2 = num19; num17--; } } return array; } if (num15 >= 0.0) { num15 = Math.Sqrt(num15); return new double[2] { -0.5 * (num11 + num15) + num14, -0.5 * (num11 - num15) + num14 }; } if (num16 >= 0.0) { num16 = Math.Sqrt(num16); return new double[2] { 0.5 * (num11 - num16) + num14, 0.5 * (num11 + num16) + num14 }; } return null; } private static double SolveCubicForQuartic(double p, double q, double r) { double num = p * p; double num2 = (num - 3.0 * q) / 9.0; double num3 = (p * (num - 4.5 * q) + 13.5 * r) / 27.0; double num4 = num2 * num2 * num2; double num5 = num3 * num3; double num6 = num4 - num5; double num7 = p / 3.0; if (num6 >= 0.0) { num6 = num3 / Math.Sqrt(num4); double d = Math.Acos(num6) / 3.0; double num8 = -2.0 * Math.Sqrt(num2); return num8 * Math.Cos(d) - num7; } double num9 = Math.Pow(Math.Sqrt(num5 - num4) + Math.Abs(num3), 1.0 / 3.0); return (num3 < 0.0) ? (num9 + num2 / num9 - num7) : (0.0 - (num9 + num2 / num9) - num7); } } }