using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Photon.Pun;
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("Stronger Cannons")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Stronger Cannons")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("b38956bf-5712-4c59-8790-826a989b6b46")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace StrongerAutoScoutCannons;
[BepInPlugin("tony4twentys.Stronger_Auto_Scout_Cannons", "Stronger Auto Scout Cannons", "1.0.0")]
public class StrongerAutoScoutCannonsPlugin : BaseUnityPlugin
{
private static ConfigEntry<float> LaunchForceMultiplier;
private static ConfigEntry<float> ItemLaunchForceMultiplier;
private static ConfigEntry<float> PullForceMultiplier;
private static ConfigEntry<float> PushForceMultiplier;
private static ConfigEntry<bool> EnableMultipliers;
private static ConfigEntry<bool> EnableAutoFire;
private static ConfigEntry<float> FuseTimeOverride;
private void Awake()
{
EnableMultipliers = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnableMultipliers", true, "Enable to apply multipliers to cannon forces.");
LaunchForceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "LaunchForceMultiplier", 2f, "Multiplier for launch force applied to players.");
ItemLaunchForceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "ItemLaunchForceMultiplier", 2f, "Multiplier for launch force applied to items.");
PullForceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "PullForceMultiplier", 2f, "Multiplier for pull force.");
PushForceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("General", "PushForceMultiplier", 2f, "Multiplier for push force.");
EnableAutoFire = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnableAutoFire", true, "If true, the cannon will automatically light when a player enters.");
FuseTimeOverride = ((BaseUnityPlugin)this).Config.Bind<float>("General", "FuseTimeOverride", -1f, "Override for fuse burn duration before firing. Set to -1 to leave unchanged.");
Harmony.CreateAndPatchAll(typeof(StrongerAutoScoutCannonsPlugin), (string)null);
}
[HarmonyPatch(typeof(ScoutCannon), "Awake")]
[HarmonyPostfix]
private static void AdjustCannonForces(ref ScoutCannon __instance)
{
if (EnableMultipliers.Value)
{
ScoutCannon obj = __instance;
obj.launchForce *= LaunchForceMultiplier.Value;
ScoutCannon obj2 = __instance;
obj2.itemLaunchForce *= ItemLaunchForceMultiplier.Value;
ScoutCannon obj3 = __instance;
obj3.pullForce *= PullForceMultiplier.Value;
ScoutCannon obj4 = __instance;
obj4.pushForce *= PushForceMultiplier.Value;
}
}
[HarmonyPatch(typeof(ScoutCannon), "FixedUpdate")]
[HarmonyPostfix]
private static void AutoLightWhenPlayerIsInside(ScoutCannon __instance)
{
//IL_0063: 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)
if (!EnableAutoFire.Value || !PhotonNetwork.IsMasterClient || __instance.lit)
{
return;
}
Transform value = Traverse.Create((object)__instance).Field("entry").GetValue<Transform>();
if ((Object)(object)value == (Object)null)
{
return;
}
foreach (Character allCharacter in Character.AllCharacters)
{
if (Vector3.Distance(allCharacter.Center, value.position) <= 0.75f)
{
__instance.Light();
break;
}
}
}
[HarmonyPatch(typeof(ScoutCannon), "Awake")]
[HarmonyPostfix]
private static void AdjustFuseTime(ref ScoutCannon __instance)
{
if (FuseTimeOverride.Value >= 0f)
{
__instance.fireTime = FuseTimeOverride.Value;
}
}
}