using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using DunGen; using DunGen.Graph; using GameNetcodeStuff; using HarmonyLib; using LethalCompanyInputUtils.Api; using LethalLib.Modules; using Microsoft.CodeAnalysis; using PiggyVarietyMod.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; [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: AssemblyCompany("PiggysVarietyMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Piggy's Variety Mod")] [assembly: AssemblyFileVersion("1.3.19.0")] [assembly: AssemblyInformationalVersion("1.3.19")] [assembly: AssemblyProduct("PiggysVarietyMod")] [assembly: AssemblyTitle("PiggysVarietyMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.19.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 PiggyVarietyMod { [BepInPlugin("Piggy.PiggyVarietyMod", "PiggyVarietyMod", "1.3.19")] public class Plugin : BaseUnityPlugin { private const string modGUID = "Piggy.PiggyVarietyMod"; private const string modName = "PiggyVarietyMod"; private const string modVersion = "1.3.19"; private readonly Harmony harmony = new Harmony("Piggy.PiggyVarietyMod"); private static Plugin Instance; public static ManualLogSource mls; public static AssetBundle Bundle; internal static PVInputActions InputActionInstance = new PVInputActions(); public static GameObject teslaGateSpawn; public static GameObject teslaGatePrefab; public static AudioClip teslaIdleStart; public static AudioClip teslaIdle; public static AudioClip teslaIdleEnd; public static AudioClip teslaCrack; public static AudioClip teslaBeep; public static AudioClip teslaWindUp; public static AudioClip teslaUnderbass; public static AudioClip teslaClimax; public static AudioClip flashlightShake; public static AudioClip gummylightClick; public static AudioClip gummylightOutage; public static AudioClip flashFlicker; public static Material flashlightBulb; public static Material blackRubber; public static GameObject gummylightPrefab; public static GameObject m4Prefab; public static GameObject axePrefab; public static Item revolverItem; public static Item revolverAmmoItem; public static Item gummyFlashlight; public static Item arItem; public static Item arMagItem; public static Item axeItem; public static Item bulbItem; public static Item chemicalItem; public static int revolverRarity; public static int revolverAmmoRarity; public static int revolverMaxPlayerDamage; public static int revolverMaxMonsterDamage; public static int rifleMaxPlayerDamage; public static int rifleMonsterDamage; public static bool customGunInfinityAmmo; public static float revolverReloadSpeed; public static float rifleReloadSpeed; public static int revolverPrice; public static int revolverAmmoPrice; public static int riflePrice; public static int rifleMagPrice; public static int rifleRarity; public static int rifleMagRarity; public static bool twoHandedRifle; public static int axeRarity; public static int axePrice; public static int bulbRarity; public static int chemicalRarity; public static int gummyLightRarity; public static int gummyLightPrice; public static float teslaSpawnWeight; public static float teslaSoundVolume; public static bool teslaShake; public static bool translateKorean; public static AudioClip revolverAmmoInsert; public static AudioClip revolverCylinderOpen; public static AudioClip revolverCylinderClose; public static AudioClip revolverDryFire; public static AudioClip revolverBlast1; public static AudioClip revolverBlast2; public static AudioClip m4FireClip; public static AudioClip m4ReloadClip; public static AudioClip m4InspectClip; public static AudioClip m4TriggerClip; public static RuntimeAnimatorController playerAnimator; public static RuntimeAnimatorController otherPlayerAnimator; public static string PluginDirectory; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } PluginDirectory = ((BaseUnityPlugin)this).Info.Location; LoadAssets(); mls = Logger.CreateLogSource("Piggy.PiggyVarietyMod"); mls.LogInfo((object)"Piggy's Variety Mod is loaded"); teslaSoundVolume = ((BaseUnityPlugin)this).Config.Bind("Generic", "TeslaGateVolume", 1f, "(Default 1) Sets the sound volume for Tesla Gate.").Value; teslaShake = ((BaseUnityPlugin)this).Config.Bind("Generic", "TeslaGateShake", false, "(Experimental, Default false) Shake the screen when near Tesla Gate.").Value; revolverMaxPlayerDamage = ((BaseUnityPlugin)this).Config.Bind("Generic", "RevolverMaxPlayerDamage", 70, "(Default 70) Sets the maximum amount of damage the Revolver can deals on the player.").Value; revolverMaxMonsterDamage = ((BaseUnityPlugin)this).Config.Bind("Generic", "RevolverMaxMonsterDamage", 4, "(Default 4) Sets the maximum amount of damage the Revolver can deals on the monster.").Value; rifleMaxPlayerDamage = ((BaseUnityPlugin)this).Config.Bind("Generic", "RifleMaxPlayerDamage", 22, "(Default 22) Sets the maximum amount of damage the Rifle can deals on the player.").Value; rifleMonsterDamage = ((BaseUnityPlugin)this).Config.Bind("Generic", "RifleMonsterDamage", 1, "(Default 1) Sets the amount of damage the Rifle deals to monsters.").Value; customGunInfinityAmmo = ((BaseUnityPlugin)this).Config.Bind("Generic", "CustomGunInfinityAmmo", false, "(Default false) If true, reloading custom guns will no longer require ammo.").Value; revolverReloadSpeed = ((BaseUnityPlugin)this).Config.Bind("Generic", "RevolverReloadSpeed", 1f, "(Default 1.0) Revolver reload speed multiplier.").Value; rifleReloadSpeed = ((BaseUnityPlugin)this).Config.Bind("Generic", "RifleReloadSpeed", 1f, "(Default 1.0) Rifle reload speed multiplier.").Value; twoHandedRifle = ((BaseUnityPlugin)this).Config.Bind("Generic", "TwoHandedRifle", false, "(Default false) If true, changes the rifle to a two-handed item.").Value; teslaSpawnWeight = ((BaseUnityPlugin)this).Config.Bind("Spawn", "TeslaGateWeight", 1f, "(Default 1) Sets the spawn weight for the Tesla Gate.").Value; revolverRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "RevolverRarity", 20, "(Default 20) Sets the spawn rarity for the Revolver.").Value; revolverAmmoRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "RevolverAmmoRarity", 60, "(Default 60) Sets the spawn rarity for the Revolver ammo.").Value; gummyLightRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "GummylightAmmoRarity", 0, "(Default 0) Sets the spawn rarity for the Gummy flashlight.").Value; axeRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "AxeRarity", 0, "(Default 0) Sets the spawn rarity for the Axe.").Value; revolverPrice = ((BaseUnityPlugin)this).Config.Bind("Store", "RevolverPrice", -1, "(Recommended -1 or 550) Set the price of the Revolver. If -1, removes the item from the store list.").Value; revolverAmmoPrice = ((BaseUnityPlugin)this).Config.Bind("Store", "RevolverAmmoPrice", -1, "(Recommended -1 or 30) Set the price of the Revolver ammo. If -1, removes the item from the store list.").Value; gummyLightPrice = ((BaseUnityPlugin)this).Config.Bind("Store", "GummylightAmmoPrice", 30, "(Recommended 30) Set the price of the Gummy flashlight. If -1, removes the item from the store list.").Value; riflePrice = ((BaseUnityPlugin)this).Config.Bind("Store", "RiflePrice", -1, "(Recommended -1 or 1,000~) Set the price of the Rifle (M4A1). If -1, removes the item from the store list.").Value; rifleMagPrice = ((BaseUnityPlugin)this).Config.Bind("Store", "RifleMagPrice", -1, "(Recommended -1 or 400~) Set the price of the Rifle magazine. If -1, removes the item from the store list.").Value; rifleRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "RifleRarity", 20, "(Default 20) Sets the spawn rarity for the Rifle.").Value; rifleMagRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "RifleMagRarity", 60, "(Default 60) Sets the spawn rarity for the Rifle magazine.").Value; axePrice = ((BaseUnityPlugin)this).Config.Bind("Store", "AxePrice", 45, "(Recommended 45) Set the price of the Axe. If -1, removes the item from the store list.").Value; bulbRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "BulbRarity", 30, "(Default 30) Sets the spawn rarity for the Bulb.").Value; chemicalRarity = ((BaseUnityPlugin)this).Config.Bind("Scrap", "ChemicalRarity", 30, "(Default 30) Sets the spawn rarity for the Chemical.").Value; translateKorean = ((BaseUnityPlugin)this).Config.Bind("Translation", "Enable Korean", false, "Set language to Korean.").Value; NetworkPrefabs.RegisterNetworkPrefab(teslaGatePrefab); NetworkPrefabs.RegisterNetworkPrefab(revolverItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(revolverAmmoItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(gummyFlashlight.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(arItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(arMagItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(axeItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(bulbItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(chemicalItem.spawnPrefab); Utilities.FixMixerGroups(revolverItem.spawnPrefab); Utilities.FixMixerGroups(revolverAmmoItem.spawnPrefab); Utilities.FixMixerGroups(gummyFlashlight.spawnPrefab); Utilities.FixMixerGroups(arItem.spawnPrefab); Utilities.FixMixerGroups(arMagItem.spawnPrefab); Utilities.FixMixerGroups(axeItem.spawnPrefab); Utilities.FixMixerGroups(bulbItem.spawnPrefab); Utilities.FixMixerGroups(chemicalItem.spawnPrefab); Items.RegisterItem(revolverItem); Items.RegisterItem(revolverAmmoItem); Items.RegisterItem(gummyFlashlight); Items.RegisterItem(arItem); Items.RegisterItem(arMagItem); Items.RegisterItem(axeItem); Items.RegisterItem(bulbItem); Items.RegisterItem(chemicalItem); if (translateKorean) { Translate(); } CreateShopItem(); Items.RegisterScrap(revolverItem, revolverRarity, (LevelTypes)(-1)); Items.RegisterScrap(revolverAmmoItem, revolverAmmoRarity, (LevelTypes)(-1)); Items.RegisterScrap(arItem, rifleRarity, (LevelTypes)(-1)); Items.RegisterScrap(arMagItem, rifleMagRarity, (LevelTypes)(-1)); Items.RegisterScrap(bulbItem, bulbRarity, (LevelTypes)(-1)); Items.RegisterScrap(chemicalItem, chemicalRarity, (LevelTypes)(-1)); Items.RegisterScrap(gummyFlashlight, gummyLightRarity, (LevelTypes)(-1)); Items.RegisterScrap(axeItem, axeRarity, (LevelTypes)(-1)); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); Type[] types = Assembly.GetExecutingAssembly().GetTypes(); foreach (Type type in types) { try { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array = methods; foreach (MethodInfo methodInfo in array) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } catch { mls.LogInfo((object)"Skipping Netcode Class"); } } mls.LogInfo((object)"Netcode Successfully Patched!"); } private void LoadAssets() { //IL_0788: Unknown result type (might be due to invalid IL or missing references) //IL_0792: Expected O, but got Unknown try { Bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(PluginDirectory), "piggyvarietymod")); } catch (Exception ex) { mls.LogError((object)("Couldn't load asset bundle: " + ex.Message)); return; } try { teslaGateSpawn = Bundle.LoadAsset("TeslaGateSpawn.prefab"); teslaGatePrefab = Bundle.LoadAsset("TeslaGate.prefab"); teslaGatePrefab.AddComponent(); teslaCrack = Bundle.LoadAsset("Tesla_Crack.ogg"); teslaBeep = Bundle.LoadAsset("Tesla_Beeps.ogg"); teslaWindUp = Bundle.LoadAsset("Tesla_WindUp.ogg"); teslaUnderbass = Bundle.LoadAsset("Tesla_Underbass.ogg"); teslaClimax = Bundle.LoadAsset("Tesla_Climax.ogg"); teslaIdleStart = Bundle.LoadAsset("Tesla_IdleStarts.ogg"); teslaIdle = Bundle.LoadAsset("Tesla_IdleLoop.ogg"); teslaIdleEnd = Bundle.LoadAsset("Tesla_IdleEnd.ogg"); flashlightShake = Bundle.LoadAsset("FlashlightShake.wav"); gummylightClick = Bundle.LoadAsset("GummyFlashlightClick.wav"); gummylightOutage = Bundle.LoadAsset("GummylightBatteryOutage.wav"); flashFlicker = Bundle.LoadAsset("FlashlightFlicker.ogg"); flashlightBulb = Bundle.LoadAsset("FlashlightBulb1.mat"); blackRubber = Bundle.LoadAsset("BlackRubber1.mat"); Plugin.revolverItem = Bundle.LoadAsset("Revolver.asset"); revolverAmmoItem = Bundle.LoadAsset("RevolverAmmo.asset"); arItem = Bundle.LoadAsset("M4A1.asset"); arMagItem = Bundle.LoadAsset("Magazine.asset"); Plugin.axeItem = Bundle.LoadAsset("Axe.asset"); gummyFlashlight = Bundle.LoadAsset("GummyFlashlight.asset"); chemicalItem = Bundle.LoadAsset("Chemical.asset"); bulbItem = Bundle.LoadAsset("Bulb.asset"); gummylightPrefab = Bundle.LoadAsset("GummylightItem.prefab"); m4Prefab = Bundle.LoadAsset("M4Item.prefab"); axePrefab = Bundle.LoadAsset("AxeItem.prefab"); revolverAmmoInsert = Bundle.LoadAsset("RevolverReload.wav"); revolverCylinderOpen = Bundle.LoadAsset("RevolverCylinderOpen.wav"); revolverCylinderClose = Bundle.LoadAsset("RevolverCylinderClose.wav"); revolverDryFire = Bundle.LoadAsset("RevolverDryFire.wav"); revolverBlast1 = Bundle.LoadAsset("RevolverBlast1.wav"); revolverBlast2 = Bundle.LoadAsset("RevolverBlast2.wav"); m4FireClip = Bundle.LoadAsset("M4Fire1.wav"); m4InspectClip = Bundle.LoadAsset("InspectM4v2.wav"); m4TriggerClip = Bundle.LoadAsset("M4Trigger.wav"); m4ReloadClip = Bundle.LoadAsset("M4Reload.wav"); playerAnimator = Bundle.LoadAsset("PlayerAnimator.controller"); otherPlayerAnimator = Bundle.LoadAsset("OtherPlayerAnimator.controller"); RevolverItem revolverItem = Plugin.revolverItem.spawnPrefab.AddComponent(); ((GrabbableObject)revolverItem).grabbable = true; ((GrabbableObject)revolverItem).grabbableToEnemies = true; revolverItem.gunReloadSFX = revolverAmmoInsert; revolverItem.cylinderOpenSFX = revolverCylinderOpen; revolverItem.cylinderCloseSFX = revolverCylinderClose; revolverItem.gunShootSFX.Add(revolverBlast1); revolverItem.gunShootSFX.Add(revolverBlast2); revolverItem.noAmmoSFX = revolverDryFire; revolverItem.gunSafetySFX = revolverDryFire; revolverItem.switchSafetyOffSFX = revolverDryFire; revolverItem.switchSafetyOnSFX = revolverDryFire; revolverItem.gunAudio = ((Component)revolverItem).gameObject.GetComponent(); revolverItem.gunShootAudio = ((Component)((Component)revolverItem).gameObject.transform.GetChild(1)).GetComponent(); revolverItem.gunBulletsRicochetAudio = ((Component)((Component)revolverItem).gameObject.transform.GetChild(2)).GetComponent(); revolverItem.gunAnimator = ((Component)revolverItem).gameObject.GetComponent(); revolverItem.revolverRayPoint = ((Component)revolverItem).gameObject.transform.GetChild(3); revolverItem.gunShootParticle = ((Component)((Component)revolverItem).gameObject.transform.GetChild(3).GetChild(0)).GetComponent(); revolverItem.cylinderTransform = ((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0); revolverItem.revolverAmmos.Add(((Component)((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0) .GetChild(0)).GetComponent()); revolverItem.revolverAmmos.Add(((Component)((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0) .GetChild(1)).GetComponent()); revolverItem.revolverAmmos.Add(((Component)((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0) .GetChild(2)).GetComponent()); revolverItem.revolverAmmos.Add(((Component)((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0) .GetChild(3)).GetComponent()); revolverItem.revolverAmmos.Add(((Component)((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0) .GetChild(4)).GetComponent()); revolverItem.revolverAmmos.Add(((Component)((Component)revolverItem).gameObject.transform.GetChild(5).GetChild(0).GetChild(0) .GetChild(5)).GetComponent()); revolverItem.revolverAmmoInHandTransform = ((Component)revolverItem).gameObject.transform.GetChild(0); revolverItem.revolverAmmoInHand = ((Component)((Component)revolverItem).gameObject.transform.GetChild(0).GetChild(0)).GetComponent(); revolverItem.gunCompatibleAmmoID = 500; ((GrabbableObject)revolverItem).itemProperties = Plugin.revolverItem; arItem.spawnPrefab = m4Prefab; M4Item m4Item = arItem.spawnPrefab.AddComponent(); ((GrabbableObject)m4Item).grabbable = true; ((GrabbableObject)m4Item).isInFactory = true; ((GrabbableObject)m4Item).itemProperties = arItem; ((GrabbableObject)m4Item).grabbableToEnemies = true; m4Item.gunCompatibleAmmoID = 485; m4Item.gunAnimator = ((Component)m4Item).gameObject.GetComponent(); m4Item.gunAudio = ((Component)m4Item).gameObject.GetComponent(); m4Item.gunShootAudio = ((Component)((Component)m4Item).transform.GetChild(0)).GetComponent(); m4Item.gunBulletsRicochetAudio = ((Component)((Component)m4Item).transform.GetChild(1)).GetComponent(); m4Item.gunShootSFX = m4FireClip; m4Item.gunReloadSFX = m4ReloadClip; m4Item.gunInspectSFX = m4InspectClip; m4Item.noAmmoSFX = m4TriggerClip; m4Item.gunShootParticle = ((Component)((Component)m4Item).transform.GetChild(5).GetChild(0)).GetComponent(); m4Item.gunRayPoint = ((Component)m4Item).transform.GetChild(5); if (twoHandedRifle) { arItem.twoHanded = true; } gummyFlashlight.spawnPrefab = gummylightPrefab; GummylightItem gummylightItem = gummyFlashlight.spawnPrefab.AddComponent(); ((GrabbableObject)gummylightItem).useCooldown = 0.12f; ((GrabbableObject)gummylightItem).itemProperties = gummyFlashlight; ((GrabbableObject)gummylightItem).mainObjectRenderer = ((Component)((Component)gummylightItem).transform.GetChild(2)).GetComponent(); ((GrabbableObject)gummylightItem).insertedBattery = new Battery(false, 1f); ((GrabbableObject)gummylightItem).insertedBattery.charge = 1f; ((GrabbableObject)gummylightItem).grabbableToEnemies = true; gummylightItem.flashlightBulb = ((Component)((Component)gummylightItem).transform.GetChild(0)).GetComponent(); gummylightItem.flashlightBulbGlow = ((Component)((Component)gummylightItem).transform.GetChild(1)).GetComponent(); gummylightItem.flashlightAudio = ((Component)gummylightItem).GetComponent(); gummylightItem.flashlightClips = (AudioClip[])(object)new AudioClip[1] { gummylightClick }; gummylightItem.outOfBatteriesClip = gummylightOutage; gummylightItem.flashlightFlicker = flashFlicker; gummylightItem.bulbLight = flashlightBulb; gummylightItem.bulbDark = blackRubber; gummylightItem.flashlightMesh = ((Component)((Component)gummylightItem).transform.GetChild(2)).GetComponent(); gummylightItem.changeMaterial = true; ((GrabbableObject)gummylightItem).isInFactory = true; ((GrabbableObject)gummylightItem).grabbable = true; gummylightItem.flashlightTypeID = 10; Object.Destroy((Object)(object)gummyFlashlight.spawnPrefab.GetComponent()); Plugin.axeItem.spawnPrefab = axePrefab; AxeItem axeItem = Plugin.axeItem.spawnPrefab.AddComponent(); Shovel component = Plugin.axeItem.spawnPrefab.GetComponent(); ((GrabbableObject)axeItem).itemProperties = Plugin.axeItem; ((GrabbableObject)axeItem).grabbable = true; ((GrabbableObject)axeItem).isInFactory = true; ((GrabbableObject)axeItem).grabbableToEnemies = true; axeItem.axeHitForce = 2; axeItem.reelUp = component.reelUp; axeItem.swing = component.swing; axeItem.hitSFX = component.hitSFX; axeItem.axeAudio = component.shovelAudio; Object.Destroy((Object)(object)component); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Successfully loaded assets!"); } catch (Exception ex2) { ((BaseUnityPlugin)this).Logger.LogError((object)("Couldn't load assets: " + ex2.Message)); } } private void Translate() { revolverItem.toolTips[0] = "격발 : [RMB]"; revolverItem.toolTips[1] = "탄약 삽탄하기 : [E]"; revolverItem.toolTips[2] = "실린더 열기 : [Q]"; gummyFlashlight.toolTips[0] = "전등 전환하기 : [RMB]"; gummyFlashlight.toolTips[1] = "손전등 흔들기 : [Q]"; arItem.toolTips[0] = "격발 : [RMB]"; arItem.toolTips[1] = "재장전 : [E]"; arItem.toolTips[2] = "탄약 확인하기 : [Q]"; axeItem.toolTips[0] = "도끼 휘두르기 : [RMB]"; revolverItem.spawnPrefab.GetComponentInChildren().headerText = "리볼버"; revolverAmmoItem.spawnPrefab.GetComponentInChildren().headerText = "총알"; arItem.spawnPrefab.GetComponentInChildren().headerText = "소총"; arMagItem.spawnPrefab.GetComponentInChildren().headerText = "탄창"; bulbItem.spawnPrefab.GetComponentInChildren().headerText = "전구"; chemicalItem.spawnPrefab.GetComponentInChildren().headerText = "화학 약품"; } private void CreateShopItem() { if (translateKorean) { revolverAmmoItem.itemName = "총알"; revolverItem.itemName = "리볼버"; gummyFlashlight.itemName = "젤리 손전등"; arMagItem.itemName = "탄창"; arItem.itemName = "소총"; axeItem.itemName = "도끼"; chemicalItem.itemName = "화학 약품"; bulbItem.itemName = "전구"; } else { revolverAmmoItem.itemName = "Bullet"; revolverItem.itemName = "Revolver"; gummyFlashlight.itemName = "Gummy flashlight"; arMagItem.itemName = "Magazine"; arItem.itemName = "Rifle"; axeItem.itemName = "Axe"; } TerminalNode val = NewTerminalNode("리볼버를 주문하려고 합니다. 수량: [variableAmount]. \r\n아이템의 총 가격: [totalCost].\n\nCONFIRM 또는 DENY를 입력하세요.\n\n", "You have requested to order revolvers. Amount: [variableAmount]. \r\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"); TerminalNode val2 = NewTerminalNode("[variableAmount]개의 리볼버를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n", "Ordered [variableAmount] revolvers. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\n"); TerminalNode val3 = NewTerminalNode("\n더욱 강력한 자기 보호를 위해!\n실린더를 열고 리볼버 탄약을 삽탄하여 장전하세요.\n\n", "\nFor more powerful self-defense!\nOpen the cylinder and insert revolver ammo to load it.\n\n"); TerminalNode val4 = NewTerminalNode("리볼버 탄약을 주문하려고 합니다. 수량: [variableAmount]. \r\n아이템의 총 가격: [totalCost].\n\nCONFIRM 또는 DENY를 입력하세요.\n\n", "You have requested to order revolver ammos. Amount: [variableAmount]. \r\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"); TerminalNode val5 = NewTerminalNode("[variableAmount]개의 리볼버 탄약을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n", "Ordered [variableAmount] revolver ammos. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\n"); TerminalNode val6 = NewTerminalNode("\n리볼버에 장전하고 치명적인 순간에 격발하세요!\n\n", "\nLoad to your revolver and fire at LETHAL moments!\n\n"); TerminalNode val7 = NewTerminalNode("소총을 주문하려고 합니다. 수량: [variableAmount]. \r\n아이템의 총 가격: [totalCost].\n\nCONFIRM 또는 DENY를 입력하세요.\n\n", "You have requested to order rifles. Amount: [variableAmount]. \r\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"); TerminalNode val8 = NewTerminalNode("[variableAmount]개의 소총을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n", "Ordered [variableAmount] rifles. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\n"); TerminalNode val9 = NewTerminalNode("\n더욱 강력한 자기 보호를 위해!\n탄창을 장전하여 사용하세요.\n\n", "\nFor more powerful self-defense!\nload magazine to fire it.\n\n"); TerminalNode val10 = NewTerminalNode("소총 탄창을 주문하려고 합니다. 수량: [variableAmount]. \r\n아이템의 총 가격: [totalCost].\n\nCONFIRM 또는 DENY를 입력하세요.\n\n", "You have requested to order rifle magazines. Amount: [variableAmount]. \r\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"); TerminalNode val11 = NewTerminalNode("[variableAmount]개의 소총 탄창을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n", "Ordered [variableAmount] rifle magazines. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\n"); TerminalNode val12 = NewTerminalNode("\n소총에 장전하고 치명적인 순간에 격발하세요!\n\n", "\nLoad to your rifle and fire at LETHAL moments!\n\n"); TerminalNode val13 = NewTerminalNode("젤리 손전등을 주문하려고 합니다. 수량: [variableAmount]. \r\n아이템의 총 가격: [totalCost].\n\nCONFIRM 또는 DENY를 입력하세요.\n\n", "You have requested to order gummy flashlights. Amount: [variableAmount]. \r\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"); TerminalNode val14 = NewTerminalNode("[variableAmount]개의 젤리 손전등을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n", "Ordered [variableAmount] gummy flashlights. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\n"); TerminalNode val15 = NewTerminalNode("\n자가발전 손전등입니다.\n그저 평범한 장난감이지만, 배터리가 다 떨어졌을 때 여러분의 어두운 앞길을 비춰 줄 것입니다!\n\n", "\nA self-powered flashlight.\nIt's just a toy, but it'll light up your dark path when the batteries run out!\n\n"); TerminalNode val16 = NewTerminalNode("도끼를 주문하려고 합니다. 수량: [variableAmount]. \r\n아이템의 총 가격: [totalCost].\n\nCONFIRM 또는 DENY를 입력하세요.\n\n", "You have requested to order Axe. Amount: [variableAmount]. \r\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"); TerminalNode val17 = NewTerminalNode("[variableAmount] 도끼를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n", "Ordered [variableAmount] Axe. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\n"); TerminalNode val18 = NewTerminalNode("\n일반적인 도끼입니다.\n자기 방어 도구로도 사용할 수 있습니다\n\n", "\nJust an Axe.\nUsable as a defense tool\n\n"); if (revolverPrice > -1) { Items.RegisterShopItem(revolverItem, val, val2, val3, revolverPrice); } if (revolverAmmoPrice > -1) { Items.RegisterShopItem(revolverAmmoItem, val4, val5, val6, revolverAmmoPrice); } if (gummyLightPrice > -1) { Items.RegisterShopItem(gummyFlashlight, val13, val14, val15, gummyLightPrice); } if (riflePrice > -1) { Items.RegisterShopItem(arItem, val7, val8, val9, riflePrice); } if (rifleMagPrice > -1) { Items.RegisterShopItem(arMagItem, val10, val11, val12, rifleMagPrice); } if (rifleMagPrice > -1) { Items.RegisterShopItem(arMagItem, val10, val11, val12, rifleMagPrice); } if (axePrice > -1) { Items.RegisterShopItem(axeItem, val16, val17, val18, axePrice); } } public TerminalNode NewTerminalNode(string korean, string english) { TerminalNode val = ScriptableObject.CreateInstance(); if (translateKorean) { val.displayText = korean; } else { val.displayText = english; } val.clearPreviousText = true; val.maxCharactersToType = 15; val.buyRerouteToMoon = -1; val.displayPlanetInfo = -1; val.shipUnlockableID = -1; val.creatureFileID = -1; val.storyLogFileID = -1; return val; } } public class PVInputActions : LcInputActions { [InputAction(/*Could not decode attribute arguments.*/)] public InputAction RifleReloadKey { get; set; } } } namespace PiggyVarietyMod.Patches { public class AxeItem : GrabbableObject { [CompilerGenerated] private sealed class d__14 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AxeItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Expected O, but got Unknown //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Expected O, but got Unknown //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Expected O, but got Unknown //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; ((GrabbableObject)<>4__this).playerHeldBy.activatingItem = true; ((GrabbableObject)<>4__this).playerHeldBy.twoHanded = true; ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.ResetTrigger("axeHit"); ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetBool("reelingUp", true); <>4__this.axeAudio.PlayOneShot(<>4__this.reelUp); <>4__this.ReelUpSFXServerRpc(); <>2__current = (object)new WaitForSeconds(0.35f); <>1__state = 1; return true; case 1: <>1__state = -1; <>2__current = (object)new WaitUntil((Func)(() => !<>4__this.isHoldingButton || !((GrabbableObject)<>4__this).isHeld)); <>1__state = 2; return true; case 2: <>1__state = -1; <>4__this.SwingAxe(!((GrabbableObject)<>4__this).isHeld); <>2__current = (object)new WaitForSeconds(0.13f); <>1__state = 3; return true; case 3: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 4; return true; case 4: <>1__state = -1; <>4__this.HitAxe(!((GrabbableObject)<>4__this).isHeld); <>2__current = (object)new WaitForSeconds(0.3f); <>1__state = 5; return true; case 5: <>1__state = -1; <>4__this.reelingUp = false; <>4__this.reelingUpCoroutine = null; 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 int axeHitForce = 2; public bool reelingUp; public bool isHoldingButton; private Coroutine reelingUpCoroutine; private RaycastHit[] objectsHitByAxe; private List objectsHitByAxeList = new List(); public AudioClip reelUp; public AudioClip swing; public AudioClip[] hitSFX; public AudioSource axeAudio; private PlayerControllerB previousPlayerHeldBy; private int axeMask = 11012424; public override void Start() { ((GrabbableObject)this).Start(); } public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)base.playerHeldBy == (Object)null) { return; } Debug.Log((object)$"Is player pressing down button?: {buttonDown}"); isHoldingButton = buttonDown; Debug.Log((object)("PLAYER ACTIVATED ITEM TO HIT WITH AXE. Who sent this log: " + ((Object)((Component)GameNetworkManager.Instance.localPlayerController).gameObject).name)); if (!reelingUp && buttonDown) { reelingUp = true; previousPlayerHeldBy = base.playerHeldBy; Debug.Log((object)$"Set previousPlayerHeldBy: {previousPlayerHeldBy}"); if (reelingUpCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(reelingUpCoroutine); } reelingUpCoroutine = ((MonoBehaviour)this).StartCoroutine(reelUpAxe()); } } [IteratorStateMachine(typeof(d__14))] private IEnumerator reelUpAxe() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__14(0) { <>4__this = this }; } [ServerRpc] public void ReelUpSFXServerRpc() { ReelUpSFXClientRpc(); } [ClientRpc] public void ReelUpSFXClientRpc() { if (!((NetworkBehaviour)this).IsOwner) { axeAudio.PlayOneShot(reelUp); } } public override void DiscardItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.activatingItem = false; } ((GrabbableObject)this).DiscardItem(); } public void SwingAxe(bool cancel = false) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); if (!cancel) { axeAudio.PlayOneShot(swing); previousPlayerHeldBy.UpdateSpecialAnimationValue(true, (short)((Component)previousPlayerHeldBy).transform.localEulerAngles.y, 0.4f, false); } } public void HitAxe(bool cancel = false) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_052c: 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_0116: 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) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: 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_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: 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_024c: 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_0315: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0214: 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_033c: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0364: Unknown result type (might be due to invalid IL or missing references) //IL_0368: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_03d4: Unknown result type (might be due to invalid IL or missing references) //IL_03d9: Unknown result type (might be due to invalid IL or missing references) //IL_042f: Unknown result type (might be due to invalid IL or missing references) //IL_0434: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)previousPlayerHeldBy == (Object)null) { Debug.LogError((object)"Previousplayerheldby is null on this client when HitAxe is called."); return; } previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; bool flag3 = false; int num = -1; if (!cancel) { previousPlayerHeldBy.twoHanded = false; objectsHitByAxe = Physics.SphereCastAll(((Component)previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, axeMask, (QueryTriggerInteraction)2); objectsHitByAxeList = objectsHitByAxe.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); List list = new List(); IHittable val2 = default(IHittable); RaycastHit val3 = default(RaycastHit); for (int i = 0; i < objectsHitByAxeList.Count; i++) { Vector3 forward = ((Component)previousPlayerHeldBy.gameplayCamera).transform.forward; RaycastHit val = objectsHitByAxeList[i]; if (((Component)((RaycastHit)(ref val)).transform).TryGetComponent(ref val2)) { val = objectsHitByAxeList[i]; if (!((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)previousPlayerHeldBy).transform)) { val = objectsHitByAxeList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)previousPlayerHeldBy.gameplayCamera).transform.position; val = objectsHitByAxeList[i]; if (Physics.Linecast(position, ((RaycastHit)(ref val)).point, ref val3, StartOfRound.Instance.walkableSurfacesMask, (QueryTriggerInteraction)1)) { goto IL_0221; } } val = objectsHitByAxeList[i]; TerrainObstacleTrigger componentInChildren = ((Component)((RaycastHit)(ref val)).collider).GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null && ((NetworkBehaviour)this).IsOwner) { RoundManager.Instance.DestroyTreeOnLocalClient(((Component)componentInChildren).transform.position); } } } goto IL_0221; IL_0221: val = objectsHitByAxeList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = objectsHitByAxeList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = objectsHitByAxeList[i]; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent(ref val2)) { continue; } val = objectsHitByAxeList[i]; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)previousPlayerHeldBy).transform) { continue; } val = objectsHitByAxeList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position2 = ((Component)previousPlayerHeldBy.gameplayCamera).transform.position; val = objectsHitByAxeList[i]; if (Physics.Linecast(position2, ((RaycastHit)(ref val)).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { continue; } } flag = true; try { val = objectsHitByAxeList[i]; EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).collider).GetComponent(); if ((Object)(object)component != (Object)null) { if ((Object)(object)component.mainScript == (Object)null || list.Contains(component.mainScript)) { continue; } goto IL_045c; } val = objectsHitByAxeList[i]; if (!((Object)(object)((Component)((RaycastHit)(ref val)).transform).GetComponent() != (Object)null)) { goto IL_045c; } if (flag3) { continue; } flag3 = true; goto IL_045c; IL_045c: bool flag4 = val2.Hit(axeHitForce, forward, previousPlayerHeldBy, true, 1); if (flag4 && (Object)(object)component != (Object)null) { list.Add(component.mainScript); } if (!flag2) { flag2 = flag4; } } catch (Exception arg) { Debug.Log((object)$"Exception caught when hitting object with axe from player #{previousPlayerHeldBy.playerClientId}: {arg}"); } continue; } } val = objectsHitByAxeList[i]; if (((RaycastHit)(ref val)).collider.isTrigger) { continue; } flag = true; val = objectsHitByAxeList[i]; string tag = ((Component)((RaycastHit)(ref val)).collider).gameObject.tag; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (StartOfRound.Instance.footstepSurfaces[j].surfaceTag == tag) { num = j; break; } } } } if (flag) { RoundManager.PlayRandomClip(axeAudio, hitSFX, true, 1f, 0, 1000); Object.FindObjectOfType().PlayAudibleNoise(((Component)this).transform.position, 17f, 0.8f, 0, false, 0); if (!flag2 && num != -1) { axeAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(axeAudio, StartOfRound.Instance.footstepSurfaces[num].hitSurfaceSFX, 1f); } base.playerHeldBy.playerBodyAnimator.SetTrigger("axeHit"); HitAxeServerRpc(num); } } [ServerRpc] public void HitAxeServerRpc(int hitSurfaceID) { HitAxeClientRpc(hitSurfaceID); } [ClientRpc] public void HitAxeClientRpc(int hitSurfaceID) { if (!((NetworkBehaviour)this).IsOwner) { RoundManager.PlayRandomClip(axeAudio, hitSFX, true, 1f, 0, 1000); if (hitSurfaceID != -1) { HitSurfaceWithAxe(hitSurfaceID); } } } private void HitSurfaceWithAxe(int hitSurfaceID) { axeAudio.PlayOneShot(StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX); WalkieTalkie.TransmitOneShotAudio(axeAudio, StartOfRound.Instance.footstepSurfaces[hitSurfaceID].hitSurfaceSFX, 1f); } } public class CustomTouchInteractTrigger : MonoBehaviour { public bool isIdleTrigger; public bool isKillTrigger; public TeslaGate teslaGate; private void OnTriggerEnter(Collider collider) { //IL_01e5: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB component = ((Component)collider).GetComponent(); if ((Object)(object)component != (Object)null) { Plugin.mls.LogInfo((object)("Tesla gate detected player: " + component.playerUsername + ", Idle: " + isIdleTrigger + ", Kill: " + isKillTrigger)); if (!component.isPlayerDead) { if (isIdleTrigger) { teslaGate.activatePlayerList.Add(component); teslaGate.activateList.Add(((Component)collider).gameObject); } else if (!isIdleTrigger && !isKillTrigger) { teslaGate.engagingPlayerList.Add(component); teslaGate.engagingList.Add(((Component)collider).gameObject); } } } EnemyAICollisionDetect component2 = ((Component)collider).GetComponent(); IHittable val = default(IHittable); if ((Object)(object)component2 != (Object)null && ((Component)((Component)component2).transform).TryGetComponent(ref val)) { Plugin.mls.LogInfo((object)("Tesla gate detected enemy: " + component2.mainScript.enemyType.enemyName + ", Idle: " + isIdleTrigger + ", Kill: " + isKillTrigger)); if (isKillTrigger && (Object)(object)component2 != (Object)null && (Object)(object)component2.mainScript != (Object)null && ((NetworkBehaviour)component2.mainScript).IsOwner && component2.mainScript.enemyType.canDie && !component2.mainScript.isEnemyDead) { val.Hit(5, Vector3.zero, (PlayerControllerB)null, true, -1); } } } private void OnTriggerStay(Collider collider) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_0067: Unknown result type (might be due to invalid IL or missing references) if (!isKillTrigger) { return; } PlayerControllerB component = ((Component)collider).GetComponent(); if ((Object)(object)component != (Object)null && (Object)(object)component == (Object)(object)GameNetworkManager.Instance.localPlayerController && !component.isPlayerDead) { GameNetworkManager.Instance.localPlayerController.KillPlayer(Vector3.down * 17f, true, (CauseOfDeath)11, 0, default(Vector3), false); return; } EnemyAICollisionDetect component2 = ((Component)collider).GetComponent(); if ((Object)(object)component2 != (Object)null && (Object)(object)component2.mainScript != (Object)null && ((NetworkBehaviour)component2.mainScript).IsOwner && component2.mainScript.enemyType.canDie && !component2.mainScript.isEnemyDead) { component2.mainScript.KillEnemyOnOwnerClient(false); } } private void OnTriggerExit(Collider collider) { PlayerControllerB component = ((Component)collider).GetComponent(); if ((Object)(object)component != (Object)null) { teslaGate.engagingPlayerList.Remove(component); teslaGate.engagingList.Remove(((Component)collider).gameObject); if (isIdleTrigger) { teslaGate.activatePlayerList.Remove(component); teslaGate.activateList.Remove(((Component)collider).gameObject); } } } } [HarmonyPatch(typeof(Dungeon))] internal class DungeonPatch { [HarmonyPrefix] [HarmonyPatch("SpawnDoorPrefab")] private static void SpawnDoorPrefab_Prefix(Doorway a, Doorway b, RandomStream randomStream) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Expected O, but got Unknown for (int i = 0; i < a.ConnectorPrefabWeights.Count; i++) { GameObjectWeight val = a.ConnectorPrefabWeights[i]; if (((Object)val.GameObject).name == "TeslaGateSpawn") { return; } if (((Object)val.GameObject).name == "BigDoorSpawn") { GameObjectWeight val2 = new GameObjectWeight(); a.ConnectorPrefabWeights.Add(val2); val2.Weight = 0.05f * Plugin.teslaSpawnWeight; val2.GameObject = Plugin.teslaGateSpawn; Plugin.mls.LogInfo((object)("added tesla to " + ((Object)((Component)a).gameObject).name)); } } for (int j = 0; j < b.ConnectorPrefabWeights.Count; j++) { GameObjectWeight val3 = b.ConnectorPrefabWeights[j]; if (((Object)val3.GameObject).name == "TeslaGateSpawn") { break; } if (((Object)val3.GameObject).name == "BigDoorSpawn") { GameObjectWeight val4 = new GameObjectWeight(); b.ConnectorPrefabWeights.Add(val4); val4.Weight = 0.07f * Plugin.teslaSpawnWeight; val4.GameObject = Plugin.teslaGateSpawn; Plugin.mls.LogInfo((object)("added tesla to " + ((Object)((Component)b).gameObject).name)); } } } } public class GummylightItem : GrabbableObject { [Space(15f)] public bool usingPlayerHelmetLight; public int flashlightInterferenceLevel; public static int globalFlashlightInterferenceLevel; public Light flashlightBulb; public Light flashlightBulbGlow; public AudioSource flashlightAudio; public AudioClip[] flashlightClips; public AudioClip outOfBatteriesClip; public AudioClip flashlightFlicker; public Material bulbLight; public Material bulbDark; public MeshRenderer flashlightMesh; public int flashlightTypeID; public bool changeMaterial = true; private float initialIntensity; private PlayerControllerB previousPlayerHeldBy; public override void Start() { base.useCooldown = 0.12f; base.itemProperties = Plugin.gummyFlashlight; base.mainObjectRenderer = ((Component)((Component)this).transform.GetChild(2)).GetComponent(); base.insertedBattery.charge = 1f; base.grabbableToEnemies = true; flashlightBulb = ((Component)((Component)this).transform.GetChild(0)).GetComponent(); flashlightBulbGlow = ((Component)((Component)this).transform.GetChild(1)).GetComponent(); flashlightAudio = ((Component)this).GetComponent(); flashlightClips = (AudioClip[])(object)new AudioClip[1] { Plugin.gummylightClick }; outOfBatteriesClip = Plugin.gummylightOutage; flashlightFlicker = Plugin.flashFlicker; bulbLight = Plugin.flashlightBulb; bulbDark = Plugin.blackRubber; flashlightMesh = ((Component)((Component)this).transform.GetChild(2)).GetComponent(); changeMaterial = true; base.isInFactory = true; base.grabbable = true; flashlightTypeID = 0; base.itemProperties.batteryUsage = 60f; Object.Destroy((Object)(object)((Component)this).GetComponent()); ((GrabbableObject)this).Start(); initialIntensity = flashlightBulb.intensity; } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (flashlightInterferenceLevel < 2) { SwitchFlashlight(used); } flashlightAudio.PlayOneShot(flashlightClips[Random.Range(0, flashlightClips.Length)]); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 7f, 0.4f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0); } public override void UseUpBatteries() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).UseUpBatteries(); SwitchFlashlight(on: false); flashlightAudio.PlayOneShot(outOfBatteriesClip, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 13f, 0.65f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0); } public override void PocketItem() { previousPlayerHeldBy.equippedUsableItemQE = false; if (!((NetworkBehaviour)this).IsOwner) { ((GrabbableObject)this).PocketItem(); return; } if ((Object)(object)previousPlayerHeldBy != (Object)null) { ((Behaviour)flashlightBulb).enabled = false; ((Behaviour)flashlightBulbGlow).enabled = false; if (base.isBeingUsed && ((Object)(object)previousPlayerHeldBy.ItemSlots[previousPlayerHeldBy.currentItemSlot] == (Object)null || previousPlayerHeldBy.ItemSlots[previousPlayerHeldBy.currentItemSlot].itemProperties.itemId != 1 || previousPlayerHeldBy.ItemSlots[previousPlayerHeldBy.currentItemSlot].itemProperties.itemId != 6)) { ((Behaviour)previousPlayerHeldBy.helmetLight).enabled = true; previousPlayerHeldBy.pocketedFlashlight = (GrabbableObject)(object)this; usingPlayerHelmetLight = true; PocketFlashlightServerRpc(stillUsingFlashlight: true); } else { base.isBeingUsed = false; usingPlayerHelmetLight = false; ((Behaviour)flashlightBulbGlow).enabled = false; SwitchFlashlight(on: false); PocketFlashlightServerRpc(); } } else { Debug.Log((object)"Could not find what player was holding this flashlight item"); } if (((NetworkBehaviour)this).IsOwner && (Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.equippedUsableItemQE = false; } ((GrabbableObject)this).PocketItem(); } [ServerRpc] public void PocketFlashlightServerRpc(bool stillUsingFlashlight = false) { PocketFlashlightClientRpc(stillUsingFlashlight); } [ClientRpc] public void PocketFlashlightClientRpc(bool stillUsingFlashlight) { if (((NetworkBehaviour)this).IsOwner) { return; } ((Behaviour)flashlightBulb).enabled = false; ((Behaviour)flashlightBulbGlow).enabled = false; if (stillUsingFlashlight) { if (!((Object)(object)previousPlayerHeldBy == (Object)null)) { ((Behaviour)previousPlayerHeldBy.helmetLight).enabled = true; previousPlayerHeldBy.pocketedFlashlight = (GrabbableObject)(object)this; usingPlayerHelmetLight = true; } } else { base.isBeingUsed = false; usingPlayerHelmetLight = false; ((Behaviour)flashlightBulbGlow).enabled = false; SwitchFlashlight(on: false); } } public override void DiscardItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.equippedUsableItemQE = false; } if ((Object)(object)previousPlayerHeldBy != (Object)null) { ((Behaviour)previousPlayerHeldBy.helmetLight).enabled = false; ((Behaviour)flashlightBulb).enabled = base.isBeingUsed; ((Behaviour)flashlightBulbGlow).enabled = base.isBeingUsed; } ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { previousPlayerHeldBy = base.playerHeldBy; base.playerHeldBy.equippedUsableItemQE = true; base.playerHeldBy.ChangeHelmetLight(flashlightTypeID, true); ((Behaviour)base.playerHeldBy.helmetLight).enabled = false; usingPlayerHelmetLight = false; if (base.isBeingUsed) { SwitchFlashlight(on: true); } ((GrabbableObject)this).EquipItem(); } public void SwitchFlashlight(bool on) { base.isBeingUsed = on; if (!((NetworkBehaviour)this).IsOwner) { Debug.Log((object)$"Flashlight click. playerheldby null?: {(Object)(object)base.playerHeldBy != (Object)null}"); Debug.Log((object)$"Flashlight being disabled or enabled: {on}"); if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.ChangeHelmetLight(flashlightTypeID, on); } ((Behaviour)flashlightBulb).enabled = false; ((Behaviour)flashlightBulbGlow).enabled = false; } else { ((Behaviour)flashlightBulb).enabled = on; ((Behaviour)flashlightBulbGlow).enabled = on; } if (usingPlayerHelmetLight && (Object)(object)base.playerHeldBy != (Object)null) { ((Behaviour)base.playerHeldBy.helmetLight).enabled = on; } if (changeMaterial) { Material[] sharedMaterials = ((Renderer)flashlightMesh).sharedMaterials; if (on) { sharedMaterials[1] = bulbLight; } else { sharedMaterials[1] = bulbDark; } ((Renderer)flashlightMesh).sharedMaterials = sharedMaterials; } } public override void Update() { //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_025b: 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) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) if (base.currentUseCooldown >= 0f) { base.currentUseCooldown -= Time.deltaTime; } if (((NetworkBehaviour)this).IsOwner) { if ((base.isBeingUsed && base.itemProperties.requiresBattery) || ((Behaviour)flashlightBulb).enabled) { base.isBeingUsed = true; if (base.insertedBattery.charge > 0f) { if (!base.itemProperties.itemIsTrigger) { Battery insertedBattery = base.insertedBattery; insertedBattery.charge -= Time.deltaTime / base.itemProperties.batteryUsage; } } else if (!base.insertedBattery.empty) { base.insertedBattery.empty = true; if (base.isBeingUsed) { Debug.Log((object)"Use up batteries local"); base.isBeingUsed = false; ((GrabbableObject)this).UseUpBatteries(); ((GrabbableObject)this).UseUpItemBatteriesServerRpc(); } } } if (!base.wasOwnerLastFrame) { base.wasOwnerLastFrame = true; } } else if (base.wasOwnerLastFrame) { base.wasOwnerLastFrame = false; } if (!base.isHeld && (Object)(object)base.parentObject == (Object)null) { if (base.fallTime >= 1f) { if (!base.reachedFloorTarget) { if (!base.hasHitGround) { ((GrabbableObject)this).PlayDropSFX(); ((GrabbableObject)this).OnHitGround(); } base.reachedFloorTarget = true; if (base.floorYRot == -1) { ((Component)this).transform.rotation = Quaternion.Euler(base.itemProperties.restingRotation.x, ((Component)this).transform.eulerAngles.y, base.itemProperties.restingRotation.z); } else { ((Component)this).transform.rotation = Quaternion.Euler(base.itemProperties.restingRotation.x, (float)(base.floorYRot + base.itemProperties.floorYOffset) + 90f, base.itemProperties.restingRotation.z); } } ((Component)this).transform.localPosition = base.targetFloorPosition; return; } base.reachedFloorTarget = false; ((GrabbableObject)this).FallWithCurve(); if (((Component)this).transform.localPosition.y - base.targetFloorPosition.y < 0.05f && !base.hasHitGround) { ((GrabbableObject)this).PlayDropSFX(); ((GrabbableObject)this).OnHitGround(); return; } } else if (base.isHeld || base.isHeldByEnemy) { base.reachedFloorTarget = false; } int num = ((flashlightInterferenceLevel <= globalFlashlightInterferenceLevel) ? globalFlashlightInterferenceLevel : flashlightInterferenceLevel); if (num >= 2) { flashlightBulb.intensity = 0f; } else if (num == 1) { flashlightBulb.intensity = Random.Range(0f, 200f); } else { flashlightBulb.intensity = initialIntensity; } } public override void ItemInteractLeftRight(bool right) { //IL_00c3: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)$"r/l activate: {right}"); if (!right && (Object)(object)base.playerHeldBy != (Object)null) { flashlightAudio.PlayOneShot(Plugin.flashlightShake); WalkieTalkie.TransmitOneShotAudio(flashlightAudio, Plugin.flashlightShake, 1f); base.playerHeldBy.playerBodyAnimator.SetTrigger("shakeItem"); float num = base.insertedBattery.charge * 100f + 8f; if (num <= 100f) { ((GrabbableObject)this).SyncBatteryServerRpc((int)num); } else { ((GrabbableObject)this).SyncBatteryServerRpc(100); } if (((NetworkBehaviour)this).IsOwner) { RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 5f, 0.2f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 941); } base.isBeingUsed = false; } } } public class M4Item : GrabbableObject { [CompilerGenerated] private sealed class d__48 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public M4Item <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__48(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetTrigger("InspectM4"); <>4__this.isInspecting = true; <>4__this.gunAudio.PlayOneShot(<>4__this.gunInspectSFX); if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { WalkieTalkie.TransmitOneShotAudio(<>4__this.gunAudio, <>4__this.gunInspectSFX, 1f); } <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; if (Plugin.translateKorean) { <>4__this.KR_SetAmmoControlTip(isChecking: true); } else { <>4__this.SetAmmoControlTip(isChecking: true); } <>2__current = (object)new WaitForSeconds(1f); <>1__state = 2; return true; case 2: <>1__state = -1; <>4__this.isInspecting = false; 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(); } } [CompilerGenerated] private sealed class d__41 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public M4Item <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__41(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.cantFire = true; <>2__current = (object)new WaitForSeconds(0.07f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.cantFire = false; 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(); } } [CompilerGenerated] private sealed class d__60 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Animator animator; public int stateHash; public float normalizedTime; public M4Item <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__60(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; if ((Object)(object)animator != (Object)null) { animator.Play(stateHash, 0, normalizedTime); } 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(); } } [CompilerGenerated] private sealed class d__51 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public M4Item <>4__this; private float 5__1; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__51(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Expected O, but got Unknown //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; 5__1 = Mathf.Clamp(Plugin.rifleReloadSpeed, 0.1f, 10f); <>4__this.gunAnimator.speed = 5__1; if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy != (Object)null) { ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.speed = 5__1; } ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetTrigger("ReloadM4"); <>4__this.gunAnimator.SetTrigger("Reloading"); <>4__this.isReloading = true; <>4__this.gunAudio.PlayOneShot(<>4__this.gunReloadSFX); if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { WalkieTalkie.TransmitOneShotAudio(<>4__this.gunAudio, <>4__this.gunReloadSFX, 1f); } <>2__current = (object)new WaitForSeconds(2f / 5__1); <>1__state = 1; return true; case 1: <>1__state = -1; if (<>4__this.isReloading) { if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController && !Plugin.customGunInfinityAmmo) { ((GrabbableObject)<>4__this).playerHeldBy.DestroyItemInSlotAndSync(<>4__this.ammoSlotToUse); } <>4__this.ammoSlotToUse = -1; <>4__this.ammosLoaded = 30; if (Plugin.translateKorean) { <>4__this.KR_SetAmmoControlTip(isChecking: true); } else { <>4__this.SetAmmoControlTip(isChecking: true); } } <>2__current = (object)new WaitForSeconds(0.55f / 5__1); <>1__state = 2; return true; case 2: <>1__state = -1; <>4__this.isReloading = false; <>4__this.gunAnimator.speed = 1f; if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy != (Object)null) { ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.speed = 1f; } 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(); } } private bool isCrouching; private bool isJumping; private bool isWalking; private bool isSprinting; private AnimatorStateInfo currentStateInfo; private float currentAnimationTime; public int gunCompatibleAmmoID = 1410; public bool isReloading; public bool isInspecting; public bool cantFire; public bool isFiring; public int ammosLoaded; public Animator gunAnimator; public AudioSource gunAudio; public AudioSource gunShootAudio; public AudioSource gunBulletsRicochetAudio; public AudioClip gunShootSFX; public AudioClip gunReloadSFX; public AudioClip gunInspectSFX; public AudioClip noAmmoSFX; private int ammoSlotToUse = -1; private bool localClientSendingShootGunRPC; private bool localClientSendingReloadGunRPC; private PlayerControllerB previousPlayerHeldBy; public ParticleSystem gunShootParticle; public Transform gunRayPoint; private RaycastHit[] enemyColliders; private RaycastHit[] playerColliders; private EnemyAI heldByEnemy; public override void Start() { ((GrabbableObject)this).Start(); } public override int GetItemDataToSave() { ((GrabbableObject)this).GetItemDataToSave(); return ammosLoaded; } public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); ammosLoaded = saveData; } public override void Update() { ((GrabbableObject)this).Update(); if (!((Object)(object)base.playerHeldBy == (Object)null)) { if (!isInspecting && isFiring && !isReloading && !cantFire && !base.playerHeldBy.playerBodyAnimator.GetBool("ReloadM4") && ammosLoaded > 0) { ShootGunAndSync(heldByPlayer: true); } if (Plugin.InputActionInstance.RifleReloadKey.triggered && !isReloading && ammosLoaded < 30) { StartReloadGunAndSync(); } } } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); previousPlayerHeldBy = base.playerHeldBy; previousPlayerHeldBy.equippedUsableItemQE = true; if ((Object)(object)base.playerHeldBy != (Object)null) { UpdateAnimator(base.playerHeldBy, base.playerHeldBy.playerBodyAnimator, restore: false); } if (Plugin.translateKorean) { KR_SetAmmoControlTip(isChecking: false); } else { SetAmmoControlTip(isChecking: false); } } public override void GrabItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { UpdateAnimator(base.playerHeldBy, base.playerHeldBy.playerBodyAnimator, restore: false); } ((GrabbableObject)this).GrabItem(); } public override void GrabItemFromEnemy(EnemyAI enemy) { ((GrabbableObject)this).GrabItemFromEnemy(enemy); heldByEnemy = enemy; } public override void DiscardItemFromEnemy() { ((GrabbableObject)this).DiscardItemFromEnemy(); heldByEnemy = null; } public override void ItemActivate(bool used, bool buttonDown = false) { Debug.Log((object)buttonDown); isFiring = buttonDown; if (!isInspecting && !isReloading && !cantFire && !base.playerHeldBy.playerBodyAnimator.GetBool("ReloadM4") && ammosLoaded <= 0) { gunAudio.PlayOneShot(noAmmoSFX); } } public void ShootGunAndSync(bool heldByPlayer) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_00aa: 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) Vector3 gunPosition; Vector3 forward; if (!heldByPlayer) { gunPosition = gunRayPoint.position; forward = gunRayPoint.forward; } else { gunPosition = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position - ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.up * 0.45f; forward = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.forward; } Debug.Log((object)"Calling shoot gun...."); ShootGun(gunPosition, forward); Debug.Log((object)"Calling shoot gun and sync"); localClientSendingShootGunRPC = true; ShootGunServerRpc(gunPosition, forward); } [ServerRpc(RequireOwnership = false)] public void ShootGunServerRpc(Vector3 gunPosition, Vector3 gunForward) { //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) ShootGunClientRpc(gunPosition, gunForward); } [ClientRpc] public void ShootGunClientRpc(Vector3 gunPosition, Vector3 gunForward) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Shoot gun client rpc received"); if (localClientSendingShootGunRPC) { localClientSendingShootGunRPC = false; Debug.Log((object)"localClientSendingShootGunRPC was true"); } else { ShootGun(gunPosition, gunForward); } } [IteratorStateMachine(typeof(d__41))] public IEnumerator FireDelay() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__41(0) { <>4__this = this }; } public void ShootGun(Vector3 gunPosition, Vector3 gunForward) { //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: 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_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: 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_0240: 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_0291: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_05ac: Unknown result type (might be due to invalid IL or missing references) //IL_0637: Unknown result type (might be due to invalid IL or missing references) //IL_0649: Unknown result type (might be due to invalid IL or missing references) //IL_0696: Unknown result type (might be due to invalid IL or missing references) //IL_06a0: Unknown result type (might be due to invalid IL or missing references) //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_0752: Unknown result type (might be due to invalid IL or missing references) //IL_075c: Unknown result type (might be due to invalid IL or missing references) //IL_0700: Unknown result type (might be due to invalid IL or missing references) //IL_070a: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0412: Unknown result type (might be due to invalid IL or missing references) //IL_0432: Unknown result type (might be due to invalid IL or missing references) //IL_0444: Unknown result type (might be due to invalid IL or missing references) //IL_0449: Unknown result type (might be due to invalid IL or missing references) //IL_04cd: Unknown result type (might be due to invalid IL or missing references) //IL_04d2: Unknown result type (might be due to invalid IL or missing references) //IL_04e4: Unknown result type (might be due to invalid IL or missing references) //IL_04f6: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) if (Plugin.translateKorean) { KR_SetAmmoControlTip(isChecking: false); } else { SetAmmoControlTip(isChecking: false); } CentipedeAI[] array = Object.FindObjectsByType((FindObjectsSortMode)0); FlowerSnakeEnemy[] array2 = Object.FindObjectsByType((FindObjectsSortMode)0); for (int i = 0; i < array.Length; i++) { if ((Object)(object)array[i].clingingToPlayer == (Object)(object)base.playerHeldBy) { ((EnemyAI)array[i]).HitEnemy(2, base.playerHeldBy, true, -1); } } for (int j = 0; j < array2.Length; j++) { if ((Object)(object)array2[j].clingingToPlayer == (Object)(object)base.playerHeldBy) { ((EnemyAI)array2[j]).HitEnemy(2, base.playerHeldBy, true, -1); } } ((MonoBehaviour)this).StartCoroutine(FireDelay()); if (base.isHeld && (Object)(object)base.playerHeldBy != (Object)null && (Object)(object)base.playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController) { base.playerHeldBy.playerBodyAnimator.SetTrigger("ShootM4"); } gunAnimator.SetTrigger("Fire"); gunShootAudio.PlayOneShot(gunShootSFX); WalkieTalkie.TransmitOneShotAudio(gunShootAudio, gunShootSFX, 1f); gunShootParticle.Play(true); ammosLoaded = Mathf.Clamp(ammosLoaded - 1, 0, 30); PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return; } float num = Vector3.Distance(((Component)localPlayerController).transform.position, ((Component)gunRayPoint).transform.position); Vector3 val = localPlayerController.playerCollider.ClosestPoint(gunPosition); if (num < 12f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward); if (enemyColliders == null) { enemyColliders = (RaycastHit[])(object)new RaycastHit[35]; } RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref val3, float.PositiveInfinity, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { ((Component)gunBulletsRicochetAudio).transform.position = ((Ray)(ref val2)).GetPoint(((RaycastHit)(ref val3)).distance - 0.5f); gunBulletsRicochetAudio.Play(); } if ((Object)(object)base.playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { int num2 = Physics.SphereCastNonAlloc(val2, 0.25f, enemyColliders, float.PositiveInfinity, 524288, (QueryTriggerInteraction)2); IHittable val4 = default(IHittable); for (int k = 0; k < num2; k++) { Debug.Log((object)"Raycasting enemy"); if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref enemyColliders[k])).transform).GetComponent())) { continue; } EnemyAI mainScript = ((Component)((RaycastHit)(ref enemyColliders[k])).transform).GetComponent().mainScript; if ((Object)(object)heldByEnemy != (Object)null && (Object)(object)heldByEnemy == (Object)(object)mainScript) { Debug.Log((object)"Rifle is held by enemy, skipping enemy raycast"); continue; } Debug.Log((object)("Hit enemy " + mainScript.enemyType.enemyName)); if (((RaycastHit)(ref enemyColliders[k])).distance == 0f) { Debug.Log((object)"Spherecast started inside enemy collider"); } else if (Physics.Linecast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref enemyColliders[k])).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { Debug.DrawRay(((RaycastHit)(ref val3)).point, Vector3.up, Color.red, 15f); Debug.DrawLine(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref enemyColliders[k])).point, Color.cyan, 15f); Plugin.mls.LogInfo((object)("Raycast hit wall: " + ((Object)((Component)((RaycastHit)(ref val3)).collider).gameObject).name + ", distance: " + ((RaycastHit)(ref val3)).distance)); } else if (((Component)((RaycastHit)(ref enemyColliders[k])).transform).TryGetComponent(ref val4)) { Vector3 forward = ((Component)base.playerHeldBy.gameplayCamera).transform.forward; float num3 = Vector3.Distance(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref enemyColliders[k])).point); Plugin.mls.LogInfo((object)("Damage to enemy, damage: " + Plugin.rifleMonsterDamage + ", distance:" + num3)); val4.Hit(Plugin.rifleMonsterDamage, forward, base.playerHeldBy, true, -1); } else { Plugin.mls.LogInfo((object)("Could not get hittable script from collider, transform: " + ((Object)((RaycastHit)(ref enemyColliders[k])).transform).name)); } } } if (playerColliders == null) { playerColliders = (RaycastHit[])(object)new RaycastHit[10]; } int num4 = Physics.SphereCastNonAlloc(val2, 0.3f, playerColliders, float.PositiveInfinity, StartOfRound.Instance.collidersRoomMaskDefaultAndPlayers, (QueryTriggerInteraction)2); for (int l = 0; l < num4; l++) { if ((Object)(object)((Component)((RaycastHit)(ref playerColliders[l])).transform).GetComponent() != (Object)null && (Object)(object)((Component)((RaycastHit)(ref playerColliders[l])).transform).GetComponent() != (Object)(object)base.playerHeldBy) { float num5 = Vector3.Distance(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref playerColliders[l])).point); if (num5 < 10f) { ((Component)((RaycastHit)(ref playerColliders[l])).transform).GetComponent().DamagePlayer(Plugin.rifleMaxPlayerDamage, true, true, (CauseOfDeath)7, 0, false, ((Component)base.playerHeldBy.gameplayCamera).transform.forward * 30f); } else if (num5 < 25f) { ((Component)((RaycastHit)(ref playerColliders[l])).transform).GetComponent().DamagePlayer(Mathf.RoundToInt((float)(Plugin.rifleMaxPlayerDamage - Plugin.rifleMaxPlayerDamage / 3)), true, true, (CauseOfDeath)7, 0, false, ((Component)base.playerHeldBy.gameplayCamera).transform.forward * 30f); } else { ((Component)((RaycastHit)(ref playerColliders[l])).transform).GetComponent().DamagePlayer(Mathf.RoundToInt((float)(Plugin.rifleMaxPlayerDamage / 3)), true, true, (CauseOfDeath)7, 0, false, ((Component)base.playerHeldBy.gameplayCamera).transform.forward * 30f); } Debug.Log((object)"Player ouch"); } } } public override void ItemInteractLeftRight(bool right) { ((GrabbableObject)this).ItemInteractLeftRight(right); if (!((Object)(object)base.playerHeldBy == (Object)null)) { Debug.Log((object)$"r/l activate: {right}"); if (!right) { StartCheckMagazine(); } } } private void StartReloadGunAndSync() { if ((Plugin.customGunInfinityAmmo || ReloadedGun()) && !isReloading) { Debug.Log((object)"Calling reload gun...."); ((MonoBehaviour)this).StartCoroutine(ReloadGunAnimation()); Debug.Log((object)"Calling reload gun and sync"); localClientSendingReloadGunRPC = true; ReloadGunServerRpc(); } else { gunAudio.PlayOneShot(noAmmoSFX); } } [ServerRpc(RequireOwnership = false)] public void ReloadGunServerRpc() { ReloadGunClientRpc(); } [ClientRpc] public void ReloadGunClientRpc() { Debug.Log((object)"Reload gun client rpc received"); if (localClientSendingReloadGunRPC) { localClientSendingReloadGunRPC = false; Debug.Log((object)"localClientSendingReloadGunRPC was true"); } else { ((MonoBehaviour)this).StartCoroutine(ReloadGunAnimation()); } } private void StartCheckMagazine() { if (!isInspecting) { ((MonoBehaviour)this).StartCoroutine(CheckAmmoGunAnimation()); } else { gunAudio.PlayOneShot(noAmmoSFX); } } [IteratorStateMachine(typeof(d__48))] private IEnumerator CheckAmmoGunAnimation() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__48(0) { <>4__this = this }; } private void SetAmmoControlTip(bool isChecking) { string text = "Check ammo : [Q]"; if (ammosLoaded == 30) { text = (isChecking ? "Check ammo : [Q] [Full]" : "Check ammo : [Q] [??]"); } else if (ammosLoaded >= 20 && 30 > ammosLoaded) { text = (isChecking ? "Check ammo : [Q] [<30]" : "Check ammo : [Q] [??]"); } else if (ammosLoaded >= 10 && 20 > ammosLoaded) { text = (isChecking ? "Check ammo : [Q] [<20]" : "Check ammo : [Q] [??]"); } else if (ammosLoaded >= 1 && 10 > ammosLoaded) { text = (isChecking ? "Check ammo : [Q] [<10]" : "Check ammo : [Q] [??]"); } else if (ammosLoaded <= 0) { text = (isChecking ? "Check ammo : [Q] [Empty]" : "Check ammo : [Q] [??]"); } if (((NetworkBehaviour)this).IsOwner) { HUDManager.Instance.ChangeControlTip(3, text, false); string text2 = InputActionRebindingExtensions.GetBindingDisplayString(Plugin.InputActionInstance.RifleReloadKey, (DisplayStringOptions)0, (string)null).Replace(" | ", ""); HUDManager.Instance.ChangeControlTip(2, "Reload : [" + text2 + "]", false); } } private void KR_SetAmmoControlTip(bool isChecking) { string text = "탄약 확인하기 : [Q]"; if (ammosLoaded == 30) { text = (isChecking ? "탄약 확인하기 : [Q] [가득 참]" : "탄약 확인하기 : [Q] [??]"); } else if (ammosLoaded >= 20 && 30 > ammosLoaded) { text = (isChecking ? "탄약 확인하기 : [Q] [<30]" : "탄약 확인하기 : [Q] [??]"); } else if (ammosLoaded >= 10 && 20 > ammosLoaded) { text = (isChecking ? "탄약 확인하기 : [Q] [<20]" : "탄약 확인하기 : [Q] [??]"); } else if (ammosLoaded >= 1 && 10 > ammosLoaded) { text = (isChecking ? "탄약 확인하기 : [Q] [<10]" : "탄약 확인하기 : [Q] [??]"); } else if (ammosLoaded <= 0) { text = (isChecking ? "탄약 확인하기 : [Q] [비어 있음]" : "탄약 확인하기 : [Q] [??]"); } if (((NetworkBehaviour)this).IsOwner) { HUDManager.Instance.ChangeControlTip(3, text, false); string text2 = InputActionRebindingExtensions.GetBindingDisplayString(Plugin.InputActionInstance.RifleReloadKey, (DisplayStringOptions)0, (string)null).Replace(" | ", ""); HUDManager.Instance.ChangeControlTip(2, "재장전 : [" + text2 + "]", false); } } [IteratorStateMachine(typeof(d__51))] private IEnumerator ReloadGunAnimation() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__51(0) { <>4__this = this }; } private bool ReloadedGun() { int num = FindAmmoInInventory(); if (num == -1) { Debug.Log((object)"not reloading"); return false; } Debug.Log((object)"reloading!"); ammoSlotToUse = num; return true; } private int FindAmmoInInventory() { for (int i = 0; i < base.playerHeldBy.ItemSlots.Length; i++) { if (!((Object)(object)base.playerHeldBy.ItemSlots[i] == (Object)null)) { GrabbableObject obj = base.playerHeldBy.ItemSlots[i]; GunAmmo val = (GunAmmo)(object)((obj is GunAmmo) ? obj : null); Debug.Log((object)$"Ammo null in slot #{i}?: {(Object)(object)val == (Object)null}"); if ((Object)(object)val != (Object)null) { Debug.Log((object)$"Ammo in slot #{i} id: {val.ammoType}"); } if ((Object)(object)val != (Object)null && val.ammoType == gunCompatibleAmmoID) { return i; } } } return -1; } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); StopUsingGun(); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); StopUsingGun(); } private void StopUsingGun() { previousPlayerHeldBy.equippedUsableItemQE = false; gunAudio.Stop(); isReloading = false; previousPlayerHeldBy.playerBodyAnimator.SetTrigger("SwitchHoldAnimation"); gunAnimator.SetTrigger("Reset"); isInspecting = false; gunAnimator.speed = 1f; previousPlayerHeldBy.playerBodyAnimator.speed = 1f; if ((Object)(object)base.playerHeldBy != (Object)null) { UpdateAnimator(base.playerHeldBy, base.playerHeldBy.playerBodyAnimator, restore: true); } } private void UpdateAnimator(PlayerControllerB player, Animator playerBodyAnimator, bool restore) { if (!restore) { if ((Object)(object)playerBodyAnimator.runtimeAnimatorController != (Object)(object)Plugin.playerAnimator && (Object)(object)playerBodyAnimator.runtimeAnimatorController != (Object)(object)Plugin.otherPlayerAnimator) { if ((Object)(object)player == (Object)(object)StartOfRound.Instance.localPlayerController) { SaveAnimatorStates(playerBodyAnimator); playerBodyAnimator.runtimeAnimatorController = Plugin.playerAnimator; RestoreAnimatorStates(playerBodyAnimator); Plugin.mls.LogInfo((object)"Replace Player Animator!"); return; } bool @bool = playerBodyAnimator.GetBool("Walking"); bool bool2 = playerBodyAnimator.GetBool("Sprinting"); bool bool3 = playerBodyAnimator.GetBool("crouching"); bool bool4 = playerBodyAnimator.GetBool("Jumping"); playerBodyAnimator.runtimeAnimatorController = PlayerControllerBPatch.originalPlayerAnimator; playerBodyAnimator.SetBool("crouching", bool3); playerBodyAnimator.SetBool("Jumping", bool4); playerBodyAnimator.SetBool("Walking", @bool); playerBodyAnimator.SetBool("Sprinting", bool2); Plugin.mls.LogInfo((object)"Restored Player Animator!"); } } else { playerBodyAnimator.runtimeAnimatorController = PlayerControllerBPatch.originalPlayerAnimator; playerBodyAnimator.SetBool("crouching", isCrouching); playerBodyAnimator.SetBool("Jumping", isJumping); playerBodyAnimator.SetBool("Walking", isWalking); playerBodyAnimator.SetBool("Sprinting", isSprinting); Plugin.mls.LogInfo((object)"Restored Player Animator!"); } } private void SaveAnimatorStates(Animator animator) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) isCrouching = animator.GetBool("crouching"); isJumping = animator.GetBool("Jumping"); isWalking = animator.GetBool("Walking"); isSprinting = animator.GetBool("Sprinting"); currentStateInfo = animator.GetCurrentAnimatorStateInfo(0); currentAnimationTime = ((AnimatorStateInfo)(ref currentStateInfo)).normalizedTime; } public void RestoreAnimatorStates(Animator animator) { ((MonoBehaviour)this).StartCoroutine(PlayAfterFrame(animator, ((AnimatorStateInfo)(ref currentStateInfo)).fullPathHash, currentAnimationTime)); animator.SetBool("crouching", isCrouching); animator.SetBool("Jumping", isJumping); animator.SetBool("Walking", isWalking); animator.SetBool("Sprinting", isSprinting); } [IteratorStateMachine(typeof(d__60))] private IEnumerator PlayAfterFrame(Animator animator, int stateHash, float normalizedTime) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__60(0) { <>4__this = this, animator = animator, stateHash = stateHash, normalizedTime = normalizedTime }; } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { public static RuntimeAnimatorController originalPlayerAnimator; [HarmonyPostfix] [HarmonyPatch("ConnectClientToPlayerObject")] private static void Start_Postfix(PlayerControllerB __instance) { if ((Object)(object)originalPlayerAnimator == (Object)null) { Plugin.mls.LogInfo((object)"Cloning Player Animation Controller"); originalPlayerAnimator = Object.Instantiate(__instance.playerBodyAnimator.runtimeAnimatorController); ((Object)originalPlayerAnimator).name = "DefaultPlayerAnimator"; } } } public class RevolverItem : GrabbableObject { [CompilerGenerated] private sealed class d__45 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public RevolverItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__45(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.cantFire = true; <>2__current = (object)new WaitForSeconds(0.2f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.cantFire = false; 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(); } } [CompilerGenerated] private sealed class d__66 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Animator animator; public int stateHash; public float normalizedTime; public RevolverItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__66(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; if ((Object)(object)animator != (Object)null) { animator.Play(stateHash, 0, normalizedTime); } 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(); } } [CompilerGenerated] private sealed class d__54 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public RevolverItem <>4__this; private float 5__1; private int <>s__2; private List.Enumerator <>s__3; private MeshRenderer 5__4; private int 5__5; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__54(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__3 = default(List.Enumerator); 5__4 = null; <>1__state = -2; } private bool MoveNext() { //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_0463: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Expected O, but got Unknown //IL_05b9: Unknown result type (might be due to invalid IL or missing references) //IL_05c3: Expected O, but got Unknown //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0263: 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_0292: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03b7: Expected O, but got Unknown //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (<>4__this.isCylinderMoving || !<>4__this.gunAnimator.GetBool("Reloading")) { return false; } 5__1 = Mathf.Clamp(Plugin.revolverReloadSpeed, 0.1f, 10f); <>4__this.gunAnimator.speed = 5__1; if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy != (Object)null) { ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.speed = 5__1; } <>2__current = (object)new WaitForSeconds(0.05f / 5__1); <>1__state = 1; return true; case 1: { <>1__state = -1; ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetTrigger("RevolverInsertBullet"); <>4__this.isReloading = true; <>4__this.gunAudio.PlayOneShot(<>4__this.gunReloadSFX); if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { WalkieTalkie.TransmitOneShotAudio(<>4__this.gunAudio, <>4__this.gunReloadSFX, 1f); ((Renderer)<>4__this.revolverAmmoInHand).enabled = true; <>4__this.revolverAmmoInHandTransform.SetParent(((GrabbableObject)<>4__this).playerHeldBy.leftHandItemTarget); <>4__this.revolverAmmoInHandTransform.localPosition = new Vector3(0.0033f, 0.0732f, -0.0762f); <>4__this.revolverAmmoInHandTransform.localEulerAngles = new Vector3(6.533f, 106.232f, -12.891f); } int ammosLoaded = <>4__this.ammosLoaded; <>s__2 = ammosLoaded; switch (<>s__2) { case 0: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, 0f)); break; case 1: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 60f, 0f)); break; case 2: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 120f, 0f)); break; case 3: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 180f, 0f)); break; case 4: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 240f, 0f)); break; case 5: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 300f, 0f)); break; case 6: <>4__this.cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, 0f)); break; } <>4__this.gunAudio.PlayOneShot(<>4__this.gunReloadSFX); <>2__current = (object)new WaitForSeconds(0.75f / 5__1); <>1__state = 2; return true; } case 2: <>1__state = -1; if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy != (Object)null) { if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController && !Plugin.customGunInfinityAmmo) { ((GrabbableObject)<>4__this).playerHeldBy.DestroyItemInSlotAndSync(<>4__this.ammoSlotToUse); } <>4__this.ammoSlotToUse = -1; <>4__this.ammosLoaded = Mathf.Clamp(<>4__this.ammosLoaded + 1, 0, 6); } <>2__current = (object)new WaitForSeconds(0.1f / 5__1); <>1__state = 3; return true; case 3: <>1__state = -1; if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { <>s__3 = <>4__this.revolverAmmos.GetEnumerator(); try { while (<>s__3.MoveNext()) { 5__4 = <>s__3.Current; ((Renderer)5__4).enabled = false; 5__4 = null; } } finally { ((IDisposable)<>s__3).Dispose(); } <>s__3 = default(List.Enumerator); if (<>4__this.ammosLoaded > 0) { 5__5 = 0; while (5__5 <= <>4__this.ammosLoaded - 1) { ((Renderer)<>4__this.revolverAmmos[5__5]).enabled = true; 5__5++; } } ((Renderer)<>4__this.revolverAmmoInHand).enabled = false; } <>4__this.revolverAmmoInHandTransform.SetParent(((Component)<>4__this).transform); <>2__current = (object)new WaitForSeconds(1f / 5__1); <>1__state = 4; return true; case 4: <>1__state = -1; <>4__this.gunAudio.PlayOneShot(<>4__this.gunReloadFinishSFX); WalkieTalkie.TransmitOneShotAudio(<>4__this.gunAudio, <>4__this.gunReloadFinishSFX, 1f); <>4__this.isReloading = false; <>4__this.gunAnimator.speed = 1f; if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy != (Object)null) { ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.speed = 1f; } 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(); } } [CompilerGenerated] private sealed class d__55 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public RevolverItem <>4__this; private List.Enumerator <>s__1; private MeshRenderer 5__2; private int 5__3; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__55(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = default(List.Enumerator); 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.isCylinderMoving = true; <>s__1 = <>4__this.revolverAmmos.GetEnumerator(); try { while (<>s__1.MoveNext()) { 5__2 = <>s__1.Current; ((Renderer)5__2).enabled = false; 5__2 = null; } } finally { ((IDisposable)<>s__1).Dispose(); } <>s__1 = default(List.Enumerator); if (<>4__this.ammosLoaded > 0) { 5__3 = 0; while (5__3 <= <>4__this.ammosLoaded - 1) { ((Renderer)<>4__this.revolverAmmos[5__3]).enabled = true; 5__3++; } } ((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetBool("ReloadRevolver", !((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.GetBool("ReloadRevolver")); <>4__this.gunAnimator.SetBool("Reloading", !<>4__this.gunAnimator.GetBool("Reloading")); if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { if (((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.GetBool("ReloadRevolver")) { <>4__this.gunAudio.PlayOneShot(<>4__this.cylinderOpenSFX); } else { <>4__this.gunAudio.PlayOneShot(<>4__this.cylinderCloseSFX); } ((GrabbableObject)<>4__this).SetControlTipsForItem(); } else if (<>4__this.gunAnimator.GetBool("Reloading")) { <>4__this.gunAudio.PlayOneShot(<>4__this.cylinderOpenSFX); WalkieTalkie.TransmitOneShotAudio(<>4__this.gunAudio, <>4__this.cylinderOpenSFX, 1f); <>4__this.gunAnimator.SetBool("Reloading", true); } else { <>4__this.gunAudio.PlayOneShot(<>4__this.cylinderCloseSFX); WalkieTalkie.TransmitOneShotAudio(<>4__this.gunAudio, <>4__this.cylinderCloseSFX, 1f); <>4__this.gunAnimator.SetBool("Reloading", false); } <>2__current = (object)new WaitForSeconds(0.45f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.isCylinderMoving = false; 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(); } } [CompilerGenerated] private sealed class d__47 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float effectSeverity; public RevolverItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__47(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 1; return true; case 1: <>1__state = -1; SoundManager.Instance.earsRingingTimer = effectSeverity; 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(); } } private bool isCrouching; private bool isJumping; private bool isWalking; private bool isSprinting; private AnimatorStateInfo currentStateInfo; private float currentAnimationTime; public int gunCompatibleAmmoID = 1410; public bool isReloading; public bool cantFire; public Transform cylinderTransform; public bool isCylinderMoving; public int ammosLoaded; public Animator gunAnimator; public AudioSource gunAudio; public AudioSource gunShootAudio; public AudioSource gunBulletsRicochetAudio; public List gunShootSFX = new List(); public AudioClip gunReloadSFX; public AudioClip cylinderOpenSFX; public AudioClip cylinderCloseSFX; public AudioClip gunReloadFinishSFX; public AudioClip noAmmoSFX; public AudioClip gunSafetySFX; public AudioClip switchSafetyOnSFX; public AudioClip switchSafetyOffSFX; private int ammoSlotToUse = -1; private PlayerControllerB previousPlayerHeldBy; public ParticleSystem gunShootParticle; public Transform revolverRayPoint; public List revolverAmmos = new List(); public MeshRenderer revolverAmmoInHand; public Transform revolverAmmoInHandTransform; private RaycastHit[] enemyColliders; private RaycastHit[] playerColliders; private EnemyAI heldByEnemy; public override void Start() { ((GrabbableObject)this).Start(); } public override int GetItemDataToSave() { ((GrabbableObject)this).GetItemDataToSave(); return ammosLoaded; } public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); ammosLoaded = saveData; } public override void Update() { //IL_0055: 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) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //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_00c3: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0138: 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_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: 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) ((GrabbableObject)this).Update(); if (!isReloading) { switch (ammosLoaded) { case 0: cylinderTransform.localRotation = Quaternion.Lerp(cylinderTransform.localRotation, Quaternion.Euler(new Vector3(0f, 0f, 0f)), Time.deltaTime * 25f); break; case 1: cylinderTransform.localRotation = Quaternion.Lerp(cylinderTransform.localRotation, Quaternion.Euler(new Vector3(0f, 60f, 0f)), Time.deltaTime * 25f); break; case 2: cylinderTransform.localRotation = Quaternion.Lerp(cylinderTransform.localRotation, Quaternion.Euler(new Vector3(0f, 120f, 0f)), Time.deltaTime * 25f); break; case 3: cylinderTransform.localRotation = Quaternion.Lerp(cylinderTransform.localRotation, Quaternion.Euler(new Vector3(0f, 180f, 0f)), Time.deltaTime * 25f); break; case 4: cylinderTransform.localRotation = Quaternion.Lerp(cylinderTransform.localRotation, Quaternion.Euler(new Vector3(0f, 240f, 0f)), Time.deltaTime * 25f); break; case 5: cylinderTransform.localRotation = Quaternion.Lerp(cylinderTransform.localRotation, Quaternion.Euler(new Vector3(0f, 300f, 0f)), Time.deltaTime * 25f); break; case 6: cylinderTransform.localRotation = Quaternion.Euler(new Vector3(0f, 0f, 0f)); break; } } } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); if ((Object)(object)base.playerHeldBy != (Object)null) { UpdateAnimator(base.playerHeldBy, base.playerHeldBy.playerBodyAnimator, restore: false); } base.playerHeldBy.playerBodyAnimator.SetBool("ReloadRevolver", false); gunAnimator.SetBool("Reloading", false); ((Renderer)revolverAmmoInHand).enabled = false; previousPlayerHeldBy = base.playerHeldBy; previousPlayerHeldBy.equippedUsableItemQE = true; isCylinderMoving = false; foreach (MeshRenderer revolverAmmo in revolverAmmos) { ((Renderer)revolverAmmo).enabled = false; } if (ammosLoaded > 0) { for (int i = 0; i <= ammosLoaded - 1; i++) { ((Renderer)revolverAmmos[i]).enabled = true; } } } public override void GrabItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { UpdateAnimator(base.playerHeldBy, base.playerHeldBy.playerBodyAnimator, restore: false); } ((GrabbableObject)this).GrabItem(); } public override void GrabItemFromEnemy(EnemyAI enemy) { ((GrabbableObject)this).GrabItemFromEnemy(enemy); heldByEnemy = enemy; } public override void DiscardItemFromEnemy() { ((GrabbableObject)this).DiscardItemFromEnemy(); heldByEnemy = null; } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!isReloading && !cantFire && !gunAnimator.GetBool("Reloading")) { if (ammosLoaded > 0) { gunAnimator.SetBool("Reloading", false); ShootGunAndSync(heldByPlayer: true); } else { ((MonoBehaviour)this).StartCoroutine(FireDelay()); gunAnimator.SetTrigger("Fire"); gunAudio.PlayOneShot(noAmmoSFX); } } } public void ShootGunAndSync(bool heldByPlayer) { //IL_0036: 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) //IL_0055: 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) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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) Vector3 revolverPosition; Vector3 forward; if (!heldByPlayer) { revolverPosition = revolverRayPoint.position; forward = revolverRayPoint.forward; } else { revolverPosition = ((Component)base.playerHeldBy.gameplayCamera).transform.position - ((Component)base.playerHeldBy.gameplayCamera).transform.up * 0.45f; forward = ((Component)base.playerHeldBy.gameplayCamera).transform.forward; } ShootGun(revolverPosition, forward); } [IteratorStateMachine(typeof(d__45))] public IEnumerator FireDelay() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__45(0) { <>4__this = this }; } public void ShootGun(Vector3 revolverPosition, Vector3 revolverForward) { //IL_021a: 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_023b: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: 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_02eb: 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_0338: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_06f8: Unknown result type (might be due to invalid IL or missing references) //IL_0783: Unknown result type (might be due to invalid IL or missing references) //IL_0795: Unknown result type (might be due to invalid IL or missing references) //IL_07e2: Unknown result type (might be due to invalid IL or missing references) //IL_07ec: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_04c8: Unknown result type (might be due to invalid IL or missing references) //IL_089e: Unknown result type (might be due to invalid IL or missing references) //IL_08a8: Unknown result type (might be due to invalid IL or missing references) //IL_084c: Unknown result type (might be due to invalid IL or missing references) //IL_0856: Unknown result type (might be due to invalid IL or missing references) //IL_04eb: Unknown result type (might be due to invalid IL or missing references) //IL_04f0: Unknown result type (might be due to invalid IL or missing references) //IL_04f5: Unknown result type (might be due to invalid IL or missing references) //IL_0515: Unknown result type (might be due to invalid IL or missing references) //IL_0527: Unknown result type (might be due to invalid IL or missing references) //IL_052c: Unknown result type (might be due to invalid IL or missing references) //IL_05b0: Unknown result type (might be due to invalid IL or missing references) //IL_05b5: Unknown result type (might be due to invalid IL or missing references) //IL_05c7: Unknown result type (might be due to invalid IL or missing references) //IL_05d9: Unknown result type (might be due to invalid IL or missing references) //IL_0680: Unknown result type (might be due to invalid IL or missing references) CentipedeAI[] array = Object.FindObjectsByType((FindObjectsSortMode)0); FlowerSnakeEnemy[] array2 = Object.FindObjectsByType((FindObjectsSortMode)0); for (int i = 0; i < array.Length; i++) { if ((Object)(object)array[i].clingingToPlayer == (Object)(object)base.playerHeldBy) { ((EnemyAI)array[i]).HitEnemy(5, base.playerHeldBy, true, -1); } } for (int j = 0; j < array2.Length; j++) { if ((Object)(object)array2[j].clingingToPlayer == (Object)(object)base.playerHeldBy) { ((EnemyAI)array2[j]).HitEnemy(5, base.playerHeldBy, true, -1); } } ((MonoBehaviour)this).StartCoroutine(FireDelay()); if (base.isHeld && (Object)(object)base.playerHeldBy != (Object)null && (Object)(object)base.playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController) { base.playerHeldBy.playerBodyAnimator.SetTrigger("ShootRevolver"); } gunAnimator.SetTrigger("Fire"); RoundManager.PlayRandomClip(gunShootAudio, gunShootSFX.ToArray(), true, 1f, 1840, 1000); WalkieTalkie.TransmitOneShotAudio(gunShootAudio, gunShootSFX[0], 1f); gunShootParticle.Play(true); ammosLoaded = Mathf.Clamp(ammosLoaded - 1, 0, 6); foreach (MeshRenderer revolverAmmo in revolverAmmos) { ((Renderer)revolverAmmo).enabled = false; } if (ammosLoaded > 0) { for (int k = 0; k <= ammosLoaded - 1; k++) { ((Renderer)revolverAmmos[k]).enabled = true; } } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null) { return; } float num = Vector3.Distance(((Component)localPlayerController).transform.position, ((Component)revolverRayPoint).transform.position); Vector3 val = localPlayerController.playerCollider.ClosestPoint(revolverPosition); float num2 = 0f; if (num < 5f) { num2 = 0.25f; HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } if (num < 15f) { num2 = 0.15f; HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } if (num2 > 0f && SoundManager.Instance.timeSinceEarsStartedRinging > 16f) { ((MonoBehaviour)this).StartCoroutine(delayedEarsRinging(num2)); } Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward); if (enemyColliders == null) { enemyColliders = (RaycastHit[])(object)new RaycastHit[35]; } RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref val3, float.PositiveInfinity, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { ((Component)gunBulletsRicochetAudio).transform.position = ((Ray)(ref val2)).GetPoint(((RaycastHit)(ref val3)).distance - 0.5f); gunBulletsRicochetAudio.Play(); } if ((Object)(object)base.playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { int num3 = Physics.SphereCastNonAlloc(val2, 0.25f, enemyColliders, float.PositiveInfinity, 524288, (QueryTriggerInteraction)2); IHittable val4 = default(IHittable); for (int l = 0; l < num3; l++) { Debug.Log((object)"Raycasting enemy"); if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref enemyColliders[l])).transform).GetComponent())) { continue; } EnemyAI mainScript = ((Component)((RaycastHit)(ref enemyColliders[l])).transform).GetComponent().mainScript; if ((Object)(object)heldByEnemy != (Object)null && (Object)(object)heldByEnemy == (Object)(object)mainScript) { Debug.Log((object)"Shotgun is held by enemy, skipping enemy raycast"); continue; } Debug.Log((object)("Hit enemy " + mainScript.enemyType.enemyName)); if (((RaycastHit)(ref enemyColliders[l])).distance == 0f) { Debug.Log((object)"Spherecast started inside enemy collider"); } else if (Physics.Linecast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref enemyColliders[l])).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { Debug.DrawRay(((RaycastHit)(ref val3)).point, Vector3.up, Color.red, 15f); Debug.DrawLine(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref enemyColliders[l])).point, Color.cyan, 15f); Plugin.mls.LogInfo((object)("Raycast hit wall: " + ((Object)((Component)((RaycastHit)(ref val3)).collider).gameObject).name + ", distance: " + ((RaycastHit)(ref val3)).distance)); } else if (((Component)((RaycastHit)(ref enemyColliders[l])).transform).TryGetComponent(ref val4)) { Vector3 forward = ((Component)base.playerHeldBy.gameplayCamera).transform.forward; float num4 = Vector3.Distance(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref enemyColliders[l])).point); int num5 = ((num4 < 3f) ? Plugin.revolverMaxMonsterDamage : ((num4 < 12f) ? Mathf.RoundToInt((float)(Plugin.revolverMaxMonsterDamage / 2)) : ((!(num4 < 26f)) ? Mathf.RoundToInt((float)(Plugin.revolverMaxMonsterDamage / 4)) : Mathf.RoundToInt((float)(Plugin.revolverMaxMonsterDamage / 3))))); Plugin.mls.LogInfo((object)("Damage to enemy, damage: " + num5 + ", distance:" + num4)); val4.Hit(num5, forward, base.playerHeldBy, true, -1); } else { Plugin.mls.LogInfo((object)("Could not get hittable script from collider, transform: " + ((Object)((RaycastHit)(ref enemyColliders[l])).transform).name)); } } } if (playerColliders == null) { playerColliders = (RaycastHit[])(object)new RaycastHit[10]; } int num6 = Physics.SphereCastNonAlloc(val2, 0.3f, playerColliders, float.PositiveInfinity, StartOfRound.Instance.collidersRoomMaskDefaultAndPlayers, (QueryTriggerInteraction)2); for (int m = 0; m < num6; m++) { if ((Object)(object)((Component)((RaycastHit)(ref playerColliders[m])).transform).GetComponent() != (Object)null && (Object)(object)((Component)((RaycastHit)(ref playerColliders[m])).transform).GetComponent() != (Object)(object)base.playerHeldBy) { float num7 = Vector3.Distance(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((RaycastHit)(ref playerColliders[m])).point); if (num7 < 10f) { ((Component)((RaycastHit)(ref playerColliders[m])).transform).GetComponent().DamagePlayer(Plugin.revolverMaxPlayerDamage, true, true, (CauseOfDeath)7, 0, false, ((Component)base.playerHeldBy.gameplayCamera).transform.forward * 30f); } else if (num7 < 25f) { ((Component)((RaycastHit)(ref playerColliders[m])).transform).GetComponent().DamagePlayer(Mathf.RoundToInt((float)(Plugin.revolverMaxPlayerDamage - Plugin.revolverMaxPlayerDamage / 3)), true, true, (CauseOfDeath)7, 0, false, ((Component)base.playerHeldBy.gameplayCamera).transform.forward * 30f); } else { ((Component)((RaycastHit)(ref playerColliders[m])).transform).GetComponent().DamagePlayer(Mathf.RoundToInt((float)(Plugin.revolverMaxPlayerDamage / 3)), true, true, (CauseOfDeath)7, 0, false, ((Component)base.playerHeldBy.gameplayCamera).transform.forward * 30f); } Debug.Log((object)"Revolver vs Player wtf lmao"); } } } [IteratorStateMachine(typeof(d__47))] private IEnumerator delayedEarsRinging(float effectSeverity) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__47(0) { <>4__this = this, effectSeverity = effectSeverity }; } public override void ItemInteractLeftRight(bool right) { ((GrabbableObject)this).ItemInteractLeftRight(right); foreach (MeshRenderer revolverAmmo in revolverAmmos) { ((Renderer)revolverAmmo).enabled = false; } if (ammosLoaded > 0) { for (int i = 0; i <= ammosLoaded - 1; i++) { ((Renderer)revolverAmmos[i]).enabled = true; } } if (!((Object)(object)base.playerHeldBy == (Object)null)) { Debug.Log((object)$"r/l activate: {right}"); if (!right) { StartOpenGunServerRpc(); } else if (!isCylinderMoving && !isReloading && ammosLoaded < 6 && gunAnimator.GetBool("Reloading")) { StartReloadGunServerRpc(); } } } public override void SetControlTipsForItem() { string[] toolTips = base.itemProperties.toolTips; if (toolTips.Length <= 2) { Debug.LogError((object)"Shotgun control tips array length is too short to set tips!"); return; } if (base.playerHeldBy.playerBodyAnimator.GetBool("ReloadRevolver")) { if (Plugin.translateKorean) { toolTips[2] = "실린더 닫기: [Q]"; } else { toolTips[2] = "Close cylinder: [Q]"; } } else if (Plugin.translateKorean) { toolTips[2] = "실린더 열기: [Q]"; } else { toolTips[2] = "Open cylinder: [Q]"; } HUDManager.Instance.ChangeControlTipMultiple(toolTips, true, base.itemProperties); } [ServerRpc(RequireOwnership = false)] public void StartReloadGunServerRpc() { StartReloadGunClientRpc(); } [ClientRpc] public void StartReloadGunClientRpc() { if ((Plugin.customGunInfinityAmmo || ReloadedGun()) && !isReloading) { ((MonoBehaviour)this).StartCoroutine(ReloadGunAnimation()); } else { gunAudio.PlayOneShot(noAmmoSFX); } } [ServerRpc(RequireOwnership = false)] public void StartOpenGunServerRpc() { StartOpenGunClientRpc(); } [ClientRpc] public void StartOpenGunClientRpc() { if (!isCylinderMoving && !isReloading) { ((MonoBehaviour)this).StartCoroutine(RevolverMoveCylinder()); } else { gunAudio.PlayOneShot(noAmmoSFX); } } [IteratorStateMachine(typeof(d__54))] private IEnumerator ReloadGunAnimation() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__54(0) { <>4__this = this }; } [IteratorStateMachine(typeof(d__55))] private IEnumerator RevolverMoveCylinder() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__55(0) { <>4__this = this }; } private bool ReloadedGun() { int num = FindAmmoInInventory(); if (num == -1) { Debug.Log((object)"not reloading"); return false; } Debug.Log((object)"reloading!"); ammoSlotToUse = num; return true; } private int FindAmmoInInventory() { for (int i = 0; i < base.playerHeldBy.ItemSlots.Length; i++) { if (!((Object)(object)base.playerHeldBy.ItemSlots[i] == (Object)null)) { GrabbableObject obj = base.playerHeldBy.ItemSlots[i]; GunAmmo val = (GunAmmo)(object)((obj is GunAmmo) ? obj : null); Debug.Log((object)$"Ammo null in slot #{i}?: {(Object)(object)val == (Object)null}"); if ((Object)(object)val != (Object)null) { Debug.Log((object)$"Ammo in slot #{i} id: {val.ammoType}"); } if ((Object)(object)val != (Object)null && val.ammoType == gunCompatibleAmmoID) { return i; } } } return -1; } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); StopUsingGun(); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); StopUsingGun(); } [ServerRpc(RequireOwnership = false)] public void SyncRevolverAmmoServerRpc(int ammoCount) { if (((NetworkBehaviour)this).IsOwner) { SyncRevolverAmmoClientRpc(ammoCount); } } [ClientRpc] public void SyncRevolverAmmoClientRpc(int ammoCount) { ammosLoaded = ammoCount; } private void StopUsingGun() { isCylinderMoving = false; previousPlayerHeldBy.equippedUsableItemQE = false; if (isReloading) { ((MonoBehaviour)this).StopCoroutine(ReloadGunAnimation()); isReloading = false; } gunAnimator.speed = 1f; previousPlayerHeldBy.playerBodyAnimator.speed = 1f; if ((Object)(object)previousPlayerHeldBy != (Object)null) { previousPlayerHeldBy.playerBodyAnimator.SetBool("ReloadRevolver", false); } if (gunAnimator.GetBool("Reloading")) { gunAnimator.SetBool("Reloading", false); gunAudio.Stop(); revolverAmmoInHandTransform.SetParent(((Component)this).transform); ((Renderer)revolverAmmoInHand).enabled = false; isReloading = false; } } private void UpdateAnimator(PlayerControllerB player, Animator playerBodyAnimator, bool restore) { if (!restore) { if ((Object)(object)playerBodyAnimator.runtimeAnimatorController != (Object)(object)Plugin.playerAnimator && (Object)(object)playerBodyAnimator.runtimeAnimatorController != (Object)(object)Plugin.otherPlayerAnimator) { if ((Object)(object)player == (Object)(object)StartOfRound.Instance.localPlayerController) { SaveAnimatorStates(playerBodyAnimator); playerBodyAnimator.runtimeAnimatorController = Plugin.playerAnimator; RestoreAnimatorStates(playerBodyAnimator); Plugin.mls.LogInfo((object)"Replace Player Animator!"); return; } bool @bool = playerBodyAnimator.GetBool("Walking"); bool bool2 = playerBodyAnimator.GetBool("Sprinting"); bool bool3 = playerBodyAnimator.GetBool("crouching"); bool bool4 = playerBodyAnimator.GetBool("Jumping"); playerBodyAnimator.runtimeAnimatorController = PlayerControllerBPatch.originalPlayerAnimator; playerBodyAnimator.SetBool("crouching", bool3); playerBodyAnimator.SetBool("Jumping", bool4); playerBodyAnimator.SetBool("Walking", @bool); playerBodyAnimator.SetBool("Sprinting", bool2); Plugin.mls.LogInfo((object)"Restored Player Animator!"); } } else { playerBodyAnimator.runtimeAnimatorController = PlayerControllerBPatch.originalPlayerAnimator; playerBodyAnimator.SetBool("crouching", isCrouching); playerBodyAnimator.SetBool("Jumping", isJumping); playerBodyAnimator.SetBool("Walking", isWalking); playerBodyAnimator.SetBool("Sprinting", isSprinting); Plugin.mls.LogInfo((object)"Restored Player Animator!"); } } private void SaveAnimatorStates(Animator animator) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) isCrouching = animator.GetBool("crouching"); isJumping = animator.GetBool("Jumping"); isWalking = animator.GetBool("Walking"); isSprinting = animator.GetBool("Sprinting"); currentStateInfo = animator.GetCurrentAnimatorStateInfo(0); currentAnimationTime = ((AnimatorStateInfo)(ref currentStateInfo)).normalizedTime; } public void RestoreAnimatorStates(Animator animator) { ((MonoBehaviour)this).StartCoroutine(PlayAfterFrame(animator, ((AnimatorStateInfo)(ref currentStateInfo)).fullPathHash, currentAnimationTime)); animator.SetBool("crouching", isCrouching); animator.SetBool("Jumping", isJumping); animator.SetBool("Walking", isWalking); animator.SetBool("Sprinting", isSprinting); } [IteratorStateMachine(typeof(d__66))] private IEnumerator PlayAfterFrame(Animator animator, int stateHash, float normalizedTime) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__66(0) { <>4__this = this, animator = animator, stateHash = stateHash, normalizedTime = normalizedTime }; } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(ref DungeonFlow[] ___dungeonFlowTypes) { } private static void FindBigDoorRoomInTileSet(TileSet tileSet) { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected O, but got Unknown Plugin.mls.LogInfo((object)("[TESLA GATE] Found Tileset: " + ((Object)tileSet).name)); if (tileSet.TileWeights.Weights == null) { return; } foreach (GameObjectChance weight in tileSet.TileWeights.Weights) { Plugin.mls.LogInfo((object)("[TESLA GATE] Found weight in Tileset: " + ((Object)tileSet).name)); if (!((Object)(object)weight.Value.transform != (Object)null)) { continue; } foreach (Transform item in weight.Value.transform) { Transform val = item; if (!Object.op_Implicit((Object)(object)((Component)val).GetComponent())) { continue; } Plugin.mls.LogInfo((object)("[TESLA GATE] Find Doorway: " + ((Object)((Component)val).gameObject).name)); Doorway component = ((Component)val).GetComponent(); foreach (GameObjectWeight connectorPrefabWeight in component.ConnectorPrefabWeights) { if (((Object)connectorPrefabWeight.GameObject).name == "BigDoorSpawn") { if (((Object)connectorPrefabWeight.GameObject).name == "TeslaGateSpawn") { return; } GameObjectWeight val2 = new GameObjectWeight(); val2.Weight = 100f; val2.GameObject = Plugin.teslaGateSpawn; component.ConnectorPrefabWeights.Add(val2); Plugin.mls.LogInfo((object)("added tesla to " + ((Object)((Component)val).gameObject).name)); } } } } } } public class TeslaGate : MonoBehaviour { [CompilerGenerated] private sealed class d__15 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Transform parent; private int 5__1; private Transform 5__2; private Light[] 5__3; private Light[] <>s__4; private int <>s__5; private Light 5__6; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__15(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__2 = null; 5__3 = null; <>s__4 = null; 5__6 = null; <>1__state = -2; } private bool MoveNext() { //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; 5__1 = 0; goto IL_0153; case 1: <>1__state = -1; <>2__current = ActivateLights(5__2); <>1__state = 2; return true; case 2: { <>1__state = -1; 5__2 = null; 5__3 = null; goto IL_0143; } IL_0153: if (5__1 < parent.childCount) { 5__2 = parent.GetChild(5__1); if ((Object)(object)5__2 == (Object)null) { goto IL_0143; } 5__3 = ((Component)5__2).GetComponents(); <>s__4 = 5__3; for (<>s__5 = 0; <>s__5 < <>s__4.Length; <>s__5++) { 5__6 = <>s__4[<>s__5]; if (!((Object)(object)5__6 == (Object)null)) { ((Component)5__6).gameObject.SetActive(true); 5__6 = null; } } <>s__4 = null; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; } return false; IL_0143: 5__1++; goto IL_0153; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__17 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public TeslaGate <>4__this; private List.Enumerator <>s__1; private PlayerControllerB 5__2; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__17(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = default(List.Enumerator); 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Expected O, but got Unknown //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.coroutineRunning = true; <>4__this.killTrigger.SetActive(false); <>4__this.windUpSource.PlayOneShot(Plugin.teslaBeep); <>4__this.windUpSource.PlayOneShot(Plugin.teslaWindUp); <>4__this.windUpSource.PlayOneShot(Plugin.teslaUnderbass); <>4__this.windUpSource.PlayOneShot(Plugin.teslaClimax); <>2__current = (object)new WaitForSeconds(0.75f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.killTrigger.SetActive(true); <>s__1 = <>4__this.engagingPlayerList.GetEnumerator(); try { while (<>s__1.MoveNext()) { 5__2 = <>s__1.Current; if ((Object)(object)5__2 == (Object)(object)StartOfRound.Instance.localPlayerController && Plugin.teslaShake) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } 5__2 = null; } } finally { ((IDisposable)<>s__1).Dispose(); } <>s__1 = default(List.Enumerator); <>4__this.telegraphParticle.Play(); <>4__this.windUpSource.Stop(); <>4__this.crackSource.PlayOneShot(Plugin.teslaCrack); <>2__current = (object)new WaitForSeconds(0.65f); <>1__state = 2; return true; case 2: <>1__state = -1; <>4__this.killTrigger.SetActive(false); <>2__current = (object)new WaitForSeconds(0.6f); <>1__state = 3; return true; case 3: <>1__state = -1; <>4__this.coroutineRunning = false; 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(); } } [CompilerGenerated] private sealed class d__21 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public TeslaGate <>4__this; private List.Enumerator <>s__1; private PlayerControllerB 5__2; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__21(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = default(List.Enumerator); 5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.killTrigger.SetActive(true); <>s__1 = <>4__this.engagingPlayerList.GetEnumerator(); try { while (<>s__1.MoveNext()) { 5__2 = <>s__1.Current; if ((Object)(object)5__2 == (Object)(object)StartOfRound.Instance.localPlayerController && Plugin.teslaShake) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } 5__2 = null; } } finally { ((IDisposable)<>s__1).Dispose(); } <>s__1 = default(List.Enumerator); <>4__this.crackSource.PlayOneShot(Plugin.teslaCrack); <>2__current = (object)new WaitForSeconds(0.65f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.killTrigger.SetActive(false); 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 ParticleSystem telegraphParticle; public ParticleSystem idleParticle; public GameObject killTrigger; public CustomTouchInteractTrigger idleCTI; public CustomTouchInteractTrigger crackCTI; public AudioSource windUpSource; public AudioSource idleSource; public AudioSource crackSource; public List activatePlayerList = new List(); public List activateList = new List(); public List engagingPlayerList = new List(); public List engagingList = new List(); public bool coroutineRunning; public bool idleIntroPlayed; private void Start() { telegraphParticle = ((Component)((Component)this).transform.GetChild(0)).GetComponent(); idleParticle = ((Component)((Component)this).transform.GetChild(1)).GetComponent(); windUpSource = ((Component)((Component)this).transform.GetChild(4).GetChild(0)).GetComponent(); idleSource = ((Component)((Component)this).transform.GetChild(4).GetChild(1)).GetComponent(); crackSource = ((Component)((Component)this).transform.GetChild(4).GetChild(2)).GetComponent(); killTrigger = ((Component)((Component)this).transform.GetChild(5)).gameObject; CustomTouchInteractTrigger customTouchInteractTrigger = killTrigger.AddComponent(); customTouchInteractTrigger.isKillTrigger = true; crackCTI = ((Component)((Component)this).transform.GetChild(2)).gameObject.AddComponent(); crackCTI.teslaGate = this; idleCTI = ((Component)((Component)this).transform.GetChild(3)).gameObject.AddComponent(); idleCTI.teslaGate = this; idleCTI.isIdleTrigger = true; killTrigger.SetActive(false); windUpSource.volume = 0.45f * Plugin.teslaSoundVolume; idleSource.volume = 0.45f * Plugin.teslaSoundVolume; crackSource.volume = 0.45f * Plugin.teslaSoundVolume; ((MonoBehaviour)this).StartCoroutine(ActivateLights(((Component)this).transform)); } [IteratorStateMachine(typeof(d__15))] private static IEnumerator ActivateLights(Transform parent) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__15(0) { parent = parent }; } private void Update() { if (activateList.Count > 0) { if (!idleIntroPlayed) { idleSource.clip = Plugin.teslaIdleStart; idleSource.Play(); idleSource.loop = false; idleIntroPlayed = true; idleParticle.Play(); } else if (idleIntroPlayed && !idleSource.isPlaying) { idleSource.clip = Plugin.teslaIdle; idleSource.loop = true; idleSource.Play(); idleIntroPlayed = true; } } else if (idleSource.isPlaying && idleIntroPlayed) { idleSource.loop = false; idleSource.Stop(); idleParticle.Stop(); idleSource.PlayOneShot(Plugin.teslaIdleEnd); idleIntroPlayed = false; } if (engagingList.Count > 0) { if (!coroutineRunning) { ((MonoBehaviour)this).StartCoroutine(EngageTeslaCoroutine()); } } else { ((MonoBehaviour)this).StopCoroutine(EngageTeslaCoroutine()); } } [IteratorStateMachine(typeof(d__17))] private IEnumerator EngageTeslaCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__17(0) { <>4__this = this }; } [ServerRpc(RequireOwnership = false)] public void ForceTeslaTriggerServerRpc() { ForceTeslaTriggerClientRpc(); } [ClientRpc] public void ForceTeslaTriggerClientRpc() { ((MonoBehaviour)this).StartCoroutine(InstantTeslaCoroutine()); } public void ForceTeslaTrigger(PlayerControllerB player) { ForceTeslaTriggerServerRpc(); } [IteratorStateMachine(typeof(d__21))] private IEnumerator InstantTeslaCoroutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__21(0) { <>4__this = this }; } } }