Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of SillyItems v1.4.0
SillyGlasses.dll
Decompiled 4 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using On.RoR2; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Skills; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("SillyGlasses")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SillyGlasses")] [assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("29a2bb13-7659-4aac-b40e-529c72d5a209")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] namespace SillyGlasses; public class BootlegLimbMatcher : MonoBehaviour { [Serializable] public struct LimbPair { public Transform originalTransform; public string targetChildLimb; public float originalLimbLength; [NonSerialized] public Transform targetTransform; } public bool scaleLimbs = true; private bool valid; public LimbPair[] limbPairs; private float distance; public void Init(LimbMatcher limbMatcher_, ChildLocator childLocator_, float distance_) { limbPairs = limbMatcher_.limbPairs; scaleLimbs = limbMatcher_.scaleLimbs; distance = distance_; SetChildLocator(childLocator_); } public void SetChildLocator(ChildLocator childLocator) { //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_001b: Unknown result type (might be due to invalid IL or missing references) valid = true; for (int i = 0; i < limbPairs.Length; i++) { LimbPair val = limbPairs[i]; Transform val2 = childLocator.FindChild(val.targetChildLimb); if (!Object.op_Implicit((Object)(object)val2)) { valid = false; break; } limbPairs[i].targetTransform = val2; } } private void LateUpdate() { UpdateLimbs(); } private void UpdateLimbs() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) if (!valid) { return; } for (int i = 0; i < limbPairs.Length; i++) { LimbPair val = limbPairs[i]; Transform targetTransform = val.targetTransform; if (!Object.op_Implicit((Object)(object)targetTransform) || !Object.op_Implicit((Object)(object)val.originalTransform)) { continue; } val.originalTransform.position = targetTransform.position + targetTransform.forward * distance; val.originalTransform.rotation = targetTransform.rotation; if (i < limbPairs.Length - 1) { float num = Vector3.Magnitude(limbPairs[i + 1].targetTransform.position - targetTransform.position); float originalLimbLength = val.originalLimbLength; if (scaleLimbs) { Vector3 localScale = val.originalTransform.localScale; localScale.y = num / originalLimbLength; val.originalTransform.localScale = localScale; } } } } } public class CharacterSwooceHandler : MonoBehaviour { private bool _subscribedToEvents; private Dictionary<ItemIndex, int> _instantiatedSillyAmounts = new Dictionary<ItemIndex, int>(); private Dictionary<ItemIndex, Transform> _instantiatedSillyParents = new Dictionary<ItemIndex, Transform>(); private Dictionary<ItemIndex, List<Transform>> _extraParentsLists = new Dictionary<ItemIndex, List<Transform>>(); private Dictionary<ItemIndex, List<ParentedPrefabDisplay>> _sillyParentedPrefabDisplays = new Dictionary<ItemIndex, List<ParentedPrefabDisplay>>(); private CharacterModel _swoocedCharacterModel; private Inventory _swoocedCurrentInventory; private ChildLocator _swoocedChildLocator; private float _specialItemDistance; private MaterialPropertyBlock propertyStorage; public CharacterModel swoocedCharacterModel => _swoocedCharacterModel; private int _cfgMaxItems => Utils.Cfg_ItemStackMax; private float _cfgDistanceMultiplier => Utils.Cfg_ItemDistanceMultiplier; public void Init(float distance_) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown propertyStorage = new MaterialPropertyBlock(); _specialItemDistance = distance_; _swoocedCharacterModel = ((Component)this).GetComponent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)_swoocedCharacterModel)) { Object.Destroy((Object)(object)this); return; } if (!Object.op_Implicit((Object)(object)_swoocedCharacterModel.body)) { Object.Destroy((Object)(object)this); return; } if (!Object.op_Implicit((Object)(object)_swoocedCharacterModel.body.inventory)) { Object.Destroy((Object)(object)this); return; } _swoocedCurrentInventory = _swoocedCharacterModel.body.inventory; if (!Object.op_Implicit((Object)(object)_swoocedCurrentInventory)) { Object.Destroy((Object)(object)this); } else { SubscribeToEvents(subscribing: true); } } private void Update() { //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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: 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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) if ((bool)Utils.Cfg_NoMaterialUpdate) { return; } Color val = Color.black; if (Object.op_Implicit((Object)(object)_swoocedCharacterModel) && Object.op_Implicit((Object)(object)_swoocedCharacterModel.body) && Object.op_Implicit((Object)(object)_swoocedCharacterModel.body.healthComponent)) { float num = Mathf.Clamp01(1f - _swoocedCharacterModel.body.healthComponent.timeSinceLastHit / CharacterModel.hitFlashDuration); float num2 = Mathf.Pow(Mathf.Clamp01(1f - _swoocedCharacterModel.body.healthComponent.timeSinceLastHeal / CharacterModel.healFlashDuration), 0.5f); val = ((!(num2 > num)) ? (((_swoocedCharacterModel.body.healthComponent.shield > 0f) ? CharacterModel.hitFlashShieldColor : CharacterModel.hitFlashBaseColor) * num) : (CharacterModel.healFlashColor * num2)); } foreach (List<ParentedPrefabDisplay> value in _sillyParentedPrefabDisplays.Values) { for (int i = 0; i < value.Count; i++) { ParentedPrefabDisplay val2 = value[i]; ItemDisplay itemDisplay = ((ParentedPrefabDisplay)(ref val2)).itemDisplay; if (!((Object)(object)itemDisplay == (Object)null)) { itemDisplay.SetVisibilityLevel(_swoocedCharacterModel.visibility); for (int j = 0; j < itemDisplay.rendererInfos.Length; j++) { Renderer renderer = itemDisplay.rendererInfos[j].renderer; renderer.GetPropertyBlock(propertyStorage); propertyStorage.SetColor(CommonShaderProperties._FlashColor, val); propertyStorage.SetFloat(CommonShaderProperties._Fade, _swoocedCharacterModel.fade); renderer.SetPropertyBlock(propertyStorage); } } } } } private void OnDestroy() { SubscribeToEvents(subscribing: false); } private void SubscribeToEvents(bool subscribing) { if (subscribing != _subscribedToEvents) { _subscribedToEvents = subscribing; if (subscribing) { SillyGlassesPlugin instance = SillyGlassesPlugin.instance; instance.enableDisableDisplayEvent = (SillyGlassesPlugin.EnableDisableDisplayEvent)Delegate.Combine(instance.enableDisableDisplayEvent, new SillyGlassesPlugin.EnableDisableDisplayEvent(onHookedEnableDisableDisplay)); } else { SillyGlassesPlugin instance2 = SillyGlassesPlugin.instance; instance2.enableDisableDisplayEvent = (SillyGlassesPlugin.EnableDisableDisplayEvent)Delegate.Remove(instance2.enableDisableDisplayEvent, new SillyGlassesPlugin.EnableDisableDisplayEvent(onHookedEnableDisableDisplay)); } } } public void onHookedEnableDisableDisplay(CharacterModel characterModel_, ItemIndex itemIndex_) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) if ((bool)Utils.Cfg_SlightlyUnstable) { onHookedEnableDisableDisplaySpooky(characterModel_, itemIndex_); return; } try { onHookedEnableDisableDisplaySpooky(characterModel_, itemIndex_); } catch (Exception arg) { if (!Utils.wegetit || (bool)Utils.Cfg_UseLogs) { Utils.wegetit = true; SillyGlassesPlugin.logger.LogError((object)$"WELP IT HAPPENED.\n\n[Please send this log to thetimesweeper]\n\n {arg}"); } } } public void onHookedEnableDisableDisplaySpooky(CharacterModel characterModel_, ItemIndex itemIndex_) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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) if (Object.op_Implicit((Object)(object)characterModel_) && !((Object)(object)((Component)characterModel_).gameObject != (Object)(object)((Component)this).gameObject) && Object.op_Implicit((Object)(object)characterModel_.itemDisplayRuleSet)) { DisplayRuleGroup itemDisplayRuleGroup = characterModel_.itemDisplayRuleSet.GetItemDisplayRuleGroup(itemIndex_); PseudoInstantiateDisplayRuleGroup(characterModel_, itemDisplayRuleGroup, itemIndex_); } } private void PseudoInstantiateDisplayRuleGroup(CharacterModel characterModel_, DisplayRuleGroup displayRuleGroup_, ItemIndex itemIndex_) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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: Invalid comparison between Unknown and I4 //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Invalid comparison between Unknown and I4 //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_swoocedCurrentInventory) || (Object)(object)characterModel_ != (Object)(object)_swoocedCharacterModel || displayRuleGroup_.rules == null || displayRuleGroup_.rules.Length == 0 || (int)itemIndex_ == -1) { return; } if (!_instantiatedSillyAmounts.ContainsKey(itemIndex_)) { _instantiatedSillyAmounts.Add(itemIndex_, 0); } int itemCount = _swoocedCurrentInventory.GetItemCount(itemIndex_); int num = _instantiatedSillyAmounts[itemIndex_]; int num2 = num + ((itemCount > 0) ? 1 : 0); int num3 = itemCount - num2; if (itemCount == 1 && num3 >= 0) { return; } ParentedPrefabDisplay item; if (num3 < 0) { if (!_instantiatedSillyParents.ContainsKey(itemIndex_) || !((Object)(object)_instantiatedSillyParents[itemIndex_] != (Object)null)) { return; } Object.Destroy((Object)(object)((Component)_instantiatedSillyParents[itemIndex_]).gameObject); _instantiatedSillyParents[itemIndex_] = null; _instantiatedSillyAmounts[itemIndex_] = 0; if (_extraParentsLists.ContainsKey(itemIndex_) && _extraParentsLists[itemIndex_] != null) { List<Transform> list = _extraParentsLists[itemIndex_]; for (int num4 = list.Count - 1; num4 >= 0; num4--) { if (Object.op_Implicit((Object)(object)list[num4])) { Object.Destroy((Object)(object)((Component)list[num4]).gameObject); } list.RemoveAt(num4); } } if (!Utils.Cfg_NoMaterialUpdate && _sillyParentedPrefabDisplays.ContainsKey(itemIndex_)) { for (int num5 = _sillyParentedPrefabDisplays[itemIndex_].Count - 1; num5 >= 0; num5--) { item = _sillyParentedPrefabDisplays[itemIndex_][num5]; ((ParentedPrefabDisplay)(ref item)).Undo(); } _sillyParentedPrefabDisplays[itemIndex_].Clear(); } PseudoInstantiateDisplayRuleGroup(characterModel_, displayRuleGroup_, itemIndex_); return; } if ((Object)(object)_swoocedChildLocator == (Object)null) { _swoocedChildLocator = ((Component)characterModel_).GetComponent<ChildLocator>(); } for (int i = 0; i < num3; i++) { int num6 = num2 + i; if (_cfgMaxItems != -1 && num6 + 1 >= _cfgMaxItems) { break; } _instantiatedSillyAmounts[itemIndex_]++; for (int j = 0; j < displayRuleGroup_.rules.Length; j++) { ItemDisplayRule val = displayRuleGroup_.rules[j]; if ((int)val.ruleType > 0) { continue; } Transform val2 = _swoocedChildLocator.FindChild(val.childName); if ((Object)(object)val2 == (Object)null) { continue; } GameObject val3 = InstantiateSillyItem(val, _swoocedChildLocator, val2, num6, itemIndex_); if ((Object)(object)val3 == (Object)null) { continue; } if (!Utils.Cfg_NoMaterialUpdate) { if (!_sillyParentedPrefabDisplays.ContainsKey(itemIndex_)) { _sillyParentedPrefabDisplays[itemIndex_] = new List<ParentedPrefabDisplay>(); } List<ParentedPrefabDisplay> list2 = _sillyParentedPrefabDisplays[itemIndex_]; item = default(ParentedPrefabDisplay); ((ParentedPrefabDisplay)(ref item)).instance = val3; ((ParentedPrefabDisplay)(ref item)).itemDisplay = val3.GetComponent<ItemDisplay>(); item.itemIndex = itemIndex_; list2.Add(item); } Transform sillyParent = GetSillyParent(itemIndex_, val2); val3.transform.parent = sillyParent; if ((Object)(object)sillyParent == (Object)null) { Utils.Log("sillyParent is null \nwait how \nI should be pretty much covering all the bases there"); } } } } private GameObject InstantiateSillyItem(ItemDisplayRule displayRule_, ChildLocator childLocator_, Transform bodyDisplayParent_, int instanceMult_, ItemIndex itemIndex_) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_0023: 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) GameObject followerPrefab = displayRule_.followerPrefab; if ((Object)(object)followerPrefab == (Object)null) { return null; } Vector3 localPos = displayRule_.localPos; Quaternion localRotation = Quaternion.Euler(displayRule_.localAngles); Vector3 localScale = displayRule_.localScale; GameObject val = Object.Instantiate<GameObject>(followerPrefab.gameObject, bodyDisplayParent_); val.transform.localPosition = localPos; val.transform.localRotation = localRotation; val.transform.localScale = localScale; float num = (float)instanceMult_ * _cfgDistanceMultiplier * _specialItemDistance; Vector3 val2; Vector3 val3; if (!Utils.Cfg_OutwardStackType) { val2 = val.transform.forward * num; } else if (displayRule_.childName != "Head") { val3 = val.transform.position - bodyDisplayParent_.position; Vector3 normalized = ((Vector3)(ref val3)).normalized; val3 = Vector3.Cross(((Component)bodyDisplayParent_).transform.up, normalized); Vector3 normalized2 = ((Vector3)(ref val3)).normalized; val3 = Vector3.Cross(((Component)bodyDisplayParent_).transform.up, normalized2); normalized2 = ((Vector3)(ref val3)).normalized; val3 = (normalized - normalized2) * 0.5f; Vector3 normalized3 = ((Vector3)(ref val3)).normalized; val2 = normalized3 * num; } else { val3 = val.transform.position - bodyDisplayParent_.position; val2 = ((Vector3)(ref val3)).normalized * num; } Transform transform = val.transform; transform.position += val2; if ((bool)Utils.Cfg_UseLogs) { ((Object)val).name = $"{((Object)val).name} {instanceMult_}"; } LimbMatcher component = val.GetComponent<LimbMatcher>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)childLocator_)) { val.AddComponent<BootlegLimbMatcher>().Init(component, childLocator_, num); } return val; } private Transform GetSillyParent(ItemIndex itemIndex_, Transform bodyDisplayParent_) { //IL_0014: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) Transform val = (_instantiatedSillyParents.ContainsKey(itemIndex_) ? _instantiatedSillyParents[itemIndex_] : null); if ((Object)(object)val == (Object)null) { Transform val2 = CreateNewParentedTransform("SillyItem_" + ((object)(ItemIndex)(ref itemIndex_)).ToString() + "_Parent", bodyDisplayParent_); _instantiatedSillyParents[itemIndex_] = val2; return val2; } if ((Object)(object)val != (Object)null && (Object)(object)val.parent == (Object)(object)bodyDisplayParent_) { return _instantiatedSillyParents[itemIndex_]; } if ((Object)(object)val != (Object)null && (Object)(object)val.parent != (Object)(object)bodyDisplayParent_) { List<Transform> list = null; if (!_extraParentsLists.ContainsKey(itemIndex_)) { _extraParentsLists[itemIndex_] = new List<Transform>(); } list = _extraParentsLists[itemIndex_]; Transform val3 = list.Find((Transform extra) => (Object)(object)bodyDisplayParent_ == (Object)(object)extra.parent); if ((Object)(object)val3 == (Object)null) { val3 = CreateNewParentedTransform("SillyItem_" + ((object)(ItemIndex)(ref itemIndex_)).ToString() + "_ExtraParent", bodyDisplayParent_); _extraParentsLists[itemIndex_].Add(val3); } return val3; } return null; } private Transform CreateNewParentedTransform(string name, Transform parent) { //IL_0002: 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_0022: 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) Transform transform = new GameObject(name).transform; transform.parent = parent; transform.localPosition = Vector3.one; transform.localRotation = Quaternion.identity; transform.localScale = Vector3.one; return transform; } private void ShowFunnyCube(Transform parent_, Vector3 displayRuleLocalPos_, Quaternion displayRuleLocalRotation_, float forwardDistance_) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.CreatePrimitive((PrimitiveType)3); Type[] array = new Type[2] { typeof(MeshRenderer), typeof(MeshFilter) }; GameObject val2 = new GameObject("bruh", array); val2.GetComponent<MeshFilter>().mesh = val.GetComponent<MeshFilter>().mesh; ((Renderer)val2.GetComponent<MeshRenderer>()).material = new Material(((Renderer)val.GetComponent<MeshRenderer>()).material); val2.transform.parent = parent_; val2.transform.localPosition = displayRuleLocalPos_; val2.transform.localRotation = displayRuleLocalRotation_; val2.transform.localScale = new Vector3(0.169f, 0.01f, 0.1f); Transform transform = val2.transform; transform.position += val2.transform.forward * forwardDistance_; Object.Destroy((Object)(object)val); } private static void RunCheats() { if (!Utils.Cfg_PlantsForHire) { } } private void TestAddGlasses() { if ((Object)(object)_swoocedCurrentInventory != (Object)null) { _swoocedCurrentInventory.GiveItem((ItemIndex)Utils.Cfg_CheatItemBoring, 1); } } private void TestRemoveGlasses() { if ((Object)(object)_swoocedCurrentInventory != (Object)null) { _swoocedCurrentInventory.RemoveItem((ItemIndex)Utils.Cfg_CheatItemBoring, 1); } } } public class ConfigEntry { } public class ConfigEntry<T> : ConfigEntry { public ConfigEntry<T> ActualConfigEntry; public T DefaultValue; public T Value { get { if (ActualConfigEntry != null) { return ActualConfigEntry.Value; } return DefaultValue; } } public static implicit operator T(ConfigEntry<T> config) { return config.Value; } public ConfigEntry(T defaultValue) { ActualConfigEntry = null; DefaultValue = defaultValue; } public ConfigEntry(ConfigEntry<T> actualConfigEntry, T defaultValue) { ActualConfigEntry = actualConfigEntry; DefaultValue = defaultValue; } } public static class Config { public static ConfigFile MyConfig = ((BaseUnityPlugin)SillyGlassesPlugin.instance).Config; private static List<string> disabledSections = new List<string>(); private static bool enableAll = true; private static bool loadedIcon; public static void DisableSection(string section) { disabledSections.Add(section); } private static bool SectionDisabled(string section) { return disabledSections.Contains(section); } public static void ConfigureBody(CharacterBody bodyComponent, string section, string bodyInfoTitle = "") { if (string.IsNullOrEmpty(bodyInfoTitle)) { bodyInfoTitle = ((Object)bodyComponent).name; } bodyComponent.baseMaxHealth = BindAndOptions(section, bodyInfoTitle + " Base Max Health", bodyComponent.baseMaxHealth, 0f, 1000f, "levelMaxHealth will be adjusted accordingly (baseMaxHealth * 0.3)", restartRequired: true).Value; bodyComponent.levelMaxHealth = Mathf.Round(bodyComponent.baseMaxHealth * 0.3f); bodyComponent.baseRegen = BindAndOptions(section, bodyInfoTitle + " Base Regen", bodyComponent.baseRegen, "levelRegen will be adjusted accordingly (baseRegen * 0.2)", restartRequired: true).Value; bodyComponent.levelRegen = bodyComponent.baseRegen * 0.2f; bodyComponent.baseArmor = BindAndOptions(section, bodyInfoTitle + " Armor", bodyComponent.baseArmor, "", restartRequired: true).Value; bodyComponent.baseDamage = BindAndOptions(section, bodyInfoTitle + " Base Damage", bodyComponent.baseDamage, "pretty much all survivors are 12. If you want to change damage, change damage of the moves instead.\nlevelDamage will be adjusted accordingly (baseDamage * 0.2)", restartRequired: true).Value; bodyComponent.levelDamage = bodyComponent.baseDamage * 0.2f; bodyComponent.baseJumpCount = BindAndOptions(section, bodyInfoTitle + " Jump Count", bodyComponent.baseJumpCount, "", restartRequired: true).Value; } public static void ConfigureSkillDef(SkillDef skillDef, string section, string skillTitle, bool cooldown = true, bool maxStock = true, bool rechargeStock = false) { if (cooldown) { skillDef.baseRechargeInterval = BindAndOptions(section, skillTitle + " cooldown", skillDef.baseRechargeInterval, 0f, 20f, "", restartRequired: true).Value; } if (maxStock) { skillDef.baseMaxStock = BindAndOptions(section, skillTitle + " stocks", skillDef.baseMaxStock, 0f, 100f, "", restartRequired: true).Value; } if (rechargeStock) { skillDef.rechargeStock = BindAndOptions(section, skillTitle + " recharge stocks", skillDef.baseMaxStock, 0f, 100f, "", restartRequired: true).Value; } } public static ConfigEntry<bool> CharacterEnableConfig(string section, string characterName, string description = "", bool enabledByDefault = true) { if (string.IsNullOrEmpty(description)) { description = "Set to false to disable this character and as much of its code and content as possible"; } return BindAndOptions(section, "Enable " + characterName, enabledByDefault, description, restartRequired: true); } public static ConfigEntry<T> BindAndOptionsSlider<T>(string section, string name, T defaultValue, float min = 0f, float max = 20f, string description = "", bool restartRequired = false) { return BindAndOptions(section, name, defaultValue, min, max, description, restartRequired); } public static ConfigEntry<T> BindAndOptions<T>(string section, string name, T defaultValue, string description = "", bool restartRequired = false) { return BindAndOptions(section, name, defaultValue, 0f, 20f, description, restartRequired); } public static ConfigEntry<T> BindAndOptions<T>(string section, string name, T defaultValue, float min, float max, string description = "", bool restartRequired = false) { if (string.IsNullOrEmpty(description)) { description = name; } description += $"\nDefault: {defaultValue}"; if (restartRequired) { description += "\n(restart required)"; } if (!enableAll && SectionDisabled(section)) { return new ConfigEntry<T>(null, defaultValue); } ConfigEntry<T> val = MyConfig.Bind<T>(section, name, defaultValue, description); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { TryRegisterOption<T>(val, min, max, restartRequired); } return new ConfigEntry<T>(val, defaultValue); } public static ConfigEntry BindAndOptions(string section, string name, ValueType defaultValue, float min, float max, string description = "", bool restartRequired = false) { //IL_0089: Unknown result type (might be due to invalid IL or missing references) if (defaultValue is float) { return BindAndOptions(section, name, (float)(object)defaultValue, min, max, description, restartRequired); } if (defaultValue is int) { return BindAndOptions(section, name, (int)(object)defaultValue, min, max, description, restartRequired); } if (defaultValue is bool) { return BindAndOptions(section, name, (bool)(object)defaultValue, min, max, description, restartRequired); } if (defaultValue is KeyboardShortcut) { return BindAndOptions<KeyboardShortcut>(section, name, (KeyboardShortcut)(object)defaultValue, min, max, description, restartRequired); } if (defaultValue == null) { Debug.LogError((object)$"defaultvalue was null somehow for {section}:{name} {defaultValue}"); } Debug.LogError((object)$"Configuring a field with unsupported type {defaultValue.GetType()} for {section}:{name}"); return null; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void TryRegisterOption<T>(ConfigEntry<T> entry, float min, float max, bool restartRequired) { //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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown if (entry is ConfigEntry<float>) { ModSettingsManager.AddOption((BaseOption)new SliderOption(entry as ConfigEntry<float>, new SliderConfig { min = min, max = max, formatString = "{0:0.000}", restartRequired = restartRequired })); } if (entry is ConfigEntry<int>) { ModSettingsManager.AddOption((BaseOption)new IntSliderOption(entry as ConfigEntry<int>, new IntSliderConfig { min = (int)min, max = (int)max, restartRequired = restartRequired })); } if (entry is ConfigEntry<bool>) { ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(entry as ConfigEntry<bool>, restartRequired)); } if (entry is ConfigEntry<KeyboardShortcut>) { ModSettingsManager.AddOption((BaseOption)new KeyBindOption(entry as ConfigEntry<KeyboardShortcut>, restartRequired)); } if (!loadedIcon) { loadedIcon = true; try { ModSettingsManager.SetModIcon(ImgHandler.LoadSpriteFromModFolder("icon.png")); } catch (Exception ex) { Debug.LogError((object)("error adding ROO mod icon\n" + ex)); } } } public static bool GetKeyPressed(KeyboardShortcut entry) { //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_0019: 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) foreach (KeyCode modifier in ((KeyboardShortcut)(ref entry)).Modifiers) { if (!Input.GetKey(modifier)) { return false; } } return Input.GetKeyDown(((KeyboardShortcut)(ref entry)).MainKey); } } public static class ImgHandler { public static Sprite LoadSprite(string path, string name) { Texture2D texture2D = LoadTex2D(path, pointFilter: true); return CreateSprite(texture2D, name); } public static Texture2D LoadTex2D(string fullFilePath, bool pointFilter = false) { Texture2D val = LoadPNG(fullFilePath, pointFilter); if (pointFilter) { ((Texture)val).filterMode = (FilterMode)0; val.Apply(); } return val; } private static Sprite CreateSprite(Texture2D texture2D, string name) { //IL_0038: 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) ((Object)texture2D).name = name; ((Texture)texture2D).filterMode = (FilterMode)0; texture2D.Apply(); Rect val = default(Rect); ((Rect)(ref val))..ctor(0f, 0f, (float)((Texture)texture2D).width, (float)((Texture)texture2D).height); Sprite val2 = Sprite.Create(texture2D, val, new Vector2(0.5f, 0.5f), 16f); ((Object)val2).name = name; return val2; } public static Texture2D LoadPNG(params string[] pathDirectories) { string text = pathDirectories[0]; for (int i = 1; i < pathDirectories.Length; i++) { text = Path.Combine(text, pathDirectories[i]); } return LoadPNG(text); } public static Texture2D LoadPNG(string filePath, bool pointFilter = false) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown Texture2D val = new Texture2D(2, 2); byte[] array = File.ReadAllBytes(filePath); ImageConversion.LoadImage(val, array); ((Texture)val).filterMode = (FilterMode)((!pointFilter) ? 1 : 0); val.Apply(); return val; } internal static Sprite LoadSpriteFromModFolder(string fileName) { Texture2D texture2D = LoadTex2DFromPModFolder(fileName); return CreateSprite(texture2D, fileName); } internal static Texture2D LoadTex2DFromPModFolder(string fileName, bool pointFilter = false) { string fullFilePath = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)SillyGlassesPlugin.instance).Info.Location), fileName); return LoadTex2D(fullFilePath, pointFilter); } } public class Utils { public static ConfigEntry<int> Cfg_ItemStackMax; public static ConfigEntry<bool> Cfg_OutwardStackType; public static ConfigEntry<float> Cfg_ItemDistanceMultiplier; public static ConfigEntry<float> Cfg_EngiTurretItemDistanceMultiplier; public static ConfigEntry<float> Cfg_ScavengerItemDistanceMultiplier; public static ConfigEntry<float> Cfg_BrotherItemDistanceMultiplier; public static ConfigEntry<bool> Cfg_NoMaterialUpdate; public static ConfigEntry<bool> Cfg_SlightlyUnstable; public static ConfigEntry<bool> Cfg_UseLogs; public static bool Cfg_PlantsForHire = false; public static int Cfg_CheatItem = 7; public static int Cfg_CheatItemBoring = 58; public static bool wegetit; public static void Log(string logString, bool chat = false) { if ((bool)Cfg_UseLogs) { SillyGlassesPlugin.logger.LogMessage((object)("[SillyLog] " + logString)); if (chat) { Chat.AddMessage(logString); } } } } [BepInPlugin("com.TheTimeSweeper.SillyItem", "Silly Items", "1.4.0")] public class SillyGlassesPlugin : BaseUnityPlugin { public delegate void UpdateItemDisplayEvent(CharacterModel self, Inventory inventory); public delegate void EnableDisableDisplayEvent(CharacterModel self, ItemIndex itemIndex); public delegate void UpdateMaterialsEvent(CharacterModel self); public delegate void UpdateCameraEvent(CharacterModel self, CameraRigController cameraRig); public EnableDisableDisplayEvent enableDisableDisplayEvent; private string[] _turretGuyNames = new string[4] { "EngiBeamTurretBody", "EngiTurretBody", "EngiWalkerTurretBody", "TeslaTowerBody" }; private string[] _scavGuyNames = new string[5] { "ScavBody", "ScavLunar1Body", "ScavLunar2Body", "ScavLunar3Body", "ScavLunar4Body" }; private string[] _moonGuyNames = new string[5] { "BrotherBody", "BrotherGlassBody", "BrotherHauntBody", "BrotherHurtBody", "MithrixBody" }; private int _currentRandomIndex; private int _spawnedRandomItems; private int _currentRedIndex; private int _spawnedRedItems; public static SillyGlassesPlugin instance; public static ManualLogSource logger; public void Awake() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown instance = this; logger = ((BaseUnityPlugin)this).Logger; InitConfig(); CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(InvChangedHook); CharacterModel.EnableItemDisplay += new hook_EnableItemDisplay(EnableItemDisplayHook); CharacterModel.DisableItemDisplay += new hook_DisableItemDisplay(DisableItemDisplayHook); } private void CharacterBody_Awake(orig_Awake orig, CharacterBody self) { orig.Invoke(self); float specialItemDistance = getSpecialItemDistance(self); ModelLocator modelLocator = self.modelLocator; if (!((Object)(object)((modelLocator != null) ? modelLocator.modelTransform : null) == (Object)null)) { CharacterSwooceHandler characterSwooceHandler = ((Component)self.modelLocator.modelTransform).gameObject.AddComponent<CharacterSwooceHandler>(); characterSwooceHandler.Init(specialItemDistance); } } private void InitConfig() { string section = "hope youre having a lovely day"; Utils.Cfg_ItemStackMax = Config.BindAndOptions(section, "ItemStacksMax", -1, -1f, 100f, "Maximum item displays that can be spawned (-1 for infinite)."); Utils.Cfg_OutwardStackType = Config.BindAndOptions(section, "Outward Stacking", defaultValue: false, "Makes item stacks outward from the bone it's attached to, rather than their object's forward facing direction."); Utils.Cfg_ItemDistanceMultiplier = Config.BindAndOptions(section, "ItemDistanceMultiplier", 0.048f, -5f, 5f, "The distance between extra displays that spawns."); Utils.Cfg_EngiTurretItemDistanceMultiplier = Config.BindAndOptions(section, "EngiTurretItemDistanceMultiplier", 1.5f, -20f, 20f, "Items are a little bigger on Engis Turrets. Spread them out a bit more."); Utils.Cfg_ScavengerItemDistanceMultiplier = Config.BindAndOptions(section, "ScavItemDistanceMultiplier", 6f, -20f, 20f, "Items are a also bigger on Scavengers I think"); Utils.Cfg_BrotherItemDistanceMultiplier = Config.BindAndOptions(section, "BrotherItemDistanceMultiplier", 2f, -20f, 20f, "Big Spikes."); Utils.Cfg_NoMaterialUpdate = Config.BindAndOptions(section, "No Material Update", defaultValue: false, "Experimental: Disables item materials updating properly with invisibility, dither, and hit/heal flashes (bet you didn't notice those were a thing).\nIn my testing this had 0 effect on performance, but let me know if it helps you\nDoes not require restart, but does require respawn/stage transition"); Utils.Cfg_SlightlyUnstable = Config.BindAndOptions(section, "Slightly Unstable Mode", defaultValue: false, "Removes a try catch from one of the common hooks. May reduce lag on inventory change, but there is a very low chance that this function breaks if your mod list is crazy enough. (2 years and I never had anyone report to me, but I am implementing this safety to try to be super duper safe)"); Utils.Cfg_UseLogs = Config.BindAndOptions(section, "Output Logs", defaultValue: false, "because I keep forgetting to remove logs from my builds haha woops.\nIf you run into a big error in this mod, you can enable this to try to get that error more reliably. Otherwise, keep this off to reduce error text spam (therefore lag)"); string text = "liar liar plants for hire"; Utils.Cfg_PlantsForHire = ((BaseUnityPlugin)this).Config.Bind<bool>(text, "Cheats", false, "Press f2 f3 f6 and f9 to rain items from the sky.").Value; Utils.Cfg_CheatItem = ((BaseUnityPlugin)this).Config.Bind<int>(text, "Cheat Item", 7, "Press f7 to spawn this item (glasses are 7)").Value; Utils.Cfg_CheatItemBoring = ((BaseUnityPlugin)this).Config.Bind<int>(text, "Cheat Item2", 58, "Press f11 and f10 to add/remove this item boringly (58 for magazines)").Value; } private void CharacterBody_Start(orig_Start orig, CharacterBody self) { orig.Invoke(self); float specialItemDistance = getSpecialItemDistance(self); ModelLocator modelLocator = self.modelLocator; if (!((Object)(object)((modelLocator != null) ? modelLocator.modelTransform : null) == (Object)null)) { CharacterSwooceHandler characterSwooceHandler = ((Component)self.modelLocator.modelTransform).gameObject.AddComponent<CharacterSwooceHandler>(); characterSwooceHandler.Init(specialItemDistance); } } private void InvChangedHook(orig_OnInventoryChanged orig, CharacterBody self) { float specialItemDistance = getSpecialItemDistance(self); if (!((Object)(object)self.modelLocator.modelTransform == (Object)null)) { if ((Object)(object)((Component)self.modelLocator.modelTransform).gameObject.GetComponent<CharacterSwooceHandler>() == (Object)null) { CharacterSwooceHandler characterSwooceHandler = ((Component)self.modelLocator.modelTransform).gameObject.AddComponent<CharacterSwooceHandler>(); characterSwooceHandler.Init(specialItemDistance); } orig.Invoke(self); } } private float getSpecialItemDistance(CharacterBody self) { //IL_0002: 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_0008: 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_0044: Unknown result type (might be due to invalid IL or missing references) BodyIndex bodyIndex = self.bodyIndex; if (CheckNames(bodyIndex, _turretGuyNames)) { return Utils.Cfg_EngiTurretItemDistanceMultiplier; } if (CheckNames(bodyIndex, _scavGuyNames)) { return Utils.Cfg_ScavengerItemDistanceMultiplier; } if (CheckNames(bodyIndex, _moonGuyNames)) { return Utils.Cfg_BrotherItemDistanceMultiplier; } return 1f; } private static bool CheckNames(BodyIndex index, string[] names) { //IL_0006: 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) for (int i = 0; i < names.Length; i++) { if (index == BodyCatalog.FindBodyIndex(names[i])) { return true; } } return false; } private void DisableItemDisplayHook(orig_DisableItemDisplay orig, CharacterModel self, ItemIndex itemIndex) { //IL_0003: 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) orig.Invoke(self, itemIndex); enableDisableDisplayEvent?.Invoke(self, itemIndex); } private void EnableItemDisplayHook(orig_EnableItemDisplay orig, CharacterModel self, ItemIndex itemIndex) { //IL_0003: 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) orig.Invoke(self, itemIndex); enableDisableDisplayEvent?.Invoke(self, itemIndex); } public void Update() { } private void TestSpawnItem(int item = -1) { List<PickupIndex> availableTier1DropList = Run.instance.availableTier1DropList; TestSpawnItem(availableTier1DropList, item); } private void TestSpawnItemRed() { List<PickupIndex> availableTier3DropList = Run.instance.availableTier3DropList; TestSpawnItem(availableTier3DropList, -1, random: false); } private void TestSpawnItem(List<PickupIndex> dropList, int item = -1, bool random = true) { //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014b: 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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) Transform transform = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform; PickupIndex val = default(PickupIndex); if (item > -1) { ((PickupIndex)(ref val))..ctor((ItemIndex)item); } else { if (dropList.Count < 0) { return; } if (random) { if (_spawnedRandomItems >= 3) { Utils.Log("treasureRNG broken", chat: true); _spawnedRandomItems = 1; } else { _spawnedRandomItems++; } val = dropList[_currentRandomIndex]; } else { _spawnedRedItems++; if (_spawnedRedItems >= 3) { _currentRedIndex++; _spawnedRedItems = 0; } if (_currentRedIndex >= dropList.Count) { _currentRedIndex = 1; } val = dropList[_currentRedIndex]; } } Vector3 insideUnitSphere = Random.insideUnitSphere; insideUnitSphere.y = Mathf.Abs(insideUnitSphere.y * 3f); insideUnitSphere /= 3f; PickupDropletController.CreatePickupDroplet(val, transform.position + Vector3.up * 69f, insideUnitSphere * 20f); } } public class SillyItemDisplayRules : List<SillyItemDisplayRule> { } public enum SillyItemDisplayBehavior { DEFAULT, DEFAULT_BOTH_WAYS, OUTWARD, SCATTER } public class SillyItemDisplayRule { public string character; public ItemIndex item; public Vector3 defaultStackDirection = Vector3.forward; public float distanceMult = 1f; public SillyItemDisplayBehavior stackBehavior; }