Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of artifact of dueling v0.9.2
PowerMultiply.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using DevTools; using On.RoR2; using PowerMultiply.Artifacts; using PowerMultiply.Assets; using R2API; using RoR2; using RoR2.Artifacts; using UnityEngine; [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("PowerMultiply")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("PowerMultiply")] [assembly: AssemblyTitle("PowerMultiply")] [assembly: AssemblyVersion("1.0.0.0")] namespace DevTools { public static class Devtools { private static Transform GetCharacterLocation() { return PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform; } private static void DropLunarCoin() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) Transform characterLocation = GetCharacterLocation(); PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(MiscPickups.LunarCoin.miscPickupIndex), characterLocation.position, characterLocation.forward * 20f); } private static void SpawnFriendlyDoppleganger() { //IL_0023: 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_0039: 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_0044: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //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_008d: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) CharacterMaster master = PlayerCharacterMasterController.instances[0].master; MasterCopySpawnCard val = MasterCopySpawnCard.FromMaster(master, true, true, (Action<CharacterMaster>)null); ((SpawnCard)val).DoSpawn(((Component)master).transform.position, Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up), new DirectorSpawnRequest((SpawnCard)(object)val, new DirectorPlacementRule { placementMode = (PlacementMode)3, minDistance = 3f, maxDistance = 20f, spawnOnTarget = ((Component)master).transform }, Run.instance.treasureRng) { teamIndexOverride = (TeamIndex)1 }); } private static void SpawnEnemyDoppleganger() { //IL_0023: 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_0039: 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_0044: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //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_008d: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) CharacterMaster master = PlayerCharacterMasterController.instances[0].master; MasterCopySpawnCard val = MasterCopySpawnCard.FromMaster(master, true, true, (Action<CharacterMaster>)null); ((SpawnCard)val).DoSpawn(((Component)master).transform.position, Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up), new DirectorSpawnRequest((SpawnCard)(object)val, new DirectorPlacementRule { placementMode = (PlacementMode)4, minDistance = 3f, maxDistance = 20f, spawnOnTarget = ((Component)master).transform }, Run.instance.treasureRng) { teamIndexOverride = (TeamIndex)2 }); } public static void SpawnCommandPickup() { //IL_0029: 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_0035: 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_0045: Unknown result type (might be due to invalid IL or missing references) Transform transform = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform; PickupDef val = CommandArtifactManager.myArtifact.CreatePickupDef(); val.itemTier = (ItemTier)0; PickupDropletController.CreatePickupDroplet(val.pickupIndex, transform.position, transform.forward * 20f); } public static void onUpdate(ManualLogSource logger) { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown((KeyCode)285)) { DropLunarCoin(); } if (Input.GetKeyDown((KeyCode)286)) { SpawnFriendlyDoppleganger(); } if (Input.GetKeyDown((KeyCode)287)) { SpawnEnemyDoppleganger(); } if (Input.GetKeyDown((KeyCode)288)) { SpawnCommandPickup(); } if (Input.GetKeyDown((KeyCode)289)) { } if (Input.GetKeyDown((KeyCode)283)) { Transform transform = PlayerCharacterMasterController.instances[0].master.GetBodyObject().transform; logger.LogInfo((object)$"Player pressed F2. Spawning our custom item at coordinates {transform.position}"); } } } } namespace PowerMultiply { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Isaac_Cummings.PowerMultiply", "PowerMultiply", "0.9")] public class PowerMultiply : BaseUnityPlugin { public const string PluginGUID = "Isaac_Cummings.PowerMultiply"; public const string PluginAuthor = "Isaac_Cummings"; public const string PluginName = "PowerMultiply"; public const string PluginVersion = "0.9"; public List<ArtifactBase> Artifacts = new List<ArtifactBase>(); public static PluginInfo PInfo { get; private set; } public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); ((BaseUnityPlugin)this).Logger.LogDebug((object)"Mod Awake! 2"); PInfo = ((BaseUnityPlugin)this).Info; Asset.Init(); ArtifactOfDeuling item = new ArtifactOfDeuling(); Artifacts.Add(item); } private void Update() { Devtools.onUpdate(((BaseUnityPlugin)this).Logger); } } } namespace PowerMultiply.Utilities { internal class ROR2 { public static float InverseHyperbolicScaling(float baseValue, float additionalValue, float maxValue, int itemCount) { return baseValue + (maxValue - baseValue) * (1f - 1f / (1f + additionalValue * (float)(itemCount - 1))); } } } namespace PowerMultiply.Extensions { public static class GameObjectExtensions { public static void LogAllComponents(this GameObject gameObject) { object[] components = gameObject.GetComponents<object>(); object[] array = components; foreach (object obj in array) { Log.Debug(obj.ToString()); } } } } namespace PowerMultiply.Assets { public static class Asset { public static AssetBundle mainBundle; public const string bundleName = "sword"; public const string assetBundleFolder = "AssetBundles"; public static string AssetBundlePath => Path.Combine(Path.GetDirectoryName(PowerMultiply.PInfo.Location), "AssetBundles", "sword"); public static void Init() { mainBundle = AssetBundle.LoadFromFile(AssetBundlePath); } } } namespace PowerMultiply.Artifacts { public abstract class ArtifactBase { public ArtifactDef ArtifactDef; public abstract string ArtifactName { get; } public abstract string ArtifactLangTokenName { get; } public abstract string ArtifactDescription { get; } public abstract Sprite ArtifactEnabledIcon { get; } public abstract Sprite ArtifactDisabledIcon { get; } public bool ArtifactEnabled => RunArtifactManager.instance.IsArtifactEnabled(ArtifactDef); public abstract void Init(); protected void CreateLang() { LanguageAPI.Add("ARTIFACT_" + ArtifactLangTokenName + "_NAME", ArtifactName); LanguageAPI.Add("ARTIFACT_" + ArtifactLangTokenName + "_DESCRIPTION", ArtifactDescription); } protected void CreateArtifact() { ArtifactDef = ScriptableObject.CreateInstance<ArtifactDef>(); ArtifactDef.cachedName = "ARTIFACT_" + ArtifactLangTokenName; ArtifactDef.nameToken = "ARTIFACT_" + ArtifactLangTokenName + "_NAME"; ArtifactDef.descriptionToken = "ARTIFACT_" + ArtifactLangTokenName + "_DESCRIPTION"; ArtifactDef.smallIconSelectedSprite = ArtifactEnabledIcon; ArtifactDef.smallIconDeselectedSprite = ArtifactDisabledIcon; ContentAddition.AddArtifactDef(ArtifactDef); Init(); } public abstract void Hooks(); } public class ArtifactOfDeuling : ArtifactBase { public override string ArtifactName => "Artifact Of Dueling"; public override string ArtifactLangTokenName => "ARTIFACT_OF_DUELING"; public override string ArtifactDescription => "Winner takes all"; public override Sprite ArtifactEnabledIcon => Asset.mainBundle.LoadAsset<Sprite>("sword"); public override Sprite ArtifactDisabledIcon => Asset.mainBundle.LoadAsset<Sprite>("sword"); public ArtifactOfDeuling() { CreateArtifact(); } public override void Hooks() { } public override void Init() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown Log.Debug("Artifact initialized"); CharacterDeathBehavior.OnDeath += new hook_OnDeath(OnDeath); SpawnCard.DoSpawn += new hook_DoSpawn(DoSpawn); } private SpawnResult DoSpawn(orig_DoSpawn orig, SpawnCard self, Vector3 position, Quaternion rotation, DirectorSpawnRequest spawnRequest) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_001c: 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_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0215: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0218: 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_0067: 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_00b3: Unknown result type (might be due to invalid IL or missing references) SpawnResult val = orig.Invoke(self, position, rotation, spawnRequest); if (!base.ArtifactEnabled) { return val; } if (val.success) { Inventory component = val.spawnedInstance.GetComponent<Inventory>(); CharacterMaster component2 = val.spawnedInstance.GetComponent<CharacterMaster>(); if ((Object)(object)component == (Object)null || (Object)(object)component2 == (Object)null) { return val; } uint teamLevel = TeamManager.instance.GetTeamLevel(component2.teamIndex); float num = Util.Hyperbolic((float)teamLevel); Log.Debug(num); if (Util.CheckRoll(30f, component2)) { IEnumerable<ItemDef> source = ((IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs).Where((ItemDef item) => item.tags.Any((ItemTag tag) => (int)tag == 3 || (int)tag == 1 || (int)tag == 2)); ItemDef[] array = source.Where((ItemDef item) => (int)item.tier == 0).ToArray(); ItemDef[] array2 = source.Where((ItemDef item) => (int)item.tier == 1).ToArray(); ItemDef[] array3 = source.Where((ItemDef item) => (int)item.tier == 2).ToArray(); double num2 = Math.Ceiling(Random.Range(num / 100f, num)); Debug.Log((object)("Giving " + num2 + " Items")); for (int i = 0; (double)i <= num2; i++) { int num3 = Random.Range(0, 100); ItemDef[] array4 = ((num3 > 98) ? array3 : ((num3 > 80) ? array2 : array)); int num4 = Random.Range(0, array4.Length - 1); Log.Debug("Gave " + ((Object)array4[num4]).name); component.GiveItem(array4[num4], 1); } } } return val; } private void OnDeath(orig_OnDeath orig, CharacterDeathBehavior self) { //IL_00ed: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) if (!base.ArtifactEnabled) { orig.Invoke(self); return; } Log.Debug("OnDeath"); CharacterBody characterBody = self.deathStateMachine.commonComponents.characterBody; GameObject lastHitAttacker = characterBody.healthComponent.lastHitAttacker; CharacterBody val = ((lastHitAttacker != null) ? lastHitAttacker.GetComponent<CharacterBody>() : null); int num = characterBody.inventory.GetTotalItemCountOfTier((ItemTier)0) + characterBody.inventory.GetTotalItemCountOfTier((ItemTier)1) + characterBody.inventory.GetTotalItemCountOfTier((ItemTier)2) + characterBody.inventory.GetTotalItemCountOfTier((ItemTier)6) + characterBody.inventory.GetTotalItemCountOfTier((ItemTier)7) + characterBody.inventory.GetTotalItemCountOfTier((ItemTier)8); if ((Object)(object)val == (Object)null) { characterBody.inventory.CleanInventory(); } else if (num > 0) { Log.Debug("Respawn"); for (int i = 0; i < characterBody.inventory.itemAcquisitionOrder.Count; i++) { ItemIndex val2 = characterBody.inventory.itemAcquisitionOrder[i]; ItemDef itemDef = ItemCatalog.GetItemDef(val2); Log.Debug(((Object)itemDef).name); if (!itemDef.hidden && Util.CheckRoll(30f, val.master)) { PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(val2), ((Component)self.deathStateMachine).transform.position, new Vector3(0f, 15f, 0f)); characterBody.inventory.RemoveItem(itemDef, 1); } } } orig.Invoke(self); } } }