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