using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HG;
using HG.Reflection;
using LookingGlass.ItemStatsNameSpace;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Items;
using On.RoR2.UI.LogBook;
using ProperSave;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RoR2;
using RoR2.ExpansionManagement;
using RoR2.Items;
using RoR2.Orbs;
using RoR2.UI.LogBook;
using TMPro;
using TooManyItems.Extensions;
using TooManyItems.Handlers;
using TooManyItems.Items.Equip;
using TooManyItems.Items.Equip.Lunar;
using TooManyItems.Items.Lunar;
using TooManyItems.Items.Tier1;
using TooManyItems.Items.Tier2;
using TooManyItems.Items.Tier3;
using TooManyItems.Items.Void;
using TooManyItems.Managers;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TooManyItems")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+69fcfef26f0373170908ae8b23c6403b97102d8a")]
[assembly: AssemblyProduct("TooManyItems")]
[assembly: AssemblyTitle("TooManyItems")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace TooManyItems
{
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(object data)
{
_logSource.LogDebug(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
internal static void Fatal(object data)
{
_logSource.LogFatal(data);
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Message(object data)
{
_logSource.LogMessage(data);
}
internal static void Warning(object data)
{
_logSource.LogWarning(data);
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
[BepInPlugin("shirograhm.TooManyItems", "TooManyItems", "0.7.2")]
public class TooManyItems : BaseUnityPlugin
{
public const string PluginGUID = "shirograhm.TooManyItems";
public const string PluginAuthor = "shirograhm";
public const string PluginName = "TooManyItems";
public const string PluginVersion = "0.7.2";
public static Random RandGen = new Random();
public static ExpansionDef sotvDLC;
public static ExpansionDef sotsDLC;
public static PluginInfo PInfo { get; private set; }
public void Awake()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
PInfo = ((BaseUnityPlugin)this).Info;
sotvDLC = Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC1/Common/DLC1.asset").WaitForCompletion();
sotsDLC = Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC2/Common/DLC2.asset").WaitForCompletion();
Log.Init(((BaseUnityPlugin)this).Logger);
AssetManager.Init();
GameEventManager.Init();
ConfigOptions.Init();
DamageColorManager.Init();
Utilities.Init();
if (Abacus.isEnabled.Value)
{
Abacus.Init();
}
if (BloodDice.isEnabled.Value)
{
BloodDice.Init();
}
if (GlassMarbles.isEnabled.Value)
{
GlassMarbles.Init();
}
if (Horseshoe.isEnabled.Value)
{
Horseshoe.Init();
}
if (IronHeart.isEnabled.Value)
{
IronHeart.Init();
}
if (Permafrost.isEnabled.Value)
{
Permafrost.Init();
}
if (RustedTrowel.isEnabled.Value)
{
RustedTrowel.Init();
}
if (BrassKnuckles.isEnabled.Value)
{
BrassKnuckles.Init();
}
if (BrokenMask.isEnabled.Value)
{
BrokenMask.Init();
}
if (Epinephrine.isEnabled.Value)
{
Epinephrine.Init();
}
if (HereticSeal.isEnabled.Value)
{
HereticSeal.Init();
}
if (HolyWater.isEnabled.Value)
{
HolyWater.Init();
}
if (Hoodie.isEnabled.Value)
{
Hoodie.Init();
}
if (MagnifyingGlass.isEnabled.Value)
{
MagnifyingGlass.Init();
}
if (RubberDucky.isEnabled.Value)
{
RubberDucky.Init();
}
if (SoulRing.isEnabled.Value)
{
SoulRing.Init();
}
if (BottleCap.isEnabled.Value)
{
BottleCap.Init();
}
if (BreadLoaf.isEnabled.Value)
{
BreadLoaf.Init();
}
if (DebitCard.isEnabled.Value)
{
DebitCard.Init();
}
if (EdibleGlue.isEnabled.Value)
{
EdibleGlue.Init();
}
if (MilkCarton.isEnabled.Value)
{
MilkCarton.Init();
}
if (PaperPlane.isEnabled.Value)
{
PaperPlane.Init();
}
if (Photodiode.isEnabled.Value)
{
Photodiode.Init();
}
if (PropellerHat.isEnabled.Value)
{
PropellerHat.Init();
}
if (RedBlueGlasses.isEnabled.Value)
{
RedBlueGlasses.Init();
}
if ((bool)Thumbtack.isEnabled)
{
Thumbtack.Init();
}
if (Amnesia.isEnabled.Value)
{
Amnesia.Init();
}
if (AncientCoin.isEnabled.Value)
{
AncientCoin.Init();
}
if (CarvingBlade.isEnabled.Value)
{
CarvingBlade.Init();
}
if (Crucifix.isEnabled.Value)
{
Crucifix.Init();
}
if (SpiritStone.isEnabled.Value)
{
SpiritStone.Init();
}
if (DoubleDown.isEnabled.Value)
{
DoubleDown.Init();
}
if (ShadowCrest.isEnabled.Value)
{
ShadowCrest.Init();
}
if (VoidHeart.isEnabled.Value)
{
VoidHeart.Init();
}
if (BuffTotem.isEnabled.Value)
{
BuffTotem.Init();
}
if (TatteredScroll.isEnabled.Value)
{
TatteredScroll.Init();
}
if (Chalice.isEnabled.Value)
{
Chalice.Init();
}
if (Vanity.isEnabled.Value)
{
Vanity.Init();
}
InjectVoidItemTramsforms();
((ResourceAvailability)(ref ItemCatalog.availability)).CallWhenAvailable((Action)Integrations.Init);
Log.Message("Finished initializations.");
}
private void InjectVoidItemTramsforms()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
ItemRelationshipProvider val = ScriptableObject.CreateInstance<ItemRelationshipProvider>();
((Object)val).name = "TooManyItems_ContagiousItemProvider";
val.relationshipType = Addressables.LoadAssetAsync<ItemRelationshipType>((object)"RoR2/DLC1/Common/ContagiousItem.asset").WaitForCompletion();
val.relationships = GetContagiousItemRelationships();
if (ContentAddition.AddItemRelationshipProvider(val))
{
Log.Debug("Successfully injected void item transformations.");
}
else
{
Log.Error("Unable to inject void item transformations.");
}
}
public Pair[] GetContagiousItemRelationships()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
List<Pair> list = new List<Pair>();
if ((bool)RedBlueGlasses.isEnabled)
{
list.Add(new Pair
{
itemDef1 = RedBlueGlasses.itemDef,
itemDef2 = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC1/CritGlassesVoid/CritGlassesVoid.asset").WaitForCompletion()
});
}
if ((bool)Thumbtack.isEnabled)
{
list.Add(new Pair
{
itemDef1 = Thumbtack.itemDef,
itemDef2 = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC1/BleedOnHitVoid/BleedOnHitVoid.asset").WaitForCompletion()
});
}
if ((bool)IronHeart.isEnabled && (bool)VoidHeart.isEnabled)
{
list.Add(new Pair
{
itemDef1 = IronHeart.itemDef,
itemDef2 = VoidHeart.itemDef
});
}
if ((bool)HereticSeal.isEnabled && (bool)ShadowCrest.isEnabled)
{
list.Add(new Pair
{
itemDef1 = HereticSeal.itemDef,
itemDef2 = ShadowCrest.itemDef
});
}
return list.ToArray();
}
}
public static class Utilities
{
private class SyncForceRecalculate : INetMessage, ISerializableObject
{
private NetworkInstanceId netID;
public SyncForceRecalculate()
{
}
public SyncForceRecalculate(NetworkInstanceId ID)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
netID = ID;
}
public void Deserialize(NetworkReader reader)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
netID = reader.ReadNetworkId();
}
public void OnReceived()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
if (NetworkServer.active)
{
return;
}
GameObject val = Util.FindNetworkObject(netID);
if (Object.op_Implicit((Object)(object)val))
{
CharacterBody component = val.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component))
{
component.RecalculateStats();
}
}
}
public void Serialize(NetworkWriter writer)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
writer.Write(netID);
writer.FinishMessage();
}
}
public static Color BROKEN_MASK_COLOR = new Color(0.38f, 0.38f, 0.82f, 1f);
public static Color CARVING_BLADE_COLOR = new Color(0.09f, 0.67f, 0.62f, 1f);
public static Color PERMAFROST_COLOR = new Color(0.76f, 0.8f, 0.98f, 1f);
public static Color IRON_HEART_COLOR = new Color(0.44f, 0.44f, 0.44f, 1f);
public static Color MILK_CARTON_DAMAGE_COLOR = new Color(0.28f, 0.28f, 0.06f, 1f);
public static Color TATTERED_SCROLL_COLOR = new Color(0.8f, 0.78f, 0.57f, 1f);
public static Color VANITY_COLOR = new Color(0.53f, 0.44f, 0.77f, 1f);
public static List<ItemIndex> allVoidTier1Items;
public static List<ItemIndex> allVoidTier2Items;
public static List<ItemIndex> allVoidTier3Items;
public static List<ItemIndex> allBossItems;
internal static void Init()
{
NetworkingAPI.RegisterMessageType<SyncForceRecalculate>();
((ResourceAvailability)(ref ItemCatalog.availability)).CallWhenAvailable((Action)InitVoidTierItemLists);
}
private static void InitVoidTierItemLists()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
allVoidTier1Items = (from itemDef in (IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs
where (int)itemDef.tier == 6
select itemDef.itemIndex).ToList();
allVoidTier2Items = (from itemDef in (IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs
where (int)itemDef.tier == 7
select itemDef.itemIndex).ToList();
allVoidTier3Items = (from itemDef in (IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs
where (int)itemDef.tier == 8
select itemDef.itemIndex).ToList();
allBossItems = (from itemDef in (IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs
where (int)itemDef.tier == 4
select itemDef.itemIndex).ToList();
}
public static void ForceRecalculate(CharacterBody body)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)body == (Object)null))
{
body.RecalculateStats();
if (NetworkServer.active)
{
new SyncForceRecalculate(((NetworkBehaviour)body).netId);
}
}
}
public static CharacterBody GetMinionOwnershipParentBody(CharacterBody body)
{
if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.master) && Object.op_Implicit((Object)(object)body.master.minionOwnership) && Object.op_Implicit((Object)(object)body.master.minionOwnership.ownerMaster) && Object.op_Implicit((Object)(object)body.master.minionOwnership.ownerMaster.GetBody()))
{
return body.master.minionOwnership.ownerMaster.GetBody();
}
return body;
}
public static bool OnSameTeam(CharacterBody body1, CharacterBody body2)
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)body1 == (Object)null)
{
return false;
}
if ((Object)(object)body2 == (Object)null)
{
return false;
}
return Object.op_Implicit((Object)(object)body1.teamComponent) && Object.op_Implicit((Object)(object)body2.teamComponent) && body1.teamComponent.teamIndex == body2.teamComponent.teamIndex;
}
public static bool IsSkillDamage(DamageInfo damageInfo)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
return DamageTypeCombo.op_Implicit(damageInfo.damageType) == DamageTypeCombo.op_Implicit(DamageTypeCombo.GenericPrimary) || DamageTypeCombo.op_Implicit(damageInfo.damageType) == DamageTypeCombo.op_Implicit(DamageTypeCombo.GenericSecondary) || DamageTypeCombo.op_Implicit(damageInfo.damageType) == DamageTypeCombo.op_Implicit(DamageTypeCombo.GenericUtility) || DamageTypeCombo.op_Implicit(damageInfo.damageType) == DamageTypeCombo.op_Implicit(DamageTypeCombo.GenericSpecial);
}
public static uint ScaleGoldWithDifficulty(int goldGranted)
{
return Convert.ToUInt32((float)goldGranted * (1f + 50f * GetDifficultyAsPercentage()));
}
public static float GetChanceAfterLuck(float percent, float luckIn)
{
int num = Mathf.CeilToInt(luckIn);
if (num > 0)
{
return 1f - Mathf.Pow(1f - percent, (float)(num + 1));
}
if (num < 0)
{
return Mathf.Pow(percent, (float)(Mathf.Abs(num) + 1));
}
return percent;
}
public static float GetDifficultyAsPercentage()
{
return (Stage.instance.entryDifficultyCoefficient - 1f) / 98f;
}
public static float GetDifficultyAsMultiplier()
{
return Stage.instance.entryDifficultyCoefficient;
}
public static float GetLinearStacking(float baseValue, int count)
{
return GetLinearStacking(baseValue, baseValue, count);
}
public static float GetLinearStacking(float baseValue, float extraValue, int count)
{
return baseValue + extraValue * (float)(count - 1);
}
public static int GetLinearStacking(int baseValue, int count)
{
return GetLinearStacking(baseValue, baseValue, count);
}
public static int GetLinearStacking(int baseValue, int extraValue, int count)
{
return baseValue + extraValue * (count - 1);
}
public static float GetExponentialStacking(float percent, int count)
{
return GetExponentialStacking(percent, percent, count);
}
public static float GetExponentialStacking(float percent, float stackPercent, int count)
{
return 1f - (1f - percent) * Mathf.Pow(1f - stackPercent, (float)(count - 1));
}
public static float GetReverseExponentialStacking(float baseValue, float reducePercent, int count)
{
return baseValue * Mathf.Pow(1f - reducePercent, (float)(count - 1));
}
public static float GetHyperbolicStacking(float percent, int count)
{
return GetHyperbolicStacking(percent, percent, count);
}
public static float GetHyperbolicStacking(float percent, float extraPercent, int count)
{
float num = (1f + percent) * (1f + extraPercent * (float)(count - 1));
return 1f - 1f / num;
}
public static void SpawnHealEffect(CharacterBody self)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
if (!((Object)(object)self == (Object)null) && !((Object)(object)self.transform == (Object)null))
{
EffectData val = new EffectData
{
origin = self.transform.position,
rootObject = ((Component)self).gameObject
};
EffectManager.SpawnEffect(PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MedkitHealEffect"), "TooManyItems_HealEffect"), val, true);
}
}
public static void SendGoldOrbAndEffect(uint goldGain, Vector3 origin, HurtBox target)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
OrbManager.instance.AddOrb((Orb)new GoldOrb
{
goldAmount = goldGain,
origin = origin,
target = target
});
EffectManager.SimpleImpactEffect(PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/CoinImpact"), "TooManyItems_GoldEffect"), origin, Vector3.up, true);
}
public static bool IsItemIndexScrap(ItemIndex itemIndex)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//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)
return itemIndex == Items.ScrapWhite.itemIndex || itemIndex == Items.ScrapGreen.itemIndex || itemIndex == Items.ScrapRed.itemIndex;
}
public static ItemIndex GetRandomItemOfTier(ItemTier tier)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected I4, but got Unknown
//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: 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_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_02af: 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_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_01da: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_026b: Unknown result type (might be due to invalid IL or missing references)
//IL_0270: Unknown result type (might be due to invalid IL or missing references)
//IL_024e: Unknown result type (might be due to invalid IL or missing references)
switch ((int)tier)
{
case 0:
{
ItemIndex[] array4 = ItemCatalog.tier1ItemList.Where((ItemIndex index) => index != Items.ScrapWhite.itemIndex).ToArray();
if (array4.Length == 0)
{
return (ItemIndex)(-1);
}
int num4 = Random.Range(0, array4.Length);
return array4[num4];
}
case 1:
{
ItemIndex[] array3 = ItemCatalog.tier2ItemList.Where((ItemIndex index) => index != Items.ScrapGreen.itemIndex).ToArray();
if (array3.Length == 0)
{
return (ItemIndex)(-1);
}
int num3 = Random.Range(0, array3.Length);
return array3[num3];
}
case 2:
{
ItemIndex[] array = ItemCatalog.tier3ItemList.Where((ItemIndex index) => index != Items.ScrapRed.itemIndex).ToArray();
if (array.Length == 0)
{
return (ItemIndex)(-1);
}
int num = Random.Range(0, array.Length);
return array[num];
}
case 3:
{
ItemIndex[] array2 = ItemCatalog.lunarItemList.Where((ItemIndex index) => index != Amnesia.itemDef.itemIndex).ToArray();
if (array2.Length == 0)
{
return (ItemIndex)(-1);
}
int num2 = Random.Range(0, array2.Length);
return array2[num2];
}
case 6:
{
if (allVoidTier1Items == null || allVoidTier1Items.Count == 0)
{
return (ItemIndex)(-1);
}
int index5 = Random.Range(0, allVoidTier1Items.Count());
return allVoidTier1Items[index5];
}
case 7:
{
if (allVoidTier2Items == null || allVoidTier2Items.Count == 0)
{
return (ItemIndex)(-1);
}
int index3 = Random.Range(0, allVoidTier2Items.Count());
return allVoidTier2Items[index3];
}
case 8:
{
if (allVoidTier3Items == null || allVoidTier3Items.Count == 0)
{
return (ItemIndex)(-1);
}
int index4 = Random.Range(0, allVoidTier3Items.Count());
return allVoidTier3Items[index4];
}
case 4:
{
if (allBossItems == null || allBossItems.Count == 0)
{
return (ItemIndex)(-1);
}
int index2 = Random.Range(0, allBossItems.Count());
return allBossItems[index2];
}
default:
Log.Error("Invalid tier called for random item.");
return (ItemIndex)(-1);
}
}
}
}
namespace TooManyItems.Managers
{
public static class AssetManager
{
public static AssetBundle bundle;
public const string bundleName = "tmiassets";
public static string AssetBundlePath => Path.Combine(Path.GetDirectoryName(TooManyItems.PInfo.Location), "tmiassets");
public static void Init()
{
bundle = AssetBundle.LoadFromFile(AssetBundlePath);
}
}
public static class ConfigManager
{
public static class Scaling
{
public static ConfigFile config = new ConfigFile(Paths.ConfigPath + "\\TooManyItems.cfg", true);
public static string categoryName = "TooManyItems Config";
public static string categoryGUID = "shirograhm.TooManyItems_config";
public static ConfigOptions.ConfigurableValue<bool> useCustomValues = ConfigOptions.ConfigurableValue.CreateBool(categoryGUID, categoryName, config, "! Important !", "Use Custom Config", defaultValue: false, "Set to true to enable custom configurations.");
}
}
public class ConfigurableValue<T> : ConfigOptions.ConfigurableValue<T>
{
public ConfigurableValue(string section, string key, float defaultValue, string description = "", List<string> stringsToAffect = null, Action<float> onChanged = null)
: base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null)
{
ConfigOptions.ConfigurableValue.CreateFloat(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, 0f, 1000000f, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged);
}
public ConfigurableValue(string section, string key, int defaultValue, string description = "", List<string> stringsToAffect = null, Action<int> onChanged = null)
: base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null)
{
ConfigOptions.ConfigurableValue.CreateInt(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, 0, 1000000, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged);
}
public ConfigurableValue(string section, string key, bool defaultValue, string description = "", List<string> stringsToAffect = null, Action<bool> onChanged = null)
: base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null)
{
ConfigOptions.ConfigurableValue.CreateBool(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged);
}
public ConfigurableValue(string section, string key, string defaultValue, string description = "", List<string> stringsToAffect = null, Action<string> onChanged = null)
: base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null)
{
ConfigOptions.ConfigurableValue.CreateString(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged);
}
}
public static class ConfigOptions
{
public abstract class ConfigurableValue
{
public static List<ConfigurableValue> instancesList = new List<ConfigurableValue>();
public List<string> stringsToAffect = new List<string>();
public string key = "";
public string id = "";
public static ConfigurableValue<T> Create<T>(ConfigFile configFile, string section, string key, T defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<T> onChanged = null)
{
return new ConfigurableValue<T>(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged);
}
public static ConfigurableValue<int> CreateInt(string modGUID, string modName, ConfigFile configFile, string section, string key, int defaultValue, int min = 0, int max = 1000, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<int> onChanged = null)
{
return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged);
}
public static ConfigurableValue<float> CreateFloat(string modGUID, string modName, ConfigFile configFile, string section, string key, float defaultValue, float min = 0f, float max = 1000f, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<float> onChanged = null)
{
return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged);
}
public static ConfigurableValue<bool> CreateBool(string modGUID, string modName, ConfigFile configFile, string section, string key, bool defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<bool> onChanged = null)
{
return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged);
}
public static ConfigurableValue<string> CreateString(string modGUID, string modName, ConfigFile configFile, string section, string key, string defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<string> onChanged = null)
{
return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged);
}
}
public class ConfigurableValue<T> : ConfigurableValue
{
public ConfigEntry<T> bepinexConfigEntry;
private ConfigEntry<bool> useCustomValueConfigEntry;
private T defaultValue;
public T Value
{
get
{
if (useCustomValueConfigEntry != null && useCustomValueConfigEntry.Value)
{
return bepinexConfigEntry.Value;
}
return defaultValue;
}
}
public ConfigurableValue(ConfigFile configFile, string section, string key, T defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<T> onChanged = null)
{
ConfigurableValue<T> configurableValue = this;
id = Path.GetFileNameWithoutExtension(configFile.ConfigFilePath) + "." + section + "." + key;
ConfigurableValue configurableValue2 = ConfigurableValue.instancesList.FirstOrDefault((ConfigurableValue x) => x.id == configurableValue.id);
if (configurableValue2 != null)
{
ConfigurableValue<T> configurableValue3 = configurableValue2 as ConfigurableValue<T>;
bepinexConfigEntry = configurableValue3.bepinexConfigEntry;
this.useCustomValueConfigEntry = useCustomValueConfigEntry;
}
else
{
bepinexConfigEntry = configFile.Bind<T>(section, key, defaultValue, description);
ConfigurableValue.instancesList.Add(this);
}
this.useCustomValueConfigEntry = useCustomValueConfigEntry;
base.key = key;
this.defaultValue = defaultValue;
if (stringsToAffect != null)
{
base.stringsToAffect = stringsToAffect;
}
else
{
base.stringsToAffect = new List<string>();
}
if (onChanged != null)
{
bepinexConfigEntry.SettingChanged += delegate
{
onChanged(configurableValue.bepinexConfigEntry.Value);
reloadLogbook = true;
};
onChanged(bepinexConfigEntry.Value);
reloadLogbook = true;
}
}
public override string ToString()
{
return Convert.ToString(Value, CultureInfo.InvariantCulture);
}
public static implicit operator T(ConfigurableValue<T> configurableValue)
{
return configurableValue.Value;
}
}
[CompilerGenerated]
private static class <>O
{
public static hook_Awake <0>__LogBookController_Awake;
public static hook_GetLocalizedStringByToken <1>__Language_GetLocalizedStringByToken;
}
private static bool reloadLogbook;
internal static void Init()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
object obj = <>O.<0>__LogBookController_Awake;
if (obj == null)
{
hook_Awake val = LogBookController_Awake;
<>O.<0>__LogBookController_Awake = val;
obj = (object)val;
}
LogBookController.Awake += (hook_Awake)obj;
object obj2 = <>O.<1>__Language_GetLocalizedStringByToken;
if (obj2 == null)
{
hook_GetLocalizedStringByToken val2 = Language_GetLocalizedStringByToken;
<>O.<1>__Language_GetLocalizedStringByToken = val2;
obj2 = (object)val2;
}
Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj2;
}
private static void LogBookController_Awake(orig_Awake orig, LogBookController self)
{
orig.Invoke(self);
if (reloadLogbook)
{
reloadLogbook = false;
LogBookController.BuildStaticData();
}
}
private static string Language_GetLocalizedStringByToken(orig_GetLocalizedStringByToken orig, Language self, string token)
{
string text = orig.Invoke(self, token);
foreach (ConfigurableValue item in ConfigurableValue.instancesList.FindAll((ConfigurableValue x) => x.stringsToAffect.Contains(token)))
{
text = text.Replace("{" + item.key + "}", item.ToString());
}
return text;
}
}
internal class DamageColorManager
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_FindColor <>9__2_0;
internal Color <Hooks>b__2_0(orig_FindColor orig, DamageColorIndex colorIndex)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
if (registeredColorIndexList.Contains(colorIndex))
{
return DamageColor.colors[colorIndex];
}
return orig.Invoke(colorIndex);
}
}
public static List<DamageColorIndex> registeredColorIndexList = new List<DamageColorIndex>();
internal static void Init()
{
Hooks();
}
private static void Hooks()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__2_0;
if (obj == null)
{
hook_FindColor val = (orig_FindColor orig, DamageColorIndex colorIndex) => registeredColorIndexList.Contains(colorIndex) ? DamageColor.colors[colorIndex] : orig.Invoke(colorIndex);
<>c.<>9__2_0 = val;
obj = (object)val;
}
DamageColor.FindColor += (hook_FindColor)obj;
}
public static DamageColorIndex RegisterDamageColor(Color color)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
int num = DamageColor.colors.Length;
DamageColorIndex val = (DamageColorIndex)(byte)num;
ArrayUtils.ArrayAppend<Color>(ref DamageColor.colors, ref color);
registeredColorIndexList.Add(val);
return val;
}
}
internal class GameEventManager
{
public delegate void DamageAttackerVictimEventHandler(DamageInfo damageInfo, GenericCharacterInfo attackerInfo, GenericCharacterInfo victimInfo);
public delegate void DamageReportEventHandler(DamageReport damageReport);
public class GenericDamageEvent : MonoBehaviour, IOnIncomingDamageServerReceiver, IOnTakeDamageServerReceiver
{
public HealthComponent healthComponent;
public CharacterBody victimBody;
public void Start()
{
healthComponent = ((Component)this).GetComponent<HealthComponent>();
if (!Object.op_Implicit((Object)(object)healthComponent))
{
Object.Destroy((Object)(object)this);
}
else
{
victimBody = healthComponent.body;
}
}
public void OnIncomingDamageServer(DamageInfo damageInfo)
{
GenericCharacterInfo attackerInfo = default(GenericCharacterInfo);
if (Object.op_Implicit((Object)(object)damageInfo.attacker))
{
attackerInfo = new GenericCharacterInfo(damageInfo.attacker.GetComponent<CharacterBody>());
}
GenericCharacterInfo victimInfo = new GenericCharacterInfo(victimBody);
GameEventManager.BeforeTakeDamage?.Invoke(damageInfo, attackerInfo, victimInfo);
}
public void OnTakeDamageServer(DamageReport damageReport)
{
if (Object.op_Implicit((Object)(object)victimBody) && GameEventManager.OnTakeDamage != null)
{
GameEventManager.OnTakeDamage(damageReport);
}
}
}
public struct GenericCharacterInfo
{
public GameObject gameObject;
public CharacterBody body;
public CharacterMaster master;
public TeamComponent teamComponent;
public HealthComponent healthComponent;
public Inventory inventory;
public TeamIndex teamIndex;
public Vector3 aimOrigin;
public unsafe GenericCharacterInfo(CharacterBody body)
{
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1->IL00a1: Incompatible stack types: Ref vs I4
//IL_0096->IL00a1: Incompatible stack types: I4 vs Ref
//IL_0096->IL00a1: Incompatible stack types: Ref vs I4
this.body = body;
gameObject = (Object.op_Implicit((Object)(object)body) ? ((Component)body).gameObject : null);
master = (Object.op_Implicit((Object)(object)body) ? body.master : null);
teamComponent = (Object.op_Implicit((Object)(object)body) ? body.teamComponent : null);
healthComponent = (Object.op_Implicit((Object)(object)body) ? body.healthComponent : null);
inventory = (Object.op_Implicit((Object)(object)master) ? master.inventory : null);
ref GenericCharacterInfo reference = ref this;
int num;
if (Object.op_Implicit((Object)(object)teamComponent))
{
reference = ref *(GenericCharacterInfo*)teamComponent.teamIndex;
num = (int)(ref reference);
}
else
{
num = 0;
reference = ref *(GenericCharacterInfo*)num;
num = (int)(ref reference);
}
Unsafe.Write(&((GenericCharacterInfo*)num)->teamIndex, (TeamIndex)(ref reference));
Vector3 normalized;
if (!Object.op_Implicit((Object)(object)body))
{
Vector3 insideUnitSphere = Random.insideUnitSphere;
normalized = ((Vector3)(ref insideUnitSphere)).normalized;
}
else
{
normalized = body.aimOrigin;
}
aimOrigin = normalized;
}
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_Awake <>9__14_0;
public static hook_OnHitEnemy <>9__14_1;
public static Action<DamageReport> <>9__14_2;
internal void <Init>b__14_0(orig_Awake orig, HealthComponent self)
{
((Component)self).gameObject.AddComponent<GenericDamageEvent>();
orig.Invoke(self);
}
internal void <Init>b__14_1(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
orig.Invoke(self, damageInfo, victim);
if (Object.op_Implicit((Object)(object)damageInfo.attacker))
{
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
CharacterBody body = (Object.op_Implicit((Object)(object)victim) ? victim.GetComponent<CharacterBody>() : null);
GenericCharacterInfo attackerInfo = new GenericCharacterInfo(component);
GenericCharacterInfo victimInfo = new GenericCharacterInfo(body);
GameEventManager.OnHitEnemy?.Invoke(damageInfo, attackerInfo, victimInfo);
}
}
internal void <Init>b__14_2(DamageReport damageReport)
{
if (NetworkServer.active && damageReport != null)
{
GameEventManager.OnCharacterDeath?.Invoke(damageReport);
}
}
}
public static event DamageAttackerVictimEventHandler OnHitEnemy;
public static event DamageAttackerVictimEventHandler BeforeTakeDamage;
public static event DamageReportEventHandler OnTakeDamage;
public static event DamageReportEventHandler OnCharacterDeath;
internal static void Init()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
object obj = <>c.<>9__14_0;
if (obj == null)
{
hook_Awake val = delegate(orig_Awake orig, HealthComponent self)
{
((Component)self).gameObject.AddComponent<GenericDamageEvent>();
orig.Invoke(self);
};
<>c.<>9__14_0 = val;
obj = (object)val;
}
HealthComponent.Awake += (hook_Awake)obj;
object obj2 = <>c.<>9__14_1;
if (obj2 == null)
{
hook_OnHitEnemy val2 = delegate(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
orig.Invoke(self, damageInfo, victim);
if (Object.op_Implicit((Object)(object)damageInfo.attacker))
{
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
CharacterBody body = (Object.op_Implicit((Object)(object)victim) ? victim.GetComponent<CharacterBody>() : null);
GenericCharacterInfo attackerInfo = new GenericCharacterInfo(component);
GenericCharacterInfo victimInfo = new GenericCharacterInfo(body);
GameEventManager.OnHitEnemy?.Invoke(damageInfo, attackerInfo, victimInfo);
}
};
<>c.<>9__14_1 = val2;
obj2 = (object)val2;
}
GlobalEventManager.OnHitEnemy += (hook_OnHitEnemy)obj2;
GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport damageReport)
{
if (NetworkServer.active && damageReport != null)
{
GameEventManager.OnCharacterDeath?.Invoke(damageReport);
}
};
}
}
public static class ItemManager
{
public class DisplayRuleData
{
public string survivorName;
public string partName;
public Vector3 localPos;
public Vector3 localAngles;
public Vector3 localScale;
public DisplayRuleData(string survivorModelName, string partName, Vector3 localPos, Vector3 localAngles, Vector3 localScale)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
survivorName = survivorModelName;
this.partName = partName;
this.localPos = localPos;
this.localAngles = localAngles;
this.localScale = localScale;
base..ctor();
}
}
public static EquipmentDef GenerateEquipment(string name, float cooldown, bool isLunar = false, bool appearsInMultiPlayer = true, bool appearsInSinglePlayer = true, bool canBeRandomlyTriggered = true, bool enigmaCompatible = true, bool canDrop = true)
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Expected O, but got Unknown
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Expected O, but got Unknown
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
EquipmentDef val = ScriptableObject.CreateInstance<EquipmentDef>();
((Object)val).name = name.ToUpperInvariant();
val.AutoPopulateTokens();
GameObject val2 = AssetManager.bundle.LoadAsset<GameObject>(name + ".prefab");
if ((Object)(object)val2 == (Object)null)
{
Log.Warning("Missing prefab file for equipment " + ((Object)val).name + ". Substituting default...");
val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();
}
ModelPanelParameters val3 = val2.AddComponent<ModelPanelParameters>();
val3.focusPointTransform = val2.transform;
val3.cameraPositionTransform = val2.transform;
val3.maxDistance = 10f;
val3.minDistance = 5f;
val.pickupIconSprite = AssetManager.bundle.LoadAsset<Sprite>(name + ".png");
val.pickupModelPrefab = val2;
val.isLunar = isLunar;
if (isLunar)
{
val.colorIndex = (ColorIndex)4;
}
val.appearsInMultiPlayer = appearsInMultiPlayer;
val.appearsInSinglePlayer = appearsInSinglePlayer;
val.canBeRandomlyTriggered = canBeRandomlyTriggered;
val.enigmaCompatible = enigmaCompatible;
val.canDrop = canDrop;
val.cooldown = cooldown;
ItemDisplayRuleDict val4 = new ItemDisplayRuleDict((ItemDisplayRule[])null);
ItemAPI.Add(new CustomEquipment(val, val4));
return val;
}
public static ItemDef GenerateItem(string name, ItemTag[] tags, ItemTier tier, List<DisplayRuleData> rules = null)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Invalid comparison between Unknown and I4
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Invalid comparison between Unknown and I4
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Invalid comparison between Unknown and I4
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Expected O, but got Unknown
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Invalid comparison between Unknown and I4
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Expected O, but got Unknown
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
((Object)val).name = name.ToUpperInvariant();
val.AutoPopulateTokens();
SetItemTier(val, tier);
GameObject val2 = AssetManager.bundle.LoadAsset<GameObject>(name + ".prefab");
if ((Object)(object)val2 == (Object)null)
{
Log.Warning("Missing prefab file for item " + ((Object)val).name + ". Substituting default...");
val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();
}
ModelPanelParameters val3 = val2.AddComponent<ModelPanelParameters>();
val3.focusPointTransform = val2.transform;
val3.cameraPositionTransform = val2.transform;
val3.maxDistance = 10f;
val3.minDistance = 5f;
if ((int)val.tier == 9 || (int)val.tier == 6 || (int)val.tier == 7 || (int)val.tier == 8)
{
val.requiredExpansion = TooManyItems.sotvDLC;
}
val.pickupIconSprite = AssetManager.bundle.LoadAsset<Sprite>(name + ".png");
val.pickupModelPrefab = val2;
val.canRemove = true;
val.hidden = false;
val.tags = tags;
ItemDisplayRuleDict val4 = new ItemDisplayRuleDict((ItemDisplayRule[])null);
if (rules != null)
{
foreach (DisplayRuleData rule in rules)
{
val4.Add(rule.survivorName, (ItemDisplayRule[])(object)new ItemDisplayRule[1] { GenerateItemDisplayRule(val2, rule) });
}
}
ItemAPI.Add(new CustomItem(val, val4));
return val;
}
public static ItemDisplayRule GenerateItemDisplayRule(GameObject prefab, DisplayRuleData data)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//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_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
ItemDisplayRule result = default(ItemDisplayRule);
result.ruleType = (ItemDisplayRuleType)0;
result.followerPrefab = prefab;
result.childName = data.partName;
result.localPos = data.localPos;
result.localAngles = data.localAngles;
result.localScale = data.localScale;
return result;
}
public static BuffDef GenerateBuff(string name, Sprite sprite, bool canStack = false, bool isHidden = false, bool isDebuff = false, bool isCooldown = false)
{
BuffDef val = ScriptableObject.CreateInstance<BuffDef>();
((Object)val).name = name;
val.iconSprite = sprite;
val.canStack = canStack;
val.isHidden = isHidden;
val.isDebuff = isDebuff;
val.isCooldown = isCooldown;
return val;
}
public static void SetItemTier(ItemDef itemDef, ItemTier tier)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Invalid comparison between Unknown and I4
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
if ((int)tier == 5)
{
try
{
itemDef.deprecatedTier = tier;
}
catch (Exception arg)
{
Log.Warning($"Error setting deprecatedTier for {((Object)itemDef).name}: {arg}");
}
}
((ResourceAvailability)(ref ItemTierCatalog.availability)).CallWhenAvailable((Action)delegate
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)itemDef))
{
itemDef.tier = tier;
}
});
}
}
}
namespace TooManyItems.Items.Void
{
public class ShadowCrestItemBehaviour : BaseItemBodyBehavior
{
[ItemDefAssociation(useOnServer = true, useOnClient = false)]
public static ItemDef GetItemDef()
{
return ShadowCrest.itemDef;
}
public void FixedUpdate()
{
if (base.stack > 0)
{
Utilities.ForceRecalculate(((BaseItemBodyBehavior)this).body);
}
}
}
public class ShadowCrest
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static StatHookEventHandler <>9__7_0;
internal void <Hooks>b__7_0(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory) && Object.op_Implicit((Object)(object)sender.healthComponent))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0 && sender.healthComponent.combinedHealthFraction < 1f)
{
args.baseRegenAdd += Utilities.GetHyperbolicStacking(percentRegenPerSecond, percentRegenPerSecondExtraStacks, itemCountEffective) * sender.healthComponent.missingCombinedHealth;
}
}
}
}
public static ItemDef itemDef;
public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Shadow Crest", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string>(1) { "ITEM_SHADOWCREST_DESC" });
public static ConfigurableValue<float> regenPerSecond = new ConfigurableValue<float>("Item: Shadow Crest", "Regen Per Second", 1f, "Percentage of missing health regenerated per second.", new List<string>(1) { "ITEM_SHADOWCREST_DESC" });
public static ConfigurableValue<float> regenPerSecondExtraStacks = new ConfigurableValue<float>("Item: Shadow Crest", "Regen Per Second Extra Stacks", 1f, "Percentage of missing health regenerated per second for extra stacks.", new List<string>(1) { "ITEM_SHADOWCREST_DESC" });
public static float percentRegenPerSecond = regenPerSecond.Value / 100f;
public static float percentRegenPerSecondExtraStacks = regenPerSecondExtraStacks.Value / 100f;
internal static void Init()
{
itemDef = ItemManager.GenerateItem("ShadowCrest", (ItemTag[])(object)new ItemTag[2]
{
(ItemTag)2,
(ItemTag)31
}, (ItemTier)7);
Hooks();
}
public static void Hooks()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__7_0;
if (obj == null)
{
StatHookEventHandler val = delegate(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory) && Object.op_Implicit((Object)(object)sender.healthComponent))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0 && sender.healthComponent.combinedHealthFraction < 1f)
{
args.baseRegenAdd += Utilities.GetHyperbolicStacking(percentRegenPerSecond, percentRegenPerSecondExtraStacks, itemCountEffective) * sender.healthComponent.missingCombinedHealth;
}
}
};
<>c.<>9__7_0 = val;
obj = (object)val;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
}
}
internal class VoidHeart
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static StatHookEventHandler <>9__9_0;
internal void <Hooks>b__9_0(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory) && Object.op_Implicit((Object)(object)sender.healthComponent))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
args.baseHealthAdd += healthIncrease.Value;
args.baseDamageAdd += CalculateDamageBonus(sender, itemCountEffective);
}
}
}
}
public static ItemDef itemDef;
public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Defiled Heart", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string>(1) { "ITEM_VOIDHEART_DESC" });
public static ConfigurableValue<float> healthIncrease = new ConfigurableValue<float>("Item: Defiled Heart", "Health Increase", 200f, "Bonus health gained from this item. Does not increase with stacks.", new List<string>(1) { "ITEM_VOIDHEART_DESC" });
public static ConfigurableValue<float> percentDamagePerStack = new ConfigurableValue<float>("Item: Defiled Heart", "Bonus Damage Scaling", 1.5f, "Percent of maximum health gained as base damage.", new List<string>(1) { "ITEM_VOIDHEART_DESC" });
public static ConfigurableValue<float> percentDamagePerExtraStack = new ConfigurableValue<float>("Item: Defiled Heart", "Bonus Damage Scaling Extra Stacks", 1.5f, "Percent of maximum health gained as base damage with extra stacks.", new List<string>(1) { "ITEM_VOIDHEART_DESC" });
public static float multiplierPerStack = percentDamagePerStack.Value / 100f;
public static float multiplierPerExtraStack = percentDamagePerExtraStack.Value / 100f;
internal static void Init()
{
ItemTag[] array = new ItemTag[3];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
itemDef = ItemManager.GenerateItem("VoidHeart", (ItemTag[])(object)array, (ItemTier)8);
Hooks();
}
public static float CalculateDamageBonus(CharacterBody sender, int itemCount)
{
return sender.healthComponent.fullHealth * Utilities.GetLinearStacking(multiplierPerStack, multiplierPerExtraStack, itemCount);
}
public static void Hooks()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__9_0;
if (obj == null)
{
StatHookEventHandler val = delegate(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory) && Object.op_Implicit((Object)(object)sender.healthComponent))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
args.baseHealthAdd += healthIncrease.Value;
args.baseDamageAdd += CalculateDamageBonus(sender, itemCountEffective);
}
}
};
<>c.<>9__9_0 = val;
obj = (object)val;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
}
}
}
namespace TooManyItems.Items.Tier3
{
internal class Abacus
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static StatHookEventHandler <>9__6_0;
public static GameEventManager.DamageReportEventHandler <>9__6_1;
internal void <Hooks>b__6_0(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory))
{
int buffCount = sender.GetBuffCount(countedBuff);
args.critAdd += Utilities.GetLinearStacking(critChancePerStack.Value, critChancePerExtraStack.Value, buffCount);
if (sender.inventory.GetItemCountEffective(itemDef) > 0 && sender.crit > 100f)
{
args.critDamageMultAdd += sender.crit / 100f - 1f;
}
}
}
internal void <Hooks>b__6_1(DamageReport damageReport)
{
CharacterBody attackerBody = damageReport.attackerBody;
if (!Object.op_Implicit((Object)(object)attackerBody) || !Object.op_Implicit((Object)(object)attackerBody.inventory))
{
return;
}
int itemCountEffective = attackerBody.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
for (int i = 0; i < itemCountEffective; i++)
{
attackerBody.AddBuff(countedBuff);
}
Utilities.ForceRecalculate(attackerBody);
}
}
}
public static ItemDef itemDef;
public static BuffDef countedBuff;
public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Abacus", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string>(1) { "ITEM_ABACUS_DESC" });
public static ConfigurableValue<float> critChancePerStack = new ConfigurableValue<float>("Item: Abacus", "Crit On Kill", 1f, "Crit chance gained on kill per first stack of item.", new List<string>(1) { "ITEM_ABACUS_DESC" });
public static ConfigurableValue<float> critChancePerExtraStack = new ConfigurableValue<float>("Item: Abacus", "Crit On Kill Extra Stacks", 1f, "Crit chance gained on kill per extra stack of item.", new List<string>(1) { "ITEM_ABACUS_DESC" });
internal static void Init()
{
ItemTag[] array = new ItemTag[4];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
itemDef = ItemManager.GenerateItem("Abacus", (ItemTag[])(object)array, (ItemTier)2);
countedBuff = ItemManager.GenerateBuff("Counted", AssetManager.bundle.LoadAsset<Sprite>("Counted.png"), canStack: true);
ContentAddition.AddBuffDef(countedBuff);
Hooks();
}
public static void Hooks()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__6_0;
if (obj == null)
{
StatHookEventHandler val = delegate(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory))
{
int buffCount = sender.GetBuffCount(countedBuff);
args.critAdd += Utilities.GetLinearStacking(critChancePerStack.Value, critChancePerExtraStack.Value, buffCount);
if (sender.inventory.GetItemCountEffective(itemDef) > 0 && sender.crit > 100f)
{
args.critDamageMultAdd += sender.crit / 100f - 1f;
}
}
};
<>c.<>9__6_0 = val;
obj = (object)val;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
GameEventManager.OnCharacterDeath += delegate(DamageReport damageReport)
{
CharacterBody attackerBody = damageReport.attackerBody;
if (Object.op_Implicit((Object)(object)attackerBody) && Object.op_Implicit((Object)(object)attackerBody.inventory))
{
int itemCountEffective = attackerBody.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
for (int i = 0; i < itemCountEffective; i++)
{
attackerBody.AddBuff(countedBuff);
}
Utilities.ForceRecalculate(attackerBody);
}
}
};
}
}
internal class BloodDice
{
public class Statistics : MonoBehaviour
{
public class Sync : INetMessage, ISerializableObject
{
private NetworkInstanceId objId;
private float permanentHealth;
public Sync()
{
}
public Sync(NetworkInstanceId objId, float health)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
this.objId = objId;
permanentHealth = health;
}
public void Deserialize(NetworkReader reader)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
objId = reader.ReadNetworkId();
permanentHealth = reader.ReadSingle();
}
public void OnReceived()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
if (NetworkServer.active)
{
return;
}
GameObject val = Util.FindNetworkObject(objId);
if ((Object)(object)val != (Object)null)
{
Statistics component = val.GetComponent<Statistics>();
if (component != null)
{
component.PermanentHealth = permanentHealth;
}
}
}
public void Serialize(NetworkWriter writer)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
writer.Write(objId);
writer.Write(permanentHealth);
writer.FinishMessage();
}
}
private float _permanentHealth;
public float PermanentHealth
{
get
{
return _permanentHealth;
}
set
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
_permanentHealth = value;
if (NetworkServer.active)
{
NetMessageExtensions.Send((INetMessage)(object)new Sync(((Component)this).gameObject.GetComponent<NetworkIdentity>().netId, value), (NetworkDestination)1);
}
}
}
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<CharacterMaster> <>9__10_0;
public static hook_GetHealthBarValues <>9__10_1;
public static StatHookEventHandler <>9__10_2;
public static GameEventManager.DamageReportEventHandler <>9__10_3;
internal void <Hooks>b__10_0(CharacterMaster obj)
{
Inventory inventory = obj.inventory;
if (inventory != null)
{
((Component)inventory).gameObject.AddComponent<Statistics>();
}
}
internal HealthBarValues <Hooks>b__10_1(orig_GetHealthBarValues orig, HealthComponent self)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
HealthBarValues result = orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)self.body.inventory) && self.body.inventory.GetItemCountEffective(itemDef) > 0)
{
result.hasInfusion = true;
}
return result;
}
internal void <Hooks>b__10_2(CharacterBody sender, StatHookEventArgs args)
{
if (!Object.op_Implicit((Object)(object)sender) || !Object.op_Implicit((Object)(object)sender.inventory))
{
return;
}
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
Statistics component = ((Component)sender.inventory).GetComponent<Statistics>();
if (Object.op_Implicit((Object)(object)component))
{
args.baseHealthAdd += Mathf.Min(component.PermanentHealth, CalculateMaxHealthCap(itemCountEffective));
}
}
}
internal void <Hooks>b__10_3(DamageReport damageReport)
{
CharacterMaster attackerMaster = damageReport.attackerMaster;
CharacterBody attackerBody = damageReport.attackerBody;
if (!Object.op_Implicit((Object)(object)attackerMaster) || !Object.op_Implicit((Object)(object)attackerBody) || !Object.op_Implicit((Object)(object)attackerBody.inventory))
{
return;
}
int itemCountEffective = attackerBody.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective <= 0)
{
return;
}
Statistics component = ((Component)attackerBody.inventory).GetComponent<Statistics>();
if (!Object.op_Implicit((Object)(object)component))
{
return;
}
int num = Math.Min(GetDiceRoll(attackerMaster), Mathf.RoundToInt(CalculateMaxHealthCap(itemCountEffective) - component.PermanentHealth));
if (num > 0)
{
for (int i = 0; i < num; i++)
{
OrbManager.instance.AddOrb((Orb)(object)new BloodDiceOrb(damageReport, i));
}
}
}
}
public static ItemDef itemDef;
public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Blood Dice", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string>(1) { "ITEM_BLOODDICE_DESC" });
public static ConfigurableValue<bool> affectedByLuck = new ConfigurableValue<bool>("Item: Blood Dice", "Affected By Luck", defaultValue: true, "Whether or not the likelihood of a high roll is affected by luck.", new List<string>(1) { "ITEM_BLOODDICE_DESC" });
public static ConfigurableValue<int> minHealthGain = new ConfigurableValue<int>("Item: Blood Dice", "Min Gain", 2, "Minimum health that can be gained every kill.", new List<string>(1) { "ITEM_BLOODDICE_DESC" });
public static ConfigurableValue<int> maxHealthGain = new ConfigurableValue<int>("Item: Blood Dice", "Max Gain", 12, "Maximum health that can be gained every kill.", new List<string>(1) { "ITEM_BLOODDICE_DESC" });
public static ConfigurableValue<float> maxHealthPerStack = new ConfigurableValue<float>("Item: Blood Dice", "Maximum Health Per Item", 550f, "Maximum amount of permanent health allowed per first stack.", new List<string>(1) { "ITEM_BLOODDICE_DESC" });
public static ConfigurableValue<float> maxHealthPerExtraStack = new ConfigurableValue<float>("Item: Blood Dice", "Maximum Health Per Extra Item", 550f, "Maximum amount of permanent health allowed per extra stack.", new List<string>(1) { "ITEM_BLOODDICE_DESC" });
internal static void Init()
{
ItemTag[] array = new ItemTag[4];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
itemDef = ItemManager.GenerateItem("BloodDice", (ItemTag[])(object)array, (ItemTier)2);
NetworkingAPI.RegisterMessageType<Statistics.Sync>();
Hooks();
}
public static float CalculateMaxHealthCap(int itemCount)
{
return Utilities.GetLinearStacking(maxHealthPerStack.Value, maxHealthPerExtraStack.Value, itemCount);
}
public static void Hooks()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
CharacterMaster.onStartGlobal += delegate(CharacterMaster obj)
{
Inventory inventory = obj.inventory;
if (inventory != null)
{
((Component)inventory).gameObject.AddComponent<Statistics>();
}
};
object obj2 = <>c.<>9__10_1;
if (obj2 == null)
{
hook_GetHealthBarValues val = delegate(orig_GetHealthBarValues orig, HealthComponent self)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
HealthBarValues result = orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)self.body.inventory) && self.body.inventory.GetItemCountEffective(itemDef) > 0)
{
result.hasInfusion = true;
}
return result;
};
<>c.<>9__10_1 = val;
obj2 = (object)val;
}
HealthComponent.GetHealthBarValues += (hook_GetHealthBarValues)obj2;
object obj3 = <>c.<>9__10_2;
if (obj3 == null)
{
StatHookEventHandler val2 = delegate(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory))
{
int itemCountEffective2 = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective2 > 0)
{
Statistics component2 = ((Component)sender.inventory).GetComponent<Statistics>();
if (Object.op_Implicit((Object)(object)component2))
{
args.baseHealthAdd += Mathf.Min(component2.PermanentHealth, CalculateMaxHealthCap(itemCountEffective2));
}
}
}
};
<>c.<>9__10_2 = val2;
obj3 = (object)val2;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj3;
GameEventManager.OnCharacterDeath += delegate(DamageReport damageReport)
{
CharacterMaster attackerMaster = damageReport.attackerMaster;
CharacterBody attackerBody = damageReport.attackerBody;
if (Object.op_Implicit((Object)(object)attackerMaster) && Object.op_Implicit((Object)(object)attackerBody) && Object.op_Implicit((Object)(object)attackerBody.inventory))
{
int itemCountEffective = attackerBody.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
Statistics component = ((Component)attackerBody.inventory).GetComponent<Statistics>();
if (Object.op_Implicit((Object)(object)component))
{
int num = Math.Min(GetDiceRoll(attackerMaster), Mathf.RoundToInt(CalculateMaxHealthCap(itemCountEffective) - component.PermanentHealth));
if (num > 0)
{
for (int i = 0; i < num; i++)
{
OrbManager.instance.AddOrb((Orb)(object)new BloodDiceOrb(damageReport, i));
}
}
}
}
}
};
}
public static int GetDiceRoll(CharacterMaster master)
{
float num = 7f;
float num2 = 3.5f;
if (affectedByLuck.Value)
{
num += master.luck * num2;
}
return Mathf.Clamp(GenerateRollNormalDistribution(num, num2), minHealthGain.Value, maxHealthGain.Value);
}
private static int GenerateRollNormalDistribution(float mean, float deviation)
{
float num = (float)(1.0 - TooManyItems.RandGen.NextDouble());
float num2 = (float)(1.0 - TooManyItems.RandGen.NextDouble());
float num3 = Mathf.Sqrt(-2f * Mathf.Log(num)) * Mathf.Sin(MathF.PI * 2f * num2);
float num4 = mean + deviation * num3;
return Mathf.RoundToInt(num4);
}
}
public class BloodDiceOrb : Orb
{
private readonly float speed = 25f;
private readonly CharacterBody targetBody;
private Inventory targetInventory;
public BloodDiceOrb(DamageReport report, int sequence)
{
//IL_005f: 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_0064: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)report.victimBody) && Object.op_Implicit((Object)(object)report.attackerBody))
{
targetBody = report.attackerBody ?? null;
base.origin = (Object.op_Implicit((Object)(object)report.victimBody) ? report.victimBody.corePosition : Vector3.zero);
if (Object.op_Implicit((Object)(object)targetBody))
{
base.target = targetBody.mainHurtBox;
}
}
speed += sequence;
}
public override void Begin()
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Expected O, but got Unknown
if ((Object)(object)targetBody == (Object)null || (Object)(object)base.target == (Object)null)
{
((Orb)this).duration = 0f;
targetInventory = null;
return;
}
((Orb)this).duration = ((Orb)this).distanceToTarget / speed;
EffectData val = new EffectData
{
origin = base.origin,
genericFloat = ((Orb)this).duration
};
val.SetHurtBoxReference(base.target);
EffectManager.SpawnEffect(OrbStorageUtility.Get("Prefabs/Effects/OrbEffects/InfusionOrbEffect"), val, true);
targetInventory = targetBody.inventory;
}
public override void OnArrival()
{
if (!Object.op_Implicit((Object)(object)targetInventory))
{
return;
}
int itemCountEffective = targetInventory.GetItemCountEffective(BloodDice.itemDef);
float num = BloodDice.CalculateMaxHealthCap(itemCountEffective);
BloodDice.Statistics component = ((Component)targetInventory).GetComponent<BloodDice.Statistics>();
if (Object.op_Implicit((Object)(object)component))
{
component.PermanentHealth += 1f;
if (component.PermanentHealth > num)
{
component.PermanentHealth = num;
}
}
if (Object.op_Implicit((Object)(object)targetBody))
{
Utilities.ForceRecalculate(targetBody);
}
}
}
internal class GlassMarbles
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static StatHookEventHandler <>9__5_0;
internal void <Hooks>b__5_0(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
args.baseDamageAdd += Utilities.GetLinearStacking(damagePerLevelPerStack.Value, damagePerLevelPerExtraStack.Value, itemCountEffective);
args.levelDamageAdd += Utilities.GetLinearStacking(damagePerLevelPerStack.Value, damagePerLevelPerExtraStack.Value, itemCountEffective);
}
}
}
}
public static ItemDef itemDef;
public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Glass Marbles", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string>(1) { "ITEM_GLASSMARBLES_DESC" });
public static ConfigurableValue<float> damagePerLevelPerStack = new ConfigurableValue<float>("Item: Glass Marbles", "Damage Increase", 2f, "Amount of base damage gained per level per first stack.", new List<string>(1) { "ITEM_GLASSMARBLES_DESC" });
public static ConfigurableValue<float> damagePerLevelPerExtraStack = new ConfigurableValue<float>("Item: Glass Marbles", "Damage Increase Extra Stacks", 2f, "Amount of base damage gained per level per extra stack.", new List<string>(1) { "ITEM_GLASSMARBLES_DESC" });
internal static void Init()
{
itemDef = ItemManager.GenerateItem("GlassMarbles", (ItemTag[])(object)new ItemTag[2]
{
(ItemTag)1,
(ItemTag)31
}, (ItemTier)2);
Hooks();
}
public static void Hooks()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__5_0;
if (obj == null)
{
StatHookEventHandler val = delegate(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
args.baseDamageAdd += Utilities.GetLinearStacking(damagePerLevelPerStack.Value, damagePerLevelPerExtraStack.Value, itemCountEffective);
args.levelDamageAdd += Utilities.GetLinearStacking(damagePerLevelPerStack.Value, damagePerLevelPerExtraStack.Value, itemCountEffective);
}
}
};
<>c.<>9__5_0 = val;
obj = (object)val;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
}
}
internal class Horseshoe
{
public enum Bonuses
{
HEALTH,
DAMAGE,
ATTACK_SPEED,
CRIT_CHANCE,
CRIT_DAMAGE,
ARMOR,
HEALTH_REGEN,
SHIELD,
MOVEMENT_SPEED,
NUM_STATS
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<CharacterMaster> <>9__16_0;
public static Action<Stage> <>9__16_1;
public static hook_GiveItemPermanent_ItemIndex_int <>9__16_2;
public static hook_GiveItemTemp <>9__16_3;
public static StatHookEventHandler <>9__16_4;
internal void <Hooks>b__16_0(CharacterMaster obj)
{
Inventory inventory = obj.inventory;
if (inventory != null)
{
((Component)inventory).gameObject.AddComponent<HorseshoeStatisticsHandler>();
}
}
internal void <Hooks>b__16_1(Stage stage)
{
foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
{
CharacterMaster master = instance.master;
if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)master.inventory) && master.inventory.GetItemCountEffective(itemDef) > 0)
{
Reroll(master.inventory, master.GetBody());
}
}
}
internal void <Hooks>b__16_2(orig_GiveItemPermanent_ItemIndex_int orig, Inventory self, ItemIndex index, int count)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
HorseshoeStatisticsHandler component = ((Component)self).GetComponent<HorseshoeStatisticsHandler>();
CharacterMaster component2 = ((Component)self).GetComponent<CharacterMaster>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && index == itemDef.itemIndex && HasNotRolledYet(component) && Object.op_Implicit((Object)(object)component2.GetBody()))
{
Reroll(self, component2.GetBody());
}
orig.Invoke(self, index, count);
}
internal void <Hooks>b__16_3(orig_GiveItemTemp orig, Inventory self, ItemIndex index, float count)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
HorseshoeStatisticsHandler component = ((Component)self).GetComponent<HorseshoeStatisticsHandler>();
CharacterMaster component2 = ((Component)self).GetComponent<CharacterMaster>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && index == itemDef.itemIndex && HasNotRolledYet(component) && Object.op_Implicit((Object)(object)component2.GetBody()))
{
Reroll(self, component2.GetBody());
}
orig.Invoke(self, index, count);
}
internal void <Hooks>b__16_4(CharacterBody sender, StatHookEventArgs args)
{
if (!Object.op_Implicit((Object)(object)sender) || !Object.op_Implicit((Object)(object)sender.inventory))
{
return;
}
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
HorseshoeStatisticsHandler component = ((Component)sender.inventory).GetComponent<HorseshoeStatisticsHandler>();
if (Object.op_Implicit((Object)(object)component))
{
args.baseHealthAdd += GetScaledValue(component.MaxHealthBonus, sender.level, itemCountEffective);
args.baseDamageAdd += GetScaledValue(component.BaseDamageBonus, sender.level, itemCountEffective);
args.attackSpeedMultAdd += GetScaledValue(component.AttackSpeedPercentBonus, sender.level, itemCountEffective);
args.critAdd += GetScaledValue(component.CritChanceBonus, sender.level, itemCountEffective);
args.critDamageMultAdd += GetScaledValue(component.CritDamageBonus, sender.level, itemCountEffective);
args.armorAdd += GetScaledValue(component.ArmorBonus, sender.level, itemCountEffective);
args.baseRegenAdd += GetScaledValue(component.RegenerationBonus, sender.level, itemCountEffective);
args.baseShieldAdd += GetScaledValue(component.ShieldBonus, sender.level, itemCountEffective);
args.moveSpeedMultAdd += GetScaledValue(component.MoveSpeedPercentBonus, sender.level, itemCountEffective);
}
}
}
}
public static ItemDef itemDef;
public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Golden Horseshoe", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> totalPointsCap = new ConfigurableValue<float>("Item: Golden Horseshoe", "Stat Points Cap", 18f, "Total amount of stat points in each reroll. See following configs for scalings.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> healthPerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Health Per Point", 12f, "Max health gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> damagePerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Damage Per Point", 0.75f, "Base damage gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> attackSpeedPerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Attack Speed Per Point", 4f, "Percent attack speed gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> critChancePerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Crit Chance Per Point", 2f, "Percent crit chance gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> critDamagePerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Crit Damage Per Point", 2f, "Percent crit damage gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> armorPerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Armor Per Point", 2f, "Armor gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> regenPerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Regeneration Per Point", 0.75f, "Regeneration gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> shieldPerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Shield Per Point", 15f, "Shield gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> moveSpeedPerPoint = new ConfigurableValue<float>("Item: Golden Horseshoe", "Move Speed Per Point", 4f, "Percent movement speed gained per stat point invested.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static ConfigurableValue<float> extraStackMultiplier = new ConfigurableValue<float>("Item: Golden Horseshoe", "Increase for Additional Stacks", 30f, "Percent increase to all bonuses given for each additional stack of this item.", new List<string>(1) { "ITEM_HORSESHOE_DESC" });
public static float extraStackMultiplierPercent = extraStackMultiplier.Value / 100f;
internal static void Init()
{
ItemTag[] array = new ItemTag[4];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
itemDef = ItemManager.GenerateItem("Horseshoe", (ItemTag[])(object)array, (ItemTier)2);
NetworkingAPI.RegisterMessageType<HorseshoeStatisticsHandler.Sync>();
Hooks();
}
public static void Hooks()
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Expected O, but got Unknown
CharacterMaster.onStartGlobal += delegate(CharacterMaster obj)
{
Inventory inventory = obj.inventory;
if (inventory != null)
{
((Component)inventory).gameObject.AddComponent<HorseshoeStatisticsHandler>();
}
};
Stage.onStageStartGlobal += delegate
{
foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
{
CharacterMaster master = instance.master;
if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)master.inventory) && master.inventory.GetItemCountEffective(itemDef) > 0)
{
Reroll(master.inventory, master.GetBody());
}
}
};
object obj2 = <>c.<>9__16_2;
if (obj2 == null)
{
hook_GiveItemPermanent_ItemIndex_int val = delegate(orig_GiveItemPermanent_ItemIndex_int orig, Inventory self, ItemIndex index, int count)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
HorseshoeStatisticsHandler component4 = ((Component)self).GetComponent<HorseshoeStatisticsHandler>();
CharacterMaster component5 = ((Component)self).GetComponent<CharacterMaster>();
if (Object.op_Implicit((Object)(object)component4) && Object.op_Implicit((Object)(object)component5) && index == itemDef.itemIndex && HasNotRolledYet(component4) && Object.op_Implicit((Object)(object)component5.GetBody()))
{
Reroll(self, component5.GetBody());
}
orig.Invoke(self, index, count);
};
<>c.<>9__16_2 = val;
obj2 = (object)val;
}
Inventory.GiveItemPermanent_ItemIndex_int += (hook_GiveItemPermanent_ItemIndex_int)obj2;
object obj3 = <>c.<>9__16_3;
if (obj3 == null)
{
hook_GiveItemTemp val2 = delegate(orig_GiveItemTemp orig, Inventory self, ItemIndex index, float count)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
HorseshoeStatisticsHandler component2 = ((Component)self).GetComponent<HorseshoeStatisticsHandler>();
CharacterMaster component3 = ((Component)self).GetComponent<CharacterMaster>();
if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component3) && index == itemDef.itemIndex && HasNotRolledYet(component2) && Object.op_Implicit((Object)(object)component3.GetBody()))
{
Reroll(self, component3.GetBody());
}
orig.Invoke(self, index, count);
};
<>c.<>9__16_3 = val2;
obj3 = (object)val2;
}
Inventory.GiveItemTemp += (hook_GiveItemTemp)obj3;
object obj4 = <>c.<>9__16_4;
if (obj4 == null)
{
StatHookEventHandler val3 = delegate(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.inventory))
{
int itemCountEffective = sender.inventory.GetItemCountEffective(itemDef);
if (itemCountEffective > 0)
{
HorseshoeStatisticsHandler component = ((Component)sender.inventory).GetComponent<HorseshoeStatisticsHandler>();
if (Object.op_Implicit((Object)(object)component))
{
args.baseHealthAdd += GetScaledValue(component.MaxHealthBonus, sender.level, itemCountEffective);
args.baseDamageAdd += GetScaledValue(component.BaseDamageBonus, sender.level, itemCountEffective);
args.attackSpeedMultAdd += GetScaledValue(component.AttackSpeedPercentBonus, sender.level, itemCountEffective);
args.critAdd += GetScaledValue(component.CritChanceBonus, sender.level, itemCountEffective);
args.critDamageMultAdd += GetScaledValue(component.CritDamageBonus, sender.level, itemCountEffective);
args.armorAdd += GetScaledValue(component.ArmorBonus, sender.level, itemCountEffective);
args.baseRegenAdd += GetScaledValue(component.RegenerationBonus, sender.level, itemCountEffective);
args.baseShieldAdd += GetScaledValue(component.ShieldBonus, sender.level, itemCountEffective);
args.moveSpeedMultAdd += GetScaledValue(component.MoveSpeedPercentBonus, sender.level, itemCountEffective);
}
}
}
};
<>c.<>9__16_4 = val3;
obj4 = (object)val3;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj4;
}
public static float GetScaledValue(float value, float level, int count)
{
float num = (level + 11f) / 12f;
float num2 = 1f + extraStackMultiplierPercent * (float)count;
return value * num * num2;
}
public static bool HasNotRolledYet(HorseshoeStatisticsHandler bonuses)
{
if (bonuses.MaxHealthBonus != 0f)
{
return false;
}
if (bonuses.BaseDamageBonus != 0f)
{
return false;
}
if (bonuses.AttackSpeedPercentBonus != 0f)
{
return false;
}
if (bonuses.CritChanceBonus != 0f)
{
return false;
}
if (bonuses.CritDamageBonus != 0f)
{
return false;
}
if (bonuses.ArmorBonus != 0f)
{
return false;
}
if (bonuses.RegenerationBonus != 0f)
{
return false;
}
if (bonuses.ShieldBonus != 0f)
{
return false;
}
if (bonuses.MoveSpeedPercentBonus != 0f)
{
return false;
}
return true;
}
public static void Reroll(Inventory inventory, CharacterBody body)
{
HorseshoeStatisticsHandler component = ((Component)inventory).GetComponent<HorseshoeStatisticsHandler>();
if (Object.op_Implicit((Object)(object)component))
{
component.MaxHealthBonus = 0f;
component.BaseDamageBonus = 0f;
component.AttackSpeedPercentBonus = 0f;
component.CritChanceBonus = 0f;
component.CritDamageBonus = 0f;
component.ArmorBonus = 0f;
component.RegenerationBonus = 0f;
component.ShieldBonus = 0f;
component.MoveSpeedPercentBonus = 0f;
float num = totalPointsCap.Value;
while (num > 0f)
{
float num2 = 2.5f;
float num3 = (float)TooManyItems.RandGen.NextDouble() * num2 + num2;
if (num - num3 < num2)
{
num3 = num;
}
switch ((Bonuses)TooManyItems.RandGen.Next(0, 9))
{
case Bonuses.HEALTH:
component.MaxHealthBonus += num3 * healthPerPoint.Value;
break;
case Bonuses.DAMAGE:
component.BaseDamageBonus += num3 * damagePerPoint.Value;
break;
case Bonuses.ATTACK_SPEED:
component.AttackSpeedPercentBonus += num3 * attackSpeedPerPoint.Value / 100f;
break;
case Bonuses.CRIT_CHANCE:
component.CritChanceBonus += num3 * critChancePerPoint.Value;
break;
case Bonuses.CRIT_DAMAGE:
component.CritDamageBonus += num3 * critDamagePerPoint.Value / 100f;
break;
case Bonuses.ARMOR:
component.ArmorBonus += num3 * armorPerPoint.Value;
break;
case Bonuses.HEALTH_REGEN:
component.RegenerationBonus += num3 * regenPerPoint.Value;
break;
case Bonuses.SHIELD:
component.ShieldBonus += num3 * shieldPerPoint.Value;
break;
case Bonuses.MOVEMENT_SPEED:
component.MoveSpeedPercentBonus += num3 * moveSpeedPerPoint.Value / 100f;
break;
default:
Log.Error("Attempted to boost an invalid stat.");
break;
}
num -= num3;
}
Utilities.ForceRecalculate(body);
}
else
{
Log.Error("Unable to reroll Horseshoe statistics.");
}
}
}
internal class IronHeart
{
public class Statistics : MonoBehaviour
{
public class Sync : INetMessage, ISerializableObject
{
private NetworkInstanceId objId;
private float totalDamageDealt;
public Sync()
{
}
public Sync(NetworkInstanceId objId, float totalDamage)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
this.objId = objId;
totalDamageDealt = totalDamage;
}
public void Deserialize(NetworkReader reader)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
objId = reader.ReadNetworkId();
totalDamageDealt = reader.ReadSingle();
}
public void OnReceived()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
if (NetworkServer.active)
{
return;
}
GameObject val = Util.FindNetworkObject(objId);
if ((Object)(object)val != (Object)null)
{
Statistics component = val.GetComponent<Statistics>();
if (component != null)
{
component.TotalDamageDealt = totalDamageDealt;
}
}
}
public void Serialize(NetworkWriter writer)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
writer.Write(objId);
writer.Write(totalDamageDealt);
writer.FinishMessage();
}
}
private float _totalDamageDealt;
public float TotalDamageDealt
{
get
{
return _totalDamageDealt;
}
set
{
//IL_001d: Unknown result type (might be due to invalid IL