Decompiled source of EasyBossConfig v0.0.4
EasyBossConfig.dll
Decompiled 6 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using JetBrains.Annotations; using Microsoft.CodeAnalysis; using ServerSync; using TMPro; using UnityEngine; [assembly: AssemblyFileVersion("0.0.5")] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyProduct("EasyBossConfig")] [assembly: AssemblyCompany("coemt")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("EasyBossConfig")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.5.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<b00eb50b-78db-43a0-9de5-1235b4e68569>Embedded] internal sealed class <b00eb50b-78db-43a0-9de5-1235b4e68569>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<b00eb50b-78db-43a0-9de5-1235b4e68569>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <92732460-db11-4015-ba9b-c393fadbcb4c>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <92732460-db11-4015-ba9b-c393fadbcb4c>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <92732460-db11-4015-ba9b-c393fadbcb4c>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<b00eb50b-78db-43a0-9de5-1235b4e68569>Embedded] internal sealed class <bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContextAttribute : Attribute { public readonly byte Flag; public <bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace EasyBossConfig { public class EasyBossConfigPatch { [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class EasyBoss_Patch_Coe { [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] public static void Postfix(ZNetScene __instance) { //IL_0089: 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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03da: Unknown result type (might be due to invalid IL or missing references) //IL_03ea: Unknown result type (might be due to invalid IL or missing references) //IL_03fa: Unknown result type (might be due to invalid IL or missing references) //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_041a: Unknown result type (might be due to invalid IL or missing references) //IL_042f: Expected O, but got Unknown //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Expected O, but got Unknown //IL_06f9: Unknown result type (might be due to invalid IL or missing references) //IL_06fe: Unknown result type (might be due to invalid IL or missing references) //IL_0714: Unknown result type (might be due to invalid IL or missing references) //IL_0724: Unknown result type (might be due to invalid IL or missing references) //IL_0734: Unknown result type (might be due to invalid IL or missing references) //IL_0744: Unknown result type (might be due to invalid IL or missing references) //IL_0754: Unknown result type (might be due to invalid IL or missing references) //IL_0769: Expected O, but got Unknown //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_0451: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Unknown result type (might be due to invalid IL or missing references) //IL_0477: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Unknown result type (might be due to invalid IL or missing references) //IL_0497: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_04bc: Expected O, but got Unknown //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Expected O, but got Unknown //IL_0a33: Unknown result type (might be due to invalid IL or missing references) //IL_0a38: Unknown result type (might be due to invalid IL or missing references) //IL_0a4e: Unknown result type (might be due to invalid IL or missing references) //IL_0a5e: Unknown result type (might be due to invalid IL or missing references) //IL_0a6e: Unknown result type (might be due to invalid IL or missing references) //IL_0a7e: Unknown result type (might be due to invalid IL or missing references) //IL_0a8e: Unknown result type (might be due to invalid IL or missing references) //IL_0aa3: Expected O, but got Unknown //IL_0786: Unknown result type (might be due to invalid IL or missing references) //IL_078b: Unknown result type (might be due to invalid IL or missing references) //IL_07a1: Unknown result type (might be due to invalid IL or missing references) //IL_07b1: Unknown result type (might be due to invalid IL or missing references) //IL_07c1: Unknown result type (might be due to invalid IL or missing references) //IL_07d1: Unknown result type (might be due to invalid IL or missing references) //IL_07e1: Unknown result type (might be due to invalid IL or missing references) //IL_07f6: Expected O, but got Unknown //IL_04d9: Unknown result type (might be due to invalid IL or missing references) //IL_04de: Unknown result type (might be due to invalid IL or missing references) //IL_04f4: Unknown result type (might be due to invalid IL or missing references) //IL_0504: Unknown result type (might be due to invalid IL or missing references) //IL_0514: Unknown result type (might be due to invalid IL or missing references) //IL_0524: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_0549: Expected O, but got Unknown //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Expected O, but got Unknown //IL_0d6d: Unknown result type (might be due to invalid IL or missing references) //IL_0d72: Unknown result type (might be due to invalid IL or missing references) //IL_0d88: Unknown result type (might be due to invalid IL or missing references) //IL_0d98: Unknown result type (might be due to invalid IL or missing references) //IL_0da8: Unknown result type (might be due to invalid IL or missing references) //IL_0db8: Unknown result type (might be due to invalid IL or missing references) //IL_0dc8: Unknown result type (might be due to invalid IL or missing references) //IL_0ddd: Expected O, but got Unknown //IL_0ac0: Unknown result type (might be due to invalid IL or missing references) //IL_0ac5: Unknown result type (might be due to invalid IL or missing references) //IL_0adb: Unknown result type (might be due to invalid IL or missing references) //IL_0aeb: Unknown result type (might be due to invalid IL or missing references) //IL_0afb: Unknown result type (might be due to invalid IL or missing references) //IL_0b0b: Unknown result type (might be due to invalid IL or missing references) //IL_0b1b: Unknown result type (might be due to invalid IL or missing references) //IL_0b30: Expected O, but got Unknown //IL_0813: Unknown result type (might be due to invalid IL or missing references) //IL_0818: Unknown result type (might be due to invalid IL or missing references) //IL_082e: Unknown result type (might be due to invalid IL or missing references) //IL_083e: Unknown result type (might be due to invalid IL or missing references) //IL_084e: Unknown result type (might be due to invalid IL or missing references) //IL_085e: Unknown result type (might be due to invalid IL or missing references) //IL_086e: Unknown result type (might be due to invalid IL or missing references) //IL_0883: Expected O, but got Unknown //IL_0566: Unknown result type (might be due to invalid IL or missing references) //IL_056b: Unknown result type (might be due to invalid IL or missing references) //IL_0581: Unknown result type (might be due to invalid IL or missing references) //IL_0591: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05b1: Unknown result type (might be due to invalid IL or missing references) //IL_05c1: Unknown result type (might be due to invalid IL or missing references) //IL_05d6: Expected O, but got Unknown //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Expected O, but got Unknown //IL_10a7: Unknown result type (might be due to invalid IL or missing references) //IL_10ac: Unknown result type (might be due to invalid IL or missing references) //IL_10c2: Unknown result type (might be due to invalid IL or missing references) //IL_10d2: Unknown result type (might be due to invalid IL or missing references) //IL_10e2: Unknown result type (might be due to invalid IL or missing references) //IL_10f2: Unknown result type (might be due to invalid IL or missing references) //IL_1102: Unknown result type (might be due to invalid IL or missing references) //IL_1117: Expected O, but got Unknown //IL_0dfa: Unknown result type (might be due to invalid IL or missing references) //IL_0dff: Unknown result type (might be due to invalid IL or missing references) //IL_0e15: Unknown result type (might be due to invalid IL or missing references) //IL_0e25: Unknown result type (might be due to invalid IL or missing references) //IL_0e35: Unknown result type (might be due to invalid IL or missing references) //IL_0e45: Unknown result type (might be due to invalid IL or missing references) //IL_0e55: Unknown result type (might be due to invalid IL or missing references) //IL_0e6a: Expected O, but got Unknown //IL_0b4d: Unknown result type (might be due to invalid IL or missing references) //IL_0b52: Unknown result type (might be due to invalid IL or missing references) //IL_0b68: Unknown result type (might be due to invalid IL or missing references) //IL_0b78: Unknown result type (might be due to invalid IL or missing references) //IL_0b88: Unknown result type (might be due to invalid IL or missing references) //IL_0b98: Unknown result type (might be due to invalid IL or missing references) //IL_0ba8: Unknown result type (might be due to invalid IL or missing references) //IL_0bbd: Expected O, but got Unknown //IL_08a0: Unknown result type (might be due to invalid IL or missing references) //IL_08a5: Unknown result type (might be due to invalid IL or missing references) //IL_08bb: Unknown result type (might be due to invalid IL or missing references) //IL_08cb: Unknown result type (might be due to invalid IL or missing references) //IL_08db: Unknown result type (might be due to invalid IL or missing references) //IL_08eb: Unknown result type (might be due to invalid IL or missing references) //IL_08fb: Unknown result type (might be due to invalid IL or missing references) //IL_0910: Expected O, but got Unknown //IL_05f3: Unknown result type (might be due to invalid IL or missing references) //IL_05f8: Unknown result type (might be due to invalid IL or missing references) //IL_060e: Unknown result type (might be due to invalid IL or missing references) //IL_061e: Unknown result type (might be due to invalid IL or missing references) //IL_062e: Unknown result type (might be due to invalid IL or missing references) //IL_063e: Unknown result type (might be due to invalid IL or missing references) //IL_064e: Unknown result type (might be due to invalid IL or missing references) //IL_0663: Expected O, but got Unknown //IL_1134: Unknown result type (might be due to invalid IL or missing references) //IL_1139: Unknown result type (might be due to invalid IL or missing references) //IL_114f: Unknown result type (might be due to invalid IL or missing references) //IL_115f: Unknown result type (might be due to invalid IL or missing references) //IL_116f: Unknown result type (might be due to invalid IL or missing references) //IL_117f: Unknown result type (might be due to invalid IL or missing references) //IL_118f: Unknown result type (might be due to invalid IL or missing references) //IL_11a4: Expected O, but got Unknown //IL_0e87: Unknown result type (might be due to invalid IL or missing references) //IL_0e8c: Unknown result type (might be due to invalid IL or missing references) //IL_0ea2: Unknown result type (might be due to invalid IL or missing references) //IL_0eb2: Unknown result type (might be due to invalid IL or missing references) //IL_0ec2: Unknown result type (might be due to invalid IL or missing references) //IL_0ed2: Unknown result type (might be due to invalid IL or missing references) //IL_0ee2: Unknown result type (might be due to invalid IL or missing references) //IL_0ef7: Expected O, but got Unknown //IL_0bda: Unknown result type (might be due to invalid IL or missing references) //IL_0bdf: Unknown result type (might be due to invalid IL or missing references) //IL_0bf5: Unknown result type (might be due to invalid IL or missing references) //IL_0c05: Unknown result type (might be due to invalid IL or missing references) //IL_0c15: Unknown result type (might be due to invalid IL or missing references) //IL_0c25: Unknown result type (might be due to invalid IL or missing references) //IL_0c35: Unknown result type (might be due to invalid IL or missing references) //IL_0c4a: Expected O, but got Unknown //IL_092d: Unknown result type (might be due to invalid IL or missing references) //IL_0932: Unknown result type (might be due to invalid IL or missing references) //IL_0948: Unknown result type (might be due to invalid IL or missing references) //IL_0958: Unknown result type (might be due to invalid IL or missing references) //IL_0968: Unknown result type (might be due to invalid IL or missing references) //IL_0978: Unknown result type (might be due to invalid IL or missing references) //IL_0988: Unknown result type (might be due to invalid IL or missing references) //IL_099d: Expected O, but got Unknown //IL_11c1: Unknown result type (might be due to invalid IL or missing references) //IL_11c6: Unknown result type (might be due to invalid IL or missing references) //IL_11dc: Unknown result type (might be due to invalid IL or missing references) //IL_11ec: Unknown result type (might be due to invalid IL or missing references) //IL_11fc: Unknown result type (might be due to invalid IL or missing references) //IL_120c: Unknown result type (might be due to invalid IL or missing references) //IL_121c: Unknown result type (might be due to invalid IL or missing references) //IL_1231: Expected O, but got Unknown //IL_0f14: Unknown result type (might be due to invalid IL or missing references) //IL_0f19: Unknown result type (might be due to invalid IL or missing references) //IL_0f2f: Unknown result type (might be due to invalid IL or missing references) //IL_0f3f: Unknown result type (might be due to invalid IL or missing references) //IL_0f4f: Unknown result type (might be due to invalid IL or missing references) //IL_0f5f: Unknown result type (might be due to invalid IL or missing references) //IL_0f6f: Unknown result type (might be due to invalid IL or missing references) //IL_0f84: Expected O, but got Unknown //IL_0c67: Unknown result type (might be due to invalid IL or missing references) //IL_0c6c: Unknown result type (might be due to invalid IL or missing references) //IL_0c82: Unknown result type (might be due to invalid IL or missing references) //IL_0c92: Unknown result type (might be due to invalid IL or missing references) //IL_0ca2: Unknown result type (might be due to invalid IL or missing references) //IL_0cb2: Unknown result type (might be due to invalid IL or missing references) //IL_0cc2: Unknown result type (might be due to invalid IL or missing references) //IL_0cd7: Expected O, but got Unknown //IL_124e: Unknown result type (might be due to invalid IL or missing references) //IL_1253: Unknown result type (might be due to invalid IL or missing references) //IL_1269: Unknown result type (might be due to invalid IL or missing references) //IL_1279: Unknown result type (might be due to invalid IL or missing references) //IL_1289: Unknown result type (might be due to invalid IL or missing references) //IL_1299: Unknown result type (might be due to invalid IL or missing references) //IL_12a9: Unknown result type (might be due to invalid IL or missing references) //IL_12be: Expected O, but got Unknown //IL_0fa1: Unknown result type (might be due to invalid IL or missing references) //IL_0fa6: Unknown result type (might be due to invalid IL or missing references) //IL_0fbc: Unknown result type (might be due to invalid IL or missing references) //IL_0fcc: Unknown result type (might be due to invalid IL or missing references) //IL_0fdc: Unknown result type (might be due to invalid IL or missing references) //IL_0fec: Unknown result type (might be due to invalid IL or missing references) //IL_0ffc: Unknown result type (might be due to invalid IL or missing references) //IL_1011: Expected O, but got Unknown //IL_12db: Unknown result type (might be due to invalid IL or missing references) //IL_12e0: Unknown result type (might be due to invalid IL or missing references) //IL_12f6: Unknown result type (might be due to invalid IL or missing references) //IL_1306: Unknown result type (might be due to invalid IL or missing references) //IL_1316: Unknown result type (might be due to invalid IL or missing references) //IL_1326: Unknown result type (might be due to invalid IL or missing references) //IL_1336: Unknown result type (might be due to invalid IL or missing references) //IL_134b: Expected O, but got Unknown if (EasyBossConfigPlugin.EikthyrToggle.Value == EasyBossConfigPlugin.Toggle.On) { if (!Object.op_Implicit((Object)(object)__instance)) { return; } GameObject prefab = __instance.GetPrefab("Eikthyr"); if (!Object.op_Implicit((Object)(object)prefab)) { return; } CharacterDrop component = prefab.GetComponent<CharacterDrop>(); if (!Object.op_Implicit((Object)(object)component)) { return; } component.m_drops.Clear(); if (EasyBossConfigPlugin.drop1Toggle.Value == EasyBossConfigPlugin.Toggle.On) { component.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss1Drop1.Value), m_amountMin = EasyBossConfigPlugin.drop1min.Value, m_amountMax = EasyBossConfigPlugin.drop1max.Value, m_chance = EasyBossConfigPlugin.drop1chance.Value, m_onePerPlayer = EasyBossConfigPlugin.drop1onePerPlayer.Value, m_levelMultiplier = EasyBossConfigPlugin.drop1multiplier.Value }); } if (EasyBossConfigPlugin.drop2Toggle.Value == EasyBossConfigPlugin.Toggle.On) { component.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss1Drop2.Value), m_amountMin = EasyBossConfigPlugin.drop2min.Value, m_amountMax = EasyBossConfigPlugin.drop2max.Value, m_chance = EasyBossConfigPlugin.drop2chance.Value, m_onePerPlayer = EasyBossConfigPlugin.drop2onePerPlayer.Value, m_levelMultiplier = EasyBossConfigPlugin.drop2multiplier.Value }); } if (EasyBossConfigPlugin.drop3Toggle.Value == EasyBossConfigPlugin.Toggle.On) { component.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss1Drop3.Value), m_amountMin = EasyBossConfigPlugin.drop3min.Value, m_amountMax = EasyBossConfigPlugin.drop3max.Value, m_chance = EasyBossConfigPlugin.drop3chance.Value, m_onePerPlayer = EasyBossConfigPlugin.drop3onePerPlayer.Value, m_levelMultiplier = EasyBossConfigPlugin.drop3multiplier.Value }); } if (EasyBossConfigPlugin.drop4Toggle.Value == EasyBossConfigPlugin.Toggle.On) { component.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss1Drop4.Value), m_amountMin = EasyBossConfigPlugin.drop4min.Value, m_amountMax = EasyBossConfigPlugin.drop4max.Value, m_chance = EasyBossConfigPlugin.drop4chance.Value, m_onePerPlayer = EasyBossConfigPlugin.drop4onePerPlayer.Value, m_levelMultiplier = EasyBossConfigPlugin.drop4multiplier.Value }); } if (EasyBossConfigPlugin.drop5Toggle.Value == EasyBossConfigPlugin.Toggle.On) { component.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss1Drop5.Value), m_amountMin = EasyBossConfigPlugin.drop5min.Value, m_amountMax = EasyBossConfigPlugin.drop5max.Value, m_chance = EasyBossConfigPlugin.drop5chance.Value, m_onePerPlayer = EasyBossConfigPlugin.drop5onePerPlayer.Value, m_levelMultiplier = EasyBossConfigPlugin.drop5multiplier.Value }); } } if (EasyBossConfigPlugin.ElderToggle.Value == EasyBossConfigPlugin.Toggle.On) { if (!Object.op_Implicit((Object)(object)__instance)) { return; } GameObject prefab2 = __instance.GetPrefab("gd_king"); if (!Object.op_Implicit((Object)(object)prefab2)) { return; } CharacterDrop component2 = prefab2.GetComponent<CharacterDrop>(); if (!Object.op_Implicit((Object)(object)component2)) { return; } component2.m_drops.Clear(); if (EasyBossConfigPlugin.drop1ToggleE.Value == EasyBossConfigPlugin.Toggle.On) { component2.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss2Drop1.Value), m_amountMin = EasyBossConfigPlugin.drop1minE.Value, m_amountMax = EasyBossConfigPlugin.drop1maxE.Value, m_chance = EasyBossConfigPlugin.drop1chanceE.Value, m_onePerPlayer = EasyBossConfigPlugin.drop1onePerPlayerE.Value, m_levelMultiplier = EasyBossConfigPlugin.drop1multiplierE.Value }); } if (EasyBossConfigPlugin.drop2ToggleE.Value == EasyBossConfigPlugin.Toggle.On) { component2.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss2Drop2.Value), m_amountMin = EasyBossConfigPlugin.drop2minE.Value, m_amountMax = EasyBossConfigPlugin.drop2maxE.Value, m_chance = EasyBossConfigPlugin.drop2chanceE.Value, m_onePerPlayer = EasyBossConfigPlugin.drop2onePerPlayerE.Value, m_levelMultiplier = EasyBossConfigPlugin.drop2multiplierE.Value }); } if (EasyBossConfigPlugin.drop3ToggleE.Value == EasyBossConfigPlugin.Toggle.On) { component2.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss2Drop3.Value), m_amountMin = EasyBossConfigPlugin.drop3minE.Value, m_amountMax = EasyBossConfigPlugin.drop3maxE.Value, m_chance = EasyBossConfigPlugin.drop3chanceE.Value, m_onePerPlayer = EasyBossConfigPlugin.drop3onePerPlayerE.Value, m_levelMultiplier = EasyBossConfigPlugin.drop3multiplierE.Value }); } if (EasyBossConfigPlugin.drop4ToggleE.Value == EasyBossConfigPlugin.Toggle.On) { component2.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss2Drop4.Value), m_amountMin = EasyBossConfigPlugin.drop4minE.Value, m_amountMax = EasyBossConfigPlugin.drop4maxE.Value, m_chance = EasyBossConfigPlugin.drop4chanceE.Value, m_onePerPlayer = EasyBossConfigPlugin.drop4onePerPlayerE.Value, m_levelMultiplier = EasyBossConfigPlugin.drop4multiplierE.Value }); } if (EasyBossConfigPlugin.drop5ToggleE.Value == EasyBossConfigPlugin.Toggle.On) { component2.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss2Drop5.Value), m_amountMin = EasyBossConfigPlugin.drop5minE.Value, m_amountMax = EasyBossConfigPlugin.drop5maxE.Value, m_chance = EasyBossConfigPlugin.drop5chanceE.Value, m_onePerPlayer = EasyBossConfigPlugin.drop5onePerPlayerE.Value, m_levelMultiplier = EasyBossConfigPlugin.drop5multiplierE.Value }); } } if (EasyBossConfigPlugin.BonemassToggle.Value == EasyBossConfigPlugin.Toggle.On) { if (!Object.op_Implicit((Object)(object)__instance)) { return; } GameObject prefab3 = __instance.GetPrefab("Bonemass"); if (!Object.op_Implicit((Object)(object)prefab3)) { return; } CharacterDrop component3 = prefab3.GetComponent<CharacterDrop>(); if (!Object.op_Implicit((Object)(object)component3)) { return; } component3.m_drops.Clear(); if (EasyBossConfigPlugin.drop1ToggleB.Value == EasyBossConfigPlugin.Toggle.On) { component3.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss3Drop1.Value), m_amountMin = EasyBossConfigPlugin.drop1minB.Value, m_amountMax = EasyBossConfigPlugin.drop1maxB.Value, m_chance = EasyBossConfigPlugin.drop1chanceB.Value, m_onePerPlayer = EasyBossConfigPlugin.drop1onePerPlayerB.Value, m_levelMultiplier = EasyBossConfigPlugin.drop1multiplierB.Value }); } if (EasyBossConfigPlugin.drop2ToggleB.Value == EasyBossConfigPlugin.Toggle.On) { component3.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss3Drop2.Value), m_amountMin = EasyBossConfigPlugin.drop2minB.Value, m_amountMax = EasyBossConfigPlugin.drop2maxB.Value, m_chance = EasyBossConfigPlugin.drop2chanceB.Value, m_onePerPlayer = EasyBossConfigPlugin.drop2onePerPlayerB.Value, m_levelMultiplier = EasyBossConfigPlugin.drop2multiplierB.Value }); } if (EasyBossConfigPlugin.drop3ToggleB.Value == EasyBossConfigPlugin.Toggle.On) { component3.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss3Drop3.Value), m_amountMin = EasyBossConfigPlugin.drop3minB.Value, m_amountMax = EasyBossConfigPlugin.drop3maxB.Value, m_chance = EasyBossConfigPlugin.drop3chanceB.Value, m_onePerPlayer = EasyBossConfigPlugin.drop3onePerPlayerB.Value, m_levelMultiplier = EasyBossConfigPlugin.drop3multiplierB.Value }); } if (EasyBossConfigPlugin.drop4ToggleB.Value == EasyBossConfigPlugin.Toggle.On) { component3.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss3Drop4.Value), m_amountMin = EasyBossConfigPlugin.drop4minB.Value, m_amountMax = EasyBossConfigPlugin.drop4maxB.Value, m_chance = EasyBossConfigPlugin.drop4chanceB.Value, m_onePerPlayer = EasyBossConfigPlugin.drop4onePerPlayerB.Value, m_levelMultiplier = EasyBossConfigPlugin.drop4multiplierB.Value }); } if (EasyBossConfigPlugin.drop5ToggleB.Value == EasyBossConfigPlugin.Toggle.On) { component3.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss3Drop5.Value), m_amountMin = EasyBossConfigPlugin.drop5minB.Value, m_amountMax = EasyBossConfigPlugin.drop5maxB.Value, m_chance = EasyBossConfigPlugin.drop5chanceB.Value, m_onePerPlayer = EasyBossConfigPlugin.drop5onePerPlayerB.Value, m_levelMultiplier = EasyBossConfigPlugin.drop5multiplierB.Value }); } } if (EasyBossConfigPlugin.ModerToggle.Value == EasyBossConfigPlugin.Toggle.On) { if (!Object.op_Implicit((Object)(object)__instance)) { return; } GameObject prefab4 = __instance.GetPrefab("Dragon"); if (!Object.op_Implicit((Object)(object)prefab4)) { return; } CharacterDrop component4 = prefab4.GetComponent<CharacterDrop>(); if (!Object.op_Implicit((Object)(object)component4)) { return; } component4.m_drops.Clear(); if (EasyBossConfigPlugin.drop1ToggleD.Value == EasyBossConfigPlugin.Toggle.On) { component4.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss4Drop1.Value), m_amountMin = EasyBossConfigPlugin.drop1minD.Value, m_amountMax = EasyBossConfigPlugin.drop1maxD.Value, m_chance = EasyBossConfigPlugin.drop1chanceD.Value, m_onePerPlayer = EasyBossConfigPlugin.drop1onePerPlayerD.Value, m_levelMultiplier = EasyBossConfigPlugin.drop1multiplierD.Value }); } if (EasyBossConfigPlugin.drop2ToggleD.Value == EasyBossConfigPlugin.Toggle.On) { component4.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss4Drop2.Value), m_amountMin = EasyBossConfigPlugin.drop2minD.Value, m_amountMax = EasyBossConfigPlugin.drop2maxD.Value, m_chance = EasyBossConfigPlugin.drop2chanceD.Value, m_onePerPlayer = EasyBossConfigPlugin.drop2onePerPlayerD.Value, m_levelMultiplier = EasyBossConfigPlugin.drop2multiplierD.Value }); } if (EasyBossConfigPlugin.drop3ToggleD.Value == EasyBossConfigPlugin.Toggle.On) { component4.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss4Drop3.Value), m_amountMin = EasyBossConfigPlugin.drop3minD.Value, m_amountMax = EasyBossConfigPlugin.drop3maxD.Value, m_chance = EasyBossConfigPlugin.drop3chanceD.Value, m_onePerPlayer = EasyBossConfigPlugin.drop3onePerPlayerD.Value, m_levelMultiplier = EasyBossConfigPlugin.drop3multiplierD.Value }); } if (EasyBossConfigPlugin.drop4ToggleD.Value == EasyBossConfigPlugin.Toggle.On) { component4.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss4Drop4.Value), m_amountMin = EasyBossConfigPlugin.drop4minD.Value, m_amountMax = EasyBossConfigPlugin.drop4maxD.Value, m_chance = EasyBossConfigPlugin.drop4chanceD.Value, m_onePerPlayer = EasyBossConfigPlugin.drop4onePerPlayerD.Value, m_levelMultiplier = EasyBossConfigPlugin.drop4multiplierD.Value }); } if (EasyBossConfigPlugin.drop5ToggleD.Value == EasyBossConfigPlugin.Toggle.On) { component4.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss4Drop5.Value), m_amountMin = EasyBossConfigPlugin.drop5minD.Value, m_amountMax = EasyBossConfigPlugin.drop5maxD.Value, m_chance = EasyBossConfigPlugin.drop5chanceD.Value, m_onePerPlayer = EasyBossConfigPlugin.drop5onePerPlayerD.Value, m_levelMultiplier = EasyBossConfigPlugin.drop5multiplierD.Value }); } } if (EasyBossConfigPlugin.YagluthToggle.Value == EasyBossConfigPlugin.Toggle.On) { if (!Object.op_Implicit((Object)(object)__instance)) { return; } GameObject prefab5 = __instance.GetPrefab("GoblinKing"); if (!Object.op_Implicit((Object)(object)prefab5)) { return; } CharacterDrop component5 = prefab5.GetComponent<CharacterDrop>(); if (!Object.op_Implicit((Object)(object)component5)) { return; } component5.m_drops.Clear(); if (EasyBossConfigPlugin.drop1ToggleY.Value == EasyBossConfigPlugin.Toggle.On) { component5.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss5Drop1.Value), m_amountMin = EasyBossConfigPlugin.drop1minY.Value, m_amountMax = EasyBossConfigPlugin.drop1maxY.Value, m_chance = EasyBossConfigPlugin.drop1chanceY.Value, m_onePerPlayer = EasyBossConfigPlugin.drop1onePerPlayerY.Value, m_levelMultiplier = EasyBossConfigPlugin.drop1multiplierY.Value }); } if (EasyBossConfigPlugin.drop2ToggleY.Value == EasyBossConfigPlugin.Toggle.On) { component5.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss5Drop2.Value), m_amountMin = EasyBossConfigPlugin.drop2minY.Value, m_amountMax = EasyBossConfigPlugin.drop2maxY.Value, m_chance = EasyBossConfigPlugin.drop2chanceY.Value, m_onePerPlayer = EasyBossConfigPlugin.drop2onePerPlayerY.Value, m_levelMultiplier = EasyBossConfigPlugin.drop2multiplierY.Value }); } if (EasyBossConfigPlugin.drop3ToggleY.Value == EasyBossConfigPlugin.Toggle.On) { component5.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss5Drop3.Value), m_amountMin = EasyBossConfigPlugin.drop3minY.Value, m_amountMax = EasyBossConfigPlugin.drop3maxY.Value, m_chance = EasyBossConfigPlugin.drop3chanceY.Value, m_onePerPlayer = EasyBossConfigPlugin.drop3onePerPlayerY.Value, m_levelMultiplier = EasyBossConfigPlugin.drop3multiplierY.Value }); } if (EasyBossConfigPlugin.drop4ToggleY.Value == EasyBossConfigPlugin.Toggle.On) { component5.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss5Drop4.Value), m_amountMin = EasyBossConfigPlugin.drop4minY.Value, m_amountMax = EasyBossConfigPlugin.drop4maxY.Value, m_chance = EasyBossConfigPlugin.drop4chanceY.Value, m_onePerPlayer = EasyBossConfigPlugin.drop4onePerPlayerY.Value, m_levelMultiplier = EasyBossConfigPlugin.drop4multiplierY.Value }); } if (EasyBossConfigPlugin.drop5ToggleY.Value == EasyBossConfigPlugin.Toggle.On) { component5.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss5Drop5.Value), m_amountMin = EasyBossConfigPlugin.drop5minY.Value, m_amountMax = EasyBossConfigPlugin.drop5maxY.Value, m_chance = EasyBossConfigPlugin.drop5chanceY.Value, m_onePerPlayer = EasyBossConfigPlugin.drop5onePerPlayerY.Value, m_levelMultiplier = EasyBossConfigPlugin.drop5multiplierY.Value }); } } if (EasyBossConfigPlugin.QueenToggle.Value != EasyBossConfigPlugin.Toggle.On || !Object.op_Implicit((Object)(object)__instance)) { return; } GameObject prefab6 = __instance.GetPrefab("SeekerQueen"); if (!Object.op_Implicit((Object)(object)prefab6)) { return; } CharacterDrop component6 = prefab6.GetComponent<CharacterDrop>(); if (Object.op_Implicit((Object)(object)component6)) { component6.m_drops.Clear(); if (EasyBossConfigPlugin.drop1ToggleQ.Value == EasyBossConfigPlugin.Toggle.On) { component6.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss6Drop1.Value), m_amountMin = EasyBossConfigPlugin.drop1minQ.Value, m_amountMax = EasyBossConfigPlugin.drop1maxQ.Value, m_chance = EasyBossConfigPlugin.drop1chanceQ.Value, m_onePerPlayer = EasyBossConfigPlugin.drop1onePerPlayerQ.Value, m_levelMultiplier = EasyBossConfigPlugin.drop1multiplierQ.Value }); } if (EasyBossConfigPlugin.drop2ToggleQ.Value == EasyBossConfigPlugin.Toggle.On) { component6.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss6Drop2.Value), m_amountMin = EasyBossConfigPlugin.drop2minQ.Value, m_amountMax = EasyBossConfigPlugin.drop2maxQ.Value, m_chance = EasyBossConfigPlugin.drop2chanceQ.Value, m_onePerPlayer = EasyBossConfigPlugin.drop2onePerPlayerQ.Value, m_levelMultiplier = EasyBossConfigPlugin.drop2multiplierQ.Value }); } if (EasyBossConfigPlugin.drop3ToggleQ.Value == EasyBossConfigPlugin.Toggle.On) { component6.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss6Drop3.Value), m_amountMin = EasyBossConfigPlugin.drop3minQ.Value, m_amountMax = EasyBossConfigPlugin.drop3maxQ.Value, m_chance = EasyBossConfigPlugin.drop3chanceQ.Value, m_onePerPlayer = EasyBossConfigPlugin.drop3onePerPlayerQ.Value, m_levelMultiplier = EasyBossConfigPlugin.drop3multiplierQ.Value }); } if (EasyBossConfigPlugin.drop4ToggleQ.Value == EasyBossConfigPlugin.Toggle.On) { component6.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss6Drop4.Value), m_amountMin = EasyBossConfigPlugin.drop4minQ.Value, m_amountMax = EasyBossConfigPlugin.drop4maxQ.Value, m_chance = EasyBossConfigPlugin.drop4chanceQ.Value, m_onePerPlayer = EasyBossConfigPlugin.drop4onePerPlayerQ.Value, m_levelMultiplier = EasyBossConfigPlugin.drop4multiplierQ.Value }); } if (EasyBossConfigPlugin.drop5ToggleQ.Value == EasyBossConfigPlugin.Toggle.On) { component6.m_drops.Add(new Drop { m_prefab = __instance.GetPrefab(EasyBossConfigPlugin.boss6Drop5.Value), m_amountMin = EasyBossConfigPlugin.drop5minQ.Value, m_amountMax = EasyBossConfigPlugin.drop5maxQ.Value, m_chance = EasyBossConfigPlugin.drop5chanceQ.Value, m_onePerPlayer = EasyBossConfigPlugin.drop5onePerPlayerQ.Value, m_levelMultiplier = EasyBossConfigPlugin.drop5multiplierQ.Value }); } } } } } [<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(0)] [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] [BepInPlugin("coemt.EasyBossConfig", "EasyBossConfig", "0.0.5")] public class EasyBossConfigPlugin : BaseUnityPlugin { [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [UsedImplicitly] [<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(2)] public string Category; [<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(new byte[] { 2, 1 })] [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer; } [<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(0)] private class AcceptableShortcuts : AcceptableValueBase { public AcceptableShortcuts() : base(typeof(KeyboardShortcut)) { } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return true; } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", KeyboardShortcut.AllKeyCodes); } } internal const string ModName = "EasyBossConfig"; internal const string ModVersion = "0.0.5"; internal const string Author = "coemt"; private const string ModGUID = "coemt.EasyBossConfig"; private static string ConfigFileName = "coemt.EasyBossConfig.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("coemt.EasyBossConfig"); public static readonly ManualLogSource EasyBossConfigLogger; private static readonly ConfigSync ConfigSync; public Texture2D tex; private Sprite mySprite; private SpriteRenderer sr; private static ConfigEntry<Toggle> _serverConfigLocked; public static ConfigEntry<Toggle> EikthyrToggle; public static ConfigEntry<Toggle> drop1Toggle; public static ConfigEntry<string> boss1Drop1; public static ConfigEntry<int> drop1min; public static ConfigEntry<int> drop1max; public static ConfigEntry<float> drop1chance; public static ConfigEntry<bool> drop1onePerPlayer; public static ConfigEntry<bool> drop1multiplier; public static ConfigEntry<Toggle> drop2Toggle; public static ConfigEntry<string> boss1Drop2; public static ConfigEntry<int> drop2min; public static ConfigEntry<int> drop2max; public static ConfigEntry<float> drop2chance; public static ConfigEntry<bool> drop2onePerPlayer; public static ConfigEntry<bool> drop2multiplier; public static ConfigEntry<Toggle> drop3Toggle; public static ConfigEntry<string> boss1Drop3; public static ConfigEntry<int> drop3min; public static ConfigEntry<int> drop3max; public static ConfigEntry<float> drop3chance; public static ConfigEntry<bool> drop3onePerPlayer; public static ConfigEntry<bool> drop3multiplier; public static ConfigEntry<Toggle> drop4Toggle; public static ConfigEntry<string> boss1Drop4; public static ConfigEntry<int> drop4min; public static ConfigEntry<int> drop4max; public static ConfigEntry<float> drop4chance; public static ConfigEntry<bool> drop4onePerPlayer; public static ConfigEntry<bool> drop4multiplier; public static ConfigEntry<Toggle> drop5Toggle; public static ConfigEntry<string> boss1Drop5; public static ConfigEntry<int> drop5min; public static ConfigEntry<int> drop5max; public static ConfigEntry<float> drop5chance; public static ConfigEntry<bool> drop5onePerPlayer; public static ConfigEntry<bool> drop5multiplier; public static ConfigEntry<Toggle> ElderToggle; public static ConfigEntry<Toggle> drop1ToggleE; public static ConfigEntry<string> boss2Drop1; public static ConfigEntry<int> drop1minE; public static ConfigEntry<int> drop1maxE; public static ConfigEntry<float> drop1chanceE; public static ConfigEntry<bool> drop1onePerPlayerE; public static ConfigEntry<bool> drop1multiplierE; public static ConfigEntry<Toggle> drop2ToggleE; public static ConfigEntry<string> boss2Drop2; public static ConfigEntry<int> drop2minE; public static ConfigEntry<int> drop2maxE; public static ConfigEntry<float> drop2chanceE; public static ConfigEntry<bool> drop2onePerPlayerE; public static ConfigEntry<bool> drop2multiplierE; public static ConfigEntry<Toggle> drop3ToggleE; public static ConfigEntry<string> boss2Drop3; public static ConfigEntry<int> drop3minE; public static ConfigEntry<int> drop3maxE; public static ConfigEntry<float> drop3chanceE; public static ConfigEntry<bool> drop3onePerPlayerE; public static ConfigEntry<bool> drop3multiplierE; public static ConfigEntry<Toggle> drop4ToggleE; public static ConfigEntry<string> boss2Drop4; public static ConfigEntry<int> drop4minE; public static ConfigEntry<int> drop4maxE; public static ConfigEntry<float> drop4chanceE; public static ConfigEntry<bool> drop4onePerPlayerE; public static ConfigEntry<bool> drop4multiplierE; public static ConfigEntry<Toggle> drop5ToggleE; public static ConfigEntry<string> boss2Drop5; public static ConfigEntry<int> drop5minE; public static ConfigEntry<int> drop5maxE; public static ConfigEntry<float> drop5chanceE; public static ConfigEntry<bool> drop5onePerPlayerE; public static ConfigEntry<bool> drop5multiplierE; public static ConfigEntry<Toggle> BonemassToggle; public static ConfigEntry<Toggle> drop1ToggleB; public static ConfigEntry<string> boss3Drop1; public static ConfigEntry<int> drop1minB; public static ConfigEntry<int> drop1maxB; public static ConfigEntry<float> drop1chanceB; public static ConfigEntry<bool> drop1onePerPlayerB; public static ConfigEntry<bool> drop1multiplierB; public static ConfigEntry<Toggle> drop2ToggleB; public static ConfigEntry<string> boss3Drop2; public static ConfigEntry<int> drop2minB; public static ConfigEntry<int> drop2maxB; public static ConfigEntry<float> drop2chanceB; public static ConfigEntry<bool> drop2onePerPlayerB; public static ConfigEntry<bool> drop2multiplierB; public static ConfigEntry<Toggle> drop3ToggleB; public static ConfigEntry<string> boss3Drop3; public static ConfigEntry<int> drop3minB; public static ConfigEntry<int> drop3maxB; public static ConfigEntry<float> drop3chanceB; public static ConfigEntry<bool> drop3onePerPlayerB; public static ConfigEntry<bool> drop3multiplierB; public static ConfigEntry<Toggle> drop4ToggleB; public static ConfigEntry<string> boss3Drop4; public static ConfigEntry<int> drop4minB; public static ConfigEntry<int> drop4maxB; public static ConfigEntry<float> drop4chanceB; public static ConfigEntry<bool> drop4onePerPlayerB; public static ConfigEntry<bool> drop4multiplierB; public static ConfigEntry<Toggle> drop5ToggleB; public static ConfigEntry<string> boss3Drop5; public static ConfigEntry<int> drop5minB; public static ConfigEntry<int> drop5maxB; public static ConfigEntry<float> drop5chanceB; public static ConfigEntry<bool> drop5onePerPlayerB; public static ConfigEntry<bool> drop5multiplierB; public static ConfigEntry<Toggle> ModerToggle; public static ConfigEntry<Toggle> drop1ToggleD; public static ConfigEntry<string> boss4Drop1; public static ConfigEntry<int> drop1minD; public static ConfigEntry<int> drop1maxD; public static ConfigEntry<float> drop1chanceD; public static ConfigEntry<bool> drop1onePerPlayerD; public static ConfigEntry<bool> drop1multiplierD; public static ConfigEntry<Toggle> drop2ToggleD; public static ConfigEntry<string> boss4Drop2; public static ConfigEntry<int> drop2minD; public static ConfigEntry<int> drop2maxD; public static ConfigEntry<float> drop2chanceD; public static ConfigEntry<bool> drop2onePerPlayerD; public static ConfigEntry<bool> drop2multiplierD; public static ConfigEntry<Toggle> drop3ToggleD; public static ConfigEntry<string> boss4Drop3; public static ConfigEntry<int> drop3minD; public static ConfigEntry<int> drop3maxD; public static ConfigEntry<float> drop3chanceD; public static ConfigEntry<bool> drop3onePerPlayerD; public static ConfigEntry<bool> drop3multiplierD; public static ConfigEntry<Toggle> drop4ToggleD; public static ConfigEntry<string> boss4Drop4; public static ConfigEntry<int> drop4minD; public static ConfigEntry<int> drop4maxD; public static ConfigEntry<float> drop4chanceD; public static ConfigEntry<bool> drop4onePerPlayerD; public static ConfigEntry<bool> drop4multiplierD; public static ConfigEntry<Toggle> drop5ToggleD; public static ConfigEntry<string> boss4Drop5; public static ConfigEntry<int> drop5minD; public static ConfigEntry<int> drop5maxD; public static ConfigEntry<float> drop5chanceD; public static ConfigEntry<bool> drop5onePerPlayerD; public static ConfigEntry<bool> drop5multiplierD; public static ConfigEntry<Toggle> YagluthToggle; public static ConfigEntry<Toggle> drop1ToggleY; public static ConfigEntry<string> boss5Drop1; public static ConfigEntry<int> drop1minY; public static ConfigEntry<int> drop1maxY; public static ConfigEntry<float> drop1chanceY; public static ConfigEntry<bool> drop1onePerPlayerY; public static ConfigEntry<bool> drop1multiplierY; public static ConfigEntry<Toggle> drop2ToggleY; public static ConfigEntry<string> boss5Drop2; public static ConfigEntry<int> drop2minY; public static ConfigEntry<int> drop2maxY; public static ConfigEntry<float> drop2chanceY; public static ConfigEntry<bool> drop2onePerPlayerY; public static ConfigEntry<bool> drop2multiplierY; public static ConfigEntry<Toggle> drop3ToggleY; public static ConfigEntry<string> boss5Drop3; public static ConfigEntry<int> drop3minY; public static ConfigEntry<int> drop3maxY; public static ConfigEntry<float> drop3chanceY; public static ConfigEntry<bool> drop3onePerPlayerY; public static ConfigEntry<bool> drop3multiplierY; public static ConfigEntry<Toggle> drop4ToggleY; public static ConfigEntry<string> boss5Drop4; public static ConfigEntry<int> drop4minY; public static ConfigEntry<int> drop4maxY; public static ConfigEntry<float> drop4chanceY; public static ConfigEntry<bool> drop4onePerPlayerY; public static ConfigEntry<bool> drop4multiplierY; public static ConfigEntry<Toggle> drop5ToggleY; public static ConfigEntry<string> boss5Drop5; public static ConfigEntry<int> drop5minY; public static ConfigEntry<int> drop5maxY; public static ConfigEntry<float> drop5chanceY; public static ConfigEntry<bool> drop5onePerPlayerY; public static ConfigEntry<bool> drop5multiplierY; public static ConfigEntry<Toggle> QueenToggle; public static ConfigEntry<Toggle> drop1ToggleQ; public static ConfigEntry<string> boss6Drop1; public static ConfigEntry<int> drop1minQ; public static ConfigEntry<int> drop1maxQ; public static ConfigEntry<float> drop1chanceQ; public static ConfigEntry<bool> drop1onePerPlayerQ; public static ConfigEntry<bool> drop1multiplierQ; public static ConfigEntry<Toggle> drop2ToggleQ; public static ConfigEntry<string> boss6Drop2; public static ConfigEntry<int> drop2minQ; public static ConfigEntry<int> drop2maxQ; public static ConfigEntry<float> drop2chanceQ; public static ConfigEntry<bool> drop2onePerPlayerQ; public static ConfigEntry<bool> drop2multiplierQ; public static ConfigEntry<Toggle> drop3ToggleQ; public static ConfigEntry<string> boss6Drop3; public static ConfigEntry<int> drop3minQ; public static ConfigEntry<int> drop3maxQ; public static ConfigEntry<float> drop3chanceQ; public static ConfigEntry<bool> drop3onePerPlayerQ; public static ConfigEntry<bool> drop3multiplierQ; public static ConfigEntry<Toggle> drop4ToggleQ; public static ConfigEntry<string> boss6Drop4; public static ConfigEntry<int> drop4minQ; public static ConfigEntry<int> drop4maxQ; public static ConfigEntry<float> drop4chanceQ; public static ConfigEntry<bool> drop4onePerPlayerQ; public static ConfigEntry<bool> drop4multiplierQ; public static ConfigEntry<Toggle> drop5ToggleQ; public static ConfigEntry<string> boss6Drop5; public static ConfigEntry<int> drop5minQ; public static ConfigEntry<int> drop5maxQ; public static ConfigEntry<float> drop5chanceQ; public static ConfigEntry<bool> drop5onePerPlayerQ; public static ConfigEntry<bool> drop5multiplierQ; public void Awake() { _serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); EikthyrToggle = config("2 - Eikthyr", "Toggle Eikthyr", Toggle.On, "If on, Eikthyr config below is available"); drop1Toggle = config("2 - Eikthyr", "Toggle Drop 1", Toggle.On, "If on, Drop 1 below is available, must use correct prefab name!"); boss1Drop1 = config("2 - Eikthyr", "Drop 1 Prefab", "HardAntler", "Enter the Prefab name"); drop1min = config("2 - Eikthyr", "Drop 1 Amount Minimum", 3, "The minimum drop amount"); drop1max = config("2 - Eikthyr", "Drop 1 Amount Maximum", 3, "The maximum drop amount"); drop1chance = config("2 - Eikthyr", "Drop 1 Chance", 1f, "The chance to drop"); drop1onePerPlayer = config("2 - Eikthyr", "Drop 1 One per player?", value: false, "Should it drop 1 per player?"); drop1multiplier = config("2 - Eikthyr", "Drop 1 Multiplier", value: false, "Multiply drops if has stars"); drop2Toggle = config("2 - Eikthyr", "Toggle Drop 2", Toggle.On, "If on, Drop 2 below is available, must use correct prefab name!"); boss1Drop2 = config("2 - Eikthyr", "Drop 2 Prefab", "TrophyEikthyr", "Enter the Prefab name"); drop2min = config("2 - Eikthyr", "Drop 2 Amount Minimum", 1, "The minimum drop amount"); drop2max = config("2 - Eikthyr", "Drop 2 Amount Maximum", 1, "The maximum drop amount"); drop2chance = config("2 - Eikthyr", "Drop 2 Chance", 1f, "The chance to drop"); drop2onePerPlayer = config("2 - Eikthyr", "Drop 2 One per player?", value: false, "Should it drop 1 per player?"); drop2multiplier = config("2 - Eikthyr", "Drop 2 Multiplier", value: false, "Multiply drops if has stars"); drop3Toggle = config("2 - Eikthyr", "Toggle Drop 3", Toggle.Off, "If on, Drop 3 below is available, must use correct prefab name!"); boss1Drop3 = config("2 - Eikthyr", "Drop 3 Prefab", "Finewood", "Enter the Prefab name"); drop3min = config("2 - Eikthyr", "Drop 3 Amount Minimum", 1, "The minimum drop amount"); drop3max = config("2 - Eikthyr", "Drop 3 Amount Maximum", 1, "The maximum drop amount"); drop3chance = config("2 - Eikthyr", "Drop 3 Chance", 1f, "The chance to drop"); drop3onePerPlayer = config("2 - Eikthyr", "Drop 3 One per player?", value: false, "Should it drop 1 per player?"); drop3multiplier = config("2 - Eikthyr", "Drop 3 Multiplier", value: false, "Multiply drops if has stars"); drop4Toggle = config("2 - Eikthyr", "Toggle Drop 4", Toggle.Off, "If on, Drop 4 below is available, must use correct prefab name!"); boss1Drop4 = config("2 - Eikthyr", "Drop 4 Prefab", "Finewood", "Enter the Prefab name"); drop4min = config("2 - Eikthyr", "Drop 4 Amount Minimum", 1, "The minimum drop amount"); drop4max = config("2 - Eikthyr", "Drop 4 Amount Maximum", 1, "The maximum drop amount"); drop4chance = config("2 - Eikthyr", "Drop 4 Chance", 1f, "The chance to drop"); drop4onePerPlayer = config("2 - Eikthyr", "Drop 4 One per player?", value: false, "Should it drop 1 per player?"); drop4multiplier = config("2 - Eikthyr", "Drop 4 Multiplier", value: false, "Multiply drops if has stars"); drop5Toggle = config("2 - Eikthyr", "Toggle Drop 5", Toggle.Off, "If on, Drop 5 below is available, must use correct prefab name!"); boss1Drop5 = config("2 - Eikthyr", "Drop 5 Prefab", "Finewood", "Enter the Prefab name"); drop5min = config("2 - Eikthyr", "Drop 5 Amount Minimum", 1, "The minimum drop amount"); drop5max = config("2 - Eikthyr", "Drop 5 Amount Maximum", 1, "The maximum drop amount"); drop5chance = config("2 - Eikthyr", "Drop 5 Chance", 1f, "The chance to drop"); drop5onePerPlayer = config("2 - Eikthyr", "Drop 5 One per player?", value: false, "Should it drop 1 per player?"); drop5multiplier = config("2 - Eikthyr", "Drop 5 Multiplier", value: false, "Multiply drops if has stars"); ElderToggle = config("3 - Elder", "Toggle Elder", Toggle.On, "If on, Elder config below is available"); drop1ToggleE = config("3 - Elder", "Toggle Drop 1", Toggle.On, "If on, Drop 1 below is available, must use correct prefab name!"); boss2Drop1 = config("3 - Elder", "Drop 1 Prefab", "CryptKey", "Enter the Prefab name"); drop1minE = config("3 - Elder", "Drop 1 Amount Minimum", 1, "The minimum drop amount"); drop1maxE = config("3 - Elder", "Drop 1 Amount Maximum", 1, "The maximum drop amount"); drop1chanceE = config("3 - Elder", "Drop 1 Chance", 1f, "The chance to drop"); drop1onePerPlayerE = config("3 - Elder", "Drop 1 One per player?", value: true, "Should it drop 1 per player?"); drop1multiplierE = config("3 - Elder", "Drop 1 Multiplier", value: false, "Multiply drops if has stars"); drop2ToggleE = config("3 - Elder", "Toggle Drop 2", Toggle.On, "If on, Drop 2 below is available, must use correct prefab name!"); boss2Drop2 = config("3 - Elder", "Drop 2 Prefab", "TrophyTheElder", "Enter the Prefab name"); drop2minE = config("3 - Elder", "Drop 2 Amount Minimum", 1, "The minimum drop amount"); drop2maxE = config("3 - Elder", "Drop 2 Amount Maximum", 1, "The maximum drop amount"); drop2chanceE = config("3 - Elder", "Drop 2 Chance", 1f, "The chance to drop"); drop2onePerPlayerE = config("3 - Elder", "Drop 2 One per player?", value: false, "Should it drop 1 per player?"); drop2multiplierE = config("3 - Elder", "Drop 2 Multiplier", value: false, "Multiply drops if has stars"); drop3ToggleE = config("3 - Elder", "Toggle Drop 3", Toggle.Off, "If on, Drop 3 below is available, must use correct prefab name!"); boss2Drop3 = config("3 - Elder", "Drop 3 Prefab", "Finewood", "Enter the Prefab name"); drop3minE = config("3 - Elder", "Drop 3 Amount Minimum", 1, "The minimum drop amount"); drop3maxE = config("3 - Elder", "Drop 3 Amount Maximum", 1, "The maximum drop amount"); drop3chanceE = config("3 - Elder", "Drop 3 Chance", 1f, "The chance to drop"); drop3onePerPlayerE = config("3 - Elder", "Drop 3 One per player?", value: false, "Should it drop 1 per player?"); drop3multiplierE = config("3 - Elder", "Drop 3 Multiplier", value: false, "Multiply drops if has stars"); drop4ToggleE = config("3 - Elder", "Toggle Drop 4", Toggle.Off, "If on, Drop 4 below is available, must use correct prefab name!"); boss2Drop4 = config("3 - Elder", "Drop 4 Prefab", "Finewood", "Enter the Prefab name"); drop4minE = config("3 - Elder", "Drop 4 Amount Minimum", 1, "The minimum drop amount"); drop4maxE = config("3 - Elder", "Drop 4 Amount Maximum", 1, "The maximum drop amount"); drop4chanceE = config("3 - Elder", "Drop 4 Chance", 1f, "The chance to drop"); drop4onePerPlayerE = config("3 - Elder", "Drop 4 One per player?", value: false, "Should it drop 1 per player?"); drop4multiplierE = config("3 - Elder", "Drop 4 Multiplier", value: false, "Multiply drops if has stars"); drop5ToggleE = config("3 - Elder", "Toggle Drop 5", Toggle.Off, "If on, Drop 5 below is available, must use correct prefab name!"); boss2Drop5 = config("3 - Elder", "Drop 5 Prefab", "Finewood", "Enter the Prefab name"); drop5minE = config("3 - Elder", "Drop 5 Amount Minimum", 1, "The minimum drop amount"); drop5maxE = config("3 - Elder", "Drop 5 Amount Maximum", 1, "The maximum drop amount"); drop5chanceE = config("3 - Elder", "Drop 5 Chance", 1f, "The chance to drop"); drop5onePerPlayerE = config("3 - Elder", "Drop 5 One per player?", value: false, "Should it drop 1 per player?"); drop5multiplierE = config("3 - Elder", "Drop 5 Multiplier", value: false, "Multiply drops if has stars"); BonemassToggle = config("4 - Bonemass", "Toggle Bonemass", Toggle.On, "If on, Bonemass config below is available"); drop1ToggleB = config("4 - Bonemass", "Toggle Drop 1", Toggle.On, "If on, Drop 1 below is available, must use correct prefab name!"); boss3Drop1 = config("4 - Bonemass", "Drop 1 Prefab", "Wishbone", "Enter the Prefab name"); drop1minB = config("4 - Bonemass", "Drop 1 Amount Minimum", 1, "The minimum drop amount"); drop1maxB = config("4 - Bonemass", "Drop 1 Amount Maximum", 1, "The maximum drop amount"); drop1chanceB = config("4 - Bonemass", "Drop 1 Chance", 1f, "The chance to drop"); drop1onePerPlayerB = config("4 - Bonemass", "Drop 1 One per player?", value: true, "Should it drop 1 per player?"); drop1multiplierB = config("4 - Bonemass", "Drop 1 Multiplier", value: false, "Multiply drops if has stars"); drop2ToggleB = config("4 - Bonemass", "Toggle Drop 2", Toggle.On, "If on, Drop 2 below is available, must use correct prefab name!"); boss3Drop2 = config("4 - Bonemass", "Drop 2 Prefab", "TrophyBonemass", "Enter the Prefab name"); drop2minB = config("4 - Bonemass", "Drop 2 Amount Minimum", 1, "The minimum drop amount"); drop2maxB = config("4 - Bonemass", "Drop 2 Amount Maximum", 1, "The maximum drop amount"); drop2chanceB = config("4 - Bonemass", "Drop 2 Chance", 1f, "The chance to drop"); drop2onePerPlayerB = config("4 - Bonemass", "Drop 2 One per player?", value: false, "Should it drop 1 per player?"); drop2multiplierB = config("4 - Bonemass", "Drop 2 Multiplier", value: false, "Multiply drops if has stars"); drop3ToggleB = config("4 - Bonemass", "Toggle Drop 3", Toggle.Off, "If on, Drop 3 below is available, must use correct prefab name!"); boss3Drop3 = config("4 - Bonemass", "Drop 3 Prefab", "Finewood", "Enter the Prefab name"); drop3minB = config("4 - Bonemass", "Drop 3 Amount Minimum", 1, "The minimum drop amount"); drop3maxB = config("4 - Bonemass", "Drop 3 Amount Maximum", 1, "The maximum drop amount"); drop3chanceB = config("4 - Bonemass", "Drop 3 Chance", 1f, "The chance to drop"); drop3onePerPlayerB = config("4 - Bonemass", "Drop 3 One per player?", value: false, "Should it drop 1 per player?"); drop3multiplierB = config("4 - Bonemass", "Drop 3 Multiplier", value: false, "Multiply drops if has stars"); drop4ToggleB = config("4 - Bonemass", "Toggle Drop 4", Toggle.Off, "If on, Drop 4 below is available, must use correct prefab name!"); boss3Drop4 = config("4 - Bonemass", "Drop 4 Prefab", "Finewood", "Enter the Prefab name"); drop4minB = config("4 - Bonemass", "Drop 4 Amount Minimum", 1, "The minimum drop amount"); drop4maxB = config("4 - Bonemass", "Drop 4 Amount Maximum", 1, "The maximum drop amount"); drop4chanceB = config("4 - Bonemass", "Drop 4 Chance", 1f, "The chance to drop"); drop4onePerPlayerB = config("4 - Bonemass", "Drop 4 One per player?", value: false, "Should it drop 1 per player?"); drop4multiplierB = config("4 - Bonemass", "Drop 4 Multiplier", value: false, "Multiply drops if has stars"); drop5ToggleB = config("4 - Bonemass", "Toggle Drop 5", Toggle.Off, "If on, Drop 5 below is available, must use correct prefab name!"); boss3Drop5 = config("4 - Bonemass", "Drop 5 Prefab", "Finewood", "Enter the Prefab name"); drop5minB = config("4 - Bonemass", "Drop 5 Amount Minimum", 1, "The minimum drop amount"); drop5maxB = config("4 - Bonemass", "Drop 5 Amount Maximum", 1, "The maximum drop amount"); drop5chanceB = config("4 - Bonemass", "Drop 5 Chance", 1f, "The chance to drop"); drop5onePerPlayerB = config("4 - Bonemass", "Drop 5 One per player?", value: false, "Should it drop 1 per player?"); drop5multiplierB = config("4 - Bonemass", "Drop 5 Multiplier", value: false, "Multiply drops if has stars"); ModerToggle = config("5 - Moder", "Toggle Moder", Toggle.On, "If on, Moder config below is available"); drop1ToggleD = config("5 - Moder", "Toggle Drop 1", Toggle.On, "If on, Drop 1 below is available, must use correct prefab name!"); boss4Drop1 = config("5 - Moder", "Drop 1 Prefab", "DragonTear", "Enter the Prefab name"); drop1minD = config("5 - Moder", "Drop 1 Amount Minimum", 10, "The minimum drop amount"); drop1maxD = config("5 - Moder", "Drop 1 Amount Maximum", 10, "The maximum drop amount"); drop1chanceD = config("5 - Moder", "Drop 1 Chance", 1f, "The chance to drop"); drop1onePerPlayerD = config("5 - Moder", "Drop 1 One per player?", value: false, "Should it drop 1 per player?"); drop1multiplierD = config("5 - Moder", "Drop 1 Multiplier", value: false, "Multiply drops if has stars"); drop2ToggleD = config("5 - Moder", "Toggle Drop 2", Toggle.On, "If on, Drop 2 below is available, must use correct prefab name!"); boss4Drop2 = config("5 - Moder", "Drop 2 Prefab", "TrophyDragonQueen", "Enter the Prefab name"); drop2minD = config("5 - Moder", "Drop 2 Amount Minimum", 1, "The minimum drop amount"); drop2maxD = config("5 - Moder", "Drop 2 Amount Maximum", 1, "The maximum drop amount"); drop2chanceD = config("5 - Moder", "Drop 2 Chance", 1f, "The chance to drop"); drop2onePerPlayerD = config("5 - Moder", "Drop 2 One per player?", value: false, "Should it drop 1 per player?"); drop2multiplierD = config("5 - Moder", "Drop 2 Multiplier", value: false, "Multiply drops if has stars"); drop3ToggleD = config("5 - Moder", "Toggle Drop 3", Toggle.Off, "If on, Drop 3 below is available, must use correct prefab name!"); boss4Drop3 = config("5 - Moder", "Drop 3 Prefab", "Finewood", "Enter the Prefab name"); drop3minD = config("5 - Moder", "Drop 3 Amount Minimum", 1, "The minimum drop amount"); drop3maxD = config("5 - Moder", "Drop 3 Amount Maximum", 1, "The maximum drop amount"); drop3chanceD = config("5 - Moder", "Drop 3 Chance", 1f, "The chance to drop"); drop3onePerPlayerD = config("5 - Moder", "Drop 3 One per player?", value: false, "Should it drop 1 per player?"); drop3multiplierD = config("5 - Moder", "Drop 3 Multiplier", value: false, "Multiply drops if has stars"); drop4ToggleD = config("5 - Moder", "Toggle Drop 4", Toggle.Off, "If on, Drop 4 below is available, must use correct prefab name!"); boss4Drop4 = config("5 - Moder", "Drop 4 Prefab", "Finewood", "Enter the Prefab name"); drop4minD = config("5 - Moder", "Drop 4 Amount Minimum", 1, "The minimum drop amount"); drop4maxD = config("5 - Moder", "Drop 4 Amount Maximum", 1, "The maximum drop amount"); drop4chanceD = config("5 - Moder", "Drop 4 Chance", 1f, "The chance to drop"); drop4onePerPlayerD = config("5 - Moder", "Drop 4 One per player?", value: false, "Should it drop 1 per player?"); drop4multiplierD = config("5 - Moder", "Drop 4 Multiplier", value: false, "Multiply drops if has stars"); drop5ToggleD = config("5 - Moder", "Toggle Drop 5", Toggle.Off, "If on, Drop 5 below is available, must use correct prefab name!"); boss4Drop5 = config("5 - Moder", "Drop 5 Prefab", "Finewood", "Enter the Prefab name"); drop5minD = config("5 - Moder", "Drop 5 Amount Minimum", 1, "The minimum drop amount"); drop5maxD = config("5 - Moder", "Drop 5 Amount Maximum", 1, "The maximum drop amount"); drop5chanceD = config("5 - Moder", "Drop 5 Chance", 1f, "The chance to drop"); drop5onePerPlayerD = config("5 - Moder", "Drop 5 One per player?", value: false, "Should it drop 1 per player?"); drop5multiplierD = config("5 - Moder", "Drop 5 Multiplier", value: false, "Multiply drops if has stars"); YagluthToggle = config("6 - Yagluth", "Toggle Yagluth", Toggle.On, "If on, Yagluth config below is available"); drop1ToggleY = config("6 - Yagluth", "Toggle Drop 1", Toggle.On, "If on, Drop 1 below is available, must use correct prefab name!"); boss5Drop1 = config("6 - Yagluth", "Drop 1 Prefab", "YagluthDrop", "Enter the Prefab name"); drop1minY = config("6 - Yagluth", "Drop 1 Amount Minimum", 3, "The minimum drop amount"); drop1maxY = config("6 - Yagluth", "Drop 1 Amount Maximum", 3, "The maximum drop amount"); drop1chanceY = config("6 - Yagluth", "Drop 1 Chance", 1f, "The chance to drop"); drop1onePerPlayerY = config("6 - Yagluth", "Drop 1 One per player?", value: false, "Should it drop 1 per player?"); drop1multiplierY = config("6 - Yagluth", "Drop 1 Multiplier", value: false, "Multiply drops if has stars"); drop2ToggleY = config("6 - Yagluth", "Toggle Drop 2", Toggle.On, "If on, Drop 2 below is available, must use correct prefab name!"); boss5Drop2 = config("6 - Yagluth", "Drop 2 Prefab", "TrophyGoblinKing", "Enter the Prefab name"); drop2minY = config("6 - Yagluth", "Drop 2 Amount Minimum", 1, "The minimum drop amount"); drop2maxY = config("6 - Yagluth", "Drop 2 Amount Maximum", 1, "The maximum drop amount"); drop2chanceY = config("6 - Yagluth", "Drop 2 Chance", 1f, "The chance to drop"); drop2onePerPlayerY = config("6 - Yagluth", "Drop 2 One per player?", value: false, "Should it drop 1 per player?"); drop2multiplierY = config("6 - Yagluth", "Drop 2 Multiplier", value: false, "Multiply drops if has stars"); drop3ToggleY = config("6 - Yagluth", "Toggle Drop 3", Toggle.Off, "If on, Drop 3 below is available, must use correct prefab name!"); boss5Drop3 = config("6 - Yagluth", "Drop 3 Prefab", "Finewood", "Enter the Prefab name"); drop3minY = config("6 - Yagluth", "Drop 3 Amount Minimum", 1, "The minimum drop amount"); drop3maxY = config("6 - Yagluth", "Drop 3 Amount Maximum", 1, "The maximum drop amount"); drop3chanceY = config("6 - Yagluth", "Drop 3 Chance", 1f, "The chance to drop"); drop3onePerPlayerY = config("6 - Yagluth", "Drop 3 One per player?", value: false, "Should it drop 1 per player?"); drop3multiplierY = config("6 - Yagluth", "Drop 3 Multiplier", value: false, "Multiply drops if has stars"); drop4ToggleY = config("6 - Yagluth", "Toggle Drop 4", Toggle.Off, "If on, Drop 4 below is available, must use correct prefab name!"); boss5Drop4 = config("6 - Yagluth", "Drop 4 Prefab", "Finewood", "Enter the Prefab name"); drop4minY = config("6 - Yagluth", "Drop 4 Amount Minimum", 1, "The minimum drop amount"); drop4maxY = config("6 - Yagluth", "Drop 4 Amount Maximum", 1, "The maximum drop amount"); drop4chanceY = config("6 - Yagluth", "Drop 4 Chance", 1f, "The chance to drop"); drop4onePerPlayerY = config("6 - Yagluth", "Drop 4 One per player?", value: false, "Should it drop 1 per player?"); drop4multiplierY = config("6 - Yagluth", "Drop 4 Multiplier", value: false, "Multiply drops if has stars"); drop5ToggleY = config("6 - Yagluth", "Toggle Drop 5", Toggle.Off, "If on, Drop 5 below is available, must use correct prefab name!"); boss5Drop5 = config("6 - Yagluth", "Drop 5 Prefab", "Finewood", "Enter the Prefab name"); drop5minY = config("6 - Yagluth", "Drop 5 Amount Minimum", 1, "The minimum drop amount"); drop5maxY = config("6 - Yagluth", "Drop 5 Amount Maximum", 1, "The maximum drop amount"); drop5chanceY = config("6 - Yagluth", "Drop 5 Chance", 1f, "The chance to drop"); drop5onePerPlayerY = config("6 - Yagluth", "Drop 5 One per player?", value: false, "Should it drop 1 per player?"); drop5multiplierY = config("6 - Yagluth", "Drop 5 Multiplier", value: false, "Multiply drops if has stars"); QueenToggle = config("7 - Queen", "Toggle Queen", Toggle.On, "If on, Queen config below is available"); drop1ToggleQ = config("7 - Queen", "Toggle Drop 1", Toggle.On, "If on, Drop 1 below is available, must use correct prefab name!"); boss6Drop1 = config("7 - Queen", "Drop 1 Prefab", "QueenDrop", "Enter the Prefab name"); drop1minQ = config("7 - Queen", "Drop 1 Amount Minimum", 3, "The minimum drop amount"); drop1maxQ = config("7 - Queen", "Drop 1 Amount Maximum", 3, "The maximum drop amount"); drop1chanceQ = config("7 - Queen", "Drop 1 Chance", 1f, "The chance to drop"); drop1onePerPlayerQ = config("7 - Queen", "Drop 1 One per player?", value: false, "Should it drop 1 per player?"); drop1multiplierQ = config("7 - Queen", "Drop 1 Multiplier", value: false, "Multiply drops if has stars"); drop2ToggleQ = config("7 - Queen", "Toggle Drop 2", Toggle.On, "If on, Drop 2 below is available, must use correct prefab name!"); boss6Drop2 = config("7 - Queen", "Drop 2 Prefab", "TrophySeekerQueen", "Enter the Prefab name"); drop2minQ = config("7 - Queen", "Drop 2 Amount Minimum", 1, "The minimum drop amount"); drop2maxQ = config("7 - Queen", "Drop 2 Amount Maximum", 1, "The maximum drop amount"); drop2chanceQ = config("7 - Queen", "Drop 2 Chance", 1f, "The chance to drop"); drop2onePerPlayerQ = config("7 - Queen", "Drop 2 One per player?", value: false, "Should it drop 1 per player?"); drop2multiplierQ = config("7 - Queen", "Drop 2 Multiplier", value: false, "Multiply drops if has stars"); drop3ToggleQ = config("7 - Queen", "Toggle Drop 3", Toggle.Off, "If on, Drop 3 below is available, must use correct prefab name!"); boss6Drop3 = config("7 - Queen", "Drop 3 Prefab", "Finewood", "Enter the Prefab name"); drop3minQ = config("7 - Queen", "Drop 3 Amount Minimum", 1, "The minimum drop amount"); drop3maxQ = config("7 - Queen", "Drop 3 Amount Maximum", 1, "The maximum drop amount"); drop3chanceQ = config("7 - Queen", "Drop 3 Chance", 1f, "The chance to drop"); drop3onePerPlayerQ = config("7 - Queen", "Drop 3 One per player?", value: false, "Should it drop 1 per player?"); drop3multiplierQ = config("7 - Queen", "Drop 3 Multiplier", value: false, "Multiply drops if has stars"); drop4ToggleQ = config("7 - Queen", "Toggle Drop 4", Toggle.Off, "If on, Drop 4 below is available, must use correct prefab name!"); boss6Drop4 = config("7 - Queen", "Drop 4 Prefab", "Finewood", "Enter the Prefab name"); drop4minQ = config("7 - Queen", "Drop 4 Amount Minimum", 1, "The minimum drop amount"); drop4maxQ = config("7 - Queen", "Drop 4 Amount Maximum", 1, "The maximum drop amount"); drop4chanceQ = config("7 - Queen", "Drop 4 Chance", 1f, "The chance to drop"); drop4onePerPlayerQ = config("7 - Queen", "Drop 4 One per player?", value: false, "Should it drop 1 per player?"); drop4multiplierQ = config("7 - Queen", "Drop 4 Multiplier", value: false, "Multiply drops if has stars"); drop5ToggleQ = config("7 - Queen", "Toggle Drop 5", Toggle.Off, "If on, Drop 5 below is available, must use correct prefab name!"); boss6Drop5 = config("7 - Queen", "Drop 5 Prefab", "Finewood", "Enter the Prefab name"); drop5minQ = config("7 - Queen", "Drop 5 Amount Minimum", 1, "The minimum drop amount"); drop5maxQ = config("7 - Queen", "Drop 5 Amount Maximum", 1, "The maximum drop amount"); drop5chanceQ = config("7 - Queen", "Drop 5 Chance", 1f, "The chance to drop"); drop5onePerPlayerQ = config("7 - Queen", "Drop 5 One per player?", value: false, "Should it drop 1 per player?"); drop5multiplierQ = config("7 - Queen", "Drop 5 Multiplier", value: false, "Multiply drops if has stars"); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { EasyBossConfigLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { EasyBossConfigLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); EasyBossConfigLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private ConfigEntry<T> config<[<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags); ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val); SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val2; } private ConfigEntry<T> config<[<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } static EasyBossConfigPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConnectionError = ""; EasyBossConfigLogger = Logger.CreateLogSource("EasyBossConfig"); ConfigSync = new ConfigSync("coemt.EasyBossConfig") { DisplayName = "EasyBossConfig", CurrentVersion = "0.0.5", MinimumRequiredVersion = "0.0.5" }; _serverConfigLocked = null; EikthyrToggle = null; drop1Toggle = null; boss1Drop1 = null; drop1min = null; drop1max = null; drop1chance = null; drop1onePerPlayer = null; drop1multiplier = null; drop2Toggle = null; boss1Drop2 = null; drop2min = null; drop2max = null; drop2chance = null; drop2onePerPlayer = null; drop2multiplier = null; drop3Toggle = null; boss1Drop3 = null; drop3min = null; drop3max = null; drop3chance = null; drop3onePerPlayer = null; drop3multiplier = null; drop4Toggle = null; boss1Drop4 = null; drop4min = null; drop4max = null; drop4chance = null; drop4onePerPlayer = null; drop4multiplier = null; drop5Toggle = null; boss1Drop5 = null; drop5min = null; drop5max = null; drop5chance = null; drop5onePerPlayer = null; drop5multiplier = null; ElderToggle = null; drop1ToggleE = null; boss2Drop1 = null; drop1minE = null; drop1maxE = null; drop1chanceE = null; drop1onePerPlayerE = null; drop1multiplierE = null; drop2ToggleE = null; boss2Drop2 = null; drop2minE = null; drop2maxE = null; drop2chanceE = null; drop2onePerPlayerE = null; drop2multiplierE = null; drop3ToggleE = null; boss2Drop3 = null; drop3minE = null; drop3maxE = null; drop3chanceE = null; drop3onePerPlayerE = null; drop3multiplierE = null; drop4ToggleE = null; boss2Drop4 = null; drop4minE = null; drop4maxE = null; drop4chanceE = null; drop4onePerPlayerE = null; drop4multiplierE = null; drop5ToggleE = null; boss2Drop5 = null; drop5minE = null; drop5maxE = null; drop5chanceE = null; drop5onePerPlayerE = null; drop5multiplierE = null; BonemassToggle = null; drop1ToggleB = null; boss3Drop1 = null; drop1minB = null; drop1maxB = null; drop1chanceB = null; drop1onePerPlayerB = null; drop1multiplierB = null; drop2ToggleB = null; boss3Drop2 = null; drop2minB = null; drop2maxB = null; drop2chanceB = null; drop2onePerPlayerB = null; drop2multiplierB = null; drop3ToggleB = null; boss3Drop3 = null; drop3minB = null; drop3maxB = null; drop3chanceB = null; drop3onePerPlayerB = null; drop3multiplierB = null; drop4ToggleB = null; boss3Drop4 = null; drop4minB = null; drop4maxB = null; drop4chanceB = null; drop4onePerPlayerB = null; drop4multiplierB = null; drop5ToggleB = null; boss3Drop5 = null; drop5minB = null; drop5maxB = null; drop5chanceB = null; drop5onePerPlayerB = null; drop5multiplierB = null; ModerToggle = null; drop1ToggleD = null; boss4Drop1 = null; drop1minD = null; drop1maxD = null; drop1chanceD = null; drop1onePerPlayerD = null; drop1multiplierD = null; drop2ToggleD = null; boss4Drop2 = null; drop2minD = null; drop2maxD = null; drop2chanceD = null; drop2onePerPlayerD = null; drop2multiplierD = null; drop3ToggleD = null; boss4Drop3 = null; drop3minD = null; drop3maxD = null; drop3chanceD = null; drop3onePerPlayerD = null; drop3multiplierD = null; drop4ToggleD = null; boss4Drop4 = null; drop4minD = null; drop4maxD = null; drop4chanceD = null; drop4onePerPlayerD = null; drop4multiplierD = null; drop5ToggleD = null; boss4Drop5 = null; drop5minD = null; drop5maxD = null; drop5chanceD = null; drop5onePerPlayerD = null; drop5multiplierD = null; YagluthToggle = null; drop1ToggleY = null; boss5Drop1 = null; drop1minY = null; drop1maxY = null; drop1chanceY = null; drop1onePerPlayerY = null; drop1multiplierY = null; drop2ToggleY = null; boss5Drop2 = null; drop2minY = null; drop2maxY = null; drop2chanceY = null; drop2onePerPlayerY = null; drop2multiplierY = null; drop3ToggleY = null; boss5Drop3 = null; drop3minY = null; drop3maxY = null; drop3chanceY = null; drop3onePerPlayerY = null; drop3multiplierY = null; drop4ToggleY = null; boss5Drop4 = null; drop4minY = null; drop4maxY = null; drop4chanceY = null; drop4onePerPlayerY = null; drop4multiplierY = null; drop5ToggleY = null; boss5Drop5 = null; drop5minY = null; drop5maxY = null; drop5chanceY = null; drop5onePerPlayerY = null; drop5multiplierY = null; QueenToggle = null; drop1ToggleQ = null; boss6Drop1 = null; drop1minQ = null; drop1maxQ = null; drop1chanceQ = null; drop1onePerPlayerQ = null; drop1multiplierQ = null; drop2ToggleQ = null; boss6Drop2 = null; drop2minQ = null; drop2maxQ = null; drop2chanceQ = null; drop2onePerPlayerQ = null; drop2multiplierQ = null; drop3ToggleQ = null; boss6Drop3 = null; drop3minQ = null; drop3maxQ = null; drop3chanceQ = null; drop3onePerPlayerQ = null; drop3multiplierQ = null; drop4ToggleQ = null; boss6Drop4 = null; drop4minQ = null; drop4maxQ = null; drop4chanceQ = null; drop4onePerPlayerQ = null; drop4multiplierQ = null; drop5ToggleQ = null; boss6Drop5 = null; drop5minQ = null; drop5maxQ = null; drop5chanceQ = null; drop5onePerPlayerQ = null; drop5multiplierQ = null; } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] public static class RegisterAndCheckVersion { [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown EasyBossConfigPlugin.EasyBossConfigLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("EasyBossConfig_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_EasyBossConfig_Version); EasyBossConfigPlugin.EasyBossConfigLogger.LogDebug((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("0.0.5"); peer.m_rpc.Invoke("EasyBossConfig_VersionCheck", new object[1] { val }); } } [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] [<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(0)] [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } EasyBossConfigPlugin.EasyBossConfigLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); return false; } private static void Postfix(ZNet __instance) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "RequestAdminSync", new object[1] { (object)new ZPackage() }); } } [HarmonyPatch(typeof(FejdStartup), "ShowConnectError")] public class ShowConnectionError { [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] private static void Postfix(FejdStartup __instance) { if (__instance.m_connectionFailedPanel.activeSelf) { __instance.m_connectionFailedError.fontSizeMax = 25f; __instance.m_connectionFailedError.fontSizeMin = 15f; TMP_Text connectionFailedError = __instance.m_connectionFailedError; connectionFailedError.text = connectionFailedError.text + "\n" + EasyBossConfigPlugin.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { EasyBossConfigPlugin.EasyBossConfigLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<92732460-db11-4015-ba9b-c393fadbcb4c>Nullable(0)] [<bcaa255b-1bb3-430d-9a19-675a590dafa7>NullableContext(1)] public static class RpcHandlers { public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>(); public static void RPC_EasyBossConfig_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); EasyBossConfigPlugin.EasyBossConfigLogger.LogInfo((object)("Version check, local: 0.0.5, remote: " + text)); if (text != "0.0.5") { EasyBossConfigPlugin.ConnectionError = "EasyBossConfig Installed: 0.0.5\n Needed: " + text; if (ZNet.instance.IsServer()) { EasyBossConfigPlugin.EasyBossConfigLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { EasyBossConfigPlugin.EasyBossConfigLogger.LogInfo((object)"Received same version from server!"); } else { EasyBossConfigPlugin.EasyBossConfigLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] [Microsoft.CodeAnalysis.Embedded] 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; } } [Microsoft.CodeAnalysis.Embedded] [CompilerGenerated] [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; } } [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] [Microsoft.CodeAnalysis.Embedded] [CompilerGenerated] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ServerSync { [PublicAPI] internal abstract class OwnConfigEntryBase { public object? LocalBaseValue; public bool SynchronizedConfig = true; public abstract ConfigEntryBase BaseConfig { get; } } [PublicAPI] internal class SyncedConfigEntry<T> : OwnConfigEntryBase { public readonly ConfigEntry<T> SourceConfig; public override ConfigEntryBase BaseConfig => (ConfigEntryBase)(object)SourceConfig; public T Value { get { return SourceConfig.Value; } set { SourceConfig.Value = value; } } public SyncedConfigEntry(ConfigEntry<T> sourceConfig) { SourceConfig = sourceConfig; } public void AssignLocalValue(T value) { if (LocalBaseValue == null) { Value = value; } else { LocalBaseValue = value; } } } internal abstract class CustomSyncedValueBase { public object? LocalBaseValue; public readonly string Identifier; public readonly Type Type; private object? boxedValue; protected bool localIsOwner; public readonly int Priority; public object? BoxedValue { get { return boxedValue; } set { boxedValue = value; this.ValueChanged?.Invoke(); } } public event Action? ValueChanged; protected CustomSyncedValueBase(ConfigSync configSync, string identifier, Type type, int priority) { Priority = priority; Identifier = identifier; Type = type; configSync.AddCustomValue(this); localIsOwner = configSync.IsSourceOfTruth; configSync.SourceOfTruthChanged += delegate(bool truth) { localIsOwner = truth; }; } } [PublicAPI] internal sealed class CustomSyncedValue<T> : CustomSyncedValueBase { public T Value { get { return (T)base.BoxedValue; } set { base.BoxedValue = value; } } public CustomSyncedValue(ConfigSync configSync, string identifier, T value = default(T), int priority = 0) : base(configSync, identifier, typeof(T), priority) { Value = value; } public void AssignLocalValue(T value) { if (localIsOwner) { Value = value; } else { LocalBaseValue = value; } } } internal class ConfigurationManagerAttributes { [UsedImplicitly] public bool? ReadOnly = false; } [PublicAPI] internal class ConfigSync { [HarmonyPatch(typeof(ZRpc), "HandlePackage")] private static class SnatchCurrentlyHandlingRPC { public static ZRpc? currentRpc; [HarmonyPrefix] private static void Prefix(ZRpc __instance) { currentRpc = __instance; } } [HarmonyPatch(typeof(ZNet), "Awake")] internal static class RegisterRPCPatch { [HarmonyPostfix] private static void Postfix(ZNet __instance) { isServer = __instance.IsServer(); foreach (ConfigSync configSync2 in configSyncs) { ZRoutedRpc.instance.Register<ZPackage>(configSync2.Name + " ConfigSync", (Action<long, ZPackage>)configSync2.RPC_FromOtherClientConfigSync); if (isServer) { configSync2.InitialSyncDone = true; Debug.Log((object)("Registered '" + configSync2.Name + " ConfigSync' RPC - waiting for incoming connections")); } } if (isServer) { ((MonoBehaviour)__instance).StartCoroutine(WatchAdminListChanges()); } static void SendAdmin(List<ZNetPeer> peers, bool isAdmin) { ZPackage package = ConfigsToPackage(null, null, new PackageEntry[1] { new PackageEntry { section = "Internal", key = "lockexempt", type = typeof(bool), value = isAdmin } }); ConfigSync configSync = configSyncs.First(); if (configSync != null) { ((MonoBehaviour)ZNet.instance).StartCoroutine(configSync.sendZPackage(peers, package)); } } static IEnumerator WatchAdminListChanges() { MethodInfo listContainsId = AccessTools.DeclaredMethod(typeof(ZNet), "ListContainsId", (Type[])null, (Type[])null); SyncedList adminList = (SyncedList)AccessTools.DeclaredField(typeof(ZNet), "m_adminList").GetValue(ZNet.instance); List<string> CurrentList = new List<string>(adminList.GetList()); while (true) { yield return (object)new WaitForSeconds(30f); if (!adminList.GetList().SequenceEqual(CurrentList)) { CurrentList = new List<string>(adminList.GetList()); List<ZNetPeer> adminPeer = ZNet.instance.GetPeers().Where(delegate(ZNetPeer p) { string hostName = p.m_rpc.GetSocket().GetHostName(); return ((object)listContainsId == null) ? adminList.Contains(hostName) : ((bool)listContainsId.Invoke(ZNet.instance, new object[2] { adminList, hostName })); }).ToList(); List<ZNetPeer> nonAdminPeer = ZNet.instance.GetPeers().Except(adminPeer).ToList(); SendAdmin(nonAdminPeer, isAdmin: false); SendAdmin(adminPeer, isAdmin: true); } } } } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] private static class RegisterClientRPCPatch { [HarmonyPostfix] private static void Postfix(ZNet __instance, ZNetPeer peer) { if (__instance.IsServer()) { return; } foreach (ConfigSync configSync in configSyncs) { peer.m_rpc.Register<ZPackage>(configSync.Name + " ConfigSync", (Action<ZRpc, ZPackage>)configSync.RPC_FromServerConfigSync); } } } private class ParsedConfigs { public readonly Dictionary<OwnConfigEntryBase, object?> configValues = new Dictionary<OwnConfigEntryBase, object>(); public readonly Dictionary<CustomSyncedValueBase, object?> customValues = new Dictionary<CustomSyncedValueBase, object>(); } [HarmonyPatch(typeof(ZNet), "Shutdown")] private class ResetConfigsOnShutdown { [HarmonyPostfix] private static void Postfix() { ProcessingServerUpdate = true; foreach (ConfigSync configSync in configSyncs) { configSync.resetConfigsFromServer(); configSync.IsSourceOfTruth = true; configSync.InitialSyncDone = false; } ProcessingServerUpdate = false; } } [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] private class SendConfigsAfterLogin { private class BufferingSocket : ISocket { public volatile bool finished = false; public volatile int versionMatchQueued = -1; public readonly List<ZPackage> Package = new List<ZPackage>(); public readonly ISocket Original; public BufferingSocket(ISocket original) { Original = original; } public bool IsConnected() { return Original.IsConnected(); } public ZPackage Recv() { return Original.Recv(); } public int GetSendQueueSize() { return Original.GetSendQueueSize(); } public int GetCurrentSendRate() { return Original.GetCurrentSendRate(); } public bool IsHost() { return Original.IsHost(); } public void Dispose() { Original.Dispose(); } public bool GotNewData() { return Original.GotNewData(); } public void Close() { Original.Close(); } public string GetEndPointString() { return Original.GetEndPointString(); } public void GetAndResetStats(out int totalSent, out int totalRecv) { Original.GetAndResetStats(ref totalSent, ref totalRecv); } public void GetConnectionQuality(out float localQuality, out float remoteQuality, out int ping, out float outByteSec, out float inByteSec) { Original.GetConnectionQuality(ref localQuality, ref remoteQuality, ref ping, ref outByteSec, ref inByteSec); } public ISocket Accept() { return Original.Accept(); } public int GetHostPort() { return Original.GetHostPort(); } public bool Flush() { return Original.Flush(); } public string GetHostName() { return Original.GetHostName(); } public void VersionMatch() { if (finished) { Original.VersionMatch(); } else { versionMatchQueued = Package.Count; } } public void Send(ZPackage pkg) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown int pos = pkg.GetPos(); pkg.SetPos(0); int num = pkg.ReadInt(); if ((num == StringExtensionMethods.GetStableHashCode("PeerInfo") || num == StringExtensionMethods.GetStableHashCode("RoutedRPC") || num == StringExtensionMethods.GetStableHashCode("ZDOData")) && !finished) { ZPackage val = new ZPackage(pkg.GetArray()); val.SetPos(pos); Package.Add(val); } else { pkg.SetPos(pos); Original.Send(pkg); } } } [HarmonyPrefix] [HarmonyPriority(800)] private static void Prefix(ref Dictionary<Assembly, BufferingSocket>? __state, ZNet __instance, ZRpc rpc) { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Invalid comparison between Unknown and I4 if (__instance.IsServer()) { BufferingSocket value = new BufferingSocket(rpc.GetSocket()); AccessTools.DeclaredField(typeof(ZRpc), "m_socket").SetValue(rpc, value); object? obj = AccessTools.DeclaredMethod(typeof(ZNet), "GetPeer", new Type[1] { typeof(ZRpc) }, (Type[])null).Invoke(__instance, new object[1] { rpc }); ZNetPeer val = (ZNetPeer)((obj is ZNetPeer) ? obj : null); if (val != null && (int)ZNet.m_onlineBackend > 0) { AccessTools.DeclaredField(typeof(ZNetPeer), "m_socket").SetValue(val, value); } if (__state == null) { __state = new Dictionary<Assembly, BufferingSocket>(); } __state[Assembly.GetExecutingAssembly()] = value; } } [HarmonyPostfix] private static void Postfix(Dictionary<Assembly, BufferingSocket> __state, ZNet __instance, ZRpc rpc) { ZRpc rpc2 = rpc; ZNet __instance2 = __instance; Dictionary<Assembly, BufferingSocket> __state2 = __state; ZNetPeer peer; if (__instance2.IsServer()) { object obj = AccessTools.DeclaredMethod(typeof(ZNet), "GetPeer", new Type[1] { typeof(ZRpc) }, (Type[])null).Invoke(__instance2, new object[1] { rpc2 }); peer = (ZNetPeer)((obj is ZNetPeer) ? obj : null); if (peer == null) { SendBufferedData(); } else { ((MonoBehaviour)__instance2).StartCoroutine(sendAsync()); } } void SendBufferedData() { if (rpc2.GetSocket() is BufferingSocket bufferingSocket) { AccessTools.DeclaredField(typeof(ZRpc), "m_socket").SetValue(rpc2, bufferingSocket.Original); object? obj2 = AccessTools.DeclaredMethod(typeof(ZNet), "GetPeer", new Type[1] { typeof(ZRpc) }, (Type[])null).Invoke(__instance2, new object[1] { rpc2 }); ZNetPeer val = (ZNetPeer)((obj2 is ZNetPeer) ? obj2 : null); if (val != null) { AccessTools.DeclaredField(typeof(ZNetPeer), "m_socket").SetValue(val, bufferingSocket.Original); } } BufferingSocket bufferingSocket2 = __state2[Assembly.GetExecutingAssembly()]; bufferingSocket2.finished = true; for (int i = 0; i < bufferingSocket2.Package.Count