Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Quality v0.7.4
patchers/Quality/ItemQualities.Patcher.dll
Decompiled a week agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx.Logging; using Mono.Cecil; using Mono.Collections.Generic; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace ItemQualitiesPatcher; internal static class AssemblyNames { public const string RoR2 = "RoR2.dll"; } public static class BuffPatcher { private static readonly LogWriter _log = new LogWriter(); public static IEnumerable<string> TargetDLLs { get; } = new string[1] { "RoR2.dll" }; public static void Initialize() { _log.SetLogSource(Logger.CreateLogSource("BuffPatcher")); } public static void Patch(AssemblyDefinition assembly) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) TypeDefinition type = assembly.MainModule.GetType("RoR2.CharacterBody"); if (type == null) { _log.Error("Failed to find type: CharacterBody"); return; } Enumerator<MethodDefinition> enumerator = type.Methods.GetEnumerator(); try { while (enumerator.MoveNext()) { MethodDefinition current = enumerator.Current; if (((MemberReference)current).Name == "GetBuffCount" || ((MemberReference)current).Name == "HasBuff") { disableInlining(current); } } } finally { ((IDisposable)enumerator).Dispose(); } } private static void disableInlining(MethodDefinition method) { //IL_0002: 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_0014: 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) method.ImplAttributes = (MethodImplAttributes)(method.ImplAttributes & 0xFEFF); method.ImplAttributes = (MethodImplAttributes)(method.ImplAttributes | 8); _log.Debug("Disabled inlining for method " + ((MemberReference)method).FullName); } } internal sealed class LogWriter { private ManualLogSource _logSource; public LogWriter(ManualLogSource logSource) { _logSource = logSource; } public LogWriter() : this(null) { } public void SetLogSource(ManualLogSource logSource) { _logSource = logSource; } public void Fatal(object message) { ManualLogSource logSource = _logSource; if (logSource != null) { logSource.LogFatal(message); } } public void Error(object message) { ManualLogSource logSource = _logSource; if (logSource != null) { logSource.LogError(message); } } public void Warning(object message) { ManualLogSource logSource = _logSource; if (logSource != null) { logSource.LogWarning(message); } } public void Message(object message) { ManualLogSource logSource = _logSource; if (logSource != null) { logSource.LogMessage(message); } } public void Info(object message) { ManualLogSource logSource = _logSource; if (logSource != null) { logSource.LogInfo(message); } } public void Debug(object message) { ManualLogSource logSource = _logSource; if (logSource != null) { logSource.LogDebug(message); } } }
plugins/Quality/ItemQualities.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using AK.Wwise; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Bandit2; using EntityStates.Barrel; using EntityStates.BossGroupHealNovaController; using EntityStates.BrotherMonster; using EntityStates.CaptainSupplyDrop; using EntityStates.Drifter; using EntityStates.Engi.Mine; using EntityStates.FalseSon; using EntityStates.FalseSonBoss; using EntityStates.FriendUnit; using EntityStates.GoldGat; using EntityStates.GolemMonster; using EntityStates.Halcyonite; using EntityStates.Headstompers; using EntityStates.ImpBossMonster; using EntityStates.JellyfishMonster; using EntityStates.JunkCube; using EntityStates.LaserTurbine; using EntityStates.Mage; using EntityStates.MinePod; using EntityStates.Missions.Goldshores; using EntityStates.MushroomShield; using EntityStates.ParentMonster; using EntityStates.QuestVolatileBattery; using EntityStates.ScavMonster; using EntityStates.Seeker; using EntityStates.SharedSufferingOrb; using EntityStates.SolusAmalgamator; using EntityStates.SurvivorPod.BatteryPanel; using EntityStates.TimedChest; using EntityStates.VagrantMonster; using EntityStates.VagrantNovaItem; using EntityStates.Vehicles; using HG; using HG.Coroutines; using HG.GeneralSerializer; using HG.Reflection; using IL.EntityStates; using IL.EntityStates.Bandit2; using IL.EntityStates.BrotherMonster; using IL.EntityStates.CaptainSupplyDrop; using IL.EntityStates.Chef; using IL.EntityStates.Drifter; using IL.EntityStates.Drone.DroneBombardment; using IL.EntityStates.Drone.DroneJunk; using IL.EntityStates.FalseSon; using IL.EntityStates.FalseSonBoss; using IL.EntityStates.GoldGat; using IL.EntityStates.GolemMonster; using IL.EntityStates.Halcyonite; using IL.EntityStates.Headstompers; using IL.EntityStates.ImpBossMonster; using IL.EntityStates.JellyfishMonster; using IL.EntityStates.JunkCube; using IL.EntityStates.Mage; using IL.EntityStates.ParentMonster; using IL.EntityStates.Railgunner.Weapon; using IL.EntityStates.RoboBallBoss.Weapon; using IL.EntityStates.ScavMonster; using IL.EntityStates.Seeker; using IL.EntityStates.SolusAmalgamator; using IL.EntityStates.TimedChest; using IL.EntityStates.VagrantMonster; using IL.EntityStates.VagrantNovaItem; using IL.RoR2; using IL.RoR2.Items; using IL.RoR2.Orbs; using IL.RoR2.Projectile; using IL.RoR2.Stats; using IL.RoR2.UI; using IL.RoR2.UI.LogBook; using IL.RoR2.VoidRaidCrab; using ItemQualities; using ItemQualities.Buffs; using ItemQualities.Config; using ItemQualities.ContentManagement; using ItemQualities.Equipments; using ItemQualities.Items; using ItemQualities.ModCompatibility; using ItemQualities.Networking; using ItemQualities.Orbs; using ItemQualities.Utilities; using ItemQualities.Utilities.Extensions; using KinematicCharacterController; using Mono.Cecil; using Mono.Cecil.Cil; using Mono.Collections.Generic; using MonoMod.Cil; using MonoMod.RuntimeDetour; using MonoMod.Utils; using On.EntityStates.Drifter; using On.EntityStates.FalseSon; using On.EntityStates.LaserTurbine; using On.EntityStates.Missions.Goldshores; using On.EntityStates.SurvivorPod.BatteryPanel; using On.EntityStates.TimedChest; using On.RoR2; using On.RoR2.Artifacts; using On.RoR2.Items; using On.RoR2.Orbs; using On.RoR2.Projectile; using On.RoR2.SolusWingGrid; using On.RoR2.Stats; using On.RoR2.UI; using On.RoR2.UI.LogBook; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Artifacts; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.DirectionalSearch; using RoR2.EntitlementManagement; using RoR2.ExpansionManagement; using RoR2.HudOverlay; using RoR2.Items; using RoR2.Navigation; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.SolusWingGrid; using RoR2.UI; using RoR2.UI.LogBook; using RoR2.VoidRaidCrab; using RoR2BepInExPack.GameAssetPaths.Version_1_39_0; using RoR2BepInExPack.GameAssetPathsBetter; using RoR2BepInExPack.Utilities; using ShaderSwapper; using TMPro; using Unity; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.Serialization; using UnityEngine.UI; using VultureHunter; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: NetworkCompatibility(/*Could not decode attribute arguments.*/)] [assembly: OptIn] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace EntityStates.SprintArmorDash { public sealed class SprintArmorDashBounce : EntityState { private static readonly SphereSearch _dashSphereSearch = new SphereSearch(); private static EffectIndex _hitEffectIndex = (EffectIndex)(-1); private CharacterBody _attachedBody; [NonSerialized] public Vector3 dashDirection; [NonSerialized] public Vector3 attackPos; [SystemInitializer(new Type[] { typeof(EffectCatalogUtils) })] private static void Init() { //IL_0005: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 _hitEffectIndex = EffectCatalogUtils.FindEffectIndex("OmniImpactVFX"); if ((int)_hitEffectIndex == -1) { Log.Warning("Failed to find hit effect index", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\EntityStates\\SprintArmorDash\\SprintArmorDashBounce.cs", "Init", 33); } } public override void OnSerialize(NetworkWriter writer) { //IL_0009: 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) ((EntityState)this).OnSerialize(writer); writer.Write(dashDirection); writer.Write(attackPos); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: 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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); dashDirection = reader.ReadVector3(); attackPos = reader.ReadVector3(); } public override void OnEnter() { //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Invalid comparison between Unknown and I4 //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_025b: 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_0265: Expected O, but got Unknown //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Expected O, but got Unknown //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnEnter(); NetworkedBodyAttachment component = ((EntityState)this).GetComponent<NetworkedBodyAttachment>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.attachedBody)) { return; } _attachedBody = component.attachedBody; if (((EntityState)this).isAuthority) { IPhysMotor obj; if (!Object.op_Implicit((Object)(object)_attachedBody.characterMotor)) { obj = ((Component)_attachedBody).GetComponent<IPhysMotor>(); } else { IPhysMotor characterMotor = (IPhysMotor)(object)_attachedBody.characterMotor; obj = characterMotor; } if (obj != null) { PhysForceInfo val = default(PhysForceInfo); ((PhysForceInfo)(ref val)).resetVelocity = true; val.force = new Vector3((0f - dashDirection.x) * 20f, 20f, (0f - dashDirection.z) * 20f); ((PhysForceInfo)(ref val)).ignoreGroundStick = true; ((PhysForceInfo)(ref val)).massIsOne = true; obj.ApplyForceImpulse(ref val); } base.outer.SetNextStateToMain(); } if (!NetworkServer.active) { return; } List<HurtBox> list = default(List<HurtBox>); DisposableRental<HurtBox, List<HurtBox>> val2 = CollectionPool<HurtBox, List<HurtBox>>.RentCollection(ref list); try { _dashSphereSearch.origin = _attachedBody.corePosition; _dashSphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; _dashSphereSearch.radius = _attachedBody.radius + 12f; _dashSphereSearch.RefreshCandidates(); _dashSphereSearch.FilterCandidatesByHurtBoxTeam(TeamMask.GetUnprotectedTeams(_attachedBody.teamComponent.teamIndex)); _dashSphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); _dashSphereSearch.GetHurtBoxes(list); _dashSphereSearch.ClearCandidates(); SetStateOnHurt val5 = default(SetStateOnHurt); foreach (HurtBox item in list) { if (Object.op_Implicit((Object)(object)item) && Object.op_Implicit((Object)(object)item.healthComponent) && Object.op_Implicit((Object)(object)item.healthComponent.body)) { if ((int)_hitEffectIndex != -1) { EffectData val3 = new EffectData { origin = ((Component)item).transform.position }; val3.SetHurtBoxReference(item); EffectManager.SpawnEffect(_hitEffectIndex, val3, true); } DamageInfo val4 = new DamageInfo { damage = 0f, attacker = ((Component)_attachedBody).gameObject, inflictor = ((EntityState)this).gameObject, procCoefficient = 0f, position = attackPos, crit = _attachedBody.RollCrit(), inflictedHurtbox = item, canRejectForce = false, physForceFlags = (PhysForceFlags)15 }; if (item.healthComponent.body.isChampion) { val4.force = Vector3.zero; } else { val4.force = dashDirection * 50f; } item.healthComponent.TakeDamageForce(val4, false, false); GlobalEventManager.instance.OnHitEnemy(val4, ((Component)item.healthComponent).gameObject); GlobalEventManager.instance.OnHitAll(val4, ((Component)item.healthComponent).gameObject); if (((Component)item.healthComponent).TryGetComponent<SetStateOnHurt>(ref val5) && val5.canBeStunned) { val5.SetStun(1f); Crowbar.HandleDelayedHit(((Component)_attachedBody).gameObject, ((Component)item).gameObject); } ItemQualityCounts itemCountsEffective = _attachedBody.inventory.GetItemCountsEffective(ItemQualitiesContent.ItemQualityGroups.SprintArmor); float num = itemCountsEffective.UncommonCount * 3 + itemCountsEffective.RareCount * 6 + itemCountsEffective.EpicCount * 9 + itemCountsEffective.LegendaryCount * 12; item.healthComponent.body.AddTimedBuff(ItemQualitiesContent.Buffs.SprintArmorWeaken, num); } } } finally { val2.Dispose(); } } } public sealed class SprintArmorDashDashingState : EntityState { private static readonly SphereSearch _dashSphereSearch = new SphereSearch(); private static GameObject _blinkPrefab; private CharacterBody _attachedBody; private IPhysMotor _motor; private Vector3 _dashDirection; private bool _stoppedDash; [SystemInitializer(new Type[] { })] private static void Init() { //IL_0005: 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) AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Huntress.HuntressBlinkEffect_prefab); handle.OnSuccess(delegate(GameObject prefab) { _blinkPrefab = prefab; }); } public override void OnEnter() { //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_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnEnter(); NetworkedBodyAttachment component = ((EntityState)this).GetComponent<NetworkedBodyAttachment>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.attachedBody)) { _attachedBody = component.attachedBody; _dashDirection = _attachedBody.inputBank.aimDirection; IPhysMotor motor; if (!Object.op_Implicit((Object)(object)_attachedBody.characterMotor)) { motor = ((Component)_attachedBody).GetComponent<IPhysMotor>(); } else { IPhysMotor characterMotor = (IPhysMotor)(object)_attachedBody.characterMotor; motor = characterMotor; } _motor = motor; if (((EntityState)this).isAuthority) { _attachedBody.isSprinting = true; } if (NetworkServer.active) { float num = _attachedBody.inventory.GetItemCountsEffective(ItemQualitiesContent.ItemQualityGroups.SprintArmor).HighestQuality switch { QualityTier.Uncommon => 20, QualityTier.Rare => 15, QualityTier.Epic => 10, QualityTier.Legendary => 5, _ => 30, }; _attachedBody.AddTimedBuff(ItemQualitiesContent.Buffs.SprintArmorDashCooldown.buffIndex, num); _attachedBody.AddTimedBuff(Buffs.IgnoreFallDamage.buffIndex, 0.3f); } EffectData val = new EffectData(); val.rotation = Util.QuaternionSafeLookRotation(_dashDirection); val.origin = _attachedBody.corePosition; EffectManager.SpawnEffect(_blinkPrefab, val, false); } } public override void FixedUpdate() { //IL_004b: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (!Object.op_Implicit((Object)(object)_attachedBody) || !((EntityState)this).isAuthority) { return; } _attachedBody.isSprinting = true; if (_motor != null) { PhysForceInfo val; if (((EntityState)this).fixedAge < 0.1f) { IPhysMotor motor = _motor; val = default(PhysForceInfo); ((PhysForceInfo)(ref val)).resetVelocity = true; val.force = _dashDirection * (Time.deltaTime * _attachedBody.moveSpeed * 1000f); ((PhysForceInfo)(ref val)).ignoreGroundStick = true; ((PhysForceInfo)(ref val)).massIsOne = true; motor.ApplyForceImpulse(ref val); } else if (!_stoppedDash) { _stoppedDash = true; IPhysMotor motor2 = _motor; val = default(PhysForceInfo); ((PhysForceInfo)(ref val)).resetVelocity = true; val.force = _dashDirection * (_attachedBody.moveSpeed * 3f); ((PhysForceInfo)(ref val)).ignoreGroundStick = true; ((PhysForceInfo)(ref val)).massIsOne = true; motor2.ApplyForceImpulse(ref val); } } if (((EntityState)this).fixedAge > 0.2f) { base.outer.SetNextStateToMain(); } tryAttack(); } private void tryAttack() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) List<HurtBox> list = default(List<HurtBox>); DisposableRental<HurtBox, List<HurtBox>> val = CollectionPool<HurtBox, List<HurtBox>>.RentCollection(ref list); try { _dashSphereSearch.origin = _attachedBody.corePosition; _dashSphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; _dashSphereSearch.radius = _attachedBody.radius + 3f; _dashSphereSearch.RefreshCandidates(); _dashSphereSearch.FilterCandidatesByHurtBoxTeam(TeamMask.GetUnprotectedTeams(_attachedBody.teamComponent.teamIndex)); _dashSphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); _dashSphereSearch.GetHurtBoxes(list); _dashSphereSearch.ClearCandidates(); if (list.Count > 0) { SprintArmorDashBounce sprintArmorDashBounce = new SprintArmorDashBounce(); sprintArmorDashBounce.attackPos = _attachedBody.corePosition; sprintArmorDashBounce.dashDirection = _dashDirection; base.outer.SetNextState((EntityState)(object)sprintArmorDashBounce); } } finally { val.Dispose(); } } } public sealed class SprintArmorDashIdle : EntityState { public static float DoubleTapWindow; private float _lastValidInputTime = float.NegativeInfinity; private CharacterBody _attachedBody; public override void OnEnter() { ((EntityState)this).OnEnter(); NetworkedBodyAttachment component = ((EntityState)this).GetComponent<NetworkedBodyAttachment>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.attachedBody)) { _attachedBody = component.attachedBody; } } public override void Update() { ((EntityState)this).Update(); if (Object.op_Implicit((Object)(object)_attachedBody) && ((EntityState)this).isAuthority) { UpdateAuthority(); } } private void UpdateAuthority() { if (!_attachedBody.HasBuff(ItemQualitiesContent.Buffs.SprintArmorDashCooldown) && ((ButtonState)(ref _attachedBody.inputBank.rawMoveUp)).justPressed) { if (((EntityState)this).age - _lastValidInputTime <= DoubleTapWindow) { base.outer.SetNextState((EntityState)(object)new SprintArmorDashDashingState()); } _lastValidInputTime = ((EntityState)this).age; } } } } namespace EntityStates.SharedSufferingOrb { public sealed class SharedSufferingOrbDeath : EntityState { private static GameObject _deathEffectPrefab; public static float ExplosionDamageCoefficient; public static float ExplosionForce; [ContentInitializer] private static IEnumerator LoadContent(ContentIntializerArgs args) { //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_002b: Unknown result type (might be due to invalid IL or missing references) AsyncOperationHandle<GameObject> handle = AddressableUtil.LoadTempAssetAsync<GameObject>(RoR2_Base_WeeklyRun.TimeCrystalDeath_prefab); handle.OnSuccess(delegate(GameObject timeCrystalDeath) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown _deathEffectPrefab = PrefabAPI.InstantiateClone(timeCrystalDeath, "SharedSufferingOrbDeathEffect", false); args.ContentPack.effectDefs.Add<EffectDef>(new EffectDef(_deathEffectPrefab)); }); return handle.AsProgressCoroutine<GameObject>(args.ProgressReceiver); } public override void OnEnter() { ((EntityState)this).OnEnter(); explode(); } private void explode() { //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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00b7: Expected O, but got Unknown //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: 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_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020a: 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) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Expected O, but got Unknown //IL_0247: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator)) { if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator.modelBaseTransform)) { EntityState.Destroy((Object)(object)((Component)((EntityState)this).modelLocator.modelBaseTransform).gameObject); } if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator.modelTransform)) { EntityState.Destroy((Object)(object)((Component)((EntityState)this).modelLocator.modelTransform).gameObject); } } SharedSufferingOrbController component = ((EntityState)this).GetComponent<SharedSufferingOrbController>(); float num = (Object.op_Implicit((Object)(object)component) ? component.BlastRadius : 0f); if (Object.op_Implicit((Object)(object)_deathEffectPrefab)) { EffectManager.SpawnEffect(_deathEffectPrefab, new EffectData { origin = ((EntityState)this).transform.position, scale = num, rotation = Quaternion.identity }, false); } if (NetworkServer.active) { GenericOwnership component2 = ((EntityState)this).GetComponent<GenericOwnership>(); GameObject val = (Object.op_Implicit((Object)(object)component2) ? component2.ownerObject : null); CharacterBody val2 = (Object.op_Implicit((Object)(object)val) ? val.GetComponent<CharacterBody>() : null); TeamIndex val3 = (TeamIndex)((!Object.op_Implicit((Object)(object)val2)) ? (-1) : ((int)val2.teamComponent.teamIndex)); Vector3 position = ((EntityState)this).transform.position; float damage = ExplosionDamageCoefficient * (Object.op_Implicit((Object)(object)val2) ? val2.damage : Run.instance.teamlessDamageCoefficient); foreach (CharacterBody readOnlyInstances in CharacterBody.readOnlyInstancesList) { if (FriendlyFireManager.ShouldSplashHitProceed(readOnlyInstances.healthComponent, val3) && !((Object)(object)readOnlyInstances == (Object)(object)val2) && !((Object)(object)readOnlyInstances == (Object)(object)((EntityState)this).characterBody) && !(Vector3.Distance(readOnlyInstances.corePosition, position) >= num)) { DamageInfo val4 = new DamageInfo { attacker = val, inflictor = ((EntityState)this).gameObject, damage = damage, crit = (Object.op_Implicit((Object)(object)val2) && val2.RollCrit()), damageType = DamageTypeCombo.op_Implicit((DamageType)131072), damageColorIndex = (DamageColorIndex)16, procCoefficient = 0f, position = position }; float explosionForce = ExplosionForce; Vector3 val5 = readOnlyInstances.corePosition - position; val4.force = explosionForce * ((Vector3)(ref val5)).normalized + ExplosionForce * 0.5f * Vector3.up; DamageInfo val6 = val4; DamageAPI.AddModdedDamageType(ref val6.damageType, DamageTypes.ForceAddToSharedSuffering); readOnlyInstances.healthComponent.TakeDamage(val6); GlobalEventManager.instance.OnHitEnemy(val6, ((Component)readOnlyInstances).gameObject); GlobalEventManager.instance.OnHitAll(val6, ((Component)readOnlyInstances).gameObject); } } } EntityState.Destroy((Object)(object)((EntityState)this).gameObject); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)9; } } } namespace EntityStates.QuestVolatileBattery { public class QuestVolatileBatteryQualityMonitor : QuestVolatileBatteryBaseState { [NonSerialized] public static GameObject qualityBatteryPreDet; private GameObject _vfxInstance; [ContentInitializer] private static IEnumerator LoadContent(ContentIntializerArgs args) { //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_002b: Unknown result type (might be due to invalid IL or missing references) AsyncOperationHandle<GameObject> handle = AddressableUtil.LoadTempAssetAsync<GameObject>(RoR2_Base_QuestVolatileBattery.VolatileBatteryPreDetonation_prefab); handle.OnSuccess(delegate(GameObject VolatileBatteryPreDetPrefab) { //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) qualityBatteryPreDet = PrefabAPI.InstantiateClone(VolatileBatteryPreDetPrefab, "QualityVolatileBatteryPreDet", false); ShakeEmitter val = default(ShakeEmitter); if (qualityBatteryPreDet.TryGetComponent<ShakeEmitter>(ref val)) { Object.Destroy((Object)(object)val); } LoopSound val2 = default(LoopSound); if (qualityBatteryPreDet.TryGetComponent<LoopSound>(ref val2)) { Object.Destroy((Object)(object)val2); } Transform val3 = qualityBatteryPreDet.transform.Find("PP"); if (Object.op_Implicit((Object)(object)val3)) { Object.Destroy((Object)(object)((Component)val3).gameObject); } Transform val4 = qualityBatteryPreDet.transform.Find("LightShafts"); if (Object.op_Implicit((Object)(object)val4)) { Object.Destroy((Object)(object)((Component)val4).gameObject); } Transform val5 = qualityBatteryPreDet.transform.Find("Pulse"); if (Object.op_Implicit((Object)(object)val5)) { Object.Destroy((Object)(object)((Component)val5).gameObject); } if (Object.op_Implicit((Object)(object)qualityBatteryPreDet.transform.Find("Lightning"))) { Object.Destroy((Object)(object)((Component)val5).gameObject); } if (Object.op_Implicit((Object)(object)qualityBatteryPreDet.transform.Find("Flames"))) { Object.Destroy((Object)(object)((Component)val5).gameObject); } if (Object.op_Implicit((Object)(object)qualityBatteryPreDet.transform.Find("ShakeEmitter"))) { Object.Destroy((Object)(object)((Component)val5).gameObject); } if (Object.op_Implicit((Object)(object)qualityBatteryPreDet.transform.Find("Mesh Pulse"))) { Object.Destroy((Object)(object)((Component)val5).gameObject); } Transform val6 = qualityBatteryPreDet.transform.Find("Sparks, Trail"); ParticleSystem val7 = default(ParticleSystem); if (Object.op_Implicit((Object)(object)val6) && ((Component)val6).TryGetComponent<ParticleSystem>(ref val7)) { MainModule main = val7.main; ((MainModule)(ref main)).simulationSpeed = 0.5f; EmissionModule emission = val7.emission; ((EmissionModule)(ref emission)).rateOverTimeMultiplier = 10f; } args.ContentPack.prefabs.Add<GameObject>(qualityBatteryPreDet); }); return handle.AsProgressCoroutine<GameObject>(args.ProgressReceiver); } public override void OnEnter() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) ((QuestVolatileBatteryBaseState)this).OnEnter(); _vfxInstance = Object.Instantiate<GameObject>(qualityBatteryPreDet, ((QuestVolatileBatteryBaseState)this).networkedBodyAttachment.attachedBody.transform); _vfxInstance.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); _vfxInstance.transform.localScale = Vector3.one * ((QuestVolatileBatteryBaseState)this).networkedBodyAttachment.attachedBody.bestFitActualRadius; } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)_vfxInstance)) { EntityState.Destroy((Object)(object)_vfxInstance); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active) { FixedUpdateServer(); } } private void FixedUpdateServer() { if (Object.op_Implicit((Object)(object)((QuestVolatileBatteryBaseState)this).attachedHealthComponent) && ((QuestVolatileBatteryBaseState)this).attachedHealthComponent.combinedHealthFraction <= 0.5f) { ((EntityState)this).outer.SetNextState((EntityState)(object)new QuestVolatileBatteryQualityCountDown()); } } } public class QuestVolatileBatteryQualityCountDown : QuestVolatileBatteryBaseState { public static float duration; public static float explosionRadius; private GameObject _vfxInstance; [NonSerialized] public static GameObject vfxPrefab; [SystemInitializer(new Type[] { })] private static void Init() { //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) AsyncOperationHandle<GameObject> handle = AddressableUtil.LoadAssetAsync<GameObject>(RoR2_Base_QuestVolatileBattery.VolatileBatteryPreDetonation_prefab, (AsyncReferenceHandleUnloadType)2); handle.OnSuccess(delegate(GameObject VolatileBatteryPreDetonation) { vfxPrefab = VolatileBatteryPreDetonation; }); } public override void OnEnter() { //IL_0046: 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_0066: 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) ((QuestVolatileBatteryBaseState)this).OnEnter(); if (Object.op_Implicit((Object)(object)vfxPrefab) && Object.op_Implicit((Object)(object)((QuestVolatileBatteryBaseState)this).networkedBodyAttachment.attachedBody)) { GameObject val = Object.Instantiate<GameObject>(vfxPrefab, ((QuestVolatileBatteryBaseState)this).networkedBodyAttachment.attachedBody.transform); val.transform.localPosition = Vector3.zero; val.transform.localRotation = Quaternion.identity; val.transform.localScale = Vector3.one * ((QuestVolatileBatteryBaseState)this).networkedBodyAttachment.attachedBody.bestFitActualRadius; _vfxInstance = val; } } public override void OnExit() { if (Object.op_Implicit((Object)(object)_vfxInstance)) { EntityState.Destroy((Object)(object)_vfxInstance); } ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active) { FixedUpdateServer(); } } private void FixedUpdateServer() { if (((EntityState)this).fixedAge >= duration) { ItemQualities.Equipments.QuestVolatileBattery.Detonate(((EntityState)this).gameObject, isPickup: false); } } } } namespace EntityStates.MushroomShield { public abstract class MushroomBubbleBaseState : EntityState { [NonSerialized] public float EffectRadius; public override void OnSerialize(NetworkWriter writer) { ((EntityState)this).OnSerialize(writer); writer.Write(EffectRadius); } public override void OnDeserialize(NetworkReader reader) { ((EntityState)this).OnDeserialize(reader); EffectRadius = reader.ReadSingle(); } public override void ModifyNextState(EntityState nextState) { ((EntityState)this).ModifyNextState(nextState); if (nextState is MushroomBubbleBaseState mushroomBubbleBaseState) { mushroomBubbleBaseState.EffectRadius = EffectRadius; } } public abstract void Undeploy(bool immediate); } public sealed class MushroomBubbleDeploy : MushroomBubbleBaseState { public static string StartSoundString; private CharacterBody _ownerBody; private float _startMoveStopwatchValue; private float _undeployLifetime; public override void OnEnter() { //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnEnter(); Util.PlaySound(StartSoundString, ((EntityState)this).gameObject); GenericOwnership component = ((EntityState)this).GetComponent<GenericOwnership>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component.ownerObject)) { return; } _ownerBody = component.ownerObject.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)_ownerBody) && Object.op_Implicit((Object)(object)_ownerBody.inventory)) { ItemQualityCounts itemCountsEffective = _ownerBody.inventory.GetItemCountsEffective(ItemQualitiesContent.ItemQualityGroups.Mushroom); _undeployLifetime = itemCountsEffective.UncommonCount + 3 * itemCountsEffective.RareCount + 6 * itemCountsEffective.EpicCount + 12 * itemCountsEffective.LegendaryCount; float num = 30f; switch (itemCountsEffective.HighestQuality) { case QualityTier.Uncommon: num = 30f; break; case QualityTier.Rare: num = 25f; break; case QualityTier.Epic: num = 20f; break; case QualityTier.Legendary: num = 15f; break; } EffectRadius = num; ((EntityState)this).transform.localScale = Vector3.one * (num / 20f); _startMoveStopwatchValue = _ownerBody.notMovingStopwatch; } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && (!Object.op_Implicit((Object)(object)_ownerBody) || !Object.op_Implicit((Object)(object)_ownerBody.healthComponent) || !_ownerBody.healthComponent.alive || _ownerBody.notMovingStopwatch < _startMoveStopwatchValue)) { Undeploy(immediate: false); } } public override void Undeploy(bool immediate) { if (((EntityState)this).isAuthority) { if (immediate) { ((EntityState)this).outer.SetNextState((EntityState)(object)new MushroomBubbleFlashOut()); return; } ((EntityState)this).outer.SetNextState((EntityState)(object)new MushroomBubbleUndeploy { Duration = _undeployLifetime }); } } } public sealed class MushroomBubbleFlashOut : MushroomBubbleBaseState { private static EffectIndex _bubbleShieldEndEffect = (EffectIndex)(-1); public static string EndSoundString; public static float Duration; private BeginRapidlyActivatingAndDeactivating _blinkController; [SystemInitializer(new Type[] { typeof(EffectCatalogUtils) })] private static void Init() { //IL_0005: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 _bubbleShieldEndEffect = EffectCatalogUtils.FindEffectIndex("BubbleShieldEndEffect"); if ((int)_bubbleShieldEndEffect == -1) { Log.Warning("Failed to find charge effect index", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\EntityStates\\MushroomShield\\MushroomBubbleFlashOut.cs", "Init", 16); } } public override void OnEnter() { ((EntityState)this).OnEnter(); _blinkController = ((EntityState)this).GetComponent<BeginRapidlyActivatingAndDeactivating>(); if (Object.op_Implicit((Object)(object)_blinkController)) { _blinkController.delayBeforeBeginningBlinking = 0f; _blinkController.fixedAge = 0f; ((Behaviour)_blinkController).enabled = true; } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= Duration) { EntityState.Destroy((Object)(object)((EntityState)this).gameObject); } } public override void OnExit() { //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_0010: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown ((EntityState)this).OnExit(); EffectManager.SpawnEffect(_bubbleShieldEndEffect, new EffectData { origin = ((EntityState)this).transform.position, rotation = ((EntityState)this).transform.rotation, scale = EffectRadius }, false); Util.PlaySound(EndSoundString, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)_blinkController)) { ((Behaviour)_blinkController).enabled = false; } } public override void Undeploy(bool immediate) { } } public sealed class MushroomBubbleUndeploy : MushroomBubbleBaseState { [NonSerialized] public float Duration; public override void OnSerialize(NetworkWriter writer) { base.OnSerialize(writer); writer.Write(Duration); } public override void OnDeserialize(NetworkReader reader) { base.OnDeserialize(reader); Duration = reader.ReadSingle(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= Duration - MushroomBubbleFlashOut.Duration) { Undeploy(immediate: true); } } public override void Undeploy(bool immediate) { if (((EntityState)this).isAuthority && immediate) { ((EntityState)this).outer.SetNextState((EntityState)(object)new MushroomBubbleFlashOut()); } } } } namespace EntityStates.FriendUnit { public sealed class FriendUnitPunt : BaseState { public static float BaseVelocity; public static float MaxLockOnAngle; public static float MaxDistance; public static float LaunchHorizontalSpeedMultiplier; public static string PuntSound; [NonSerialized] public GameObject Punter; [NonSerialized] public Ray AimRay; public override void OnSerialize(NetworkWriter writer) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnSerialize(writer); writer.Write(Punter); writer.Write(AimRay); } public override void OnDeserialize(NetworkReader reader) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); Punter = reader.ReadGameObject(); AimRay = reader.ReadRay(); } public override void OnEnter() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004d: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_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_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_009a: 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) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Expected O, but got Unknown if (((EntityState)this).isAuthority) { ((EntityState)this).characterBody.isSprinting = true; } ((BaseState)this).OnEnter(); if (((EntityState)this).isAuthority) { CharacterBody val = (Object.op_Implicit((Object)(object)Punter) ? Punter.GetComponent<CharacterBody>() : null); BullseyeSearch val2 = new BullseyeSearch { searchOrigin = ((Ray)(ref AimRay)).origin, searchDirection = ((Ray)(ref AimRay)).direction, viewer = val, filterByLoS = true, filterByDistinctEntity = true, maxAngleFilter = MaxLockOnAngle, maxDistanceFilter = MaxDistance, sortMode = (SortMode)2, queryTriggerInteraction = (QueryTriggerInteraction)1, teamMaskFilter = TeamMask.GetEnemyTeams(TeamComponent.GetObjectTeam(Punter)) }; val2.RefreshCandidates(); IPhysMotor val3 = null; if (Object.op_Implicit((Object)(object)val)) { IPhysMotor obj; if (!Object.op_Implicit((Object)(object)val.characterMotor)) { obj = ((Component)val).GetComponent<IPhysMotor>(); } else { IPhysMotor characterMotor = (IPhysMotor)(object)val.characterMotor; obj = characterMotor; } val3 = obj; } Vector3 val4 = Vector3.zero; if (val3 != null) { val4 = val3.velocity; } Vector3 val5 = val4; val5.y = 0f; float num = ((Vector3)(ref val5)).magnitude + BaseVelocity + base.moveSpeedStat * LaunchHorizontalSpeedMultiplier; Vector3 force = ((Ray)(ref AimRay)).direction * num; using (IEnumerator<HurtBox> enumerator = val2.GetResults().GetEnumerator()) { if (enumerator.MoveNext()) { HurtBox current = enumerator.Current; force = Trajectory.CalculateInitialVelocityFromHSpeed(((EntityState)this).transform.position, ((Component)current).transform.position, num, 0f, float.PositiveInfinity); } } CharacterMotor characterMotor2 = ((EntityState)this).characterMotor; PhysForceInfo val6 = new PhysForceInfo { force = force }; ((PhysForceInfo)(ref val6)).massIsOne = true; ((PhysForceInfo)(ref val6)).disableAirControlUntilCollision = true; ((PhysForceInfo)(ref val6)).resetVelocity = true; ((PhysForceInfo)(ref val6)).ignoreGroundStick = true; characterMotor2.ApplyForceImpulse(ref val6); ((EntityState)this).characterMotor.onMovementHit += new MovementHitDelegate(onMovementHit); } Util.PlaySound(PuntSound, ((EntityState)this).gameObject); } public override void OnExit() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ((EntityState)this).OnExit(); if (((EntityState)this).isAuthority) { ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).characterMotor.onMovementHit -= new MovementHitDelegate(onMovementHit); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { ((EntityState)this).characterBody.isSprinting = true; } } private void onMovementHit(ref MovementHitInfo movementHitInfo) { //IL_0019: 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).outer.SetNextState((EntityState)(object)new FriendUnitPuntImpact { Punter = Punter, ImpactPoint = movementHitInfo.hitPoint, ImpactNormal = movementHitInfo.hitNormal, ImpactVelocity = movementHitInfo.velocity, DamageMultiplierFromSpeed = Mathf.Max(1f, ((Vector3)(ref movementHitInfo.velocity)).magnitude / base.moveSpeedStat) }); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)7; } } public sealed class FriendUnitPuntImpact : BaseState { private static EffectIndex _explosionEffectIndex = (EffectIndex)(-1); public static float ImpactBounciness; public static string ImpactSoundString; public static float ReturnVelocityMaxAngleDelta; public static float ReturnVelocityMaxMagnitudeMultiplier = 1f; [NonSerialized] public GameObject Punter; [NonSerialized] public Vector3 ImpactPoint; [NonSerialized] public Vector3 ImpactNormal; [NonSerialized] public Vector3 ImpactVelocity; [NonSerialized] public float DamageMultiplierFromSpeed; [SystemInitializer(new Type[] { typeof(EffectCatalogUtils) })] private static void Init() { //IL_0005: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 _explosionEffectIndex = EffectCatalogUtils.FindEffectIndex("OmniExplosionVFXRoboBallDeath"); if ((int)_explosionEffectIndex == -1) { Log.Error("Failed to find explosion effect index", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\EntityStates\\FriendUnit\\FriendUnitPuntImpact.cs", "Init", 21); } } public override void OnSerialize(NetworkWriter writer) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnSerialize(writer); writer.Write(Punter); writer.Write(ImpactPoint); writer.Write(ImpactNormal); writer.Write(ImpactVelocity); writer.Write(DamageMultiplierFromSpeed); } public override void OnDeserialize(NetworkReader reader) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_0032: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); Punter = reader.ReadGameObject(); ImpactPoint = reader.ReadVector3(); ImpactNormal = reader.ReadVector3(); ImpactVelocity = reader.ReadVector3(); DamageMultiplierFromSpeed = reader.ReadSingle(); } public override void OnEnter() { //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: 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) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_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_0162: 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: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_0370: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Expected O, but got Unknown //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Invalid comparison between Unknown and I4 //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Expected O, but got Unknown ((BaseState)this).OnEnter(); if (NetworkServer.active) { CharacterMaster master = ((EntityState)this).characterBody.master; ItemQualityCounts itemQualityCounts = default(ItemQualityCounts); if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)master.minionOwnership.ownerMaster) && Object.op_Implicit((Object)(object)master.minionOwnership.ownerMaster.inventory)) { itemQualityCounts = master.minionOwnership.ownerMaster.inventory.GetItemCountsEffective(ItemQualitiesContent.ItemQualityGroups.PhysicsProjectile); } if (itemQualityCounts.TotalQualityCount == 0) { itemQualityCounts.UncommonCount = 1; } float num; switch (itemQualityCounts.HighestQuality) { case QualityTier.Uncommon: num = 4f; break; case QualityTier.Rare: num = 6f; break; case QualityTier.Epic: num = 8f; break; case QualityTier.Legendary: num = 10f; break; default: Log.Error($"Quality tier {itemQualityCounts.HighestQuality} is not implemented", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\EntityStates\\FriendUnit\\FriendUnitPuntImpact.cs", "OnEnter", 101); num = 1f; break; } float radius = 10f * (float)itemQualityCounts.UncommonCount + 15f * (float)itemQualityCounts.RareCount + 25f * (float)itemQualityCounts.EpicCount + 35f * (float)itemQualityCounts.LegendaryCount; radius = ExplodeOnDeath.GetExplosionRadius(radius, ((EntityState)this).characterBody); BlastAttack val = new BlastAttack { position = ImpactPoint, radius = radius, baseDamage = num * base.damageStat * DamageMultiplierFromSpeed, damageType = new DamageTypeCombo(DamageTypeCombo.op_Implicit((DamageType)32), (DamageTypeExtended)0, (DamageSource)1), crit = ((BaseState)this).RollCrit(), attacker = (Object.op_Implicit((Object)(object)Punter) ? Punter : ((EntityState)this).gameObject), inflictor = ((EntityState)this).gameObject, attackerFiltering = (AttackerFiltering)2, damageColorIndex = (DamageColorIndex)3, falloffModel = (FalloffModel)3, procCoefficient = 1f, teamIndex = ((BaseState)this).GetTeam() }; val.Fire(); if ((int)_explosionEffectIndex != -1) { EffectManager.SpawnEffect(_explosionEffectIndex, new EffectData { origin = val.position, scale = val.radius }, true); } } Util.PlaySound(ImpactSoundString, ((EntityState)this).gameObject); EffectManager.SimpleImpactEffect(KineticAura.knockbackEffectPrefab, ImpactPoint, -ImpactNormal, false); if (!((EntityState)this).isAuthority) { return; } if (ImpactVelocity == Vector3.zero) { ImpactVelocity = ((EntityState)this).characterMotor.velocity; } Vector3 val3; if (ImpactNormal != Vector3.zero) { Vector3 val2 = Vector3.Reflect(((Vector3)(ref ImpactVelocity)).normalized, ImpactNormal); float num2 = ((Vector3)(ref ImpactVelocity)).magnitude * ImpactBounciness; val3 = val2 * num2; } else { val3 = ((EntityState)this).characterMotor.velocity * (0f - ImpactBounciness); } if (Object.op_Implicit((Object)(object)Punter)) { Vector3 val4 = Trajectory.CalculateInitialVelocityFromHSpeed(((EntityState)this).transform.position, Punter.transform.position, ((Vector3)(ref ImpactVelocity)).magnitude, 0f, float.PositiveInfinity); float num3 = Mathf.Min(((Vector3)(ref val4)).magnitude / ((Vector3)(ref val3)).magnitude, ReturnVelocityMaxMagnitudeMultiplier); Quaternion val5 = Quaternion.identity; if (ReturnVelocityMaxAngleDelta > 0f) { val5 = Quaternion.FromToRotation(val3, val4); Vector3 val6 = default(Vector3); float num4 = default(float); ((Quaternion)(ref val5)).ToAngleAxis(ref num4, ref val6); num4 = Mathf.MoveTowardsAngle(0f, num4, ReturnVelocityMaxAngleDelta); val5 = Quaternion.AngleAxis(num4, val6); } val3 = val5 * val3 * num3; } CharacterMotor characterMotor = ((EntityState)this).characterMotor; PhysForceInfo val7 = new PhysForceInfo { force = val3 }; ((PhysForceInfo)(ref val7)).resetVelocity = true; ((PhysForceInfo)(ref val7)).disableAirControlUntilCollision = true; ((PhysForceInfo)(ref val7)).ignoreGroundStick = true; ((PhysForceInfo)(ref val7)).massIsOne = true; characterMotor.ApplyForceImpulse(ref val7); ((EntityState)this).outer.SetNextStateToMain(); } } } namespace EntityStates.BossGroupHealNovaController { public sealed class BossGroupHealNovaPulse : EntityState { private sealed class HealPulse { private readonly HashSet<HealthComponent> _healedTargets = new HashSet<HealthComponent>(); private readonly SphereSearch _sphereSearch; private readonly float _duration; private readonly float _finalRadius; private readonly float _healFractionValue; private readonly TeamMask _teamMask; private readonly List<HurtBox> _hurtBoxesList = new List<HurtBox>(); private float _timeElapsed; public HealPulse(Vector3 origin, float finalRadius, float healFractionValue, float duration, TeamIndex teamIndex) { //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_0028: 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_0032: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_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_0050: Expected O, but got Unknown //IL_006c: 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) _sphereSearch = new SphereSearch { mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask, origin = origin, queryTriggerInteraction = (QueryTriggerInteraction)2, radius = 0f }; _finalRadius = finalRadius; _healFractionValue = healFractionValue; _duration = duration; _teamMask = default(TeamMask); ((TeamMask)(ref _teamMask)).AddTeam(teamIndex); } public void Update(float deltaTime) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) _timeElapsed += deltaTime; float num = Mathf.Clamp01(_timeElapsed / _duration); _sphereSearch.radius = _finalRadius * NovaRadiusCurve.Evaluate(num); _sphereSearch.RefreshCandidates().FilterCandidatesByHurtBoxTeam(_teamMask).FilterCandidatesByDistinctHurtBoxEntities() .GetHurtBoxes(_hurtBoxesList); foreach (HurtBox hurtBoxes in _hurtBoxesList) { if (_healedTargets.Add(hurtBoxes.healthComponent)) { healTarget(hurtBoxes.healthComponent); } } _hurtBoxesList.Clear(); } private void healTarget(HealthComponent target) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) target.HealFraction(_healFractionValue, default(ProcChainMask)); Util.PlaySound("Play_item_proc_TPhealingNova_hitPlayer", ((Component)target).gameObject); } } public static AnimationCurve NovaRadiusCurve; public static float GrowDuration; public static float LingerDuration; private float _totalDuration; private Transform _effectTransform; private HealPulse _healPulse; private float _radius; public override void OnEnter() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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) ((EntityState)this).OnEnter(); _totalDuration = GrowDuration + LingerDuration; BossGroupHealNovaSpawner bossGroupHealNovaSpawner = default(BossGroupHealNovaSpawner); if (Object.op_Implicit((Object)(object)((EntityState)this).transform.parent) && ((Component)((EntityState)this).transform.parent).TryGetComponent<BossGroupHealNovaSpawner>(ref bossGroupHealNovaSpawner)) { _radius = bossGroupHealNovaSpawner.NovaRadius; } TeamFilter component = ((EntityState)this).GetComponent<TeamFilter>(); TeamIndex teamIndex = (TeamIndex)((!Object.op_Implicit((Object)(object)component)) ? (-1) : ((int)component.teamIndex)); if (NetworkServer.active) { _healPulse = new HealPulse(((EntityState)this).transform.position, _radius, 0.5f, GrowDuration, teamIndex); } _effectTransform = ((EntityState)this).transform.Find("PulseEffect"); if (Object.op_Implicit((Object)(object)_effectTransform)) { ((Component)_effectTransform).gameObject.SetActive(true); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)_effectTransform)) { ((Component)_effectTransform).gameObject.SetActive(false); } ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active) { _healPulse.Update(((EntityState)this).GetDeltaTime()); if (((EntityState)this).fixedAge >= _totalDuration) { EntityState.Destroy((Object)(object)((Component)base.outer).gameObject); } } } public override void Update() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_effectTransform)) { float num = _radius * NovaRadiusCurve.Evaluate(Mathf.Clamp01(((EntityState)this).fixedAge / GrowDuration)); _effectTransform.localScale = new Vector3(num, num, num); } } } public sealed class BossGroupHealNovaWindup : EntityState { private static EffectIndex _chargeEffectIndex = (EffectIndex)(-1); public static float Duration; [SystemInitializer(new Type[] { typeof(EffectCatalogUtils) })] private static void Init() { //IL_0005: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 _chargeEffectIndex = EffectCatalogUtils.FindEffectIndex("ChargeTPHealingNova"); if ((int)_chargeEffectIndex == -1) { Log.Warning("Failed to find charge effect index", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\EntityStates\\BossGroupHealNovaController\\BossGroupHealNovaWindup.cs", "Init", 16); } } public override void OnEnter() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 //IL_000e: 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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown ((EntityState)this).OnEnter(); if ((int)_chargeEffectIndex != -1) { EffectManager.SpawnEffect(_chargeEffectIndex, new EffectData { origin = ((EntityState)this).transform.position }, false); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= Duration) { base.outer.SetNextStateToMain(); } } } } namespace System.Runtime.CompilerServices { internal static class IsExternalInit { } } namespace ItemQualities { internal static class AnimationEffectSetExplosionScalePatch { private const int ExplosionInfoBitOffset = 8; private const int ExplosionInfoBitMask = 65280; public static void SetEncodedExplosionIndex(AnimationEvent evnt, ExplosionInfoIndex explosionInfoIndex) { evnt.intParameter = EncodeExplosionIndex(evnt.intParameter, explosionInfoIndex); } public static int EncodeExplosionIndex(int intParameter, ExplosionInfoIndex explosionInfoIndex) { if (explosionInfoIndex >= (ExplosionInfoIndex)255) { Log.Error($"Cannot encode explosion index larger than 255 ({explosionInfoIndex})", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AnimationEffectSetExplosionScalePatch.cs", "EncodeExplosionIndex", 26); return intParameter; } return (intParameter & -65281) | (((int)(explosionInfoIndex + 1) << 8) & 0xFF00); } public static ExplosionInfoIndex GetExplosionIndex(AnimationEvent evnt) { int intParameter = evnt.intParameter; DecodeExplosionIndex(ref intParameter, out var explosionInfoIndex); evnt.intParameter = intParameter; return explosionInfoIndex; } public static void DecodeExplosionIndex(ref int intParameter, out ExplosionInfoIndex explosionInfoIndex) { explosionInfoIndex = (ExplosionInfoIndex)(((intParameter & 0xFF00) >> 8) - 1); if (explosionInfoIndex < ExplosionInfoIndex.None || (int)explosionInfoIndex > ExplosionInfoCatalog.ExplosionInfoDefCount) { Log.Error($"Out of bounds explosion index encoded in intParameter, likely data overlap (param={intParameter}, explosionIndex={explosionInfoIndex})", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AnimationEffectSetExplosionScalePatch.cs", "DecodeExplosionIndex", 47); explosionInfoIndex = ExplosionInfoIndex.None; } intParameter &= -65281; } [SystemInitializer(new Type[] { })] private static void Init() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown AnimationEvents.CreateEffect += new Manipulator(AnimationEvents_CreateEffect); } private static void AnimationEvents_CreateEffect(ILContext il) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) if (!((MethodReference)(object)il.Method).TryFindParameter<AnimationEvent>(out var parameter)) { Log.Error("Failed to find AnimationEvent parameter", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AnimationEffectSetExplosionScalePatch.cs", "AnimationEvents_CreateEffect", 64); return; } ILCursor val = new ILCursor(il); VariableDefinition val2 = il.AddVariable<ExplosionInfoIndex>(); val.Emit(OpCodes.Ldarg, parameter); val.EmitDelegate<Func<AnimationEvent, ExplosionInfoIndex>>((Func<AnimationEvent, ExplosionInfoIndex>)GetExplosionIndex); val.Emit(OpCodes.Stloc, val2); VariableDefinition effectDataVar = null; if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchNewobj<EffectData>(x), (Instruction x) => x.MatchStloc(typeof(EffectData), il, out effectDataVar) })) { Log.Error("Failed to find patch location", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AnimationEffectSetExplosionScalePatch.cs", "AnimationEvents_CreateEffect", 81); return; } val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, effectDataVar); val.Emit(OpCodes.Ldloc, val2); val.EmitDelegate<Action<AnimationEvents, EffectData, ExplosionInfoIndex>>((Action<AnimationEvents, EffectData, ExplosionInfoIndex>)tryApplyExplosionScale); static void tryApplyExplosionScale(AnimationEvents self, EffectData effectData, ExplosionInfoIndex explosionInfoIndex) { if (explosionInfoIndex != ExplosionInfoIndex.None) { float defaultRange = ExplosionInfoCatalog.GetExplosionInfoDef(explosionInfoIndex).GetDefaultRange(); GameObject val3 = (Object.op_Implicit((Object)(object)self) ? self.bodyObject : null); CharacterBody val4 = (Object.op_Implicit((Object)(object)val3) ? val3.GetComponent<CharacterBody>() : null); effectData.scale = (Object.op_Implicit((Object)(object)val4) ? ExplodeOnDeath.GetExplosionRadius(defaultRange, val4) : defaultRange); } } } } internal static class AnimationPrefabSetOwnershipPatch { [SystemInitializer(new Type[] { })] private static void Init() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown AnimationEvents.CreatePrefab += new Manipulator(AnimationEvents_CreatePrefab); } private static void AnimationEvents_CreatePrefab(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_000c: 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) ILCursor val = new ILCursor(il); int num = 0; MethodReference val2 = default(MethodReference); while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val2) && val2 != null && ((MemberReference)val2).Name?.StartsWith("<CreatePrefab>g__DoSpawnEffect|") == true })) { val.Emit(OpCodes.Dup); val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<Transform, AnimationEvents>>((Action<Transform, AnimationEvents>)onPrefabSpawned); num++; } if (num == 0) { Log.Error("Failed to find patch location", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AnimationPrefabSetOwnershipPatch.cs", "AnimationEvents_CreatePrefab", 58); } static void onPrefabSpawned(Transform prefabTransform, AnimationEvents animationEvents) { LocalEffectOwnership localEffectOwnership = default(LocalEffectOwnership); if (Object.op_Implicit((Object)(object)prefabTransform) && ((Component)prefabTransform).TryGetComponent<LocalEffectOwnership>(ref localEffectOwnership)) { GameObject ownerObject = (Object.op_Implicit((Object)(object)animationEvents.bodyObject) ? animationEvents.bodyObject : ((!Object.op_Implicit((Object)(object)animationEvents.entityLocator)) ? ((Component)animationEvents).gameObject : animationEvents.entityLocator.entity)); localEffectOwnership.OwnerObject = ownerObject; } } } } [DefaultExecutionOrder(-1000)] public sealed class AssignAddressableReferences : MonoBehaviour, IAsyncContentLoadCallback { [Serializable] public sealed class ComponentFieldAddressableAssignment { [Tooltip("The object to assign the field on")] [SerializeField] [FormerlySerializedAs("TargetObject")] private Object _targetObject; [SerializeField] [HideInInspector] private Component _targetObjectComponent; [Tooltip("If set, the first component of this type will be located on the Target Object and used as the field instance")] [RequiredBaseType(typeof(Component))] public SerializableSystemType TargetObjectComponentType; [Tooltip("The name of the field or property to set")] public string FieldName; [Tooltip("Address of the asset to load")] public AssetReferenceT<Object> AssetReference = new AssetReferenceT<Object>(string.Empty); [Tooltip("Determines what type is used to load the asset, if not set, the type of the field/property is used")] [RequiredBaseType(typeof(Object))] public SerializableSystemType AssetTypeOverride; public Object TargetObject { get { if (!Object.op_Implicit((Object)(object)_targetObjectComponent)) { return _targetObject; } return (Object)(object)_targetObjectComponent; } } public void OnValidate() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) _targetObjectComponent = null; Type type = (Type)TargetObjectComponentType; if (!(type != null) || !Object.op_Implicit(_targetObject)) { return; } Object targetObject = _targetObject; GameObject val = (GameObject)(object)((targetObject is GameObject) ? targetObject : null); if (val == null) { Component val2 = (Component)(object)((targetObject is Component) ? targetObject : null); if (val2 != null) { _targetObjectComponent = val2.GetComponent(type); } } else { _targetObjectComponent = val.GetComponent(type); } } } public ComponentFieldAddressableAssignment[] FieldAssignments = Array.Empty<ComponentFieldAddressableAssignment>(); [SerializeField] [HideInInspector] private bool _hasLoaded; public bool HasLoaded => _hasLoaded; private void Awake() { if (!_hasLoaded) { Log.Warning(Util.GetGameObjectHierarchyName(((Component)this).gameObject) + ": Addressable references were not assigned to prefab during init, loading assets now", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AssignAddressableReferences.cs", "Awake", 32); IEnumerator enumerator = AssignFieldsAsync(); while (enumerator.MoveNext()) { } } } IEnumerator IAsyncContentLoadCallback.OnContentLoad(IProgress<float> progressReceiver) { return AssignFieldsAsync(progressReceiver); } public IEnumerator AssignFieldsAsync(IProgress<float> progressReceiver = null) { if (FieldAssignments.Length != 0) { if (progressReceiver != null) { ParallelProgressCoroutine val = new ParallelProgressCoroutine(progressReceiver); ComponentFieldAddressableAssignment[] fieldAssignments = FieldAssignments; foreach (ComponentFieldAddressableAssignment componentFieldAssignment in fieldAssignments) { ReadableProgress<float> val2 = new ReadableProgress<float>(); val.Add(assignComponentFieldAsync(componentFieldAssignment, (IProgress<float>)val2), val2); } yield return val; } else { ParallelCoroutine val3 = new ParallelCoroutine(); ComponentFieldAddressableAssignment[] fieldAssignments = FieldAssignments; foreach (ComponentFieldAddressableAssignment componentFieldAssignment2 in fieldAssignments) { val3.Add(assignComponentFieldAsync(componentFieldAssignment2)); } yield return val3; } } _hasLoaded = true; ((Behaviour)this).enabled = false; } private IEnumerator assignComponentFieldAsync(ComponentFieldAddressableAssignment componentFieldAssignment, IProgress<float> progressReceiver = null) { if (!Object.op_Implicit(componentFieldAssignment.TargetObject)) { yield break; } Type type = ((object)componentFieldAssignment.TargetObject).GetType(); Type memberType; MemberInfo targetMember = findTargetMember(type, componentFieldAssignment.FieldName, out memberType); if (targetMember == null) { Log.Error($"Failed to find field '{componentFieldAssignment.FieldName}' on component {componentFieldAssignment.TargetObject}", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AssignAddressableReferences.cs", "assignComponentFieldAsync", 87); yield break; } Type assetType = ((Type)componentFieldAssignment.AssetTypeOverride) ?? memberType; AsyncOperationHandle assetLoadHandle = AddressableUtil.LoadAssetAsync((AssetReference)(object)componentFieldAssignment.AssetReference, assetType, (AsyncReferenceHandleUnloadType)2); try { yield return assetLoadHandle.AsProgressCoroutine(progressReceiver); AssignAddressableReferences assignAddressableReferences = this; object result = ((AsyncOperationHandle)(ref assetLoadHandle)).Result; assignAddressableReferences.applyFieldValue(componentFieldAssignment, targetMember, (Object)((result is Object) ? result : null)); } finally { AddressableUtil.UnloadAsset((AssetReference)(object)componentFieldAssignment.AssetReference, assetType); } } private void applyFieldValue(ComponentFieldAddressableAssignment componentFieldAssignment, MemberInfo member, Object value) { Type type = ((object)componentFieldAssignment.TargetObject).GetType(); object runtimeKey = ((AssetReference)componentFieldAssignment.AssetReference).RuntimeKey; if (!Object.op_Implicit(value)) { Log.Warning($"{Util.GetGameObjectHierarchyName(((Component)this).gameObject)} ({type.FullName}.{componentFieldAssignment.FieldName}): Null asset loaded for asset {runtimeKey}", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AssignAddressableReferences.cs", "applyFieldValue", 113); } try { if (!(member is FieldInfo fieldInfo)) { if (member is PropertyInfo propertyInfo) { propertyInfo.SetValue(componentFieldAssignment.TargetObject, value); } } else { fieldInfo.SetValue(componentFieldAssignment.TargetObject, value); } } catch (Exception ex) { Log.Error_NoCallerPrefix($"{Util.GetGameObjectHierarchyName(((Component)this).gameObject)}: Failed to set field {type.FullName}.{componentFieldAssignment.FieldName} to asset {value} from {runtimeKey}: {ex}"); } } private void OnValidate() { //IL_00d1: Unknown result type (might be due to invalid IL or missing references) ComponentFieldAddressableAssignment[] fieldAssignments = FieldAssignments; foreach (ComponentFieldAddressableAssignment componentFieldAddressableAssignment in fieldAssignments) { componentFieldAddressableAssignment.OnValidate(); if (!Object.op_Implicit(componentFieldAddressableAssignment.TargetObject)) { continue; } Type type = ((object)componentFieldAddressableAssignment.TargetObject).GetType(); if (findTargetMember(type, componentFieldAddressableAssignment.FieldName, out var memberType) == null) { Debug.LogWarning((object)("Field or property '" + componentFieldAddressableAssignment.FieldName + "' does not exist in type " + type.FullName), (Object)(object)this); continue; } if (!typeof(Object).IsAssignableFrom(memberType)) { Debug.LogWarning((object)("Invalid type " + memberType.FullName + " on field " + type.FullName + "." + componentFieldAddressableAssignment.FieldName + " (must be UnityEngine.Object)"), (Object)(object)this); } Type type2 = (Type)componentFieldAddressableAssignment.AssetTypeOverride; if (type2 != null && !memberType.IsAssignableFrom(type2)) { Debug.LogWarning((object)("Asset type " + type2.FullName + " cannot be assigned to field of type " + memberType.FullName + " (" + type.FullName + "." + componentFieldAddressableAssignment.FieldName + ")"), (Object)(object)this); } } } private static MemberInfo findTargetMember(Type componentType, string fieldName, out Type memberType) { FieldInfo field = componentType.GetField(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { memberType = field.FieldType; return field; } PropertyInfo property = componentType.GetProperty(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null) { memberType = property.PropertyType; return property; } memberType = null; return null; } } internal static class AttackCollisionHooks { [SystemInitializer(new Type[] { })] private static void Init() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown BulletAttack.DefaultFilterCallbackImplementation += new hook_DefaultFilterCallbackImplementation(BulletAttack_DefaultFilterCallbackImplementation); OverlapAttack.HurtBoxPassesFilter += new hook_HurtBoxPassesFilter(OverlapAttack_HurtBoxPassesFilter); BlastAttack.CollectHits += new Manipulator(BlastAttack_CollectHits); } private static bool BulletAttack_DefaultFilterCallbackImplementation(orig_DefaultFilterCallbackImplementation orig, BulletAttack bulletAttack, ref BulletHit hitInfo) { if (!orig.Invoke(bulletAttack, ref hitInfo)) { return false; } try { if (Object.op_Implicit((Object)(object)bulletAttack.owner) && bulletAttack.owner.TryGetComponentCached<ObjectCollisionManager>(out ObjectCollisionManager component) && component.IgnoresCollisionsWith(hitInfo.collider)) { return false; } } catch (Exception data) { Log.Error_NoCallerPrefix(data); } return true; } private static bool OverlapAttack_HurtBoxPassesFilter(orig_HurtBoxPassesFilter orig, OverlapAttack self, HurtBox hurtBox) { if (!orig.Invoke(self, hurtBox)) { return false; } try { if (Object.op_Implicit((Object)(object)hurtBox) && Object.op_Implicit((Object)(object)self.attacker) && self.attacker.TryGetComponentCached<ObjectCollisionManager>(out ObjectCollisionManager component) && component.IgnoresCollisionsWith(hurtBox.collider)) { return false; } } catch (Exception data) { Log.Error_NoCallerPrefix(data); } return true; } private static void BlastAttack_CollectHits(ILContext il) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); VariableDefinition hurtBoxVar = null; ILLabel hurtBoxInvalidLabel = null; if (!val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[3] { (Instruction x) => x.MatchLdloc(typeof(HurtBox), il, out hurtBoxVar), (Instruction x) => x.MatchImplicitConversion<Object, bool>(), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref hurtBoxInvalidLabel) })) { Log.Error("Failed to find patch location", "E:\\Git\\RoR2\\ItemQualities\\ItemQualities\\Assets\\ItemQualities\\Scripts\\AttackCollisionHooks.cs", "BlastAttack_CollectHits", 72); return; } val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, hurtBoxVar); val.EmitDelegate<Func<BlastAttack, HurtBox, bool>>((Func<BlastAttack, HurtBox, bool>)attackerIgnoresCollisionWith); val.Emit(OpCodes.Brtrue, (object)hurtBoxInvalidLabel); static bool attackerIgnoresCollisionWith(BlastAttack blastAttack, HurtBox hurtBox) { if (Object.op_Implicit((Object)(object)hurtBox) && Object.op_Implicit((Object)(object)hurtBox.collider) && blastAttack != null && Object.op_Implicit((Object)(object)blastAttack.attacker) && blastAttack.attacker.TryGetComponentCached<ObjectCollisionManager>(out ObjectCollisionManager component) && component.IgnoresCollisionsWith(hurtBox.collider)) { return true; } return false; } } } public sealed class AxisBillboard : MonoBehaviour { public Vector3 Axis = Vector3.up; private void OnEnable() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown SceneCamera.onSceneCameraPreCull += new SceneCameraDelegate(onSceneCameraPreCull); } private void OnDisable() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown SceneCamera.onSceneCameraPreCull -= new SceneCameraDelegate(onSceneCameraPreCull); } private void onSceneCameraPreCull(SceneCamera sceneCamera) { //IL_0006: 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_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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_0034: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Vector3.ProjectOnPlane(((Component)this).transform.position, Axis); Vector3 val2 = Vector3.ProjectOnPlane(((Component)sceneCamera).transform.position, Axis); Transform transform = ((Component)this).transform; Vector3 val3 = val2 - val; transform.rotation = Util.QuaternionSafeLookRotation(((Vector3)(ref val3)).normalized); } } public sealed class BarrierPickup : MonoBehaviour { [Tooltip("The base object to destroy when this pickup is consumed.")] public GameObject BaseObject; [Tooltip("The team filter object which determines who can pick up this pack.")] public TeamFilter TeamFilter; public GameObject PickupEffect; public float FlatAmount; public float FractionalAmount; private bool _alive = true; private void OnTriggerStay(Collider other) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_0094: Expected O, but got Unknown if (!NetworkServer.active || !_alive || TeamComponent.GetObjectTeam(((Component)other).gameObject) != TeamFilter.teamIndex) { return; } CharacterBody component = ((Component)other).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } HealthComponent healthComponent = component.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent)) { healthComponent.AddBarrier(FlatAmount + healthComponent.fullBarrier * FractionalAmount); if (Object.op_Implicit((Object)(object)PickupEffect)) { EffectManager.SpawnEffect(PickupEffect, new EffectData { origin = ((Component)this).transform.position }, true); } } Object.Destroy((Object)(object)BaseObject); _alive = false; } } [RequireComponent(typeof(NetworkedBodyAttachment))] public sealed class BodyAttachmentVFXController : MonoBehaviour, INetworkedBodyAttachmentListener { public enum RadiusMode { Constant, BodyRadius, BodyBestFitRadius, BodyBestFitActualRadius } [SerializeField] private InstantiateAddressablePrefab _bodyVFXInstantiator; [SerializeField] private RadiusMode _radiusMode = RadiusMode.BodyRadius; [SerializeField] [Min(0f)] private float _radiusMultiplier = 1f; private NetworkedBodyAttachment _bodyAttachment; private void Awake() { _bodyAttachment = ((Component)this).GetComponent<NetworkedBodyAttachment>(); _bodyVFXInstantiator.OnInstantiated += onVFXInstantiated; } private void OnDestroy() { _bodyVFXInstantiator.OnInstantiated -= onVFXInstantiated; } private void onVFXInstantiated(GameObject vfx) { //IL_0098: Unknown result type (might be due to invalid IL or missing references) TemporaryVisualEffect val = default(TemporaryVisualEffect); if (!vfx.TryGetComponent<TemporaryVisualEffect>(ref val)) { return; } CharacterBody attachedBody = _bodyAttachment.attachedBody; if (Object.op_Implicit((Object)(object)attachedBody)) { float num = _radiusMode switch { RadiusMode.Constant => 1f, RadiusMode.BodyRadius => attachedBody.radius, RadiusMode.BodyBestFitRadius => attachedBody.bestFitRadius, RadiusMode.BodyBestFitActualRadius => attachedBody.bestFitActualRadius, _ => throw new NotImplementedException($"Radius mode {_radiusMode} is not implemented"), }; val.parentTransform = attachedBody.coreTransform; val.visualState = (VisualState)0; val.healthComponent = attachedBody.healthComponent; val.radius = num * _radiusMultiplier; LocalCameraEffect val2 = default(LocalCameraEffect); if (((Component)val).TryGetComponent<LocalCameraEffect>(ref val2)) { val2.targetCharacter = ((Component)attachedBody).gameObject; } } } void INetworkedBodyAttachmentListener.OnAttachedBodyDiscovered(NetworkedBodyAttachment networkedBodyAttachment, CharacterBody attachedBody) { _bodyVFXInstantiator.InstantiatePrefab(); } } internal static class BoomerangProjectileHooks { [SystemInitializer(new Type[] { })] private static void Init() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown BoomerangProjectile.FixedUpdate += new hook_FixedUpdate(BoomerangProjectile_FixedUpdate); } private static void BoomerangProjectile_FixedUpdate(orig_FixedUpdate orig, BoomerangProjectile self) { if (!Object.op_Implicit((Object)(object)self) || !((Component)(object)self).TryGetComponentCached<BoomerangProjectileQualityController>(out BoomerangProjectileQualityController component) || !component.IsInHitPause) { orig.Invoke(self); } } } [RequireComponent(typeof(BoomerangProjectile))] public sealed class BoomerangProjectileQualityController : MonoBehaviour { public float HitPauseDuration; private BoomerangProjectile _boomerangProjectile; private bool _hasStartedHitPause; private float _hitPauseTimer; public bool IsInHitPause => _hitPauseTimer > 0f; private void Awake() { _boomerangProjectile = ((Component)this).GetComponent<BoomerangProjectile>(); } private void OnEnable() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown ComponentCache.Add<BoomerangProjectileQualityController>(((Component)this).gameObject, this); _boomerangProjectile.onFlyBack.AddListener(new UnityAction(onFlyBack)); } private void OnDisable() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown _boomerangProjectile.onFlyBack.RemoveListener(new UnityAction(onFlyBack)); ComponentCache.Remove<BoomerangProjectileQualityController>(((Component)this).gameObject, this); } private void FixedUpdate() { //IL_0030: Unknown result type (might be due to invalid IL or miss