Decompiled source of DSPAfterburner v0.0.4

DSPAfterburner.dll

Decompiled a week ago
using System;
using System.Diagnostics;
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 UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace DSPAfterburner;

[BepInPlugin("Appun.DSP.plugin.Afterburner", "DSPAfterburner", "0.0.4")]
[HarmonyPatch]
public class DSPAfterburner : BaseUnityPlugin
{
	public class LogManager
	{
		public static ManualLogSource Logger;
	}

	public static ConfigEntry<float> speedMultiplier;

	public static ConfigEntry<float> maximumSpeed;

	public static ConfigEntry<KeyCode> KeyConfig;

	public void Awake()
	{
		LogManager.Logger = ((BaseUnityPlugin)this).Logger;
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
		speedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("general", "speedMultiplier", 2.5f, "Speed Multiplier 速度の倍率");
		maximumSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("general", "maximumSpeed", 100f, "Maximum Speed 最大速度");
		KeyConfig = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("general", "KeyConfig", (KeyCode)304, "Key Setting キー設定");
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(PlayerMove_Fly), "GameTick")]
	public static bool PlayerMove_Fly_GameTick_Prefix(PlayerMove_Fly __instance)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Invalid comparison between Unknown and I4
		//IL_002d: 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_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: 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_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: 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_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: 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_0063: 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_0079: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: 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_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: Invalid comparison between Unknown and I4
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Invalid comparison between Unknown and I4
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Invalid comparison between Unknown and I4
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_0124: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: 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_0137: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: 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)
		//IL_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_015d: Unknown result type (might be due to invalid IL or missing references)
		//IL_015e: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_0186: 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_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: 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_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_024c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0252: Invalid comparison between Unknown and I4
		//IL_0333: Unknown result type (might be due to invalid IL or missing references)
		//IL_0339: Invalid comparison between Unknown and I4
		//IL_057a: Unknown result type (might be due to invalid IL or missing references)
		//IL_057f: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05aa: Invalid comparison between Unknown and I4
		//IL_0452: Unknown result type (might be due to invalid IL or missing references)
		//IL_0458: Invalid comparison between Unknown and I4
		//IL_048c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0528: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_06bc: Invalid comparison between Unknown and I4
		//IL_0788: Unknown result type (might be due to invalid IL or missing references)
		//IL_0792: Unknown result type (might be due to invalid IL or missing references)
		//IL_0852: Unknown result type (might be due to invalid IL or missing references)
		//IL_0857: Unknown result type (might be due to invalid IL or missing references)
		//IL_0866: Unknown result type (might be due to invalid IL or missing references)
		//IL_086b: Unknown result type (might be due to invalid IL or missing references)
		//IL_07cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_07d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_07e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_07f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_07fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0803: Unknown result type (might be due to invalid IL or missing references)
		//IL_080e: Unknown result type (might be due to invalid IL or missing references)
		//IL_080f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0811: Unknown result type (might be due to invalid IL or missing references)
		//IL_0816: Unknown result type (might be due to invalid IL or missing references)
		//IL_081a: Unknown result type (might be due to invalid IL or missing references)
		//IL_081f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0820: Unknown result type (might be due to invalid IL or missing references)
		//IL_0825: Unknown result type (might be due to invalid IL or missing references)
		//IL_0829: Unknown result type (might be due to invalid IL or missing references)
		//IL_082e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0832: Unknown result type (might be due to invalid IL or missing references)
		//IL_0837: Unknown result type (might be due to invalid IL or missing references)
		//IL_083b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0842: Unknown result type (might be due to invalid IL or missing references)
		//IL_0847: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_08bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_08cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0913: Unknown result type (might be due to invalid IL or missing references)
		//IL_0915: Unknown result type (might be due to invalid IL or missing references)
		//IL_091b: Unknown result type (might be due to invalid IL or missing references)
		//IL_091c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0921: Unknown result type (might be due to invalid IL or missing references)
		//IL_0923: Unknown result type (might be due to invalid IL or missing references)
		//IL_0925: Unknown result type (might be due to invalid IL or missing references)
		//IL_0927: Unknown result type (might be due to invalid IL or missing references)
		//IL_092c: Unknown result type (might be due to invalid IL or missing references)
		//IL_08e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_08e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_08ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a03: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a04: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a09: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a0b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a31: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a33: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a35: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aa2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aa7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ab8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ac2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ac7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ad8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0add: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aee: Unknown result type (might be due to invalid IL or missing references)
		//IL_0af8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0afd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a80: Unknown result type (might be due to invalid IL or missing references)
		float num = 1f / 60f;
		if ((int)((PlayerAction)__instance).player.movementState == 2)
		{
			Vector3 forward = ((Component)((PlayerAction)__instance).controller.mainCamera).transform.forward;
			Vector3 val = ((PlayerAction)__instance).player.position;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			val = Vector3.Cross(normalized, forward);
			Vector3 normalized2 = ((Vector3)(ref val)).normalized;
			forward = Vector3.Cross(normalized2, normalized);
			Vector3 val2 = forward * ((PlayerAction)__instance).controller.input0.y + normalized2 * ((PlayerAction)__instance).controller.input0.x;
			if (((int)((PlayerAction)__instance).controller.cmd.type == 5 && !VFInput._godModeMechaMove && !PlayerController.operationWhenBuild) || __instance.navigation.navigating)
			{
				val2 = Vector3.zero;
			}
			bool flag = (int)((PlayerAction)__instance).controller.actionBuild.blueprintMode > 0;
			if (flag)
			{
				if (!VFInput._godModeMechaMove)
				{
					val2 = Vector3.zero;
				}
				else
				{
					val = Vector3.Cross(normalized, ((Component)((PlayerAction)__instance).controller.mainCamera).transform.up);
					normalized2 = ((Vector3)(ref val)).normalized;
					val = Vector3.Cross(((Component)((PlayerAction)__instance).controller.mainCamera).transform.right, normalized);
					forward = ((Vector3)(ref val)).normalized;
					val2 = forward * ((PlayerAction)__instance).controller.input0.y + normalized2 * ((PlayerAction)__instance).controller.input0.x;
				}
			}
			PlanetData localPlanet = GameMain.localPlanet;
			bool flag2 = localPlanet != null && (int)localPlanet.type != 5;
			float softLandingRecover = ((PlayerAction)__instance).controller.softLandingRecover;
			softLandingRecover *= softLandingRecover;
			float num2 = 0.022f * softLandingRecover;
			float num3 = ((PlayerAction)__instance).player.mecha.walkSpeed * 2.5f;
			if (Input.GetKey(KeyConfig.Value))
			{
				num3 *= speedMultiplier.Value;
				if (num3 > maximumSpeed.Value)
				{
					num3 = maximumSpeed.Value;
				}
			}
			float num4 = ((PlayerAction)__instance).controller.input1.y;
			if (((int)((PlayerAction)__instance).controller.cmd.type == 5 && !VFInput._godModeMechaMove && !PlayerController.operationWhenBuild) || __instance.navigation.navigating)
			{
				num4 = 0f;
			}
			if (flag && !VFInput._godModeMechaMove)
			{
				num4 = 0f;
			}
			if (__instance.navigation.navigating)
			{
				bool flag3 = false;
				bool flag4 = false;
				__instance.navigation.DetermineHighOperation(num3, ref flag3, ref flag4);
				num4 = 0f;
				if (flag3)
				{
					num4 += 1f;
				}
				if (flag4 && __instance.targetAltitude > 15.01f + num * 20f)
				{
					num4 += -1f;
				}
			}
			__instance.targetAltitude += num4 * num * 20f;
			if ((int)((PlayerAction)__instance).controller.cmd.type == 5 && !PlayerController.operationWhenBuild && __instance.targetAltitude > 40f)
			{
				__instance.targetAltitude = 40f;
			}
			if (flag && !VFInput._godModeMechaMove && __instance.targetAltitude > 40f)
			{
				__instance.targetAltitude = 40f;
			}
			if (num4 == 0f && __instance.targetAltitude > 15f)
			{
				__instance.targetAltitude -= num * 20f * 0.3f;
				if (__instance.targetAltitude < 15f)
				{
					__instance.targetAltitude = 15f;
				}
			}
			else if (__instance.targetAltitude >= 50f)
			{
				if (__instance.currentAltitude > 49f && ((PlayerAction)__instance).controller.horzSpeed > 12.5f && __instance.mecha.thrusterLevel >= 2)
				{
					if ((int)((PlayerAction)__instance).controller.cmd.type == 5)
					{
						((CommandState)(ref ((PlayerAction)__instance).controller.cmd)).SetNoneCommand();
						((PlayerAction)__instance).controller.actionBuild.blueprintMode = (EBlueprintMode)0;
					}
					((PlayerAction)__instance).controller.movementStateInFrame = (EMovementState)3;
					((PlayerAction)__instance).controller.actionSail.ResetSailState();
					GameCamera.instance.SyncForSailMode();
					GameMain.gameScenario.NotifyOnSailModeEnter();
				}
				__instance.targetAltitude = 50f;
			}
			if (flag2)
			{
				if (__instance.targetAltitude < 14.5f)
				{
					if (num4 > 0f)
					{
						__instance.targetAltitude = 15f;
					}
					else
					{
						__instance.targetAltitude = 1f;
					}
					if (__instance.currentAltitude < 3f)
					{
						((PlayerAction)__instance).controller.movementStateInFrame = (EMovementState)0;
						((PlayerAction)__instance).controller.softLandingTime = 1.2f;
					}
				}
			}
			else if (__instance.targetAltitude < 20f)
			{
				__instance.targetAltitude = 20f;
			}
			float realRadius = ((PlayerAction)__instance).player.planetData.realRadius;
			val = ((PlayerAction)__instance).player.position;
			float num5 = Mathf.Max(((Vector3)(ref val)).magnitude, realRadius * 0.9f);
			__instance.currentAltitude = num5 - realRadius;
			if ((int)localPlanet.type == 5 && __instance.mecha.coreEnergy < 10000000.0 && __instance.currentAltitude < 10f)
			{
				__instance.targetAltitude = __instance.currentAltitude + 0.5f;
			}
			float num6 = __instance.targetAltitude - __instance.currentAltitude;
			float num7 = Mathf.Clamp(num / (Time.fixedDeltaTime + 1E-05f), 0.16f, 6f);
			if (__instance.targetAltitude > 17f || __instance.targetAltitude < 13f)
			{
				num7 = 1f / num7;
				num7 = Mathf.Sqrt(num7);
			}
			__instance.verticalThrusterForce = 0f;
			float num8 = Mathf.Clamp(num6 * 0.5f, -10f, 10f) * 100f * num7 + (float)((VectorLF3)(ref ((PlayerAction)__instance).controller.universalGravity)).magnitude;
			num8 = Mathf.Max(0f, num8);
			__instance.verticalThrusterForce += num8;
			float num9 = 1f;
			if ((int)localPlanet.type == 5 && __instance.mecha.coreEnergy < 120000000.0)
			{
				num9 = Mathf.Clamp01((float)(__instance.mecha.coreEnergy / 120000000.0 + 0.05));
			}
			__instance.verticalThrusterForce *= num9;
			__instance.UseThrustEnergy(ref __instance.verticalThrusterForce, ((PlayerAction)__instance).controller.vertSpeed, (double)num);
			__instance.verticalThrusterForce /= num9;
			float num10 = (float)(Math.Sin(GlobalObject.timeSinceStart * 2.0) * 0.1 + 1.0);
			if (Mathf.Abs(__instance.verticalThrusterForce) > 0.001f)
			{
				((PlayerAction)__instance).controller.AddLocalForce(normalized * (__instance.verticalThrusterForce * num10));
			}
			OrderNode currentOrder = ((PlayerAction)__instance).player.currentOrder;
			if (currentOrder != null && !currentOrder.targetReached)
			{
				Vector3 val3 = ((Vector3)(ref currentOrder.target)).normalized * localPlanet.realRadius;
				val = ((PlayerAction)__instance).player.position;
				Vector3 val4 = val3 - ((Vector3)(ref val)).normalized * localPlanet.realRadius;
				float magnitude = ((Vector3)(ref val4)).magnitude;
				val = Vector3.Cross(normalized, val4);
				val = Vector3.Cross(((Vector3)(ref val)).normalized, normalized);
				val4 = ((Vector3)(ref val)).normalized;
				__instance.rtsVelocity = Vector3.Slerp(__instance.rtsVelocity, val4 * num3, num2);
			}
			else
			{
				__instance.rtsVelocity = Vector3.MoveTowards(__instance.rtsVelocity, Vector3.zero, num * 6f * num3);
			}
			if (__instance.navigation.navigating)
			{
				__instance.navigation.DetermineHighVelocity(num3, num2, ref __instance.moveVelocity, num);
			}
			else
			{
				__instance.moveVelocity = Vector3.Slerp(__instance.moveVelocity, val2 * num3, num2);
			}
			Vector3 val5 = __instance.moveVelocity + __instance.rtsVelocity;
			if ((double)softLandingRecover > 0.9)
			{
				val5 = Vector3.ClampMagnitude(val5, num3);
			}
			__instance.UseFlyEnergy(ref val5, __instance.mecha.walkPower * (double)num * (double)((PlayerAction)__instance).controller.softLandingRecover);
			Vector3 val6 = Vector3.Dot(val5, normalized) * normalized;
			val5 -= val6;
			float num11 = ((PlayerAction)__instance).controller.vertSpeed;
			if (num11 > 50f)
			{
				num11 = 50f;
			}
			float num12 = Mathf.Lerp(0.95f, 0.8f, Mathf.Abs(num6) * 0.3f);
			float num13 = num12;
			num12 = Mathf.Lerp(1f, num12, Mathf.Clamp01(__instance.verticalThrusterForce));
			num13 = Mathf.Lerp(1f, num13, Mathf.Clamp01(__instance.verticalThrusterForce) * Mathf.Clamp01((float)(__instance.mecha.coreEnergy - 5000.0) * 0.0001f));
			if (num11 > 0f)
			{
				num11 *= num12;
			}
			else if (num11 < 0f)
			{
				num11 *= num13;
			}
			((PlayerAction)__instance).controller.velocity = num11 * normalized + val5;
			if (((Vector3)(ref val2)).sqrMagnitude > 0.25f)
			{
				((PlayerAction)__instance).controller.turning_raw = Vector3.SignedAngle(val5, val2, normalized);
			}
			else
			{
				((PlayerAction)__instance).controller.turning_raw = 0f;
			}
			if (flag2 && __instance.mecha.coreEnergy < 10000.0)
			{
				((PlayerAction)__instance).controller.movementStateInFrame = (EMovementState)0;
				((PlayerAction)__instance).controller.softLandingTime = 1.2f;
			}
			((PlayerAction)__instance).controller.actionWalk.rtsVelocity = __instance.rtsVelocity;
			((PlayerAction)__instance).controller.actionWalk.moveVelocity = __instance.moveVelocity * 0.5f;
			((PlayerAction)__instance).controller.actionDrift.rtsVelocity = __instance.rtsVelocity;
			((PlayerAction)__instance).controller.actionDrift.moveVelocity = __instance.moveVelocity * 0.5f;
		}
		return false;
	}
}