Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ArtifactOfDoom v2.0.7
ArtifactOfDoom.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Text; using ArtifactOfDoom; using ArtifactOfDoomTinyJson; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using On.RoR2; using On.RoR2.UI; using R2API; using RoR2; using RoR2.Stats; using RoR2.UI; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; [assembly: AssemblyTitle("ArtifactOfDoom")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCompany("ArtifactOfDoom")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyProduct("ArtifactOfDoom")] [assembly: AssemblyVersion("1.0.0.0")] public class NetworkClass { internal static GameObject CentralNetworkObject; internal static GameObject _centralNetworkObjectSpawned; public NetworkClass() { SetupConfig(); } public void SetupConfig() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val = new GameObject("ArtifactOfDoomNetworkingPrefab"); val.AddComponent<NetworkIdentity>(); CentralNetworkObject = PrefabAPI.InstantiateClone(val, "ArtifactOfDoomNetworking", true); CentralNetworkObject.AddComponent<Networking>(); } internal static void EnsureNetworking() { if (!Object.op_Implicit((Object)(object)_centralNetworkObjectSpawned)) { _centralNetworkObjectSpawned = Object.Instantiate<GameObject>(CentralNetworkObject); NetworkServer.Spawn(_centralNetworkObjectSpawned); } } } public class Networking : NetworkBehaviour { public static Networking _instance; [SyncVar] public bool IsArtifactEnabled = false; [SyncVar] public bool IsCalculationSacrifice = false; internal static readonly List<NetworkConnection> checkedConnections; private static int kTargetRpcTargetUpdateProgressBar; private static int kTargetRpcTargetAddGainedItemsToPlayers; private static int kTargetRpcTargetAddLostItemsOfPlayers; public bool NetworkIsArtifactEnabled { get { return IsArtifactEnabled; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<bool>(value, ref IsArtifactEnabled, 1u); } } public bool NetworkIsCalculationSacrifice { get { return IsCalculationSacrifice; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<bool>(value, ref IsCalculationSacrifice, 2u); } } private void Awake() { _instance = this; } public static void ServerEnsureNetworking() { NetworkClass.EnsureNetworking(); } [TargetRpc] public void TargetUpdateProgressBar(NetworkConnection target, string killedNeededEnemies) { //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) NetworkClass.EnsureNetworking(); if (killedNeededEnemies == null) { Debug.LogError((object)"killedNeededEnemies == null"); } if (ArtifactOfDoomConfig.disableItemProgressBar.Value || _instance.IsCalculationSacrifice) { return; } string[] array = killedNeededEnemies.Split(','); if (array == null) { Debug.LogError((object)"stringkilledneededEnemies=null"); } int num = Convert.ToInt32(array[0]); int num2 = Convert.ToInt32(array[1]) + 2; double num3 = (double)num / (double)num2; if (0.35f + (float)(num3 * 0.3) > 0.65f) { _ = ArtifactOfDoomUI.itemGainBar.GetComponent<RectTransform>().anchorMax; if (false) { Debug.LogError((object)"itemGainBar.GetComponent<RectTransform>().anchorMax==null"); } ArtifactOfDoomUI.itemGainBar.GetComponent<RectTransform>().anchorMax = new Vector2(0.65f, 0.06f); } else { ArtifactOfDoomUI.itemGainBar.GetComponent<RectTransform>().anchorMin = new Vector2(0.35f, 0.05f); ArtifactOfDoomUI.itemGainBar.GetComponent<RectTransform>().anchorMax = new Vector2(0.35f + (float)(num3 * 0.3), 0.06f); } } [TargetRpc] public void TargetAddGainedItemsToPlayers(NetworkConnection target, string QueueGainedItemSpriteToString) { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) NetworkClass.EnsureNetworking(); if (ArtifactOfDoomConfig.disableSideBars.Value) { return; } string[] array = QueueGainedItemSpriteToString.Split(' '); int num = 0; string[] array2 = array; foreach (string text in array2) { if (text != "") { if (ArtifactOfDoomUI.listGainedImages.Count <= num) { break; } if ((Object)(object)ArtifactOfDoomUI.listGainedImages[num].GetComponent<Image>() == (Object)null) { ArtifactOfDoomUI.listGainedImages[num].AddComponent<Image>(); } ArtifactOfDoomUI.listGainedImages[num].GetComponent<Image>().sprite = ItemCatalog.GetItemDef(ItemCatalog.FindItemIndex(text)).pickupIconSprite; num++; } } } [TargetRpc] public void TargetAddLostItemsOfPlayers(NetworkConnection target, string QueueLostItemSpriteToString) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) if (ArtifactOfDoomConfig.disableSideBars.Value) { return; } string[] array = QueueLostItemSpriteToString.Split(' '); int num = 0; string[] array2 = array; foreach (string text in array2) { if (text != "") { if ((Object)(object)ArtifactOfDoomUI.listLostImages[num].GetComponent<Image>() == (Object)null) { ArtifactOfDoomUI.listLostImages[num].AddComponent<Image>(); } ArtifactOfDoomUI.listLostImages[num].GetComponent<Image>().sprite = ItemCatalog.GetItemDef(ItemCatalog.FindItemIndex(text)).pickupIconSprite; num++; } } } static Networking() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown checkedConnections = new List<NetworkConnection>(); kTargetRpcTargetUpdateProgressBar = 1238139520; NetworkBehaviour.RegisterRpcDelegate(typeof(Networking), kTargetRpcTargetUpdateProgressBar, new CmdDelegate(InvokeRpcTargetUpdateProgressBar)); kTargetRpcTargetAddGainedItemsToPlayers = 691277625; NetworkBehaviour.RegisterRpcDelegate(typeof(Networking), kTargetRpcTargetAddGainedItemsToPlayers, new CmdDelegate(InvokeRpcTargetAddGainedItemsToPlayers)); kTargetRpcTargetAddLostItemsOfPlayers = -678159965; NetworkBehaviour.RegisterRpcDelegate(typeof(Networking), kTargetRpcTargetAddLostItemsOfPlayers, new CmdDelegate(InvokeRpcTargetAddLostItemsOfPlayers)); NetworkCRC.RegisterBehaviour("Networking", 0); } private void UNetVersion() { } protected static void InvokeRpcTargetUpdateProgressBar(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"TargetRPC TargetUpdateProgressBar called on server."); } else { ((Networking)(object)obj).TargetUpdateProgressBar(ClientScene.readyConnection, reader.ReadString()); } } protected static void InvokeRpcTargetAddGainedItemsToPlayers(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"TargetRPC TargetAddGainedItemsToPlayers called on server."); } else { ((Networking)(object)obj).TargetAddGainedItemsToPlayers(ClientScene.readyConnection, reader.ReadString()); } } protected static void InvokeRpcTargetAddLostItemsOfPlayers(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"TargetRPC TargetAddLostItemsOfPlayers called on server."); } else { ((Networking)(object)obj).TargetAddLostItemsOfPlayers(ClientScene.readyConnection, reader.ReadString()); } } public void CallTargetUpdateProgressBar(NetworkConnection target, string killedNeededEnemies) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"TargetRPC Function TargetUpdateProgressBar called on client."); return; } if (target is ULocalConnectionToServer) { Debug.LogError((object)"TargetRPC Function TargetUpdateProgressBar called on connection to server"); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kTargetRpcTargetUpdateProgressBar); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write(killedNeededEnemies); ((NetworkBehaviour)this).SendTargetRPCInternal(target, val, 0, "TargetUpdateProgressBar"); } public void CallTargetAddGainedItemsToPlayers(NetworkConnection target, string QueueGainedItemSpriteToString) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"TargetRPC Function TargetAddGainedItemsToPlayers called on client."); return; } if (target is ULocalConnectionToServer) { Debug.LogError((object)"TargetRPC Function TargetAddGainedItemsToPlayers called on connection to server"); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kTargetRpcTargetAddGainedItemsToPlayers); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write(QueueGainedItemSpriteToString); ((NetworkBehaviour)this).SendTargetRPCInternal(target, val, 0, "TargetAddGainedItemsToPlayers"); } public void CallTargetAddLostItemsOfPlayers(NetworkConnection target, string QueueLostItemSpriteToString) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"TargetRPC Function TargetAddLostItemsOfPlayers called on client."); return; } if (target is ULocalConnectionToServer) { Debug.LogError((object)"TargetRPC Function TargetAddLostItemsOfPlayers called on connection to server"); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kTargetRpcTargetAddLostItemsOfPlayers); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write(QueueLostItemSpriteToString); ((NetworkBehaviour)this).SendTargetRPCInternal(target, val, 0, "TargetAddLostItemsOfPlayers"); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { if (forceAll) { writer.Write(IsArtifactEnabled); writer.Write(IsCalculationSacrifice); return true; } bool flag = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & (true ? 1u : 0u)) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.Write(IsArtifactEnabled); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 2u) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.Write(IsCalculationSacrifice); } if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { if (initialState) { IsArtifactEnabled = reader.ReadBoolean(); IsCalculationSacrifice = reader.ReadBoolean(); return; } int num = (int)reader.ReadPackedUInt32(); if (((uint)num & (true ? 1u : 0u)) != 0) { IsArtifactEnabled = reader.ReadBoolean(); } if (((uint)num & 2u) != 0) { IsCalculationSacrifice = reader.ReadBoolean(); } } } namespace ArtifactOfDoomTinyJson { public static class JSONParser { [ThreadStatic] private static Stack<List<string>> splitArrayPool; [ThreadStatic] private static StringBuilder stringBuilder; [ThreadStatic] private static Dictionary<Type, Dictionary<string, FieldInfo>> fieldInfoCache; [ThreadStatic] private static Dictionary<Type, Dictionary<string, PropertyInfo>> propertyInfoCache; public static T FromJson<T>(this string json) { if (propertyInfoCache == null) { propertyInfoCache = new Dictionary<Type, Dictionary<string, PropertyInfo>>(); } if (fieldInfoCache == null) { fieldInfoCache = new Dictionary<Type, Dictionary<string, FieldInfo>>(); } if (stringBuilder == null) { stringBuilder = new StringBuilder(); } if (splitArrayPool == null) { splitArrayPool = new Stack<List<string>>(); } stringBuilder.Length = 0; for (int i = 0; i < json.Length; i++) { char c = json[i]; if (c == '"') { i = AppendUntilStringEnd(appendEscapeCharacter: true, i, json); } else if (!char.IsWhiteSpace(c)) { stringBuilder.Append(c); } } return (T)ParseValue(typeof(T), stringBuilder.ToString()); } private static int AppendUntilStringEnd(bool appendEscapeCharacter, int startIdx, string json) { stringBuilder.Append(json[startIdx]); for (int i = startIdx + 1; i < json.Length; i++) { if (json[i] == '\\') { if (appendEscapeCharacter) { stringBuilder.Append(json[i]); } stringBuilder.Append(json[i + 1]); i++; } else { if (json[i] == '"') { stringBuilder.Append(json[i]); return i; } stringBuilder.Append(json[i]); } } return json.Length - 1; } private static List<string> Split(string json) { List<string> list = ((splitArrayPool.Count > 0) ? splitArrayPool.Pop() : new List<string>()); list.Clear(); if (json.Length == 2) { return list; } int num = 0; stringBuilder.Length = 0; for (int i = 1; i < json.Length - 1; i++) { switch (json[i]) { case '[': case '{': num++; break; case ']': case '}': num--; break; case '"': i = AppendUntilStringEnd(appendEscapeCharacter: true, i, json); continue; case ',': case ':': if (num == 0) { list.Add(stringBuilder.ToString()); stringBuilder.Length = 0; continue; } break; } stringBuilder.Append(json[i]); } list.Add(stringBuilder.ToString()); return list; } internal static object ParseValue(Type type, string json) { if (type == typeof(string)) { if (json.Length <= 2) { return string.Empty; } StringBuilder stringBuilder = new StringBuilder(json.Length); for (int i = 1; i < json.Length - 1; i++) { if (json[i] == '\\' && i + 1 < json.Length - 1) { int num = "\"\\nrtbf/".IndexOf(json[i + 1]); if (num >= 0) { stringBuilder.Append("\"\\\n\r\t\b\f/"[num]); i++; continue; } if (json[i + 1] == 'u' && i + 5 < json.Length - 1) { uint result = 0u; if (uint.TryParse(json.Substring(i + 2, 4), NumberStyles.AllowHexSpecifier, null, out result)) { stringBuilder.Append((char)result); i += 5; continue; } } } stringBuilder.Append(json[i]); } return stringBuilder.ToString(); } if (type.IsPrimitive) { return Convert.ChangeType(json, type, CultureInfo.InvariantCulture); } if (type == typeof(decimal)) { decimal.TryParse(json, NumberStyles.Float, CultureInfo.InvariantCulture, out var result2); return result2; } if (json == "null") { return null; } if (type.IsEnum) { if (json[0] == '"') { json = json.Substring(1, json.Length - 2); } try { return Enum.Parse(type, json, ignoreCase: false); } catch { return 0; } } if (type.IsArray) { Type elementType = type.GetElementType(); if (json[0] != '[' || json[json.Length - 1] != ']') { return null; } List<string> list = Split(json); Array array = Array.CreateInstance(elementType, list.Count); for (int j = 0; j < list.Count; j++) { array.SetValue(ParseValue(elementType, list[j]), j); } splitArrayPool.Push(list); return array; } if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type type2 = type.GetGenericArguments()[0]; if (json[0] != '[' || json[json.Length - 1] != ']') { return null; } List<string> list2 = Split(json); IList list3 = (IList)type.GetConstructor(new Type[1] { typeof(int) }).Invoke(new object[1] { list2.Count }); for (int k = 0; k < list2.Count; k++) { list3.Add(ParseValue(type2, list2[k])); } splitArrayPool.Push(list2); return list3; } if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<, >)) { Type[] genericArguments = type.GetGenericArguments(); Type type3 = genericArguments[0]; Type type4 = genericArguments[1]; if (type3 != typeof(string)) { return null; } if (json[0] != '{' || json[json.Length - 1] != '}') { return null; } List<string> list4 = Split(json); if (list4.Count % 2 != 0) { return null; } IDictionary dictionary = (IDictionary)type.GetConstructor(new Type[1] { typeof(int) }).Invoke(new object[1] { list4.Count / 2 }); for (int l = 0; l < list4.Count; l += 2) { if (list4[l].Length > 2) { string key = list4[l].Substring(1, list4[l].Length - 2); object value = ParseValue(type4, list4[l + 1]); dictionary.Add(key, value); } } return dictionary; } if (type == typeof(object)) { return ParseAnonymousValue(json); } if (json[0] == '{' && json[json.Length - 1] == '}') { return ParseObject(type, json); } return null; } private static object ParseAnonymousValue(string json) { if (json.Length == 0) { return null; } if (json[0] == '{' && json[json.Length - 1] == '}') { List<string> list = Split(json); if (list.Count % 2 != 0) { return null; } Dictionary<string, object> dictionary = new Dictionary<string, object>(list.Count / 2); for (int i = 0; i < list.Count; i += 2) { dictionary.Add(list[i].Substring(1, list[i].Length - 2), ParseAnonymousValue(list[i + 1])); } return dictionary; } if (json[0] == '[' && json[json.Length - 1] == ']') { List<string> list2 = Split(json); List<object> list3 = new List<object>(list2.Count); for (int j = 0; j < list2.Count; j++) { list3.Add(ParseAnonymousValue(list2[j])); } return list3; } if (json[0] == '"' && json[json.Length - 1] == '"') { string text = json.Substring(1, json.Length - 2); return text.Replace("\\", string.Empty); } if (char.IsDigit(json[0]) || json[0] == '-') { if (json.Contains(".")) { double.TryParse(json, NumberStyles.Float, CultureInfo.InvariantCulture, out var result); return result; } int.TryParse(json, out var result2); return result2; } if (json == "true") { return true; } if (json == "false") { return false; } return null; } private static Dictionary<string, T> CreateMemberNameDictionary<T>(T[] members) where T : MemberInfo { Dictionary<string, T> dictionary = new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase); foreach (T val in members) { if (val.IsDefined(typeof(IgnoreDataMemberAttribute), inherit: true)) { continue; } string name = val.Name; if (val.IsDefined(typeof(DataMemberAttribute), inherit: true)) { DataMemberAttribute dataMemberAttribute = (DataMemberAttribute)Attribute.GetCustomAttribute(val, typeof(DataMemberAttribute), inherit: true); if (!string.IsNullOrEmpty(dataMemberAttribute.Name)) { name = dataMemberAttribute.Name; } } dictionary.Add(name, val); } return dictionary; } private static object ParseObject(Type type, string json) { object uninitializedObject = FormatterServices.GetUninitializedObject(type); List<string> list = Split(json); if (list.Count % 2 != 0) { return uninitializedObject; } if (!fieldInfoCache.TryGetValue(type, out var value)) { value = CreateMemberNameDictionary(type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); fieldInfoCache.Add(type, value); } if (!propertyInfoCache.TryGetValue(type, out var value2)) { value2 = CreateMemberNameDictionary(type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); propertyInfoCache.Add(type, value2); } for (int i = 0; i < list.Count; i += 2) { if (list[i].Length > 2) { string key = list[i].Substring(1, list[i].Length - 2); string json2 = list[i + 1]; PropertyInfo value4; if (value.TryGetValue(key, out var value3)) { value3.SetValue(uninitializedObject, ParseValue(value3.FieldType, json2)); } else if (value2.TryGetValue(key, out value4)) { value4.SetValue(uninitializedObject, ParseValue(value4.PropertyType, json2), null); } } } return uninitializedObject; } } } namespace ArtifactOfDoom { [BepInPlugin("com.SirHamburger.ArtifactOfDoom", "ArtifactOfDoom", "2.0.6")] public class ArtifactOfDoomConfig : BaseUnityPlugin { public const string ModVer = "2.0.6"; public const string ModName = "ArtifactOfDoom"; public const string ModGuid = "com.SirHamburger.ArtifactOfDoom"; public static BuffDef ArtifactOfDoomBuff = ScriptableObject.CreateInstance<BuffDef>(); public static GameObject GameObjectReference; private static ConfigFile cfgFile; internal static ManualLogSource _logger; public static ConfigEntry<int> averageItemsPerStage; public static ConfigEntry<int> minItemsPerStage; public static ConfigEntry<int> maxItemsPerStage; public static ConfigEntry<double> exponentailFactorIfYouAreUnderAverageItemsPerStage; public static ConfigEntry<double> exponentailFactorToCalculateSumOfLostItems; public static ConfigEntry<bool> artifactOfSwarmNerf; public static ConfigEntry<string> CustomChars; public static ConfigEntry<bool> useArtifactOfSacrificeCalculation; public static ConfigEntry<double> multiplayerForArtifactOfSacrificeDropRate; public static ConfigEntry<bool> disableItemProgressBar; public static ConfigEntry<double> timeAfterHitToNotLoseItemMonsoon; public static ConfigEntry<double> timeAfterHitToNotLoseItemDrizzly; public static ConfigEntry<double> timeAfterHitToNotLoseItemRainstorm; public static ConfigEntry<string> timeAfterHitToNotLoseItemOtherDifficulty; public static ConfigEntry<double> CommandoBonusItems; public static ConfigEntry<double> CommandoMultiplierForTimedBuff; public static ConfigEntry<double> HuntressBonusItems; public static ConfigEntry<double> HuntressMultiplierForTimedBuff; public static ConfigEntry<double> MULTBonusItems; public static ConfigEntry<double> MULTMultiplierForTimedBuff; public static ConfigEntry<double> EngineerBonusItems; public static ConfigEntry<double> EngineerMultiplierForTimedBuff; public static ConfigEntry<double> ArtificerBonusItems; public static ConfigEntry<double> ArtificerMultiplierForTimedBuff; public static ConfigEntry<double> MercenaryBonusItems; public static ConfigEntry<double> MercenaryMultiplierForTimedBuff; public static ConfigEntry<double> RexBonusItems; public static ConfigEntry<double> RexMultiplierForTimedBuff; public static ConfigEntry<double> LoaderBonusItems; public static ConfigEntry<double> LoaderMultiplierForTimedBuff; public static ConfigEntry<double> AcridBonusItems; public static ConfigEntry<double> AcridMultiplierForTimedBuff; public static ConfigEntry<double> CaptainBonusItems; public static ConfigEntry<double> CaptainMultiplierForTimedBuff; public static ConfigEntry<double> BanditBonusItems; public static ConfigEntry<double> BanditMultiplierForTimedBuff; public static ConfigEntry<double> RailgunnerBonusItems; public static ConfigEntry<double> RailgunnerMultiplierForTimedBuff; public static ConfigEntry<double> VoidSurvivorBonusItems; public static ConfigEntry<double> VoidSurvivorMultiplierForTimedBuff; public static ConfigEntry<double> CustomSurvivorBonusItems; public static ConfigEntry<double> CustomSurvivorMultiplierForTimedBuff; public static ConfigEntry<double> sizeOfSideBars; public static ConfigEntry<bool> disableSideBars; public static ConfigEntry<bool> enableChatItemOutput; public static List<ArtifactDef> artifactDefs = new List<ArtifactDef>(); private void Awake() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown //IL_0062: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Expected O, but got Unknown //IL_0091: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown //IL_00c0: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_00f7: Expected O, but got Unknown //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Expected O, but got Unknown //IL_012e: Expected O, but got Unknown //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Expected O, but got Unknown //IL_015d: Expected O, but got Unknown //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Expected O, but got Unknown //IL_018c: Expected O, but got Unknown //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown //IL_01c3: Expected O, but got Unknown //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Expected O, but got Unknown //IL_01f2: Expected O, but got Unknown //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Expected O, but got Unknown //IL_0221: Expected O, but got Unknown //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Expected O, but got Unknown //IL_0250: Expected O, but got Unknown //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Expected O, but got Unknown //IL_0287: Expected O, but got Unknown //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Expected O, but got Unknown //IL_02be: Expected O, but got Unknown //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Expected O, but got Unknown //IL_02f5: Expected O, but got Unknown //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Expected O, but got Unknown //IL_032c: Expected O, but got Unknown //IL_0340: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Expected O, but got Unknown //IL_035f: Expected O, but got Unknown //IL_0373: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Expected O, but got Unknown //IL_0396: Expected O, but got Unknown //IL_03aa: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Expected O, but got Unknown //IL_03cd: Expected O, but got Unknown //IL_03e1: 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_0404: Expected O, but got Unknown //IL_0404: Expected O, but got Unknown //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Expected O, but got Unknown //IL_043b: Expected O, but got Unknown //IL_044f: Unknown result type (might be due to invalid IL or missing references) //IL_0468: Unknown result type (might be due to invalid IL or missing references) //IL_0472: Expected O, but got Unknown //IL_0472: Expected O, but got Unknown //IL_0486: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Expected O, but got Unknown //IL_04a9: Expected O, but got Unknown //IL_04bd: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) //IL_04e0: Expected O, but got Unknown //IL_04e0: Expected O, but got Unknown //IL_04f4: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_0517: Expected O, but got Unknown //IL_0517: Expected O, but got Unknown //IL_052b: Unknown result type (might be due to invalid IL or missing references) //IL_0544: Unknown result type (might be due to invalid IL or missing references) //IL_054e: Expected O, but got Unknown //IL_054e: Expected O, but got Unknown //IL_0562: Unknown result type (might be due to invalid IL or missing references) //IL_057b: Unknown result type (might be due to invalid IL or missing references) //IL_0585: Expected O, but got Unknown //IL_0585: Expected O, but got Unknown //IL_0599: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) //IL_05bc: Expected O, but got Unknown //IL_05bc: Expected O, but got Unknown //IL_05d0: Unknown result type (might be due to invalid IL or missing references) //IL_05e9: Unknown result type (might be due to invalid IL or missing references) //IL_05f3: Expected O, but got Unknown //IL_05f3: Expected O, but got Unknown //IL_0607: Unknown result type (might be due to invalid IL or missing references) //IL_0620: Unknown result type (might be due to invalid IL or missing references) //IL_062a: Expected O, but got Unknown //IL_062a: Expected O, but got Unknown //IL_063e: Unknown result type (might be due to invalid IL or missing references) //IL_0657: Unknown result type (might be due to invalid IL or missing references) //IL_0661: Expected O, but got Unknown //IL_0661: Expected O, but got Unknown //IL_0675: Unknown result type (might be due to invalid IL or missing references) //IL_068e: Unknown result type (might be due to invalid IL or missing references) //IL_0698: Expected O, but got Unknown //IL_0698: Expected O, but got Unknown //IL_06ac: Unknown result type (might be due to invalid IL or missing references) //IL_06c5: Unknown result type (might be due to invalid IL or missing references) //IL_06cf: Expected O, but got Unknown //IL_06cf: Expected O, but got Unknown //IL_06e3: Unknown result type (might be due to invalid IL or missing references) //IL_06fc: Unknown result type (might be due to invalid IL or missing references) //IL_0706: Expected O, but got Unknown //IL_0706: Expected O, but got Unknown //IL_071a: Unknown result type (might be due to invalid IL or missing references) //IL_0733: Unknown result type (might be due to invalid IL or missing references) //IL_073d: Expected O, but got Unknown //IL_073d: Expected O, but got Unknown //IL_0751: Unknown result type (might be due to invalid IL or missing references) //IL_076a: Unknown result type (might be due to invalid IL or missing references) //IL_0774: Expected O, but got Unknown //IL_0774: Expected O, but got Unknown //IL_0788: 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_07ab: Expected O, but got Unknown //IL_07ab: Expected O, but got Unknown //IL_07bf: Unknown result type (might be due to invalid IL or missing references) //IL_07d8: Unknown result type (might be due to invalid IL or missing references) //IL_07e2: Expected O, but got Unknown //IL_07e2: Expected O, but got Unknown //IL_07f6: Unknown result type (might be due to invalid IL or missing references) //IL_080f: Unknown result type (might be due to invalid IL or missing references) //IL_0819: Expected O, but got Unknown //IL_0819: Expected O, but got Unknown //IL_082d: Unknown result type (might be due to invalid IL or missing references) //IL_0846: Unknown result type (might be due to invalid IL or missing references) //IL_0850: Expected O, but got Unknown //IL_0850: Expected O, but got Unknown //IL_0864: Unknown result type (might be due to invalid IL or missing references) //IL_087d: Unknown result type (might be due to invalid IL or missing references) //IL_0887: Expected O, but got Unknown //IL_0887: Expected O, but got Unknown //IL_089b: Unknown result type (might be due to invalid IL or missing references) //IL_08b4: Unknown result type (might be due to invalid IL or missing references) //IL_08be: Expected O, but got Unknown //IL_08be: Expected O, but got Unknown //IL_08d2: 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_08f5: Expected O, but got Unknown //IL_08f5: Expected O, but got Unknown //IL_0909: Unknown result type (might be due to invalid IL or missing references) //IL_0922: Unknown result type (might be due to invalid IL or missing references) //IL_092c: Expected O, but got Unknown //IL_092c: Expected O, but got Unknown //IL_0940: Unknown result type (might be due to invalid IL or missing references) //IL_0959: Unknown result type (might be due to invalid IL or missing references) //IL_0963: Expected O, but got Unknown //IL_0963: Expected O, but got Unknown //IL_0977: Unknown result type (might be due to invalid IL or missing references) //IL_098c: Unknown result type (might be due to invalid IL or missing references) //IL_0996: Expected O, but got Unknown //IL_0996: Expected O, but got Unknown //IL_09b0: Unknown result type (might be due to invalid IL or missing references) //IL_09b5: Unknown result type (might be due to invalid IL or missing references) _logger = ((BaseUnityPlugin)this).Logger; cfgFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "com.SirHamburger.ArtifactOfDoom.cfg"), true); ArtifactOfDoomUI artifactOfDoomUI = new ArtifactOfDoomUI(); ArtifactOfDoom artifactOfDoom = new ArtifactOfDoom(); NetworkClass networkClass = new NetworkClass(); averageItemsPerStage = cfgFile.Bind<int>(new ConfigDefinition("Gameplay Settings", "averageItemsPerStage"), 5, new ConfigDescription("Excpected items per stage. If below you may get more items if aboth you'll need more kills to get an item", (AcceptableValueBase)null, Array.Empty<object>())); minItemsPerStage = cfgFile.Bind<int>(new ConfigDefinition("Gameplay Settings", "minItemsPerStage"), 2, new ConfigDescription("The expected minimum item count per stage. If you have less Items than that you'll have a decreased chance that you lose items", (AcceptableValueBase)null, Array.Empty<object>())); maxItemsPerStage = cfgFile.Bind<int>(new ConfigDefinition("Gameplay Settings", "maxItemsPerStage"), 7, new ConfigDescription("The expected maximum item count per stage. If you have more Items than that you'll have a chance to lose more than one item per hit", (AcceptableValueBase)null, Array.Empty<object>())); exponentailFactorToCalculateSumOfLostItems = cfgFile.Bind<double>(new ConfigDefinition("Gameplay Settings", "exponentailFactorToCalculateSumOfLostItems"), 1.5, new ConfigDescription("The exponent to Calculate how many items you'll lose if you're over maxItemsPerStage", (AcceptableValueBase)null, Array.Empty<object>())); exponentailFactorIfYouAreUnderAverageItemsPerStage = cfgFile.Bind<double>(new ConfigDefinition("Gameplay Settings", "exponentailFactorIfYouAreUnderAverageItemsPerStage"), 0.0, new ConfigDescription("The exponent to Calculate how many kills you'll need if you're under averageItemsPerStage. The formula is totalitems^exponentailFactorIfYouAreUnderAverageItemsPerStage. Default is 0 so you'll need always two kills.", (AcceptableValueBase)null, Array.Empty<object>())); artifactOfSwarmNerf = cfgFile.Bind<bool>(new ConfigDefinition("Gameplay Settings", "artifactOfSwarmNerf"), false, new ConfigDescription("Enable the nerf for Artifact of Swarm where you've to kill double as many enemies", (AcceptableValueBase)null, Array.Empty<object>())); useArtifactOfSacrificeCalculation = cfgFile.Bind<bool>(new ConfigDefinition("Gameplay Settings", "useArtifactOfSacreficeCalculation"), false, new ConfigDescription("Chance the item gain to a specific drop rate of enemys", (AcceptableValueBase)null, Array.Empty<object>())); multiplayerForArtifactOfSacrificeDropRate = cfgFile.Bind<double>(new ConfigDefinition("Gameplay Settings", "multiplayerForArtifactOfSacrificeDropRate"), 2.0, new ConfigDescription("Multiplier for the drop rate (base Chance is 5)", (AcceptableValueBase)null, Array.Empty<object>())); disableItemProgressBar = cfgFile.Bind<bool>(new ConfigDefinition("UI Settings", "disableItemProgressBar"), false, new ConfigDescription("If true it disables the Progress bar in the bottom of the UI", (AcceptableValueBase)null, Array.Empty<object>())); disableSideBars = cfgFile.Bind<bool>(new ConfigDefinition("UI Settings", "disableSideBars"), false, new ConfigDescription("Disables the item Sidebars", (AcceptableValueBase)null, Array.Empty<object>())); enableChatItemOutput = cfgFile.Bind<bool>(new ConfigDefinition("UI Settings", "enableChatItemOutput"), false, new ConfigDescription("Enables the chat output for gained/lost Items. This setting is not synced.", (AcceptableValueBase)null, Array.Empty<object>())); sizeOfSideBars = cfgFile.Bind<double>(new ConfigDefinition("UI Settings", "sizeOfSideBars"), 0.02, new ConfigDescription("Spezifies the size of the sidebars. 1 is whole window 0 is invisible (but for that plase use the disable setting).", (AcceptableValueBase)null, Array.Empty<object>())); timeAfterHitToNotLoseItemDrizzly = cfgFile.Bind<double>(new ConfigDefinition("Gameplay Settings", "timeAfterHitToNotLooseItemDrizzly"), 0.8, new ConfigDescription("The time in seconds where you will not lose items after you lost one on drizzly", (AcceptableValueBase)null, Array.Empty<object>())); timeAfterHitToNotLoseItemRainstorm = cfgFile.Bind<double>(new ConfigDefinition("Gameplay Settings", "timeAfterHitToNotLooseItemRainstorm"), 0.2, new ConfigDescription("The time in seconds where you will not lose items after you lost one on rainstorm", (AcceptableValueBase)null, Array.Empty<object>())); timeAfterHitToNotLoseItemMonsoon = cfgFile.Bind<double>(new ConfigDefinition("Gameplay Settings", "timeAfterHitToNotLooseItemMonsoon"), 0.05, new ConfigDescription("The time in seconds where you will not lose items after you lost one on monsoon", (AcceptableValueBase)null, Array.Empty<object>())); timeAfterHitToNotLoseItemOtherDifficulty = cfgFile.Bind<string>(new ConfigDefinition("Gameplay Settings", "timeAfterHitToNotLooseOtherDifficulty"), "[{\"DifficultyIndex\": \"DIFFICULTYINDEX\", \"time\": 1.0}]", new ConfigDescription("The time in seconds where you will not lose items after you lost one on monsoon", (AcceptableValueBase)null, Array.Empty<object>())); CommandoBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "CommandoBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); CommandoMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "commandoMultiplyerForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); HuntressBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "HuntressBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); HuntressMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "HuntressMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); MULTBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "MULTBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); MULTMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "MULTMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); EngineerBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "EngineerBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); EngineerMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "EngineerMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); ArtificerBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "ArtificerBonusItems"), 2.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); ArtificerMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "ArtificerMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); MercenaryBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "MercenaryBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); MercenaryMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "MercenaryMultiplierForTimedBuff"), 4.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); RexBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "RexBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); RexMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "RexMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); LoaderBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "LoaderBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); LoaderMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "LoaderMultiplierForTimedBuff"), 4.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); AcridBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "AcridBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); AcridMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "AcridMultiplierForTimedBuff"), 4.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); CaptainBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "CaptainBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); CaptainMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "BanditMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); BanditBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "BanditBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); BanditMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "BanditMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); RailgunnerBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "RailgunnerBonusItems"), 2.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); RailgunnerMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "RailgunnerMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); VoidSurvivorBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "VoidSurvivorBonusItems"), 2.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); VoidSurvivorMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "VoidSurvivorMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLooseItems", (AcceptableValueBase)null, Array.Empty<object>())); CustomSurvivorBonusItems = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "CustomSurvivorBonusItems"), 1.0, new ConfigDescription("The count of items which you get if you kill enough enemies", (AcceptableValueBase)null, Array.Empty<object>())); CustomSurvivorMultiplierForTimedBuff = cfgFile.Bind<double>(new ConfigDefinition("Character specific settings", "CustomSurvivorMultiplierForTimedBuff"), 1.0, new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLoseItems", (AcceptableValueBase)null, Array.Empty<object>())); CustomChars = cfgFile.Bind<string>(new ConfigDefinition("Character specific settings", "CustomCharacters"), "[{\"Name\": \"CUSTOM_CHAR_BODY_NAME1\", \"MultiplierForTimedBuff\": 1.0, \"BonusItems\": 1.0},{\"Name\": \"CUSTOM_CHAR_BODY_NAME2\", \"MultiplierForTimedBuff\": 2.0, \"BonusItems\": 2.0}]", new ConfigDescription("The Multiplier for that specific character for the length of timeAfterHitToNotLoseItems", (AcceptableValueBase)null, Array.Empty<object>())); ((Object)ArtifactOfDoomBuff).name = "ArtifactOfDoomDidLoseItem"; ArtifactOfDoomBuff.buffColor = Color.black; ArtifactOfDoomBuff.canStack = false; ArtifactOfDoomBuff.isDebuff = false; ContentAddition.AddBuffDef(ArtifactOfDoomBuff); } } public class ArtifactOfDoom { public class Character { public string Name { get; set; } public float MultiplierForTimedBuff { get; set; } public float BonusItems { get; set; } } public class Difficulty { public int DifficultyIndex { get; set; } public float time { get; set; } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Awake <>9__15_0; internal void <LoadBehavior>b__15_0(orig_Awake orig, GameEndReportPanelController self) { orig.Invoke(self); if (Networking._instance.IsArtifactEnabled) { string[] array = new string[self.statsToDisplay.Length + 2]; self.statsToDisplay.CopyTo(array, 0); array[^2] = "Lostitems"; array[^1] = "Gainitems"; self.statsToDisplay = array; } } } public static ArtifactDef artifactOfDoomDefinition = ScriptableObject.CreateInstance<ArtifactDef>(); private const string GrayColor = "7e91af"; private const string ErrorColor = "ff0000"; public static bool debug = false; private static List<CharacterBody> Playername = new List<CharacterBody>(); private static List<int> counter = new List<int>(); private int currentStage = 0; private Dictionary<NetworkUser, bool> LockNetworkUser = new Dictionary<NetworkUser, bool>(); private Dictionary<NetworkUser, bool> LockItemGainNetworkUser = new Dictionary<NetworkUser, bool>(); private static StatDef statsLostItems; private static StatDef statsGainItems; public static Dictionary<uint, Queue<ItemDef>> QueueLostItemSprite = new Dictionary<uint, Queue<ItemDef>>(); public static Dictionary<uint, Queue<ItemDef>> QueueGainedItemSprite = new Dictionary<uint, Queue<ItemDef>>(); private static double timeForBuff = -1.0; public ArtifactOfDoom() { artifactOfDoomDefinition.nameToken = "Artifact of Doom"; artifactOfDoomDefinition.descriptionToken = "You get items on enemy kills but lose items every time you take damage."; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ArtifactOfDoom.artifactofdoom")) { AssetBundle val = AssetBundle.LoadFromStream(stream); artifactOfDoomDefinition.smallIconSelectedSprite = val.LoadAsset<Sprite>("Assets/Import/artifactofdoom_icon/ArtifactDoomEnabled.png"); artifactOfDoomDefinition.smallIconDeselectedSprite = val.LoadAsset<Sprite>("Assets/Import/artifactofdoom_icon/ArtifactDoomDisabled.png"); ContentAddition.AddArtifactDef(artifactOfDoomDefinition); } LoadBehavior(); } protected void LoadBehavior() { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown Playername = new List<CharacterBody>(); counter = new List<int>(); currentStage = 0; statsLostItems = null; statsGainItems = null; statsLostItems = StatDef.Register("Lostitems", (StatRecordType)0, (StatDataType)0, 0.0, (DisplayValueFormatterDelegate)null); statsGainItems = StatDef.Register("Gainitems", (StatRecordType)0, (StatDataType)0, 0.0, (DisplayValueFormatterDelegate)null); object obj = <>c.<>9__15_0; if (obj == null) { hook_Awake val = delegate(orig_Awake orig, GameEndReportPanelController self) { orig.Invoke(self); if (Networking._instance.IsArtifactEnabled) { string[] array = new string[self.statsToDisplay.Length + 2]; self.statsToDisplay.CopyTo(array, 0); array[^2] = "Lostitems"; array[^1] = "Gainitems"; self.statsToDisplay = array; } }; <>c.<>9__15_0 = val; obj = (object)val; } GameEndReportPanelController.Awake += (hook_Awake)obj; SceneDirector.PopulateScene += (hook_PopulateScene)delegate(orig_PopulateScene orig, SceneDirector self) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Invalid comparison between Unknown and I4 //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Invalid comparison between Unknown and I4 //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Invalid comparison between Unknown and I4 //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Invalid comparison between Unknown and I4 //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); currentStage = Run.instance.stageClearCount + 1; if ((int)Run.instance.selectedDifficulty == 0) { timeForBuff = ArtifactOfDoomConfig.timeAfterHitToNotLoseItemDrizzly.Value; } if ((int)Run.instance.selectedDifficulty == 1) { timeForBuff = ArtifactOfDoomConfig.timeAfterHitToNotLoseItemRainstorm.Value; } if ((int)Run.instance.selectedDifficulty == 2) { timeForBuff = ArtifactOfDoomConfig.timeAfterHitToNotLoseItemMonsoon.Value; } if (timeForBuff == -1.0) { List<Difficulty> list2 = ArtifactOfDoomConfig.timeAfterHitToNotLoseItemOtherDifficulty.Value.FromJson<List<Difficulty>>(); foreach (Difficulty item in list2) { if ((int)Run.instance.selectedDifficulty == item.DifficultyIndex) { timeForBuff = item.time; } } if (timeForBuff == -1.0) { DifficultyIndex selectedDifficulty = Run.instance.selectedDifficulty; Debug.LogWarning((object)("Didn't find valid Configuration for Selected Difficulty. Falling back to 0.1 seconds for Buff. If you want a own definition fill out timeAfterHitToNotLoseItemOtherDifficulty in the Config. DifficultyIndex=" + ((object)(DifficultyIndex)(ref selectedDifficulty)).ToString())); timeForBuff = 0.1; } } QueueLostItemSprite = new Dictionary<uint, Queue<ItemDef>>(); QueueGainedItemSprite = new Dictionary<uint, Queue<ItemDef>>(); Playername = new List<CharacterBody>(); counter = new List<int>(); LockNetworkUser.Clear(); }; CharacterBody.OnInventoryChanged += (hook_OnInventoryChanged)delegate(orig_OnInventoryChanged orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)Networking._instance == (Object)null) && Networking._instance.IsArtifactEnabled && self.isPlayerControlled) { NetworkUser networkUserOfCharacterBody2 = getNetworkUserOfCharacterBody(self); int num6 = calculateEnemyCountToTrigger(self.inventory); if (!Playername.Contains(self)) { Playername.Add(self); counter.Add(0); } if ((Object)(object)networkUserOfCharacterBody2 != (Object)null) { string killedNeededEnemies4 = counter[Playername.IndexOf(self)] + "," + num6; if (NetworkServer.active) { Networking.ServerEnsureNetworking(); Networking._instance.CallTargetUpdateProgressBar(((NetworkBehaviour)networkUserOfCharacterBody2).connectionToClient, killedNeededEnemies4); } } } }; GlobalEventManager.OnCharacterDeath += (hook_OnCharacterDeath)delegate(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_058b: Unknown result type (might be due to invalid IL or missing references) //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_0512: Unknown result type (might be due to invalid IL or missing references) //IL_0479: Unknown result type (might be due to invalid IL or missing references) //IL_04a2: Unknown result type (might be due to invalid IL or missing references) //IL_04ae: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_0528: Unknown result type (might be due to invalid IL or missing references) //IL_052d: Unknown result type (might be due to invalid IL or missing references) //IL_04f0: Expected O, but got Unknown //IL_0542: Unknown result type (might be due to invalid IL or missing references) //IL_0547: Unknown result type (might be due to invalid IL or missing references) //IL_055d: Unknown result type (might be due to invalid IL or missing references) //IL_0562: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_0387: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Expected O, but got Unknown //IL_03ec: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageReport); Networking._instance.NetworkIsArtifactEnabled = RunArtifactManager.instance.IsArtifactEnabled(artifactOfDoomDefinition.artifactIndex); Networking._instance.NetworkIsCalculationSacrifice = ArtifactOfDoomConfig.useArtifactOfSacrificeCalculation.Value; if (Networking._instance.IsArtifactEnabled && !Run.instance.isGameOverServer && !damageReport.victimBody.isPlayerControlled && !((Object)(object)damageReport.attackerBody == (Object)null) && !((Object)(object)damageReport.attackerBody.inventory == (Object)null) && !((Object)(object)damageReport.victimBody.inventory == (Object)null)) { if ((Object)(object)damageReport.attackerOwnerMaster != (Object)null && !Playername.Contains(damageReport.attackerBody)) { Playername.Add(damageReport.attackerOwnerMaster.GetBody()); counter.Add(0); } if (!Playername.Contains(damageReport.attackerBody)) { Playername.Add(damageReport.attackerBody); counter.Add(0); } CharacterBody val3 = ((!((Object)(object)damageReport.attackerOwnerMaster != (Object)null)) ? damageReport.attackerBody : damageReport.attackerOwnerMaster.GetBody()); if (val3.isPlayerControlled) { uint key2 = 0u; int num5 = calculateEnemyCountToTrigger(val3.inventory); bool flag = doesEnemyTrigger(damageReport); if (counter[Playername.IndexOf(val3)] <= num5 && !ArtifactOfDoomConfig.useArtifactOfSacrificeCalculation.Value) { counter[Playername.IndexOf(val3)]++; NetworkUser networkUserOfDamageReport = getNetworkUserOfDamageReport(damageReport, withMaster: true); string killedNeededEnemies2 = counter[Playername.IndexOf(val3)] + "," + num5; if (NetworkServer.active) { Networking.ServerEnsureNetworking(); Networking._instance.CallTargetUpdateProgressBar(((NetworkBehaviour)networkUserOfDamageReport).connectionToClient, killedNeededEnemies2); } } else if (!ArtifactOfDoomConfig.useArtifactOfSacrificeCalculation.Value || flag) { NetworkInstanceId netId2; if ((Object)(object)damageReport.attackerOwnerMaster != (Object)null) { CharacterBody body = damageReport.attackerOwnerMaster.GetBody(); double characterSpezificBuffLengthMultiplier2 = getCharacterSpezificBuffLengthMultiplier(body.baseNameToken); characterSpezificBuffLengthMultiplier2 *= 100.0; Random random2 = new Random(); while (characterSpezificBuffLengthMultiplier2 > (double)random2.Next(0, 99)) { ItemIndex val4 = GiveAndReturnRandomItem(body.inventory); if (ArtifactOfDoomConfig.enableChatItemOutput.Value) { ItemDef itemDef2 = ItemCatalog.GetItemDef(val4); string string2 = Language.GetString(itemDef2.nameToken); string coloredUserName2 = damageReport.attackerOwnerMaster.GetBody().GetColoredUserName(); int itemCount2 = damageReport.attackerOwnerMaster.GetBody().inventory.GetItemCount(itemDef2.itemIndex); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = damageReport.attackerOwnerMaster.GetBody().GetColoredUserName() + "<color=#7e91af> gained</color> " + string.Format("{0} ({1})</color> <color=#{2}></color>", string2 ?? "???", itemCount2, "7e91af") }); } PlayerStatsComponent.FindBodyStatSheet(body).PushStatValue(statsGainItems, 1uL); Dictionary<uint, Queue<ItemDef>> queueGainedItemSprite = QueueGainedItemSprite; netId2 = ((NetworkBehaviour)body).netId; if (queueGainedItemSprite.ContainsKey(((NetworkInstanceId)(ref netId2)).Value)) { netId2 = ((NetworkBehaviour)body).netId; key2 = ((NetworkInstanceId)(ref netId2)).Value; } else { Dictionary<uint, Queue<ItemDef>> queueGainedItemSprite2 = QueueGainedItemSprite; netId2 = ((NetworkBehaviour)body).netId; queueGainedItemSprite2.Add(((NetworkInstanceId)(ref netId2)).Value, new Queue<ItemDef>()); netId2 = ((NetworkBehaviour)body).netId; key2 = ((NetworkInstanceId)(ref netId2)).Value; } QueueGainedItemSprite[key2].Enqueue(ItemCatalog.GetItemDef(val4)); characterSpezificBuffLengthMultiplier2 -= 100.0; } } else { CharacterBody body = damageReport.attackerBody; double characterSpezificItemCount = getCharacterSpezificItemCount(body.baseNameToken); characterSpezificItemCount *= 100.0; Random random3 = new Random(); while (characterSpezificItemCount > (double)random3.Next(0, 99)) { ItemIndex val5 = GiveAndReturnRandomItem(body.inventory); if (ArtifactOfDoomConfig.enableChatItemOutput.Value) { ItemDef itemDef3 = ItemCatalog.GetItemDef(val5); string string3 = Language.GetString(itemDef3.nameToken); string coloredUserName3 = body.GetColoredUserName(); int itemCount3 = body.inventory.GetItemCount(itemDef3.itemIndex); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = body.GetColoredUserName() + "<color=#7e91af> gained</color> " + string.Format("{0} ({1})</color> <color=#{2}></color>", string3 ?? "???", itemCount3, "7e91af") }); } PlayerStatsComponent.FindBodyStatSheet(body).PushStatValue(statsGainItems, 1uL); Dictionary<uint, Queue<ItemDef>> queueGainedItemSprite3 = QueueGainedItemSprite; netId2 = ((NetworkBehaviour)body).netId; if (queueGainedItemSprite3.ContainsKey(((NetworkInstanceId)(ref netId2)).Value)) { netId2 = ((NetworkBehaviour)body).netId; key2 = ((NetworkInstanceId)(ref netId2)).Value; } else { try { Dictionary<uint, Queue<ItemDef>> queueGainedItemSprite4 = QueueGainedItemSprite; netId2 = ((NetworkBehaviour)body).netId; queueGainedItemSprite4.Add(((NetworkInstanceId)(ref netId2)).Value, new Queue<ItemDef>()); netId2 = ((NetworkBehaviour)body).netId; key2 = ((NetworkInstanceId)(ref netId2)).Value; } catch (Exception) { Debug.LogError((object)"[SirHamburger ArtifactOfDoom] Error while excecuting : QueueGainedItemSprite.Add(body.netId.Value, new Queue<Sprite>()); (line 203)"); } } QueueGainedItemSprite[key2].Enqueue(ItemCatalog.GetItemDef(val5)); characterSpezificItemCount -= 100.0; } } if (QueueGainedItemSprite[key2].Count > 10) { QueueGainedItemSprite[key2].Dequeue(); } string text2 = ""; foreach (ItemDef item2 in QueueGainedItemSprite[key2]) { text2 = text2 + ((Object)item2).name + " "; } NetworkUser networkUserOfDamageReport2 = getNetworkUserOfDamageReport(damageReport, withMaster: true); if (!LockItemGainNetworkUser.ContainsKey(networkUserOfDamageReport2)) { LockItemGainNetworkUser.Add(networkUserOfDamageReport2, value: false); } counter[Playername.IndexOf(val3)]++; if (!LockItemGainNetworkUser[networkUserOfDamageReport2]) { LockItemGainNetworkUser[networkUserOfDamageReport2] = false; LockItemGainNetworkUser[networkUserOfDamageReport2] = false; string killedNeededEnemies3 = counter[Playername.IndexOf(val3)] + "," + num5; if (NetworkServer.active) { Networking._instance.CallTargetAddGainedItemsToPlayers(((NetworkBehaviour)networkUserOfDamageReport2).connectionToClient, text2); Networking.ServerEnsureNetworking(); Networking._instance.CallTargetUpdateProgressBar(((NetworkBehaviour)networkUserOfDamageReport2).connectionToClient, killedNeededEnemies3); } } counter[Playername.IndexOf(val3)] = 0; } } } }; HealthComponent.TakeDamage += (hook_TakeDamage)delegate(orig_TakeDamage orig, HealthComponent self, DamageInfo damageinfo) { //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Invalid comparison between Unknown and I4 //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_0395: Unknown result type (might be due to invalid IL or missing references) //IL_03ba: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_0414: Unknown result type (might be due to invalid IL or missing references) //IL_0419: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_045a: Expected O, but got Unknown //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageinfo); if (Networking._instance.IsArtifactEnabled && !damageinfo.rejected && !((Object)(object)self.body == (Object)null) && !((Object)(object)self.body.inventory == (Object)null) && !Run.instance.isGameOverServer && damageinfo != null && !((Object)(object)damageinfo.attacker == (Object)null) && !self.body.HasBuff(ArtifactOfDoomConfig.ArtifactOfDoomBuff)) { int totalItemCountOfPlayer = getTotalItemCountOfPlayer(self.body.inventory); if (self.body.isPlayerControlled && totalItemCountOfPlayer > 0 && ((Object)self).name != ((Object)damageinfo.attacker).name) { Dictionary<ItemIndex, int> dictionary = new Dictionary<ItemIndex, int>(); List<ItemIndex> list = new List<ItemIndex>(); GenericStaticEnumerable<ItemIndex, AllItemsEnumerator> allItems = ItemCatalog.allItems; AllItemsEnumerator enumerator = allItems.GetEnumerator(); try { while (((AllItemsEnumerator)(ref enumerator)).MoveNext()) { ItemIndex current = ((AllItemsEnumerator)(ref enumerator)).Current; if (self.body.inventory.GetItemCount(current) > 0) { dictionary.Add(current, self.body.inventory.GetItemCount(current)); list.Add(current); } } } finally { ((IDisposable)(AllItemsEnumerator)(ref enumerator)).Dispose(); } double num = 100.0; if (totalItemCountOfPlayer <= ArtifactOfDoomConfig.minItemsPerStage.Value * currentStage) { num = Math.Sqrt((double)totalItemCountOfPlayer / ((double)currentStage * (double)ArtifactOfDoomConfig.minItemsPerStage.Value)); num *= 100.0; } Random random = new Random(); for (int i = 0; i < self.body.inventory.GetItemCount(Items.Clover) + 1; i++) { int num2 = random.Next(1, 100); if (num < (double)num2) { return; } } num = 100.0; if (totalItemCountOfPlayer > ArtifactOfDoomConfig.maxItemsPerStage.Value * currentStage) { num = Math.Pow((double)totalItemCountOfPlayer / ((double)ArtifactOfDoomConfig.maxItemsPerStage.Value * (double)currentStage), ArtifactOfDoomConfig.exponentailFactorToCalculateSumOfLostItems.Value); num *= 100.0; } int num3 = 0; uint key = 50000u; while (num > 0.0) { Dictionary<uint, Queue<ItemDef>> queueLostItemSprite = QueueLostItemSprite; NetworkInstanceId netId = ((NetworkBehaviour)self.body).netId; if (queueLostItemSprite.ContainsKey(((NetworkInstanceId)(ref netId)).Value)) { netId = ((NetworkBehaviour)self.body).netId; key = ((NetworkInstanceId)(ref netId)).Value; } else { try { Dictionary<uint, Queue<ItemDef>> queueLostItemSprite2 = QueueLostItemSprite; netId = ((NetworkBehaviour)self.body).netId; queueLostItemSprite2.Add(((NetworkInstanceId)(ref netId)).Value, new Queue<ItemDef>()); netId = ((NetworkBehaviour)self.body).netId; key = ((NetworkInstanceId)(ref netId)).Value; } catch (Exception) { Debug.Log((object)"[SirHamburger ArtifactOfDoom] Error in Line 311"); } } if (num < (double)random.Next(0, 99)) { break; } num3++; int index = random.Next(0, dictionary.Count - 1); ItemIndex val2 = list[index]; while (dictionary[val2] == 0) { index = random.Next(0, dictionary.Count - 1); val2 = list[index]; } dictionary[val2]--; if (!ItemCatalog.lunarItemList.Contains(val2) && (int)ItemCatalog.GetItemDef(val2).tier != 5 && val2 != Items.CaptainDefenseMatrix.itemIndex) { self.body.inventory.RemoveItem(val2, 1); if (ArtifactOfDoomConfig.enableChatItemOutput.Value) { ItemDef itemDef = ItemCatalog.GetItemDef(val2); string @string = Language.GetString(itemDef.nameToken); string coloredUserName = self.body.GetColoredUserName(); int itemCount = self.body.inventory.GetItemCount(itemDef.itemIndex); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = self.body.GetColoredUserName() + "<color=#7e91af> lost</color> " + string.Format("{0} ({1})</color> <color=#{2}></color>", @string ?? "???", itemCount, "7e91af") }); } PlayerStatsComponent.FindBodyStatSheet(self.body).PushStatValue(statsLostItems, 1uL); QueueLostItemSprite[key].Enqueue(ItemCatalog.GetItemDef(val2)); if (QueueLostItemSprite[key].Count > 10) { QueueLostItemSprite[key].Dequeue(); } double characterSpezificBuffLengthMultiplier = getCharacterSpezificBuffLengthMultiplier(self.body.baseNameToken); self.body.AddTimedBuff(ArtifactOfDoomConfig.ArtifactOfDoomBuff, (float)(timeForBuff * (double)(float)characterSpezificBuffLengthMultiplier)); } num -= 100.0; } string text = ""; foreach (ItemDef item3 in QueueLostItemSprite[key]) { text = text + ((Object)item3).name + " "; } NetworkUser networkUserOfCharacterBody = getNetworkUserOfCharacterBody(self.body); if ((Object)(object)networkUserOfCharacterBody == (Object)null) { Debug.LogError((object)"--------------------------------tempNetworkUser(lostitems)==null---------------------------"); } if (!LockNetworkUser.ContainsKey(networkUserOfCharacterBody)) { LockNetworkUser.Add(networkUserOfCharacterBody, value: false); } if (!LockNetworkUser[networkUserOfCharacterBody]) { LockNetworkUser[networkUserOfCharacterBody] = false; int num4 = calculateEnemyCountToTrigger(self.body.inventory); string killedNeededEnemies = counter[Playername.IndexOf(self.body)] + "," + num4; if (NetworkServer.active) { Networking._instance.CallTargetAddLostItemsOfPlayers(((NetworkBehaviour)networkUserOfCharacterBody).connectionToClient, text); Networking.ServerEnsureNetworking(); Networking._instance.CallTargetUpdateProgressBar(((NetworkBehaviour)networkUserOfCharacterBody).connectionToClient, killedNeededEnemies); } } } } }; } private NetworkUser getNetworkUserOfDamageReport(DamageReport report, bool withMaster) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) NetworkUser result = null; foreach (NetworkUser readOnlyInstances in NetworkUser.readOnlyInstancesList) { if ((Object)(object)report.attackerOwnerMaster != (Object)null && withMaster) { if ((Object)(object)readOnlyInstances.GetCurrentBody() != (Object)null && ((NetworkBehaviour)readOnlyInstances.GetCurrentBody()).netId == ((NetworkBehaviour)report.attackerOwnerMaster.GetBody()).netId) { result = readOnlyInstances; } } else if ((Object)(object)readOnlyInstances.GetCurrentBody() != (Object)null && ((NetworkBehaviour)readOnlyInstances.GetCurrentBody()).netId == ((NetworkBehaviour)report.attackerBody).netId) { result = readOnlyInstances; } } return result; } private NetworkUser getNetworkUserOfCharacterBody(CharacterBody body) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) NetworkUser result = null; foreach (NetworkUser readOnlyInstances in NetworkUser.readOnlyInstancesList) { if ((Object)(object)readOnlyInstances.GetCurrentBody() != (Object)null && ((NetworkBehaviour)readOnlyInstances.GetCurrentBody()).netId == ((NetworkBehaviour)body).netId) { result = readOnlyInstances; } } return result; } private int getTotalItemCountOfPlayer(Inventory inventory) { return inventory.GetTotalItemCountOfTier((ItemTier)0) + inventory.GetTotalItemCountOfTier((ItemTier)1) + inventory.GetTotalItemCountOfTier((ItemTier)2); } private int calculateEnemyCountToTrigger(Inventory inventory) { int totalItemCountOfPlayer = getTotalItemCountOfPlayer(inventory); int num = 0; num = (int)((0.5 + 0.5 * (double)Mathf.Atan(0.4f * (float)totalItemCountOfPlayer - (float)(ArtifactOfDoomConfig.averageItemsPerStage.Value * (1 + currentStage) / 2)) / 2.0) * 40.0 - 3.0); if (num < 1) { num = 1; } if (RunArtifactManager.instance.IsArtifactEnabled(Artifacts.swarmsArtifactDef) && ArtifactOfDoomConfig.artifactOfSwarmNerf.Value) { num *= 2; } return num; } private double getCharacterSpezificItemCount(string baseNameToken) { switch (baseNameToken) { case "COMMANDO_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Commando")); } return ArtifactOfDoomConfig.CommandoBonusItems.Value; case "HUNTRESS_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Huntress")); } return ArtifactOfDoomConfig.HuntressBonusItems.Value; case "ENGI_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Engineer")); } return ArtifactOfDoomConfig.EngineerBonusItems.Value; case "TOOLBOT_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: MULT")); } return ArtifactOfDoomConfig.MULTBonusItems.Value; case "MAGE_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Artificer")); } return ArtifactOfDoomConfig.ArtificerBonusItems.Value; case "MERC_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Mercenary")); } return ArtifactOfDoomConfig.MercenaryBonusItems.Value; case "TREEBOT_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Rex")); } return ArtifactOfDoomConfig.RexBonusItems.Value; case "LOADER_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Loader")); } return ArtifactOfDoomConfig.LoaderBonusItems.Value; case "CROCO_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Acrid")); } return ArtifactOfDoomConfig.AcridBonusItems.Value; case "CAPTAIN_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Captain")); } return ArtifactOfDoomConfig.CaptainBonusItems.Value; case "BANDIT2_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Bandit")); } return ArtifactOfDoomConfig.BanditBonusItems.Value; case "RAILGUNNER_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Railgunner")); } return ArtifactOfDoomConfig.RailgunnerBonusItems.Value; case "VOIDSURVIVOR_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: VoidSurvivor")); } return ArtifactOfDoomConfig.VoidSurvivorBonusItems.Value; default: { string value = ArtifactOfDoomConfig.CustomChars.Value; List<Character> list = value.FromJson<List<Character>>(); foreach (Character item in list) { if (baseNameToken == item.Name) { return item.BonusItems; } } Debug.LogWarning((object)("did not find a valid configuation setting for Character " + baseNameToken + " you can add one in the settings")); if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Acrid")); } return ArtifactOfDoomConfig.CustomSurvivorBonusItems.Value; } } } private double getCharacterSpezificBuffLengthMultiplier(string baseNameToken) { switch (baseNameToken) { case "COMMANDO_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Commando")); } return ArtifactOfDoomConfig.CommandoMultiplierForTimedBuff.Value; case "HUNTRESS_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Huntress")); } return ArtifactOfDoomConfig.HuntressMultiplierForTimedBuff.Value; case "ENGI_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Engineer")); } return ArtifactOfDoomConfig.EngineerMultiplierForTimedBuff.Value; case "TOOLBOT_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: MULT")); } return ArtifactOfDoomConfig.MULTMultiplierForTimedBuff.Value; case "MAGE_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Artificer")); } return ArtifactOfDoomConfig.ArtificerMultiplierForTimedBuff.Value; case "MERC_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Mercenary")); } return ArtifactOfDoomConfig.MercenaryMultiplierForTimedBuff.Value; case "TREEBOT_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Rex")); } return ArtifactOfDoomConfig.RexMultiplierForTimedBuff.Value; case "LOADER_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Loader")); } return ArtifactOfDoomConfig.LoaderMultiplierForTimedBuff.Value; case "CROCO_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Acrid")); } return ArtifactOfDoomConfig.AcridMultiplierForTimedBuff.Value; case "CAPTAIN_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Captain")); } return ArtifactOfDoomConfig.CaptainMultiplierForTimedBuff.Value; case "BANDIT2_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Bandit")); } return ArtifactOfDoomConfig.BanditMultiplierForTimedBuff.Value; case "RAILGUNNER_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Railgunner")); } return ArtifactOfDoomConfig.RailgunnerMultiplierForTimedBuff.Value; case "VOIDSURVIVOR_BODY_NAME": if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: VoidSurvivor")); } return ArtifactOfDoomConfig.VoidSurvivorMultiplierForTimedBuff.Value; default: { string value = ArtifactOfDoomConfig.CustomChars.Value; List<Character> list = value.FromJson<List<Character>>(); foreach (Character item in list) { if (baseNameToken == item.Name) { return item.MultiplierForTimedBuff; } } Debug.LogWarning((object)("did not find a valid configuation setting for Character " + baseNameToken + " you can add one in the settings")); if (debug) { Debug.LogWarning((object)("Character baseNameToken = " + baseNameToken + " returning: Acrid")); } return ArtifactOfDoomConfig.CustomSurvivorMultiplierForTimedBuff.Value; } } } public ItemIndex GiveAndReturnRandomItem(Inventory inventory) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) List<ItemIndex> tier1ItemList = ItemCatalog.tier1ItemList; List<ItemIndex> tier2ItemList = ItemCatalog.tier2ItemList; List<ItemIndex> tier3ItemList = ItemCatalog.tier3ItemList; WeightedSelection<List<ItemIndex>> val = new WeightedSelection<List<ItemIndex>>(8); val.AddChoice(tier1ItemList, 80f); val.AddChoice(tier2ItemList, 19f); val.AddChoice(tier3ItemList, 1f); List<ItemIndex> list = val.Evaluate(Random.value); ItemIndex val2 = list[Random.Range(0, list.Count)]; inventory.GiveItem(val2, 1); return val2; } protected void OnDestroy() { QueueLostItemSprite = new Dictionary<uint, Queue<ItemDef>>(); QueueGainedItemSprite = new Dictionary<uint, Queue<ItemDef>>(); statsLostItems = null; statsGainItems = null; Playername = new List<CharacterBody>(); counter = new List<int>(); } private bool doesEnemyTrigger(DamageReport damageReport) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) if (!ArtifactOfDoomConfig.useArtifactOfSacrificeCalculation.Value || !Object.op_Implicit((Object)(object)damageReport.victimMaster) || (damageReport.attackerTeamIndex == damageReport.victimTeamIndex && Object.op_Implicit((Object)(object)damageReport.victimMaster.minionOwnership.ownerMaster))) { return false; } float expAdjustedDropChancePercent = Util.GetExpAdjustedDropChancePercent(5f * (float)ArtifactOfDoomConfig.multiplayerForArtifactOfSacrificeDropRate.Value, ((Component)damageReport.victim).gameObject); return Util.CheckRoll(expAdjustedDropChancePercent, 0f, (CharacterMaster)null); } } public class ArtifactOfDoomUI { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_RemoveItem_ItemIndex_int <>9__1_0; internal void <.ctor>b__1_0(orig_RemoveItem_ItemIndex_int orig, Inventory self, ItemIndex itemindex1, int ItemIndex2) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, itemindex1, ItemIndex2); } } public GameObject ModCanvas = null; public Transform HUDRoot = null; public GameObject ModExpBarGroup = null; public static List<GameObject> listGainedImages = new List<GameObject>(); public static List<GameObject> listLostImages = new List<GameObject>(); public static GameObject itemGainBar; public static GameObject itemGainFrame; public ArtifactOfDoomUI() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown HUD.Awake += new hook_Awake(HUDAwake); object obj = <>c.<>9__1_0; if (obj == null) { hook_RemoveItem_ItemIndex_int val = delegate(orig_RemoveItem_ItemIndex_int orig, Inventory self, ItemIndex itemindex1, int ItemIndex2) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, itemindex1, ItemIndex2); }; <>c.<>9__1_0 = val; obj = (object)val; } Inventory.RemoveItem_ItemIndex_int += (hook_RemoveItem_ItemIndex_int)obj; } private void SetUpModCanvas() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)ModCanvas == (Object)null) { ModCanvas = new GameObject("UIModifierCanvas"); ModCanvas.AddComponent<Canvas>(); ModCanvas.GetComponent<Canvas>().renderMode = (RenderMode)1; if ((Object)(object)HUDRoot != (Object)null) { ModCanvas.GetComponent<Canvas>().worldCamera = ((Component)((Component)HUDRoot).transform.root).gameObject.GetComponent<Canvas>().worldCamera; } ModCanvas.AddComponent<CanvasScaler>(); ModCanvas.GetComponent<CanvasScaler>().uiScaleMode = (ScaleMode)1; ModCanvas.GetComponent<CanvasScaler>().referenceResolution = new Vector2(1920f, 1080f); ModCanvas.GetComponent<CanvasScaler>().screenMatchMode = (ScreenMatchMode)1; } } public void HUDAwake(orig_Awake orig, HUD self) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); NetworkClass.EnsureNetworking(); Networking._instance.NetworkIsArtifactEnabled = RunArtifactManager.instance.IsArtifactEnabled(ArtifactOfDoom.artifactOfDoomDefinition.artifactIndex); Networking._instance.NetworkIsCalculationSacrifice = ArtifactOfDoomConfig.useArtifactOfSacrificeCalculation.Value; if (Networking._instance.IsArtifactEnabled) { HUDRoot = ((Component)self).transform.root; MainExpBarStart(); } } private void MainExpBarStart() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Expected O, but got Unknown //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Expected O, but got Unknown //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Expected O, but got Unknown //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03d5: Unknown result type (might be due to invalid IL or missing references) //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)HUDRoot != (Object)null) { try { SetUpModCanvas(); listGainedImages.Clear(); listLostImages.Clear(); float num = Convert.ToSingle(ArtifactOfDoomConfig.sizeOfSideBars.Value); Resolution currentResolution = Screen.currentResolution; float num2 = ((Resolution)(ref currentResolution)).width; currentResolution = Screen.currentResolution; float num3 = num2 / (float)((Resolution)(ref currentResolution)).height; float num4 = num * num3; float num5 = num4 + 0.01f; for (int i = 0; i < 10; i++) { ModExpBarGroup = new GameObject("GainedItems" + i); ModExpBarGroup.transform.SetParent(ModCanvas.transform); ModExpBarGroup.AddComponent<RectTransform>(); ModExpBarGroup.GetComponent<RectTransform>().anchorMin = new Vector2(0f, (float)(0.2 + (double)((float)i * num5))); ModExpBarGroup.GetComponent<RectTransform>().anchorMax = new Vector2(num, (float)(0.2 + (double)num4 + (double)((float)i * num5))); ModExpBarGroup.GetComponent<RectTransform>().sizeDelta = Vector2.zero; ModExpBarGroup.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; listGainedImages.Add(ModExpBarGroup); ModExpBarGroup = new GameObject("LostItems" + i); ModExpBarGroup.transform.SetParent(ModCanvas.transform); ModExpBarGroup.AddComponent<RectTransform>(); ModExpBarGroup.GetComponent<RectTransform>().anchorMin = new Vector2(1f - num, (float)(0.2 + (double)((float)i * num5))); ModExpBarGroup.GetComponent<RectTransform>().anchorMax = new Vector2(1f, (float)(0.2 + (double)num4 + (double)((float)i * num5))); ModExpBarGroup.GetComponent<RectTransform>().sizeDelta = Vector2.zero; ModExpBarGroup.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; listLostImages.Add(ModExpBarGroup); } if (!ArtifactOfDoomConfig.disableItemProgressBar.Value && !Networking._instance.IsCalculationSacrifice) { ModExpBarGroup = new GameObject("ItemGainBar"); ModExpBarGroup.transform.SetParent(ModCanvas.transform); ModExpBarGroup.AddComponent<RectTransform>(); ModExpBarGroup.GetComponent<RectTransform>().anchorMin = new Vector2(0.35f, 0.05f); ModExpBarGroup.GetComponent<RectTransform>().anchorMax = new Vector2(0.35f, 0.06f); ModExpBarGroup.GetComponent<RectTransform>().sizeDelta = Vector2.zero; ModExpBarGroup.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; itemGainBar = ModExpBarGroup; itemGainBar.AddComponent<Image>(); ((Graphic)itemGainBar.GetComponent<Image>()).color = new Color(255f, 255f, 255f, 0.3f); ModExpBarGroup = new GameObject("ItemGainFrame"); ModExpBarGroup.transform.SetParent(ModCanvas.transform); ModExpBarGroup.AddComponent<RectTransform>(); ModExpBarGroup.GetComponent<RectTransform>().anchorMin = new Vector2(0.35f, 0.05f); ModExpBarGroup.GetComponent<RectTransform>().anchorMax = new Vector2(0.65f, 0.06f); ModExpBarGroup.GetComponent<RectTransform>().sizeDelta = Vector2.zero; ModExpBarGroup.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; itemGainFrame = ModExpBarGroup; itemGainFrame.AddComponent<Image>(); ((Graphic)itemGainFrame.GetComponent<Image>()).color = new Color(255f, 0f, 0f, 0.1f); } return; } catch (Exception) { Debug.Log((object)"[SirHamburger Error] while Adding UI elements"); return; } } Debug.LogError((object)"HUDRoot == null"); } private void OnDestroy() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown HUD.Awake -= new hook_Awake(HUDAwake); } } }