Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of HallowedMod v1.1.0
HallowedPlugin.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Configuration; using BepInEx.Logging; using HallowedPlugin.Assets; using HallowedPlugin.Buffs; using HallowedPlugin.CustomBehavior; using HallowedPlugin.ItemBehaviors; using HallowedPlugin.ItemTiers; using HallowedPlugin.Items; using Microsoft.CodeAnalysis; using On.RoR2; using On.RoR2.Items; using R2API; using RoR2; using RoR2.Orbs; 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("HallowedPlugin")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HallowedPlugin")] [assembly: AssemblyTitle("HallowedPlugin")] [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; } } } namespace HallowedPlugin { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("imulki.HallowedPlugin", "HallowedPlugin", "0.1")] public class HallowedPlugin : BaseUnityPlugin { public const string PluginGUID = "imulki.HallowedPlugin"; public const string PluginAuthor = "imulki"; public const string PluginName = "HallowedPlugin"; public const string PluginVersion = "0.1"; public static ConfigEntry<float> VoidStuffSpawnRateConfig { get; set; } public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); InitiateConfig(); AssetFactory.InitiateAssets(); BuffFactory.InitiateBuffFactory(); ItemTierFactory.InitiateItemTierFactory(); ItemFactory.InitiateItemFactory(); CustomBehaviorInitiator.Initiate(); StuffChecking(); } private void InitiateConfig() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown VoidStuffSpawnRateConfig = ((BaseUnityPlugin)this).Config.Bind<float>("TheSection", "VoidSpawnRateKey", 1f, "A Multiplier. How common will the void thing spawn, the default value is 1. Personally, I recommend to set it 1.5 to 2, as this mod almost double the void item pool."); ClassicStageInfo.Start += new hook_Start(ClassicStageInfo_Start); } private void StuffChecking() { } private void ClassicStageInfo_Start(orig_Start orig, ClassicStageInfo self) { orig.Invoke(self); if ((Object)(object)self.interactableCategories == (Object)null || self.interactableCategories.categories == null || VoidStuffSpawnRateConfig.Value == 1f) { return; } for (int i = 0; i < self.interactableCategories.categories.Length; i++) { if (self.interactableCategories.categories[i].name == "Void Stuff") { self.interactableCategories.categories[i].selectionWeight *= VoidStuffSpawnRateConfig.Value; } } } } 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 HallowedPlugin.ItemTiers { public class ItemTierFactory { public enum AdditionItemTier { hallowedTier1 = 1024, hallowedTier2, hallowedTier3, hallowedTierBoss } public static ItemTierDef hallowedTier1; public static ItemTierDef hallowedTier2; public static ItemTierDef hallowedTier3; public static ItemTierDef hallowedTierBoss; public static void InitiateItemTierFactory() { CreateHallowedTiers(); } public static ItemTierDef CreateItemTierDef(string tierName, Texture bgIconTexture, ColorIndex colorIndex, ColorIndex darkColorIndex, bool isDroppable, bool canScrap, bool canRestack, PickupRules pickupRules, GameObject highlightPrefab, GameObject dropletDisplayPrefab, Enum tierIndex) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0057: Unknown result type (might be due to invalid IL or missing references) ItemTierDef val = ScriptableObject.CreateInstance<ItemTierDef>(); ((Object)val).name = tierName; val.bgIconTexture = bgIconTexture; val.colorIndex = colorIndex; val.darkColorIndex = darkColorIndex; val.isDroppable = isDroppable; val.canRestack = canRestack; val.canScrap = canScrap; val.pickupRules = pickupRules; val.highlightPrefab = highlightPrefab; val.dropletDisplayPrefab = dropletDisplayPrefab; val.tier = (ItemTier)(object)tierIndex; ContentAddition.AddItemTierDef(val); return val; } private static void CreateHallowedTiers() { //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_0017: 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_0020: 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_0035: 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_0057: 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_0079: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) Texture bgIconTexture = Addressables.LoadAssetAsync<Texture>((object)"RoR2/Base/Common/texBossBGIcon.png").WaitForCompletion(); ColorIndex colorIndex = (ColorIndex)13; ColorIndex darkColorIndex = (ColorIndex)22; GameObject dropletDisplayPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/PickupDroplet.prefab").WaitForCompletion(); hallowedTier1 = CreateItemTierDef("hallowedTier1", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, dropletDisplayPrefab, AdditionItemTier.hallowedTier1); hallowedTier2 = CreateItemTierDef("hallowedTier2", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, null, AdditionItemTier.hallowedTier2); hallowedTier3 = CreateItemTierDef("hallowedTier3", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, null, AdditionItemTier.hallowedTier3); hallowedTierBoss = CreateItemTierDef("hallowedTierBoss", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, null, AdditionItemTier.hallowedTierBoss); } } } namespace HallowedPlugin.ItemBehaviors { public class FlyingFungusBehavior : ItemBehavior { private const float healPercentagePerStack = 0.01f; private const float healPeriodSeconds = 0.5f; private bool wasFlying; private HealthComponent healthComponent; private float healTimer; private void Awake() { ((Behaviour)this).enabled = false; } private void OnEnable() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)base.body)) { wasFlying = base.body.GetBuffCount(BuffFactory.FlyingFungusBuff.buffIndex) > 0; healthComponent = ((Component)base.body).GetComponent<HealthComponent>(); } healTimer = 0f; } private void OnDisable() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)base.body) && wasFlying) { base.body.RemoveBuff(BuffFactory.FlyingFungusBuff.buffIndex); } healthComponent = null; } private void FixedUpdate() { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_005e: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)base.body)) { if (!base.body.characterMotor.isGrounded) { healTimer += Time.fixedDeltaTime; if (!wasFlying) { wasFlying = true; base.body.AddBuff(BuffFactory.FlyingFungusBuff.buffIndex); } } else if (wasFlying) { base.body.RemoveBuff(BuffFactory.FlyingFungusBuff.buffIndex); wasFlying = false; } } while (healTimer > 0.5f) { healthComponent.HealFraction(0.01f * (float)base.stack, default(ProcChainMask)); healTimer -= 0.5f; } } } internal class LivingRobotBehavior : ItemBehavior { public static DeployableSlot dsLivingRobot = (DeployableSlot)52; private const float baseSecondsPerSpawn = 30f; private const int baseMaxAllies = 3; private const int maxAlliesPerStack = 2; private const float minSpawnDist = 3f; private const float maxSpawnDist = 40f; private float spawnTimer; private Xoroshiro128Plus rng; private WeightedSelection<CharacterSpawnCard> spawnSelection; private DirectorPlacementRule placementRule; public static int GetMaxProjectiles(Inventory inventory) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) return 3 + 2 * (inventory.GetItemCount(ItemFactory.LivingRobot.itemIndex) - 1); } private void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_00b1: 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_00cc: 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_00dc: 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_00f8: Expected O, but got Unknown ((Behaviour)this).enabled = false; ulong num = Run.instance.seed ^ (ulong)Run.instance.stageClearCount; rng = new Xoroshiro128Plus(num); spawnSelection = new WeightedSelection<CharacterSpawnCard>(8); spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Drones/cscDrone1.asset").WaitForCompletion(), 15f); spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Drones/cscDrone2.asset").WaitForCompletion(), 15f); spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Drones/cscBackupDrone.asset").WaitForCompletion(), 5f); spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/DroneCommander/cscDroneCommander.asset").WaitForCompletion(), 1f); placementRule = new DirectorPlacementRule { placementMode = (PlacementMode)1, minDistance = 3f, maxDistance = 40f, spawnOnTarget = ((Component)this).transform }; } private void FixedUpdate() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown spawnTimer += Time.fixedDeltaTime; if (!base.body.master.IsDeployableLimited(dsLivingRobot) && spawnTimer > 60f / (float)base.stack) { spawnTimer = 0f; DirectorSpawnRequest val = new DirectorSpawnRequest((SpawnCard)(object)spawnSelection.Evaluate(rng.nextNormalizedFloat), placementRule, rng); val.summonerBodyObject = ((Component)this).gameObject; val.onSpawnedServer = OnMasterSpawned; val.summonerBodyObject = ((Component)this).gameObject; DirectorCore.instance.TrySpawnObject(val); } } private void OnMasterSpawned(SpawnResult spawnResult) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) GameObject spawnedInstance = spawnResult.spawnedInstance; if (!Object.op_Implicit((Object)(object)spawnedInstance)) { return; } CharacterMaster component = spawnedInstance.GetComponent<CharacterMaster>(); if (Object.op_Implicit((Object)(object)component)) { Deployable component2 = ((Component)component).GetComponent<Deployable>(); if (Object.op_Implicit((Object)(object)component2)) { base.body.master.AddDeployable(component2, dsLivingRobot); } } } } } namespace HallowedPlugin.Items { public class ItemFactory : MonoBehaviour { [CompilerGenerated] private static class <>O { public static Func<int> <0>__BenaluEffect; public static hook_RespawnLocalPlayers <1>__Stage_RespawnLocalPlayers; public static Func<int> <2>__CatastrophicEraEffect; public static Action<DamageReport> <3>__CatastrophicEra_GlobalEventManager_onServerDamageDealt; public static hook_UpdateAllTemporaryVisualEffects <4>__CatastrophicEra_UpdateAllTemporaryVisualEffects; public static hook_TakeDamageProcess <5>__CatastrophicEra_TakeDamageProcess; public static hook_RemoveBuff_BuffIndex <6>__CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex; public static Func<int> <7>__DelayedDoomEffect; public static Action<DamageReport> <8>__DelayedDoom_OnServerDamageDealt; public static hook_RemoveBuff_BuffIndex <9>__DelayedDoom_OnRemoveBuff; public static Func<int> <10>__FaultyEgoEffect; public static hook_UpdateLastHitTime <11>__FaultyEgo_UpdateLastHitTime; public static Action<DamageReport> <12>__FaultyEgo_onServerDamageDealt; public static hook_RemoveBuff_BuffIndex <13>__FaultyEgo_RemoveBuff_BuffIndex; public static hook_Heal <14>__FaultyEgo_HealthComponent_Heal; public static Func<int> <15>__FaultyEgoConsumedEffect; public static Func<int> <16>__FlyingFungusEffect; public static Action<CharacterBody> <17>__FlyingFungus_onBodyInventoryChangedGlobal; public static Func<int> <18>__GuitarEffect; public static Action<DamageReport> <19>__Guitar_onServerDamageDealt; public static Func<int> <20>__HypnoBaubleEffect; public static Action<DamageReport> <21>__HypnoBauble_onServerDamageDealt; public static hook_UpdateAllTemporaryVisualEffects <22>__HypnoBauble_UpdateAllTemporaryVisualEffects; public static hook_RemoveBuff_BuffIndex <23>__HypnoBauble_RemoveBuff_BuffIndex; public static Func<int> <24>__IlluminationEffect; public static Action<DamageReport> <25>__Illumination_onServerDamageDealt; public static hook_Init <26>__ContagiousItemManager_Init; public static hook_BuildDropTable <27>__ItemFactory_BuildDropTable; public static Func<int> <28>__LivingRobotEffect; public static Action<CharacterBody> <29>__LivingRobot_onBodyInventoryChangedGlobal; public static hook_GetDeployableSameSlotLimit <30>__LivingRobot_GetDeployableSameSlotLimit; public static Func<int> <31>__MagnifierEffect; public static Action<DamageReport> <32>__Magnifier_OnServerDamageDealt; public static Func<int> <33>__MulticastEffect; public static Action<EquipmentSlot, EquipmentIndex> <34>__Multicast_onServerEquipmentActivated; public static hook_RemoveBuff_BuffIndex <35>__Multicast_RemoveBuff_BuffIndex; public static Func<int> <36>__SacredMissileEffect; public static Action<DamageReport> <37>__SacredMissile_onServerDamageDealt; } public static ItemDef Benalu; public static ItemDef CatastrophicEra; public static ItemDef DelayedDoom; public static ItemDef FaultyEgo; public static ItemDef FaultyEgoConsumed; public static ItemDef FlyingFungus; public static ItemDef Guitar; public static ItemDef HypnoBauble; public static ItemDef Illumination; public static string modNameCode = "HALLOWED"; public static List<Pair> itemPairs = new List<Pair>(); public static ItemDef LivingRobot; public static ItemDef Magnifier; public static ItemDef Multicast; public static ItemDef SacredMissile; public static ItemDef InitiateBenalu() { //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_0024: 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) Sprite pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/CloverVoid/texCloverVoidIcon.png").WaitForCompletion(); Benalu = CreateItem("BENALU", ItemTierFactory.hallowedTier3, pickupIconSprite, Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/CloverVoid/PickupCloverVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, BenaluEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }); return Benalu; } private static int BenaluEffect() { //IL_0011: 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_001c: Expected O, but got Unknown object obj = <>O.<1>__Stage_RespawnLocalPlayers; if (obj == null) { hook_RespawnLocalPlayers val = Stage_RespawnLocalPlayers; <>O.<1>__Stage_RespawnLocalPlayers = val; obj = (object)val; } Stage.RespawnLocalPlayers += (hook_RespawnLocalPlayers)obj; return 0; } private static void Stage_RespawnLocalPlayers(orig_RespawnLocalPlayers orig, Stage self) { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); ReadOnlyCollection<NetworkUser> readOnlyInstancesList = NetworkUser.readOnlyInstancesList; for (int i = 0; i < readOnlyInstancesList.Count; i++) { NetworkUser val = readOnlyInstancesList[i]; CharacterMaster val2 = null; if (((NetworkBehaviour)val).isLocalPlayer && Object.op_Implicit((Object)(object)val.masterObject)) { val2 = val.masterObject.GetComponent<CharacterMaster>(); } if (Object.op_Implicit((Object)(object)val2)) { Xoroshiro128Plus val3 = val2.cloverVoidRng; if (val3 == null) { val3 = new Xoroshiro128Plus(Run.instance.seed); } Inventory component = ((Component)val2).GetComponent<Inventory>(); int itemCount = component.GetItemCount(Benalu.itemIndex); List<ItemIndex> list = new List<ItemIndex>(component.itemAcquisitionOrder); Util.ShuffleList<ItemIndex>(list, val3); int num = itemCount * 3; for (int j = 0; j < num; j++) { ItemDef itemDef = ItemCatalog.GetItemDef(list[j]); component.GiveItem(itemDef.itemIndex, 1); } } } } public static ItemDef InitiateCatastrophicEra() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) CatastrophicEra = CreateItem("CATASTROPHICERA", ItemTierFactory.hallowedTier1, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBearVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/BearVoid/PickupBearVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, CatastrophicEraEffect, (ItemTag[])(object)new ItemTag[2] { (ItemTag)3, (ItemTag)11 }); return CatastrophicEra; } private static int CatastrophicEraEffect() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //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_005e: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown GlobalEventManager.onServerDamageDealt += CatastrophicEra_GlobalEventManager_onServerDamageDealt; object obj = <>O.<4>__CatastrophicEra_UpdateAllTemporaryVisualEffects; if (obj == null) { hook_UpdateAllTemporaryVisualEffects val = CatastrophicEra_UpdateAllTemporaryVisualEffects; <>O.<4>__CatastrophicEra_UpdateAllTemporaryVisualEffects = val; obj = (object)val; } CharacterBody.UpdateAllTemporaryVisualEffects += (hook_UpdateAllTemporaryVisualEffects)obj; object obj2 = <>O.<5>__CatastrophicEra_TakeDamageProcess; if (obj2 == null) { hook_TakeDamageProcess val2 = CatastrophicEra_TakeDamageProcess; <>O.<5>__CatastrophicEra_TakeDamageProcess = val2; obj2 = (object)val2; } HealthComponent.TakeDamageProcess += (hook_TakeDamageProcess)obj2; object obj3 = <>O.<6>__CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex; if (obj3 == null) { hook_RemoveBuff_BuffIndex val3 = CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex; <>O.<6>__CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex = val3; obj3 = (object)val3; } CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj3; return 0; } private static void CatastrophicEra_UpdateAllTemporaryVisualEffects(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self) { //IL_0021: 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) orig.Invoke(self); self.UpdateSingleTemporaryVisualEffect(ref self.bearVoidTempEffectInstance, AssetReferences.bearVoidTempEffectPrefab, self.radius, self.HasBuff(BuffFactory.CatastrophicEraBuff.buffIndex) || self.HasBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex) || self.HasBuff(Buffs.BearVoidReady), ""); } private static void CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_0003: 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) //IL_0010: 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_0022: 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_0075: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, buffType); if (buffType == BuffFactory.CatastrophicEraBuff.buffIndex) { self.AddTimedBuff(BuffFactory.CatastrophicEraCooldownBuff.buffIndex, 0.75f); } else if (buffType == BuffFactory.CatastrophicEraLongerBuff.buffIndex && !((Object)(object)self.inventory == (Object)null)) { int itemCount = self.inventory.GetItemCount(CatastrophicEra.itemIndex); self.AddTimedBuff(BuffFactory.CatastrophicEraCooldownBuff.buffIndex, 10f - 8f * Util.ConvertAmplificationPercentageIntoReductionNormalized(20f * (float)itemCount)); } } private static void CatastrophicEra_GlobalEventManager_onServerDamageDealt(DamageReport report) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0092: 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_00ec: 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) if (report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || (Object)(object)report.attackerBody == (Object)null || report.damageInfo == null) { return; } CharacterBody attackerBody = report.attackerBody; Inventory inventory = report.attackerMaster.inventory; int itemCount = inventory.GetItemCount(CatastrophicEra.itemIndex); if (itemCount <= 0) { return; } float damage = report.damageInfo.damage; if (!attackerBody.HasBuff(BuffFactory.CatastrophicEraCooldownBuff.buffIndex) && !attackerBody.HasBuff(BuffFactory.CatastrophicEraBuff.buffIndex) && !attackerBody.HasBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex)) { if (damage / attackerBody.damage >= 4f) { attackerBody.AddTimedBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex, 3f); } else if (Util.CheckRoll(Util.ConvertAmplificationPercentageIntoReductionPercentage(15f * (float)itemCount) * report.damageInfo.procCoefficient, 0f, (CharacterMaster)null)) { attackerBody.AddTimedBuff(BuffFactory.CatastrophicEraBuff.buffIndex, 0.75f); } } } private static void CatastrophicEra_TakeDamageProcess(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo) { //IL_002e: 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_0052: 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_0059: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown if ((Object)(object)self != (Object)null && (Object)(object)self.body != (Object)null) { CharacterBody body = self.body; if (body.HasBuff(BuffFactory.CatastrophicEraBuff.buffIndex) || body.HasBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex)) { EffectData val = new EffectData { origin = damageInfo.position, rotation = Util.QuaternionSafeLookRotation((damageInfo.force != Vector3.zero) ? damageInfo.force : Random.onUnitSphere) }; EffectManager.SpawnEffect(AssetReferences.bearEffectPrefab, val, true); damageInfo.rejected = true; } } orig.Invoke(self, damageInfo); } public static ItemDef InitiateDelayedDoom() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) DelayedDoom = CreateItem("DELAYEDDOOM", ItemTierFactory.hallowedTier1, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BleedOnHitVoid/texTriTipVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/BleedOnHitVoid/PickupTriTipVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, DelayedDoomEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 }); return DelayedDoom; } public static int DelayedDoomEffect() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown GlobalEventManager.onServerDamageDealt += DelayedDoom_OnServerDamageDealt; object obj = <>O.<9>__DelayedDoom_OnRemoveBuff; if (obj == null) { hook_RemoveBuff_BuffIndex val = DelayedDoom_OnRemoveBuff; <>O.<9>__DelayedDoom_OnRemoveBuff = val; obj = (object)val; } CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj; return 0; } private static void DelayedDoom_OnRemoveBuff(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_0003: 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) //IL_0010: 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_002a: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_0093: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, buffType); if (buffType == BuffFactory.DelayedDoomBuff.buffIndex) { DamageInfo val = new DamageInfo(); val.damage = self.baseDamage * 100f; val.crit = false; val.attacker = self.masterObject; val.inflictor = self.masterObject; val.position = self.corePosition; val.rejected = false; val.procChainMask = default(ProcChainMask); val.procCoefficient = 0.01f; val.damageType = DamageTypeCombo.Generic; val.damageColorIndex = (DamageColorIndex)12; self.healthComponent.TakeDamage(val); } } private static void DelayedDoom_OnServerDamageDealt(DamageReport report) { //IL_0054: 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) HealthComponent victim = report.victim; CharacterMaster attackerMaster = report.attackerMaster; if ((Object)(object)attackerMaster == (Object)null) { return; } Inventory inventory = attackerMaster.inventory; if ((Object)(object)victim == (Object)null || (Object)(object)inventory == (Object)null) { return; } int itemCount = inventory.GetItemCount(DelayedDoom.itemIndex); float num = 80f * report.damageInfo.procCoefficient; if (itemCount <= 0 || !Util.CheckRoll(num, attackerMaster)) { return; } CharacterBody body = victim.body; BuffDef ddBuff = BuffFactory.DelayedDoomBuff; if (body.HasBuff(ddBuff)) { TimedBuff val = body.timedBuffs.Find((TimedBuff tb) => tb.buffIndex == ddBuff.buffIndex); float timer = val.timer - 1f * (float)itemCount; val.timer = timer; } else { body.AddTimedBuff(ddBuff.buffIndex, 15f); } } public static ItemDef InitiateFaultyEgo() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) FaultyEgo = CreateItem("FAULTYEGO", ItemTierFactory.hallowedTier3, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ExtraLifeVoid/texHippoVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ExtraLifeVoid/PickupHippoVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, FaultyEgoEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }); return FaultyEgo; } public static int FaultyEgoEffect() { //IL_0011: 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_001c: Expected O, but got Unknown //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_005e: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown object obj = <>O.<11>__FaultyEgo_UpdateLastHitTime; if (obj == null) { hook_UpdateLastHitTime val = FaultyEgo_UpdateLastHitTime; <>O.<11>__FaultyEgo_UpdateLastHitTime = val; obj = (object)val; } HealthComponent.UpdateLastHitTime += (hook_UpdateLastHitTime)obj; GlobalEventManager.onServerDamageDealt += FaultyEgo_onServerDamageDealt; object obj2 = <>O.<13>__FaultyEgo_RemoveBuff_BuffIndex; if (obj2 == null) { hook_RemoveBuff_BuffIndex val2 = FaultyEgo_RemoveBuff_BuffIndex; <>O.<13>__FaultyEgo_RemoveBuff_BuffIndex = val2; obj2 = (object)val2; } CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj2; object obj3 = <>O.<14>__FaultyEgo_HealthComponent_Heal; if (obj3 == null) { hook_Heal val3 = FaultyEgo_HealthComponent_Heal; <>O.<14>__FaultyEgo_HealthComponent_Heal = val3; obj3 = (object)val3; } HealthComponent.Heal += (hook_Heal)obj3; return 0; } private static float FaultyEgo_HealthComponent_Heal(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procChainMask, bool nonRegen) { //IL_0004: 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_002f: 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) float num = orig.Invoke(self, amount, procChainMask, nonRegen); float num2 = amount - num; CharacterBody body = self.body; int buffCount = body.GetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex); if (body.GetBuffCount(BuffFactory.FaultyEgoBuff.buffIndex) > 0) { int num3 = Mathf.FloorToInt(num2); body.SetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex, buffCount + num3); } return num; } private static void FaultyEgo_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody cb, BuffIndex buffType) { //IL_0003: 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) //IL_0010: 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_0078: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(cb, buffType); if (buffType == BuffFactory.FaultyEgoBuff.buffIndex) { HealthComponent healthComponent = cb.healthComponent; int buffCount = cb.GetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex); if ((float)buffCount < healthComponent.fullHealth) { cb.master.TrueKill(); } else { cb.inventory.GiveItem(Items.ShinyPearl, 1); CharacterMasterNotificationQueue.SendTransformNotification(cb.master, FaultyEgoConsumed.itemIndex, Items.ShinyPearl.itemIndex, (TransformationType)0); } cb.SetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex, 1); cb.RemoveBuff(BuffFactory.BurntFaultyEgoBuff.buffIndex); } } private static void FaultyEgo_onServerDamageDealt(DamageReport damageReport) { //IL_001c: 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) CharacterBody attackerBody = damageReport.attackerBody; if (!((Object)(object)attackerBody == (Object)null) && attackerBody.GetBuffCount(BuffFactory.FaultyEgoBuff.buffIndex) > 0) { float num = Util.OnHitProcDamage(damageReport.damageInfo.damage, attackerBody.damage, 0.4f); attackerBody.healthComponent.Heal(num, damageReport.damageInfo.procChainMask, true); } } private static void FaultyEgo_UpdateLastHitTime(orig_UpdateLastHitTime orig, HealthComponent self, float damageValue, Vector3 damagePosition, bool damageIsSilent, GameObject attacker) { //IL_0004: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageValue, damagePosition, damageIsSilent, attacker); CharacterBody body = self.body; if (NetworkServer.active && Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory) && Object.op_Implicit((Object)(object)body.master) && damageValue > 0f && self.health < 0f) { if (body.GetBuffCount(BuffFactory.FaultyEgoBuff.buffIndex) > 0) { self.health = 1f; } else if (body.inventory.GetItemCount(FaultyEgo.itemIndex) > 0) { self.health = 1f; body.AddTimedBuff(BuffFactory.FaultyEgoBuff.buffIndex, 10f); body.inventory.RemoveItem(FaultyEgo.itemIndex, 1); body.inventory.GiveItem(FaultyEgoConsumed.itemIndex, 1); CharacterMasterNotificationQueue.SendTransformNotification(body.master, FaultyEgo.itemIndex, FaultyEgoConsumed.itemIndex, (TransformationType)0); } } } public static ItemDef InitiateFaultyEgoConsumed() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) FaultyEgoConsumed = CreateItem("FAULTYEGOCONSUMED", ItemTierFactory.hallowedTierBoss, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ExtraLifeVoid/texHippoVoidIconConsumed.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ExtraLifeVoid/PickupHippoVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, FaultyEgoConsumedEffect, (ItemTag[])(object)new ItemTag[0]); return FaultyEgoConsumed; } public static int FaultyEgoConsumedEffect() { return 0; } public static ItemDef InitiateFlyingFungus() { FlyingFungus = CreateItem("FFUNGUS", ItemTierFactory.hallowedTier1, AssetFactory.FFungusAssets.icon, AssetFactory.FFungusAssets.pickup, canRemove: true, hidden: false, null, FlyingFungusEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)2 }); return FlyingFungus; } public static int FlyingFungusEffect() { CharacterBody.onBodyInventoryChangedGlobal += FlyingFungus_onBodyInventoryChangedGlobal; return 0; } private static void FlyingFungus_onBodyInventoryChangedGlobal(CharacterBody cb) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) Inventory inventory = cb.inventory; if ((Object)(object)inventory != (Object)null) { cb.AddItemBehavior<FlyingFungusBehavior>(inventory.GetItemCount(FlyingFungus.itemIndex)); } } public static ItemDef InitiateGuitar() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) Guitar = CreateItem("GUITAR", ItemTierFactory.hallowedTier2, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ChainLightningVoid/texUkuleleVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ChainLightningVoid/PickupUkuleleVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, GuitarEffect, (ItemTag[])(object)new ItemTag[2] { (ItemTag)3, (ItemTag)11 }); return Guitar; } private static int GuitarEffect() { GlobalEventManager.onServerDamageDealt += Guitar_onServerDamageDealt; return 0; } private static void Guitar_onServerDamageDealt(DamageReport report) { //IL_00a2: 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_0121: 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_0169: 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_01ac: 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_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active || report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || (Object)(object)report.attackerBody == (Object)null || (Object)(object)report.attackerBody.teamComponent == (Object)null || report.damageInfo == null || (Object)(object)report.victim == (Object)null || (Object)(object)report.victimBody == (Object)null) { return; } Inventory inventory = report.attackerMaster.inventory; CharacterBody attackerBody = report.attackerBody; int itemCount = inventory.GetItemCount(Guitar.itemIndex); TeamComponent component = ((Component)report.attackerBody).GetComponent<TeamComponent>(); TeamIndex teamIndex = (TeamIndex)(Object.op_Implicit((Object)(object)component) ? ((int)component.teamIndex) : 0); if (itemCount <= 0) { return; } DamageInfo damageInfo = report.damageInfo; if (Util.CheckRoll(50f * damageInfo.procCoefficient, report.attackerMaster) && !((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)3)) { attackerBody.AddBuff(BuffFactory.GuitarBuff.buffIndex); switch (attackerBody.GetBuffCount(BuffFactory.GuitarBuff.buffIndex)) { case 4: CreateUkuleleAttack(damageInfo, attackerBody, report.victim, teamIndex, 0.8f, 2 * itemCount, 2f * (float)itemCount); break; case 7: CreatePolyluteAttack(damageInfo, attackerBody, report.victimBody, teamIndex, 0.6f, 3 * itemCount); break; case 10: CreateUkuleleAttack(damageInfo, attackerBody, report.victim, teamIndex, 0.8f, 2 * itemCount, 2f * (float)itemCount); CreatePolyluteAttack(damageInfo, attackerBody, report.victimBody, teamIndex, 0.6f, 3 * itemCount); attackerBody.SetBuffCount(BuffFactory.GuitarBuff.buffIndex, 1); attackerBody.RemoveBuff(BuffFactory.GuitarBuff.buffIndex); break; default: CreateUkuleleAttack(damageInfo, attackerBody, report.victim, teamIndex, 0.4f, 0, 0f); break; } } } private static void CreateUkuleleAttack(DamageInfo damageInfo, CharacterBody attackerBody, HealthComponent victimHealthComp, TeamIndex teamIndex, float damageCoefficiant, int bounceCount, float rangeIncrease) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_001d: 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_0043: 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_006a: 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_008e: 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_00b1: Unknown result type (might be due to invalid IL or missing references) float damageValue = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, damageCoefficiant); LightningOrb val = new LightningOrb(); ((Orb)val).origin = damageInfo.position; val.damageValue = damageValue; val.isCrit = damageInfo.crit; val.bouncesRemaining = bounceCount; val.teamIndex = teamIndex; val.attacker = damageInfo.attacker; val.bouncedObjects = new List<HealthComponent> { victimHealthComp }; val.procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref val.procChainMask)).AddProc((ProcType)3); val.procCoefficient = 0.2f; val.lightningType = (LightningType)0; val.damageColorIndex = (DamageColorIndex)3; val.range += 2f * rangeIncrease; HurtBox val2 = val.PickNextTarget(damageInfo.position); if (Object.op_Implicit((Object)(object)val2)) { ((Orb)val).target = val2; OrbManager.instance.AddOrb((Orb)(object)val); } } private static void CreatePolyluteAttack(DamageInfo damageInfo, CharacterBody attackerBody, CharacterBody victimBody, TeamIndex teamIndex, float damageCoefficiant, int strikeCount) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_001d: 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_0043: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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) float damageValue = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, damageCoefficiant); VoidLightningOrb val = new VoidLightningOrb(); ((Orb)val).origin = damageInfo.position; val.damageValue = damageValue; val.isCrit = damageInfo.crit; val.totalStrikes = strikeCount; val.teamIndex = teamIndex; val.attacker = damageInfo.attacker; val.procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref val.procChainMask)).AddProc((ProcType)3); val.procCoefficient = 0.2f; val.damageColorIndex = (DamageColorIndex)9; val.secondsPerStrike = 0.1f; HurtBox mainHurtBox = victimBody.mainHurtBox; if (Object.op_Implicit((Object)(object)mainHurtBox)) { ((Orb)val).target = mainHurtBox; OrbManager.instance.AddOrb((Orb)(object)val); } } public static ItemDef InitiateHypnoBauble() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) HypnoBauble = CreateItem("HYPNOBAUBLE", ItemTierFactory.hallowedTier2, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/SlowOnHitVoid/texBaubleVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/SlowOnHitVoid/PickupBaubleVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, HypnoBaubleEffect, (ItemTag[])(object)new ItemTag[2] { (ItemTag)3, (ItemTag)11 }); return HypnoBauble; } private static int HypnoBaubleEffect() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //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_005e: Expected O, but got Unknown GlobalEventManager.onServerDamageDealt += HypnoBauble_onServerDamageDealt; object obj = <>O.<22>__HypnoBauble_UpdateAllTemporaryVisualEffects; if (obj == null) { hook_UpdateAllTemporaryVisualEffects val = HypnoBauble_UpdateAllTemporaryVisualEffects; <>O.<22>__HypnoBauble_UpdateAllTemporaryVisualEffects = val; obj = (object)val; } CharacterBody.UpdateAllTemporaryVisualEffects += (hook_UpdateAllTemporaryVisualEffects)obj; object obj2 = <>O.<23>__HypnoBauble_RemoveBuff_BuffIndex; if (obj2 == null) { hook_RemoveBuff_BuffIndex val2 = HypnoBauble_RemoveBuff_BuffIndex; <>O.<23>__HypnoBauble_RemoveBuff_BuffIndex = val2; obj2 = (object)val2; } CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj2; return 0; } private static void HypnoBauble_UpdateAllTemporaryVisualEffects(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); self.UpdateSingleTemporaryVisualEffect(ref self.voidJailerSlowEffectInstance, AssetReferences.voidJailerSlowEffectPrefab, self.radius, self.HasBuff(Buffs.JailerSlow) || self.HasBuff(BuffFactory.HypnoBaubleBuff.buffIndex), ""); } private static void HypnoBauble_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_0003: 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) //IL_0010: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, buffType); if (buffType == BuffFactory.HypnoBaubleBuff.buffIndex) { self.baseMoveSpeed *= -1f; } } private static void HypnoBauble_onServerDamageDealt(DamageReport report) { //IL_0060: 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) if (report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || report.damageInfo == null || (Object)(object)report.victimBody == (Object)null) { return; } CharacterBody victimBody = report.victimBody; Inventory inventory = report.attackerMaster.inventory; int itemCount = inventory.GetItemCount(HypnoBauble.itemIndex); if (itemCount > 0) { float damage = report.damageInfo.damage; if (Util.CheckRoll(5f * (float)itemCount * report.damageInfo.procCoefficient, report.attackerMaster)) { victimBody.baseMoveSpeed *= -1f; victimBody.AddTimedBuff(BuffFactory.HypnoBaubleBuff.buffIndex, 1f + 0.5f * (float)itemCount); } } } public static ItemDef InitiateIllumination() { Illumination = CreateItem("ILLUMINATION", ItemTierFactory.hallowedTier2, AssetFactory.IlluminationAssets.icon, AssetFactory.IlluminationAssets.pickup, canRemove: true, hidden: false, null, IlluminationEffect, (ItemTag[])(object)new ItemTag[2] { (ItemTag)3, (ItemTag)11 }); return Illumination; } private static int IlluminationEffect() { GlobalEventManager.onServerDamageDealt += Illumination_onServerDamageDealt; GlobalEventManager.onCharacterDeathGlobal += Illumination_onServerDamageDealt; return 0; } private static void Illumination_onServerDamageDealt(DamageReport report) { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_0127: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_018c: 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_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active || report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || (Object)(object)report.attackerBody == (Object)null || report.damageInfo == null || (Object)(object)report.victim == (Object)null || (Object)(object)report.victimBody == (Object)null) { return; } Inventory inventory = report.attackerMaster.inventory; int itemCount = inventory.GetItemCount(Illumination.itemIndex); int buffCount = report.victimBody.GetBuffCount(BuffFactory.IlluminationBuff.buffIndex); if (itemCount <= 0 || buffCount > 0) { return; } HealthComponent victim = report.victim; DamageInfo damageInfo = report.damageInfo; float num = victim.health / victim.fullHealth; if (Util.CheckRoll(50f * (1f - num) * damageInfo.procCoefficient, report.attackerMaster) || num <= 0f) { CharacterBody attackerBody = report.attackerBody; Vector3 corePosition = report.victimBody.corePosition; float num2 = (1.5f + 4f * num) * (1f + 0.7f * (float)itemCount); float baseDamage = Util.OnKillProcDamage(attackerBody.damage, num2); GameObject val = Object.Instantiate<GameObject>(CommonAssets.explodeOnDeathPrefab, corePosition, Quaternion.identity); DelayBlast component = val.GetComponent<DelayBlast>(); if (Object.op_Implicit((Object)(object)component)) { component.position = corePosition; component.baseDamage = baseDamage; component.baseForce = 2000f; component.bonusForce = Vector3.up * 1000f; component.radius = 12f + 2.4f * ((float)itemCount - 1f); component.attacker = damageInfo.attacker; component.inflictor = null; component.crit = Util.CheckRoll(attackerBody.crit, report.attackerMaster); component.maxTimer = 0.5f; component.damageColorIndex = (DamageColorIndex)3; component.falloffModel = (FalloffModel)2; } TeamFilter component2 = val.GetComponent<TeamFilter>(); if (Object.op_Implicit((Object)(object)component2)) { component2.teamIndex = report.attackerTeamIndex; } NetworkServer.Spawn(val); report.victimBody.AddBuff(BuffFactory.IlluminationBuff.buffIndex); } } public static void InitiateItemFactory() { //IL_005f: 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_006a: Expected O, but got Unknown //IL_0080: 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: Expected O, but got Unknown InitiateBenalu(); InitiateMagnifier(); InitiateMulticast(); InitiateDelayedDoom(); InitiateFlyingFungus(); InitiateLivingRobot(); InitiateSacredMissile(); InitiateFaultyEgo(); InitiateFaultyEgoConsumed(); InitiateCatastrophicEra(); InitiateHypnoBauble(); InitiateIllumination(); InitiateGuitar(); object obj = <>O.<26>__ContagiousItemManager_Init; if (obj == null) { hook_Init val = ContagiousItemManager_Init; <>O.<26>__ContagiousItemManager_Init = val; obj = (object)val; } ContagiousItemManager.Init += (hook_Init)obj; object obj2 = <>O.<27>__ItemFactory_BuildDropTable; if (obj2 == null) { hook_BuildDropTable val2 = ItemFactory_BuildDropTable; <>O.<27>__ItemFactory_BuildDropTable = val2; obj2 = (object)val2; } Run.BuildDropTable += (hook_BuildDropTable)obj2; } private static void ItemFactory_BuildDropTable(orig_BuildDropTable orig, Run self) { //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected I4, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); List<ItemDef> list = new List<ItemDef> { Benalu, Magnifier, Multicast, DelayedDoom, FlyingFungus, LivingRobot, SacredMissile, FaultyEgo, CatastrophicEra, HypnoBauble, Illumination, Guitar }; foreach (ItemDef item in list) { List<PickupIndex> list2 = null; ItemTier tier = item.tier; ItemTier val = tier; switch (val - 1024) { case 0: list2 = self.availableVoidTier1DropList; break; case 1: list2 = self.availableVoidTier2DropList; break; case 2: list2 = self.availableVoidTier3DropList; break; } if (list2 != null && item.DoesNotContainTag((ItemTag)9)) { list2.Add(PickupCatalog.FindPickupIndex(item.itemIndex)); } } } private static void ContagiousItemManager_Init(orig_Init orig) { InitiateContaminationPairs(); List<Pair> list = new List<Pair>(); list.AddRange(itemPairs); list.AddRange(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem]); ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = list.ToArray(); orig.Invoke(); } public static ItemDef CreateItem(string itemToken, ItemTierDef tier, Sprite pickupIconSprite, GameObject pickupModelPrefab, bool canRemove, bool hidden, ItemDisplayRuleDict displayRule, Func<int> effect, ItemTag[] tags) { //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Expected O, but got Unknown ItemDef val = ScriptableObject.CreateInstance<ItemDef>(); ((Object)val).name = modNameCode + "_" + itemToken + "_NAME"; val.nameToken = modNameCode + "_" + itemToken + "_NAME_TOKEN"; val.pickupToken = modNameCode + "_" + itemToken + "_PICKUP"; val.descriptionToken = modNameCode + "_" + itemToken + "_DESC"; val.loreToken = modNameCode + "_" + itemToken + "_LORE"; val._itemTierDef = tier; val.pickupIconSprite = pickupIconSprite; val.pickupModelPrefab = pickupModelPrefab; val.canRemove = canRemove; val.hidden = hidden; val.tags = tags; ItemAPI.Add(new CustomItem(val, displayRule)); effect(); return val; } public static ItemDef CreateItem(string itemToken, ItemTier tier, Sprite pickupIconSprite, GameObject pickupModelPrefab, bool canRemove, bool hidden, ItemDisplayRuleDict displayRule, Func<int> effect, ItemTag[] tags) { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Expected O, but got Unknown ItemDef val = ScriptableObject.CreateInstance<ItemDef>(); ((Object)val).name = modNameCode + "_" + itemToken + "_NAME"; val.nameToken = modNameCode + "_" + itemToken + "_NAME_TOKEN"; val.pickupToken = modNameCode + "_" + itemToken + "_PICKUP"; val.descriptionToken = modNameCode + "_" + itemToken + "_DESC"; val.loreToken = modNameCode + "_" + itemToken + "_LORE"; val.tier = tier; val.pickupIconSprite = pickupIconSprite; val.pickupModelPrefab = pickupModelPrefab; val.canRemove = canRemove; val.hidden = hidden; val.tags = tags; ItemAPI.Add(new CustomItem(val, displayRule)); effect(); return val; } private static void AddContaminationPair(ItemDef contaminated, ItemDef contaminator) { //IL_0003: 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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) Pair val = default(Pair); val.itemDef1 = contaminated; val.itemDef2 = contaminator; Pair item = val; itemPairs.Add(item); } private static void InitiateContaminationPairs() { AddContaminationPair(Items.Clover, Benalu); AddContaminationPair(Items.BleedOnHit, DelayedDoom); AddContaminationPair(Items.CritGlasses, Magnifier); AddContaminationPair(Items.EquipmentMagazine, Multicast); AddContaminationPair(Items.Mushroom, FlyingFungus); AddContaminationPair(Items.Missile, SacredMissile); AddContaminationPair(Items.ScrapRed, LivingRobot); AddContaminationPair(Items.ScrapYellow, LivingRobot); AddContaminationPair(Items.ExtraLife, FaultyEgo); AddContaminationPair(Items.Bear, CatastrophicEra); AddContaminationPair(Items.SlowOnHit, HypnoBauble); AddContaminationPair(Items.ExplodeOnDeath, Illumination); AddContaminationPair(Items.ChainLightning, Guitar); } public static ItemDef InitiateLivingRobot() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) LivingRobot = CreateItem("LIVINGROBOT", ItemTierFactory.hallowedTier3, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/texMegaCrabItem.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/PickupMegaCrabItem.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, LivingRobotEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }); return LivingRobot; } private static int LivingRobotEffect() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown CharacterBody.onBodyInventoryChangedGlobal += LivingRobot_onBodyInventoryChangedGlobal; object obj = <>O.<30>__LivingRobot_GetDeployableSameSlotLimit; if (obj == null) { hook_GetDeployableSameSlotLimit val = LivingRobot_GetDeployableSameSlotLimit; <>O.<30>__LivingRobot_GetDeployableSameSlotLimit = val; obj = (object)val; } CharacterMaster.GetDeployableSameSlotLimit += (hook_GetDeployableSameSlotLimit)obj; return 0; } private static void LivingRobot_onBodyInventoryChangedGlobal(CharacterBody cb) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) Inventory inventory = cb.inventory; if ((Object)(object)inventory != (Object)null) { cb.AddItemBehavior<LivingRobotBehavior>(inventory.GetItemCount(LivingRobot.itemIndex)); } } private static int LivingRobot_GetDeployableSameSlotLimit(orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (slot == LivingRobotBehavior.dsLivingRobot) { return LivingRobotBehavior.GetMaxProjectiles(self.inventory); } return orig.Invoke(self, slot); } public static ItemDef InitiateMagnifier() { Magnifier = CreateItem("TWOTAP", ItemTierFactory.hallowedTier1, AssetFactory.MagnifierAssets.icon, AssetFactory.MagnifierAssets.pickup, canRemove: true, hidden: false, null, MagnifierEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 }); return Magnifier; } public static int MagnifierEffect() { GlobalEventManager.onServerDamageDealt += Magnifier_OnServerDamageDealt; return 0; } private static void Magnifier_OnServerDamageDealt(DamageReport report) { //IL_0052: 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_009f: Expected O, but got Unknown //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00e6: 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_0110: Unknown result type (might be due to invalid IL or missing references) //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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) HealthComponent victim = report.victim; CharacterMaster attackerMaster = report.attackerMaster; if ((Object)(object)attackerMaster == (Object)null) { return; } Inventory component = ((Component)attackerMaster).GetComponent<Inventory>(); if ((Object)(object)victim != (Object)null && (Object)(object)component != (Object)null) { DamageInfo damageInfo = report.damageInfo; int itemCount = component.GetItemCount(Magnifier.itemIndex); float num = Math.Min((float)(5 + 5 * itemCount) * damageInfo.procCoefficient, 90f); if (itemCount > 0 && Util.CheckRoll(num, attackerMaster)) { DamageInfo val = new DamageInfo(); val.procCoefficient = damageInfo.procCoefficient / 2f; val.damage = damageInfo.damage / 4f; val.crit = true; val.position = damageInfo.position; val.force = damageInfo.force; val.attacker = damageInfo.attacker; val.canRejectForce = damageInfo.canRejectForce; val.damageColorIndex = damageInfo.damageColorIndex; val.damageType = damageInfo.damageType; val.delayedDamageSecondHalf = damageInfo.delayedDamageSecondHalf; val.dotIndex = damageInfo.dotIndex; val.rejected = damageInfo.rejected; val.inflictor = damageInfo.inflictor; victim.TakeDamage(val); } } } public static ItemDef InitiateMulticast() { Multicast = CreateItem("MULTICAST", ItemTierFactory.hallowedTier2, AssetFactory.OgreCellAssets.icon, AssetFactory.OgreCellAssets.pickup, canRemove: true, hidden: false, null, MulticastEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }); return Multicast; } public static int MulticastEffect() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown EquipmentSlot.onServerEquipmentActivated += Multicast_onServerEquipmentActivated; object obj = <>O.<35>__Multicast_RemoveBuff_BuffIndex; if (obj == null) { hook_RemoveBuff_BuffIndex val = Multicast_RemoveBuff_BuffIndex; <>O.<35>__Multicast_RemoveBuff_BuffIndex = val; obj = (object)val; } CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj; return 0; } private static void Multicast_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_0001: 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_000e: 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_003d: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) if (buffType == BuffFactory.DoublecastBuff.buffIndex || buffType == BuffFactory.TriplecastBuff.buffIndex) { EquipmentSlot equipmentSlot = self.equipmentSlot; if ((Object)(object)equipmentSlot != (Object)null) { equipmentSlot.Execute(); } } if (buffType == BuffFactory.TriplecastBuff.buffIndex) { self.AddTimedBuff(BuffFactory.DoublecastBuff.buffIndex, 0.5f); } orig.Invoke(self, buffType); } private static void Multicast_onServerEquipmentActivated(EquipmentSlot slot, EquipmentIndex index) { //IL_001c: 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_003f: 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_009d: Unknown result type (might be due to invalid IL or missing references) CharacterBody characterBody = slot.characterBody; Inventory inventory = characterBody.inventory; CharacterMaster master = characterBody.master; int itemCount = inventory.GetItemCount(Multicast.itemIndex); if (characterBody.HasBuff(BuffFactory.DoublecastBuff.buffIndex) || characterBody.HasBuff(BuffFactory.TriplecastBuff.buffIndex) || itemCount <= 0) { return; } float num = 40f + 10f * (float)itemCount; if (Util.CheckRoll(num, master)) { float num2 = 20f + 5f * (float)itemCount; if (Util.CheckRoll(num2, master)) { characterBody.AddTimedBuff(BuffFactory.TriplecastBuff.buffIndex, 0.5f); } else { characterBody.AddTimedBuff(BuffFactory.DoublecastBuff.buffIndex, 0.5f); } } } public static ItemDef InitiateSacredMissile() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0027: Unknown result type (might be due to invalid IL or missing references) SacredMissile = CreateItem("SACREDMISSILE", ItemTierFactory.hallowedTier2, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MissileVoid/texMissileLauncherVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MissileVoid/PickupMissileLauncherVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, SacredMissileEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 }); return SacredMissile; } public static int SacredMissileEffect() { GlobalEventManager.onServerDamageDealt += SacredMissile_onServerDamageDealt; return 0; } private static void SacredMissile_onServerDamageDealt(DamageReport report) { //IL_00c6: 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_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Expected O, but got Unknown //IL_018a: 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) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: 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_01c4: Unknown result type (might be due to invalid IL or missing references) if (report.damageInfo == null || (Object)(object)report.victim == (Object)null || (Object)(object)((Component)report.victim).gameObject == (Object)null) { return; } DamageInfo damageInfo = report.damageInfo; GameObject gameObject = ((Component)report.victim).gameObject; GameObject attacker = damageInfo.attacker; if ((Object)(object)attacker == (Object)null) { return; } CharacterBody component = attacker.GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } CharacterMaster master = component.master; if (!Object.op_Implicit((Object)(object)master)) { return; } Inventory inventory = master.inventory; if (((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)1)) { return; } int itemCount = inventory.GetItemCount(SacredMissile.itemIndex); if (itemCount > 0) { float num = component.healthComponent.health / component.maxHealth; if (num > 0.91f && Util.CheckRoll(100f * damageInfo.procCoefficient, master)) { float num2 = 0.7f * (float)itemCount; float num3 = Util.OnHitProcDamage(damageInfo.damage, component.damage, num2); GameObject missilePrefab = CommonAssets.missilePrefab; MissileUtils.FireMissile(component.corePosition, component, damageInfo.procChainMask, gameObject, num3, damageInfo.crit, missilePrefab, (DamageColorIndex)3, true); DamageInfo val = new DamageInfo(); val.damage = component.maxHealth / 40f; val.crit = false; val.position = component.corePosition; val.rejected = false; val.procChainMask = default(ProcChainMask); val.procCoefficient = 0f; val.damageType = DamageTypeCombo.Generic; val.damageColorIndex = (DamageColorIndex)0; component.healthComponent.TakeDamage(val); } } } } } namespace HallowedPlugin.CustomBehavior { public class CustomBehaviorInitiator { public static void Initiate() { EqualContamination.InitiateEqualContamination(); } } internal class EqualContamination { [CompilerGenerated] private static class <>O { public static hook_GiveItem_ItemIndex_int <0>__Inventory_GiveItem_ItemIndex_int; public static hook_Init <1>__ContagiousItemManager_Init; } private static Dictionary<ItemIndex, List<ItemIndex>> transformedToOriginal = new Dictionary<ItemIndex, List<ItemIndex>>(); private static List<ItemIndex> toBeCheckedIndex = new List<ItemIndex>(); public static void InitiateEqualContamination() { //IL_0011: 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_001c: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown object obj = <>O.<0>__Inventory_GiveItem_ItemIndex_int; if (obj == null) { hook_GiveItem_ItemIndex_int val = Inventory_GiveItem_ItemIndex_int; <>O.<0>__Inventory_GiveItem_ItemIndex_int = val; obj = (object)val; } Inventory.GiveItem_ItemIndex_int += (hook_GiveItem_ItemIndex_int)obj; object obj2 = <>O.<1>__ContagiousItemManager_Init; if (obj2 == null) { hook_Init val2 = ContagiousItemManager_Init; <>O.<1>__ContagiousItemManager_Init = val2; obj2 = (object)val2; } ContagiousItemManager.Init += (hook_Init)obj2; } private static void Inventory_GiveItem_ItemIndex_int(orig_GiveItem_ItemIndex_int orig, Inventory self, ItemIndex contaminator, int contaminatorCount) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_009b: 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_002e: 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_0036: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) if (toBeCheckedIndex.Contains(contaminator)) { transformedToOriginal.TryGetValue(contaminator, out var value); foreach (ItemIndex item in value) { int itemCount = self.GetItemCount(item); if (itemCount > 0) { self.RemoveItem(item, itemCount); contaminatorCount += itemCount; CharacterMaster component = ((Component)self).GetComponent<CharacterMaster>(); if (Object.op_Implicit((Object)(object)component)) { CharacterMasterNotificationQueue.SendTransformNotification(component, item, contaminator, (TransformationType)1); } } } } orig.Invoke(self, contaminator, contaminatorCount); } private static void ContagiousItemManager_Init(orig_Init orig) { InitiateContaminationPairs(); orig.Invoke(); } private static void InitiateContaminationPairs() { AddContaminationPair(Items.CloverVoid, ItemFactory.Benalu); AddContaminationPair(Items.BleedOnHitVoid, ItemFactory.DelayedDoom); AddContaminationPair(Items.CritGlassesVoid, ItemFactory.Magnifier); AddContaminationPair(Items.EquipmentMagazineVoid, ItemFactory.Multicast); AddContaminationPair(Items.MushroomVoid, ItemFactory.FlyingFungus); AddContaminationPair(Items.VoidMegaCrabItem, ItemFactory.LivingRobot); AddContaminationPair(Items.MissileVoid, ItemFactory.SacredMissile); AddContaminationPair(Items.ExtraLifeVoid, ItemFactory.FaultyEgo); AddContaminationPair(Items.ElementalRingVoid, Items.FireRing); AddContaminationPair(Items.ElementalRingVoid, Items.IceRing); AddContaminationPair(Items.BearVoid, ItemFactory.CatastrophicEra); AddContaminationPair(Items.SlowOnHitVoid, ItemFactory.HypnoBauble); AddContaminationPair(Items.ExplodeOnDeathVoid, ItemFactory.Illumination); AddContaminationPair(Items.ChainLightningVoid, ItemFactory.Guitar); } private static void AddContaminationPair(ItemDef itemDef1, ItemDef itemDef2) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_004d: 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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0096: 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_0079: 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_00b0: 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) ItemIndex val = ItemCatalog.FindItemIndex(((Object)itemDef1).name); ItemIndex val2 = ItemCatalog.FindItemIndex(((Object)itemDef2).name); List<ItemIndex> value = null; if (transformedToOriginal.TryGetValue(val, out value)) { value.Add(val2); transformedToOriginal[val] = value; } else { transformedToOriginal.Add(val, new List<ItemIndex> { val2 }); } List<ItemIndex> value2 = null; if (transformedToOriginal.TryGetValue(val2, out value2)) { value.Add(val); transformedToOriginal[val2] = value2; } else { transformedToOriginal.Add(val2, new List<ItemIndex> { val }); } toBeCheckedIndex.Add(val); toBeCheckedIndex.Add(val2); } } } namespace HallowedPlugin.Buffs { public class BuffFactory { public static BuffDef affixHallowedBuff; public static BuffDef CatastrophicEraBuff; public static BuffDef CatastrophicEraLongerBuff; public static BuffDef CatastrophicEraCooldownBuff; public static BuffDef DelayedDoomBuff; public static BuffDef FaultyEgoBuff; public static BuffDef BurntFaultyEgoBuff; public static BuffDef FlyingFungusBuff; public static BuffDef GuitarBuff; public static BuffDef HypnoBaubleBuff; public static BuffDef IlluminationBuff; public static BuffDef DoublecastBuff; public static BuffDef TriplecastBuff; public static BuffDef CreateAffixHallowedBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) affixHallowedBuff = CreateBuff("AffixHallowed", isDebuff: false, Color.yellow, canStack: false, null, isHidden: true); GlobalEventManager.onCharacterDeathGlobal += AffixHallowedBuff_onCharacterDeathGlobal; EliteDef val = ScriptableObject.CreateInstance<EliteDef>(); return affixHallowedBuff; } private static void AffixHallowedBuff_onCharacterDeathGlobal(DamageReport obj) { //IL_000e: 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_003a: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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) CharacterBody victimBody = obj.victimBody; if (victimBody.HasBuff(affixHallowedBuff.buffIndex)) { Transform component = ((Component)victimBody).GetComponent<Transform>(); if ((Object)(object)component != (Object)null) { Vector3 val = Vector3.up * 1.5f + component.position; Vector3 val2 = Vector3.up * 1.5f + Vector3.forward * 1.5f; PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(ItemFactory.Magnifier.itemIndex), val, val2); } } } public static void InitiateBuffFactory() { CreateDoublecastBuff(); CreateTriplecastBuff(); CreateDelayedDoomBuff(); CreateFlyingFungusBuff(); CreateFaultyEgoBuff(); CreateCatastrophicEraBuff(); CreateHypnoBaubleBuff(); CreateIlluminationBuff(); CreateGuitarBuff(); } public static BuffDef CreateBuff(string name, bool isDebuff, Color buffColor, bool canStack, Sprite iconSprite, bool isHidden) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = name; val.isDebuff = isDebuff; val.buffColor = buffColor; val.canStack = canStack; val.iconSprite = iconSprite; val.isHidden = isHidden; ContentAddition.AddBuffDef(val); return val; } public static BuffDef CreateCatastrophicEraBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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_0030: 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_0059: 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) CatastrophicEraBuff = CreateBuff("Hallowed: Catastrophic Era Buff", isDebuff: false, Color.yellow, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBuffBearVoidReady.tif").WaitForCompletion(), isHidden: false); CatastrophicEraLongerBuff = CreateBuff("Hallowed: Catastrophic Era Buff, but longer", isDebuff: false, Color.white, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBuffBearVoidReady.tif").WaitForCompletion(), isHidden: false); CatastrophicEraCooldownBuff = CreateBuff("Hallowed: Catastrophic Era Cooldown Buff", isDebuff: false, Color.gray, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBuffBearVoidReady.tif").WaitForCompletion(), isHidden: false); return CatastrophicEraBuff; } public static BuffDef CreateDelayedDoomBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) DelayedDoomBuff = CreateBuff("Hallowed: Delayed Doom countdown", isDebuff: true, Color.black, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Bandit2/texBuffBanditSkullIcon.tif").WaitForCompletion(), isHidden: false); return DelayedDoomBuff; } public static BuffDef CreateFaultyEgoBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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_0030: 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) FaultyEgoBuff = CreateBuff("Hallowed: E.G.O!", isDebuff: false, Color.blue, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffOnFireIcon.tif").WaitForCompletion(), isHidden: false); BurntFaultyEgoBuff = CreateBuff("Hallowed: Burnt E.G.O", isDebuff: false, Color.black, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffOnFireIcon.tif").WaitForCompletion(), isHidden: false); return FaultyEgoBuff; } public static BuffDef CreateFlyingFungusBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) FlyingFungusBuff = CreateBuff("Hallowed: Healing flight", isDebuff: false, Color.yellow, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MushroomVoid/texBuffMushroomVoidIcon.tif").WaitForCompletion(), isHidden: false); return FlyingFungusBuff; } public static BuffDef CreateGuitarBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) GuitarBuff = CreateBuff("Hallowed: Guitar Buff", isDebuff: false, Color.yellow, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/ShockNearby/texBuffTeslaIcon.tif").WaitForCompletion(), isHidden: true); return GuitarBuff; } public static BuffDef CreateHypnoBaubleBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) HypnoBaubleBuff = CreateBuff("Hallowed: Fypno Bauble Buff", isDebuff: true, Color.yellow, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MushroomVoid/texBuffMushroomVoidIcon.tif").WaitForCompletion(), isHidden: true); return HypnoBaubleBuff; } public static BuffDef CreateIlluminationBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) IlluminationBuff = CreateBuff("Hallowed: Illumination Buff", isDebuff: false, Color.yellow, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MushroomVoid/texBuffMushroomVoidIcon.tif").WaitForCompletion(), isHidden: true); return IlluminationBuff; } public static BuffDef CreateDoublecastBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) DoublecastBuff = CreateBuff("Hallowed: Doublecast countdown", isDebuff: false, Color.gray, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EnergizedOnEquipmentUse/texBuffWarHornIcon.tif").WaitForCompletion(), isHidden: false); return DoublecastBuff; } public static BuffDef CreateTriplecastBuff() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //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) TriplecastBuff = CreateBuff("Hallowed: Triplecast countdown", isDebuff: false, Color.white, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EnergizedOnEquipmentUse/texBuffWarHornIcon.tif").WaitForCompletion(), isHidden: false); return TriplecastBuff; } } public class BuffDefWithAttacker : BuffDef { public GameObject attacker; public BuffDefWithAttacker() { attacker = null; } public BuffDefWithAttacker(GameObject attacker) { this.attacker = attacker; } } } namespace HallowedPlugin.Assets { internal static class AssetFactory { internal struct ItemAssets { public GameObject pickup; public Sprite icon; } internal static ItemAssets OgreCellAssets; internal static ItemAssets MagnifierAssets; internal static ItemAssets FFungusAssets; internal static ItemAssets IlluminationAssets; internal static void InitiateAssets() { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HallowedPlugin.hallowedmod"); AssetBundle val = AssetBundle.LoadFromStream(stream); OgreCellAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/OgreCell/OgreCellPickup.prefab"); OgreCellAssets.icon = val.LoadAsset<Sprite>("Assets/Import/OgreCell/OgreCellIcon.png"); MagnifierAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/Magnifier/MagnifierPickup.prefab"); MagnifierAssets.icon = val.LoadAsset<Sprite>("Assets/Import/Magnifier/MagnifierIcon.png"); FFungusAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/FFungus/FFungusPickup.prefab"); FFungusAssets.icon = val.LoadAsset<Sprite>("Assets/Import/FFungus/FFungusIcon.png"); IlluminationAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/InnerFlame/InnerFlamePickup.prefab"); IlluminationAssets.icon = val.LoadAsset<Sprite>("Assets/Import/InnerFlame/InnerFlameIcon.png"); } } }