Please disclose if your mod was created primarily 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 Grimoire Weiss v1.1.0
BepInEx/plugins/GrimoireWeiss/GrimoireWeiss.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using GrimoireWeiss.NetcodePatcher; using GrimoireWeissScrap.Behaviours; using JetBrains.Annotations; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("CMM")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Adds your favorite cookbook to the game.")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: AssemblyInformationalVersion("1.1.0+fb0a5905462a3b97850844ae31013b478cd5cc59")] [assembly: AssemblyProduct("GrimoireWeiss")] [assembly: AssemblyTitle("GrimoireWeiss")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } 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 GrimoireWeissScrap { [BepInPlugin("CMM.GrimoireWeiss", "GrimoireWeiss", "1.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInProcess("Lethal Company.exe")] public class Plugin : BaseUnityPlugin { public const string PluginGUID = "CMM.GrimoireWeiss"; public const string PluginAuthor = "CMM"; public const string PluginName = "GrimoireWeiss"; public const string PluginVersion = "1.1.0"; private static Plugin s_instance; internal static ManualLogSource Log; public static AssetBundle WeissBundle; public GameObject NetManagerPrefab; private void Awake() { try { NetcodeWeaver(); if ((Object)(object)s_instance == (Object)null) { s_instance = this; } Log = Logger.CreateLogSource("CMM.GrimoireWeiss"); LoadAssetBundles(); DoNetworkThingy(); LoadAndRegisterItems(); Log.LogInfo((object)"Weiss! You dumbass!"); } catch (Exception) { Log.LogError((object)"Plugin CMM.GrimoireWeiss failed to load."); } } private static void NetcodeWeaver() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); for (int i = 0; i < types.Length; i++) { MethodInfo[] methods = types[i].GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } } private void DoNetworkThingy() { NetManagerPrefab = WeissBundle.LoadAsset<GameObject>("Assets/Dumbass/WeissNetworkManager.prefab"); NetManagerPrefab.AddComponent<WeissNetworkManager>(); } private static void LoadAssetBundles() { WeissBundle = LoadAssetBundle("grimoireweiss", "weissBundle"); } private static AssetBundle LoadAssetBundle(string bundleName, string bundleDisplayName) { AssetBundle obj = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException(), bundleName)); if ((Object)(object)obj == (Object)null) { Log.LogError((object)("Failed to load " + bundleDisplayName + ".")); } return obj; } private static void LoadAndRegisterItems() { Scrap[] array = new Scrap[7] { new Scrap("Grimoire Weiss", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/GrimoireWeissItem.asset")), new Scrap("Tome Blood & Sacrifice", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/TomeBlood&SacrificeItem.asset")), new Scrap("Tome Belief & Heart", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/TomeBelief&HeartItem.asset")), new Scrap("Tome Heaven & Earth", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/TomeHeaven&EarthItem.asset")), new Scrap("Tome Cause & Malice", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/TomeCause&MaliceItem.asset")), new Scrap("Tome Sea & Chasm", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/TomeSea&ChasmItem.asset")), new Scrap("Tome Star & Song", Plugin.LoadItemFromBundle<Item>(WeissBundle, "Assets/Dumbass/TomeStar&SongItem.asset")) }; Scrap[] array2 = array; foreach (Scrap obj in array2) { string name = obj.Name; Item item = obj.Item; if ((Object)(object)item == (Object)null) { Log.LogError((object)("Failed to load item: " + name)); continue; } if (!(name == "Grimoire Weiss")) { if (name == "Tome Blood & Sacrifice") { TomeBlood tomeBlood = item.spawnPrefab.AddComponent<TomeBlood>(); ((GrabbableObject)tomeBlood).grabbable = true; ((GrabbableObject)tomeBlood).grabbableToEnemies = true; ((GrabbableObject)tomeBlood).itemProperties = item; } } else { Weiss weiss = item.spawnPrefab.AddComponent<Weiss>(); ((GrabbableObject)weiss).grabbable = true; ((GrabbableObject)weiss).scrapPersistedThroughRounds = true; ((GrabbableObject)weiss).grabbableToEnemies = true; ((GrabbableObject)weiss).itemProperties = item; } NetworkPrefabs.RegisterNetworkPrefab(item.spawnPrefab); Utilities.FixMixerGroups(item.spawnPrefab); } array2 = array; foreach (Scrap scrap in array2) { switch (scrap.Name) { case "Grimoire Weiss": Items.RegisterScrap(scrap.Item, new Dictionary<LevelTypes, int> { { (LevelTypes)64, 15 }, { (LevelTypes)4, 5 }, { (LevelTypes)8, 5 }, { (LevelTypes)16, 10 } }, (Dictionary<string, int>)null); break; case "Tome Blood & Sacrifice": Items.RegisterScrap(scrap.Item, new Dictionary<LevelTypes, int> { { (LevelTypes)64, 15 }, { (LevelTypes)512, 10 } }, (Dictionary<string, int>)null); break; case "Tome Heaven & Earth": Items.RegisterScrap(scrap.Item, new Dictionary<LevelTypes, int> { { (LevelTypes)128, 15 }, { (LevelTypes)256, 10 } }, (Dictionary<string, int>)null); break; case "Tome Belief & Heart": Items.RegisterScrap(scrap.Item, new Dictionary<LevelTypes, int> { { (LevelTypes)256, 15 }, { (LevelTypes)128, 10 } }, (Dictionary<string, int>)null); break; default: Items.RegisterScrap(scrap.Item, new Dictionary<LevelTypes, int> { { (LevelTypes)4, 10 }, { (LevelTypes)8, 10 }, { (LevelTypes)16, 15 }, { (LevelTypes)256, 10 }, { (LevelTypes)128, 10 }, { (LevelTypes)64, 7 }, { (LevelTypes)512, 5 } }, (Dictionary<string, int>)null); break; } } } public static T LoadItemFromBundle<T>(AssetBundle bundle, string path) where T : Object { T val = bundle.LoadAsset<T>(path); if ((Object)(object)val == (Object)null) { Log.LogError((object)("Failed to load asset at path " + path + " from bundle " + ((Object)bundle).name)); } return val; } } public class Scrap { public string Name { get; } public Item Item { get; } public Scrap(string name, Item item) { Name = name; Item = item; base..ctor(); } } } namespace GrimoireWeissScrap.Behaviours { public class WeissNetworkManager : NetworkBehaviour { public static WeissNetworkManager Instance; public override void OnNetworkSpawn() { if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { WeissNetworkManager instance = Instance; if (instance != null) { ((Component)instance).gameObject.GetComponent<NetworkObject>().Despawn(true); } } Instance = this; ((NetworkBehaviour)this).OnNetworkSpawn(); } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected internal override string __getTypeName() { return "WeissNetworkManager"; } } internal class TomeBelief : PhysicsProp { private const int BMaxHealth = 100; private bool _bIsEquipped; public override void GrabItem() { ((GrabbableObject)this).GrabItem(); _ = (Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null; } public override void EquipItem() { ((PhysicsProp)this).EquipItem(); if (!((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null)) { _bIsEquipped = true; if (((GrabbableObject)this).scrapValue >= 2 && ((GrabbableObject)this).playerHeldBy.health < 100) { ((MonoBehaviour)this).StartCoroutine(RegenerateCoroutine()); } } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); if (_bIsEquipped) { _bIsEquipped = false; } } private IEnumerator RegenerateCoroutine() { int healthMissing = 100 - ((GrabbableObject)this).playerHeldBy.health; while (_bIsEquipped && ((GrabbableObject)this).scrapValue > 0 && healthMissing != 0) { int num = Mathf.Min(2 * healthMissing, ((GrabbableObject)this).scrapValue); int healthRegenerated = Mathf.FloorToInt((float)(num / 2)); RegeneratePlayer(num, healthRegenerated); healthMissing = 100 - ((GrabbableObject)this).playerHeldBy.health; yield return (object)new WaitForSeconds(3f); } } private void RegeneratePlayer(int scrapCost, int healthRegenerated) { PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy; playerHeldBy.health += Mathf.FloorToInt((float)healthRegenerated); ((GrabbableObject)this).playerHeldBy.DamagePlayerClientRpc(-healthRegenerated, ((GrabbableObject)this).playerHeldBy.health); HUDManager.Instance.UpdateHealthUI(((GrabbableObject)this).playerHeldBy.health, false); if (((GrabbableObject)this).playerHeldBy.health >= 10 && ((GrabbableObject)this).playerHeldBy.criticallyInjured) { ((GrabbableObject)this).playerHeldBy.MakeCriticallyInjured(false); } UpdateScrapValueServerRpc(((GrabbableObject)this).scrapValue - scrapCost); } [ServerRpc(RequireOwnership = false)] public void UpdateScrapValueServerRpc(int value) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2231642400u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, value); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2231642400u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { UpdateScrapValueClientRpc(value); } } } [ClientRpc] public void UpdateScrapValueClientRpc(int value) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2444448827u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, value); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2444448827u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((GrabbableObject)this).SetScrapValue(value); } } } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_TomeBelief() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2231642400u, new RpcReceiveHandler(__rpc_handler_2231642400)); NetworkManager.__rpc_func_table.Add(2444448827u, new RpcReceiveHandler(__rpc_handler_2444448827)); } private static void __rpc_handler_2231642400(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 value = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref value); target.__rpc_exec_stage = (__RpcExecStage)1; ((TomeBelief)(object)target).UpdateScrapValueServerRpc(value); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2444448827(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 value = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref value); target.__rpc_exec_stage = (__RpcExecStage)2; ((TomeBelief)(object)target).UpdateScrapValueClientRpc(value); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "TomeBelief"; } } internal class TomeBlood : PhysicsProp { private const int BMinDamage = 25; private const int BMaxDamage = 75; private int _bUsesLeft; private int _bSacrifices; private bool _bIsFirstUse = true; private bool _bCanFlickerLights = true; private PlayerControllerB _wasGrabbedBy; private RoundManager _roundManager; private bool _bCanScarePlayer; public override void Start() { ((GrabbableObject)this).Start(); _bUsesLeft = 10; _roundManager = Object.FindFirstObjectByType<RoundManager>(); } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!buttonDown || (Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) { return; } if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null && _bUsesLeft > 0) { _bUsesLeft--; if (_bSacrifices >= 3) { if (_bIsFirstUse) { HandleUseFirst(); } else { HandleUse(); } if (Random.value <= 0.05f) { SacrificeScrapServerRpc(); } } else { ((GrabbableObject)this).playerHeldBy.DamagePlayer(100, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); } } else if (_bUsesLeft <= 0) { ((GrabbableObject)this).playerHeldBy.MakeCriticallyInjured(true); } } public override void GrabItem() { ((GrabbableObject)this).GrabItem(); if (!((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null)) { if (!Object.op_Implicit((Object)(object)_wasGrabbedBy) && _bCanFlickerLights) { _roundManager.FlickerLights(false, true); } _wasGrabbedBy = ((GrabbableObject)this).playerHeldBy; } } public override void EquipItem() { ((PhysicsProp)this).EquipItem(); if (!((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) && _bCanScarePlayer) { ((GrabbableObject)this).playerHeldBy.JumpToFearLevel(0.5f, true); HUDManager.Instance.ShakeCamera((ScreenShakeType)0); _bCanScarePlayer = false; } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); if (!((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) && _bCanFlickerLights && Random.value <= 0.5f) { _roundManager.FlickerLights(true, false); } } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); if (!((Object)(object)_wasGrabbedBy == (Object)null) && _wasGrabbedBy.isPlayerDead) { SacrificeScrapServerRpc(); } } private void HandleUseFirst() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) _bIsFirstUse = false; int num = ((GrabbableObject)this).playerHeldBy.health - 1; int num2 = Random.Range(25, Mathf.Min(76, num + 1)); ((GrabbableObject)this).playerHeldBy.DamagePlayer(num2, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); ((GrabbableObject)this).playerHeldBy.JumpToFearLevel(0.5f, true); HUDManager.Instance.ShakeCamera((ScreenShakeType)0); _roundManager.FlickerLights(false, false); } private void HandleUse() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) int num = Random.Range(25, 76); ((GrabbableObject)this).playerHeldBy.DamagePlayer(num, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); ((GrabbableObject)this).playerHeldBy.JumpToFearLevel(0.5f, true); HUDManager.Instance.ShakeCamera((ScreenShakeType)0); _roundManager.FlickerLights(false, false); } [ServerRpc(RequireOwnership = false)] public void SacrificeScrapServerRpc() { //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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(915431107u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 915431107u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { int num = ((GrabbableObject)this).scrapValue / 3; int newPrice = Random.Range(5, num); SacrificeScrapClientRpc(newPrice); _roundManager.SpawnEnemiesOutside(); string[] array = new string[4] { "In shadows deep, " + _wasGrabbedBy.playerUsername + " surrenders willingly, to the Tome's insatiable hunger.", "The air thickens with the scent of sacrifice.", "The forbidden rites reach their dark conclusion.", "The Tome's hunger grows, consuming their very essence." }; string text = array[Random.Range(0, array.Length)]; HUDManager.Instance.AddTextToChatOnServer(text, -1); _bSacrifices++; } } } [ClientRpc] private void SacrificeScrapClientRpc(int newPrice) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_010c: 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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2585402183u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, newPrice); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2585402183u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((GrabbableObject)this).SetScrapValue(((GrabbableObject)this).scrapValue + newPrice); _bCanFlickerLights = false; _roundManager.FlickerLights(false, true); foreach (Light allPoweredLight in _roundManager.allPoweredLights) { ((MonoBehaviour)this).StartCoroutine(ChangeLightColorCoroutine(5f, allPoweredLight, Color.red)); } ((MonoBehaviour)this).StartCoroutine(SacrificeTurnOffLights(10f, 3f, _roundManager.allPoweredLightsAnimators)); } private IEnumerator SacrificeTurnOffLights(float graceDelay, float turnOffDelay, List<Animator> animators) { yield return (object)new WaitForSeconds(graceDelay); foreach (Animator animator in animators) { yield return (object)new WaitForSeconds(turnOffDelay); animator.SetBool("on", false); if (Random.value <= 0.05f) { _roundManager.FlickerLights(false, false); } } } private static IEnumerator ChangeLightColorCoroutine(float delay, Light light, Color color) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) yield return (object)new WaitForSeconds(delay); light.color = color; } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_TomeBlood() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(915431107u, new RpcReceiveHandler(__rpc_handler_915431107)); NetworkManager.__rpc_func_table.Add(2585402183u, new RpcReceiveHandler(__rpc_handler_2585402183)); } private static void __rpc_handler_915431107(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; ((TomeBlood)(object)target).SacrificeScrapServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2585402183(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 newPrice = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref newPrice); target.__rpc_exec_stage = (__RpcExecStage)2; ((TomeBlood)(object)target).SacrificeScrapClientRpc(newPrice); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "TomeBlood"; } } internal class TomeHeaven : PhysicsProp { protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } protected internal override string __getTypeName() { return "TomeHeaven"; } } internal class Weiss : PhysicsProp { private bool _wIsInDungeon; private bool _wCanTalkEnterDungeon = true; private bool _wCanTalkLeftDungeon = true; private bool _wCanTalkDiscardDungeon = true; private bool _wCanTalkDiscardShip = true; private bool _wCanTalkSwitchedOff = true; private bool _wCanTalkAloneInDungeon = true; private bool _wCanTalkClimbing = true; private bool _wCanTalkQuicksand = true; private bool _wCanTalkSand = true; private bool _wCanTalkWater = true; private int _wTimesEnteredDungeon; private int _wTimesLeftDungeon; private int _wTimesDiscardDungeon; private int _wTimesDiscardShip; private int _wTimesGrabbed; private int _wTimesSwitchedOff; private AudioSource _audioSource; private readonly Dictionary<string, AudioClip> _audioClips = new Dictionary<string, AudioClip>(); private PlayerControllerB _wasGrabbedBy; private RoundManager _roundManager; [UsedImplicitly] private void Awake() { _audioSource = ((Component)this).GetComponent<AudioSource>(); } public override void Start() { ((GrabbableObject)this).Start(); _roundManager = Object.FindFirstObjectByType<RoundManager>(); } public override void Update() { ((GrabbableObject)this).Update(); if (Time.frameCount % 60 != 0 || (Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) { return; } string name = ((Object)_roundManager.currentLevel).name; bool flag = ((name == "RendLevel" || name == "DineLevel") ? true : false); bool flag2 = flag; flag = ((name == "OffenseLevel" || name == "AssuranceLevel") ? true : false); bool flag3 = flag; if (((GrabbableObject)this).isInFactory) { if (!_wIsInDungeon) { _wIsInDungeon = true; _wCanTalkDiscardShip = true; if (_wCanTalkEnterDungeon) { if (flag2) { ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsEnteringDungeonMansion" + Random.Range(1, 5), 3f, _wIsInDungeon, followUpConditionExpected: true)); } else { switch (_wTimesEnteredDungeon) { case 0: ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsEnteringDungeon1", 3f, _wIsInDungeon, followUpConditionExpected: true)); ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsEnteringDungeon1FollowUp", 60f, _wIsInDungeon, followUpConditionExpected: true)); break; case 1: case 2: ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsEnteringDungeon2", 3f, _wIsInDungeon, followUpConditionExpected: true)); ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsEnteringDungeon2FollowUp", 30f, _wIsInDungeon, followUpConditionExpected: true)); break; case 3: case 4: ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsEnteringDungeon" + Random.Range(3, 6), 3f, _wIsInDungeon, followUpConditionExpected: true)); break; } _wTimesEnteredDungeon++; _wCanTalkEnterDungeon = false; } } if (_wCanTalkAloneInDungeon && ((GrabbableObject)this).playerHeldBy.isPlayerAlone && Random.value <= 0.25f) { ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsAlone" + Random.Range(1, 3), 120f, ((GrabbableObject)this).playerHeldBy.isPlayerAlone, _wIsInDungeon)); _wCanTalkAloneInDungeon = false; } return; } } else { if (_wIsInDungeon) { _wIsInDungeon = false; if (_wCanTalkLeftDungeon) { switch (_wTimesLeftDungeon) { case 0: ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsLeavingDungeon1", 7f, _wIsInDungeon, followUpConditionExpected: false)); break; case 1: case 2: case 3: ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("PlayerIsLeavingDungeon" + Random.Range(2, 4), 7f, _wIsInDungeon, followUpConditionExpected: false)); break; } _wTimesLeftDungeon++; _wCanTalkLeftDungeon = false; } return; } if (!((GrabbableObject)this).isInElevator) { if (_wCanTalkClimbing && ((GrabbableObject)this).playerHeldBy.isClimbingLadder && Random.value <= 0.25f) { _wCanTalkClimbing = false; } if (_wCanTalkQuicksand && ((GrabbableObject)this).playerHeldBy.isSinking && !((GrabbableObject)this).playerHeldBy.isUnderwater && Random.value <= 0.5f) { _wCanTalkQuicksand = false; PlayAudioClip("Quicksand" + Random.Range(1, 6)); } if (_wCanTalkWater && ((GrabbableObject)this).playerHeldBy.isSinking && ((GrabbableObject)this).playerHeldBy.isUnderwater && Random.value <= 0.5f) { _wCanTalkWater = false; PlayAudioClip("Water" + Random.Range(1, 4)); } if (_wCanTalkSand && flag3 && Random.value <= 0.5f) { ((MonoBehaviour)this).StartCoroutine(PlayFollowUpLine("MapHasSand" + Random.Range(1, 5), 35f, _wIsInDungeon, followUpConditionExpected: false)); _wCanTalkSand = false; } return; } } if (((GrabbableObject)this).isInElevator) { _wCanTalkEnterDungeon = true; _wCanTalkLeftDungeon = true; _wCanTalkDiscardDungeon = true; } } public override void GrabItem() { ((GrabbableObject)this).GrabItem(); if ((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) { return; } _wasGrabbedBy = ((GrabbableObject)this).playerHeldBy; if (_wTimesGrabbed == 0) { PlayAudioClip("PlayerPickedWeissIntro" + Random.Range(1, 7)); _wTimesGrabbed++; } else if (Random.value <= 0.5f) { switch (_wTimesGrabbed) { case 2: case 3: PlayAudioClip("PlayerPickedWeiss" + Random.Range(1, 5)); break; case 9: case 10: case 11: case 12: case 13: PlayAudioClip("PlayerPickedWeissIsAnnoyed" + Random.Range(1, 8)); break; } _wTimesGrabbed++; } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); if ((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null || !_wCanTalkSwitchedOff) { return; } _wCanTalkSwitchedOff = false; if (_wTimesSwitchedOff == 0) { PlayAudioClip("PlayerAddedWeissToInv1"); _wTimesSwitchedOff++; } else if (Random.value <= 0.5f) { int wTimesSwitchedOff = _wTimesSwitchedOff; if (wTimesSwitchedOff >= 1 && wTimesSwitchedOff <= 7) { PlayAudioClip("PlayerAddedWeissToInv" + Random.Range(2, 7)); } _wTimesSwitchedOff++; } } public override void DiscardItem() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected I4, but got Unknown ((GrabbableObject)this).DiscardItem(); if ((Object)(object)_wasGrabbedBy == (Object)null) { return; } if (_wasGrabbedBy.isPlayerDead) { CauseOfDeath causeOfDeath = _wasGrabbedBy.causeOfDeath; switch ((int)causeOfDeath) { case 7: PlayAudioClip("PlayerIsDeadMine1"); break; case 3: PlayAudioClip("PlayerIsDeadMine1"); break; case 0: case 1: PlayAudioClip("PlayerIsDeadBludg1"); break; case 2: case 4: PlayAudioClip("PlayerIsDeadStra1"); break; case 5: case 6: case 8: case 9: case 10: case 11: PlayAudioClip("PlayerIsDeadElc1"); break; default: PlayAudioClip("PlayerIsDead" + Random.Range(1, 7)); break; } } else { if (((GrabbableObject)this).isInElevator && _wCanTalkDiscardShip) { switch (_wTimesDiscardShip) { case 0: PlayAudioClip("PlayerDroppedWeissInsideShip1"); break; case 5: PlayAudioClip("PlayerDroppedWeissInsideShip2"); _wCanTalkDiscardShip = false; break; } _wTimesDiscardShip++; } if (((GrabbableObject)this).isInFactory && _wCanTalkDiscardDungeon) { switch (_wTimesDiscardDungeon) { case 0: PlayAudioClip("PlayerDroppedWeissInsideDungeon1"); break; case 5: PlayAudioClip("PlayerDroppedWeissInsideDungeon2"); _wCanTalkDiscardDungeon = false; break; } _wTimesDiscardDungeon++; } } _wCanTalkSwitchedOff = true; } private void LoadAudioClip(string clip, string clipFile) { AudioClip val = Plugin.LoadItemFromBundle<AudioClip>(Plugin.WeissBundle, "Assets/Dumbass/Resources/Sounds/Weiss/" + clip + ".wav"); if ((Object)(object)val != (Object)null) { _audioClips[clip] = val; } } public void PlayAudioClip(string clip) { if (!_audioSource.isPlaying) { if (!_audioClips.ContainsKey(clip)) { LoadAudioClip(clip, clip + ".wav"); } if (_audioClips.ContainsKey(clip)) { _audioSource.PlayOneShot(_audioClips[clip]); } } } private IEnumerator PlayFollowUpLine(string clip, float delayInSeconds, bool followUpCondition, bool followUpConditionExpected) { yield return (object)new WaitForSeconds(delayInSeconds); if (followUpCondition == followUpConditionExpected) { PlayAudioClip(clip); } } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } protected internal override string __getTypeName() { return "Weiss"; } } } namespace GrimoireWeiss.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }