using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Shield_Mod; using ULTRAKILL.Cheats; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.ResourceLocations; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("Shield_Mod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+13f8975ede088c85c7cf961d4c09fbb914a90905")] [assembly: AssemblyProduct("My first plugin")] [assembly: AssemblyTitle("Shield_Mod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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; } } } public class ShieldProjectile : MonoBehaviour { private float timer = 0.08f; private List lightEnemies = new List(); private float speed = 75f; private float drillT = 0f; private bool attached = false; public int drillHits; private int drillHitsLeft; private float drillCooldown; private bool drilling; private bool punched; public AudioSource drillSound; private AudioSource currentDrillSound; private AudioSource source; private EnemyIdentifier target; [HideInInspector] public GameObject sourceWeapon; [Header("Return To Player")] public int maxBounces = 7; public float maxLifetime = 5f; public float returnBaseSpeed = 75f; public float speedGrowthRate = 1.5f; public float catchDistance = 1.25f; public ShieldWeapon weapon; private int bounceCount = 0; private float lifeTimer = 0f; private bool returningToPlayer = false; private float returnTimer = 0f; private Vector3 lastPosition; private bool caught = false; private List hitEnemies = new List(); private void Awake() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) lightEnemies.Add((EnemyType)1); lightEnemies.Add((EnemyType)3); lightEnemies.Add((EnemyType)14); lightEnemies.Add((EnemyType)15); lightEnemies.Add((EnemyType)13); lightEnemies.Add((EnemyType)6); drillHitsLeft = drillHits; lastPosition = ((Component)this).transform.position; source = ((Component)this).GetComponent(); } private void Update() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) if (attached) { if (drilling) { ((Component)this).transform.Rotate(Vector3.forward, 14400f * Time.deltaTime); } } else { if (caught) { return; } if (timer > 0f) { timer -= Time.deltaTime; } if (!returningToPlayer) { lifeTimer += Time.deltaTime; if (bounceCount >= maxBounces || lifeTimer >= maxLifetime) { BeginReturnToPlayer(); } } lastPosition = ((Component)this).transform.position; if (returningToPlayer) { UpdateReturnToPlayer(); } else { Transform transform = ((Component)this).transform; transform.position += ((Component)this).transform.forward * speed * Time.deltaTime; } if (MonoSingleton.Instance.InputSource.Fire2.WasPerformedThisFrame && MonoSingleton.Instance.activated && ((Component)weapon).gameObject.activeInHierarchy) { BeginReturnToPlayer(); } CheckCatchAlongPath(lastPosition, ((Component)this).transform.position); } } private void BeginReturnToPlayer() { returningToPlayer = true; returnTimer = 0f; speed = returnBaseSpeed; } private void UpdateReturnToPlayer() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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) NewMovement instance = MonoSingleton.Instance; if ((Object)(object)instance == (Object)null) { return; } returnTimer += Time.deltaTime; speed = returnBaseSpeed * Mathf.Exp(speedGrowthRate * returnTimer); Vector3 val = ((Component)instance).transform.position - ((Component)this).transform.position; float magnitude = ((Vector3)(ref val)).magnitude; if (magnitude <= catchDistance) { CatchPlayer(); return; } ((Component)this).transform.forward = val / magnitude; float num = speed * Time.deltaTime; if (num >= magnitude) { ((Component)this).transform.position = ((Component)instance).transform.position; CatchPlayer(); } else { Transform transform = ((Component)this).transform; transform.position += ((Component)this).transform.forward * num; } } private void CheckCatchAlongPath(Vector3 from, Vector3 to) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0066: 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_0068: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) if (caught || !returningToPlayer) { return; } NewMovement instance = MonoSingleton.Instance; if (!((Object)(object)instance == (Object)null)) { Vector3 position = ((Component)instance).transform.position; Vector3 val = to - from; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; float num = ((sqrMagnitude > 0.0001f) ? Mathf.Clamp01(Vector3.Dot(position - from, val) / sqrMagnitude) : 0f); Vector3 val2 = from + val * num; if (Vector3.Distance(val2, position) <= catchDistance) { CatchPlayer(); } } } private void CatchPlayer() { if (!caught) { caught = true; returningToPlayer = false; weapon.noShield = false; Object.Destroy((Object)(object)((Component)this).gameObject); } } private void FixedUpdate() { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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) //IL_0120: Unknown result type (might be due to invalid IL or missing references) if (attached && drilling && Object.op_Implicit((Object)(object)target)) { if (drillCooldown != 0f) { drillCooldown = Mathf.MoveTowards(drillCooldown, 0f, Time.deltaTime); return; } drillCooldown = 0.08f; target.hitter = "drill"; target.DeliverDamage(((Component)target).gameObject, Vector3.zero, ((Component)this).transform.position, 0.0325f, false, 0f, sourceWeapon, false, false); if (Object.op_Implicit((Object)(object)currentDrillSound)) { AudioSourceExtensions.SetPitch(currentDrillSound, 1.5f - (float)drillHitsLeft / (float)drillHits / 2f); } drillHitsLeft--; if (drillHitsLeft <= 0 && !PauseTimedBombs.Paused) { Object.Instantiate(AssetsManager.BreakParticleMetalSaw, ((Component)this).transform.position, Quaternion.identity); Object.Destroy((Object)(object)((Component)this).gameObject); } } else if (drilling && (Object)(object)target == (Object)null) { drilling = false; } } private void OnTriggerEnter(Collider other) { //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_033b: Unknown result type (might be due to invalid IL or missing references) //IL_0340: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0355: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: 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) //IL_0187: 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_0148: 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_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) if (attached || LayerMaskDefaults.IsMatchingLayer(((Component)other).gameObject.layer, (LMD)8)) { return; } EnemyIdentifier eid = default(EnemyIdentifier); EnemyIdentifierIdentifier val = default(EnemyIdentifierIdentifier); if (!((Component)other).gameObject.TryGetComponent(ref eid) && ((Component)other).gameObject.TryGetComponent(ref val)) { eid = val.eid; } Vector3 val4; if ((Object)(object)eid != (Object)null) { if (hitEnemies.Contains(eid)) { return; } hitEnemies.Add(eid); eid.hitter = ((bounceCount == 0) ? "shieldnobounce" : "shieldproj"); eid.DeliverDamage(((Component)other).gameObject, Vector3.zero, ((Component)other).transform.position, 4f, true, 0f, sourceWeapon, false, false); if (!lightEnemies.Contains(eid.enemyType)) { if (!eid.dead) { attached = true; ((Component)this).transform.parent = ((Component)other).transform; target = eid; drilling = true; currentDrillSound = Object.Instantiate(drillSound, ((Component)this).transform.position, ((Component)this).transform.rotation); ((Component)currentDrillSound).transform.SetParent(((Component)this).transform, true); } return; } eid.DeliverDamage(((Component)other).gameObject, Vector3.zero, ((Component)other).transform.position, 50f, true, 0f, (GameObject)null, false, false); List currentEnemies = MonoSingleton.Instance.GetCurrentEnemies(); currentEnemies.RemoveAll((EnemyIdentifier x) => (Object)(object)x == (Object)null || x.dead || hitEnemies.Contains(x)); EnemyIdentifier val2 = null; float num = float.MaxValue; foreach (EnemyIdentifier item in currentEnemies) { Transform val3 = (((Object)(object)item.weakPoint != (Object)null) ? item.weakPoint.transform : ((Component)item).transform); val4 = val3.position - ((Component)this).transform.position; float sqrMagnitude = ((Vector3)(ref val4)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; val2 = item; } } if ((Object)(object)val2 != (Object)null) { Transform val5 = (((Object)(object)val2.weakPoint != (Object)null) ? val2.weakPoint.transform : ((Component)val2).transform); Transform transform = ((Component)this).transform; val4 = val5.position - ((Component)this).transform.position; transform.forward = ((Vector3)(ref val4)).normalized; } } else if (LayerMaskDefaults.IsMatchingLayer(((Component)other).gameObject.layer, (LMD)1) && !(timer > 0f) && !returningToPlayer) { source.Play(); Vector3 val6 = other.ClosestPoint(((Component)this).transform.position); val4 = ((Component)this).transform.position - val6; Vector3 normalized = ((Vector3)(ref val4)).normalized; ((Component)this).transform.forward = Vector3.Reflect(((Component)this).transform.forward, normalized); RicochetAimAssist(((Component)this).gameObject, aimAtHead: true); bounceCount++; if (!returningToPlayer && (bounceCount >= maxBounces || lifeTimer >= maxLifetime)) { BeginReturnToPlayer(); } } } private void OnDestroy() { CatchPlayer(); } private void OnDisable() { CatchPlayer(); } public void Punched() { //IL_0058: 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_006d: Unknown result type (might be due to invalid IL or missing references) if (attached) { punched = true; drilling = false; if (Object.op_Implicit((Object)(object)target)) { target.hitter = "drillpunch"; target.DeliverDamage(((Component)target).gameObject, ((Component)this).transform.forward * 150f, ((Component)this).transform.position, 4f + (float)drillHitsLeft * 0.0325f, true, 0f, (GameObject)null, false, false); } if (Object.op_Implicit((Object)(object)currentDrillSound)) { Object.Destroy((Object)(object)currentDrillSound); } drillHitsLeft = drillHits; attached = false; ((Component)this).transform.parent = null; timer = 0.08f; returningToPlayer = false; bounceCount = 0; lifeTimer = 0f; caught = false; speed = 75f; } } private void RicochetAimAssist(GameObject beam, bool aimAtHead = false) { //IL_0007: 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) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: 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_010f: 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_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) RaycastHit[] array = Physics.SphereCastAll(beam.transform.position, 5f, beam.transform.forward, float.PositiveInfinity, LayerMask.op_Implicit(LayerMaskDefaults.Get((LMD)0))); if (array == null || array.Length == 0) { return; } Vector3 val = beam.transform.forward * 1000f; float num = float.PositiveInfinity; GameObject val2 = null; bool flag = false; Coin val3 = default(Coin); PhysicsCastResult val4 = default(PhysicsCastResult); PortalTraversalV2[] array2 = default(PortalTraversalV2[]); Vector3 val5 = default(Vector3); EnemyIdentifierIdentifier val6 = default(EnemyIdentifierIdentifier); for (int i = 0; i < array.Length; i++) { bool flag2 = MonoSingleton.Instance.revolverCoinsList.Count > 0 && ((Component)((RaycastHit)(ref array[i])).transform).TryGetComponent(ref val3) && (!val3.shot || val3.shotByEnemy); if ((!flag || flag2) && (((RaycastHit)(ref array[i])).distance <= num || (!flag && flag2)) && (((RaycastHit)(ref array[i])).distance >= 0.1f || flag2) && !PortalPhysicsV2.Raycast(beam.transform.position, ((RaycastHit)(ref array[i])).point - beam.transform.position, ((RaycastHit)(ref array[i])).distance, LayerMask.op_Implicit(LayerMaskDefaults.Get((LMD)1)), ref val4, ref array2, ref val5, (QueryTriggerInteraction)0) && (flag2 || (((Component)((RaycastHit)(ref array[i])).transform).TryGetComponent(ref val6) && Object.op_Implicit((Object)(object)val6.eid) && !val6.eid.dead))) { if (flag2) { flag = true; } val = (flag2 ? ((RaycastHit)(ref array[i])).transform.position : ((RaycastHit)(ref array[i])).point); num = ((RaycastHit)(ref array[i])).distance; val2 = ((Component)((RaycastHit)(ref array[i])).transform).gameObject; } } if (Object.op_Implicit((Object)(object)val2)) { EnemyIdentifierIdentifier val7 = default(EnemyIdentifierIdentifier); if (aimAtHead && !flag && val2.TryGetComponent(ref val7) && Object.op_Implicit((Object)(object)val7.eid) && Object.op_Implicit((Object)(object)val7.eid.weakPoint) && !PortalPhysicsV2.Raycast(beam.transform.position, val7.eid.weakPoint.transform.position - beam.transform.position, Vector3.Distance(val7.eid.weakPoint.transform.position, beam.transform.position), LayerMask.op_Implicit(LayerMaskDefaults.Get((LMD)1)), (QueryTriggerInteraction)0)) { val = val7.eid.weakPoint.transform.position; } beam.transform.LookAt(val); } } } [HarmonyPatch(typeof(Punch), "PunchSuccess")] public class PunchPatch { public static void Postfix(Punch __instance, Vector3 point, Transform target) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) ((Component)__instance).transform.parent.LookAt(point); ParryHelper val = default(ParryHelper); if (((Component)target).TryGetComponent(ref val)) { target = val.target; } if (!((Component)target).gameObject.CompareTag("Enemy") && !((Component)target).gameObject.CompareTag("Armor") && !((Component)target).gameObject.CompareTag("Head") && !((Component)target).gameObject.CompareTag("Body") && !((Component)target).gameObject.CompareTag("Limb") && !((Component)target).gameObject.CompareTag("EndLimb")) { return; } EnemyIdentifier val2 = null; EnemyIdentifierIdentifier val3 = default(EnemyIdentifierIdentifier); if (((Component)target).TryGetComponent(ref val3)) { val2 = val3.eid; } if (Object.op_Implicit((Object)(object)val2)) { ShieldProjectile componentInChildren = ((Component)val2).GetComponentInChildren(true); if ((Object)(object)componentInChildren != (Object)null) { __instance.anim.Play("Hook", 0, 0.065f); MonoSingleton.Instance.ParryFlash(); ((Component)componentInChildren).transform.forward = ((Component)__instance.cc).transform.forward; ((Component)componentInChildren).transform.position = __instance.cc.GetDefaultPos(); componentInChildren.Punched(); } } } } public class ShieldWeapon : MonoBehaviour { public int variation = 2; private InputManager inman; private Animator anim; private AudioSource source; private GunControl gc; private bool attackAgain = true; private GameObject sourceWeapon; private List lightEnemies = new List(); private bool isCharging; private float chargeT; private float chargeForce = 85f; private float fire1Cooldown = 0.25f; private float fire2Cooldown = 0.6f; private float fire1Timer; private float fire2Timer; public bool noShield = false; [Header("Green Variant")] public ShieldProjectile ShieldProj; [Header("Red Variant")] public SpriteRenderer Twirl; public AudioSource TwirlSound; private float twirling = 0f; private bool fullyCharged = false; private void Awake() { sourceWeapon = ((Component)((Component)this).transform.parent).gameObject; AssetsManager.GetAssets(); inman = MonoSingleton.Instance; anim = ((Component)this).GetComponent(); gc = MonoSingleton.Instance; source = ((Component)this).GetComponent(); lightEnemies.Add((EnemyType)1); lightEnemies.Add((EnemyType)3); lightEnemies.Add((EnemyType)14); lightEnemies.Add((EnemyType)15); lightEnemies.Add((EnemyType)13); lightEnemies.Add((EnemyType)6); } private void Update() { anim.SetBool("NoShield", noShield); if (gc.activated && !noShield) { if (fire1Timer > 0f) { fire1Timer -= Time.deltaTime; } if (fire2Timer > 0f) { fire2Timer -= Time.deltaTime; } anim.SetBool("Twirling", variation == 2 && inman.InputSource.Fire2.IsPressed); HandleInput(); if (isCharging) { HandleCharge(); } } } private void OnDisable() { isCharging = false; attackAgain = true; chargeT = 0f; fire1Timer = 0f; fire2Timer = 0f; } private void FixedUpdate() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) if (variation == 2 && inman.InputSource.Fire2.IsPressed) { MonoSingleton.Instance.rb.AddForce(((Component)MonoSingleton.Instance).transform.up * 1200f * twirling * Time.deltaTime, (ForceMode)5); } } public void ThrowShield() { //IL_0011: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) Transform transform = ((Component)MonoSingleton.Instance).transform; Vector3 defaultPos = MonoSingleton.Instance.GetDefaultPos(); ShieldProjectile shieldProjectile = Object.Instantiate(ShieldProj, defaultPos, Quaternion.identity); ((Component)shieldProjectile).transform.forward = transform.forward; shieldProjectile.weapon = this; shieldProjectile.sourceWeapon = sourceWeapon; } private void HandleCharge() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) float num = 100f; attackAgain = true; Vector3 defaultPos = MonoSingleton.Instance.GetDefaultPos(); Vector3 forward = ((Component)MonoSingleton.Instance).transform.forward; Collider[] array = Physics.OverlapSphere(defaultPos, 2.5f, LayerMask.op_Implicit(LayerMaskDefaults.Get((LMD)3))); List list = new List(); Collider[] array2 = array; EnemyIdentifier eid = default(EnemyIdentifier); EnemyIdentifierIdentifier val2 = default(EnemyIdentifierIdentifier); foreach (Collider val in array2) { if (!((Component)val).gameObject.TryGetComponent(ref eid) && ((Component)val).gameObject.TryGetComponent(ref val2)) { eid = val2.eid; } if ((Object)(object)eid != (Object)null && !list.Contains(eid)) { list.Add(eid); eid.hitter = "shieldcharge"; eid.DeliverDamage(((Component)val).gameObject, forward * num, ((Component)val).transform.position, 7.5f, true, 0f, sourceWeapon, false, false); if ((Object)(object)eid != (Object)null && !lightEnemies.Contains(eid.enemyType)) { isCharging = false; MonoSingleton.Instance.CameraShake(2f); source.Play(); MonoSingleton.Instance.Launch(-forward, num / 2f, true); } } } if (chargeT > 0f) { chargeT -= Time.deltaTime; } else if (MonoSingleton.Instance.gc.onGround) { isCharging = false; } } private void HandleInput() { //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0271: 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_0220: 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_0247: Unknown result type (might be due to invalid IL or missing references) if (inman.InputSource.Fire1.WasPerformedThisFrame && attackAgain && fire1Timer <= 0f && !isCharging && (variation != 2 || !inman.InputSource.Fire2.IsPressed)) { attackAgain = false; fire1Timer = fire1Cooldown; anim.SetTrigger("Fire1"); } if (variation == 2) { if (inman.InputSource.Fire2.WasCanceledThisFrame && twirling >= 2.99f) { GameObject val = Object.Instantiate(AssetsManager.Lightning, MonoSingleton.Instance.GetDefaultPos(), MonoSingleton.Instance.rotation); val.transform.forward = ((Component)MonoSingleton.Instance).transform.forward; } if (inman.InputSource.Fire2.IsPressed && attackAgain) { if (!TwirlSound.isPlaying) { anim.SetTrigger("StartTwirl"); TwirlSound.Play(); } twirling += Time.deltaTime; twirling = Mathf.Clamp(twirling, 0f, 3f); anim.SetFloat("TwirlSpeed", twirling); Twirl.color = new Color(1f, 1f, 1f, Mathf.Lerp(0f, 1f, twirling / 3f)); TwirlSound.pitch = twirling; if (twirling >= 2.99f && !fullyCharged) { fullyCharged = true; GameObject val2 = Object.Instantiate(AssetsManager.flash, MonoSingleton.Instance.GetDefaultPos(), MonoSingleton.Instance.rotation); val2.transform.forward = ((Component)MonoSingleton.Instance).transform.forward; } } else { Twirl.color = new Color(1f, 1f, 1f, 0f); twirling = 0f; TwirlSound.Stop(); fullyCharged = false; } } else { if (!inman.InputSource.Fire2.WasPerformedThisFrame || !attackAgain || !(fire2Timer <= 0f)) { return; } switch (variation) { case 0: if (!isCharging) { fire2Timer = fire2Cooldown; Charge(); } break; case 1: anim.SetTrigger("Fire2Throw"); noShield = true; break; } } } private void Charge() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) MonoSingleton.Instance.Launch(((Component)MonoSingleton.Instance).transform.forward, chargeForce, true); chargeT = 0.25f; isCharging = true; source.PlayOneShot(AssetsManager.Woosh); } public void DealDamage() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) bool flag = false; float num = 50f; attackAgain = true; Vector3 defaultPos = MonoSingleton.Instance.GetDefaultPos(); Vector3 forward = ((Component)MonoSingleton.Instance).transform.forward; RaycastHit[] array = Physics.SphereCastAll(defaultPos, 2.5f, forward, 2f, LayerMask.op_Implicit(LayerMaskDefaults.Get((LMD)0))); List list = new List(); RaycastHit[] array2 = array; EnemyIdentifier eid = default(EnemyIdentifier); EnemyIdentifierIdentifier val2 = default(EnemyIdentifierIdentifier); for (int i = 0; i < array2.Length; i++) { RaycastHit val = array2[i]; flag = true; Collider collider = ((RaycastHit)(ref val)).collider; if (!((Component)collider).gameObject.TryGetComponent(ref eid) && ((Component)collider).gameObject.TryGetComponent(ref val2)) { eid = val2.eid; } if ((Object)(object)eid != (Object)null && !list.Contains(eid)) { list.Add(eid); eid.hitter = "shield"; eid.DeliverDamage(((Component)collider).gameObject, forward * num, ((RaycastHit)(ref val)).point, 2.5f, true, 0f, sourceWeapon, false, false); } } source.PlayOneShot(flag ? AssetsManager.PunchHeavy : AssetsManager.Woosh); } } namespace Shield_Mod { public class AssetsManager { public static AudioClip Woosh; public static AudioClip PunchHeavy; public static GameObject BreakParticleMetalSaw; public static GameObject Lightning; public static GameObject flash; private static bool loaded; public static void GetAssets() { if (!loaded) { Woosh = GetAddress("Assets/Sounds/Weapons/PunchSwooshHeavy.wav"); PunchHeavy = GetAddress("Assets/Sounds/Weapons/punch_heavy.wav"); BreakParticleMetalSaw = GetAddress("Assets/Particles/Breaks/BreakParticleMetalSaw.prefab"); flash = GetAddress("Assets/Particles/Flashes/V2FlashUnparriable.prefab"); Lightning = GetAddress("Assets/Prefabs/Attacks and Projectiles/Hitscan Beams/Lighting Beam Reflected.prefab"); loaded = true; } } public static T GetAddress(string path) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) return Addressables.LoadAssetAsync((object)path).WaitForCompletion(); } } public static class BundleLoader { public static bool alrLoaded; public static string EpicScene => Path.Combine(Application.temporaryCachePath, "ShieldMod"); public static void Load() { //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) if (alrLoaded) { return; } if (Directory.Exists(EpicScene)) { try { Directory.Delete(EpicScene, recursive: true); } catch (IOException ex) { string path = Path.Combine(EpicScene, "catalog.json"); if (File.Exists(path)) { Plugin.Logger.LogWarning((object)("[BundleLoader] Could not delete temp dir (files locked?), reusing existing extraction. Error: " + ex.Message)); goto IL_0137; } TryDeleteContents(EpicScene); } } Directory.CreateDirectory(EpicScene); Assembly assembly = typeof(Plugin).Assembly; string[] manifestResourceNames = assembly.GetManifestResourceNames(); foreach (string text in manifestResourceNames) { string path2 = (text.StartsWith("Shield_Mod.Assets.") ? text.Substring("Shield_Mod.Assets.".Length) : text); string path3 = Path.Combine(EpicScene, path2); using Stream stream = assembly.GetManifestResourceStream(text); using FileStream destination = File.Create(path3); stream.CopyTo(destination); } goto IL_0137; IL_0137: Func previousTransform = Addressables.ResourceManager.InternalIdTransformFunc; Addressables.ResourceManager.InternalIdTransformFunc = delegate(IResourceLocation location) { string internalId = location.InternalId; return internalId.Contains("ShieldMod.Bundleloader.Shield") ? internalId.Replace("ShieldMod.Bundleloader.Shield", EpicScene) : ((previousTransform != null) ? previousTransform(location) : internalId); }; Addressables.LoadContentCatalogAsync(Path.Combine(EpicScene, "catalog.json"), true, (string)null).WaitForCompletion(); alrLoaded = true; } private static void TryDeleteContents(string dir) { string[] files = Directory.GetFiles(dir, "*", SearchOption.AllDirectories); foreach (string path in files) { try { File.Delete(path); } catch { } } string[] directories = Directory.GetDirectories(dir); foreach (string path2 in directories) { try { Directory.Delete(path2, recursive: false); } catch { } } } public static GameObject LoadObject(string name) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) string text = "Assets/Modding/ShieldMod/"; return Addressables.LoadAssetAsync((object)(text + name)).WaitForCompletion(); } } [BepInPlugin("com.banana.shield", "My first plugin", "1.0.0")] public class Plugin : BaseUnityPlugin { private GameObject ShieldPrefab; private GameObject ShieldPrefabGreen; private GameObject ShieldPrefabRed; private GameObject ShieldWeapon; private GameObject ShieldWeaponGreen; private GameObject ShieldWeaponRed; private Harmony Harmony = new Harmony("My first plugin"); internal static ManualLogSource Logger { get; private set; } public static Plugin Instance { get; set; } private void Awake() { Harmony.PatchAll(); Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"Plugin com.banana.shield is loaded!"); ((Object)((Component)this).gameObject).hideFlags = (HideFlags)4; SceneManager.sceneLoaded += SceneManager_sceneLoaded; Instance = this; } private void Update() { if (BundleLoader.alrLoaded && (Object)(object)ShieldPrefab == (Object)null) { ShieldPrefab = BundleLoader.LoadObject("Shield.prefab"); ShieldPrefabGreen = BundleLoader.LoadObject("ShieldGreen Variant.prefab"); ShieldPrefabRed = BundleLoader.LoadObject("ShieldRed Variant.prefab"); } if (!((Object)(object)ShieldPrefab == (Object)null) && !((Object)(object)MonoSingleton.Instance == (Object)null)) { if ((Object)(object)ShieldWeapon == (Object)null) { ShieldWeapon = MakeGun(5, ShieldPrefab); } if ((Object)(object)ShieldWeaponGreen == (Object)null) { ShieldWeaponGreen = MakeGun(5, ShieldPrefabGreen); } if ((Object)(object)ShieldWeaponRed == (Object)null) { ShieldWeaponRed = MakeGun(5, ShieldPrefabRed); } } } public static GameObject MakeGun(int var, GameObject original) { //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_00f0: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)MonoSingleton.Instance == (Object)null || (Object)(object)MonoSingleton.Instance == (Object)null) { return null; } if (!((Behaviour)MonoSingleton.Instance).enabled || !((Behaviour)MonoSingleton.Instance).enabled) { return null; } GameObject val = Object.Instantiate(original); Collider val2 = default(Collider); if (val.TryGetComponent(ref val2)) { Object.Destroy((Object)(object)val2); } if ((Object)(object)val == (Object)null) { return null; } Vector3 position = val.transform.position; Quaternion rotation = val.transform.rotation; val.transform.parent = ((Component)MonoSingleton.Instance).transform; val.transform.localPosition = position; val.transform.localRotation = rotation; MonoSingleton.Instance.slots[var].Add(val); MonoSingleton.Instance.allWeapons.Add(val); MonoSingleton.Instance.slotDict.Add(val, var); MonoSingleton.Instance.weaponFreshness.Add(val, 10f); val.SetActive(false); MonoSingleton.Instance.noWeapons = false; MonoSingleton.Instance.YesWeapon(); for (int i = 0; i < ((Component)MonoSingleton.Instance).transform.childCount; i++) { ((Component)((Component)MonoSingleton.Instance).transform.GetChild(i)).gameObject.SetActive(false); } return val; } private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1) { if (SceneHelper.CurrentScene == "Main Menu") { BundleLoader.Load(); } } } [HarmonyPatch(typeof(StyleCalculator), "HitCalculator")] public class CustomStyle { public static void Prefix(StyleCalculator __instance, string hitter, string enemyType, string hitLimb, bool dead, EnemyIdentifier eid = null, GameObject sourceWeapon = null) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Invalid comparison between Unknown and I4 if (((Object)(object)eid != (Object)null && eid.blessed) || (int)MonoSingleton.Instance.playerType == 1) { return; } if (hitter == "shieldcharge") { __instance.AddPoints(15, "", eid, sourceWeapon); if (dead) { __instance.AddPoints(75, "BATTERING RAM", eid, sourceWeapon); } } if (hitter == "shield") { __instance.AddPoints(45, "", eid, sourceWeapon); if (dead) { __instance.AddPoints(85, "CLANG", eid, sourceWeapon); } } if (hitter == "shieldproj") { __instance.AddPoints(5, "", eid, sourceWeapon); if (dead) { __instance.AddPoints(55, "REBOUND", eid, sourceWeapon); } } if (hitter == "shieldnobounce") { __instance.AddPoints(48, "", eid, sourceWeapon); if (dead) { __instance.AddPoints(90, "BULLSEYE", eid, sourceWeapon); } } } } internal static class MyPluginInfo { public const string PLUGIN_GUID = "com.banana.shield"; public const string PLUGIN_NAME = "My first plugin"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { internal IgnoresAccessChecksToAttribute(string assemblyName) { } } }