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 SagesHouseholdItems v1.0.2
SagesHouseholdItems.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Microsoft.CodeAnalysis; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.Skills; using SagesHouseholdItems.Equipment; using SagesHouseholdItems.Items; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SagesHouseholdItems")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SagesHouseholdItems")] [assembly: AssemblyTitle("SagesHouseholdItems")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SagesHouseholdItems { [BepInPlugin("HIFU.SagesHouseholdItems", "SagesHouseholdItems", "1.0.2")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { public const string PluginGUID = "HIFU.SagesHouseholdItems"; public const string PluginAuthor = "HIFU"; public const string PluginName = "SagesHouseholdItems"; public const string PluginVersion = "1.0.2"; public static ConfigFile config; public static AssetBundle assetBundle; public List<ItemBase> Items = new List<ItemBase>(); public List<EquipmentBase> Equipments = new List<EquipmentBase>(); public static ManualLogSource ModLogger; public Shader hgStandard; private void Awake() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) ModLogger = ((BaseUnityPlugin)this).Logger; config = new ConfigFile(Paths.ConfigPath + "\\HIFU.SagesHouseholdItems.cfg", true); assetBundle = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("SagesHouseholdItems.dll", "sageshouseholditems")); hgStandard = Addressables.LoadAssetAsync<Shader>((object)"RoR2/Base/Shaders/HGStandard.shader").WaitForCompletion(); Material[] array = assetBundle.LoadAllAssets<Material>(); Material[] array2 = array; foreach (Material val in array2) { if (((Object)val.shader).name.Contains("hgstandard")) { val.shader = hgStandard; } } IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(ItemBase)) select type; foreach (Type item in enumerable) { ItemBase itemBase = (ItemBase)Activator.CreateInstance(item); if (ValidateItem(itemBase, Items)) { itemBase.Init(config); } } IEnumerable<Type> enumerable2 = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(EquipmentBase)) select type; foreach (Type item2 in enumerable2) { EquipmentBase equipmentBase = (EquipmentBase)Activator.CreateInstance(item2); if (ValidateEquipment(equipmentBase, Equipments)) { equipmentBase.Init(config); } } } public bool ValidateItem(ItemBase item, List<ItemBase> itemList) { bool value = config.Bind<bool>("Item: " + item.ConfigName, "Enable Item?", true, "Should this item appear in runs?").Value; bool value2 = config.Bind<bool>("Item: " + item.ConfigName, "Blacklist Item from AI Use?", false, "Should the AI not be able to obtain this item?").Value; if (value) { itemList.Add(item); if (value2) { item.AIBlacklisted = true; } } return value; } public bool ValidateEquipment(EquipmentBase equipment, List<EquipmentBase> equipmentList) { if (config.Bind<bool>("Equipment: " + equipment.EquipmentName, "Enable Equipment?", true, "Should this equipment appear in runs?").Value) { equipmentList.Add(equipment); return true; } return false; } } } namespace SagesHouseholdItems.Items { public abstract class ItemBase<T> : ItemBase where T : ItemBase<T> { public static T instance { get; private set; } public ItemBase() { if (instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting ItemBase was instantiated twice"); } instance = this as T; } } public abstract class ItemBase { public ItemDef ItemDef; public abstract string ItemName { get; } public abstract string ConfigName { get; } public abstract string ItemLangTokenName { get; } public abstract string ItemPickupDesc { get; } public abstract string ItemFullDescription { get; } public abstract string ItemLore { get; } public abstract ItemTier Tier { get; } public virtual ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[0]; public abstract GameObject ItemModel { get; } public abstract Sprite ItemIcon { get; } public virtual bool CanRemove { get; } = true; public virtual bool AIBlacklisted { get; set; } = false; public abstract void Init(ConfigFile config); public virtual void CreateConfig(ConfigFile config) { } protected virtual void CreateLang() { LanguageAPI.Add("ITEM_SAGE_" + ItemLangTokenName + "_NAME", ItemName); LanguageAPI.Add("ITEM_SAGE_" + ItemLangTokenName + "_PICKUP", ItemPickupDesc); LanguageAPI.Add("ITEM_SAGE_" + ItemLangTokenName + "_DESCRIPTION", ItemFullDescription); LanguageAPI.Add("ITEM_SAGE_" + ItemLangTokenName + "_LORE", ItemLore); } public abstract ItemDisplayRuleDict CreateItemDisplayRules(); protected void CreateItem() { //IL_0119: 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_0150: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown if (AIBlacklisted) { ItemTags = new List<ItemTag>(ItemTags) { (ItemTag)4 }.ToArray(); } ItemDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)ItemDef).name = "ITEM_SAGE_" + ItemLangTokenName; ItemDef.nameToken = "ITEM_SAGE_" + ItemLangTokenName + "_NAME"; ItemDef.pickupToken = "ITEM_SAGE_" + ItemLangTokenName + "_PICKUP"; ItemDef.descriptionToken = "ITEM_SAGE_" + ItemLangTokenName + "_DESCRIPTION"; ItemDef.loreToken = "ITEM_SAGE_" + ItemLangTokenName + "_LORE"; ItemDef.pickupModelPrefab = ItemModel; ItemDef.pickupIconSprite = ItemIcon; ItemDef.hidden = false; ItemDef.canRemove = CanRemove; ItemDef.deprecatedTier = Tier; if (ItemTags.Length != 0) { ItemDef.tags = ItemTags; } ItemAPI.Add(new CustomItem(ItemDef, CreateItemDisplayRules())); } public virtual void Hooks() { } public int GetCount(CharacterBody body) { if (!Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)body.inventory)) { return 0; } return body.inventory.GetItemCount(ItemDef); } public int GetCount(CharacterMaster master) { if (!Object.op_Implicit((Object)(object)master) || !Object.op_Implicit((Object)(object)master.inventory)) { return 0; } return master.inventory.GetItemCount(ItemDef); } public int GetCountSpecific(CharacterBody body, ItemDef itemDef) { if (!Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)body.inventory)) { return 0; } return body.inventory.GetItemCount(itemDef); } } } namespace SagesHouseholdItems.Items.Red { public class SagesZippo : ItemBase<SagesZippo> { public ProcType sagesZippoProcType = (ProcType)1982754; public override string ItemName => "Sage's Zippo"; public override string ConfigName => "Sages Zippo"; public override string ItemLangTokenName => "SAGES_ZIPPO"; public override string ItemPickupDesc => "Gain a small chance on hit to incinerate enemies."; public override string ItemFullDescription => "Gain a <style=cIsDamage>10%</style> chance on hit to incinerate enemies for <style=cIsDamage>450%</style> <style=cStack>(+300% per stack)</style> TOTAL damage."; public override string ItemLore => "<style=cMono>//--AUTO-TRANSCRIPTION FROM UES [Redacted] --//</style>\r\n\r\n\"Man, this planet sucks. I haven't slept in days. I can hardly focus on anything with the looming threat of imminent death. Worst of all, it won't stop raining.\"\r\n\r\n\"Want a cigarette?\"\r\n\r\n\"Eh, why not.\"\r\n\r\n\"There's uh, one condition though.\"\r\n\r\n\"Hit me.\"\r\n\r\n\"My lighter is out of fuel. I hope you got a light.\"\r\n\r\n\"Who do you think I am, an amateur? Of course I got a light. Here.\"\r\n\r\n\"Uh... It's out of juice.\"\r\n\r\n[Expletive Redacted]"; public override ItemTier Tier => (ItemTier)2; public override GameObject ItemModel => Main.assetBundle.LoadAsset<GameObject>("Assets/SagesHouseholdItems/SagesZippo/SagesZippoHolder.prefab"); public override Sprite ItemIcon => Main.assetBundle.LoadAsset<Sprite>("Assets/SagesHouseholdItems/SagesZippo/texSagesZippoIcon.png"); public override bool AIBlacklisted => true; public override void Init(ConfigFile config) { CreateConfig(config); CreateLang(); CreateItem(); Hooks(); } public override void CreateConfig(ConfigFile config) { } public override ItemDisplayRuleDict CreateItemDisplayRules() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>()); } public override void Hooks() { GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; } private void GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_0077: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_0106: 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_012f: 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) CharacterBody attackerBody = report.attackerBody; if (!Object.op_Implicit((Object)(object)attackerBody)) { return; } CharacterMaster master = attackerBody.master; if (!Object.op_Implicit((Object)(object)master)) { return; } HealthComponent victim = report.victim; if (!Object.op_Implicit((Object)(object)victim)) { return; } Inventory inventory = attackerBody.inventory; if (!Object.op_Implicit((Object)(object)inventory)) { return; } DamageInfo damageInfo = report.damageInfo; ProcChainMask procChainMask = damageInfo.procChainMask; if (!((ProcChainMask)(ref procChainMask)).HasProc(sagesZippoProcType)) { int count = GetCount(attackerBody); float num = 4.5f + 3f * (float)(count - 1); if (count > 0 && Util.CheckRoll(10f * damageInfo.procCoefficient, master)) { InflictDotInfo val = default(InflictDotInfo); val.attackerObject = ((Component)attackerBody).gameObject; val.victimObject = ((Component)victim).gameObject; val.maxStacksFromAttacker = uint.MaxValue; val.dotIndex = (DotIndex)1; val.totalDamage = damageInfo.damage * num; val.damageMultiplier = 4f; InflictDotInfo val2 = val; StrengthenBurnUtils.CheckDotForUpgrade(inventory, ref val2); DotController.InflictDot(ref val2); ((ProcChainMask)(ref procChainMask)).AddProc(sagesZippoProcType); } } } } } namespace SagesHouseholdItems.Items.Lunar { public class CrackedMirror : ItemBase<CrackedMirror> { public static GameObject bleedVFX; public override string ItemName => "Cracked Mirror"; public override string ConfigName => "Cracked Mirror"; public override string ItemLangTokenName => "CRACKED_MIRROR"; public override string ItemPickupDesc => "Increase your damage... <color=#FF7F7F>BUT take damage when using skills.</color>"; public override string ItemFullDescription => "Increase base damage by <style=cIsDamage>60%</style> <style=cStack>(+60% per stack)</style>. Upon using a skill, take <style=cIsDamage>1.25%</style> <style=cStack>(+1.25% per stack)</style> of your <style=cIsHealing>maximum health</style> as <style=cIsDamage>damage</style> for each <style=cIsUtility>second</style> of the <style=cIsUtility>skill's cooldown</style>."; public override string ItemLore => "Liar. Slaver. Hoarder.\r\n\r\nThese are the truths which will be revealed to you when you gaze upon this mirror.\r\n\r\nYou have taken our gifts and wasted them, dedicated them to your vermin collection.\r\n\r\nSome day, I will add your horrified face to <i>my</i> collection. It will be etched into this mirror, permanently. I will keep it by my side, as a reminder of your failures."; public override ItemTier Tier => (ItemTier)3; public override GameObject ItemModel => Main.assetBundle.LoadAsset<GameObject>("Assets/SagesHouseholdItems/CrackedMirror/CrackedMirrorHolder.prefab"); public override Sprite ItemIcon => Main.assetBundle.LoadAsset<Sprite>("Assets/SagesHouseholdItems/CrackedMirror/texCrackedMirrorIcon.png"); public override void Init(ConfigFile config) { CreateConfig(config); CreateLang(); CreateItem(); Hooks(); } public override void CreateConfig(ConfigFile config) { } public override ItemDisplayRuleDict CreateItemDisplayRules() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>()); } public override void Hooks() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Expected O, but got Unknown //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Expected O, but got Unknown bleedVFX = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Imp/SpurtImpBlood.prefab").WaitForCompletion(), "CrackedMirrorVFX", false); EffectComponent component = bleedVFX.GetComponent<EffectComponent>(); component.applyScale = true; MainModule main = ((Component)bleedVFX.transform.GetChild(0)).GetComponent<ParticleSystem>().main; MinMaxCurve startLifetime = ((MainModule)(ref main)).startLifetime; ((MinMaxCurve)(ref startLifetime)).constantMin = 0.3f; ((MinMaxCurve)(ref startLifetime)).constantMax = 0.5f; MinMaxCurve startSpeed = ((MainModule)(ref main)).startSpeed; ((MinMaxCurve)(ref startSpeed)).constantMin = 5f; ((MinMaxCurve)(ref startSpeed)).constantMax = 10f; ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1; MinMaxCurve startDelay = ((MainModule)(ref main)).startDelay; ((MinMaxCurve)(ref startDelay)).constant = 0.15f; MinMaxCurve startSize = ((MainModule)(ref main)).startSize; ((MinMaxCurve)(ref startSize)).mode = (ParticleSystemCurveMode)0; ((MinMaxCurve)(ref startSize)).constant = 1f; MinMaxGradient startColor = ((MainModule)(ref main)).startColor; ((MinMaxGradient)(ref startColor)).color = Color32.op_Implicit(new Color32((byte)109, (byte)23, (byte)20, (byte)180)); ContentAddition.AddEffect(bleedVFX); RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); CharacterBody.OnSkillActivated += new hook_OnSkillActivated(CharacterBody_OnSkillActivated); } private void CharacterBody_OnSkillActivated(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_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) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: 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_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Expected O, but got Unknown HealthComponent healthComponent = self.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent)) { int count = GetCount(self); if (count > 0 && skill.cooldownRemaining > 0f && skill.skillDef.skillNameToken != "MAGE_UTILITY_ICE_NAME") { DamageInfo val = new DamageInfo { attacker = ((Component)self).gameObject, crit = false, damage = healthComponent.fullCombinedHealth * 0.025f * (float)count * skill.baseRechargeInterval, damageColorIndex = (DamageColorIndex)8, force = Vector3.zero, inflictor = ((Component)self).gameObject, procCoefficient = 0f, procChainMask = default(ProcChainMask), position = ((Component)self).gameObject.transform.position, damageType = DamageTypeCombo.op_Implicit((DamageType)2) }; healthComponent.TakeDamage(val); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(Random.Range(-1f, 1f), Random.Range(-0.5f, 0.5f), Random.Range(-1f, 1f)); EffectManager.SpawnEffect(bleedVFX, new EffectData { origin = ((Component)self).gameObject.transform.position + val2, scale = Mathf.Sqrt(skill.baseRechargeInterval * 0.5f) }, true); } } orig.Invoke(self, skill); } private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (Object.op_Implicit((Object)(object)sender)) { int count = GetCount(sender); if (count > 0) { args.damageMultAdd += 0.6f * (float)count; } } } } } namespace SagesHouseholdItems.Equipment { public abstract class EquipmentBase<T> : EquipmentBase where T : EquipmentBase<T> { public static T instance { get; private set; } public EquipmentBase() { if (instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting EquipmentBoilerplate/Equipment was instantiated twice"); } instance = this as T; } } public abstract class EquipmentBase { public EquipmentDef EquipmentDef; public abstract string EquipmentName { get; } public abstract string EquipmentLangTokenName { get; } public abstract string EquipmentPickupDesc { get; } public abstract string EquipmentFullDescription { get; } public abstract string EquipmentLore { get; } public abstract GameObject EquipmentModel { get; } public abstract Sprite EquipmentIcon { get; } public virtual bool AppearsInSinglePlayer { get; } = true; public virtual bool AppearsInMultiPlayer { get; } = true; public virtual bool CanDrop { get; } = true; public virtual float Cooldown { get; } = 60f; public virtual bool EnigmaCompatible { get; } = true; public virtual bool IsBoss { get; } = false; public virtual bool IsLunar { get; } = false; public abstract ItemDisplayRuleDict CreateItemDisplayRules(); public abstract void Init(ConfigFile config); protected virtual void CreateConfig(ConfigFile config) { } protected virtual void CreateLang() { LanguageAPI.Add("EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_NAME", EquipmentName); LanguageAPI.Add("EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_PICKUP", EquipmentPickupDesc); LanguageAPI.Add("EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_DESCRIPTION", EquipmentFullDescription); LanguageAPI.Add("EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_LORE", EquipmentLore); } protected void CreateEquipment() { //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Expected O, but got Unknown EquipmentDef = ScriptableObject.CreateInstance<EquipmentDef>(); ((Object)EquipmentDef).name = "EQUIPMENT_SAGE_" + EquipmentLangTokenName; EquipmentDef.nameToken = "EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_NAME"; EquipmentDef.pickupToken = "EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_PICKUP"; EquipmentDef.descriptionToken = "EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_DESCRIPTION"; EquipmentDef.loreToken = "EQUIPMENT_SAGE_" + EquipmentLangTokenName + "_LORE"; EquipmentDef.pickupModelPrefab = EquipmentModel; EquipmentDef.pickupIconSprite = EquipmentIcon; EquipmentDef.appearsInSinglePlayer = AppearsInSinglePlayer; EquipmentDef.appearsInMultiPlayer = AppearsInMultiPlayer; EquipmentDef.canDrop = CanDrop; EquipmentDef.cooldown = Cooldown; EquipmentDef.enigmaCompatible = EnigmaCompatible; EquipmentDef.isBoss = IsBoss; EquipmentDef.isLunar = IsLunar; ItemAPI.Add(new CustomEquipment(EquipmentDef, CreateItemDisplayRules())); EquipmentSlot.PerformEquipmentAction += new hook_PerformEquipmentAction(PerformEquipmentAction); } private bool PerformEquipmentAction(orig_PerformEquipmentAction orig, EquipmentSlot self, EquipmentDef equipmentDef) { if ((Object)(object)equipmentDef == (Object)(object)EquipmentDef) { return ActivateEquipment(self); } return orig.Invoke(self, equipmentDef); } protected abstract bool ActivateEquipment(EquipmentSlot slot); public virtual void Hooks() { } } } namespace SagesHouseholdItems.Equipment.Standard { public class MysteriousRemote : EquipmentBase { public class MuteController : NetworkBehaviour { public float duration = 10f; public float force; public CharacterBody body; public float mass; public Rigidbody rigidBody; public CharacterMotor characterMotor; public DamageInfo damageInfo; public float timer = 0f; public SkillLocator skillLocator; public void Start() { //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Expected O, but got Unknown body = ((Component)this).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)body.characterMotor)) { characterMotor = body.characterMotor; mass = characterMotor.mass; } else if (Object.op_Implicit((Object)(object)body.rigidbody)) { rigidBody = body.rigidbody; mass = rigidBody.mass; } skillLocator = body.skillLocator; if (Object.op_Implicit((Object)(object)skillLocator.secondary)) { skillLocator.secondary.SetSkillOverride((object)body, uselessSkillDef, (SkillOverridePriority)3); } if (Object.op_Implicit((Object)(object)skillLocator.utility)) { skillLocator.utility.SetSkillOverride((object)body, uselessSkillDef, (SkillOverridePriority)3); } if (Object.op_Implicit((Object)(object)skillLocator.special)) { skillLocator.special.SetSkillOverride((object)body, uselessSkillDef, (SkillOverridePriority)3); } if (mass < 50f) { mass = 50f; } force = 50f * mass; damageInfo = new DamageInfo { attacker = null, inflictor = null, damage = 1f, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), crit = false, dotIndex = (DotIndex)(-1), force = Vector3.down * force * Time.fixedDeltaTime, position = ((Component)this).transform.position, procChainMask = default(ProcChainMask), procCoefficient = 0f }; } public void Ground() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_0085: 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_009b: Expected O, but got Unknown if (NetworkServer.active) { damageInfo = new DamageInfo { attacker = null, inflictor = null, damage = 0f, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), crit = false, dotIndex = (DotIndex)(-1), force = Vector3.down * force * Time.fixedDeltaTime, position = ((Component)this).transform.position, procChainMask = default(ProcChainMask), procCoefficient = 0f }; if (Object.op_Implicit((Object)(object)characterMotor)) { body.healthComponent.TakeDamageForce(damageInfo, false, false); } else if (Object.op_Implicit((Object)(object)rigidBody)) { body.healthComponent.TakeDamageForce(damageInfo, false, false); } } } public void FixedUpdate() { timer += Time.fixedDeltaTime; if (timer >= duration) { Object.Destroy((Object)(object)this); } else { Ground(); } } public void Refresh() { timer = 0f; } public void OnDestroy() { if (Object.op_Implicit((Object)(object)skillLocator.secondary)) { skillLocator.secondary.UnsetSkillOverride((object)body, uselessSkillDef, (SkillOverridePriority)3); } if (Object.op_Implicit((Object)(object)skillLocator.utility)) { skillLocator.utility.UnsetSkillOverride((object)body, uselessSkillDef, (SkillOverridePriority)3); } if (Object.op_Implicit((Object)(object)skillLocator.special)) { skillLocator.special.UnsetSkillOverride((object)body, uselessSkillDef, (SkillOverridePriority)3); } } } public static readonly SphereSearch muteSphereSearch = new SphereSearch(); public static readonly List<HurtBox> muteHurtBoxBuffer = new List<HurtBox>(); public static BuffDef muteBuff; public static SkillDef uselessSkillDef = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Captain/CaptainSkillDisconnected.asset").WaitForCompletion(); public static GameObject muteVFX; public override string EquipmentName => "Mysterious Remote"; public override string EquipmentLangTokenName => "MYSTERIOUS_REMOTE"; public override string EquipmentPickupDesc => "Silence and force nearby enemies to the ground."; public override string EquipmentFullDescription => "<style=cIsUtility>Silence</style> enemies within a <style=cIsUtility>24m</style> radius, <style=cIsUtility>disabling their non-primary skills</style> and <style=cIsUtility>forcing them to the ground</style> for <style=cIsUtility>12s</style>."; public override string EquipmentLore => "<style=cMono>//--AUTO-TRANSCRIPTION FROM ROOM 5012A OF UES [Redacted]--//</style>\r\n\r\n\"Look at this.\"\r\n\r\n\"What is that, the remote to your [Redacted]?\"\r\n\r\n\"Heh. No. I don't know what it is, actually. We found it on the planet.\"\r\n\r\n\"Press a button, see what it does.\"\r\n\r\n\"Sure, what's the worst that could happen.\"\r\n\r\n...\r\n\r\n\"Nothing happened.\"\r\n\r\n...\r\n\r\n\"Dude? You good?\"\r\n\r\n...\r\n\r\n\"Are you...?\"\r\n\r\n...\r\n\r\n\"Hahaha! That's mint! Maybe I'll keep you like this so I don't have to hear any more of your [Expletive Redacted] jokes.\"\r\n\r\n..."; public override float Cooldown => 30f; public override GameObject EquipmentModel => Main.assetBundle.LoadAsset<GameObject>("Assets/SagesHouseholdItems/MysteriousRemote/MysteriousRemoteHolder.prefab"); public override Sprite EquipmentIcon => Main.assetBundle.LoadAsset<Sprite>("Assets/SagesHouseholdItems/MysteriousRemote/texMysteriousRemoteIcon.png"); public override void Init(ConfigFile config) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: 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_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Expected O, but got Unknown //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: 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) CreateConfig(config); CreateLang(); CreateEquipment(); Hooks(); muteBuff = ScriptableObject.CreateInstance<BuffDef>(); muteBuff.canStack = false; muteBuff.isDebuff = true; muteBuff.isCooldown = true; muteBuff.isHidden = false; muteBuff.buffColor = Color32.op_Implicit(new Color32((byte)220, (byte)220, (byte)220, byte.MaxValue)); muteBuff.iconSprite = Main.assetBundle.LoadAsset<Sprite>("Assets/SagesHouseholdItems/texBuffMuted.png"); ContentAddition.AddBuffDef(muteBuff); muteVFX = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/IgniteOnKill/IgniteExplosionVFX.prefab").WaitForCompletion(), "MysteriousRemoteVFX", false); MainModule main = muteVFX.GetComponent<ParticleSystem>().main; MinMaxGradient startColor = ((MainModule)(ref main)).startColor; ((MinMaxGradient)(ref startColor)).color = Color32.op_Implicit(new Color32((byte)140, (byte)140, (byte)140, byte.MaxValue)); Transform transform = muteVFX.transform; ParticleSystemRenderer component = ((Component)transform.GetChild(0)).GetComponent<ParticleSystemRenderer>(); Material val = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/IgniteOnKill/matOmniHitspark3Gasoline.mat").WaitForCompletion()); val.SetTexture("_RemapTex", (Texture)(object)Main.assetBundle.LoadAsset<Texture2D>("Assets/SagesHouseholdItems/texRampGray.png")); ((Renderer)component).material = val; Light component2 = ((Component)transform.GetChild(1)).GetComponent<Light>(); component2.color = Color32.op_Implicit(new Color32((byte)120, (byte)120, (byte)120, byte.MaxValue)); ColorOverLifetimeModule colorOverLifetime = ((Component)transform.GetChild(2)).GetComponent<ParticleSystem>().colorOverLifetime; Gradient val2 = new Gradient(); val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(Color32.op_Implicit(new Color32((byte)150, (byte)150, (byte)150, byte.MaxValue)), 0f), new GradientColorKey(Color32.op_Implicit(new Color32((byte)120, (byte)120, (byte)120, byte.MaxValue)), 0.424f), new GradientColorKey(Color.black, 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(0f, 1f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val2); ContentAddition.AddEffect(muteVFX); } public override void Hooks() { } protected override void CreateConfig(ConfigFile config) { } public override ItemDisplayRuleDict CreateItemDisplayRules() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>()); } protected override bool ActivateEquipment(EquipmentSlot slot) { //IL_001a: 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) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: 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_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Expected O, but got Unknown //IL_003f: 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) //IL_004b: 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_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_00fa: Unknown result type (might be due to invalid IL or missing references) muteSphereSearch.radius = 24f; muteSphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; CharacterBody characterBody = slot.characterBody; if (Object.op_Implicit((Object)(object)characterBody)) { TeamIndex teamIndex = characterBody.teamComponent.teamIndex; muteSphereSearch.origin = characterBody.corePosition; muteSphereSearch.RefreshCandidates(); muteSphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); muteSphereSearch.OrderCandidatesByDistance(); muteSphereSearch.GetHurtBoxes(muteHurtBoxBuffer); muteSphereSearch.ClearCandidates(); for (int i = 0; i < muteHurtBoxBuffer.Count; i++) { HurtBox val = muteHurtBoxBuffer[i]; HealthComponent healthComponent = val.healthComponent; if (!Object.op_Implicit((Object)(object)healthComponent)) { continue; } CharacterBody body = healthComponent.body; TeamIndex teamIndex2 = body.teamComponent.teamIndex; if (Object.op_Implicit((Object)(object)body) && teamIndex2 != teamIndex) { body.AddTimedBuffAuthority(muteBuff.buffIndex, 10f); if ((Object)(object)((Component)body).GetComponent<MuteController>() == (Object)null) { ((Component)body).gameObject.AddComponent<MuteController>(); } else { ((Component)body).GetComponent<MuteController>().Refresh(); } } } } Util.PlaySound("Play_nullifier_impact", ((Component)slot).gameObject); EffectManager.SpawnEffect(muteVFX, new EffectData { origin = characterBody.corePosition, scale = 18f }, true); muteHurtBoxBuffer.Clear(); return true; } } }