using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Ultracoins")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Ultracoins")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9e04a71c-24d2-4cd7-b19b-0da76f660cc9")]
[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]
internal class PluginInfo
public const string Name = "UltraCoins!";
public const string GUID = "ironfarm.uk.uc";
public const string Version = "1.0.7";
[BepInPlugin("ironfarm.uk.uc", "UltraCoins!", "1.0.7")]
public class UltraCoins : BaseUnityPlugin
public static float tossDelay = 0f;
public static float spread = 5f;
public static bool altSpam = true;
public static bool isEnabled = true;
Debug.Log("[UltraCoins] Loaded.");
new Harmony("ironfarm.uk.uc").PatchAll();
public static class Revolver_Patch
public static float coinWait = 0f;
public static bool coinReady = true;
[HarmonyPatch(typeof(Revolver), nameof(Revolver.ThrowCoin))]
public static bool patch_ThrowCoin(Revolver __instance)
if (!isEnabled || !coinReady) return false;
float spreadVal = spread;
if (__instance.punch == null || !__instance.punch.gameObject.activeInHierarchy)
__instance.punch = MonoSingleton<FistControl>.Instance.currentPunch;
if (__instance.punch != null && !MonoSingleton<InputManager>.Instance.InputSource.Punch.IsPressed)
__instance.punch.CoinFlip();
GameObject obj = Object.Instantiate(
__instance.camObj.transform.position + __instance.camObj.transform.up * -0.5f,
__instance.camObj.transform.rotation);
obj.GetComponent<Coin>().sourceWeapon = __instance.gc.currentWeapon;
MonoSingleton<RumbleManager>.Instance.SetVibration(RumbleProperties.CoinToss);
Vector3 additionalVelocity = __instance.camObj.transform.forward * (20f + Random.Range(-spreadVal, spreadVal))
+ __instance.camObj.transform.up * Random.Range(-spreadVal, spreadVal)
+ __instance.camObj.transform.right * Random.Range(-spreadVal, spreadVal)
+ (MonoSingleton<NewMovement>.Instance.ridingRocket != null ? MonoSingleton<NewMovement>.Instance.ridingRocket.rb.velocity : MonoSingleton<NewMovement>.Instance.rb.velocity);
obj.GetComponent<Rigidbody>().AddForce(additionalVelocity, ForceMode.Impulse);
__instance.pierceCharge = 0f;
__instance.pierceReady = false;
[HarmonyPatch(typeof(Revolver), nameof(Revolver.Update))]
public static void patch_CoinGatling(Revolver __instance)
if (coinWait > tossDelay)
coinWait += Time.deltaTime;
if (MonoSingleton<InputManager>.Instance.InputSource.Fire2.IsPressed && !GameStateManager.Instance.PlayerInputLocked && __instance.gunVariation == 1)
__instance.coinCharge = 399f;
__instance.wc.rev1charge = 399f;
[HarmonyPatch(typeof(LeaderboardController), nameof(LeaderboardController.SubmitCyberGrindScore))]
public static bool patch_CyberGrind() => false;
[HarmonyPatch(typeof(LeaderboardController), nameof(LeaderboardController.SubmitLevelScore))]
public static bool patch_LevelScore() => false;
[HarmonyPatch(typeof(LeaderboardController), nameof(LeaderboardController.SubmitFishSize))]
public static bool patch_FishSize() => false;
[HarmonyPatch(typeof(Revolver), nameof(Revolver.InstaClick))]
public static void patch_InstaClick(Revolver __instance)
__instance.gunReady = true;
if (altSpam && isEnabled)
__instance.shootReady = true;