Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LonelyOperator v1.0.0
LonelyOperator.dll
Decompiled 6 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using EntityStates; using EntityStates.Drone.Command; using EntityStates.VultureHunter.Weapon; using Grumpy; using HG.Reflection; using R2API; using R2API.Utils; using Rewired.ComponentControls.Effects; using RoR2; using RoR2.ContentManagement; using RoR2.Skills; using RoR2BepInExPack.GameAssetPaths.Version_1_35_0; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.ResourceManagement.AsyncOperations; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LonelyOperator")] [assembly: AssemblyConfiguration("Mystical")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+5a6145ede521968469ce33ecb7e02baef64ccd7a")] [assembly: AssemblyProduct("LonelyOperator")] [assembly: AssemblyTitle("LonelyOperator")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace LonelyOperator; [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.MysticalChicken.LonelyOperator", "Lonely Operator", "1.0.0")] public class LonelyOperatorMain : BaseUnityPlugin { public const string MODUID = "com.MysticalChicken.LonelyOperator"; public const string MODNAME = "Lonely Operator"; public const string MODVERSION = "1.0.0"; public static LonelyOperatorMain instance; public static GameObject roboBallBeamPrefab; private void Awake() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) instance = this; AsyncOperationHandle<GameObject> val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_RoboBallBuddy.RoboBallGreenBuddyBody_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Expected O, but got Unknown //IL_0173: 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_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_019f: 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_01b9: 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_0231: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: 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_030f: Unknown result type (might be due to invalid IL or missing references) GenericSkill val11 = x.Result.AddComponent<GenericSkill>(); SkillFamily val12 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val12).name = "RoboBallGreenBuddyActivateSkillFamily"; val12.variants = (Variant[])(object)new Variant[1]; val12.defaultVariantIndex = 0u; val11.skillName = "Command Activate"; val11._skillFamily = val12; SkillDef val13 = ScriptableObject.CreateInstance<SkillDef>(); val13.skillName = "Command"; ((Object)val13).name = "RoboBallGreenCommand"; val13.skillNameToken = "ROBOBALLGREENBUDDY_COMMAND"; val13.skillDescriptionToken = "Channel a set of focusing lasers for <style=cIsDamage>3x100% damage</style>. Deals more <style=cIsDamage>damage</style> the <style=cIsUtility>longer</style> the channel. Channel duration scales with attack speed."; val13.icon = null; val13.activationState = new SerializableEntityStateType(typeof(CommandRoboBallGreenLaser)); val13.activationStateMachineName = "Weapon"; val13.interruptPriority = (InterruptPriority)8; val13.baseMaxStock = 1; val13.baseRechargeInterval = 0f; val13.attackSpeedBuffsRestockSpeed = false; val13.attackSpeedBuffsRestockSpeed_Multiplier = 1f; val13.rechargeStock = 1; val13.requiredStock = 1; val13.stockToConsume = 1; val13.dontAllowPastMaxStocks = false; val13.beginSkillCooldownOnSkillEnd = false; val13.canceledFromSprinting = false; val13.forceSprintDuringState = false; val13.fullRestockOnAssign = true; val13.resetCooldownTimerOnUse = false; val13.isCombatSkill = true; val13.mustKeyPress = true; val13.cancelSprintingOnActivation = false; val13.hideStockCount = false; val13.autoHandleLuminousShot = true; val13.isCooldownBlockedUntilManuallyReset = false; val13.keywordTokens = new string[0]; Variant[] variants2 = val12.variants; Variant val14 = new Variant { skillDef = val13, unlockableDef = null }; ((Variant)(ref val14)).viewableNode = new Node(val13.skillNameToken, false, (Node)null); variants2[0] = val14; DroneCommandReceiver val15 = x.Result.AddComponent<DroneCommandReceiver>(); CharacterBody component3 = x.Result.GetComponent<CharacterBody>(); component3.bodyFlags = (BodyFlags)(component3.bodyFlags | 0x400000); val15.followPosition = new Vector3(-4f, 4f, 3f); val15.commandSkill = val11; val15.targetType = (TargetType)4; AddAkBank(x.Result, RoR2_DLC3_VultureHunter.VultureHunterBody_prefab); Transform transform2 = ((Component)x.Result.GetComponentInChildren<CharacterModel>()).transform; if (Object.op_Implicit((Object)(object)transform2)) { ChildLocator component4 = ((Component)transform2).GetComponent<ChildLocator>(); Transform val16 = component4.FindChild("Muzzle"); if (Object.op_Implicit((Object)(object)val16)) { Transform val17 = CreateEmptyChild(val16, "CommandMuzzleGreen", Vector3.zero); RotateAroundAxis val18 = ((Component)val17).gameObject.AddComponent<RotateAroundAxis>(); val18.speed = (Speed)0; val18.slowRotationSpeed = 120f; val18.fastRotationSpeed = 720f; val18.rotateAroundAxis = (RotationAxis)2; val18.relativeTo = (Space)1; val18.reverse = true; component4.AddChild("CommandMuzzle", val17); component4.AddChild("CommandTopMuzzle", CreateEmptyChild(val17, "TopMuzzle", new Vector3(0.2887f, 0.5f, 0f))); component4.AddChild("CommandMiddleMuzzle", CreateEmptyChild(val17, "MiddleMuzzle", new Vector3(-0.5f, 0f, 0f))); component4.AddChild("CommandBottomMuzzle", CreateEmptyChild(val17, "BottomMuzzle", new Vector3(0.2887f, -0.5f, 0f))); } } }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_Base_RoboBallBuddy.RoboBallRedBuddyBody_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Expected O, but got Unknown //IL_0173: 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_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_019f: 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_01b9: 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_0231: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: 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_030f: Unknown result type (might be due to invalid IL or missing references) GenericSkill val3 = x.Result.AddComponent<GenericSkill>(); SkillFamily val4 = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)val4).name = "RoboBallRedBuddyActivateSkillFamily"; val4.variants = (Variant[])(object)new Variant[1]; val4.defaultVariantIndex = 0u; val3.skillName = "Command Activate"; val3._skillFamily = val4; SkillDef val5 = ScriptableObject.CreateInstance<SkillDef>(); val5.skillName = "Command"; ((Object)val5).name = "RoboBallRedCommand"; val5.skillNameToken = "ROBOBALLREDBUDDY_COMMAND"; val5.skillDescriptionToken = "Channel a set of focusing lasers for <style=cIsDamage>3x100% damage</style>. Deals more <style=cIsDamage>damage</style> the <style=cIsUtility>longer</style> the channel. Channel duration scales with attack speed."; val5.icon = null; val5.activationState = new SerializableEntityStateType(typeof(CommandRoboBallRedLaser)); val5.activationStateMachineName = "Weapon"; val5.interruptPriority = (InterruptPriority)8; val5.baseMaxStock = 1; val5.baseRechargeInterval = 0f; val5.attackSpeedBuffsRestockSpeed = false; val5.attackSpeedBuffsRestockSpeed_Multiplier = 1f; val5.rechargeStock = 1; val5.requiredStock = 1; val5.stockToConsume = 1; val5.dontAllowPastMaxStocks = false; val5.beginSkillCooldownOnSkillEnd = false; val5.canceledFromSprinting = false; val5.forceSprintDuringState = false; val5.fullRestockOnAssign = true; val5.resetCooldownTimerOnUse = false; val5.isCombatSkill = true; val5.mustKeyPress = true; val5.cancelSprintingOnActivation = false; val5.hideStockCount = false; val5.autoHandleLuminousShot = true; val5.isCooldownBlockedUntilManuallyReset = false; val5.keywordTokens = new string[0]; Variant[] variants = val4.variants; Variant val6 = new Variant { skillDef = val5, unlockableDef = null }; ((Variant)(ref val6)).viewableNode = new Node(val5.skillNameToken, false, (Node)null); variants[0] = val6; DroneCommandReceiver val7 = x.Result.AddComponent<DroneCommandReceiver>(); CharacterBody component = x.Result.GetComponent<CharacterBody>(); component.bodyFlags = (BodyFlags)(component.bodyFlags | 0x400000); val7.followPosition = new Vector3(8f, 4f, 3f); val7.commandSkill = val3; val7.targetType = (TargetType)4; AddAkBank(x.Result, RoR2_DLC3_VultureHunter.VultureHunterBody_prefab); Transform transform = ((Component)x.Result.GetComponentInChildren<CharacterModel>()).transform; if (Object.op_Implicit((Object)(object)transform)) { ChildLocator component2 = ((Component)transform).GetComponent<ChildLocator>(); Transform val8 = component2.FindChild("Muzzle"); if (Object.op_Implicit((Object)(object)val8)) { Transform val9 = CreateEmptyChild(val8, "CommandMuzzleRed", Vector3.zero); RotateAroundAxis val10 = ((Component)val9).gameObject.AddComponent<RotateAroundAxis>(); val10.speed = (Speed)0; val10.slowRotationSpeed = 120f; val10.fastRotationSpeed = 720f; val10.rotateAroundAxis = (RotationAxis)2; val10.relativeTo = (Space)1; val10.reverse = false; component2.AddChild("CommandMuzzle", val9); component2.AddChild("CommandTopMuzzle", CreateEmptyChild(val9, "TopMuzzle", new Vector3(-0.2887f, 0.5f, 0f))); component2.AddChild("CommandMiddleMuzzle", CreateEmptyChild(val9, "MiddleMuzzle", new Vector3(0.5f, 0f, 0f))); component2.AddChild("CommandBottomMuzzle", CreateEmptyChild(val9, "BottomMuzzle", new Vector3(-0.2887f, -0.5f, 0f))); } } }; val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(RoR2_DLC3_VultureHunter.BeamVultureHunterSolus_prefab), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { roboBallBeamPrefab = PrefabAPI.InstantiateClone(x.Result, "RoboBallBuddyBeamProjectile"); NetworkIdentity val2 = default(NetworkIdentity); if (!roboBallBeamPrefab.TryGetComponent<NetworkIdentity>(ref val2)) { roboBallBeamPrefab.AddComponent<NetworkIdentity>(); } }; Content.entityStates.Add(typeof(CommandRoboBallLaserBase)); Content.entityStates.Add(typeof(CommandRoboBallGreenLaser)); Content.entityStates.Add(typeof(CommandRoboBallRedLaser)); new Content().Initialize(); } public static void AddAkBank(GameObject prefab, string bodyPath) { //IL_001a: 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) AkBank bank = prefab.AddComponent<AkBank>(); AsyncOperationHandle<GameObject> val = AssetAsyncReferenceManager<GameObject>.LoadAsset(new AssetReferenceT<GameObject>(bodyPath), (AsyncReferenceHandleUnloadType)2); val.Completed += delegate(AsyncOperationHandle<GameObject> x) { AkBank component = x.Result.GetComponent<AkBank>(); if (Object.op_Implicit((Object)(object)component)) { bank.data.WwiseObjectReference = component.data.WwiseObjectReference; } }; } public static Transform CreateEmptyChild(Transform parent, string name, Vector3 position) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) Transform transform = new GameObject(name).transform; transform.SetParent(parent, false); ((Component)transform).transform.localPosition = position; return transform; } } internal class Content : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public static List<Type> entityStates = new List<Type>(); public string identifier => "com.MysticalChicken.LonelyOperator"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.entityStateTypes.Add(entityStates.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } public class CommandRoboBallGreenLaser : CommandRoboBallLaserBase { public override RoboBallType roboBallType => RoboBallType.Green; } public class CommandRoboBallRedLaser : CommandRoboBallLaserBase { public override RoboBallType roboBallType => RoboBallType.Red; } public class CommandRoboBallLaserBase : BaseCommandState { public enum RoboBallType { None, Green, Red } public class LaserHandle { public Transform muzzleTransform; public GameObject laserEffect; public EffectManagerHelper _emh_laserEffect; public Transform laserEffectEnd; public string muzzleChildLocatorName; public void DisposeLaserEffect() { if (Object.op_Implicit((Object)(object)laserEffect)) { if ((Object)(object)_emh_laserEffect != (Object)null && _emh_laserEffect.OwningPool != null) { ((GenericPool<EffectManagerHelper>)(object)_emh_laserEffect.OwningPool).ReturnObject(_emh_laserEffect); } else { EntityState.Destroy((Object)(object)laserEffect); } _emh_laserEffect = null; laserEffect = null; } } } public float startingAngle; [SerializeField] public GameObject effectPrefab; [SerializeField] public GameObject hitEffectPrefab; [SerializeField] public GameObject laserPrefab; public static string playLoopSoundString = FireSolusLaser.playLoopSoundString; public static string stopLoopSoundString = FireSolusLaser.stopLoopSoundString; public static float damageCoefficientPerSecond = 3f; public static float force = 100f; public static float minSpread = 0f; public static float maxSpread = 0f; public static int bulletCount = 1; public static float baseFireFrequency = 3f; public static float maxDistance = 500f; public static float startOffsetDistance = 30f; public static float targetingSmoothTime = 0.15f; public static AnimationCurve targetingSmoothCurve = FireSolusLaser.targetingSmoothCurve; public static float lockOnDuration = 1f; public static float baseDuration = 5f; public static float procCoefficientPerTick = 0.333f; public static int triggerToNext; private float fireStopwatch; private float stopwatch; private Ray aimRay; private Transform modelTransform; private BulletAttack bulletAttack; private LaserHandle laser1; private LaserHandle laser2; private LaserHandle laser3; private float currentTargetDistance = startOffsetDistance; private float targetingSmoothVelocity; private bool isCrit; public static AnimationCurve bounceCurve = FireSolusLaser.bounceCurve; public static AnimationCurve adjustCurveX = FireSolusLaser.adjustCurveX; public static AnimationCurve adjustCurveZ = FireSolusLaser.adjustCurveZ; public static float adjustZ = FireSolusLaser.adjustZ; public float rotateL; public float rotateR; private int laserIndex; private static int numLasers = 3; private float fireFrequency; private ChildLocator childLocator; private RotateAroundAxis commandRotation; private bool startedRotation; private float duration; public static string muzzleName = "Muzzle"; public virtual RoboBallType roboBallType { get; set; } = RoboBallType.None; public override float CommandDuration => duration; public override void OnEnter() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) effectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/MuzzleflashGolem.prefab").WaitForCompletion(); hitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/Hitspark1.prefab").WaitForCompletion(); laserPrefab = LonelyOperatorMain.roboBallBeamPrefab; base.shouldFollow = true; base.shouldOccupySpace = false; ((BaseCommandState)this).OnEnter(); duration = Mathf.Max(baseDuration * ((BaseCommandState)this).GetAttackerBody().attackSpeed, baseDuration); base.followTime = duration; base.breakAwayDuration = 1f; fireFrequency = baseFireFrequency * (float)numLasers; Util.PlaySound(playLoopSoundString, ((EntityState)this).gameObject); Util.PlaySound("Play_alloyHunter_pauldronLasers_04_activateLasers", ((EntityState)this).gameObject); aimRay = ((BaseState)this).GetAimRay(); UpdateTargetDistance(aimRay, force: true); currentTargetDistance += startOffsetDistance; modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { childLocator = ((EntityState)this).GetModelChildLocator(); if (Object.op_Implicit((Object)(object)childLocator)) { laser1 = CreateLaserEffects(childLocator, "CommandMiddleMuzzle"); laser2 = CreateLaserEffects(childLocator, "CommandTopMuzzle"); laser3 = CreateLaserEffects(childLocator, "CommandBottomMuzzle"); Transform obj = childLocator.FindChild("CommandMuzzle"); commandRotation = ((obj != null) ? ((Component)obj).GetComponent<RotateAroundAxis>() : null); } } } private LaserHandle CreateLaserEffects(ChildLocator childLocator, string muzzleName) { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) LaserHandle laserHandle = new LaserHandle(); laserHandle.muzzleTransform = childLocator.FindChild(muzzleName); laserHandle.laserEffect = null; laserHandle._emh_laserEffect = null; laserHandle.laserEffectEnd = null; if (Object.op_Implicit((Object)(object)laserHandle.muzzleTransform) && Object.op_Implicit((Object)(object)laserPrefab)) { if (!EffectManager.ShouldUsePooledEffect(laserPrefab)) { laserHandle.laserEffect = Object.Instantiate<GameObject>(laserPrefab, laserHandle.muzzleTransform.position, laserHandle.muzzleTransform.rotation); } else { laserHandle._emh_laserEffect = EffectManager.GetAndActivatePooledEffect(laserPrefab, laserHandle.muzzleTransform.position, laserHandle.muzzleTransform.rotation); laserHandle.laserEffect = ((Component)laserHandle._emh_laserEffect).gameObject; } laserHandle.muzzleChildLocatorName = muzzleName; ChildLocator component = laserHandle.laserEffect.GetComponent<ChildLocator>(); laserHandle.laserEffectEnd = component.FindChild("LaserEnd"); } return laserHandle; } public override void OnExit() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) laser1.DisposeLaserEffect(); laser2.DisposeLaserEffect(); laser3.DisposeLaserEffect(); if (Object.op_Implicit((Object)(object)commandRotation)) { commandRotation.SetSpeed((Speed)0); ((Component)commandRotation).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); } Util.PlaySound(stopLoopSoundString, ((EntityState)this).gameObject); ((BaseCommandState)this).OnExit(); } private void DisposeLaserEffect(GameObject laserEffect, EffectManagerHelper _emh_laserEffect) { if (Object.op_Implicit((Object)(object)laserEffect)) { if ((Object)(object)_emh_laserEffect != (Object)null && _emh_laserEffect.OwningPool != null) { ((GenericPool<EffectManagerHelper>)(object)_emh_laserEffect.OwningPool).ReturnObject(_emh_laserEffect); } else { EntityState.Destroy((Object)(object)laserEffect); } _emh_laserEffect = null; laserEffect = null; } } public override void FixedUpdate() { //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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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_010d: 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_0082: 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_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: 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_014b: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00c5: 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_0246: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) ((BaseCommandState)this).FixedUpdate(); float deltaTime = ((EntityState)this).GetDeltaTime(); fireStopwatch += deltaTime; stopwatch += deltaTime; aimRay = ((BaseCommandState)this).GetAttackerBody().inputBank.GetAimRay(); HurtBox val = null; Vector3 val2; if (stopwatch >= lockOnDuration) { if (!startedRotation) { startedRotation = true; BeginRotation(); } UpdateRotation(); val = SearchForTarget(aimRay, 100f, 5f); if (Object.op_Implicit((Object)(object)val)) { ref Ray reference = ref aimRay; val2 = ((Component)val).transform.position - ((Ray)(ref aimRay)).origin; ((Ray)(ref reference)).direction = ((Vector3)(ref val2)).normalized; } } RaycastHit val3 = default(RaycastHit); if (!Object.op_Implicit((Object)(object)val) && Util.CharacterRaycast(((EntityState)this).gameObject, aimRay, ref val3, maxDistance, LayerMask.op_Implicit(LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)), (QueryTriggerInteraction)0)) { ref Ray reference2 = ref aimRay; val2 = ((RaycastHit)(ref val3)).point - ((Ray)(ref aimRay)).origin; ((Ray)(ref reference2)).direction = ((Vector3)(ref val2)).normalized; } UpdateTargetDistance(aimRay); float num = 1f / (fireFrequency * Mathf.Lerp(1f, 3f, Mathf.Clamp01((stopwatch - lockOnDuration - 1f) / (10f - lockOnDuration)))); bool flag = fireStopwatch > num; float num2 = adjustCurveX.Evaluate(stopwatch / (lockOnDuration * 2f)); float num3 = adjustCurveZ.Evaluate(stopwatch / (lockOnDuration * 2f)); RoboBallType roboBallType = this.roboBallType; if (1 == 0) { } float num4 = roboBallType switch { RoboBallType.Green => 0f - num2, RoboBallType.Red => num2, _ => 0f, }; if (1 == 0) { } float yRotate = num4; do { if (flag) { isCrit = ((BaseCommandState)this).GetAttackerBody().RollCrit(); } UpdateLaser(aimRay, laser1, flag && laserIndex == 0, yRotate, num3); UpdateLaser(aimRay, laser2, flag && laserIndex == 1, yRotate, num3 - adjustZ); UpdateLaser(aimRay, laser3, flag && laserIndex == 2, yRotate, num3 + adjustZ); if (flag) { laserIndex++; fireStopwatch -= num; if (laserIndex >= numLasers) { laserIndex = 0; } } } while (fireStopwatch > num); if (((EntityState)this).isAuthority && stopwatch > duration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void BeginRotation() { if (Object.op_Implicit((Object)(object)commandRotation)) { commandRotation.fastRotationSpeed = commandRotation.slowRotationSpeed; commandRotation.SetSpeed((Speed)2); } } private void UpdateRotation() { if (Object.op_Implicit((Object)(object)commandRotation)) { commandRotation.fastRotationSpeed = Mathf.Lerp(commandRotation.slowRotationSpeed, commandRotation.slowRotationSpeed * 9f, Mathf.Clamp01((stopwatch - lockOnDuration - 1f) / (10f - lockOnDuration))); } } private HurtBox SearchForTarget(Ray aimRay, float searchDistance, float searchAngle) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) BullseyeSearch val = new BullseyeSearch(); val.searchOrigin = ((Ray)(ref aimRay)).origin; val.searchDirection = ((Ray)(ref aimRay)).direction; val.maxDistanceFilter = searchDistance; val.maxAngleFilter = searchAngle; val.teamMaskFilter = TeamMask.GetEnemyTeams(((EntityState)this).teamComponent.teamIndex); val.sortMode = (SortMode)2; val.RefreshCandidates(); HurtBox val2 = val.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val2)) { return val2; } return null; } private void UpdateTargetDistance(Ray aimRay, bool force = false) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) float distance = maxDistance; RaycastHit val = default(RaycastHit); if (Physics.Raycast(aimRay, ref val, maxDistance, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask), (QueryTriggerInteraction)0)) { distance = ((RaycastHit)(ref val)).distance; } if (force) { currentTargetDistance = distance; } else { currentTargetDistance = Mathf.SmoothDamp(currentTargetDistance, distance, ref targetingSmoothVelocity, targetingSmoothTime * targetingSmoothCurve.Evaluate(((EntityState)this).fixedAge / lockOnDuration)); } } private void UpdateLaser(Ray aimRay, LaserHandle laserHandle, bool shouldFire, float yRotate, float zRotate) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //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_0094: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_0030: Unknown result type (might be due to invalid IL or missing references) //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_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: 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_0108: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: 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_01b6: 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_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_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_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: 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_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) Vector3 point = ((Ray)(ref aimRay)).GetPoint(currentTargetDistance); Ray val = aimRay; if (Object.op_Implicit((Object)(object)laserHandle.muzzleTransform)) { ((Ray)(ref val))..ctor(laserHandle.muzzleTransform.position, point - laserHandle.muzzleTransform.position); } Vector3 val2 = Vector3.up - Vector3.Project(((Ray)(ref val)).direction, Vector3.up); Vector3 normalized = ((Vector3)(ref val2)).normalized; Vector3 direction = ((Ray)(ref val)).direction; ((Ray)(ref val)).direction = Quaternion.AngleAxis(yRotate, normalized) * ((Ray)(ref val)).direction; ((Ray)(ref val)).direction = Quaternion.AngleAxis(zRotate, direction) * ((Ray)(ref val)).direction; Vector3 origin = ((Ray)(ref val)).origin; Vector3 point2 = ((Ray)(ref val)).GetPoint(maxDistance); bool flag = false; if (Object.op_Implicit((Object)(object)laserHandle.laserEffect)) { RaycastHit val3 = default(RaycastHit); if (Util.CharacterRaycast(((EntityState)this).gameObject, val, ref val3, maxDistance, LayerMask.op_Implicit(LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)), (QueryTriggerInteraction)0)) { point2 = ((RaycastHit)(ref val3)).point; RaycastHit val4 = default(RaycastHit); if (Util.CharacterRaycast(((EntityState)this).gameObject, new Ray(((RaycastHit)(ref val3)).point - ((Ray)(ref val)).direction * 0.1f, -((Ray)(ref val)).direction), ref val4, ((RaycastHit)(ref val3)).distance, LayerMask.op_Implicit(LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)), (QueryTriggerInteraction)0)) { point2 = ((Ray)(ref val)).GetPoint(0.1f); flag = true; } } laserHandle.laserEffect.transform.rotation = Util.QuaternionSafeLookRotation(point2 - origin); laserHandle.laserEffect.transform.position = laserHandle.muzzleTransform.position; laserHandle.laserEffectEnd.position = point2; } if (shouldFire && !flag) { Transform obj = modelTransform; Ray val5 = val; string muzzleChildLocatorName = laserHandle.muzzleChildLocatorName; val2 = point2 - ((Ray)(ref val)).origin; FireBullet(obj, val5, muzzleChildLocatorName, ((Vector3)(ref val2)).magnitude + 1f); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } private void FireBullet(Transform modelTransform, Ray aimRay, string targetMuzzle, float maxDistance) { //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: 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_0062: Expected O, but got Unknown //IL_00d3: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { GameObject owner = (Object.op_Implicit((Object)(object)base.commandReceiver.leaderBody) ? ((Component)base.commandReceiver.leaderBody).gameObject : ((EntityState)this).gameObject); float damage = ((BaseCommandState)this).GetAttackerBody().damage; if (bulletAttack == null) { bulletAttack = new BulletAttack(); bulletAttack.owner = owner; bulletAttack.weapon = ((EntityState)this).gameObject; bulletAttack.minSpread = minSpread; bulletAttack.maxSpread = maxSpread; bulletAttack.bulletCount = 1u; bulletAttack.hitEffectPrefab = hitEffectPrefab; bulletAttack.procCoefficient = procCoefficientPerTick; bulletAttack.falloffModel = (FalloffModel)0; bulletAttack.radius = 1f; bulletAttack.force = force; } bulletAttack.origin = ((Ray)(ref aimRay)).origin; bulletAttack.aimVector = ((Ray)(ref aimRay)).direction; bulletAttack.damage = damageCoefficientPerSecond * damage / (baseFireFrequency * (float)numLasers); bulletAttack.damageType = DamageTypeCombo.GenericSecondary; bulletAttack.muzzleName = targetMuzzle; bulletAttack.isCrit = isCrit; bulletAttack.HitEffectNormal = false; bulletAttack.maxDistance = maxDistance; bulletAttack.Fire(); } } public override void OnSerialize(NetworkWriter writer) { ((BaseCommandState)this).OnSerialize(writer); writer.Write(stopwatch); } public override void OnDeserialize(NetworkReader reader) { ((BaseCommandState)this).OnDeserialize(reader); stopwatch = reader.ReadSingle(); } }