using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using PEAKLib.Core; using PEAKLib.Items.UnityEditor; using Peak.Afflictions; using Photon.Pun; using Photon.Realtime; using UnityEngine; using UnityEngine.Rendering; 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: AssemblyTitle("Knife")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Knife")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("67d4785d-c610-41cd-99f4-1c5e99f24ee7")] [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 Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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] [Microsoft.CodeAnalysis.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; } } } namespace Knife_Gun { public class Action_Ammo : ItemAction { public bool consumeOnFullyUsed; [PunRPC] public void ReduceUsesRPC() { OptionableIntItemData data = ((ItemActionBase)this).item.GetData((DataEntryKey)2); if (data.HasData && data.Value > 0) { data.Value--; if (((ItemActionBase)this).item.totalUses > 0) { ((ItemActionBase)this).item.SetUseRemainingPercentage((float)data.Value / (float)((ItemActionBase)this).item.totalUses); } if (data.Value == 0 && consumeOnFullyUsed && Object.op_Implicit((Object)(object)((ItemActionBase)this).character) && ((ItemActionBase)this).character.IsLocal && (Object)(object)((ItemActionBase)this).character.data.currentItem == (Object)(object)((ItemActionBase)this).item) { ((MonoBehaviour)((ItemActionBase)this).item).StartCoroutine(((ItemActionBase)this).item.ConsumeDelayed(false)); } } } } public class Action_Gun : ItemAction { public GameObject shotSFXPrefab; private static AudioSource cachedReferenceSfx; public float maxDistance; public float dartCollisionSize; [SerializeReference] public Affliction[] afflictionsOnHit; public Transform spawnTransform; public GameObject dartVFX; public float fireRate = 0.15f; public Action OnShoot; private RaycastHit lineHit; private RaycastHit[] sphereHits; private RaycastHit[] itemSphereHits; private float lastShootTime; private Item lastHitItem; private Vector3 originalDefaultPos; public override void RunAction() { if (!(Time.time <= lastShootTime + fireRate)) { lastShootTime = Time.time; FireGun(); } } private AudioSource FindReferenceSfx() { if ((Object)(object)cachedReferenceSfx != (Object)null) { return cachedReferenceSfx; } AudioSource[] array = Object.FindObjectsByType((FindObjectsInactive)1, (FindObjectsSortMode)0); AudioSource[] array2 = array; foreach (AudioSource val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)val.outputAudioMixerGroup == (Object)null)) { string name = ((Object)val.outputAudioMixerGroup).name; if (name == "SFX" || name == "Effects") { cachedReferenceSfx = val; return cachedReferenceSfx; } } } AudioSource[] array3 = array; foreach (AudioSource val2 in array3) { if (!((Object)(object)val2 == (Object)null) && !((Object)(object)val2.outputAudioMixerGroup == (Object)null)) { cachedReferenceSfx = val2; return cachedReferenceSfx; } } return null; } private void PlayKnifeSfx() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)shotSFXPrefab == (Object)null || (Object)(object)spawnTransform == (Object)null) { return; } GameObject val = Object.Instantiate(shotSFXPrefab, spawnTransform.position, Quaternion.identity); AudioSource component = val.GetComponent(); if ((Object)(object)component == (Object)null || (Object)(object)component.clip == (Object)null) { Object.Destroy((Object)(object)val, 2f); return; } AudioSource val2 = FindReferenceSfx(); if ((Object)(object)val2 != (Object)null) { component.outputAudioMixerGroup = val2.outputAudioMixerGroup; } component.playOnAwake = false; component.mute = false; component.volume = 1f; component.pitch = 1f; component.spatialBlend = 1f; component.rolloffMode = (AudioRolloffMode)0; component.minDistance = 2f; component.maxDistance = 80f; component.dopplerLevel = 0f; component.priority = 128; component.Play(); Object.Destroy((Object)(object)val, Mathf.Max(component.clip.length + 0.5f, 2f)); } protected override void Start() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) ((ItemActionBase)this).Start(); if ((Object)(object)((ItemActionBase)this).item != (Object)null) { originalDefaultPos = ((ItemActionBase)this).item.defaultPos; } } private void OnDrawGizmosSelected() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)spawnTransform == (Object)null)) { Gizmos.color = Color.red; Gizmos.DrawWireSphere(spawnTransform.position, dartCollisionSize); } } private void FireGun() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((ItemActionBase)this).item == (Object)null || (Object)(object)((MonoBehaviourPun)((ItemActionBase)this).item).photonView == (Object)null || (Object)(object)spawnTransform == (Object)null) { return; } ((MonoBehaviourPun)((ItemActionBase)this).item).photonView.RPC("ReduceUsesRPC", (RpcTarget)0, Array.Empty()); OnShoot?.Invoke(); PlayKnifeSfx(); Physics.Raycast(spawnTransform.position, ((Component)MainCamera.instance).transform.forward, ref lineHit, maxDistance, LayerMask.op_Implicit(HelperFunctions.terrainMapMask), (QueryTriggerInteraction)1); if (!Object.op_Implicit((Object)(object)((RaycastHit)(ref lineHit)).collider)) { ((RaycastHit)(ref lineHit)).distance = maxDistance; ((RaycastHit)(ref lineHit)).point = spawnTransform.position + ((Component)MainCamera.instance).transform.forward * maxDistance; } sphereHits = Physics.SphereCastAll(spawnTransform.position, dartCollisionSize, ((Component)MainCamera.instance).transform.forward, ((RaycastHit)(ref lineHit)).distance, LayerMask.GetMask(new string[1] { "Character" }), (QueryTriggerInteraction)1); RaycastHit[] array = sphereHits; for (int i = 0; i < array.Length; i++) { RaycastHit val = array[i]; if (!((Object)(object)((RaycastHit)(ref val)).collider == (Object)null)) { Character componentInParent = ((Component)((RaycastHit)(ref val)).collider).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && (Object)(object)componentInParent != (Object)(object)((ItemActionBase)this).character) { GunImpact(componentInParent, spawnTransform.position, ((RaycastHit)(ref val)).point); return; } } } GunImpact(null, spawnTransform.position, ((RaycastHit)(ref lineHit)).point); itemSphereHits = Physics.SphereCastAll(spawnTransform.position, dartCollisionSize, ((Component)MainCamera.instance).transform.forward, ((RaycastHit)(ref lineHit)).distance, LayerMask.GetMask(new string[1] { "Default" }), (QueryTriggerInteraction)1); RaycastHit[] array2 = itemSphereHits; for (int j = 0; j < array2.Length; j++) { RaycastHit val2 = array2[j]; if (!((Object)(object)((RaycastHit)(ref val2)).collider == (Object)null)) { Item componentInParent2 = ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null && (Object)(object)componentInParent2 != (Object)(object)((Component)this).GetComponentInParent()) { GunItemImpact(componentInParent2, spawnTransform.position, ((RaycastHit)(ref val2)).point); break; } } } } private void GunImpact(Character hitCharacter, Vector3 origin, Vector3 endpoint) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: 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_00c7: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hitCharacter != (Object)null && hitCharacter.isZombie) { Vector3 forward = ((Component)MainCamera.instance).transform.forward; ((MonoBehaviourPun)hitCharacter).photonView.RPC("RPC_ShootSelfT", (RpcTarget)0, new object[3] { 0.25f, ((MonoBehaviourPun)hitCharacter).photonView.ViewID, -(forward * 2f) }); } else if ((Object)(object)hitCharacter != (Object)null) { ((MonoBehaviourPun)this).photonView.RPC("RPC_GunImpact", (RpcTarget)0, new object[4] { ((MonoBehaviourPun)hitCharacter).photonView.Owner, origin, endpoint, ((Component)MainCamera.instance).transform.forward }); } else { ((MonoBehaviourPun)this).photonView.RPC("RPC_GunImpact", (RpcTarget)0, new object[4] { null, origin, endpoint, ((Component)MainCamera.instance).transform.forward }); } } private void GunItemImpact(Item hitItem, Vector3 origin, Vector3 endpoint) { //IL_001c: 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_0038: Unknown result type (might be due to invalid IL or missing references) lastHitItem = hitItem; ((MonoBehaviourPun)this).photonView.RPC("RPC_GunItemImpact", (RpcTarget)0, new object[3] { origin, endpoint, ((Component)MainCamera.instance).transform.forward }); } [PunRPC] private void RPC_GunImpact(Player hitPlayer, Vector3 origin, Vector3 endpoint, Vector3 direction) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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_00a9: Unknown result type (might be due to invalid IL or missing references) if (hitPlayer != null && PhotonNetwork.LocalPlayer != null && hitPlayer.ActorNumber == PhotonNetwork.LocalPlayer.ActorNumber) { ((Component)Character.localCharacter).GetComponent().ShootSelfT(0.25f, Character.localCharacter, -(direction * 2f)); if (afflictionsOnHit != null) { Affliction[] array = afflictionsOnHit; foreach (Affliction val in array) { Character.localCharacter.refs.afflictions.AddAffliction(val, false); } } } if ((Object)(object)GamefeelHandler.instance != (Object)null) { GamefeelHandler.instance.AddPerlinShakeProximity(endpoint, 5f, 0.2f, 15f, 10f); } } [PunRPC] private void RPC_GunItemImpact(Vector3 origin, Vector3 endpoint, Vector3 direction) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)lastHitItem != (Object)null) { ((MonoBehaviourPun)lastHitItem).photonView.RPC("RPC_ShootSelfT", (RpcTarget)0, new object[2] { 0.1f, direction }); } if ((Object)(object)GamefeelHandler.instance != (Object)null) { GamefeelHandler.instance.AddPerlinShakeProximity(endpoint, 5f, 0.2f, 15f, 10f); } } } public class KnifeVFX : ItemVFX { public ParticleSystem knifeParticles; private ParticleSystem[] allParticles; protected override void Start() { ((ItemVFX)this).Start(); CacheParticles(); StopAllParticlesImmediate(); Subscribe(); } private void OnEnable() { CacheParticles(); Subscribe(); } private void OnDisable() { Unsubscribe(); } private void CacheParticles() { if (allParticles == null || allParticles.Length == 0) { if ((Object)(object)knifeParticles == (Object)null) { knifeParticles = ((Component)this).GetComponentInChildren(true); } allParticles = ((Component)this).GetComponentsInChildren(true); } } private void StopAllParticlesImmediate() { if (allParticles == null) { return; } ParticleSystem[] array = allParticles; foreach (ParticleSystem val in array) { if (!((Object)(object)val == (Object)null)) { val.Stop(true, (ParticleSystemStopBehavior)0); } } } private void Subscribe() { Action_Gun action_Gun = (((Object)(object)base.item != (Object)null) ? ((Component)base.item).GetComponent() : null); if ((Object)(object)action_Gun != (Object)null) { action_Gun.OnShoot = (Action)Delegate.Remove(action_Gun.OnShoot, new Action(RunAction)); action_Gun.OnShoot = (Action)Delegate.Combine(action_Gun.OnShoot, new Action(RunAction)); } } private void Unsubscribe() { Action_Gun action_Gun = (((Object)(object)base.item != (Object)null) ? ((Component)base.item).GetComponent() : null); if ((Object)(object)action_Gun != (Object)null) { action_Gun.OnShoot = (Action)Delegate.Remove(action_Gun.OnShoot, new Action(RunAction)); } } public void RunAction() { CacheParticles(); if (allParticles == null || allParticles.Length == 0) { return; } ParticleSystem[] array = allParticles; foreach (ParticleSystem val in array) { if (!((Object)(object)val == (Object)null)) { ((Component)val).gameObject.SetActive(true); val.Stop(true, (ParticleSystemStopBehavior)0); val.Play(true); } } } } public class KnifeVisualRuntime : MonoBehaviour { public Item item; private GameObject worldVisual; private Renderer[] worldRenderers; private float nextCharacterCollisionPatchTime; private void Awake() { item = ((Component)this).GetComponent(); EnsureWorldVisual(); PatchKnifeCharacterCollisions(force: true); } private void Start() { item = (((Object)(object)item != (Object)null) ? item : ((Component)this).GetComponent()); EnsureWorldVisual(); PatchKnifeCharacterCollisions(force: true); } private void OnEnable() { EnsureWorldVisual(); PatchKnifeCharacterCollisions(force: true); } private void LateUpdate() { item = (((Object)(object)item != (Object)null) ? item : ((Component)this).GetComponent()); HideDuplicateOriginalModelRenderers(); EnsureWorldVisual(); if ((Object)(object)worldVisual != (Object)null && !worldVisual.activeSelf) { worldVisual.SetActive(true); } ForceRenderers(worldRenderers); PatchKnifeCharacterCollisions(force: false); } private void EnsureWorldVisual() { if (!((Object)(object)worldVisual != (Object)null)) { Transform val = FindOriginalKnifeVisualTransform(); if (!((Object)(object)val == (Object)null)) { worldVisual = ((Component)val).gameObject; worldVisual.SetActive(true); SanitizeOriginalVisualObject(worldVisual); worldRenderers = worldVisual.GetComponentsInChildren(true); RefreshShaders(worldRenderers); ForceRenderers(worldRenderers); } } } private void RefreshShaders(Renderer[] renderers) { if (renderers == null) { return; } Shader val = Shader.Find("Universal Render Pipeline/Lit"); if ((Object)(object)val == (Object)null) { val = Shader.Find("Standard"); } if ((Object)(object)val == (Object)null) { return; } foreach (Renderer val2 in renderers) { if ((Object)(object)val2 == (Object)null) { continue; } Material[] sharedMaterials = val2.sharedMaterials; if (sharedMaterials == null) { continue; } for (int j = 0; j < sharedMaterials.Length; j++) { if ((Object)(object)sharedMaterials[j] != (Object)null) { sharedMaterials[j].shader = val; } } } } private void PatchKnifeCharacterCollisions(bool force) { //IL_00d3: 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_00ec: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.DisableKnifeCharacterCollision || (!force && Time.time < nextCharacterCollisionPatchTime)) { return; } nextCharacterCollisionPatchTime = Time.time + 0.25f; Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren(true); if (componentsInChildren == null || componentsInChildren.Length == 0) { return; } int num = 0; int num2 = LayerMask.NameToLayer("Character"); int num3 = LayerMask.NameToLayer("Player"); if (num2 >= 0) { num |= 1 << num2; } if (num3 >= 0) { num |= 1 << num3; } if (num != 0) { Collider[] array = componentsInChildren; foreach (Collider val in array) { if (!((Object)(object)val == (Object)null)) { LayerMask excludeLayers = val.excludeLayers; ((LayerMask)(ref excludeLayers)).value = ((LayerMask)(ref excludeLayers)).value | num; val.excludeLayers = excludeLayers; } } } Character[] array2 = Object.FindObjectsByType((FindObjectsInactive)1, (FindObjectsSortMode)0); Character[] array3 = array2; foreach (Character val2 in array3) { if ((Object)(object)val2 == (Object)null) { continue; } Collider[] componentsInChildren2 = ((Component)val2).GetComponentsInChildren(true); if (componentsInChildren2 == null || componentsInChildren2.Length == 0) { continue; } Collider[] array4 = componentsInChildren; foreach (Collider val3 in array4) { if ((Object)(object)val3 == (Object)null) { continue; } Collider[] array5 = componentsInChildren2; foreach (Collider val4 in array5) { if (!((Object)(object)val4 == (Object)null) && !((Object)(object)val4 == (Object)(object)val3)) { Physics.IgnoreCollision(val3, val4, true); } } } } } private Transform FindOriginalKnifeVisualTransform() { Transform val = ((Component)this).transform.Find("KnifeOBJ"); if ((Object)(object)val != (Object)null) { return val; } Transform[] componentsInChildren = ((Component)this).GetComponentsInChildren(true); Transform[] array = componentsInChildren; foreach (Transform val2 in array) { if ((Object)(object)val2 != (Object)null && ((Object)val2).name == "KnifeOBJ") { return val2; } } Transform[] array2 = componentsInChildren; foreach (Transform val3 in array2) { if ((Object)(object)val3 != (Object)null && (((Object)val3).name.Contains("KnifeOBJ") || ((Object)val3).name.Contains("Knife_Model") || ((Object)val3).name.Contains("KnifeModel")) && !((Object)val3).name.Contains("Injected") && !((Object)val3).name.Contains("ModelInstance") && !((Object)val3).name.Contains("HeldCamera")) { return val3; } } return null; } private void SanitizeOriginalVisualObject(GameObject visual) { if ((Object)(object)visual == (Object)null) { return; } PhotonView[] componentsInChildren = visual.GetComponentsInChildren(true); foreach (PhotonView val in componentsInChildren) { if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)val); } } Rigidbody[] componentsInChildren2 = visual.GetComponentsInChildren(true); foreach (Rigidbody val2 in componentsInChildren2) { if ((Object)(object)val2 != (Object)null) { Object.Destroy((Object)(object)val2); } } Collider[] componentsInChildren3 = visual.GetComponentsInChildren(true); foreach (Collider val3 in componentsInChildren3) { if ((Object)(object)val3 != (Object)null) { Object.Destroy((Object)(object)val3); } } int num = LayerMask.NameToLayer("Default"); if (num >= 0) { SetLayerRecursively(visual, num); } } private void SetLayerRecursively(GameObject obj, int layer) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown if ((Object)(object)obj == (Object)null) { return; } obj.layer = layer; foreach (Transform item in obj.transform) { Transform val = item; SetLayerRecursively(((Component)val).gameObject, layer); } } private void HideDuplicateOriginalModelRenderers() { Transform[] componentsInChildren = ((Component)this).GetComponentsInChildren(true); Transform[] array = componentsInChildren; foreach (Transform val in array) { if (!((Object)(object)val == (Object)null)) { string name = ((Object)val).name; if ((name == "Knife_InjectedVisual" || name == "Knife_ModelInstance" || name == "Knife_HeldCameraVisual") && (!((Object)(object)worldVisual != (Object)null) || !((Object)(object)val == (Object)(object)worldVisual.transform))) { ((Component)val).gameObject.SetActive(false); Object.Destroy((Object)(object)((Component)val).gameObject); } } } } private void ForceRenderers(Renderer[] renderers) { if (renderers == null) { return; } foreach (Renderer val in renderers) { if (!((Object)(object)val == (Object)null)) { ((Component)val).gameObject.SetActive(true); val.enabled = true; val.forceRenderingOff = false; val.shadowCastingMode = (ShadowCastingMode)1; val.receiveShadows = true; val.allowOcclusionWhenDynamic = false; val.lightProbeUsage = (LightProbeUsage)0; val.reflectionProbeUsage = (ReflectionProbeUsage)0; } } } } public static class CharacterExtensions { public static void AddForce(this Character input, Vector3 move, float minRandomMultiplier, float maxRandomMultiplier, ForceMode forceMode = 5) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) foreach (Bodypart part in input.refs.ragdoll.partList) { Vector3 val = move; if (minRandomMultiplier != maxRandomMultiplier) { val *= Random.Range(minRandomMultiplier, maxRandomMultiplier); } part.AddForce(val, forceMode); } } } public class GunCharacterLaunch : MonoBehaviour { public float shotTime; private Character characterGettingShot; private Vector3 shotDirection; private void Start() { characterGettingShot = Character.localCharacter; } private void Update() { if (shotTime > 0f) { shotTime -= Time.deltaTime; UpdateShotPhysicsT(); } } public void ShootSelfT(float howLongToFly, Character whoIsGettingShot, Vector3 whichDirectionShooting) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) shotTime = howLongToFly; characterGettingShot = whoIsGettingShot; shotDirection = whichDirectionShooting; } [PunRPC] public void RPC_ShootSelfT(float howLongToFly, int characterViewID, Vector3 whichDirectionShooting) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) PhotonView val = PhotonView.Find(characterViewID); if ((Object)(object)val != (Object)null) { Character component = ((Component)val).GetComponent(); characterGettingShot = (((Object)(object)component != (Object)null) ? component : Character.localCharacter); } else { characterGettingShot = Character.localCharacter; } shotTime = howLongToFly; shotDirection = whichDirectionShooting; } public void UpdateShotPhysicsT() { //IL_0014: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)characterGettingShot == (Object)null)) { Vector3 move = shotDirection * 25f * -1f; characterGettingShot.AddForce(move, 1f, 1f, (ForceMode)5); } } } public class GunItemLaunch : MonoBehaviour { public float shotTime; private Item itemGettingShot; private Vector3 shotDirection; private void Update() { if (shotTime > 0f) { shotTime -= Time.deltaTime; PhotonView component = ((Component)this).GetComponent(); if ((Object)(object)component != (Object)null) { component.RPC("UpdateShotPhysicsT", (RpcTarget)0, Array.Empty()); } } } public void ShootSelfT(float howLongToFly, Item whoIsGettingShot, Vector3 whichDirectionShooting) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) shotTime = howLongToFly; itemGettingShot = whoIsGettingShot; shotDirection = whichDirectionShooting; } [PunRPC] public void RPC_ShootSelfT(float howLongToFly, Vector3 whichDirectionShooting) { //IL_0015: 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) itemGettingShot = ((Component)this).GetComponent(); shotTime = howLongToFly; shotDirection = whichDirectionShooting; } [PunRPC] public void UpdateShotPhysicsT() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)itemGettingShot == (Object)null)) { Rigidbody component = ((Component)itemGettingShot).GetComponent(); if ((Object)(object)component != (Object)null) { component.AddForce(shotDirection * 10f, (ForceMode)1); } } } } [HarmonyPatch(typeof(Character), "Awake")] internal static class GunPatch_Character { [HarmonyPostfix] private static void AddGunCharacterLaunch(Character __instance) { if ((Object)(object)((Component)__instance).GetComponent() == (Object)null) { ((Component)__instance).gameObject.AddComponent(); } } } [HarmonyPatch(typeof(Item), "Awake")] internal static class GunPatch_Item { [HarmonyPostfix] private static void AddGunItemLaunchAndKnifeVisual(Item __instance) { if ((Object)(object)((Component)__instance).GetComponent() == (Object)null) { ((Component)__instance).gameObject.AddComponent(); } if (Plugin.IsKnifeItem(__instance) && (Object)(object)((Component)__instance).GetComponent() == (Object)null) { KnifeVisualRuntime knifeVisualRuntime = ((Component)__instance).gameObject.AddComponent(); knifeVisualRuntime.item = __instance; } } } [BepInDependency("com.github.PEAKModding.PEAKLib.Items", "1.0.0")] [BepInDependency("com.github.PEAKModding.PEAKLib.Core", "1.0.0")] [BepInPlugin("com.sol.knife", "Knife", "1.2.5")] public class Plugin : BaseUnityPlugin { [CompilerGenerated] private sealed class d__13 : IEnumerator, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public Plugin <>4__this; private float 5__1; private GameObject 5__2; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__13(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; 5__1 = Time.time + 20f; break; case 1: <>1__state = -1; 5__2 = null; break; } if (Time.time < 5__1) { 5__2 = GameObject.Find("BingBong_Spawner"); if ((Object)(object)Knife != (Object)null && (Object)(object)5__2 != (Object)null) { CreateItemSpawners(); return false; } <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public const string Id = "com.sol.knife"; public const string Name = "Knife"; public const string Version = "1.2.5"; internal static GameObject KnifeVisualPrefab; internal static bool DisableKnifeCharacterCollision = true; private Harmony _harmony; private Coroutine _levelLoadCompleteCoroutine; private static GameObject Knife; private void Awake() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown SceneManager.sceneLoaded += OnSceneLoaded; LocalizationFix(); BundleLoader.LoadBundleWithName((BaseUnityPlugin)(object)this, "knife.peakbundle", (Action)delegate(PeakBundle peakBundle) { //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Expected O, but got Unknown try { UnityItemContent val = peakBundle.LoadAsset("IC_Knife"); GameObject shotSFXPrefab = peakBundle.LoadAsset("SFX_Knife"); if (!((Object)(object)val == (Object)null)) { Knife = val.ItemPrefab; if (!((Object)(object)Knife == (Object)null)) { if ((Object)(object)Knife.GetComponent() == (Object)null) { Knife.AddComponent(); } Action_Gun action_Gun = Knife.GetComponent(); if ((Object)(object)action_Gun == (Object)null) { action_Gun = Knife.AddComponent(); } action_Gun.maxDistance = 500f; action_Gun.dartCollisionSize = 0.3f; action_Gun.fireRate = 0.8f; ((ItemAction)action_Gun).OnHeld = true; action_Gun.spawnTransform = Knife.transform.Find("SpawnPos"); action_Gun.shotSFXPrefab = shotSFXPrefab; action_Gun.dartVFX = null; action_Gun.afflictionsOnHit = (Affliction[])(object)new Affliction[1] { (Affliction)new Affliction_AdjustStatus((STATUSTYPE)0, 0.1f, 1f) }; Transform val2 = Knife.transform.Find("VFX_Knife"); if ((Object)(object)val2 != (Object)null) { ((Component)val2).gameObject.SetActive(true); KnifeVFX knifeVFX = Knife.GetComponent(); if ((Object)(object)knifeVFX == (Object)null) { knifeVFX = Knife.AddComponent(); } ParticleSystem componentInChildren = ((Component)val2).GetComponentInChildren(true); if ((Object)(object)componentInChildren != (Object)null) { knifeVFX.knifeParticles = componentInChildren; } } ConfigureKnifePrefab(Knife); peakBundle.Mod.RegisterContent(); } } } catch { } }); _harmony = new Harmony("com.sol.knife"); _harmony.PatchAll(); } private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } internal static bool IsKnifeItem(Item item) { if ((Object)(object)item == (Object)null) { return false; } if ((Object)(object)((Component)item).GetComponent() != (Object)null) { return true; } string name = ((Object)((Component)item).gameObject).name; return name.Contains("Knife") || name.Contains("com.sol.knife"); } private static void ConfigureKnifePrefab(GameObject prefab) { if (!((Object)(object)prefab == (Object)null)) { KnifeVisualRuntime knifeVisualRuntime = prefab.GetComponent(); if ((Object)(object)knifeVisualRuntime == (Object)null) { knifeVisualRuntime = prefab.AddComponent(); } knifeVisualRuntime.item = prefab.GetComponent(); } } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (((Scene)(ref scene)).path.StartsWith("Assets/8_SCENES/Generated/")) { if (_levelLoadCompleteCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_levelLoadCompleteCoroutine); _levelLoadCompleteCoroutine = null; } _levelLoadCompleteCoroutine = ((MonoBehaviour)this).StartCoroutine(PatchAfterLoadFinished()); } } [IteratorStateMachine(typeof(d__13))] private IEnumerator PatchAfterLoadFinished() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__13(0) { <>4__this = this }; } private static void CreateItemSpawners() { //IL_0079: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("BingBong_Spawner"); if ((Object)(object)val == (Object)null || (Object)(object)Knife == (Object)null || (Object)(object)GameObject.Find("Knife_Spawner") != (Object)null) { return; } GameObject val2 = Object.Instantiate(val, val.transform.parent); val2.SetActive(false); ((Object)val2).name = "Knife_Spawner"; val2.transform.localPosition = new Vector3(-10.862f, 0.7437f, -4.13f); try { SingleItemSpawner component = val2.GetComponent(); if ((Object)(object)component == (Object)null) { Object.Destroy((Object)(object)val2); return; } component.prefab = Knife; val2.SetActive(true); component.TrySpawnItems(); } catch { if ((Object)(object)val2 != (Object)null) { Object.Destroy((Object)(object)val2); } } } private static void LocalizationFix() { LocalizedText.mainTable["NAME_KNIFE"] = new List(15) { "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife" }; LocalizedText.mainTable["DESC_KNIFE"] = new List(15) { "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife", "Knife" }; } } }