Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of SillyItems v1.4.0
SillyGlasses.dll
Decompiled 8 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; }