using System.Collections;
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 BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.Utils;
using HarmonyLib;
using SSSGame;
using SSSGame.Controllers;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("BlinkStep")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BlinkStep")]
[assembly: AssemblyTitle("BlinkStep")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace BlinkStep;
[BepInPlugin("blacks7ar.BlinkStep", "BlinkStep", "1.0.0")]
public class Plugin : BasePlugin
{
[HarmonyPatch]
private static class Patch
{
[HarmonyPostfix]
[HarmonyPatch(typeof(CharacterMovement), "Update")]
private static void CharacterMovement_Update(CharacterMovement __instance)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)__instance == (Object)null) && Input.GetKeyDown(_blinkKey.Value) && __instance.isGrounded && !__instance.isCarting && !__instance.isRaven && !__instance.isRowing && !__instance._isClimbing && !__instance._isSwimming && !_isBlinking && __instance.HasStamina)
{
MonoBehaviourExtensions.StartCoroutine((MonoBehaviour)(object)__instance, Blink());
}
}
}
private const string modGUID = "blacks7ar.BlinkStep";
public const string modName = "BlinkStep";
public const string modAuthor = "blacks7ar";
public const string modVersion = "1.0.0";
private static ManualLogSource BLogger;
private static ConfigEntry<float> _blinkPower;
private static ConfigEntry<float> _blinkCooldown;
private static ConfigEntry<float> _blinkStamina;
private static ConfigEntry<KeyCode> _blinkKey;
private static bool _isBlinking;
public override void Load()
{
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
BLogger = ((BasePlugin)this).Log;
_blinkPower = ((BasePlugin)this).Config.Bind<float>("General", "Blink Power", 30f, "Blink forward force.");
_blinkCooldown = ((BasePlugin)this).Config.Bind<float>("General", "Blink Cooldown", 1f, "How long until you can blink again.");
_blinkStamina = ((BasePlugin)this).Config.Bind<float>("General", "Blink Stamina", 20f, "Stamina use when you blink.");
_blinkKey = ((BasePlugin)this).Config.Bind<KeyCode>("General", "Blink Hotkey", (KeyCode)304, "Hotkey to blink.");
BLogger.LogInfo((object)"Mod loaded!");
new Harmony("blacks7ar.BlinkStep").PatchAll();
}
private static IEnumerator Blink()
{
CharacterMovement val = Object.FindObjectOfType<CharacterMovement>();
if ((Object)(object)val == (Object)null || _isBlinking)
{
yield break;
}
_isBlinking = true;
float axisRaw = Input.GetAxisRaw("Horizontal");
float axisRaw2 = Input.GetAxisRaw("Vertical");
if (!(Mathf.Abs(axisRaw) > 0.01f) && !(Mathf.Abs(axisRaw2) > 0.01f))
{
_isBlinking = false;
yield break;
}
Rigidbody rb = val._rb;
bool isGrounded = val.isGrounded;
Vector3 val2 = new Vector3(axisRaw, 0f, axisRaw2);
Vector3 normalized = ((Vector3)(ref val2)).normalized;
Vector3 val3 = ((Component)val).transform.TransformDirection(normalized);
float num = _blinkPower.Value;
float num2 = 0.2f;
if (isGrounded)
{
num *= 8f;
num2 *= 0.25f;
}
rb.velocity = Vector3.zero;
num = Mathf.Max(num, 3f);
rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
Vector3 val4 = val3 * num;
rb.AddForce(val4, (ForceMode)2);
val.DrainStamina(_blinkStamina.Value, (DrainStaminaUsage)0);
yield return (object)new WaitForSeconds(num2);
float brakeTimer = 0f;
Vector3 startVel = rb.velocity;
while (brakeTimer < 0.1f)
{
brakeTimer += Time.deltaTime;
float num3 = brakeTimer / 0.1f;
rb.velocity = Vector3.Lerp(startVel, startVel * 0.1f, num3);
yield return null;
}
_isBlinking = false;
yield return (object)new WaitForSeconds(_blinkCooldown.Value);
}
}