Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Twitch v2.4.1
plugins/Twitch.dll
Decompiled 2 years 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.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using EntityStates; using EntityStates.ClayBruiser.Weapon; using EntityStates.Commando; using EntityStates.Commando.CommandoWeapon; using EntityStates.GolemMonster; using EntityStates.LemurianBruiserMonster; using EntityStates.TwitchStates; using KinematicCharacterController; using Microsoft.CodeAnalysis; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.Projectile; using RoR2.Skills; using Twitch; using Twitch.Unlockables; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Twitch")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+7cf84427e51dda0c5487976e616cb4c8a1e1eb63")] [assembly: AssemblyProduct("Twitch")] [assembly: AssemblyTitle("Twitch")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace EntityStates.TwitchStates { public class TwitchAmbush : BaseState { public static float duration; public static float minimumStateDuration; public static string startCloakSoundString; public static string stopCloakSoundString; public static GameObject smokescreenEffectPrefab; public static Material destealthMaterial; private float stopwatch; private bool hasCastSmoke; private Animator animator; private Transform modelTransform; private TwitchController twitchController; public override void OnEnter() { ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); modelTransform = ((EntityState)this).GetModelTransform(); twitchController = ((EntityState)this).GetComponent<TwitchController>(); CastSmoke(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.Cloak); ((EntityState)this).characterBody.AddBuff(Buffs.CloakSpeed); } if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.EnterStealth(); } if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { ((EntityState)this).skillLocator.utility.SetSkillOverride((object)((EntityState)this).skillLocator.utility, global::Twitch.Twitch.ambushActiveDef, (SkillOverridePriority)3); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active) { if (((EntityState)this).characterBody.HasBuff(Buffs.Cloak)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.Cloak); } if (((EntityState)this).characterBody.HasBuff(Buffs.CloakSpeed)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.CloakSpeed); } ((EntityState)this).characterBody.AddTimedBuff(global::Twitch.Twitch.ambushBuff, 5f); ((EntityState)this).characterBody.RecalculateStats(); if (Object.op_Implicit((Object)(object)modelTransform)) { TemporaryOverlayInstance obj = TemporaryOverlayManager.AddOverlay(((Component)modelTransform).gameObject); obj.duration = 5f; obj.animateShaderAlpha = true; obj.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 7.5f, 0f); obj.destroyComponentOnEnd = true; obj.originalMaterial = Resources.Load<Material>("Materials/matPoisoned"); obj.inspectorCharacterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); } } if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.GetAmbushBuff(5f); } if (!((EntityState)this).outer.destroying) { CastSmoke(); } if (Object.op_Implicit((Object)(object)destealthMaterial)) { TemporaryOverlayInstance obj2 = TemporaryOverlayManager.AddOverlay(((Component)animator).gameObject); obj2.duration = 1f; obj2.destroyComponentOnEnd = true; obj2.originalMaterial = destealthMaterial; obj2.inspectorCharacterModel = ((Component)animator).gameObject.GetComponent<CharacterModel>(); obj2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); obj2.animateShaderAlpha = true; } if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.ExitStealth(); } if (Object.op_Implicit((Object)(object)((EntityState)this).skillLocator)) { ((EntityState)this).skillLocator.utility.UnsetSkillOverride((object)((EntityState)this).skillLocator.utility, global::Twitch.Twitch.ambushActiveDef, (SkillOverridePriority)3); } ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; if (stopwatch >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void CastSmoke() { //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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown if (!hasCastSmoke) { Util.PlaySound(Sounds.TwitchEnterStealth, ((EntityState)this).gameObject); hasCastSmoke = true; if (Object.op_Implicit((Object)(object)animator)) { animator.SetBool("isSneaking", true); } } else { Util.PlaySound(Sounds.TwitchExitStealth, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)animator)) { animator.SetBool("isSneaking", false); } } EffectManager.SpawnEffect(CastSmokescreenNoDelay.smokescreenEffectPrefab, new EffectData { origin = ((EntityState)this).transform.position }, false); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0017: 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) if (stopwatch <= minimumStateDuration) { return (InterruptPriority)2; } return (InterruptPriority)0; } static TwitchAmbush() { duration = 6f; minimumStateDuration = 0.25f; } } public class TwitchChargeBazooka : BaseSkillState { public float maximumDuration = 2.25f; public float minimumDuration = 0.5f; public float maxDamageCoefficient = 22.5f; public float minDamageCoefficient = 1.5f; public float maxProcCoefficient = 0.8f; public float minProcCoefficient = 0.1f; public float maxSpeed = 200f; public float minSpeed = 10f; public float maxRecoil = 15f; public float minRecoil = 0.5f; public float force = 500f; private float releaseDuration; private float duration; private bool hasFired; private Animator animator; private string muzzleString; private TwitchController twitchController; private GameObject chargeInstance; public override void OnEnter() { //IL_00c6: 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_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = minimumDuration / ((BaseState)this).attackSpeedStat; releaseDuration = maximumDuration / ((BaseState)this).attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); muzzleString = "Muzzle"; twitchController = ((EntityState)this).GetComponent<TwitchController>(); hasFired = false; if (Object.op_Implicit((Object)(object)twitchController)) { muzzleString = twitchController.GetMuzzleName(); } Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform val = component.FindChild(muzzleString); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)ChargeMegaFireball.chargeEffectPrefab)) { chargeInstance = Object.Instantiate<GameObject>(ChargeMegaFireball.chargeEffectPrefab, val.position, val.rotation); chargeInstance.transform.parent = val; Transform transform = chargeInstance.transform; transform.localScale *= 0.25f; chargeInstance.transform.localPosition = Vector3.zero; ScaleParticleSystemDuration component2 = chargeInstance.GetComponent<ScaleParticleSystemDuration>(); if (Object.op_Implicit((Object)(object)component2)) { component2.newDuration = releaseDuration; } } } } Util.PlayAttackSpeedSound(Sounds.TwitchCharge, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)chargeInstance)) { EntityState.Destroy((Object)(object)chargeInstance); } } private void FireBazooka() { //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { float num = (((EntityState)this).fixedAge - duration) / releaseDuration; Util.PlaySound(Sounds.TwitchAttackBazooka, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(FireMegaFireball.muzzleflashEffectPrefab, ((EntityState)this).gameObject, muzzleString, true); if (num >= 0.75f) { ((EntityState)this).PlayAnimation("Gesture, Override", "FireEmpoweredBolt", "FireBolt.playbackRate", duration * 2f, 0f); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "FireExplosive", "FireExplosive.playbackRate", duration * 2f, 0f); } Ray aimRay = ((BaseState)this).GetAimRay(); if (((EntityState)this).isAuthority) { float num2 = Mathf.Lerp(minDamageCoefficient, maxDamageCoefficient, num); Mathf.Lerp(minProcCoefficient, maxProcCoefficient, num); float num3 = Mathf.Lerp(minSpeed, maxSpeed, num); float num4 = Mathf.Lerp(minRecoil, maxRecoil, num); ((BaseState)this).AddRecoil(-2f * num4, -3f * num4, -1f * num4, 1f * num4); ((EntityState)this).characterBody.AddSpreadBloom(0.33f * num4); ProjectileManager.instance.FireProjectile(global::Twitch.Twitch.bazookaProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, num2 * ((BaseState)this).damageStat, force, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, num3); } TwitchFireBazooka nextState = new TwitchFireBazooka(); ((EntityState)this).outer.SetNextState((EntityState)(object)nextState); } hasFired = true; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.SetAimTimer(0.5f); if (((EntityState)this).fixedAge >= releaseDuration) { FireBazooka(); } if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && ((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority && !((EntityState)this).inputBank.skill1.down) { FireBazooka(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class TwitchCheese : BaseSkillState { public float baseDuration = 4f; private float duration; private float fireDuration; private bool hasFired; private Animator animator; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration; fireDuration = duration; animator = ((EntityState)this).GetModelAnimator(); ((EntityState)this).PlayAnimation("FullBody, Override", "Cheese"); Util.PlaySound(Sounds.TwitchCheese, ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } private void EatCheese() { //IL_0047: 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) if (!hasFired) { hasFired = true; Util.PlaySound(Sounds.TwitchHeal, ((EntityState)this).gameObject); if (NetworkServer.active) { ((EntityState)this).characterBody.healthComponent.Heal(((EntityState)this).characterBody.healthComponent.fullHealth, default(ProcChainMask), true); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration) { EatCheese(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class TwitchExplode : BaseSkillState { public float baseDuration = 2f; private float duration; private Animator animator; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); ((EntityState)this).PlayAnimation("Grenade", "ThrowGrenade", "ThrowGrenade.playbackRate", duration, 0f); Explode(); } public override void OnExit() { ((EntityState)this).OnExit(); } private void Explode() { //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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) Util.PlaySound(Sounds.TwitchCaskHit, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)((EntityState)this).healthComponent)) { DamageInfo val = new DamageInfo(); val.damage = ((EntityState)this).healthComponent.fullCombinedHealth * 0.5f; val.position = ((EntityState)this).characterBody.corePosition; val.force = Vector3.zero; val.damageColorIndex = (DamageColorIndex)5; val.crit = false; val.attacker = null; val.inflictor = null; val.damageType = DamageTypeCombo.op_Implicit((DamageType)32); val.procCoefficient = 0f; val.procChainMask = default(ProcChainMask); ((EntityState)this).healthComponent.TakeDamage(val); } new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject, teamIndex = (TeamIndex)1, baseForce = 50f, position = ((EntityState)this).characterBody.corePosition, radius = 12f, falloffModel = (FalloffModel)1, crit = ((BaseState)this).RollCrit(), baseDamage = 5f * ((BaseState)this).damageStat, procCoefficient = 1f }.Fire(); EffectManager.SpawnEffect(Resources.Load<GameObject>("Prefabs/Effects/ImpactEffects/MagmaOrbExplosion"), new EffectData { origin = ((EntityState)this).characterBody.corePosition, scale = 12f }, true); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)0; } } public class TwitchExpunge : BaseSkillState { public static float damageCoefficient; public static float damageBonus; public float baseDuration = 0.75f; private float duration; private float fireDuration; private bool hasFired; private Animator animator; private string muzzleString; private TwitchController twitchController; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireDuration = 0.2f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); animator = ((EntityState)this).GetModelAnimator(); muzzleString = "HandL"; twitchController = ((EntityState)this).GetComponent<TwitchController>(); ((EntityState)this).PlayAnimation("Gesture, Override", "Expunge", "Expunge.playbackRate", duration, 0f); Util.PlaySound(Sounds.TwitchExpunge, ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } private void FireBolt() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; ((EntityState)this).characterBody.AddSpreadBloom(1f); Ray aimRay = ((BaseState)this).GetAimRay(); EffectManager.SimpleMuzzleFlash(FireMegaFireball.muzzleflashEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); if (((EntityState)this).isAuthority) { ProjectileManager.instance.FireProjectile(global::Twitch.Twitch.expungeProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, damageCoefficient * ((BaseState)this).damageStat, 0f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration) { FireBolt(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } static TwitchExpunge() { damageCoefficient = 4f; damageBonus = 0.7f; } } public class TwitchFireBazooka : BaseSkillState { public static float baseDuration; private float duration; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } static TwitchFireBazooka() { baseDuration = 0.4f; } } public class TwitchFireBolt : BaseSkillState { public static float damageCoefficient; public float baseDuration = 0.75f; public float recoil = 1f; public static float projectileSpeed; private float duration; private float fireDuration; private bool hasFired; private Animator animator; private string muzzleString; private TwitchController twitchController; public override void OnEnter() { //IL_0086: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireDuration = 0.15f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); animator = ((EntityState)this).GetModelAnimator(); muzzleString = "Muzzle"; twitchController = ((EntityState)this).GetComponent<TwitchController>(); if (Object.op_Implicit((Object)(object)twitchController)) { muzzleString = twitchController.GetMuzzleName(); } global::Twitch.Twitch.LaserTracerMaterial.SetColor(152, global::Twitch.Twitch.laserTracerColor); if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { ((EntityState)this).PlayAnimation("Gesture, Override", "FireEmpoweredBolt", "FireBolt.playbackRate", 1.5f * duration, 0f); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "FireBolt", "FireBolt.playbackRate", 2f * duration, 0f); } if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff) && Object.op_Implicit((Object)(object)twitchController)) { twitchController.AmbushAttack(); } else { Util.PlaySound(Sounds.TwitchAttackStart, ((EntityState)this).gameObject); } } public override void OnExit() { ((EntityState)this).OnExit(); } private void FireBolt() { //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0103: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) if (hasFired) { return; } hasFired = true; if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { Util.PlaySound(Sounds.TwitchAttackLaser, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(FireLaser.effectPrefab, ((EntityState)this).gameObject, muzzleString, false); ((BaseState)this).AddRecoil(-2f * recoil, -3f * recoil, -1f * recoil, 1f * recoil); if (((EntityState)this).isAuthority) { float damage = damageCoefficient * ((BaseState)this).damageStat; float force = 50f; float procCoefficient = 1f; bool isCrit = ((BaseState)this).RollCrit(); Ray aimRay = ((BaseState)this).GetAimRay(); new BulletAttack { bulletCount = 1u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin + new Vector3(0f, 0.25f, 0f), damage = damage, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)1048576), falloffModel = (FalloffModel)0, maxDistance = 512f, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 3f, isCrit = isCrit, owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 1f, sniper = false, stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask, weapon = null, tracerEffectPrefab = global::Twitch.Twitch.laserTracer, spreadPitchScale = 0.25f, spreadYawScale = 0.25f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = MinigunFire.bulletHitEffectPrefab, HitEffectNormal = MinigunFire.bulletHitEffectNormal }.Fire(); } } else { Util.PlaySound(Sounds.TwitchAttack, ((EntityState)this).gameObject); ((EntityState)this).characterBody.AddSpreadBloom(0.75f); Ray aimRay2 = ((BaseState)this).GetAimRay(); EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); if (((EntityState)this).isAuthority) { ProjectileManager.instance.FireProjectile(global::Twitch.Twitch.boltProjectile, ((Ray)(ref aimRay2)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay2)).direction), ((EntityState)this).gameObject, damageCoefficient * ((BaseState)this).damageStat, 0f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, projectileSpeed); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration) { FireBolt(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } static TwitchFireBolt() { damageCoefficient = 2.25f; projectileSpeed = 120f; } } public class TwitchFireShotgun : BaseSkillState { public static float damageCoefficient; public float baseDuration = 0.9f; public int projectileCount = 4; public float bulletRecoil = 3f; public float beamRecoil = 2.5f; public static GameObject bulletTracerEffectPrefab; private float duration; private float fireDuration; private bool hasFired; private Animator animator; private string muzzleString; private TwitchController twitchController; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireDuration = 0.1f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); animator = ((EntityState)this).GetModelAnimator(); muzzleString = "Muzzle"; hasFired = false; twitchController = ((EntityState)this).GetComponent<TwitchController>(); if (Object.op_Implicit((Object)(object)twitchController)) { muzzleString = twitchController.GetMuzzleName(); } if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { ((EntityState)this).PlayAnimation("Gesture, Override", "FireEmpoweredBolt", "FireBolt.playbackRate", 1.5f * duration, 0f); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "FireExplosive", "FireExplosive.playbackRate", duration, 0f); } Util.PlaySound(Sounds.TwitchAttackStart, ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } private void FireBullet() { //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_0352: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_03a1: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b7: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_03be: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: 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_00d8: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010c: 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_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0150: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) if (hasFired) { return; } hasFired = true; if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { Util.PlayAttackSpeedSound(Sounds.TwitchFireShotgun, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); ((BaseState)this).AddRecoil(-2f * beamRecoil, -3f * beamRecoil, -1f * beamRecoil, 1f * beamRecoil); ((EntityState)this).characterBody.AddSpreadBloom(0.33f * bulletRecoil); EffectManager.SimpleMuzzleFlash(FireShotgun.effectPrefab, ((EntityState)this).gameObject, muzzleString, false); if (((EntityState)this).isAuthority) { float damage = damageCoefficient * ((BaseState)this).damageStat; float force = 10f; float procCoefficient = 0.4f; bool isCrit = ((BaseState)this).RollCrit(); Ray aimRay = ((BaseState)this).GetAimRay(); new BulletAttack { bulletCount = (uint)projectileCount, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damage, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)1048576), falloffModel = (FalloffModel)0, maxDistance = 40f, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 5f, isCrit = isCrit, owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = true, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 1.5f, sniper = false, stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask, weapon = null, tracerEffectPrefab = bulletTracerEffectPrefab, spreadPitchScale = 0.5f, spreadYawScale = 0.5f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = MinigunFire.bulletHitEffectPrefab, HitEffectNormal = MinigunFire.bulletHitEffectNormal }.Fire(); } } else { Util.PlaySound(Sounds.TwitchFireShotgun, ((EntityState)this).gameObject); ((BaseState)this).AddRecoil(-2f * bulletRecoil, -3f * bulletRecoil, -1f * bulletRecoil, 1f * bulletRecoil); ((EntityState)this).characterBody.AddSpreadBloom(0.33f * bulletRecoil); EffectManager.SimpleMuzzleFlash(FireShotgun.effectPrefab, ((EntityState)this).gameObject, muzzleString, false); if (((EntityState)this).isAuthority) { float damage2 = damageCoefficient * ((BaseState)this).damageStat; float force2 = 10f; float procCoefficient2 = 0.4f; bool isCrit2 = ((BaseState)this).RollCrit(); Ray aimRay2 = ((BaseState)this).GetAimRay(); new BulletAttack { bulletCount = (uint)projectileCount, aimVector = ((Ray)(ref aimRay2)).direction, origin = ((Ray)(ref aimRay2)).origin, damage = damage2, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)1048576), falloffModel = (FalloffModel)0, maxDistance = 40f, force = force2, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 30f, isCrit = isCrit2, owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient2, radius = 1.5f, sniper = false, stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask, weapon = null, tracerEffectPrefab = bulletTracerEffectPrefab, spreadPitchScale = 0.5f, spreadYawScale = 0.5f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = MinigunFire.bulletHitEffectPrefab, HitEffectNormal = MinigunFire.bulletHitEffectNormal }.Fire(); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration) { FireBullet(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } static TwitchFireShotgun() { damageCoefficient = 0.9f; bulletTracerEffectPrefab = Resources.Load<GameObject>("Prefabs/Effects/Tracers/TracerCommandoShotgun"); } } public class TwitchFireSMG : BaseSkillState { public float damageCoefficient = 0.85f; public static float baseDuration; public float fireInterval = 0.1f; public static int projectileCount; public float bulletRecoil = 0.75f; public float beamRecoil = 1f; public static GameObject bulletTracerEffectPrefab; private float duration; private float fireDuration; private int hasFired; private float lastFired; private Animator animator; private string muzzleString; private TwitchController twitchController; public override void OnEnter() { //IL_008c: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireDuration = 0.2f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); animator = ((EntityState)this).GetModelAnimator(); muzzleString = "Muzzle"; hasFired = 0; twitchController = ((EntityState)this).GetComponent<TwitchController>(); if (Object.op_Implicit((Object)(object)twitchController)) { muzzleString = twitchController.GetMuzzleName(); } global::Twitch.Twitch.LaserTracerMaterial.SetColor(152, global::Twitch.Twitch.laserTracerColor); if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { ((EntityState)this).PlayAnimation("Gesture, Override", "FireEmpoweredBolt", "FireBolt.playbackRate", 1.5f * duration, 0f); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "FireBolt", "FireBolt.playbackRate", 2f * duration, 0f); } if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff) && Object.op_Implicit((Object)(object)twitchController)) { twitchController.AmbushAttack(); } else { Util.PlaySound(Sounds.TwitchAttackStart, ((EntityState)this).gameObject); } } public override void OnExit() { ((EntityState)this).OnExit(); } private void FireBullet() { //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_010a: 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_0116: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: 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) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) if (hasFired >= projectileCount) { return; } if (hasFired == 0 && !((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { Util.PlaySound(Sounds.TwitchAttackGun, ((EntityState)this).gameObject); } hasFired++; lastFired = Time.time + fireInterval / ((BaseState)this).attackSpeedStat; if (((EntityState)this).characterBody.HasBuff(global::Twitch.Twitch.ambushBuff)) { Util.PlaySound(Sounds.TwitchAttackGunLaser, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(FireLaser.effectPrefab, ((EntityState)this).gameObject, muzzleString, false); ((BaseState)this).AddRecoil(-1f * beamRecoil, -2f * beamRecoil, -1f * beamRecoil, 1f * beamRecoil); if (((EntityState)this).isAuthority) { float damage = damageCoefficient * ((BaseState)this).damageStat; float force = 10f; float procCoefficient = 0.75f; bool isCrit = ((BaseState)this).RollCrit(); Ray aimRay = ((BaseState)this).GetAimRay(); new BulletAttack { bulletCount = 1u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin + new Vector3(0f, 0.25f, 0f), damage = damage, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)1048576), falloffModel = (FalloffModel)0, maxDistance = 512f, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 5f, isCrit = isCrit, owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 1f, sniper = false, stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask, weapon = null, tracerEffectPrefab = global::Twitch.Twitch.laserTracer, spreadPitchScale = 0.1f, spreadYawScale = 0.1f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = MinigunFire.bulletHitEffectPrefab, HitEffectNormal = MinigunFire.bulletHitEffectNormal }.Fire(); } } else { Util.PlaySound(Sounds.TwitchAttack, ((EntityState)this).gameObject); ((EntityState)this).characterBody.AddSpreadBloom(0.75f); Ray aimRay2 = ((BaseState)this).GetAimRay(); EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); if (((EntityState)this).isAuthority) { ProjectileManager.instance.FireProjectile(global::Twitch.Twitch.boltProjectile, ((Ray)(ref aimRay2)).origin + new Vector3(0f, 0.25f, 0f), Util.QuaternionSafeLookRotation(((Ray)(ref aimRay2)).direction), ((EntityState)this).gameObject, TwitchFireBolt.damageCoefficient * ((BaseState)this).damageStat, 0f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, TwitchFireBolt.projectileSpeed); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration && Time.time > lastFired) { FireBullet(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } static TwitchFireSMG() { baseDuration = 1f; projectileCount = 3; bulletTracerEffectPrefab = Resources.Load<GameObject>("Prefabs/Effects/Tracers/TracerEngiTurret"); } } public class TwitchScurry : BaseState { public float duration = 0.4f; public static GameObject dodgeEffect; public static float initialSpeedCoefficient; public static float finalSpeedCoefficient; private float rollSpeed; private bool hasCastSmoke; private Vector3 forwardDirection; private Animator animator; private Vector3 previousPosition; private Transform modelTransform; private CharacterModel characterModel; private TwitchController twitchController; public override void OnEnter() { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: 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) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); modelTransform = ((EntityState)this).GetModelTransform(); twitchController = ((EntityState)this).GetComponent<TwitchController>(); if (Object.op_Implicit((Object)(object)modelTransform)) { characterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); } animator = ((EntityState)this).GetModelAnimator(); ((Component)animator).GetComponent<ChildLocator>(); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector); forwardDirection = ((Vector3)(ref val)).normalized; } Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : forwardDirection); Vector3 val3 = Vector3.Cross(Vector3.up, val2); float num = Vector3.Dot(forwardDirection, val2); float num2 = Vector3.Dot(forwardDirection, val3); animator.SetFloat("forwardSpeed", num, 0.1f, Time.fixedDeltaTime); animator.SetFloat("rightSpeed", num2, 0.1f, Time.fixedDeltaTime); if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.Cloak); ((EntityState)this).characterBody.AddBuff(Buffs.CloakSpeed); } if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.EnterStealth(); } CastSmoke(); RecalculateSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity.y = characterMotor.velocity.y * 0.2f; ((EntityState)this).characterMotor.velocity = forwardDirection * rollSpeed; } ((EntityState)this).PlayAnimation("FullBody, Override", "Scurry"); Vector3 val4 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero); previousPosition = ((EntityState)this).transform.position - val4; } private void RecalculateSpeed() { rollSpeed = (2f + 0.5f * base.moveSpeedStat) * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration); } private void CastSmoke() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown if (!hasCastSmoke) { Util.PlaySound(Sounds.TwitchEnterStealth, ((EntityState)this).gameObject); hasCastSmoke = true; } else { Util.PlaySound(Sounds.TwitchExitStealth, ((EntityState)this).gameObject); } EffectManager.SpawnEffect(CastSmokescreenNoDelay.smokescreenEffectPrefab, new EffectData { origin = ((EntityState)this).transform.position }, false); } public override void FixedUpdate() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); RecalculateSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = Mathf.Lerp(DodgeState.dodgeFOV, 60f, ((EntityState)this).fixedAge / duration); } Vector3 val = ((EntityState)this).transform.position - previousPosition; Vector3 normalized = ((Vector3)(ref val)).normalized; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && normalized != Vector3.zero) { Vector3 val2 = normalized * rollSpeed; float y = val2.y; val2.y = 0f; float num = Mathf.Max(Vector3.Dot(val2, forwardDirection), 0f); val2 = forwardDirection * num; val2.y += Mathf.Max(y, 0f); ((EntityState)this).characterMotor.velocity = val2; } previousPosition = ((EntityState)this).transform.position; if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = -1f; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody) && NetworkServer.active) { if (((EntityState)this).characterBody.HasBuff(Buffs.Cloak)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.Cloak); } if (((EntityState)this).characterBody.HasBuff(Buffs.CloakSpeed)) { ((EntityState)this).characterBody.RemoveBuff(Buffs.CloakSpeed); } ((EntityState)this).characterBody.AddTimedBuff(global::Twitch.Twitch.ambushBuff, 4f); ((EntityState)this).characterBody.RecalculateStats(); if (Object.op_Implicit((Object)(object)modelTransform)) { TemporaryOverlayInstance obj = TemporaryOverlayManager.AddOverlay(((Component)modelTransform).gameObject); obj.duration = 4f; obj.animateShaderAlpha = true; obj.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 2.5f, 0f); obj.destroyComponentOnEnd = true; obj.originalMaterial = Resources.Load<Material>("Materials/matPoisoned"); obj.inspectorCharacterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); } } if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.GetAmbushBuff(5f); } if (!((EntityState)this).outer.destroying) { CastSmoke(); } if (Object.op_Implicit((Object)(object)TwitchAmbush.destealthMaterial)) { TemporaryOverlayInstance obj2 = TemporaryOverlayManager.AddOverlay(((Component)animator).gameObject); obj2.duration = 1f; obj2.destroyComponentOnEnd = true; obj2.originalMaterial = TwitchAmbush.destealthMaterial; obj2.inspectorCharacterModel = ((Component)animator).gameObject.GetComponent<CharacterModel>(); obj2.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); obj2.animateShaderAlpha = true; } if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.ExitStealth(); } ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnSerialize(writer); writer.Write(forwardDirection); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); forwardDirection = reader.ReadVector3(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } static TwitchScurry() { initialSpeedCoefficient = 5f; finalSpeedCoefficient = 4f; } } public class TwitchThrowBomb : BaseSkillState { public static float damageCoefficient; public static float baseDuration; private float duration; private float fireDuration; private bool hasFired; private Animator animator; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireDuration = 0.35f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); animator = ((EntityState)this).GetModelAnimator(); ((EntityState)this).PlayAnimation("FullBody, Override", "ThrowBomb", "ThrowBomb.playbackRate", duration, 0f); Util.PlayAttackSpeedSound(Sounds.TwitchCaskStart, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); } public override void OnExit() { ((EntityState)this).OnExit(); } private void ThrowBomb() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; Util.PlaySound(Sounds.TwitchThrowCask, ((EntityState)this).gameObject); ((EntityState)this).characterBody.AddSpreadBloom(1f); Ray aimRay = ((BaseState)this).GetAimRay(); if (((EntityState)this).isAuthority) { ProjectileManager.instance.FireProjectile(global::Twitch.Twitch.caskProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, damageCoefficient * ((BaseState)this).damageStat, 0f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && ((EntityState)this).characterMotor.velocity.y < 0f && !hasFired) { ((EntityState)this).characterMotor.velocity.y = 0f; } if (((EntityState)this).fixedAge >= fireDuration) { ThrowBomb(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } static TwitchThrowBomb() { damageCoefficient = 3f; baseDuration = 1.1f; } } public class TwitchThrowGrenade : BaseSkillState { public float damageCoefficient = 7.5f; public float baseDuration = 3f; public float throwDuration = 0.25f; public float throwOffset = 0.1f; private float duration; private bool hasFired; private bool hasThrown; private Animator animator; private TwitchController twitchController; private float grenadeLifetime; private float throwTime; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration + throwDuration; animator = ((EntityState)this).GetModelAnimator(); twitchController = ((EntityState)this).gameObject.GetComponent<TwitchController>(); ((EntityState)this).PlayAnimation("Grenade", "ReadyGrenade", "ReadyGrenade.playbackRate", baseDuration - 0.2f, 0f); Util.PlaySound(Sounds.TwitchGrenadeStart, ((EntityState)this).gameObject); } public override void OnExit() { ((EntityState)this).OnExit(); } private void ThrowGrenade() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) if (hasFired) { return; } hasFired = true; Util.PlaySound(Sounds.TwitchThrowGrenade, ((EntityState)this).gameObject); ((EntityState)this).characterBody.AddSpreadBloom(1f); Ray aimRay = ((BaseState)this).GetAimRay(); if (((EntityState)this).isAuthority) { if (Object.op_Implicit((Object)(object)twitchController)) { twitchController.UpdateGrenadeLifetime(grenadeLifetime); } ProjectileManager.instance.FireProjectile(global::Twitch.Twitch.grenadeProjectile, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, damageCoefficient * ((BaseState)this).damageStat, 0f, Util.CheckRoll(((BaseState)this).critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f); } } private void ReleaseGrenade() { if (!hasThrown) { hasThrown = true; ((EntityState)this).PlayAnimation("Grenade", "ThrowGrenade", "ThrowGrenade.playbackRate", throwDuration, 0f); float num = baseDuration; num -= ((EntityState)this).fixedAge; if (num <= 0f) { num = 0.1f; } grenadeLifetime = num; throwTime = ((EntityState)this).fixedAge + throwOffset; } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); ((EntityState)this).characterBody.SetAimTimer(0.5f); if (((EntityState)this).fixedAge >= baseDuration) { TwitchExplode nextState = new TwitchExplode(); ((EntityState)this).outer.SetNextState((EntityState)(object)nextState); } if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && !((EntityState)this).inputBank.skill2.down) { ReleaseGrenade(); } if (((EntityState)this).fixedAge >= throwTime && hasThrown) { ThrowGrenade(); } if (hasFired && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } } namespace Twitch { public class ApplyHorns : MonoBehaviour { private CharacterModel model; private ChildLocator childLocator; private void Start() { model = ((Component)this).GetComponentInChildren<CharacterModel>(); childLocator = ((Component)this).GetComponentInChildren<ChildLocator>(); AddHorns(); } private void AddHorns() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: 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_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)model)) { DisplayRuleGroup equipmentDisplayRuleGroup = model.itemDisplayRuleSet.GetEquipmentDisplayRuleGroup(Equipment.AffixRed.equipmentIndex); if (equipmentDisplayRuleGroup.rules.Length > 1) { Transform val = childLocator.FindChild(equipmentDisplayRuleGroup.rules[0].childName); if (Object.op_Implicit((Object)(object)val)) { Apply(model, equipmentDisplayRuleGroup.rules[0].followerPrefab, val, equipmentDisplayRuleGroup.rules[0].localPos, Quaternion.Euler(equipmentDisplayRuleGroup.rules[0].localAngles), equipmentDisplayRuleGroup.rules[0].localScale); } if (Object.op_Implicit((Object)(object)childLocator.FindChild(equipmentDisplayRuleGroup.rules[1].childName))) { Apply(model, equipmentDisplayRuleGroup.rules[1].followerPrefab, val, equipmentDisplayRuleGroup.rules[1].localPos, Quaternion.Euler(equipmentDisplayRuleGroup.rules[1].localAngles), equipmentDisplayRuleGroup.rules[1].localScale); } } } else { Debug.LogError((object)"[LoLTwitchMod] AddHorns - no charactermodel"); } } private void Apply(CharacterModel characterModel, GameObject prefab, Transform parent, Vector3 localPosition, Quaternion localRotation, Vector3 localScale) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) GameObject obj = Object.Instantiate<GameObject>(prefab.gameObject, parent); obj.transform.localPosition = localPosition; obj.transform.localRotation = localRotation; obj.transform.localScale = localScale; LimbMatcher component = obj.GetComponent<LimbMatcher>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)childLocator)) { component.SetChildLocator(childLocator); } } } public static class Assets { public static AssetBundle MainAssetBundle; public static Texture charPortrait; public static Sprite iconP; public static Sprite icon1; public static Sprite icon1b; public static Sprite icon1c; public static Sprite icon1d; public static Sprite icon2; public static Sprite icon2b; public static Sprite icon3; public static Sprite icon3b; public static Sprite icon3c; public static Sprite icon3d; public static Sprite icon4; public static GameObject arrowModel; public static GameObject caskModel; public static GameObject bazookaRocketModel; public static GameObject grenadeModel; public static GameObject knifeModel; public static Material mainSkinMat; public static Material simpleSkinMat; public static Material tarSkinMat; public static Material tundraSkinMat; public static void PopulateAssets() { string? directoryName = Path.GetDirectoryName(((BaseUnityPlugin)Twitch.Instance).Info.Location); MainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "twitch")); SoundBanks.Add(Path.Combine(directoryName, "Twitch.bnk")); charPortrait = (Texture)(object)MainAssetBundle.LoadAsset<Sprite>("TwitchBody").texture; iconP = MainAssetBundle.LoadAsset<Sprite>("VenomIcon"); icon1 = MainAssetBundle.LoadAsset<Sprite>("SprayAndPrayIcon"); icon1b = MainAssetBundle.LoadAsset<Sprite>("TommyGunIcon"); icon1c = MainAssetBundle.LoadAsset<Sprite>("ShotgunIcon"); icon1d = MainAssetBundle.LoadAsset<Sprite>("BazookaIcon"); icon2 = MainAssetBundle.LoadAsset<Sprite>("CaskIcon"); icon2b = MainAssetBundle.LoadAsset<Sprite>("GrenadeIcon"); icon3 = MainAssetBundle.LoadAsset<Sprite>("AmbushIcon"); icon3b = MainAssetBundle.LoadAsset<Sprite>("AmbushActiveIcon"); icon3c = MainAssetBundle.LoadAsset<Sprite>("AmbushRecastIcon"); icon3d = MainAssetBundle.LoadAsset<Sprite>("CheeseIcon"); icon4 = MainAssetBundle.LoadAsset<Sprite>("ExpungeIcon"); arrowModel = MainAssetBundle.LoadAsset<GameObject>("ArrowModel"); caskModel = MainAssetBundle.LoadAsset<GameObject>("CaskModel"); bazookaRocketModel = MainAssetBundle.LoadAsset<GameObject>("BazookaRocketModel"); grenadeModel = MainAssetBundle.LoadAsset<GameObject>("GrenadeModel"); knifeModel = MainAssetBundle.LoadAsset<GameObject>("KnifeModel"); mainSkinMat = MainAssetBundle.LoadAsset<Material>("matTwitch"); simpleSkinMat = MainAssetBundle.LoadAsset<Material>("matTwitchSimple"); tarSkinMat = MainAssetBundle.LoadAsset<Material>("matTwitchTar"); tundraSkinMat = MainAssetBundle.LoadAsset<Material>("matTwitchTundra"); } } public class MenuAnim : MonoBehaviour { internal void OnEnable() { if (((Object)((Component)((Component)this).gameObject.transform.parent).gameObject).name == "CharacterPad") { ((MonoBehaviour)this).StartCoroutine(SpawnAnim()); } } private IEnumerator SpawnAnim() { Animator componentInChildren = ((Component)this).GetComponentInChildren<Animator>(); EffectManager.SpawnEffect(CastSmokescreenNoDelay.smokescreenEffectPrefab, new EffectData { origin = ((Component)this).gameObject.transform.position }, false); Util.PlaySound(Sounds.TwitchExitStealth, ((Component)this).gameObject); Util.PlaySound(Sounds.TwitchMenu, ((Component)this).gameObject); PlayAnimation("Fullbody, Override", "Menu", "", 1f, componentInChildren); yield break; } private void PlayAnimation(string layerName, string animationStateName, string playbackRateParam, float duration, Animator animator) { //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) int layerIndex = animator.GetLayerIndex(layerName); animator.SetFloat(playbackRateParam, 1f); animator.PlayInFixedTime(animationStateName, layerIndex, 0f); animator.Update(0f); AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(layerIndex); float length = ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).length; animator.SetFloat(playbackRateParam, length / duration); } } public class SeparateFromParent : MonoBehaviour { private void Awake() { ((Component)this).transform.SetParent((Transform)null); } } public static class Sounds { public static readonly string TwitchAmbush = "TwitchAmbush"; public static readonly string TwitchAmbushGun = "TwitchAmbushGun"; public static readonly string TwitchAttack = "TwitchAttack"; public static readonly string TwitchAttackBazooka = "TwitchAttackBazooka"; public static readonly string TwitchAttackGun = "TwitchAttackGun"; public static readonly string TwitchAttackLaser = "TwitchAttackLaser"; public static readonly string TwitchAttackGunLaser = "TwitchAttackGunLaser"; public static readonly string TwitchAttackStart = "TwitchAttackStart"; public static readonly string TwitchCaskHit = "TwitchCaskHit"; public static readonly string TwitchCaskStart = "TwitchCaskStart"; public static readonly string TwitchCharge = "TwitchCharge"; public static readonly string TwitchCheese = "TwitchCheese"; public static readonly string TwitchEnterStealth = "TwitchEnterStealth"; public static readonly string TwitchExitStealth = "TwitchExitStealth"; public static readonly string TwitchExpunge = "TwitchExpunge"; public static readonly string TwitchExpungeHit = "TwitchExpungeHit"; public static readonly string TwitchFireShotgun = "TwitchFireShotgun"; public static readonly string TwitchGrenadeStart = "TwitchGrenadeStart"; public static readonly string TwitchGrenadeTick = "TwitchGrenadeTick"; public static readonly string TwitchHeal = "TwitchHeal"; public static readonly string TwitchMenu = "TwitchMenu"; public static readonly string TwitchThrowCask = "TwitchThrowCask"; public static readonly string TwitchThrowGrenade = "TwitchThrowGrenade"; } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.rob.Twitch", "Twitch", "2.4.1")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class Twitch : BaseUnityPlugin { public const string MODUID = "com.rob.Twitch"; public static GameObject characterPrefab; public GameObject characterDisplay; public GameObject doppelganger; public static SkillDef ambushDef; public static SkillDef ambushActiveDef; public static SkillDef ambushRecastDef; public static GameObject boltProjectile; public static GameObject bulletProjectile; public static GameObject expungeProjectile; public static GameObject caskProjectile; public static GameObject venomPool; public static GameObject bazookaProjectile; public static GameObject grenadeProjectile; public static GameObject laserTracer; public static readonly Color characterColor = new Color(0.16f, 0.34f, 0.04f); public static readonly Color laserTracerColor = new Color(1.6f, 3.4f, 0.4f); private static readonly Color poisonColor = new Color(0.36f, 0.54f, 0.24f); private static Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>(); public static ConfigEntry<bool> how; private static ConfigEntry<bool> boom; internal static BuffDef venomDebuff; internal static BuffDef ambushBuff; internal static BuffDef expungedDebuff; public static Twitch Instance { get; private set; } internal ItemDisplayRuleSet itemDisplayRuleSet { get; set; } internal List<KeyAssetRuleGroup> itemDisplayRules { get; set; } public UnlockableDef MasteryUnlockableDef { get; private set; } public UnlockableDef TarUnlockableDef { get; private set; } public UnlockableDef SimpleUnlockableDef { get; private set; } public static Material LaserTracerMaterial { get; private set; } private void Awake() { Instance = this; ReadConfig(); Assets.PopulateAssets(); RegisterStates(); CreatePrefab(); RegisterBuff(); RegisterUnlockables(); RegisterCharacter(); RegisterHooks(); } private void ReadConfig() { //IL_0010: 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_002b: Expected O, but got Unknown //IL_002b: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_005b: Expected O, but got Unknown how = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("01 - General Settings", "HOW"), false, new ConfigDescription("HOW IS THIS RAT", (AcceptableValueBase)null, Array.Empty<object>())); boom = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("01 - General Settings", "Boom"), false, new ConfigDescription("Enables Bazooka", (AcceptableValueBase)null, Array.Empty<object>())); } private void RegisterUnlockables() { LanguageAPI.Add("ROB_TWITCH_MASTERYUNLOCKABLE_ACHIEVEMENT_NAME", "Twitch: Mastery"); LanguageAPI.Add("ROB_TWITCH_MASTERYUNLOCKABLE_ACHIEVEMENT_DESC", "As Twitch, beat the game or obliterate on Monsoon."); LanguageAPI.Add("ROB_TWITCH_MASTERYUNLOCKABLE_UNLOCKABLE_NAME", "Twitch: Mastery"); LanguageAPI.Add("ROB_TWITCH_TARUNLOCKABLE_ACHIEVEMENT_NAME", "Twitch: Pest of Aphelia"); LanguageAPI.Add("ROB_TWITCH_TARUNLOCKABLE_ACHIEVEMENT_DESC", "As Twitch, get killed by a Clay Dunestrider."); LanguageAPI.Add("ROB_TWITCH_TARUNLOCKABLE_UNLOCKABLE_NAME", "Twitch: Pest of Aphelia"); LanguageAPI.Add("ROB_TWITCH_SIMPLEUNLOCKABLE_ACHIEVEMENT_NAME", "Twitch: Pestilence"); LanguageAPI.Add("ROB_TWITCH_SIMPLEUNLOCKABLE_ACHIEVEMENT_DESC", "As Twitch, expunge 40 stacks of venom on a single target."); LanguageAPI.Add("ROB_TWITCH_SIMPLEUNLOCKABLE_UNLOCKABLE_NAME", "Twitch: Pestilence"); MasteryUnlockableDef = UnlockableAPI.AddUnlockable<MasteryUnlockable>((Type)null, (UnlockableDef)null); TarUnlockableDef = UnlockableAPI.AddUnlockable<TarUnlockable>((Type)null, (UnlockableDef)null); SimpleUnlockableDef = UnlockableAPI.AddUnlockable<SimpleUnlockable>((Type)null, (UnlockableDef)null); } private void RegisterDot() { } private void RegisterHooks() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && self.HasBuff(venomDebuff)) { float num = 1f - 0.035f * (float)self.GetBuffCount(venomDebuff); if (num < 0.1f) { num = 0.1f; } Reflection.SetPropertyValue<float>((object)self, "attackSpeed", self.attackSpeed * num); Reflection.SetPropertyValue<float>((object)self, "armor", self.armor - 1.5f * (float)self.GetBuffCount(venomDebuff)); } if (Object.op_Implicit((Object)(object)self) && self.HasBuff(ambushBuff)) { Reflection.SetPropertyValue<float>((object)self, "attackSpeed", self.attackSpeed + 1f); } if (Object.op_Implicit((Object)(object)self) && self.HasBuff(ambushBuff)) { int buffCount = self.GetBuffCount(expungedDebuff); float num2 = 1f - 0.045f * (float)buffCount; if (num2 < 0.1f) { num2 = 0.1f; } Reflection.SetPropertyValue<float>((object)self, "attackSpeed", self.attackSpeed * num2); Reflection.SetPropertyValue<float>((object)self, "armor", self.armor - (float)(5 * buffCount)); } } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo di) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Expected O, but got Unknown if ((Object)(object)di.attacker != (Object)null && (Object)(object)self != (Object)null && (Object)(object)((Component)self).GetComponent<CharacterBody>() != (Object)null) { if (((Enum)di.damageType.damageType).HasFlag((Enum)(object)(DamageType)1048576)) { if (Object.op_Implicit((Object)(object)di.attacker.GetComponent<CharacterBody>()) && di.attacker.GetComponent<CharacterBody>().baseNameToken == "TWITCH_NAME") { di.damageType = DamageTypeCombo.op_Implicit((DamageType)0); if (!((Component)self).GetComponent<CharacterBody>().HasBuff(expungedDebuff)) { ((Component)self).GetComponent<CharacterBody>().AddTimedBuff(venomDebuff, 5f * di.procCoefficient); } if (Object.op_Implicit((Object)(object)di.attacker.GetComponent<TwitchController>())) { di.attacker.GetComponent<TwitchController>().RefundCooldown(di.procCoefficient); } } } else if (((Enum)di.damageType.damageType).HasFlag((Enum)(object)(DamageType)4096) && Object.op_Implicit((Object)(object)di.attacker.GetComponent<CharacterBody>()) && di.attacker.GetComponent<CharacterBody>().baseNameToken == "TWITCH_NAME") { di.damageType = DamageTypeCombo.op_Implicit((DamageType)0); Util.PlaySound(Sounds.TwitchExpungeHit, ((Component)self).gameObject); if (!((Component)self).GetComponent<CharacterBody>().HasBuff(expungedDebuff)) { CharacterBody component = ((Component)self).GetComponent<CharacterBody>(); if (component.HasBuff(venomDebuff)) { int buffCount = component.GetBuffCount(venomDebuff); for (int i = 0; i < buffCount; i++) { component.AddBuff(expungedDebuff); component.RemoveBuff(venomDebuff); di.damage += di.attacker.GetComponent<CharacterBody>().damage * TwitchExpunge.damageBonus; } EffectManager.SpawnEffect(Resources.Load<GameObject>("Prefabs/Effects/ImpactEffects/BeetleSpitExplosion"), new EffectData { origin = ((Component)self).transform.position, scale = buffCount }, true); } } } } orig.Invoke(self, di); } private void RegisterBuff() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) BuffDef obj = ScriptableObject.CreateInstance<BuffDef>(); obj.buffColor = poisonColor; obj.canStack = true; obj.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffBleedingIcon.tif").WaitForCompletion(); obj.isDebuff = true; ((Object)obj).name = "TwitchVenomDebuff"; venomDebuff = obj; ContentAddition.AddBuffDef(obj); BuffDef obj2 = ScriptableObject.CreateInstance<BuffDef>(); obj2.buffColor = characterColor; obj2.canStack = false; obj2.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texAttackIcon.png").WaitForCompletion(); obj2.isDebuff = false; ((Object)obj2).name = "TwitchAmbushBuff"; ambushBuff = obj2; ContentAddition.AddBuffDef(obj2); BuffDef obj3 = ScriptableObject.CreateInstance<BuffDef>(); obj3.buffColor = characterColor; obj3.canStack = true; obj3.iconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/DeathMark/texBuffDeathMarkIcon.tif").WaitForCompletion(); obj3.isDebuff = true; ((Object)obj3).name = "TwitchExpungedDebuff"; expungedDebuff = obj3; ContentAddition.AddBuffDef(obj3); } private static GameObject CreateModel(GameObject main) { Object.Destroy((Object)(object)((Component)main.transform.Find("ModelBase")).gameObject); Object.Destroy((Object)(object)((Component)main.transform.Find("CameraPivot")).gameObject); Object.Destroy((Object)(object)((Component)main.transform.Find("AimOrigin")).gameObject); return Assets.MainAssetBundle.LoadAsset<GameObject>("mdlTwitch"); } internal static void CreatePrefab() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_006e: 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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0364: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_0422: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_045d: Unknown result type (might be due to invalid IL or missing references) //IL_04d3: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Unknown result type (might be due to invalid IL or missing references) //IL_0508: Unknown result type (might be due to invalid IL or missing references) //IL_050a: Unknown result type (might be due to invalid IL or missing references) //IL_0513: Unknown result type (might be due to invalid IL or missing references) //IL_0551: Unknown result type (might be due to invalid IL or missing references) //IL_055e: Unknown result type (might be due to invalid IL or missing references) //IL_0560: Unknown result type (might be due to invalid IL or missing references) //IL_0569: Unknown result type (might be due to invalid IL or missing references) //IL_05a7: Unknown result type (might be due to invalid IL or missing references) //IL_05b4: Unknown result type (might be due to invalid IL or missing references) //IL_05b6: Unknown result type (might be due to invalid IL or missing references) //IL_05bf: Unknown result type (might be due to invalid IL or missing references) //IL_05fd: Unknown result type (might be due to invalid IL or missing references) //IL_060a: Unknown result type (might be due to invalid IL or missing references) //IL_060c: Unknown result type (might be due to invalid IL or missing references) //IL_0615: Unknown result type (might be due to invalid IL or missing references) //IL_0653: Unknown result type (might be due to invalid IL or missing references) //IL_0660: Unknown result type (might be due to invalid IL or missing references) //IL_0662: Unknown result type (might be due to invalid IL or missing references) //IL_078c: Unknown result type (might be due to invalid IL or missing references) //IL_0791: Unknown result type (might be due to invalid IL or missing references) //IL_0866: Unknown result type (might be due to invalid IL or missing references) //IL_08d3: Unknown result type (might be due to invalid IL or missing references) //IL_0929: Unknown result type (might be due to invalid IL or missing references) //IL_093d: Unknown result type (might be due to invalid IL or missing references) //IL_0942: Unknown result type (might be due to invalid IL or missing references) //IL_0949: Unknown result type (might be due to invalid IL or missing references) //IL_0998: Unknown result type (might be due to invalid IL or missing references) characterPrefab = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody"), "TwitchBody", true, "C:\\Users\\rseid\\Documents\\ror2mods\\Twitch\\Twitch\\Twitch.cs", "CreatePrefab", 305); characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true; GameObject val = new GameObject("ModelBase"); val.transform.parent = characterPrefab.transform; val.transform.localPosition = new Vector3(0f, -0.81f, 0f); val.transform.localRotation = Quaternion.identity; val.transform.localScale = new Vector3(1f, 1f, 1f); GameObject val2 = new GameObject("CameraPivot"); val2.transform.parent = val.transform; val2.transform.localPosition = new Vector3(0f, 1.6f, 0f); val2.transform.localRotation = Quaternion.identity; val2.transform.localScale = Vector3.one; GameObject val3 = new GameObject("AimOrigin"); val3.transform.parent = val.transform; val3.transform.localPosition = new Vector3(0f, 1.4f, 0f); val3.transform.localRotation = Quaternion.identity; val3.transform.localScale = Vector3.one; GameObject val4 = CreateModel(characterPrefab); Transform transform = val4.transform; transform.parent = val.transform; transform.localPosition = Vector3.zero; transform.localScale = new Vector3(0.01f, 0.01f, 0.01f); transform.localRotation = Quaternion.identity; CharacterDirection component = characterPrefab.GetComponent<CharacterDirection>(); comp