Decompiled source of League of Legends Items v2.0.0
LOLItems.dll
Decompiled 3 weeks 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.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using Alexandria.BreakableAPI; using Alexandria.DungeonAPI; using Alexandria.ItemAPI; using Alexandria.Misc; using Alexandria.NPCAPI; using Alexandria.SoundAPI; using Alexandria.VisualAPI; using BepInEx; using Dungeonator; using Gungeon; using HarmonyLib; using InControl; using LOLItems; using LOLItems.active_items; using LOLItems.custom_class_data; using LOLItems.guon_stones; using LOLItems.passive_items; using LOLItems.weapons; using LootTableAPI; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Mod")] [assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d6d7a494-722e-4763-959b-c2d6b6a42b01")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public class CustomLightningChainEnemiesModifierAOE : BraveBehaviour { [CompilerGenerated] private sealed class <HandleDamageCooldown>d__28 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public AIActor damagedTarget; public CustomLightningChainEnemiesModifierAOE <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <HandleDamageCooldown>d__28(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.m_damagedEnemies.Add(damagedTarget); <>2__current = (object)new WaitForSeconds(<>4__this.damageCooldown); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.m_damagedEnemies.Remove(damagedTarget); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public GameObject LinkVFXPrefab; public CoreDamageTypes damageTypes; public bool RequiresSameProjectileClass; public float maximumLinkDistance; public bool usesStaticDamageStat = true; public float damagePerHit; public float damageScale; public float damageCooldown = 0.1f; public List<string> sfxPath = new List<string>(); [NonSerialized] public bool DamagesEnemies = true; [NonSerialized] public bool PlaysSFX = true; [Header("Dispersal")] public bool UsesDispersalParticles; [ShowInInspectorIf("UsesDispersalParticles", false)] public float DispersalDensity = 3f; [ShowInInspectorIf("UsesDispersalParticles", false)] public float DispersalMinCoherency = 0.2f; [ShowInInspectorIf("UsesDispersalParticles", false)] public float DispersalMaxCoherency = 1f; [ShowInInspectorIf("UsesDispersalParticles", false)] public GameObject DispersalParticleSystemPrefab; private Projectile m_frameLinkProjectile; private tk2dTiledSprite m_extantLink; private bool m_hasSetBlackBullet; private ParticleSystem m_dispersalParticles; private HashSet<AIActor> m_damagedEnemies = new HashSet<AIActor>(); private void Start() { if ((Object)(object)((BraveBehaviour)this).projectile != (Object)null) { Projectile projectile = ((BraveBehaviour)this).projectile; projectile.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(projectile.OnHitEnemy, new Action<Projectile, SpeculativeRigidbody, bool>(HandleHitEnemy)); } } private void HandleHitEnemy(Projectile proj, SpeculativeRigidbody enemyRigidbody, bool fatal) { if (!((Object)(object)enemyRigidbody == (Object)null) && !((Object)(object)((BraveBehaviour)enemyRigidbody).aiActor == (Object)null)) { AIActor aiActor = ((BraveBehaviour)enemyRigidbody).aiActor; List<AIActor> list = ChainEnemies(aiActor); if (PlaysSFX) { HelpfulMethods.PlayRandomSFX(((Component)aiActor).gameObject, sfxPath); } if (!usesStaticDamageStat) { damagePerHit = proj.baseData.damage * damageScale; } if (list.Count > 0) { UpdateLinkChain(list); } } } public void updateSFXList(string[] newSFXList) { foreach (string item in newSFXList) { sfxPath.Add(item); } } public override void OnDestroy() { ClearLink(); ((BraveBehaviour)this).OnDestroy(); } private void Update() { m_frameLinkProjectile = null; } private void UpdateLinkChain(List<AIActor> chain) { //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_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_00b8: 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) //IL_0105: Unknown result type (might be due to invalid IL or missing references) Vector2 unitCenter = ((BraveBehaviour)((BraveBehaviour)this).projectile).specRigidbody.UnitCenter; foreach (AIActor item in chain) { Vector2 unitCenter2 = ((BraveBehaviour)item).specRigidbody.UnitCenter; GameObject val = SpawnManager.SpawnVFX(LinkVFXPrefab, true); tk2dTiledSprite component = val.GetComponent<tk2dTiledSprite>(); ((BraveBehaviour)component).transform.position = Vector2.op_Implicit(unitCenter); Vector2 val2 = unitCenter2 - unitCenter; float num = BraveMathCollege.Atan2Degrees(((Vector2)(ref val2)).normalized); int num2 = Mathf.RoundToInt(((Vector2)(ref val2)).magnitude / 0.0625f); component.dimensions = new Vector2((float)num2, component.dimensions.y); ((BraveBehaviour)component).transform.rotation = Quaternion.Euler(0f, 0f, num); ((tk2dBaseSprite)component).UpdateZDepth(); Object.Destroy((Object)(object)val, 0.25f); if (!m_damagedEnemies.Contains(item)) { ((BraveBehaviour)item).healthHaver.ApplyDamage(damagePerHit, Vector2.zero, "Cultivation of Spirit", damageTypes, (DamageCategory)0, false, (PixelCollider)null, false); if (!UsesDispersalParticles) { } } } } private void DoDispersalParticles(Vector2 posStart, Vector2 posEnd) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00df: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) if ((int)GameManager.Options.ShaderQuality != 0 && (int)GameManager.Options.ShaderQuality != 3) { if (!Object.op_Implicit((Object)(object)m_dispersalParticles)) { m_dispersalParticles = GlobalDispersalParticleManager.GetSystemForPrefab(DispersalParticleSystemPrefab); } int num = Mathf.Max(Mathf.CeilToInt(Vector2.Distance(posStart, posEnd) * DispersalDensity), 1); for (int i = 0; i < num; i++) { float num2 = (float)i / (float)num; Vector3 val = Vector3.Lerp(Vector2.op_Implicit(posStart), Vector2.op_Implicit(posEnd), num2); val += Vector3.back; float num3 = Mathf.PerlinNoise(val.x / 3f, val.y / 3f); Vector3 val2 = Quaternion.Euler(0f, 0f, num3 * 360f) * Vector3.right; Vector3 val3 = Vector3.Lerp(val2, Random.insideUnitSphere, Random.Range(DispersalMinCoherency, DispersalMaxCoherency)); EmitParams val4 = default(EmitParams); ((EmitParams)(ref val4)).position = val; ((EmitParams)(ref val4)).velocity = val3 * m_dispersalParticles.startSpeed; ((EmitParams)(ref val4)).startSize = m_dispersalParticles.startSize; ((EmitParams)(ref val4)).startLifetime = m_dispersalParticles.startLifetime; ((EmitParams)(ref val4)).startColor = Color32.op_Implicit(m_dispersalParticles.startColor); EmitParams val5 = val4; m_dispersalParticles.Emit(val5, 1); } } } private IEnumerator HandleDamageCooldown(AIActor damagedTarget) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <HandleDamageCooldown>d__28(0) { <>4__this = this, damagedTarget = damagedTarget }; } private void ClearLink() { if ((Object)(object)m_extantLink != (Object)null) { SpawnManager.Despawn(((Component)m_extantLink).gameObject); m_extantLink = null; } } private List<AIActor> ChainEnemies(AIActor firstEnemy) { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) List<AIActor> list = new List<AIActor>(); float num = maximumLinkDistance * maximumLinkDistance; foreach (AIActor allEnemy in StaticReferenceManager.AllEnemies) { if (!((Object)(object)allEnemy == (Object)null) && Object.op_Implicit((Object)(object)((BraveBehaviour)allEnemy).healthHaver) && !((BraveBehaviour)allEnemy).healthHaver.IsDead && allEnemy.IsNormalEnemy && allEnemy.HasBeenEngaged && !((object)allEnemy).Equals((object?)firstEnemy)) { Vector2 val = ((GameActor)allEnemy).CenterPosition - ((GameActor)firstEnemy).CenterPosition; float sqrMagnitude = ((Vector2)(ref val)).sqrMagnitude; if (sqrMagnitude < num) { list.Add(allEnemy); } } } return list; } } [Serializable] public class GameActorCrippleEffect : GameActorEffect { public float CrippleAmount; public float CrippleDuration; public bool ShouldVanishOnDeath(GameActor actor) { if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).healthHaver) && ((BraveBehaviour)actor).healthHaver.IsBoss) { return false; } if (actor is AIActor && ((AIActor)((actor is AIActor) ? actor : null)).IsSignatureEnemy) { return false; } return true; } public override void OnEffectApplied(GameActor actor, RuntimeGameActorEffectData effectData, float partialAmount = 1f) { if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).aiShooter)) { ((BraveBehaviour)actor).aiShooter.AimTimeScale = CrippleAmount; } if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).behaviorSpeculator)) { ((BraveBehaviour)actor).behaviorSpeculator.CooldownScale = CrippleAmount; } if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).bulletBank)) { ((BraveBehaviour)actor).bulletBank.TimeScale = CrippleAmount; } } public override void OnEffectRemoved(GameActor actor, RuntimeGameActorEffectData effectData) { if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).aiShooter)) { ((BraveBehaviour)actor).aiShooter.AimTimeScale = 1f; } if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).behaviorSpeculator)) { ((BraveBehaviour)actor).behaviorSpeculator.CooldownScale = 1f; } if (Object.op_Implicit((Object)(object)((BraveBehaviour)actor).bulletBank)) { ((BraveBehaviour)actor).bulletBank.TimeScale = 1f; } tk2dSpriteAnimator spriteAnimator = ((BraveBehaviour)actor).spriteAnimator; if (Object.op_Implicit((Object)(object)spriteAnimator) && Object.op_Implicit((Object)(object)((BraveBehaviour)actor).aiAnimator) && spriteAnimator.CurrentClip != null && !spriteAnimator.IsPlaying(spriteAnimator.CurrentClip)) { ((BraveBehaviour)actor).aiAnimator.PlayUntilFinished(((BraveBehaviour)actor).spriteAnimator.CurrentClip.name, false, (string)null, -1f, true); } } } public class OnPreDamagedPassiveItem : PassiveItem { [CompilerGenerated] private sealed class <TriggerVisualEffect>d__13 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PlayerController player; public OnPreDamagedPassiveItem <>4__this; private Material <mat>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TriggerVisualEffect>d__13(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <mat>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_006f: 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) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <mat>5__1 = SpriteOutlineManager.GetOutlineMaterial(((BraveBehaviour)((PassiveItem)<>4__this).Owner).sprite); if (<>4__this.triggersGlow && Object.op_Implicit((Object)(object)<mat>5__1)) { <mat>5__1.SetColor("_OverrideColor", <>4__this.outlineColor); } <>2__current = (object)new WaitForSeconds(<>4__this.effectDuration); <>1__state = 1; return true; case 1: <>1__state = -1; if (<>4__this.triggersGlow && Object.op_Implicit((Object)(object)<mat>5__1)) { <mat>5__1.SetColor("_OverrideColor", new Color(0f, 0f, 0f)); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public float procChance = 0.1f; public bool triggerBlank = false; public bool playsSFX = false; public List<string> sfxPath = new List<string>(); public bool triggersInvulnerability = false; public bool triggersOutline = false; public Color outlineColor = new Color(0f, 0f, 0f); public bool triggersGlow = false; public float effectDuration = 1f; public override void Pickup(PlayerController player) { if (!base.m_pickedUp) { ((PassiveItem)this).Pickup(player); HealthHaver healthHaver = ((BraveBehaviour)player).healthHaver; healthHaver.ModifyDamage = (Action<HealthHaver, ModifyDamageEventArgs>)Delegate.Combine(healthHaver.ModifyDamage, new Action<HealthHaver, ModifyDamageEventArgs>(HandleEffect)); } } public void updateSFXList(string[] newSFXList) { foreach (string item in newSFXList) { sfxPath.Add(item); } } public void setProcChance(float newProcChance) { procChance = newProcChance; } private void HandleEffect(HealthHaver source, ModifyDamageEventArgs args) { if (args == EventArgs.Empty || args.ModifiedDamage <= 0f || !source.IsVulnerable) { return; } float value = Random.value; if (value <= procChance && Object.op_Implicit((Object)(object)base.m_owner) && !((GameActor)base.m_owner).IsFalling) { if (playsSFX && sfxPath.Count > 0) { HelpfulMethods.PlayRandomSFX(((Component)((PassiveItem)this).Owner).gameObject, sfxPath); } if (triggersInvulnerability) { PlayerController component = ((Component)source).GetComponent<PlayerController>(); source.TriggerInvulnerabilityPeriod(effectDuration); } if (triggerBlank) { base.m_owner.ForceBlank(25f, 0.5f, false, true, (Vector2?)null, true, -1f); } if (triggersOutline) { ((MonoBehaviour)((PassiveItem)this).Owner).StartCoroutine(TriggerVisualEffect(((PassiveItem)this).Owner)); } args.ModifiedDamage = 0f; } } private IEnumerator TriggerVisualEffect(PlayerController player) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <TriggerVisualEffect>d__13(0) { <>4__this = this, player = player }; } public override DebrisObject Drop(PlayerController player) { DebrisObject val = ((PassiveItem)this).Drop(player); OnPreDamagedPassiveItem component = ((Component)val).GetComponent<OnPreDamagedPassiveItem>(); HealthHaver healthHaver = ((BraveBehaviour)player).healthHaver; healthHaver.ModifyDamage = (Action<HealthHaver, ModifyDamageEventArgs>)Delegate.Remove(healthHaver.ModifyDamage, new Action<HealthHaver, ModifyDamageEventArgs>(HandleEffect)); ((PassiveItem)component).m_pickedUpThisRun = true; return val; } public override void OnDestroy() { if (Object.op_Implicit((Object)(object)base.m_owner)) { HealthHaver healthHaver = ((BraveBehaviour)base.m_owner).healthHaver; healthHaver.ModifyDamage = (Action<HealthHaver, ModifyDamageEventArgs>)Delegate.Remove(healthHaver.ModifyDamage, new Action<HealthHaver, ModifyDamageEventArgs>(HandleEffect)); } ((PassiveItem)this).OnDestroy(); } } public class CustomLightningChainEnemiesModifier : BraveBehaviour { [CompilerGenerated] private sealed class <HandleDamageCooldown>d__27 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public AIActor damagedTarget; public CustomLightningChainEnemiesModifier <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <HandleDamageCooldown>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.m_damagedEnemies.Add(damagedTarget); <>2__current = (object)new WaitForSeconds(<>4__this.damageCooldown); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.m_damagedEnemies.Remove(damagedTarget); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public GameObject LinkVFXPrefab; public CoreDamageTypes damageTypes; public bool RequiresSameProjectileClass; public float maximumLinkDistance; public float damagePerHit; public float damageCooldown = 0.1f; public float maxLinkCount; public List<string> sfxPath = new List<string>(); [NonSerialized] public bool DamagesEnemies = true; [NonSerialized] public bool PlaysSFX = true; [Header("Dispersal")] public bool UsesDispersalParticles; [ShowInInspectorIf("UsesDispersalParticles", false)] public float DispersalDensity = 3f; [ShowInInspectorIf("UsesDispersalParticles", false)] public float DispersalMinCoherency = 0.2f; [ShowInInspectorIf("UsesDispersalParticles", false)] public float DispersalMaxCoherency = 1f; [ShowInInspectorIf("UsesDispersalParticles", false)] public GameObject DispersalParticleSystemPrefab; private Projectile m_frameLinkProjectile; private tk2dTiledSprite m_extantLink; private bool m_hasSetBlackBullet; private ParticleSystem m_dispersalParticles; private HashSet<AIActor> m_damagedEnemies = new HashSet<AIActor>(); private void Start() { if ((Object)(object)((BraveBehaviour)this).projectile != (Object)null) { Projectile projectile = ((BraveBehaviour)this).projectile; projectile.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(projectile.OnHitEnemy, new Action<Projectile, SpeculativeRigidbody, bool>(HandleHitEnemy)); } } private void HandleHitEnemy(Projectile proj, SpeculativeRigidbody enemyRigidbody, bool fatal) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)enemyRigidbody == (Object)null) && !((Object)(object)((BraveBehaviour)enemyRigidbody).aiActor == (Object)null)) { AIActor aiActor = ((BraveBehaviour)enemyRigidbody).aiActor; List<AIActor> list = ChainEnemies(((GameActor)aiActor).CenterPosition); if (PlaysSFX) { HelpfulMethods.PlayRandomSFX(((Component)aiActor).gameObject, sfxPath); } if (list.Count > 0) { UpdateLinkChain(list); } } } public void updateSFXList(string[] newSFXList) { foreach (string item in newSFXList) { sfxPath.Add(item); } } public override void OnDestroy() { ClearLink(); ((BraveBehaviour)this).OnDestroy(); } private void Update() { m_frameLinkProjectile = null; } private void UpdateLinkChain(List<AIActor> chain) { //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_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0139: 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_00fa: 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_012f: 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) Vector2 val = ((BraveBehaviour)((BraveBehaviour)this).projectile).specRigidbody.UnitCenter; foreach (AIActor item in chain) { Vector2 unitCenter = ((BraveBehaviour)item).specRigidbody.UnitCenter; GameObject val2 = SpawnManager.SpawnVFX(LinkVFXPrefab, true); tk2dTiledSprite component = val2.GetComponent<tk2dTiledSprite>(); ((BraveBehaviour)component).transform.position = Vector2.op_Implicit(val); Vector2 val3 = unitCenter - val; float num = BraveMathCollege.Atan2Degrees(((Vector2)(ref val3)).normalized); int num2 = Mathf.RoundToInt(((Vector2)(ref val3)).magnitude / 0.0625f); component.dimensions = new Vector2((float)num2, component.dimensions.y); ((BraveBehaviour)component).transform.rotation = Quaternion.Euler(0f, 0f, num); ((tk2dBaseSprite)component).UpdateZDepth(); Object.Destroy((Object)(object)val2, 0.25f); if (!m_damagedEnemies.Contains(item)) { ((BraveBehaviour)item).healthHaver.ApplyDamage(damagePerHit, Vector2.zero, "Chain Lightning", damageTypes, (DamageCategory)0, false, (PixelCollider)null, false); m_damagedEnemies.Add(item); if (UsesDispersalParticles) { DoDispersalParticles(val, unitCenter); } } val = unitCenter; } } private void DoDispersalParticles(Vector2 posStart, Vector2 posEnd) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00df: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) if ((int)GameManager.Options.ShaderQuality != 0 && (int)GameManager.Options.ShaderQuality != 3) { if (!Object.op_Implicit((Object)(object)m_dispersalParticles)) { m_dispersalParticles = GlobalDispersalParticleManager.GetSystemForPrefab(DispersalParticleSystemPrefab); } int num = Mathf.Max(Mathf.CeilToInt(Vector2.Distance(posStart, posEnd) * DispersalDensity), 1); for (int i = 0; i < num; i++) { float num2 = (float)i / (float)num; Vector3 val = Vector3.Lerp(Vector2.op_Implicit(posStart), Vector2.op_Implicit(posEnd), num2); val += Vector3.back; float num3 = Mathf.PerlinNoise(val.x / 3f, val.y / 3f); Vector3 val2 = Quaternion.Euler(0f, 0f, num3 * 360f) * Vector3.right; Vector3 val3 = Vector3.Lerp(val2, Random.insideUnitSphere, Random.Range(DispersalMinCoherency, DispersalMaxCoherency)); EmitParams val4 = default(EmitParams); ((EmitParams)(ref val4)).position = val; ((EmitParams)(ref val4)).velocity = val3 * m_dispersalParticles.startSpeed; ((EmitParams)(ref val4)).startSize = m_dispersalParticles.startSize; ((EmitParams)(ref val4)).startLifetime = m_dispersalParticles.startLifetime; ((EmitParams)(ref val4)).startColor = Color32.op_Implicit(m_dispersalParticles.startColor); EmitParams val5 = val4; m_dispersalParticles.Emit(val5, 1); } } } private IEnumerator HandleDamageCooldown(AIActor damagedTarget) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <HandleDamageCooldown>d__27(0) { <>4__this = this, damagedTarget = damagedTarget }; } private void ClearLink() { if ((Object)(object)m_extantLink != (Object)null) { SpawnManager.Despawn(((Component)m_extantLink).gameObject); m_extantLink = null; } } private List<AIActor> ChainEnemies(Vector2 startPos) { //IL_000d: 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_0108: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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) List<AIActor> list = new List<AIActor>(); HashSet<AIActor> hashSet = new HashSet<AIActor>(); Vector2 val = startPos; for (int i = 0; (float)i < maxLinkCount; i++) { AIActor val2 = null; float num = maximumLinkDistance * maximumLinkDistance; foreach (AIActor allEnemy in StaticReferenceManager.AllEnemies) { if (!((Object)(object)allEnemy == (Object)null) && Object.op_Implicit((Object)(object)((BraveBehaviour)allEnemy).healthHaver) && !((BraveBehaviour)allEnemy).healthHaver.IsDead && allEnemy.IsNormalEnemy && allEnemy.HasBeenEngaged && !hashSet.Contains(allEnemy)) { Vector2 val3 = ((GameActor)allEnemy).CenterPosition - val; float sqrMagnitude = ((Vector2)(ref val3)).sqrMagnitude; if (sqrMagnitude < num) { val2 = allEnemy; num = sqrMagnitude; } } } if ((Object)(object)val2 != (Object)null) { list.Add(val2); hashSet.Add(val2); val = ((GameActor)val2).CenterPosition; continue; } break; } return list; } } namespace LootTableAPI { internal static class LootTableTools { public static GenericLootTable CreateLootTable(List<GenericLootTable> includedLootTables = null, DungeonPrerequisite[] prerequisites = null) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown GenericLootTable val = ScriptableObject.CreateInstance<GenericLootTable>(); val.defaultItemDrops = new WeightedGameObjectCollection { elements = new List<WeightedGameObject>() }; if (prerequisites != null) { val.tablePrerequisites = prerequisites; } else { val.tablePrerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; } if (includedLootTables != null) { val.includedLootTables = includedLootTables; } else { val.includedLootTables = new List<GenericLootTable>(); } return val; } public static void AddItemToPool(this GenericLootTable lootTable, PickupObject po, float weight = 1f) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown WeightedGameObjectCollection defaultItemDrops = lootTable.defaultItemDrops; WeightedGameObject val = new WeightedGameObject(); val.pickupId = po.PickupObjectId; val.weight = weight; val.rawGameObject = ((Component)po).gameObject; val.forceDuplicatesPossible = false; val.additionalPrerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; defaultItemDrops.Add(val); } public static void AddItemToPool(this GenericLootTable lootTable, int poID, float weight = 1f) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown PickupObject byId = PickupObjectDatabase.GetById(poID); WeightedGameObjectCollection defaultItemDrops = lootTable.defaultItemDrops; WeightedGameObject val = new WeightedGameObject(); val.pickupId = byId.PickupObjectId; val.weight = weight; val.rawGameObject = ((Component)byId).gameObject; val.forceDuplicatesPossible = false; val.additionalPrerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; defaultItemDrops.Add(val); } } } namespace LOLItems { internal class debugItem : PlayerItem { [CompilerGenerated] private sealed class <EffectCoroutine>d__8 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PlayerController player; public debugItem <>4__this; private tk2dBaseSprite <s>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <EffectCoroutine>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <s>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_006d: 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) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: { <>1__state = -1; <s>5__1 = ((BraveBehaviour)<>4__this).sprite; GameUIRoot instance = GameUIRoot.Instance; Transform transform = ((BraveBehaviour)<s>5__1).transform; Bounds bounds = <s>5__1.GetBounds(); float num = ((Bounds)(ref bounds)).max.x - 1f; bounds = <s>5__1.GetBounds(); instance.RegisterDefaultLabel(transform, new Vector3(num, ((Bounds)(ref bounds)).min.y - 2f, 0f), "something message here"); <>2__current = (object)new WaitForSeconds(5f); <>1__state = 1; return true; } case 1: <>1__state = -1; GameUIRoot.Instance.DeregisterDefaultLabel(((BraveBehaviour)<s>5__1).transform); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static int ID; private static List<string> VFXSpritePath = new List<string> { "LOLItems/Resources/vfxs/test_vfx/image (1)", "LOLItems/Resources/vfxs/test_vfx/image (2)", "LOLItems/Resources/vfxs/test_vfx/image (3)", "LOLItems/Resources/vfxs/test_vfx/image (4)", "LOLItems/Resources/vfxs/test_vfx/image (5)", "LOLItems/Resources/vfxs/test_vfx/image (6)", "LOLItems/Resources/vfxs/test_vfx/image (7)", "LOLItems/Resources/vfxs/test_vfx/image (8)", "LOLItems/Resources/vfxs/test_vfx/image (9)" }; private static GameObject EffectVFX = VFXBuilder.CreateVFX("test_vfx", VFXSpritePath, 10, new IntVector2(0, 0), (Anchor)4, false, 0f, -1f, (Color?)Color.cyan, (WrapMode)0, true); private GameObject activeVFXObject; public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) string text = "Debug Item"; string text2 = "LOLItems/Resources/example_item_sprite"; GameObject val = new GameObject(text); debugItem debugItem2 = val.AddComponent<debugItem>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "idk"; string text4 = "idk"; ItemBuilder.SetupItem((PickupObject)(object)debugItem2, text3, text4, "LOLItems"); ItemBuilder.SetCooldownType((PlayerItem)(object)debugItem2, (CooldownType)0, 1f); ((PlayerItem)debugItem2).consumable = false; ((PlayerItem)debugItem2).usableDuringDodgeRoll = true; ((PickupObject)debugItem2).quality = (ItemQuality)4; ID = ((PickupObject)debugItem2).PickupObjectId; } public override void Pickup(PlayerController player) { ((PlayerItem)this).Pickup(player); Plugin.Log("Player picked up " + ((PickupObject)this).EncounterNameOrDisplayName); } public DebrisObject Drop(PlayerController player) { Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).EncounterNameOrDisplayName); return ((PlayerItem)this).Drop(player, 4f); } public override void DoEffect(PlayerController player) { ((MonoBehaviour)this).StartCoroutine(EffectCoroutine(player)); Plugin.Log("debug item finished"); } private IEnumerator EffectCoroutine(PlayerController player) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <EffectCoroutine>d__8(0) { <>4__this = this, player = player }; } } internal class AdvancedPlayerOrbitalItem : PassiveItem { public PlayerOrbital OrbitalPrefab; public PlayerOrbitalFollower OrbitalFollowerPrefab; public bool HasUpgradeSynergy; public CustomSynergyType UpgradeSynergy; public GameObject UpgradeOrbitalPrefab; public GameObject UpgradeOrbitalFollowerPrefab; public bool CanBeMimicked; public DamageTypeModifier[] modifiers; public DamageTypeModifier[] synergyModifiers; public bool BreaksUponContact; public bool BreaksUponOwnerDamage; public GameObject BreakVFX; protected GameObject m_extantOrbital; protected bool m_synergyUpgradeActive; public bool HasAdvancedUpgradeSynergy; public string AdvancedUpgradeSynergy; public GameObject AdvancedUpgradeOrbitalPrefab; public GameObject AdvancedUpgradeOrbitalFollowerPrefab; public List<DamageTypeModifier> advancedSynergyModifiers = new List<DamageTypeModifier>(); protected bool m_advancedSynergyUpgradeActive; private void CreateOrbital(PlayerController owner) { //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown GameObject val = ((!((Object)(object)OrbitalPrefab != (Object)null)) ? ((Component)OrbitalFollowerPrefab).gameObject : ((Component)OrbitalPrefab).gameObject); if (HasUpgradeSynergy && m_synergyUpgradeActive) { val = ((!((Object)(object)UpgradeOrbitalPrefab != (Object)null)) ? UpgradeOrbitalFollowerPrefab.gameObject : UpgradeOrbitalPrefab.gameObject); } if (HasAdvancedUpgradeSynergy && m_advancedSynergyUpgradeActive) { val = ((!((Object)(object)AdvancedUpgradeOrbitalPrefab != (Object)null)) ? AdvancedUpgradeOrbitalFollowerPrefab.gameObject : AdvancedUpgradeOrbitalPrefab.gameObject); } m_extantOrbital = PlayerOrbitalItem.CreateOrbital(owner, val, (Object)(object)OrbitalFollowerPrefab != (Object)null, (PlayerOrbitalItem)null); if (BreaksUponContact && Object.op_Implicit((Object)(object)m_extantOrbital)) { SpeculativeRigidbody component = m_extantOrbital.GetComponent<SpeculativeRigidbody>(); if (Object.op_Implicit((Object)(object)component)) { SpeculativeRigidbody val2 = component; val2.OnRigidbodyCollision = (OnRigidbodyCollisionDelegate)Delegate.Combine((Delegate?)(object)val2.OnRigidbodyCollision, (Delegate?)new OnRigidbodyCollisionDelegate(HandleBreakOnCollision)); } } if (BreaksUponOwnerDamage && Object.op_Implicit((Object)(object)owner)) { owner.OnReceivedDamage += HandleBreakOnOwnerDamage; } OnOrbitalCreated(m_extantOrbital); } public static GameObject CreateOrbital(PlayerController owner, GameObject targetOrbitalPrefab, bool isFollower, PlayerOrbitalItem sourceItem = null) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(targetOrbitalPrefab, ((BraveBehaviour)owner).transform.position, Quaternion.identity); if (!isFollower) { PlayerOrbital component = val.GetComponent<PlayerOrbital>(); component.Initialize(owner); component.SourceItem = sourceItem; } else { PlayerOrbitalFollower component2 = val.GetComponent<PlayerOrbitalFollower>(); if (Object.op_Implicit((Object)(object)component2)) { component2.Initialize(owner); } } return val; } public virtual void OnOrbitalCreated(GameObject orbital) { } private void HandleBreakOnOwnerDamage(PlayerController arg1) { //IL_005e: 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_006d: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)this)) { if (Object.op_Implicit((Object)(object)BreakVFX) && Object.op_Implicit((Object)(object)m_extantOrbital) && Object.op_Implicit((Object)(object)m_extantOrbital.GetComponentInChildren<tk2dSprite>())) { SpawnManager.SpawnVFX(BreakVFX, Vector2Extensions.ToVector3ZisY(((tk2dBaseSprite)m_extantOrbital.GetComponentInChildren<tk2dSprite>()).WorldCenter, 0f), Quaternion.identity); } if (Object.op_Implicit((Object)(object)base.m_owner)) { base.m_owner.RemovePassiveItem(((PickupObject)this).PickupObjectId); base.m_owner.OnReceivedDamage -= HandleBreakOnOwnerDamage; } Object.Destroy((Object)(object)((Component)this).gameObject); } } private void HandleBreakOnCollision(CollisionData rigidbodyCollision) { if (Object.op_Implicit((Object)(object)base.m_owner)) { base.m_owner.RemovePassiveItem(((PickupObject)this).PickupObjectId); } Object.Destroy((Object)(object)((Component)this).gameObject); } public void DecoupleOrbital() { m_extantOrbital = null; if (BreaksUponOwnerDamage && Object.op_Implicit((Object)(object)base.m_owner)) { base.m_owner.OnReceivedDamage -= HandleBreakOnOwnerDamage; } } private void DestroyOrbital() { if (Object.op_Implicit((Object)(object)m_extantOrbital)) { if (BreaksUponOwnerDamage && Object.op_Implicit((Object)(object)base.m_owner)) { base.m_owner.OnReceivedDamage -= HandleBreakOnOwnerDamage; } Object.Destroy((Object)(object)m_extantOrbital.gameObject); m_extantOrbital = null; } } public override void Update() { //IL_01c4: 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) ((PassiveItem)this).Update(); if (HasAdvancedUpgradeSynergy) { if (m_advancedSynergyUpgradeActive && (!Object.op_Implicit((Object)(object)base.m_owner) || !CustomSynergies.PlayerHasActiveSynergy(base.m_owner, AdvancedUpgradeSynergy))) { if (Object.op_Implicit((Object)(object)base.m_owner)) { for (int i = 0; i < advancedSynergyModifiers.Count; i++) { ((BraveBehaviour)base.m_owner).healthHaver.damageTypeModifiers.Remove(advancedSynergyModifiers[i]); } } m_advancedSynergyUpgradeActive = false; DestroyOrbital(); if (Object.op_Implicit((Object)(object)base.m_owner)) { CreateOrbital(base.m_owner); } } else if (!m_advancedSynergyUpgradeActive && Object.op_Implicit((Object)(object)base.m_owner) && CustomSynergies.PlayerHasActiveSynergy(base.m_owner, AdvancedUpgradeSynergy)) { m_advancedSynergyUpgradeActive = true; DestroyOrbital(); if (Object.op_Implicit((Object)(object)base.m_owner)) { CreateOrbital(base.m_owner); } for (int j = 0; j < advancedSynergyModifiers.Count; j++) { ((BraveBehaviour)base.m_owner).healthHaver.damageTypeModifiers.Add(advancedSynergyModifiers[j]); } } } if (!HasUpgradeSynergy) { return; } if (m_synergyUpgradeActive && (!Object.op_Implicit((Object)(object)base.m_owner) || !base.m_owner.HasActiveBonusSynergy(UpgradeSynergy, false))) { if (Object.op_Implicit((Object)(object)base.m_owner)) { for (int k = 0; k < synergyModifiers.Length; k++) { ((BraveBehaviour)base.m_owner).healthHaver.damageTypeModifiers.Remove(synergyModifiers[k]); } } m_synergyUpgradeActive = false; DestroyOrbital(); if (Object.op_Implicit((Object)(object)base.m_owner)) { CreateOrbital(base.m_owner); } } else if (!m_synergyUpgradeActive && Object.op_Implicit((Object)(object)base.m_owner) && base.m_owner.HasActiveBonusSynergy(UpgradeSynergy, false)) { m_synergyUpgradeActive = true; DestroyOrbital(); if (Object.op_Implicit((Object)(object)base.m_owner)) { CreateOrbital(base.m_owner); } for (int l = 0; l < synergyModifiers.Length; l++) { ((BraveBehaviour)base.m_owner).healthHaver.damageTypeModifiers.Add(synergyModifiers[l]); } } } public override void Pickup(PlayerController player) { ((PassiveItem)this).Pickup(player); player.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Combine(player.OnNewFloorLoaded, new Action<PlayerController>(HandleNewFloor)); for (int i = 0; i < modifiers.Length; i++) { ((BraveBehaviour)player).healthHaver.damageTypeModifiers.Add(modifiers[i]); } CreateOrbital(player); } private void HandleNewFloor(PlayerController obj) { DestroyOrbital(); CreateOrbital(obj); } public override DebrisObject Drop(PlayerController player) { DestroyOrbital(); player.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Remove(player.OnNewFloorLoaded, new Action<PlayerController>(HandleNewFloor)); for (int i = 0; i < modifiers.Length; i++) { ((BraveBehaviour)player).healthHaver.damageTypeModifiers.Remove(modifiers[i]); } for (int j = 0; j < synergyModifiers.Length; j++) { ((BraveBehaviour)player).healthHaver.damageTypeModifiers.Remove(synergyModifiers[j]); } return ((PassiveItem)this).Drop(player); } public override void OnDestroy() { if ((Object)(object)base.m_owner != (Object)null) { PlayerController owner = base.m_owner; owner.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Remove(owner.OnNewFloorLoaded, new Action<PlayerController>(HandleNewFloor)); for (int i = 0; i < modifiers.Length; i++) { ((BraveBehaviour)base.m_owner).healthHaver.damageTypeModifiers.Remove(modifiers[i]); } for (int j = 0; j < synergyModifiers.Length; j++) { ((BraveBehaviour)base.m_owner).healthHaver.damageTypeModifiers.Remove(synergyModifiers[j]); } base.m_owner.OnReceivedDamage -= HandleBreakOnOwnerDamage; } DestroyOrbital(); ((PassiveItem)this).OnDestroy(); } } public class EasyTrailBullet : BraveBehaviour { public Texture _gradTexture; private Projectile proj; public Vector2 TrailPos; public Color BaseColor; public Color StartColor; public Color EndColor; public float LifeTime; public float StartWidth; public float EndWidth; public EasyTrailBullet() { //IL_0018: 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_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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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) TrailPos = Vector2.op_Implicit(new Vector3(0f, 0f, 0f)); BaseColor = Color.red; StartColor = Color.red; EndColor = Color.white; LifeTime = 1f; StartWidth = 1f; EndWidth = 0f; } public void Start() { //IL_003b: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) proj = ((BraveBehaviour)this).projectile; GameObject val = ETGMod.AddChild(((Component)((BraveBehaviour)this).projectile).gameObject, "trail object", new Type[0]); val.transform.position = ((BraveBehaviour)((BraveBehaviour)this).projectile).transform.position; val.transform.localPosition = Vector2.op_Implicit(TrailPos); TrailRenderer val2 = val.AddComponent<TrailRenderer>(); ((Renderer)val2).shadowCastingMode = (ShadowCastingMode)0; ((Renderer)val2).receiveShadows = false; Material val3 = new Material(Shader.Find("Sprites/Default")); val3.mainTexture = _gradTexture; ((Renderer)val2).material = val3; val2.minVertexDistance = 0.1f; val3.SetColor("_Color", BaseColor); val2.startColor = StartColor; val2.endColor = EndColor; val2.time = LifeTime; val2.startWidth = StartWidth; val2.endWidth = EndWidth; } } public class EasyTrailMisc : BraveBehaviour { public Texture _gradTexture; private GameObject gameobject; public Vector2 TrailPos; public Color BaseColor; public Color StartColor; public Color EndColor; public float LifeTime; public float StartWidth; public float EndWidth; public EasyTrailMisc() { //IL_0018: 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_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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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) TrailPos = Vector2.op_Implicit(new Vector3(0f, 0f, 0f)); BaseColor = Color.red; StartColor = Color.red; EndColor = Color.white; LifeTime = 1f; StartWidth = 1f; EndWidth = 0f; } public void Start() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) gameobject = ((Component)this).gameObject; GameObject val = ETGMod.AddChild(((Component)this).gameObject, "trail object", new Type[0]); val.transform.position = ((BraveBehaviour)this).transform.position; val.transform.localPosition = Vector2.op_Implicit(TrailPos); TrailRenderer val2 = val.AddComponent<TrailRenderer>(); ((Renderer)val2).shadowCastingMode = (ShadowCastingMode)0; ((Renderer)val2).receiveShadows = false; Material val3 = new Material(Shader.Find("Sprites/Default")); val3.mainTexture = _gradTexture; ((Renderer)val2).material = val3; val2.minVertexDistance = 0.1f; val3.SetColor("_Color", BaseColor); val2.startColor = StartColor; val2.endColor = EndColor; val2.time = LifeTime; val2.startWidth = StartWidth; val2.endWidth = EndWidth; } } public static class Bubbs { public static GenericLootTable ShopKeeperLootTable; public static GameObject HandyGameObject; public static void Init() { //IL_0b8f: Unknown result type (might be due to invalid IL or missing references) //IL_0ba3: Unknown result type (might be due to invalid IL or missing references) //IL_0bd3: Unknown result type (might be due to invalid IL or missing references) //IL_0bd8: Unknown result type (might be due to invalid IL or missing references) //IL_0d0d: Unknown result type (might be due to invalid IL or missing references) //IL_0d24: Unknown result type (might be due to invalid IL or missing references) //IL_0d53: Unknown result type (might be due to invalid IL or missing references) //IL_0d5a: Expected O, but got Unknown NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Everything I say is {ws}waterproof!{w} Or if not, {wq}water-absorbent!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Perhaps I could tell you about my impending odyssey!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Frugality is not a virtue, I assure you."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Purchase thoroughly! You'll never know when I shove off!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "You look like an aspiring patron of scientific research!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "{ws}The sea is the final frontier!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "I've been designing some new fins!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "{wq}Did you know?:{w} clams can smell colours!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Once, people could breathe in water! Then we forgot how."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Whale crabs. Octo-salmon. Barnacle sharks. Who knows what I'll find?"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "The helmet never comes off! Well, except when I get hungry."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "I theorize that beneath this ocean, there is another, wetter, ocean!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Undersea exploration isn't a job, it's a {wb}privilege!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "I've done several trial runs in local puddles. I'm ready for the big show!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Sea monsters are no more than misunderstood {wj}ambassadors of the deep.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Exploring the sea in a boat is like eating a melon by the rind!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Bilgewater is a lovely place—principally when facing out to sea."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "My research indicates that if you hold your breath long enough, you can kick the habit! You just need to stay awake."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "One day, the ocean will be my oyster—and the ocean's oysters will be my breakfast!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Oh, don't get me started on {ws}buoyancy.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Gadgetry in Piltover, extinct overlords in Freljord? Hmph! I'll show them!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "There's evidence to suggest that manatees once ruled the {wr}land and sea!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "I can't wait to school some fish."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "So many {wj}mysteries{w} to explore."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "I can't wait to see what lies beneath!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "The real sunken {wb}treasure{w} is aquatic knowledge."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_GENERIC_TALK", "Just as soon as I perfect my submersible, I'll be off!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_STOPPER_TALK", "{wj}Soon, very soon...{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_STOPPER_TALK", "{wb}Every coin counts.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_STOPPER_TALK", "{wq}What mysteries await?{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_STOPPER_TALK", "{ws}To knowledge!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "{wb}Perfect!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "{wb}Delightful!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "{wb}Impeccable taste!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "My, that is a {wq}beauty!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Every little bit helps!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "You've just supported science!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "That is a singular find… oh, but I have more, if you need them!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "It complements you {wq}perfectly.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "That is guaranteed for, at a minimum, ballast."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "I've sold four of those today!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "That will spur—or deter—violence swimmingly!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Yeah, I have absolutely no idea what that does. {wr}Good luck!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Thank you for contributing to my expedition."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Would you like that wrapped?"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "{wj}Uh, sorry,{w} I haven't gotten around to drying that off!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "I prefer you only killed bad people with this—or nautical sceptics."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "That is, {wj}uh… most probably valuable!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "A bare minimum of rust."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "No price is too great for {wb}progress.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "That will serve you {wb}splendidly.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Keep this up, and I'll be diving in no time."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "You'll receive a special thanks in my paper."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Now that you've got the hang of it, {wq}purchase something else!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Why not pick up a gift… {wr}for science?{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Your gold will be put to good use."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "Now you're part of the adventure!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "No need to explain what you plan to do with that."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "I can tell you're a collector."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_PURCHASE_TALK", "There's simply no better… {wj}for whatever that does.{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "Ah, yes, but science, {wj}tragically{w}, doesn’t operate on credit."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "{wq}I’d love to fund your dreams{w}, but I can barely fund my own!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "{wb}That’s the spirit!{w} The financial spirit, however, is lacking."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "Sorry, but seawater doesn’t pay the bills."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "{wr}If only enthusiasm were a currency!{w} You’d be rich indeed."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "That price is, {wj}regrettably{w}, non-negotiable—even for pioneers."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "Oh, don’t worry. Many great expeditions ended before they began."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "Perhaps a smaller trinket? To, ah, {ws}stay afloat?{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "{wr}Close!{w} Now, just a few more clams in the purse, as they say."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "I accept gold, doubloons, and… well, mostly just gold."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "Research may be priceless, but my wares are not."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "I could loan it to you, but then I’d need to repossess it underwater."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "Come now, even barnacles save more diligently!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_NOSALE_TALK", "{wb}Ah, a true visionary!{w} Sadly, visions don’t spend well at market."); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_INTRO_TALK", "All profits go to {wq}cutting-edge{w} research!"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_INTRO_TALK", "Have I read you my thesis on {wj}sea slugs?{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_INTRO_TALK", "{wq}Welcome to the dive site!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_INTRO_TALK", "Would you like to join my {wr}expedition?{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_INTRO_TALK", "I brew my potions with salt water for that extra {wb}zing!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_ATTACKED_TALK", "{wr}Uncalled for!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_ATTACKED_TALK", "{wj}No discounts!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_ATTACKED_TALK", "{wr}Not the equipment!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_ATTACKED_TALK", "{wr}Science under siege!{w}"); NpcTools.AddComplex(Databases.Strings.Core, "#BUBBS_STOLEN_TALK", "{wr}Robbery{w} is hardly the scientific method!"); List<int> list = new List<int> { BladeOfTheRuinedKing.ID, ExperimentalHexplate.ID, GuardianAngel.ID, GuinsoosRageblade.ID, Hubris.ID, KrakenSlayer.ID, LiandrysTorment.ID, MuramanaSynergyActivation.ID, Manamune.ID, Muramana.ID, StatikkShiv.ID, Stridebreaker.ID, SunfireAegis.ID, Thornmail.ID, ZhonyasHourglass.ID, Collector.ID, FrozenHeart.ID, RodOfAges.ID, HorizonFocus.ID, Puppeteer.ID, Galeforce.ID, RylaisCrystalScepter.ID, Shadowflame.ID, NavoriQuickblades.ID, BraumsShield.ID, PowPow.ID, PowPowAltForm.ID, HextechRifle.ID, ElectricRifle.ID, PrayerBeads.ID, Whisper.ID, Crossblade.ID, SoulSpear.ID, ShieldOfMoltenStone.ID, CloakOfStarryNight.ID, ZekesConvergence.ID, Redemption.ID, DetonationOrb.ID, Sheen.ID, FatedAshes.ID, Cull.ID, PerfectlyTimedStopwatch.ID, TearOfTheGoddess.ID }; ShopKeeperLootTable = LootTableTools.CreateLootTable(); foreach (int item in list) { ShopKeeperLootTable.AddItemToPool(item); } GameObject val = ShopAPI.SetUpShop("BUBBS", "LOLItems", new List<string> { "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_idle_01", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_idle_02", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_idle_03", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_idle_04" }, 6, new List<string> { "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_talk_01", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_talk_02", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_talk_03", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_talk_04" }, 6, ShopKeeperLootTable, (ShopCurrencyType)0, "#BUBBS_GENERIC_TALK", "#BUBBS_STOPPER_TALK", "#BUBBS_PURCHASE_TALK", "#BUBBS_NOSALE_TALK", "#BUBBS_INTRO_TALK", "#BUBBS_ATTACKED_TALK", "#BUBBS_STOLEN_TALK", new Vector3(2.75f, 2.875f, 0f), new Vector3(0.1875f, 3f, 0f), (VoiceBoxes)21, ShopAPI.defaultItemPositions, 0.8f, false, (StatModifier[])null, (Func<CustomShopController, PlayerController, int, bool>)null, (Func<CustomShopController, PlayerController, int, int>)null, (Func<CustomShopController, CustomShopItemController, PickupObject, int>)null, (Func<PlayerController, PickupObject, int, bool>)null, (Func<PlayerController, PickupObject, int, bool>)null, (string)null, (string)null, true, true, "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_carpet", (Vector2?)Vector2.op_Implicit(new Vector3(0f, 0f, 0f)), true, "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_minimap", true, 0.1f, (DungeonPrerequisite[])null, 2f, (ShopItemPoolType)0, false, (IntVector2?)null, (IntVector2?)null); List<string> list2 = new List<string> { "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_01", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_02", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_03", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_04", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_05", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_06", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_07", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_08", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_09", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_10", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_11", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_12", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_13", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_14", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_15", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_16", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_17", "LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/bubbs_buy_18" }; ShopAPI.AddAdditionalAnimationsToShop(val, list2, 6f, (List<string>)null, 6f, (List<string>)null, 6f); PrototypeDungeonRoom room = RoomFactory.BuildNewRoomFromResource("LOLItems/Resources/npc_sprites/shopkeeper/bubbs_sprites/test.newroom", (Assembly)null).room; RegisterShopRoom(val, room, new Vector2(7.5f, 5f), 1.2f); List<ProceduralFlowModifierData> injectionData = GameManager.Instance.GlobalInjectionData.entries[2].injectionData.InjectionData; ProceduralFlowModifierData val2 = new ProceduralFlowModifierData(); val2.annotation = "bubbs"; val2.placementRules = new List<FlowModifierPlacementType> { (FlowModifierPlacementType)1 }; val2.exactRoom = room; val2.prerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; val2.CanBeForcedSecret = false; injectionData.Add(val2); HandyGameObject = val; } public static void RegisterShopRoom(GameObject shop, PrototypeDungeonRoom protoroom, Vector2 vector, float m_weight = 1f) { //IL_0003: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_004a: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown //IL_00e1: 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) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) protoroom.category = (RoomCategory)2; DungeonPrerequisite[] array = (DungeonPrerequisite[])((shop.GetComponent<CustomShopController>()?.prerequisites != null) ? ((Array)shop.GetComponent<CustomShopController>().prerequisites) : ((Array)new DungeonPrerequisite[0])); protoroom.placedObjectPositions.Add(vector); List<PrototypePlacedObjectData> placedObjects = protoroom.placedObjects; PrototypePlacedObjectData val = new PrototypePlacedObjectData(); val.contentsBasePosition = vector; val.fieldData = new List<PrototypePlacedObjectFieldData>(); val.instancePrerequisites = array; val.linkedTriggerAreaIDs = new List<int>(); DungeonPlaceable val2 = new DungeonPlaceable(); val2.width = 2; val2.height = 2; val2.respectsEncounterableDifferentiator = true; List<DungeonPlaceableVariant> list = new List<DungeonPlaceableVariant>(); DungeonPlaceableVariant val3 = new DungeonPlaceableVariant(); val3.percentChance = 1f; val3.nonDatabasePlaceable = shop; val3.prerequisites = array; val3.materialRequirements = (DungeonPlaceableRoomMaterialRequirement[])(object)new DungeonPlaceableRoomMaterialRequirement[0]; list.Add(val3); val2.variantTiers = list; val.placeableContents = val2; placedObjects.Add(val); RoomData val4 = default(RoomData); val4.room = protoroom; val4.isSpecialRoom = true; val4.category = "SPECIAL"; val4.specialSubCategory = "WEIRD_SHOP"; RoomData val5 = val4; val5.weight = 1f; RoomFactory.rooms.Add(((Object)shop).name, val5); DungeonHandler.Register(val5); } } internal class Collector : PassiveItem { private static float DamageStat = 1.1f; private static int DeathGoldStat = 1; private static float DeathGoldChance = 0.3f; private static float ExecuteThreshold = 0.05f; public static int ID; public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) string text = "The Collector"; string text2 = "LOLItems/Resources/passive_item_sprites/the_collector_pixelart_sprite"; GameObject val = new GameObject(text); Collector collector = val.AddComponent<Collector>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "\"death and taxes\""; string text4 = "A weapon that once belonged to a legendary pirate. It now rests in your hands and lends you a desire for gold. An orange sounds good right about now.\n"; ItemBuilder.SetupItem((PickupObject)(object)collector, text3, text4, "LOLItems"); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)collector, (StatType)5, DamageStat, (ModifyMethod)1); ((PickupObject)collector).quality = (ItemQuality)4; ID = ((PickupObject)collector).PickupObjectId; } public override void Pickup(PlayerController player) { ((PassiveItem)this).Pickup(player); Plugin.Log("Player picked up " + ((PickupObject)this).EncounterNameOrDisplayName); player.PostProcessProjectile += OnPostProcessProjectile; player.PostProcessBeamTick += OnPostProcessProjectile; player.OnKilledEnemyContext += DeathGoldDrop; } public override void DisableEffect(PlayerController player) { ((PassiveItem)this).DisableEffect(player); Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).EncounterNameOrDisplayName); player.PostProcessProjectile -= OnPostProcessProjectile; player.PostProcessBeamTick -= OnPostProcessProjectile; player.OnKilledEnemyContext -= DeathGoldDrop; } private void OnPostProcessProjectile(BeamController beam, SpeculativeRigidbody hitRigidbody, float tickrate) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hitRigidbody != (Object)null || (Object)(object)((BraveBehaviour)hitRigidbody).aiActor != (Object)null) { float currentHealthPercentage = ((BraveBehaviour)((BraveBehaviour)hitRigidbody).aiActor).healthHaver.GetCurrentHealthPercentage(); if (currentHealthPercentage <= ExecuteThreshold) { ((BraveBehaviour)((BraveBehaviour)hitRigidbody).aiActor).healthHaver.ApplyDamage(((BraveBehaviour)((BraveBehaviour)hitRigidbody).aiActor).healthHaver.GetMaxHealth(), Vector2.zero, "the_collector_death_execute", (CoreDamageTypes)0, (DamageCategory)5, false, (PixelCollider)null, false); } } } private void OnPostProcessProjectile(Projectile proj, float f) { proj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(proj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile projHit, SpeculativeRigidbody enemy, bool fatal) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) float currentHealthPercentage = ((BraveBehaviour)enemy).healthHaver.GetCurrentHealthPercentage(); if (currentHealthPercentage <= ExecuteThreshold) { ((BraveBehaviour)enemy).healthHaver.ApplyDamage(((BraveBehaviour)enemy).healthHaver.GetMaxHealth(), Vector2.zero, "the_collector_death_execute", (CoreDamageTypes)0, (DamageCategory)5, false, (PixelCollider)null, false); } }); } private void DeathGoldDrop(PlayerController player, HealthHaver enemy) { ((BraveBehaviour)enemy).healthHaver.OnDeath += delegate { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (Random.value < DeathGoldChance) { if (((BraveBehaviour)enemy).healthHaver.IsBoss || ((BraveBehaviour)enemy).healthHaver.IsSubboss) { LootEngine.SpawnCurrency(((BraveBehaviour)enemy).specRigidbody.UnitCenter, DeathGoldStat * 10, false); } else { LootEngine.SpawnCurrency(((BraveBehaviour)enemy).specRigidbody.UnitCenter, DeathGoldStat, false); } } }; } } internal class FrozenHeart : AuraItem { private static int ArmorStat = 1; private static float WintersCaressCrippleRatio = 0.7f; private static float WintersCaressRange = 8f; public static int ID; private static GameActorCrippleEffect WintersCaressCrippleEffect = new GameActorCrippleEffect { duration = 1f, effectIdentifier = "frozen_heart_cripple_effect", resistanceType = (EffectResistanceType)0, AppliesOutlineTint = true, OutlineTintColor = ExtendedColours.skyblue, CrippleAmount = WintersCaressCrippleRatio }; public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) string text = "Frozen Heart-LOLItems"; string text2 = "LOLItems/Resources/passive_item_sprites/frozen_heart_pixelart_sprite"; GameObject val = new GameObject(text); FrozenHeart frozenHeart = val.AddComponent<FrozenHeart>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Warning: Do not thaw!"; string text4 = "Emits a chilling air that causes those nearby to have cold hands. It might just be a disguised AC unit. They keep complaining that they would've killed you if it weren't for their cold hands.\n"; ItemBuilder.SetupItem((PickupObject)(object)frozenHeart, text3, text4, "LOLItems"); ((PassiveItem)frozenHeart).ArmorToGainOnInitialPickup = ArmorStat; ((AuraItem)frozenHeart).AuraRadius = WintersCaressRange; ((AuraItem)frozenHeart).DamagePerSecond = 0f; ((PickupObject)frozenHeart).quality = (ItemQuality)3; GunExt.SetName((PickupObject)(object)frozenHeart, "Frozen Heart"); ID = ((PickupObject)frozenHeart).PickupObjectId; } public override void Pickup(PlayerController player) { ((PassiveItem)this).Pickup(player); Plugin.Log("Player picked up " + ((PickupObject)this).EncounterNameOrDisplayName); } public override void DisableEffect(PlayerController player) { ((PassiveItem)this).DisableEffect(player); Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).EncounterNameOrDisplayName); } public override void DoAura() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.m_extantAuraVFX == (Object)null) { } base.didDamageEnemies = false; if (base.AuraAction == null) { base.AuraAction = delegate(AIActor actor, float dist) { ((GameActor)actor).ApplyEffect((GameActorEffect)(object)WintersCaressCrippleEffect, 1f, (Projectile)null); }; } if ((Object)(object)((PassiveItem)this).m_owner != (Object)null && ((PassiveItem)this).m_owner.CurrentRoom != null) { ((PassiveItem)this).m_owner.CurrentRoom.ApplyActionToNearbyEnemies(((GameActor)((PassiveItem)this).m_owner).CenterPosition, ((AuraItem)this).ModifiedAuraRadius, base.AuraAction); } if (base.didDamageEnemies) { ((PassiveItem)this).m_owner.DidUnstealthyAction(); } } } public static class HelpfulMethods { public static string[,] FloorNames = new string[10, 2] { { "tt_castle", "Keep of the Lead Lord / Floor 1" }, { "tt_sewer", "Oubliette / Floor 1.5" }, { "tt5", "Gungeon Proper / Floor 2" }, { "tt_cathedral", "Abbey of the True Gun / Floor 2.5" }, { "tt_mines", "Black Powder Mine / Floor 3" }, { "ss_resourcefulrat", "Resourceful Rat's Lair / Floor 3.5" }, { "tt_catacombs", "Hollow / Floor 4" }, { "tt_nakatomi", "R&G Dept / Floor 4.5" }, { "tt_forge", "Forge / Floor 5" }, { "tt_bullethell", "Bullet Hell / Floor 6" } }; public static float GetFloorDamageScale() { return GameManager.Instance.GetLastLoadedLevelDefinition().dungeonSceneName switch { "tt_castle" => 1f, "tt_sewer" => 1.25f, "tt5" => 1.25f, "tt_cathedral" => 1.5f, "tt_mines" => 1.5f, "ss_resourcefulrat" => 1.75f, "tt_catacombs" => 1.75f, "tt_nakatomi" => 2f, "tt_forge" => 2f, "tt_bullethell" => 2.25f, _ => 0f, }; } public static void DoRandomParticleBurst(int num, Vector3 minPosition, Vector3 maxPosition, float angleVariance, float magnitudeVariance, float? startSize = null, float? startLifetime = null, Color? startColor = null, SparksType systemType = 0) { //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_001b: 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_002c: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) Vector3 val2 = default(Vector3); for (int i = 0; i < num; i++) { Vector3 val = Vector2.op_Implicit(MathsAndLogicHelper.DegreeToVector2(BraveUtility.RandomAngle())); ((Vector3)(ref val2))..ctor(Random.Range(minPosition.x, maxPosition.x), Random.Range(minPosition.y, maxPosition.y), Random.Range(minPosition.z, maxPosition.z)); Vector3 val3 = Quaternion.Euler(0f, 0f, Random.Range(0f - angleVariance, angleVariance)) * (((Vector3)(ref val)).normalized * Random.Range(((Vector3)(ref val)).magnitude - magnitudeVariance, ((Vector3)(ref val)).magnitude + magnitudeVariance)); GlobalSparksDoer.DoSingleParticle(val2, val3, startSize, startLifetime, startColor, systemType); } } public static float GetFloorPriceMod() { return GameManager.Instance.GetLastLoadedLevelDefinition().priceMultiplier; } public static void PlayRandomSFX(GameObject gameObject, string[] sfxList) { Random random = new Random(); int num = random.Next(sfxList.Length); string text = sfxList[num]; AkSoundEngine.PostEvent(text, gameObject); } public static void PlayRandomSFX(GameObject gameObject, List<string> sfxList) { Random random = new Random(); int index = random.Next(sfxList.Count); string text = sfxList[index]; AkSoundEngine.PostEvent(text, gameObject); } public static float GetFloorValue() { string dungeonSceneName = GameManager.Instance.GetLastLoadedLevelDefinition().dungeonSceneName; for (int i = 0; i < FloorNames.GetLength(0); i++) { string text = FloorNames[i, 0]; if (dungeonSceneName == text) { return text switch { "tt_castle" => 1f, "tt_sewer" => 1.5f, "tt5" => 2f, "tt_cathedral" => 2.5f, "tt_mines" => 3f, "ss_resourcefulrat" => 3.5f, "tt_catacombs" => 4f, "tt_nakatomi" => 4.5f, "tt_forge" => 5f, "tt_bullethell" => 6f, _ => 0f, }; } } return 0f; } public static void CustomNotification(string header, string text, tk2dBaseSprite sprite = null, NotificationColor? color = null) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (sprite == null) { sprite = GameUIRoot.Instance.notificationController.notificationObjectSprite; } GameUIRoot.Instance.notificationController.DoCustomNotification(header, text, sprite.Collection, sprite.spriteId, color.GetValueOrDefault((NotificationColor)2), false, false); } public static void AddItemToSynergy(this PickupObject obj, CustomSynergyType type) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddItemToSynergy(type, obj.PickupObjectId); } public static void AddItemToSynergy(CustomSynergyType type, int id) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) AdvancedSynergyEntry[] synergies = GameManager.Instance.SynergyManager.synergies; foreach (AdvancedSynergyEntry val in synergies) { if (!val.bonusSynergies.Contains(type) || !((Object)(object)PickupObjectDatabase.GetById(id) != (Object)null)) { continue; } PickupObject byId = PickupObjectDatabase.GetById(id); if (byId is Gun) { if (val.OptionalGunIDs != null) { val.OptionalGunIDs.Add(id); continue; } val.OptionalGunIDs = new List<int> { id }; } else if (val.OptionalItemIDs != null) { val.OptionalItemIDs.Add(id); } else { val.OptionalItemIDs = new List<int> { id }; } } } } internal class HorizonFocus : PassiveItem { private static float DamageStat = 1.1f; private static float HyperShotMaxDistance = 15f; private static float HyperShotMinDistance = 3f; private static float HyperShotMaxDamageInc = 0.25f; public static int ID; public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) string text = "Horizon Focus"; string text2 = "LOLItems/Resources/passive_item_sprites/horizon_focus_pixelart_sprite"; GameObject val = new GameObject(text); HorizonFocus horizonFocus = val.AddComponent<HorizonFocus>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "*not camping btw*"; string text4 = "A futuristic gauntlet that seems to improve your aim at far ranges, allowing your long range attacks to deal increased damage. There seems to be a signature: Ja-c- -nd Vi--or\n"; ItemBuilder.SetupItem((PickupObject)(object)horizonFocus, text3, text4, "LOLItems"); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)horizonFocus, (StatType)5, DamageStat, (ModifyMethod)1); ((PickupObject)horizonFocus).quality = (ItemQuality)4; ID = ((PickupObject)horizonFocus).PickupObjectId; } public override void Pickup(PlayerController player) { ((PassiveItem)this).Pickup(player); Plugin.Log("Player picked up " + ((PickupObject)this).EncounterNameOrDisplayName); player.PostProcessProjectile += OnPostProcessProjectile; player.PostProcessBeamTick += OnPostProcessProjectile; } public override void DisableEffect(PlayerController player) { ((PassiveItem)this).DisableEffect(player); Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).EncounterNameOrDisplayName); player.PostProcessProjectile -= OnPostProcessProjectile; player.PostProcessBeamTick -= OnPostProcessProjectile; } private void OnPostProcessProjectile(BeamController beam, SpeculativeRigidbody hitRigidbody, float tickrate) { //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) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)beam)) { return; } GameActor owner = beam.Owner; PlayerController val = (PlayerController)(object)((owner is PlayerController) ? owner : null); if (val != null) { float num = Vector2.Distance(Vector2.op_Implicit(((BraveBehaviour)val).transform.position), Vector2.op_Implicit(((BraveBehaviour)((BraveBehaviour)hitRigidbody).aiActor).transform.position)); if (!(num <= HyperShotMinDistance)) { float num2 = Mathf.Min(num, HyperShotMaxDistance) / HyperShotMaxDistance * HyperShotMaxDamageInc; float num3 = ((BraveBehaviour)beam).projectile.baseData.damage * num2 * tickrate; ((BraveBehaviour)((BraveBehaviour)hitRigidbody).aiActor).healthHaver.ApplyDamage(num3, Vector2.zero, "horizon_focus_hypershot_amp", (CoreDamageTypes)0, (DamageCategory)0, false, (PixelCollider)null, false); } } } private void OnPostProcessProjectile(Projectile proj, float f) { if (!Object.op_Implicit((Object)(object)proj)) { return; } GameActor owner = proj.Owner; PlayerController player = (PlayerController)(object)((owner is PlayerController) ? owner : null); if (player == null) { return; } proj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(proj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile projHit, SpeculativeRigidbody enemy, bool fatal) { //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_001c: 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_006b: Unknown result type (might be due to invalid IL or missing references) float num = Vector2.Distance(Vector2.op_Implicit(((BraveBehaviour)player).transform.position), Vector2.op_Implicit(((BraveBehaviour)projHit).transform.position)); if (!(num <= HyperShotMinDistance)) { float num2 = Mathf.Min(num, HyperShotMaxDistance) / HyperShotMaxDistance * HyperShotMaxDamageInc; float num3 = projHit.baseData.damage * num2; ((BraveBehaviour)enemy).healthHaver.ApplyDamage(num3, Vector2.zero, "horizon_focus_hypershot_amp", (CoreDamageTypes)0, (DamageCategory)0, false, (PixelCollider)null, false); } }); } } public class Muramana : PassiveItem { private static float DamageStat = 1.2f; private static float ClipAndAmmoIncrease = 1.5f; private static float MuramanaShockBaseDamage = 5f; public static int ID; public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) string text = "Muramana"; string text2 = "LOLItems/Resources/passive_item_sprites/muramana_pixelart_sprite_outline"; GameObject val = new GameObject(text); Muramana muramana = val.AddComponent<Muramana>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "The Peak of Swordsmithing"; string text4 = "A blade forged by Masamune and wielded by the worthy, the Manamune's true power has been unlocked and empowers your every attack.\n"; ItemBuilder.SetupItem((PickupObject)(object)muramana, text3, text4, "LOLItems"); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)muramana, (StatType)5, DamageStat, (ModifyMethod)1); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)muramana, (StatType)16, ClipAndAmmoIncrease, (ModifyMethod)1); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)muramana, (StatType)9, ClipAndAmmoIncrease, (ModifyMethod)1); ((PickupObject)muramana).quality = (ItemQuality)(-100); ((PickupObject)muramana).ShouldBeExcludedFromShops = true; ID = ((PickupObject)muramana).PickupObjectId; } public override void Pickup(PlayerController player) { ((PassiveItem)this).Pickup(player); Plugin.Log("Player picked up " + ((PickupObject)this).EncounterNameOrDisplayName); player.PostProcessProjectile += MuramanaShock; player.PostProcessBeamTick += MuramanaShock; } public override void DisableEffect(PlayerController player) { ((PassiveItem)this).DisableEffect(player); Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).EncounterNameOrDisplayName); player.PostProcessProjectile -= MuramanaShock; player.PostProcessBeamTick -= MuramanaShock; } private void MuramanaShock(BeamController beam, SpeculativeRigidbody hitRigidbody, float tickrate) { //IL_00da: Unknown result type (might be due to invalid IL or missing references) GameActor owner = beam.Owner; PlayerController val = (PlayerController)(object)((owner is PlayerController) ? owner : null); if (val != null) { Gun currentGun = ((GameActor)val).CurrentGun; if (currentGun != null && (Object)(object)hitRigidbody != (Object)null && (Object)(object)((BraveBehaviour)hitRigidbody).aiActor != (Object)null) { float num = Mathf.Max(0f, (val.stats.GetStatValue((StatType)16) - 1f) / 5f); float num2 = Mathf.Max(0f, (val.stats.GetStatValue((StatType)9) - 1f) / 5f); float num3 = Mathf.Max(1f, 1f + num + num2); float num4 = Mathf.Max(1f, MuramanaShockBaseDamage * num3) * tickrate; ((BraveBehaviour)((BraveBehaviour)hitRigidbody).aiActor).healthHaver.ApplyDamage(num4, Vector2.zero, "muramana_shock_damage", (CoreDamageTypes)0, (DamageCategory)0, false, (PixelCollider)null, false); } } } private void MuramanaShock(Projectile proj, float f) { if (!((Object)(object)proj.Shooter == (Object)(object)((BraveBehaviour)proj.Owner).specRigidbody)) { return; } GameActor owner = proj.Owner; PlayerController player = (PlayerController)(object)((owner is PlayerController) ? owner : null); if (player == null) { return; } Gun currentGun = ((GameActor)player).CurrentGun; if (currentGun == null) { return; } proj.OnHitEnemy = (Action<Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(proj.OnHitEnemy, (Action<Projectile, SpeculativeRigidbody, bool>)delegate(Projectile projHit, SpeculativeRigidbody enemy, bool fatal) { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)enemy != (Object)null && (Object)(object)((BraveBehaviour)enemy).healthHaver != (Object)null) { float num = Mathf.Max(0f, (player.stats.GetStatValue((StatType)16) - 1f) / 5f); float num2 = Mathf.Max(0f, (player.stats.GetStatValue((StatType)9) - 1f) / 5f); float num3 = Mathf.Max(1f, 1f + num + num2); float num4 = Mathf.Max(1f, MuramanaShockBaseDamage * num3); ((BraveBehaviour)enemy).healthHaver.ApplyDamage(num4, Vector2.zero, "muramana_shock_damage", (CoreDamageTypes)0, (DamageCategory)0, false, (PixelCollider)null, false); } }); } } internal class RodOfAges : PassiveItem { [CompilerGenerated] private sealed class <TimelessStackingTracker>d__12 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PlayerController player; public RodOfAges <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TimelessStackingTracker>d__12(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; ItemBuilder.RemovePassiveStatModifier((PickupObject)(object)<>4__this, (StatType)5); ItemBuilder.RemovePassiveStatModifier((PickupObject)(object)<>4__this, (StatType)9); ItemBuilder.RemovePassiveStatModifier((PickupObject)(object)<>4__this, (StatType)16); <>4__this.TimelessStackCount++; ItemBuilder.AddPassiveStatModifier((PickupObject)(object)<>4__this, (StatType)5, 1f + TimelessDamageIncrementValue * (float)<>4__this.TimelessStackCount, (ModifyMethod)1); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)<>4__this, (StatType)9, 1f + TimelessIncrementValue * (float)<>4__this.TimelessStackCount, (ModifyMethod)1); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)<>4__this, (StatType)16, 1f + TimelessIncrementValue * (float)<>4__this.TimelessStackCount, (ModifyMethod)1); VolleyRebuildHelpers.RecalculateStatsWithoutRebuildingGunVolleys(player.stats, player); break; } if ((float)<>4__this.TimelessStackCount * TimelessIncrementValue < TimelessIncreaseMax) { <>2__current =