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 FlowareItemPack v1.2.5
FlowareItemPack.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using FlowareItemPack.Core; using FlowareItemPack.Items; using HarmonyLib; using Microsoft.CodeAnalysis; using On.RoR2; using On.RoR2.Items; using R2API; using RoR2; using RoR2.ExpansionManagement; 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("FlowareItemPack")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+7eca0c795921cd54507f416cd400a09b80595979")] [assembly: AssemblyProduct("FlowareItemPack")] [assembly: AssemblyTitle("FlowareItemPack")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public abstract class BaseItem { public abstract ItemDef ItemDef { get; } public abstract void Initialize(); public virtual void Hook() { } public virtual void Unhook() { } } namespace FlowareItemPack { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Floware.FlowareItemPack", "FlowareItemPack", "1.2.5")] public class FlowareItemPack : BaseUnityPlugin { public const string PluginGUID = "Floware.FlowareItemPack"; public const string PluginAuthor = "Floware"; public const string PluginName = "FlowareItemPack"; public const string PluginVersion = "1.2.5"; private readonly List<BaseItem> _items = new List<BaseItem>(); public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); _items.Add(new BoxOMatches()); _items.Add(new DisperseObsidian()); foreach (BaseItem item in _items) { item.Initialize(); Debug.Log((object)("Initializing " + ((Object)item.ItemDef).name)); } } private void OnDestroy() { foreach (BaseItem item in _items) { item.Unhook(); } } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } } namespace FlowareItemPack.Items { public class PlaceHolderVoid : BaseItem { public override ItemDef ItemDef { get; } = ScriptableObject.CreateInstance<ItemDef>(); public override void Initialize() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: 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_0125: Expected O, but got Unknown //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Expected O, but got Unknown //IL_0164: 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) Assets assets = new Assets(); assets.PopulateAssets("matches", "matches"); ((Object)ItemDef).name = "void_matches"; ItemDef.nameToken = "FLOWARE_VOIDMATCHES_NAME"; ItemDef.pickupToken = "FLOWARE_VOIDMATCHES_PICKUP"; ItemDef.descriptionToken = "FLOWARE_VOIDMATCHES_DESC"; ItemDef.loreToken = "FLOWARE_VOIDMATCHES_LORE"; LanguageAPI.Add("FLOWARE_VOIDMATCHES_NAME", ""); LanguageAPI.Add("FLOWARE_VOIDMATCHES_PICKUP", ""); LanguageAPI.Add("FLOWARE_VOIDMATCHES_DESC", ""); LanguageAPI.Add("FLOWARE_VOIDMATCHES_LORE", ""); ItemDef.tier = (ItemTier)6; ItemDef._itemTierDef = Addressables.LoadAssetAsync<ItemTierDef>((object)"RoR2/DLC1/Common/VoidTier1Def.asset").WaitForCompletion(); ItemDef.pickupIconSprite = assets.icon; ItemDef.pickupModelPrefab = assets.prefab; ItemDef.tags = (ItemTag[])(object)new ItemTag[0]; ItemDef.canRemove = true; ItemDef.hidden = false; ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null); ItemAPI.Add(new CustomItem(ItemDef, val)); if (((ResourceAvailability)(ref ItemTierCatalog.availability)).available) { ItemTierDef itemTierDef = ItemTierCatalog.GetItemTierDef((ItemTier)6); if ((Object)(object)itemTierDef != (Object)null) { itemTierDef.dropletDisplayPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Common/VoidItemPickup.prefab").WaitForCompletion(); } } Hook(); } public override void Hook() { } public override void Unhook() { } private void OnServerDamageDealt(DamageReport report) { } } public class BoxOMatches : BaseItem { public override ItemDef ItemDef { get; } = ScriptableObject.CreateInstance<ItemDef>(); public override void Initialize() { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Expected O, but got Unknown Assets assets = new Assets(); assets.PopulateAssets("matches", "matches"); ((Object)ItemDef).name = "Matches"; ItemDef.nameToken = "FLOWARE_MATCHES_NAME"; ItemDef.pickupToken = "FLOWARE_MATCHES_PICKUP"; ItemDef.descriptionToken = "FLOWARE_MATCHES_DESC"; ItemDef.loreToken = "FLOWARE_MATCHES_LORE"; LanguageAPI.Add("FLOWARE_MATCHES_NAME", "Box O' Matches"); LanguageAPI.Add("FLOWARE_MATCHES_PICKUP", "Light em' up, break em' down."); LanguageAPI.Add("FLOWARE_MATCHES_DESC", "5% chance (+5% per stack) to set enemies on fire for 2 seconds (+0.5s per stack), dealing 10% base damage."); LanguageAPI.Add("FLOWARE_MATCHES_LORE", "An old, half-empty box of matches. Each one a spark waiting to ignite chaos."); ItemDef._itemTierDef = Addressables.LoadAssetAsync<ItemTierDef>((object)"RoR2/Base/Common/Tier1Def.asset").WaitForCompletion(); ItemDef.pickupIconSprite = assets.icon; ItemDef.pickupModelPrefab = assets.prefab; ItemDef.tags = (ItemTag[])(object)new ItemTag[2] { (ItemTag)1, (ItemTag)21 }; ItemDef.canRemove = true; ItemDef.hidden = false; ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null); ItemAPI.Add(new CustomItem(ItemDef, val)); Hook(); } public override void Hook() { GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; } public override void Unhook() { GlobalEventManager.onServerDamageDealt -= GlobalEventManager_onServerDamageDealt; } private void GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_0031: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0099: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Invalid comparison between Unknown and I4 //IL_013a: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)report.attackerBody) || !Object.op_Implicit((Object)(object)report.victimBody) || DamageTypeCombo.op_Implicit(report.damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)67108864)) != 0) { return; } CharacterBody attackerBody = report.attackerBody; Inventory inventory = attackerBody.inventory; if (!Object.op_Implicit((Object)(object)inventory)) { return; } int itemCount = inventory.GetItemCount(ItemDef.itemIndex); CharacterBody victimBody = report.victimBody; ItemDef itemDef = ItemCatalog.GetItemDef(ItemCatalog.FindItemIndex("StrengthenBurn")); if (itemCount > 0 && Util.CheckRoll(5f * (float)itemCount, attackerBody.master)) { float num = 2f * (float)itemCount; float num2 = report.attackerBody.baseDamage * 0.1f; int itemCount2 = inventory.GetItemCount(itemDef.itemIndex); DotIndex val = (DotIndex)((itemCount2 <= 0) ? 1 : 7); DotController val2 = DotController.FindDotController(((Component)victimBody).gameObject); if ((int)val == 7) { num2 *= (float)(4 * itemCount2); } DotController.InflictDot(((Component)report.victimBody).gameObject, ((Component)report.attackerBody).gameObject, val, num, num2, (uint?)null); } } } internal class DisperseObsidian : BaseItem { private GameObject effect; private GameObject effect2; public override ItemDef ItemDef { get; } = ScriptableObject.CreateInstance<ItemDef>(); public override void Initialize() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: 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_0133: Expected O, but got Unknown //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Expected O, but got Unknown Assets assets = new Assets(); assets.PopulateAssets("disperseobsidian", "disperseobsidian"); ((Object)ItemDef).name = "disperse_obsidian"; ItemDef.nameToken = "FLOWARE_DISPERSEOBSIDIAN_NAME"; ItemDef.pickupToken = "FLOWARE_DISPERSEOBSIDIAN_PICKUP"; ItemDef.descriptionToken = "FLOWARE_DISPERSEOBSIDIAN_DESC"; ItemDef.loreToken = "FLOWARE_DISPERSEOBSIDIAN_LORE"; LanguageAPI.Add("FLOWARE_DISPERSEOBSIDIAN_NAME", "Disperse Obsidian"); LanguageAPI.Add("FLOWARE_DISPERSEOBSIDIAN_PICKUP", "Deal bonus damage to enemies at long distance. <color=#ed7fcd>Corrupts all Focus Crystals </color>"); LanguageAPI.Add("FLOWARE_DISPERSEOBSIDIAN_DESC", "Grants a damage boost against enemies further away. Displays a pulsating effect around the player. <color=#ed7fcd>Corrupts all Focus Crystals </color>"); LanguageAPI.Add("FLOWARE_DISPERSEOBSIDIAN_LORE", "A shard that resonates with the distant echoes of battle."); ItemDef.tier = (ItemTier)6; ItemDef._itemTierDef = Addressables.LoadAssetAsync<ItemTierDef>((object)"RoR2/DLC1/Common/VoidTier1Def.asset").WaitForCompletion(); ItemDef.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 }; ItemDef.pickupIconSprite = assets.icon; ItemDef.pickupModelPrefab = assets.prefab; ItemDef.canRemove = true; ItemDef.hidden = false; ItemAPI.Add(new CustomItem(ItemDef, new ItemDisplayRuleDict((ItemDisplayRule[])null))); Hook(); } public override void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown CharacterMaster.OnInventoryChanged += new hook_OnInventoryChanged(OnInventoryChanged); HealthComponent.TakeDamage += new hook_TakeDamage(OnDamageDealt); ContagiousItemManager.Init += new hook_Init(SetTransformation); } public override void Unhook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown CharacterMaster.OnInventoryChanged -= new hook_OnInventoryChanged(OnInventoryChanged); HealthComponent.TakeDamage -= new hook_TakeDamage(OnDamageDealt); ContagiousItemManager.Init -= new hook_Init(SetTransformation); } private unsafe void SetTransformation(orig_Init orig) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) ExpansionDef requiredExpansion = (ExpansionDef)Unsafe.Read<object>((void*)ExpansionCatalog.expansionDefs[0]); ItemDef.requiredExpansion = requiredExpansion; Pair val = default(Pair); val.itemDef1 = Items.NearbyDamageBonus; val.itemDef2 = ItemDef; Pair val2 = val; ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = CollectionExtensions.AddToArray<Pair>(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem], val2); orig.Invoke(); } private void OnInventoryChanged(orig_OnInventoryChanged orig, CharacterMaster self) { //IL_0055: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)self.inventory)) { return; } CharacterBody body = self.GetBody(); if (Object.op_Implicit((Object)(object)body) && body.isPlayerControlled) { int itemCount = self.inventory.GetItemCount(ItemDef.itemIndex); if (itemCount > 0) { Debug.Log((object)"DEBUG: Item added, creating effect."); InstantiateEffect(body); } else { Debug.Log((object)"DEBUG: Item removed, destroying effect."); DestroyEffect(); } } } private void InstantiateEffect(CharacterBody self) { //IL_0042: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Attempting to load NearbyDamageBonusIndicator from LegacyResourcesAPI."); GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/NearbyDamageBonusIndicator"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"Failed to load NearbyDamageBonusIndicator."); return; } Debug.Log((object)"Prefab loaded successfully. Instantiating..."); GameObject val2 = Object.Instantiate<GameObject>(val, self.corePosition, Quaternion.identity); if ((Object)(object)val2 == (Object)null) { Debug.LogError((object)"Failed to instantiate NearbyDamageBonusIndicator."); return; } NetworkIdentity val3 = default(NetworkIdentity); if (!val2.TryGetComponent<NetworkIdentity>(ref val3)) { val3 = val2.AddComponent<NetworkIdentity>(); Debug.LogWarning((object)"Added NetworkIdentity to spawnedObject."); } Debug.Log((object)"Attaching NetworkedBodyAttachment."); float num = 2.3f; Transform transform = val2.transform; transform.localScale *= num; MeshRenderer componentInChildren = val2.GetComponentInChildren<MeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { ((Renderer)componentInChildren).material.color = Color.green; Debug.Log((object)"Ring color changed to purple."); } else { Debug.LogError((object)"No MeshRenderer found in NearbyDamageBonusIndicator."); } NetworkedBodyAttachment component = val2.GetComponent<NetworkedBodyAttachment>(); if ((Object)(object)component == (Object)null) { Debug.LogError((object)"NearbyDamageBonusIndicator is missing NetworkedBodyAttachment."); return; } Debug.LogError((object)"No Renderer found on NearbyDamageBonusIndicator."); val2.transform.SetParent(self.transform, true); component.AttachToGameObjectAndSpawn(((Component)self).gameObject, (string)null); effect = val2; } private void DestroyEffect() { if ((Object)(object)effect != (Object)null) { Object.Destroy((Object)(object)effect); effect = null; Object.Destroy((Object)(object)effect2); } } private void OnDamageDealt(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0091: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { orig.Invoke(self, damageInfo); return; } if ((Object)(object)damageInfo.attacker == (Object)null) { orig.Invoke(self, damageInfo); return; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if ((Object)(object)component == (Object)null) { orig.Invoke(self, damageInfo); return; } Inventory inventory = component.inventory; if ((Object)(object)inventory == (Object)null) { orig.Invoke(self, damageInfo); return; } int itemCount = inventory.GetItemCount(ItemDef.itemIndex); if (itemCount <= 0) { orig.Invoke(self, damageInfo); return; } float num = Vector3.Distance(component.transform.position, ((Component)self).transform.position); if (num > 29.9f) { damageInfo.damage *= 1f + 0.2f * (float)itemCount; damageInfo.damageColorIndex = (DamageColorIndex)9; } orig.Invoke(self, damageInfo); } } } namespace FlowareItemPack.Core { public class Assets { public Sprite icon; public GameObject prefab; public static AssetBundle _assetBundle; public void PopulateAssets(string iconName, string prefabName) { if ((Object)(object)_assetBundle == (Object)null) { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("FlowareItemPack.import"); _assetBundle = AssetBundle.LoadFromStream(stream); } icon = _assetBundle.LoadAsset<Sprite>("assets/import/icons/" + iconName + ".png"); prefab = _assetBundle.LoadAsset<GameObject>("assets/import/prefabs/" + prefabName + ".prefab"); } } }