Decompiled source of Twitch v2.4.1
plugins/Twitch.dll
Decompiled 3 months 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