Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of WaterGunLib v1.6.0
WaterGunLib.dll
Decompiled 5 days agousing 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 BepInEx; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; using WaterGunLib.Bundles; using WaterGunLib.Fields; using WaterGunLib.Modules; using WaterGunLib.NetcodePatcher; [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("WaterGunLib")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("WaterGunLib")] [assembly: AssemblyTitle("WaterGunLib")] [assembly: AssemblyVersion("1.0.0.0")] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace WaterGunLib { public class DamageTrigger : MonoBehaviour { [Space] [Header("Settings")] public int Delay = 3; public int Damage = 20; public CauseOfDeath DeathType; public int DeathAnimation = 0; public bool DamageSFX = false; private bool IsAbleToDealDamage = true; private void OnTriggerStay(Collider other) { if (Object.op_Implicit((Object)(object)((Component)other).GetComponent<PlayerControllerB>())) { ((MonoBehaviour)this).StartCoroutine(DamagePlayerAfterDelay(((Component)other).GetComponent<PlayerControllerB>())); } } private IEnumerator DamagePlayerAfterDelay(PlayerControllerB Player) { if (IsAbleToDealDamage) { IsAbleToDealDamage = false; Player.DamagePlayer(Damage, true, true, DeathType, DeathAnimation, false, default(Vector3)); Debug.Log((object)("Damaged Player: " + Player.playerUsername)); yield return (object)new WaitForSeconds((float)Delay); IsAbleToDealDamage = true; } } } public class EnemySpawner : NetworkBehaviour { [Space] [Header("Refrences")] public Transform SpawnTransform; [Space] [Header("Settings")] public bool IsDynamic = false; [Space] [Header("Single Enemy Spawn Settings")] private string EnemyName; [Space] [Header("Mutiple Enemy Spawn Settings")] public string[] EnemyNames; public float TimeBetweenSpawn = 5f; public int SpawnCap = -1; private int Spawns = 0; private bool IsSpawningEnabled; public void SpawnEnemy() { SpawnEnemyServerRpc(); } [Rpc(/*Could not decode attribute arguments.*/)] private void SpawnEnemyServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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_01ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(1067344233u, val3, val, (SendTo)2, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 1067344233u, val3, val, (SendTo)2, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (!IsDynamic) { EnemyType val4 = Resources.FindObjectsOfTypeAll<EnemyType>().First((EnemyType enemytype) => enemytype.enemyName == EnemyName); GameObject val5 = Object.Instantiate<GameObject>(val4.enemyPrefab, SpawnTransform.position, SpawnTransform.rotation); val5.GetComponent<NetworkObject>().Spawn(false); if (SpawnCap != -1) { Spawns++; } } else { if (Spawns > SpawnCap) { return; } EnemyType[] array = Resources.FindObjectsOfTypeAll<EnemyType>(); List<EnemyType> list = new List<EnemyType>(); EnemyType[] array2 = array; foreach (EnemyType val6 in array2) { if (EnemyNames.Contains(val6.enemyName)) { list.Add(val6); } } int index = Random.Range(0, list.Count); GameObject val7 = Object.Instantiate<GameObject>(list[index].enemyPrefab, SpawnTransform.position, SpawnTransform.rotation); val7.GetComponent<NetworkObject>().Spawn(false); if (SpawnCap != -1) { Spawns++; } ((MonoBehaviour)this).StartCoroutine(SpawnEnemyAfterDelay()); } } public void ToggleSpawning() { if (!IsSpawningEnabled) { IsSpawningEnabled = true; ((MonoBehaviour)this).StartCoroutine(SpawnEnemyAfterDelay()); } else { IsSpawningEnabled = false; } } private IEnumerator SpawnEnemyAfterDelay() { yield return (object)new WaitForSeconds(TimeBetweenSpawn); if (IsSpawningEnabled) { SpawnEnemy(); } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1067344233u, new RpcReceiveHandler(__rpc_handler_1067344233), "SpawnEnemyServerRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1067344233(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((EnemySpawner)(object)target).SpawnEnemyServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "EnemySpawner"; } } public class HittableObject : NetworkBehaviour, IHittable { public UnityEvent? onObjectBreak; public UnityEvent? onObjectHit; public bool syncObjectBreak = false; public bool syncObjectHit = false; public int objectHp = 5; bool IHittable.Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID) { if (syncObjectHit) { DamageObjectRpc(); } else { DamageObject(); } return true; } private void DamageObject() { objectHp--; if (objectHp == 0) { UnityEvent? obj = onObjectBreak; if (obj != null) { obj.Invoke(); } } else { UnityEvent? obj2 = onObjectHit; if (obj2 != null) { obj2.Invoke(); } } } [Rpc(/*Could not decode attribute arguments.*/)] private void DamageObjectRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(682840934u, val3, val, (SendTo)2, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 682840934u, val3, val, (SendTo)2, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; objectHp--; if (objectHp == 0) { InvokeBreakRpc(); } else { InvokeHitRpc(); } } } [Rpc(/*Could not decode attribute arguments.*/)] private void InvokeBreakRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_0043: 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_0051: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = default(RpcAttributeParams); RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(460235183u, val3, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 460235183u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; UnityEvent? obj = onObjectBreak; if (obj != null) { obj.Invoke(); } } } [Rpc(/*Could not decode attribute arguments.*/)] private void InvokeHitRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_0043: 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_0051: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = default(RpcAttributeParams); RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(1869107307u, val3, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 1869107307u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; UnityEvent? obj = onObjectHit; if (obj != null) { obj.Invoke(); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(682840934u, new RpcReceiveHandler(__rpc_handler_682840934), "DamageObjectRpc"); ((NetworkBehaviour)this).__registerRpc(460235183u, new RpcReceiveHandler(__rpc_handler_460235183), "InvokeBreakRpc"); ((NetworkBehaviour)this).__registerRpc(1869107307u, new RpcReceiveHandler(__rpc_handler_1869107307), "InvokeHitRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_682840934(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((HittableObject)(object)target).DamageObjectRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_460235183(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((HittableObject)(object)target).InvokeBreakRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1869107307(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((HittableObject)(object)target).InvokeHitRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "HittableObject"; } } public class ItemSpawner : MonoBehaviour { [Header("Settings")] public bool spawnOnStart = false; public Transform? spawnPos; [Space(5f)] [Header("Items")] public string[]? possibleItemNames; private void Start() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (spawnOnStart && (Object)(object)spawnPos != (Object)null) { SpawnRandomItem(spawnPos.position); } } public void SpawnRandomItem(Vector3 position) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsServer) { return; } string[]? array = possibleItemNames; if (array != null && array.Length != 0) { int num = Random.Range(0, possibleItemNames.Count()); Item itemFromName = ItemManagement.GetItemFromName(possibleItemNames[num]); GameObject val = Object.Instantiate<GameObject>(ItemManagement.GetItemFromName(possibleItemNames[num]).spawnPrefab, position, Quaternion.identity, (Transform)null); Debug.Log((object)$"Spawning item: {val}"); if (itemFromName.isScrap) { int num2 = Random.Range(itemFromName.minValue, itemFromName.maxValue); val.GetComponent<GrabbableObject>().SetScrapValue(Mathf.RoundToInt((float)(num2 / 2))); val.GetComponent<NetworkObject>().Spawn(false); } else { val.GetComponent<NetworkObject>().Spawn(false); } } } public void SpawnRandomItem(Transform transform) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsServer) { return; } string[]? array = possibleItemNames; if (array != null && array.Length != 0) { int num = Random.Range(0, possibleItemNames.Count()); Item itemFromName = ItemManagement.GetItemFromName(possibleItemNames[num]); GameObject val = Object.Instantiate<GameObject>(ItemManagement.GetItemFromName(possibleItemNames[num]).spawnPrefab, transform.position, Quaternion.identity, (Transform)null); Debug.Log((object)$"Spawning item: {val}"); if (itemFromName.isScrap) { int num2 = Random.Range(itemFromName.minValue, itemFromName.maxValue); val.GetComponent<GrabbableObject>().SetScrapValue(Mathf.RoundToInt((float)(num2 / 2))); val.GetComponent<NetworkObject>().Spawn(false); } else { val.GetComponent<NetworkObject>().Spawn(false); } } } public void SpawnRandomItem() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsServer) { return; } string[]? array = possibleItemNames; if (array == null || array.Length == 0) { return; } int num = Random.Range(0, possibleItemNames.Count()); Item itemFromName = ItemManagement.GetItemFromName(possibleItemNames[num]); if ((Object)(object)spawnPos != (Object)null) { GameObject val = Object.Instantiate<GameObject>(ItemManagement.GetItemFromName(possibleItemNames[num]).spawnPrefab, spawnPos.position, Quaternion.identity, (Transform)null); Debug.Log((object)$"Spawning item: {val}"); if (itemFromName.isScrap) { int num2 = Random.Range(itemFromName.minValue, itemFromName.maxValue); val.GetComponent<GrabbableObject>().SetScrapValue(Mathf.RoundToInt((float)(num2 / 2))); val.GetComponent<NetworkObject>().Spawn(false); } else { val.GetComponent<NetworkObject>().Spawn(false); } } } } [BepInPlugin("WaterGun.WaterGunLib", "WaterGunLib", "1.6.0")] public class Plugin : BaseUnityPlugin { [HarmonyPatch(typeof(GameNetworkManager), "Start")] internal class GameNetworkManager_Start { [HarmonyPrefix] public static void Prefix(GameNetworkManager __instance) { foreach (GameObject item in prefabsToNetwork) { if (NetworkManager.Singleton.NetworkConfig.Prefabs.Contains(item)) { break; } NetworkManager.Singleton.AddNetworkPrefab(item); } } } [HarmonyPatch(typeof(StartOfRound), "Awake")] internal class StartOfRound_Awake { [HarmonyPostfix] public static void Postfix() { //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Expected O, but got Unknown //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Expected O, but got Unknown //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Expected O, but got Unknown //IL_04d9: Unknown result type (might be due to invalid IL or missing references) //IL_04e3: Expected O, but got Unknown //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Expected O, but got Unknown //IL_0603: Unknown result type (might be due to invalid IL or missing references) //IL_060d: Expected O, but got Unknown Terminal val = Object.FindObjectOfType<Terminal>(); TerminalKeyword val2 = val.terminalNodes.allKeywords.First((TerminalKeyword keyword) => keyword.word == "info"); foreach (Enemies.RegisteredEnemy enemy in Enemies.registeredEnemies) { if (enemy.globalRarity > -1) { SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val3 in levels) { if (enemy.spawnType == Enemies.SpawnType.Indoor) { val3.Enemies.Add(new SpawnableEnemyWithRarity(enemy.enemyType, enemy.globalRarity)); } else if (enemy.spawnType == Enemies.SpawnType.Outdoor) { val3.OutsideEnemies.Add(new SpawnableEnemyWithRarity(enemy.enemyType, enemy.globalRarity)); } else if (enemy.spawnType == Enemies.SpawnType.DayTime) { val3.DaytimeEnemies.Add(new SpawnableEnemyWithRarity(enemy.enemyType, enemy.globalRarity)); } } } if (enemy.moons.Count <= 0) { return; } foreach (MoonObject moonRarity in enemy.moons) { if (!StartOfRound.Instance.levels.Any((SelectableLevel level) => level.PlanetName == moonRarity.moonName)) { continue; } bool flag = enemy.globalRarity > -1; SelectableLevel val4 = StartOfRound.Instance.levels.First((SelectableLevel moon) => moon.PlanetName == moonRarity.moonName); if (flag) { if (enemy.spawnType == Enemies.SpawnType.Indoor) { ((IEnumerable<SpawnableEnemyWithRarity>)val4.Enemies).FirstOrDefault((Func<SpawnableEnemyWithRarity, bool>)((SpawnableEnemyWithRarity e) => (Object)(object)e.enemyType == (Object)(object)enemy.enemyType)).rarity = moonRarity.rarity; } else if (enemy.spawnType == Enemies.SpawnType.Outdoor) { ((IEnumerable<SpawnableEnemyWithRarity>)val4.OutsideEnemies).FirstOrDefault((Func<SpawnableEnemyWithRarity, bool>)((SpawnableEnemyWithRarity e) => (Object)(object)e.enemyType == (Object)(object)enemy.enemyType)).rarity = moonRarity.rarity; } else if (enemy.spawnType == Enemies.SpawnType.DayTime) { ((IEnumerable<SpawnableEnemyWithRarity>)val4.DaytimeEnemies).FirstOrDefault((Func<SpawnableEnemyWithRarity, bool>)((SpawnableEnemyWithRarity e) => (Object)(object)e.enemyType == (Object)(object)enemy.enemyType)).rarity = moonRarity.rarity; } } else if (enemy.spawnType == Enemies.SpawnType.Indoor) { val4.Enemies.Add(new SpawnableEnemyWithRarity(enemy.enemyType, enemy.globalRarity)); } else if (enemy.spawnType == Enemies.SpawnType.Outdoor) { val4.OutsideEnemies.Add(new SpawnableEnemyWithRarity(enemy.enemyType, enemy.globalRarity)); } else if (enemy.spawnType == Enemies.SpawnType.DayTime) { val4.DaytimeEnemies.Add(new SpawnableEnemyWithRarity(enemy.enemyType, enemy.globalRarity)); } } } foreach (SpawnableOutsideObjects.RegisteredOutsideObject obj in SpawnableOutsideObjects.registeredOutsideObjects) { SelectableLevel[] levels2 = StartOfRound.Instance.levels; foreach (SelectableLevel val5 in levels2) { if (obj.globalRandomAmount == null) { break; } if (!val5.spawnableOutsideObjects.Any((SpawnableOutsideObjectWithRarity x) => (Object)(object)x.spawnableObject == (Object)(object)obj.outsideObject)) { List<SpawnableOutsideObjectWithRarity> list = val5.spawnableOutsideObjects.ToList(); list.Add(new SpawnableOutsideObjectWithRarity(obj.outsideObject, obj.globalRandomAmount)); val5.spawnableOutsideObjects = list.ToArray(); } } if (obj.moons.Count <= 0) { break; } foreach (MoonObjectCurve moonRarity2 in obj.moons) { SelectableLevel val6 = ((IEnumerable<SelectableLevel>)StartOfRound.Instance.levels).FirstOrDefault((Func<SelectableLevel, bool>)((SelectableLevel moon) => moon.PlanetName == moonRarity2.moonName)); if (!((Object)(object)val6 == (Object)null)) { SpawnableOutsideObjectWithRarity val7 = ((IEnumerable<SpawnableOutsideObjectWithRarity>)val6.spawnableOutsideObjects).FirstOrDefault((Func<SpawnableOutsideObjectWithRarity, bool>)((SpawnableOutsideObjectWithRarity o) => (Object)(object)o.spawnableObject == (Object)(object)obj.outsideObject)); if (val7 != null) { val7.randomAmount = moonRarity2.randomSpawn; continue; } List<SpawnableOutsideObjectWithRarity> list2 = val6.spawnableOutsideObjects.ToList(); list2.Add(new SpawnableOutsideObjectWithRarity(obj.outsideObject, moonRarity2.randomSpawn)); val6.spawnableOutsideObjects = list2.ToArray(); } } } } } [HarmonyPatch(typeof(Terminal), "Start")] internal class Terminal_Start { [HarmonyPrefix] public static void Prefix(Terminal __instance) { //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Expected O, but got Unknown TerminalKeyword val = __instance.terminalNodes.allKeywords.First((TerminalKeyword val3) => val3.word == "info"); foreach (Enemies.RegisteredEnemy enemy in Enemies.registeredEnemies) { if ((Object)(object)enemy.infoNode == (Object)null) { enemy.infoNode = ScriptableObject.CreateInstance<TerminalNode>(); enemy.infoNode.displayText = "No information given about " + enemy.enemyType.enemyName + "\n\n"; enemy.infoNode.clearPreviousText = true; enemy.infoNode.creatureName = enemy.enemyType.enemyName; enemy.infoNode.maxCharactersToType = 35; } if (__instance.enemyFiles.Any((TerminalNode file) => file.creatureName == enemy.infoNode.creatureName)) { Debug.LogError((object)("[WaterGunLib]: " + enemy.infoNode.creatureName + "Already exists in enemiesList")); continue; } TerminalKeyword keyword = ScriptableObject.CreateInstance<TerminalKeyword>(); keyword.word = enemy.infoNode.creatureName.ToLowerInvariant().Replace(" ", "-"); keyword.defaultVerb = val; List<TerminalKeyword> list = __instance.terminalNodes.allKeywords.ToList(); if (!list.Any((TerminalKeyword x) => x.word == keyword.word)) { list.Add(keyword); __instance.terminalNodes.allKeywords = list.ToArray(); } List<CompatibleNoun> list2 = val.compatibleNouns.ToList(); if (!list2.Any((CompatibleNoun x) => x.noun.word == keyword.word)) { list2.Add(new CompatibleNoun(keyword, enemy.infoNode)); val.compatibleNouns = list2.ToArray(); } enemy.infoNode.creatureFileID = __instance.enemyFiles.Count; __instance.enemyFiles.Add(enemy.infoNode); ScanNodeProperties[] componentsInChildren = enemy.enemyType.enemyPrefab.GetComponentsInChildren<ScanNodeProperties>(); ScanNodeProperties[] array = componentsInChildren; foreach (ScanNodeProperties val2 in array) { val2.creatureScanID = enemy.infoNode.creatureFileID; } } } } [HarmonyPatch(typeof(Terminal), "Awake")] internal class Terminal_Awake { [HarmonyPrefix] public static void Prefix(Terminal __instance) { //IL_0bb8: Unknown result type (might be due to invalid IL or missing references) //IL_0bbe: Expected O, but got Unknown //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Expected O, but got Unknown //IL_0bf0: Unknown result type (might be due to invalid IL or missing references) //IL_0bf6: Expected O, but got Unknown //IL_0720: Unknown result type (might be due to invalid IL or missing references) //IL_0726: Expected O, but got Unknown //IL_0758: Unknown result type (might be due to invalid IL or missing references) //IL_075e: Expected O, but got Unknown //IL_0c86: Unknown result type (might be due to invalid IL or missing references) //IL_0c90: Expected O, but got Unknown //IL_07d8: Unknown result type (might be due to invalid IL or missing references) //IL_07e2: Expected O, but got Unknown //IL_0d57: Unknown result type (might be due to invalid IL or missing references) //IL_0d61: Expected O, but got Unknown //IL_08a9: Unknown result type (might be due to invalid IL or missing references) //IL_08b3: Expected O, but got Unknown //IL_03db: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Expected O, but got Unknown foreach (Unlockables.RegisteredUnlockable unlockable in Unlockables.registeredUnlockables) { if (StartOfRound.Instance.unlockablesList.unlockables.Any((UnlockableItem x) => x.unlockableName == unlockable.unlockableItem?.unlockableName)) { Debug.LogError((object)("[WaterGunLib]: " + unlockable.unlockableItem?.unlockableName + "Already exists in unlockablesList")); continue; } if ((Object)(object)unlockable.unlockableItem?.prefabObject != (Object)null) { PlaceableShipObject componentInChildren = unlockable.unlockableItem.prefabObject.GetComponentInChildren<PlaceableShipObject>(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.unlockableID = StartOfRound.Instance.unlockablesList.unlockables.Count; } } StartOfRound.Instance.unlockablesList.unlockables.Add(unlockable.unlockableItem); } TerminalKeyword val = __instance.terminalNodes.allKeywords.First((TerminalKeyword val12) => val12.word == "buy"); TerminalNode result = val.compatibleNouns[0].result.terminalOptions[1].result; TerminalKeyword val2 = __instance.terminalNodes.allKeywords.First((TerminalKeyword val12) => val12.word == "info"); foreach (Items.RegisteredItem item in Items.registeredItems) { if (!StartOfRound.Instance.allItemsList.itemsList.Any((Item x) => x.itemName == item.item.itemName)) { StartOfRound.Instance.allItemsList.itemsList.Add(item.item); } if (!item.isShopItem) { if (item.globalRarity > -1) { SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val3 in levels) { if (!val3.spawnableScrap.Any((SpawnableItemWithRarity x) => (Object)(object)x.spawnableItem == (Object)(object)item.item)) { val3.spawnableScrap.Add(new SpawnableItemWithRarity(item.item, item.globalRarity)); } } } if (item.moons == null || item.moons.Count <= 0) { continue; } foreach (MoonObject moonRarity in item.moons) { SelectableLevel val4 = ((IEnumerable<SelectableLevel>)StartOfRound.Instance.levels).FirstOrDefault((Func<SelectableLevel, bool>)((SelectableLevel moon) => moon.PlanetName == moonRarity.moonName)); if (!((Object)(object)val4 == (Object)null)) { SpawnableItemWithRarity val5 = ((IEnumerable<SpawnableItemWithRarity>)val4.spawnableScrap).FirstOrDefault((Func<SpawnableItemWithRarity, bool>)((SpawnableItemWithRarity x) => (Object)(object)x.spawnableItem == (Object)(object)item.item)); if (val5 != null) { val5.rarity = moonRarity.rarity; } else { val4.spawnableScrap.Add(new SpawnableItemWithRarity(item.item, moonRarity.rarity)); } } } } else { if (!item.isShopItem) { continue; } if (!__instance.buyableItemsList.Any((Item itemScript) => (Object)(object)itemScript == (Object)(object)item.item)) { List<Item> list = __instance.buyableItemsList.ToList(); list.Add(item.item); __instance.buyableItemsList = list.ToArray(); } TerminalKeyword keyword = ScriptableObject.CreateInstance<TerminalKeyword>(); ((Object)keyword).name = item.item.itemName.Replace(" ", "-"); keyword.defaultVerb = val; keyword.word = item.item.itemName.ToLowerInvariant().Replace(" ", "-"); if (__instance.terminalNodes.allKeywords.Any((TerminalKeyword x) => x.word == keyword.word)) { Debug.LogError((object)("[WaterGunLib]: Keyword: " + keyword.word + " already exists")); continue; } List<Item> list2 = __instance.buyableItemsList.ToList(); int num2 = list2.IndexOf(item.item); int buyItemIndex = ((num2 == -1) ? (list2.Count - 1) : num2); TerminalNode val6 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val6).name = item.item.itemName.Replace(" ", "-") + "BuyNode2"; val6.displayText = "Ordered [variableAmount] " + item.item.itemName + ". 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.\r\n\r\n"; val6.clearPreviousText = true; val6.maxCharactersToType = 15; val6.buyItemIndex = buyItemIndex; val6.creatureName = item.item.itemName; val6.isConfirmationNode = false; val6.itemCost = item.item.creditsWorth; val6.playSyncedClip = 0; TerminalNode val7 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val7).name = item.item.itemName.Replace(" ", "-") + "BuyNode1"; val7.displayText = "You have requested to order " + item.item.itemName + ". Amount: [variableAmount].\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\r\n\r\n"; val7.clearPreviousText = true; val7.maxCharactersToType = 35; val7.buyItemIndex = buyItemIndex; val7.creatureName = item.item.itemName; val7.isConfirmationNode = true; val7.overrideOptions = true; val7.itemCost = item.item.creditsWorth; val7.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[2] { new CompatibleNoun(__instance.terminalNodes.allKeywords.First((TerminalKeyword val12) => val12.word == "confirm"), val6), new CompatibleNoun(__instance.terminalNodes.allKeywords.First((TerminalKeyword val12) => val12.word == "deny"), result) }; if (!__instance.terminalNodes.allKeywords.Any((TerminalKeyword k) => k.word == keyword.word)) { List<TerminalKeyword> list3 = __instance.terminalNodes.allKeywords.ToList(); list3.Add(keyword); __instance.terminalNodes.allKeywords = list3.ToArray(); List<CompatibleNoun> list4 = val.compatibleNouns.ToList(); list4.Add(new CompatibleNoun(keyword, val7)); val.compatibleNouns = list4.ToArray(); TerminalNode val8 = item.infoNode; if ((Object)(object)val8 == (Object)null) { val8 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val8).name = item.item.itemName.Replace(" ", "-") + "InfoNode"; val8.displayText = "No information given about " + item.item.itemName + "\n\n"; val8.clearPreviousText = true; val8.maxCharactersToType = 25; } __instance.terminalNodes.allKeywords = list3.ToArray(); List<CompatibleNoun> list5 = val2.compatibleNouns.ToList(); list5.Add(new CompatibleNoun(keyword, val8)); val2.compatibleNouns = list5.ToArray(); } } } foreach (Unlockables.RegisteredUnlockable item2 in Unlockables.registeredUnlockables) { TerminalKeyword keyword2 = ScriptableObject.CreateInstance<TerminalKeyword>(); ((Object)keyword2).name = item2.unlockableItem.unlockableName.Replace(" ", "-"); keyword2.defaultVerb = val; keyword2.word = item2.unlockableItem.unlockableName.ToLowerInvariant().Replace(" ", "-"); if (__instance.terminalNodes.allKeywords.Any((TerminalKeyword x) => x.word == keyword2.word)) { Debug.LogError((object)("[WaterGunLib]: Keyword: " + keyword2.word + " already exists")); continue; } int shipUnlockableID = StartOfRound.Instance.unlockablesList.unlockables.FindIndex((UnlockableItem val12) => val12.unlockableName == item2.unlockableItem.unlockableName); TerminalNode val9 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val9).name = item2.unlockableItem.unlockableName.Replace(" ", "-") + "BuyNode2"; val9.displayText = "Ordered [variableAmount] " + item2.unlockableItem.unlockableName + ". 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.\r\n\r\n"; val9.clearPreviousText = true; val9.maxCharactersToType = 15; val9.buyItemIndex = -1; val9.shipUnlockableID = shipUnlockableID; val9.buyUnlockable = true; val9.creatureName = item2.unlockableItem.unlockableName; val9.isConfirmationNode = false; val9.itemCost = item2.price; val9.playSyncedClip = 0; TerminalNode val10 = ScriptableObject.CreateInstance<TerminalNode>(); val10 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val10).name = item2.unlockableItem.unlockableName.Replace(" ", "-") + "BuyNode1"; val10.displayText = "You have requested to order " + item2.unlockableItem.unlockableName + ". Amount: [variableAmount].\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\r\n\r\n"; val10.clearPreviousText = true; val10.maxCharactersToType = 35; val10.buyItemIndex = -1; val10.shipUnlockableID = shipUnlockableID; val10.creatureName = item2.unlockableItem.unlockableName; val10.isConfirmationNode = true; val10.overrideOptions = true; val10.itemCost = item2.price; val10.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[2] { new CompatibleNoun(__instance.terminalNodes.allKeywords.First((TerminalKeyword val12) => val12.word == "confirm"), val9), new CompatibleNoun(__instance.terminalNodes.allKeywords.First((TerminalKeyword val12) => val12.word == "deny"), result) }; if (item2.storeType == Unlockables.StoreType.Decor) { item2.unlockableItem.shopSelectionNode = val10; } else { item2.unlockableItem.shopSelectionNode = null; } List<TerminalKeyword> list6 = __instance.terminalNodes.allKeywords.ToList(); list6.Add(keyword2); __instance.terminalNodes.allKeywords = list6.ToArray(); List<CompatibleNoun> list7 = val.compatibleNouns.ToList(); list7.Add(new CompatibleNoun(keyword2, val10)); val.compatibleNouns = list7.ToArray(); TerminalNode val11 = item2.itemInfo; if ((Object)(object)val11 == (Object)null) { val11 = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val11).name = item2.unlockableItem.unlockableName.Replace(" ", "-") + "InfoNode"; val11.displayText = "No information given about " + item2.unlockableItem.unlockableName + "\n\n"; val11.clearPreviousText = true; val11.maxCharactersToType = 25; } __instance.terminalNodes.allKeywords = list6.ToArray(); List<CompatibleNoun> list8 = val2.compatibleNouns.ToList(); list8.Add(new CompatibleNoun(keyword2, val11)); val2.compatibleNouns = list8.ToArray(); } } } [HarmonyPatch(typeof(Terminal), "TextPostProcess")] internal class Terminal_TextPostProcess { [HarmonyPrefix] public static void Prefix(ref TerminalNode node, ref string modifiedDisplayText, Terminal __instance) { if (!modifiedDisplayText.Contains("[buyableItemsList]") || !modifiedDisplayText.Contains("[unlockablesSelectionList]")) { return; } int num = modifiedDisplayText.IndexOf(":"); foreach (Unlockables.RegisteredUnlockable registeredUnlockable in Unlockables.registeredUnlockables) { if (registeredUnlockable.storeType == Unlockables.StoreType.ShipUpgrade) { string unlockableName = registeredUnlockable.unlockableItem.unlockableName; int price = registeredUnlockable.price; string value = $"\n* {unlockableName} // Price: ${price}"; modifiedDisplayText = modifiedDisplayText.Insert(num + 1, value); } } } } private const string GUID = "WaterGun.WaterGunLib"; private const string VER = "1.6.0"; private const string NAME = "WaterGunLib"; public static List<GameObject> prefabsToNetwork = new List<GameObject>(); public static List<AssetBundle> sceneBundles = new List<AssetBundle>(); private void Awake() { //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Expected O, but got Unknown Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } string pluginPath = Paths.PluginPath; string[] files = Directory.GetFiles(pluginPath, "*.watergunlib", SearchOption.AllDirectories); string[] array3 = files; foreach (string text in array3) { Debug.Log((object)("[WaterGunLib]: Found bundle: " + text)); AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { Debug.LogError((object)("[WaterGunLib]: Failed to load bundle: " + text)); continue; } WaterGunLibMod[] array4 = val.LoadAllAssets<WaterGunLibMod>(); WaterGunLibMod[] array5 = array4; foreach (WaterGunLibMod waterGunLibMod in array5) { foreach (UnlockableItemRef unlockable in waterGunLibMod.Unlockables) { Unlockables.RegisterUnlockable(unlockable, waterGunLibMod.ModGUID); } foreach (SpawnableOutsideObjectRef outsideObject in waterGunLibMod.OutsideObjects) { SpawnableOutsideObjects.RegisterSpawnableOutsideObject(outsideObject, waterGunLibMod.ModGUID); } foreach (EnemyTypeRef enemy in waterGunLibMod.Enemies) { Enemies.RegisterEnemy(enemy, waterGunLibMod.ModGUID); } foreach (ItemRef item in waterGunLibMod.Items) { Items.RegisterItem(item, waterGunLibMod.ModGUID); } } } Harmony val2 = new Harmony("WaterGun.WaterGunLib"); val2.PatchAll(); Debug.Log((object)"[WaterGunLib]: Loaded with all modules"); } } public class PowerGenerator : NetworkBehaviour { [Space] [Header("Refrences")] public List<Light> LightsToDisable; public AudioClip FailSound; public AudioClip ToggleSound; public AudioSource GeneratorAudioSource; [Space] [Header("Settings")] public bool IsAbleToFail = true; [Range(0f, 100f)] public float ChanceToFail = 50f; public int FailDamage = 50; [Space] [Header("Events")] public UnityEvent OnGeneratorFail; public UnityEvent OnGeneratorSuccess; public void ToggleAllLights(PlayerControllerB player) { ulong playerClientId = player.playerClientId; ToggleLightsServerRpc(playerClientId); } [Rpc(/*Could not decode attribute arguments.*/)] public void ToggleLightsServerRpc(ulong clientid) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(4017266650u, val3, val, (SendTo)2, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientid); ((NetworkBehaviour)this).__endSendRpc(ref val2, 4017266650u, val3, val, (SendTo)2, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val4 in allPlayerScripts) { if (val4.playerClientId == clientid) { if (Random.value <= ChanceToFail / 100f) { ToggleLightsClientRpc(IsFailed: true, clientid); } else { ToggleLightsClientRpc(IsFailed: false, clientid); } } } } [Rpc(/*Could not decode attribute arguments.*/)] public void ToggleLightsClientRpc(bool IsFailed, ulong clientid) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_0043: 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_0051: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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_01c4: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = default(RpcAttributeParams); RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(1129565366u, val3, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref IsFailed, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, clientid); ((NetworkBehaviour)this).__endSendRpc(ref val2, 1129565366u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (!IsFailed) { if ((Object)(object)GeneratorAudioSource != (Object)null) { GeneratorAudioSource.PlayOneShot(ToggleSound); } foreach (Light item in LightsToDisable) { if (!((Behaviour)item).enabled) { ((Behaviour)item).enabled = true; } else { ((Behaviour)item).enabled = false; } } OnGeneratorSuccess.Invoke(); } else { if (!IsFailed || !IsAbleToFail) { return; } PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val4 in allPlayerScripts) { if (val4.playerClientId == clientid) { val4.DamagePlayer(FailDamage, true, true, (CauseOfDeath)11, 0, false, default(Vector3)); } } if ((Object)(object)GeneratorAudioSource != (Object)null) { GeneratorAudioSource.PlayOneShot(FailSound); } OnGeneratorFail.Invoke(); } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(4017266650u, new RpcReceiveHandler(__rpc_handler_4017266650), "ToggleLightsServerRpc"); ((NetworkBehaviour)this).__registerRpc(1129565366u, new RpcReceiveHandler(__rpc_handler_1129565366), "ToggleLightsClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_4017266650(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong clientid = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientid); target.__rpc_exec_stage = (__RpcExecStage)1; ((PowerGenerator)(object)target).ToggleLightsServerRpc(clientid); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1129565366(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool isFailed = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref isFailed, default(ForPrimitives)); ulong clientid = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientid); target.__rpc_exec_stage = (__RpcExecStage)1; ((PowerGenerator)(object)target).ToggleLightsClientRpc(isFailed, clientid); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "PowerGenerator"; } } public class ShaderRestorer : MonoBehaviour { public List<Material> materialsToApplyShader = new List<Material>(); public string shaderName = "Shader Graphs/WavingGrass"; public bool ApplyShaderOnAwake = true; public void Awake() { if (!ApplyShaderOnAwake) { return; } Shader shader = GetShader(shaderName); if (materialsToApplyShader.Count == 0) { return; } foreach (Material item in materialsToApplyShader) { if ((Object)(object)shader == (Object)null) { Debug.LogError((object)"Shader missing"); } else { item.shader = shader; } } } public Shader GetShader(string shaderName) { return Shader.Find(shaderName); } } public class TeleportTarget : NetworkBehaviour { [Space] [Header("Refrences")] public Transform Target; public AudioClip StartTeleport; public AudioClip EndTeleport; [Space] [Header("AudioSource")] public AudioSource EndAudioSource; public AudioSource StartAudioSource; public void TeleportPlayer(PlayerControllerB player) { TeleportPlayerRpc((int)player.playerClientId); Debug.Log((object)"TeleportStarted"); } [Rpc(/*Could not decode attribute arguments.*/)] private void TeleportPlayerRpc(int PlayerObj) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(3733794665u, val3, val, (SendTo)6, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, PlayerObj); ((NetworkBehaviour)this).__endSendRpc(ref val2, 3733794665u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; StartOfRound.Instance.allPlayerScripts[PlayerObj].TeleportPlayer(Target.position, true, Target.eulerAngles.y, false, true); StartOfRound.Instance.allPlayerScripts[PlayerObj].isInElevator = false; StartOfRound.Instance.allPlayerScripts[PlayerObj].isInHangarShipRoom = false; if ((Object)(object)EndTeleport != (Object)null && (Object)(object)EndAudioSource != (Object)null) { EndAudioSource.PlayOneShot(EndTeleport); } if ((Object)(object)StartTeleport != (Object)null && (Object)(object)StartAudioSource != (Object)null) { StartAudioSource.PlayOneShot(StartTeleport); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(3733794665u, new RpcReceiveHandler(__rpc_handler_3733794665), "TeleportPlayerRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_3733794665(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerObj = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerObj); target.__rpc_exec_stage = (__RpcExecStage)1; ((TeleportTarget)(object)target).TeleportPlayerRpc(playerObj); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "TeleportTarget"; } } } namespace WaterGunLib.Modules { [CreateAssetMenu(menuName = "WaterGunLib/Enemies/EnemyTypeRefrence")] public class EnemyTypeRef : ScriptableObject { [Header("Settings")] [Tooltip("Registers prefab into networkmanager")] public bool networkPrefab; public EnemyType enemyType; [Tooltip("Rarity that is set to all moons and will be replaced per moon value below")] public int globalRarity = -1; public TerminalNode infoNode = null; public Enemies.SpawnType spawnType = Enemies.SpawnType.Indoor; [Tooltip("Override global rarity on special moons")] public List<MoonObject> moons = new List<MoonObject>(); } public class Enemies { public enum SpawnType { Outdoor, Indoor, DayTime } public class RegisteredEnemy { public EnemyType enemyType; public string modGUID; public SpawnType spawnType; public int globalRarity; public TerminalNode infoNode; public List<MoonObject> moons; } public static List<RegisteredEnemy> registeredEnemies = new List<RegisteredEnemy>(); public static void RegisterEnemy(EnemyTypeRef enemyTypeRef, string modGUID) { RegisteredEnemy enemy = new RegisteredEnemy { enemyType = enemyTypeRef.enemyType, modGUID = modGUID, spawnType = enemyTypeRef.spawnType, globalRarity = enemyTypeRef.globalRarity, infoNode = enemyTypeRef.infoNode, moons = enemyTypeRef.moons }; if (registeredEnemies.Any((RegisteredEnemy i) => i.enemyType.enemyName == enemy.enemyType.enemyName)) { Debug.LogError((object)("[WaterGunLib]: " + enemy.enemyType.enemyName + " is already registered. modName: " + enemy.modGUID)); return; } if (enemyTypeRef.networkPrefab) { Plugin.prefabsToNetwork.Add(enemy.enemyType.enemyPrefab); } registeredEnemies.Add(enemy); Debug.Log((object)("[WaterGunLib]: Registered " + enemy.enemyType.enemyName + ". modGUID: " + enemy.modGUID)); } } public class ItemManagement { public static Item GetItemFromName(string itemName) { foreach (Item items in StartOfRound.Instance.allItemsList.itemsList) { if (items.itemName == itemName) { return items; } } return null; } } [CreateAssetMenu(menuName = "WaterGunLib/Items/ItemRefrence")] public class ItemRef : ScriptableObject { [Header("Settings")] [Tooltip("Registers prefab into networkmanager")] public bool networkPrefab; public Item item; [Space(5f)] [Header("ShopItem")] public TerminalNode infoNode = null; public bool isShopItem = false; [Space(5f)] [Header("Scrap")] [Tooltip("Rarity that is set to all moons and will be replaced per moon value below")] public int globalRarity = -1; [Tooltip("Override global rarity on special moons")] public List<MoonObject> moons = new List<MoonObject>(); } public class Items { [Serializable] public class RegisteredItem { public string modGUID; public Item item; public int globalRarity; public TerminalNode infoNode; public bool isShopItem; public List<MoonObject> moons; } public static List<RegisteredItem> registeredItems = new List<RegisteredItem>(); public static void RegisterItem(ItemRef itemRef, string modGUID) { RegisteredItem item = new RegisteredItem { modGUID = modGUID, item = itemRef.item, globalRarity = itemRef.globalRarity, infoNode = itemRef.infoNode, isShopItem = itemRef.isShopItem, moons = itemRef.moons }; if (registeredItems.Any((RegisteredItem i) => i.item.itemName == item.item.itemName)) { Debug.LogError((object)("[WaterGunLib]: " + item.item.itemName + " is already registered. modName: " + item.modGUID)); return; } if (itemRef.networkPrefab) { Plugin.prefabsToNetwork.Add(item.item.spawnPrefab); } registeredItems.Add(item); Debug.Log((object)("[WaterGunLib]: Registered " + item.item.itemName + ". modGUID: " + item.modGUID)); } } [CreateAssetMenu(menuName = "WaterGunLib/OutsideObjects/SpawnableOutsideObjectRefrence")] public class SpawnableOutsideObjectRef : ScriptableObject { [Header("Settings")] [Tooltip("Registers prefab into networkmanager")] public bool networkPrefab; [Tooltip("Rarity that is set to all moons and will be replaced per moon value below")] public AnimationCurve? globalRandomAmount; [Tooltip("Override global rarity curve on special moons")] public List<MoonObjectCurve> moons = new List<MoonObjectCurve>(); public SpawnableOutsideObject? outsideObject; } public class SpawnableOutsideObjects { public class RegisteredOutsideObject { public string? modGUID; public SpawnableOutsideObject? outsideObject; public AnimationCurve? globalRandomAmount; public List<MoonObjectCurve> moons = new List<MoonObjectCurve>(); } public static List<RegisteredOutsideObject> registeredOutsideObjects = new List<RegisteredOutsideObject>(); public static void RegisterSpawnableOutsideObject(SpawnableOutsideObjectRef outsideObject, string modGUID) { RegisteredOutsideObject registeredOutsideObject = new RegisteredOutsideObject { modGUID = modGUID, outsideObject = outsideObject.outsideObject, globalRandomAmount = outsideObject.globalRandomAmount, moons = outsideObject.moons }; if (registeredOutsideObjects.Any((RegisteredOutsideObject obj) => (Object)(object)obj.outsideObject == (Object)(object)outsideObject)) { SpawnableOutsideObject? outsideObject2 = registeredOutsideObject.outsideObject; Debug.LogError((object)("[WaterGunLib]: " + ((outsideObject2 != null) ? ((Object)outsideObject2.prefabToSpawn).name : null) + " is already registered. modGUID: " + registeredOutsideObject.modGUID)); return; } if (outsideObject.networkPrefab && (Object)(object)registeredOutsideObject.outsideObject != (Object)null) { Plugin.prefabsToNetwork.Add(registeredOutsideObject.outsideObject.prefabToSpawn); } registeredOutsideObjects.Add(registeredOutsideObject); SpawnableOutsideObject? outsideObject3 = registeredOutsideObject.outsideObject; Debug.Log((object)("[WaterGunLib]: Registered " + ((outsideObject3 != null) ? ((Object)outsideObject3.prefabToSpawn).name : null) + ". modGUID: " + registeredOutsideObject.modGUID)); } } [CreateAssetMenu(menuName = "WaterGunLib/Unlockables/UnlockableItemRefrence")] public class UnlockableItemRef : ScriptableObject { [Header("Settings")] [Tooltip("Registers prefab into networkmanager")] public bool networkPrefab; public UnlockableItem? UnlockableItem; public Unlockables.StoreType StoreType = Unlockables.StoreType.ShipUpgrade; public int Price = 0; public TerminalNode? InfoNode; } public class Unlockables { public enum StoreType { ShipUpgrade, Decor } public class RegisteredUnlockable { public StoreType storeType; public UnlockableItem? unlockableItem; public string? modGUID; public int price; public TerminalNode? itemInfo; } public static List<RegisteredUnlockable> registeredUnlockables = new List<RegisteredUnlockable>(); public static void RegisterUnlockable(UnlockableItemRef unlockable, string modGUID) { RegisteredUnlockable registeredUnlockable = new RegisteredUnlockable { storeType = unlockable.StoreType, unlockableItem = unlockable.UnlockableItem, price = unlockable.Price, itemInfo = unlockable.InfoNode, modGUID = modGUID }; if (registeredUnlockables.Any((RegisteredUnlockable obj) => obj.unlockableItem == unlockable.UnlockableItem)) { Debug.LogError((object)("[WaterGunLib]: " + unlockable.UnlockableItem?.unlockableName + " is already registered. modName: " + registeredUnlockable.modGUID)); return; } if (unlockable.networkPrefab && unlockable.UnlockableItem != null) { Plugin.prefabsToNetwork.Add(unlockable.UnlockableItem.prefabObject); } registeredUnlockables.Add(registeredUnlockable); Debug.Log((object)("[WaterGunLib]: Registered " + unlockable.UnlockableItem?.unlockableName + ". modGUID: " + registeredUnlockable.modGUID)); } } } namespace WaterGunLib.Modules.Prefabs { public class NetworkPrefabs { public static void RegisterNetworkPrefab(GameObject prefab) { if (!Plugin.prefabsToNetwork.Contains(prefab)) { Plugin.prefabsToNetwork.Add(prefab); } } } } namespace WaterGunLib.Fields { [Serializable] public class MoonObject { public string moonName = ""; public int rarity; } [Serializable] public class MoonObjectCurve { public string moonName; public AnimationCurve randomSpawn; } } namespace WaterGunLib.Bundles { [CreateAssetMenu(menuName = "WaterGunLib/Mod")] public class WaterGunLibMod : ScriptableObject { [Header("Settings")] public string ModGUID; [Space(5f)] public List<UnlockableItemRef> Unlockables; public List<SpawnableOutsideObjectRef> OutsideObjects; public List<EnemyTypeRef> Enemies; public List<ItemRef> Items; } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace WaterGunLib.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }