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 ValkyrieFlyMount v1.0.11
ValkyrieFlyMount.dll
Decompiled 7 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using SoftReferenceableAssets; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ValkyrieFlyMount")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ValkyrieFlyMount")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("4c60a857-ac79-4677-abf0-ca105c4dbf4e")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace ValkyrieFlyMount; [BepInPlugin("shudnal.ValkyrieFlyMount", "Valkyrie Fly Mount", "1.0.11")] public class ValkyrieFlyMount : BaseUnityPlugin { [HarmonyPatch(typeof(Menu), "OnSkip")] public static class Menu_OnSkip_IntroSkip { private static bool Prefix(Menu __instance) { if (!Object.op_Implicit((Object)(object)controlledValkyrie)) { return true; } __instance.Hide(); controlledValkyrie.DropPlayer(menuTeleportOnSkip.Value); return menuTeleportOnSkip.Value; } } [HarmonyPatch(typeof(Valkyrie), "Awake")] public static class Valkyrie_Awake_MountInitialization { private static bool Prefix(Valkyrie __instance) { //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_013b: 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_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: 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_01cb: 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_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_021a: 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_0225: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_0195: 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_019b: Unknown result type (might be due to invalid IL or missing references) if (!modEnabled.Value) { return true; } __instance.m_nview = ((Component)__instance).GetComponent<ZNetView>(); __instance.m_animator = ((Component)__instance).GetComponentInChildren<Animator>(); if (!__instance.m_nview.IsOwner()) { ((Behaviour)__instance).enabled = false; return false; } if (!isFlyingMountValkyrie) { return true; } Rigidbody val = default(Rigidbody); if (!((Component)__instance).gameObject.TryGetComponent<Rigidbody>(ref val)) { ((Component)__instance).gameObject.AddComponent<Rigidbody>().useGravity = false; } __instance.m_startAltitude = 10f; __instance.m_textDuration = 0f; __instance.m_descentAltitude = 100f; __instance.m_attachOffset = new Vector3(-0.1f, 1.5f, 0.1f); __instance.m_speed = 10f; __instance.m_turnRate = 5f; __instance.m_dropHeight = 10f; Vector3 position = ((Component)Player.m_localPlayer).transform.position; position.y += __instance.m_startAltitude; ((Component)__instance).transform.position = position; Vector3 val2 = default(Vector3); Quaternion rotation = default(Quaternion); GameCamera.m_instance.GetCameraPosition(Time.unscaledDeltaTime, ref val2, ref rotation); ((Component)__instance).transform.rotation = rotation; Player.m_localPlayer.m_intro = true; __instance.m_targetPoint = new Vector3(0f, ZoneSystem.instance.GetGroundHeight(Vector3.zero) + 150f, 0f); LocationInstance val3 = default(LocationInstance); if (ZoneSystem.instance.FindClosestLocation("StartTemple", Vector3.zero, ref val3)) { __instance.m_targetPoint = val3.m_position; } float num = Random.value * (float)Math.PI * 2f; Vector3 val4 = default(Vector3); ((Vector3)(ref val4))..ctor(Mathf.Sin(num), 0f, Mathf.Cos(num)); Vector3 val5 = Vector3.Cross(val4, Vector3.up); __instance.m_descentStart = __instance.m_targetPoint + val4 * __instance.m_startDescentDistance + val5 * 200f; __instance.m_descentStart.y = __instance.m_descentAltitude; Vector3 val6 = __instance.m_targetPoint - __instance.m_descentStart; val6.y = 0f; ((Vector3)(ref val6)).Normalize(); __instance.m_flyAwayPoint = __instance.m_targetPoint + val6 * __instance.m_startDescentDistance; __instance.m_flyAwayPoint.y = __instance.m_startAltitude; __instance.SyncPlayer(true); val2 = ((Component)__instance).transform.position; string? text = ((object)(Vector3)(ref val2)).ToString(); val2 = ZNet.instance.GetReferencePosition(); LogInfo("Setting up valkyrie " + text + " " + ((object)(Vector3)(ref val2)).ToString()); return false; } } [HarmonyPatch(typeof(Valkyrie), "LateUpdate")] public static class Valkyrie_LateUpdate_DismountCommand { private static void Postfix(Valkyrie __instance) { //IL_0034: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) if (!modEnabled.Value || (Object)(object)__instance != (Object)(object)controlledValkyrie || !isFlyingMountValkyrie) { return; } KeyboardShortcut value = mountShortcut.Value; if (!((KeyboardShortcut)(ref value)).IsDown()) { value = dismountShortcut.Value; if (!((KeyboardShortcut)(ref value)).IsDown() && (!ZInput.GetButton("Use") || !ZInput.GetButton("AltPlace")) && (!ZInput.GetButton("JoyUse") || !ZInput.GetButton("JoyAltPlace"))) { return; } } __instance.DropPlayer(false); } } [HarmonyPatch(typeof(Valkyrie), "UpdateValkyrie")] public static class Valkyrie_UpdateValkyrie_MountControl { private static bool Prefix(Valkyrie __instance, float dt) { //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0405: Unknown result type (might be due to invalid IL or missing references) //IL_0406: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_041c: Unknown result type (might be due to invalid IL or missing references) //IL_0422: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) //IL_0456: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_047a: Unknown result type (might be due to invalid IL or missing references) //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_049a: Unknown result type (might be due to invalid IL or missing references) //IL_04a2: Unknown result type (might be due to invalid IL or missing references) //IL_0444: Unknown result type (might be due to invalid IL or missing references) //IL_044e: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: 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_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: 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_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) if (!modEnabled.Value) { return true; } if (TextViewer.IsShowingIntro()) { return true; } if ((Object)(object)__instance != (Object)(object)controlledValkyrie) { return true; } if (!isFlyingMountValkyrie) { return true; } Rigidbody val = default(Rigidbody); if (!((Component)__instance).TryGetComponent<Rigidbody>(ref val)) { return true; } if (!ValkyrieFlyMount.isHovering && (DateTime.Now - ZInput.instance.GetLastInputTimer()).TotalSeconds > 60.0) { return true; } bool isHovering = ValkyrieFlyMount.isHovering; KeyboardShortcut value = hoverShortcut.Value; ValkyrieFlyMount.isHovering = isHovering ^ ((KeyboardShortcut)(ref value)).IsDown(); Vector3 forward = ((Component)__instance).transform.forward; Vector3 val2 = (ValkyrieFlyMount.isHovering ? Vector3.zero : (forward / 4f)); currentForce = Mathf.MoveTowards(currentForce, 0f, dt); if (CanOperateValkyrie()) { bool flag = ZInput.GetButton("Forward") || ZInput.GetJoyLeftStickY(true) < 0f; bool flag2 = ZInput.GetButton("Backward") || ZInput.GetJoyLeftStickY(true) > 0f; if (flag && !flag2) { currentForce = Mathf.MoveTowards(currentForce, 1f, dt * 3f * forwardAccelerationMultiplier.Value); } else if (flag2 && !flag) { val2 -= forward / 4f; } if (ZInput.GetButton("Left") || ZInput.GetJoyLeftStickX(false) < 0f) { val2 -= ((Component)__instance).transform.right / (float)(flag ? 2 : (flag2 ? 10 : 5)) * horizontalAccelerationMultiplier.Value; } if (ZInput.GetButton("Right") || ZInput.GetJoyLeftStickX(false) > 0f) { val2 += ((Component)__instance).transform.right / (float)(flag ? 2 : (flag2 ? 10 : 5)) * horizontalAccelerationMultiplier.Value; } if (ZInput.GetButton("Jump") || ZInput.GetButton("JoyRTrigger")) { val2.y += (flag ? 0.8f : (flag2 ? 0.2f : 0.5f)) * verticalAccelerationMultiplier.Value; } if (ZInput.GetButton("Crouch") || ZInput.GetButton("JoyLTrigger")) { val2.y -= (flag ? 0.8f : (flag2 ? 0.2f : 0.5f)) * verticalAccelerationMultiplier.Value; } if (hoveringStoppedByMoving.Value && (flag || flag2)) { ValkyrieFlyMount.isHovering = false; } } val2 += forward * currentForce; if (((Vector3)(ref val2)).magnitude > 1f) { ((Vector3)(ref val2)).Normalize(); } accelerationStaminaDepleted = accelerationStaminaDepleted || !((Character)Player.m_localPlayer).HaveStamina(0f); bool flag3 = ZInput.GetButton("Run") || ZInput.GetButton("JoyRun"); if (flag3) { accelerationMultiplier = Mathf.MoveTowards(accelerationMultiplier, 1f, boostAccelerationMultiplier.Value * dt / 10f); } else { accelerationMultiplier = Mathf.MoveTowards(accelerationMultiplier, 0f, dt); accelerationStaminaDepleted = false; } float num = ((flag3 && !accelerationStaminaDepleted) ? (1.5f + accelerationMultiplier) : 1f); Vector3 val3 = 15f * val2 * num * forceMultiplier.Value - val.linearVelocity; if (((Vector3)(ref val3)).magnitude > 15f) { val3 = ((Vector3)(ref val3)).normalized * 15f; } val.AddForce(val3, (ForceMode)2); Vector3 val4 = default(Vector3); Quaternion val5 = default(Quaternion); GameCamera.m_instance.GetCameraPosition(dt, ref val4, ref val5); Quaternion rotation = Quaternion.RotateTowards(((Component)__instance).transform.rotation, val5, __instance.m_turnRate * 15f * dt * rotationMultiplier.Value); ((Component)__instance).transform.rotation = rotation; return false; } private static void Postfix(Valkyrie __instance) { //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_0036: 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_0082: Unknown result type (might be due to invalid IL or missing references) if (modEnabled.Value && !((Object)(object)__instance != (Object)(object)controlledValkyrie)) { Vector3 position = ((Component)__instance).transform.position; float num = default(float); if (ZoneSystem.instance.GetGroundHeight(position, ref num)) { position.y = Mathf.Min(Mathf.Max(position.y, Mathf.Max(num, ZoneSystem.instance.m_waterLevel) + 5f), maxAltitude.Value); ((Component)__instance).transform.position = position; } } } } [HarmonyPatch(typeof(Valkyrie), "DropPlayer")] public static class Valkyrie_DropPlayer_Dismount { private static void Postfix(Valkyrie __instance) { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) if (modEnabled.Value && !((Object)(object)__instance != (Object)(object)controlledValkyrie) && isFlyingMountValkyrie) { isFlyingMountValkyrie = false; playerDropped = true; if (!((Character)Player.m_localPlayer).GetSEMan().HaveStatusEffect(slowFallHash)) { castSlowFall = true; ((Character)Player.m_localPlayer).GetSEMan().AddStatusEffect(slowFallHash, false, 0, 0f); LogInfo("Cast slow fall"); } ((Behaviour)Hud.instance.m_crosshair).enabled = crosshairState; Vector3 forward = ((Component)Player.m_localPlayer).transform.forward; forward.y = 0f; __instance.m_flyAwayPoint = ((Component)Player.m_localPlayer).transform.position + forward * 300f; __instance.m_flyAwayPoint.y = Mathf.Max(ZoneSystem.instance.GetGroundHeight(__instance.m_flyAwayPoint), ZoneSystem.instance.m_waterLevel) + Mathf.Max(((Component)Player.m_localPlayer).transform.position.y + 100f, 150f); __instance.m_speed = 15f; controlledValkyrie = null; } } } [HarmonyPatch(typeof(Player), "TeleportTo")] public static class Player_TeleportTo_TeleportDrop { private static void Prefix() { if (Object.op_Implicit((Object)(object)controlledValkyrie)) { controlledValkyrie.DropPlayer(true); } } } [HarmonyPatch(typeof(Player), "InCutscene")] public static class Player_InCutscene_Taxi { private static void Postfix(Player __instance, ref bool __result) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie) { __result = false; } } } [HarmonyPatch(typeof(Player), "CheckRun")] public static class Player_CheckRun_Taxi { private static void Prefix(Player __instance, ref float __state) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie) { __state = Game.m_moveStaminaRate; Game.m_moveStaminaRate *= 2f; } } private static void Postfix(Player __instance, ref float __state) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie) { Game.m_moveStaminaRate = __state; } } } [HarmonyPatch(typeof(Character), "Jump")] public static class Character_Jump_Taxi { private static void Prefix(Character __instance, ref float __state) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie) { __state = __instance.m_jumpStaminaUsage; __instance.m_jumpStaminaUsage = 0f; } } private static void Postfix(Character __instance, ref float __state) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie) { __instance.m_jumpStaminaUsage = __state; } } } [HarmonyPatch(typeof(Player), "Update")] public static class Player_Update_Taxi { private static void Postfix(Player __instance) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && !isFlyingMountValkyrie && playerDropped && castSlowFall && ((Character)__instance).IsOnGround()) { castSlowFall = false; playerDropped = false; if (((Character)__instance).GetSEMan().HaveStatusEffect(slowFallHash)) { ((Character)__instance).GetSEMan().RemoveStatusEffect(slowFallHash, true); } LogInfo("Remove slow fall"); } } } [HarmonyPatch(typeof(Player), "UpdateBiome")] public static class Player_UpdateBiome_PreserveBiomeCalculation { private static void Prefix(ref Player __instance) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie && ((Character)__instance).InIntro()) { __instance.m_intro = false; } } private static void Postfix(ref Player __instance) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie && !((Character)__instance).InIntro()) { __instance.m_intro = true; } } } [HarmonyPatch(typeof(Player), "UpdateStats", new Type[] { typeof(float) })] public static class Player_UpdateStats_PreserveStatsCalculation { private static void Prefix(ref Player __instance) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie && ((Character)__instance).InIntro()) { __instance.m_intro = false; } } private static void Postfix(ref Player __instance) { if (modEnabled.Value && !((Object)(object)Player.m_localPlayer != (Object)(object)__instance) && isFlyingMountValkyrie && !((Character)__instance).InIntro()) { __instance.m_intro = true; } } } [HarmonyPatch(typeof(Character), "Damage")] public static class Character_Damage_PlayerProtection { private static void Prefix(Character __instance, ref HitData hit, ZNetView ___m_nview) { if (modEnabled.Value && !((Object)(object)___m_nview == (Object)null) && isFlyingMountValkyrie && __instance.IsPlayer() && !((Object)(object)__instance != (Object)(object)Player.m_localPlayer) && (!hit.HaveAttacker() || !hit.GetAttacker().IsBoss())) { ((DamageTypes)(ref hit.m_damage)).Modify(Math.Max(0.1f, 0f)); } } } [HarmonyPatch(typeof(Hud), "UpdateCrosshair")] public static class Hud_UpdateCrosshair_ShowBowCrosshair { [HarmonyPriority(0)] private static void Prefix(Hud __instance, Player player) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Invalid comparison between Unknown and I4 if (modEnabled.Value && isFlyingMountValkyrie && crosshairState) { bool flag = ((Humanoid)player).GetLeftItem() != null && (int)((Humanoid)player).GetLeftItem().m_shared.m_itemType == 4; if (((Behaviour)__instance.m_crosshair).enabled != flag) { ((Behaviour)__instance.m_crosshair).enabled = flag; } } } } [HarmonyPatch(typeof(EnvMan), "GetEnvironmentOverride")] public static class EnvMan_GetEnvironmentOverride_EnableWeatherOnFlight { [HarmonyPriority(0)] private static void Prefix(ref Player __state) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 if (modEnabled.Value && (int)SystemInfo.graphicsDeviceType != 4 && isFlyingMountValkyrie) { __state = Player.m_localPlayer; Player.m_localPlayer = null; } } [HarmonyPriority(800)] private static void Postfix(Player __state) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 if (modEnabled.Value && (int)SystemInfo.graphicsDeviceType != 4 && isFlyingMountValkyrie) { Player.m_localPlayer = __state; } } } private const string pluginID = "shudnal.ValkyrieFlyMount"; private const string pluginName = "Valkyrie Fly Mount"; private const string pluginVersion = "1.0.11"; private readonly Harmony harmony = new Harmony("shudnal.ValkyrieFlyMount"); private static ConfigEntry<bool> modEnabled; private static ConfigEntry<bool> loggingEnabled; private static ConfigEntry<KeyboardShortcut> mountShortcut; private static ConfigEntry<KeyboardShortcut> dismountShortcut; private static ConfigEntry<bool> menuTeleportOnSkip; private static ConfigEntry<KeyboardShortcut> hoverShortcut; private static ConfigEntry<bool> hoveringStoppedByMoving; private static ConfigEntry<float> maxAltitude; private static ConfigEntry<float> forceMultiplier; private static ConfigEntry<float> rotationMultiplier; private static ConfigEntry<float> verticalAccelerationMultiplier; private static ConfigEntry<float> horizontalAccelerationMultiplier; private static ConfigEntry<float> boostAccelerationMultiplier; private static ConfigEntry<float> forwardAccelerationMultiplier; internal static ValkyrieFlyMount instance; internal static Valkyrie controlledValkyrie; private static bool isFlyingMountValkyrie = false; internal static bool playerDropped = false; internal static bool castSlowFall; internal static float accelerationMultiplier; internal static bool accelerationStaminaDepleted; internal static bool isHovering = false; internal static bool crosshairState; private static readonly int slowFallHash = StringExtensionMethods.GetStableHashCode("SlowFall"); private static float currentForce = 0f; internal static SoftReference<GameObject> valkyriePrefab => Player.m_localPlayer.m_valkyrie; private void Awake() { harmony.PatchAll(); instance = this; ConfigInit(); Game.isModded = true; } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); instance = null; Harmony obj = harmony; if (obj != null) { obj.UnpatchSelf(); } } public static void LogInfo(object data) { if (loggingEnabled.Value) { ((BaseUnityPlugin)instance).Logger.LogInfo(data); } } private void ConfigInit() { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) ((BaseUnityPlugin)this).Config.Bind<int>("General", "NexusID", 2520, "Nexus mod ID for updates"); modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Enable the mod."); loggingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Logging enabled", false, "Enable logging."); mountShortcut = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "Mount shortcut", new KeyboardShortcut((KeyCode)116, (KeyCode[])(object)new KeyCode[1] { (KeyCode)304 }), "Mount shortcut."); dismountShortcut = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "Disount shortcut", new KeyboardShortcut((KeyCode)101, (KeyCode[])(object)new KeyCode[1] { (KeyCode)304 }), "Dismount shortcut."); menuTeleportOnSkip = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Teleport to bed on menu skip", false, "Teleport to current spawn point when using Skip intro menu button."); hoverShortcut = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Hovering", "Hovering shortcut", new KeyboardShortcut((KeyCode)116, Array.Empty<KeyCode>()), "Hovering shortcut. Press while on valkyrie to stop moving forward automatically."); hoveringStoppedByMoving = ((BaseUnityPlugin)this).Config.Bind<bool>("Hovering", "Hovering stopped by moving", true, "If true - moving valkyrie will resume flying forward.\nIf false - only pressing hovering shortcut again will start valkyrie flying forward automatically."); maxAltitude = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Maximum altitude", 1500f, "Height limit."); forceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Force multiplier", 1f, "Multiplier of force applied to move Valkyrie. Basically indirect speed multiplier"); rotationMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Rotation multiplier", 1f, "Multiplier of rotation delta. Basically angular velocity"); verticalAccelerationMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Vertical Acceleration multiplier", 1f, "Multiplier of vertical change of speed on Up and Down movement"); horizontalAccelerationMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Horizontal Acceleration multiplier", 1f, "Multiplier of horizontal change of speed on Left or Right movement"); boostAccelerationMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Boost Acceleration multiplier", 1f, "Multiplier of speed of boost speed increase"); forwardAccelerationMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Misc", "Forward acceleration multiplier", 1f, "Multiplier of speed of regular movement speed increase"); } public void LateUpdate() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) if (modEnabled.Value && (int)SystemInfo.graphicsDeviceType != 4 && !((Object)(object)Player.m_localPlayer == (Object)null)) { KeyboardShortcut value = mountShortcut.Value; if (((KeyboardShortcut)(ref value)).IsDown() || (ZInput.GetButton("AltPlace") && ZInput.GetButton("Crouch") && ZInput.GetButton("Jump")) || (ZInput.GetButton("JoyAltPlace") && ZInput.GetButton("JoyCrouch") && ZInput.GetButton("JoyJump"))) { SpawnValkyrie(Player.m_localPlayer); } } } public static bool CanOperateValkyrie() { Player localPlayer = Player.m_localPlayer; return !((Object)(object)localPlayer == (Object)null) && !((Character)localPlayer).IsDead() && !((Character)localPlayer).InCutscene() && !((Character)localPlayer).IsTeleporting() && ((Object)(object)Chat.instance == (Object)null || !Chat.instance.HasFocus()) && !Console.IsVisible() && !Menu.IsVisible() && (Object)(object)TextViewer.instance != (Object)null && !TextViewer.instance.IsVisible() && !TextInput.IsVisible() && !Minimap.IsOpen() && !GameCamera.InFreeFly() && !StoreGui.IsVisible() && !InventoryGui.IsVisible(); } private void SpawnValkyrie(Player player) { //IL_012e: 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_0137: Unknown result type (might be due to invalid IL or missing references) //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_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Expected O, but got Unknown //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) if (isFlyingMountValkyrie) { return; } if ((Object)(object)controlledValkyrie != (Object)null) { ((Character)player).Message((MessageType)2, Localization.instance.Localize("$hud_powernotready"), 0, (Sprite)null); } else if (CanOperateValkyrie() && !((Character)player).IsAttachedToShip() && !((Character)player).IsAttached() && !((Character)player).IsDead() && !((Character)player).IsRiding() && !player.IsSleeping() && !((Character)player).IsTeleporting() && !((Character)player).InPlaceMode() && !((Character)player).InBed() && !((Character)player).InCutscene() && !((Character)player).InInterior()) { isFlyingMountValkyrie = true; if ((Object)(object)((Character)player).m_nview != (Object)null && ((Character)player).m_nview.IsValid()) { ((Character)player).Heal((((Character)player).GetMaxHealth() - ((Character)player).GetHealth()) * 0.3f, true); ((Character)player).AddStamina(((Character)player).GetMaxStamina()); ((Character)player).SetCrouch(false); } crosshairState = ((Behaviour)Hud.instance.m_crosshair).enabled; ((Behaviour)Hud.instance.m_crosshair).enabled = false; currentForce = 0f; isHovering = false; valkyriePrefab.Load(); GameObject val = Object.Instantiate<GameObject>(valkyriePrefab.Asset); val.GetComponent<ZNetView>().HoldReferenceTo((IReferenceCounted)(object)valkyriePrefab); controlledValkyrie = val.GetComponent<Valkyrie>(); valkyriePrefab.Release(); } } }