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 ShotgunFix v1.0.3
ShotgunFix.dll
Decompiled 2 years agousing 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 GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("ShotgunFix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Fixes the shotgun sometimes not hitting enemies")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2")] [assembly: AssemblyProduct("ShotgunFix")] [assembly: AssemblyTitle("ShotgunFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ShotgunFix { [BepInPlugin("ShotgunFix", "ShotgunFix", "1.0.2")] public class Plugin : BaseUnityPlugin { private const float root3 = 1.7320508f; private const float maxDistance = 30f; private const float sphereCastRadius = 15f; private const float sphereCastDistance = 25.980762f; private const int layerMask = 524296; private static readonly Harmony harmony = new Harmony("ShotgunFix"); private void Awake() { harmony.PatchAll(typeof(Plugin)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Patches completed successfully"); } private static void playAudio(ShotgunItem gun, Vector3 shotgunPosition, Vector3 shotgunForward) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) int num = RoundManager.PlayRandomClip(gun.gunShootAudio, gun.gunShootSFX, true, 1f, 1840, 1000); WalkieTalkie.TransmitOneShotAudio(gun.gunShootAudio, gun.gunShootSFX[num], 1f); RaycastHit val = default(RaycastHit); if (Physics.Raycast(shotgunPosition, shotgunForward, ref val, 30f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { ((Component)gun.gunBulletsRicochetAudio).transform.position = ((RaycastHit)(ref val)).point - shotgunForward * 0.5f; gun.gunBulletsRicochetAudio.Play(); } } private static bool isShotInvalid(Vector3 shotgunPosition, Vector3 shotgunForward, Vector3 hitPoint) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Angle(shotgunForward, hitPoint - shotgunPosition) > 30f) { return true; } RaycastHit val = default(RaycastHit); if (Physics.Linecast(shotgunPosition, hitPoint, ref val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { return true; } return false; } private static void hitPlayer(ShotgunItem gun, PlayerControllerB player, float distance) { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) float num = 0f; int num2 = 0; if (!(distance < 15f)) { if (!(distance < 23f)) { if (distance < 30f) { num2 = 20; } } else { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); num2 = 40; } } else { num = ((distance < 5f) ? 0.8f : 0.5f); HUDManager.Instance.ShakeCamera((ScreenShakeType)1); num2 = 100; } if (num > 0f && SoundManager.Instance.timeSinceEarsStartedRinging > 16f) { ((MonoBehaviour)gun).StartCoroutine(gun.delayedEarsRinging(num)); } player.DamagePlayer(num2, true, true, (CauseOfDeath)7, 0, false, gun.shotgunRayPoint.forward * 30f); } private static void hitEnemy(ShotgunItem gun, EnemyAICollisionDetect enemy, Vector3 shotgunForward, float distance) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)gun.heldByEnemy) && !((Object)(object)gun.heldByEnemy != (Object)(object)enemy.mainScript)) { return; } int num = 0; if (!(distance < 3.7f)) { if (!(distance < 6f)) { if (!(distance < 10f)) { return; } num = 2; } else { num = 3; } } else { num = 5; } ((IHittable)enemy).Hit(num, shotgunForward, ((GrabbableObject)gun).playerHeldBy, true, -1); } [HarmonyPrefix] [HarmonyPatch(typeof(ShotgunItem), "Start")] private static void initRaycastHitArray(ShotgunItem __instance) { __instance.enemyColliders = (RaycastHit[])(object)new RaycastHit[128]; } [HarmonyPrefix] [HarmonyPriority(0)] [HarmonyPatch(typeof(ShotgunItem), "ShootGun")] private static bool shootGun(ShotgunItem __instance, Vector3 shotgunPosition, Vector3 shotgunForward) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) __instance.isReloading = false; __instance.shellsLoaded = Mathf.Max(__instance.shellsLoaded - 1, 0); __instance.gunShootParticle.Play(true); playAudio(__instance, shotgunPosition, shotgunForward); PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!Object.op_Implicit((Object)(object)localPlayerController)) { return false; } bool flag = false; if (((GrabbableObject)__instance).isHeld && (Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)localPlayerController) { ((GrabbableObject)__instance).playerHeldBy.playerBodyAnimator.SetTrigger("ShootShotgun"); flag = true; } int num = Physics.SphereCastNonAlloc(shotgunPosition, 15f, shotgunForward, __instance.enemyColliders, 25.980762f, 524296, (QueryTriggerInteraction)2); for (int i = 0; i < num; i++) { RaycastHit val = __instance.enemyColliders[i]; Vector3 val2 = ((((RaycastHit)(ref val)).distance == 0f) ? ((RaycastHit)(ref val)).collider.ClosestPoint(shotgunPosition) : ((RaycastHit)(ref val)).point); if (!isShotInvalid(shotgunPosition, shotgunForward, val2)) { float distance = Vector3.Distance(shotgunPosition, val2); if (!flag && (Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)localPlayerController).transform) { hitPlayer(__instance, localPlayerController, distance); } EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<EnemyAICollisionDetect>(); if (Object.op_Implicit((Object)(object)component)) { hitEnemy(__instance, component, shotgunForward, distance); } } } return false; } } public static class PluginInfo { public const string PLUGIN_GUID = "ShotgunFix"; public const string PLUGIN_NAME = "ShotgunFix"; public const string PLUGIN_VERSION = "1.0.2"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }