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 Spy v1.3.3
plugins/SpyMod.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AncientScepter; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EmotesAPI; using EntityStates; using EntityStates.AI.Walker; using EntityStates.BrotherMonster; using EntityStates.Commando.CommandoWeapon; using HG; using HG.BlendableTypes; using JetBrains.Annotations; using KinematicCharacterController; using On.RoR2; using On.RoR2.UI; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.HudOverlay; using RoR2.Navigation; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using SpyMod.Modules; using SpyMod.Modules.Achievements; using SpyMod.Modules.BaseStates; using SpyMod.Modules.Characters; using SpyMod.Spy; using SpyMod.Spy.Components; using SpyMod.Spy.Content; using SpyMod.Spy.SkillStates; using ThreeEyedGames; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.Rendering.PostProcessing; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SpyMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+05e8ad0f12c02fe14f77c284e3cfc230bb808ad1")] [assembly: AssemblyProduct("SpyMod")] [assembly: AssemblyTitle("SpyMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] internal enum SpyCameraParams { DEFAULT, AIM_PISTOL, AIM_SNIPER, EMOTE } namespace SpyMod { internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void ErrorAssetBundle(string assetName, string bundleName) { Error("failed to load asset, " + assetName + ", because it does not exist in asset bundle, " + bundleName); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.kenko.Spy", "Spy", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class SpyPlugin : BaseUnityPlugin { public const string MODUID = "com.kenko.Spy"; public const string MODNAME = "Spy"; public const string MODVERSION = "1.0.0"; public const string DEVELOPER_PREFIX = "KENKO"; public static SpyPlugin instance; public static bool emotesInstalled => Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI"); public static bool scepterInstalled => Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter"); private void Awake() { instance = this; NetworkingAPI.RegisterMessageType<SyncStabExplosion>(); NetworkingAPI.RegisterMessageType<SyncStealth>(); NetworkingAPI.RegisterMessageType<SyncResetStab>(); Log.Init(((BaseUnityPlugin)this).Logger); Language.Init(); new SpySurvivor().Initialize(); new SpyDecoy().Initialize(); new ContentPacks().Initialize(); } } } namespace SpyMod.Spy { public class SpyDecoy : CharacterBase<SpyDecoy> { public const string SPY_PREFIX = "KENKO_SPY_DECOY_"; internal static GameObject characterPrefab; public static GameObject decoyMasterPrefab; public static SpawnCard decoySpawnCard; public override string assetBundleName => "spy"; public override string bodyName => "SpyDecoyBody"; public override string modelPrefabName => "mdlSpyDecoy"; public override BodyInfo bodyInfo => new BodyInfo { bodyName = bodyName, bodyNameToken = "KENKO_SPY_DECOY_NAME", subtitleNameToken = "KENKO_SPY_DECOY_SUBTITLE", characterPortrait = assetBundle.LoadAsset<Texture>("texSpyIcon"), bodyColor = SpyAssets.spyColor, crosshair = CharacterAssets.LoadCrosshair("Standard"), podPrefab = null, maxHealth = 1f, healthRegen = 0f, armor = 0f, damage = 0f, moveSpeed = 0f, moveSpeedGrowth = 0f, damageGrowth = 0f, healthGrowth = 0f, jumpCount = 0 }; public override CustomRendererInfo[] customRendererInfos => new CustomRendererInfo[6] { new CustomRendererInfo { childName = "Model", dontHotpoo = true }, new CustomRendererInfo { childName = "Revolver", dontHotpoo = true }, new CustomRendererInfo { childName = "Knife", dontHotpoo = true }, new CustomRendererInfo { childName = "Watch", dontHotpoo = true }, new CustomRendererInfo { childName = "Tie", dontHotpoo = true }, new CustomRendererInfo { childName = "Visor", dontHotpoo = true } }; public override ItemDisplaysBase itemDisplays => null; public override AssetBundle assetBundle { get; protected set; } public override GameObject bodyPrefab { get; protected set; } public override CharacterBody prefabCharacterBody { get; protected set; } public override GameObject characterModelObject { get; protected set; } public override CharacterModel prefabCharacterModel { get; protected set; } public override void Initialize() { base.Initialize(); } public override void InitializeCharacter() { base.InitializeCharacter(); ChildLocator componentInChildren = bodyPrefab.GetComponentInChildren<ChildLocator>(); ((Component)componentInChildren.FindChild("Knife")).gameObject.SetActive(false); ((Component)componentInChildren.FindChild("Watch")).gameObject.SetActive(false); bodyPrefab.layer = LayerIndex.fakeActor.intVal; InitializeEntityStateMachines(); InitializeSkills(); InitializeSkins(); InitializeCharacterMaster(); characterPrefab = bodyPrefab; } public override void InitializeEntityStateMachines() { Prefabs.ClearEntityStateMachines(bodyPrefab); Prefabs.AddMainEntityStateMachine(bodyPrefab, "Body", typeof(GenericCharacterMain), typeof(DecoySpawn)); } public override void InitializeSkills() { Skills.CreateDecoySkillFamilies(bodyPrefab); } public override void InitializeSkins() { ModelSkinController val = ((Component)prefabCharacterModel).gameObject.AddComponent<ModelSkinController>(); ChildLocator component = ((Component)prefabCharacterModel).GetComponent<ChildLocator>(); RendererInfo[] baseRendererInfos = prefabCharacterModel.baseRendererInfos; List<SkinDef> list = new List<SkinDef>(); SkinDef item = Skins.CreateSkinDef("DEFAULT_SKIN", assetBundle.LoadAsset<Sprite>("texDefaultSkin"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); list.Add(item); val.skins = list.ToArray(); } public override void InitializeCharacterMaster() { //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) GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/LemurianMaster.prefab").WaitForCompletion(), "SpyDecoyMaster"); CharacterMaster component = val.GetComponent<CharacterMaster>(); component.bodyPrefab = bodyPrefab; BaseAI component2 = val.GetComponent<BaseAI>(); component2.neverRetaliateFriendlies = true; component2.aimVectorMaxSpeed *= 3f; component2.fullVision = true; InitializeSkillDrivers(val); decoyMasterPrefab = val; SpyMod.Modules.Content.AddMasterPrefab(val); CreateSpawnCard(); } private void CreateSpawnCard() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0043: Unknown result type (might be due to invalid IL or missing references) CharacterSpawnCard val = ScriptableObject.CreateInstance<CharacterSpawnCard>(); ((Object)val).name = "cssSpyDecoy"; ((SpawnCard)val).prefab = decoyMasterPrefab; ((SpawnCard)val).sendOverNetwork = true; ((SpawnCard)val).hullSize = (HullClassification)0; ((SpawnCard)val).nodeGraphType = (GraphType)0; ((SpawnCard)val).requiredFlags = (NodeFlags)0; ((SpawnCard)val).forbiddenFlags = (NodeFlags)4; ((SpawnCard)val).eliteRules = (EliteRules)0; ((SpawnCard)val).occupyPosition = false; decoySpawnCard = (SpawnCard)(object)val; } protected virtual void InitializeSkillDrivers(GameObject masterPrefab) { //IL_0042: 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_00b5: 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_00d5: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0161: 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_0181: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0214: 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_0246: 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_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: 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_0375: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03b5: Unknown result type (might be due to invalid IL or missing references) //IL_042d: Unknown result type (might be due to invalid IL or missing references) //IL_0435: Unknown result type (might be due to invalid IL or missing references) //IL_043d: Unknown result type (might be due to invalid IL or missing references) //IL_0459: Unknown result type (might be due to invalid IL or missing references) AISkillDriver[] componentsInChildren = masterPrefab.GetComponentsInChildren<AISkillDriver>(); foreach (AISkillDriver val in componentsInChildren) { Object.DestroyImmediate((Object)(object)val); } AISkillDriver val2 = masterPrefab.AddComponent<AISkillDriver>(); val2.customName = "DoNothing1"; val2.skillSlot = (SkillSlot)(-1); val2.requireSkillReady = true; val2.minUserHealthFraction = float.NegativeInfinity; val2.maxUserHealthFraction = float.PositiveInfinity; val2.minTargetHealthFraction = float.NegativeInfinity; val2.maxTargetHealthFraction = float.PositiveInfinity; val2.minDistance = 0f; val2.maxDistance = float.PositiveInfinity; val2.activationRequiresAimConfirmation = false; val2.activationRequiresTargetLoS = false; val2.selectionRequiresTargetLoS = false; val2.maxTimesSelected = -1; val2.moveTargetType = (TargetType)0; val2.movementType = (MovementType)0; val2.aimType = (AimType)0; val2.moveInputScale = 1f; val2.ignoreNodeGraph = false; val2.buttonPressType = (ButtonPressType)0; AISkillDriver val3 = masterPrefab.AddComponent<AISkillDriver>(); val3.customName = "DoNothing2"; val3.skillSlot = (SkillSlot)(-1); val3.requireSkillReady = true; val3.minUserHealthFraction = float.NegativeInfinity; val3.maxUserHealthFraction = float.PositiveInfinity; val3.minTargetHealthFraction = float.NegativeInfinity; val3.maxTargetHealthFraction = float.PositiveInfinity; val3.minDistance = 0f; val3.maxDistance = float.PositiveInfinity; val3.activationRequiresAimConfirmation = false; val3.activationRequiresTargetLoS = false; val3.selectionRequiresTargetLoS = false; val3.maxTimesSelected = -1; val3.moveTargetType = (TargetType)0; val3.movementType = (MovementType)0; val3.aimType = (AimType)0; val3.moveInputScale = 1f; val3.ignoreNodeGraph = false; val3.buttonPressType = (ButtonPressType)0; AISkillDriver val4 = masterPrefab.AddComponent<AISkillDriver>(); val4.customName = "DoNothing3"; val4.skillSlot = (SkillSlot)(-1); val4.requireSkillReady = true; val4.minUserHealthFraction = float.NegativeInfinity; val4.maxUserHealthFraction = float.PositiveInfinity; val4.minTargetHealthFraction = float.NegativeInfinity; val4.maxTargetHealthFraction = float.PositiveInfinity; val4.minDistance = 0f; val4.maxDistance = float.PositiveInfinity; val4.activationRequiresAimConfirmation = false; val4.activationRequiresTargetLoS = false; val4.selectionRequiresTargetLoS = false; val4.maxTimesSelected = -1; val4.moveTargetType = (TargetType)0; val4.movementType = (MovementType)0; val4.aimType = (AimType)0; val4.moveInputScale = 1f; val4.ignoreNodeGraph = false; val4.buttonPressType = (ButtonPressType)0; AISkillDriver val5 = masterPrefab.AddComponent<AISkillDriver>(); val5.customName = "DoNothing4"; val5.skillSlot = (SkillSlot)(-1); val5.requireSkillReady = true; val5.minUserHealthFraction = float.NegativeInfinity; val5.maxUserHealthFraction = float.PositiveInfinity; val5.minTargetHealthFraction = float.NegativeInfinity; val5.maxTargetHealthFraction = float.PositiveInfinity; val5.minDistance = 0f; val5.maxDistance = float.PositiveInfinity; val5.activationRequiresAimConfirmation = false; val5.activationRequiresTargetLoS = false; val5.selectionRequiresTargetLoS = false; val5.maxTimesSelected = -1; val5.moveTargetType = (TargetType)0; val5.movementType = (MovementType)0; val5.aimType = (AimType)0; val5.moveInputScale = 1f; val5.ignoreNodeGraph = false; val5.buttonPressType = (ButtonPressType)0; AISkillDriver val6 = masterPrefab.AddComponent<AISkillDriver>(); val6.customName = "DoNothing5"; val6.skillSlot = (SkillSlot)(-1); val6.requireSkillReady = true; val6.minUserHealthFraction = float.NegativeInfinity; val6.maxUserHealthFraction = float.PositiveInfinity; val6.minTargetHealthFraction = float.NegativeInfinity; val6.maxTargetHealthFraction = float.PositiveInfinity; val6.minDistance = 0f; val6.maxDistance = float.PositiveInfinity; val6.activationRequiresAimConfirmation = false; val6.activationRequiresTargetLoS = false; val6.selectionRequiresTargetLoS = false; val6.maxTimesSelected = -1; val6.moveTargetType = (TargetType)0; val6.movementType = (MovementType)0; val6.aimType = (AimType)0; val6.moveInputScale = 1f; val6.ignoreNodeGraph = false; val6.buttonPressType = (ButtonPressType)0; AISkillDriver val7 = masterPrefab.AddComponent<AISkillDriver>(); val7.customName = "DoNothing6"; val7.skillSlot = (SkillSlot)(-1); val7.requireSkillReady = true; val7.minUserHealthFraction = float.NegativeInfinity; val7.maxUserHealthFraction = float.PositiveInfinity; val7.minTargetHealthFraction = float.NegativeInfinity; val7.maxTargetHealthFraction = float.PositiveInfinity; val7.minDistance = 0f; val7.maxDistance = float.PositiveInfinity; val7.activationRequiresAimConfirmation = false; val7.activationRequiresTargetLoS = false; val7.selectionRequiresTargetLoS = false; val7.maxTimesSelected = -1; val7.moveTargetType = (TargetType)0; val7.movementType = (MovementType)0; val7.aimType = (AimType)0; val7.moveInputScale = 1f; val7.ignoreNodeGraph = false; val7.buttonPressType = (ButtonPressType)0; } } public class SpySurvivor : SurvivorBase<SpySurvivor> { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Init <>9__64_0; internal void <Emotes>b__64_0(orig_Init orig) { orig.Invoke(); GameObject val = SpyAssets.mainAssetBundle.LoadAsset<GameObject>("spy_emoteskeleton"); CustomEmotesAPI.ImportArmature(characterPrefab, val, 0, true); } } public const string SPY_PREFIX = "KENKO_SPY_"; internal static GameObject characterPrefab; public static SkillDef cloakScepterSkillDef; public static SkillDef deadmanScepterSkillDef; public override string assetBundleName => "spy"; public override string bodyName => "SpyBody"; public override string masterName => "SpyMonsterMaster"; public override string modelPrefabName => "mdlSpy"; public override string displayPrefabName => "SpyDisplay"; public override string survivorTokenPrefix => "KENKO_SPY_"; public override BodyInfo bodyInfo => new BodyInfo { bodyName = bodyName, bodyNameToken = "KENKO_SPY_NAME", subtitleNameToken = "KENKO_SPY_SUBTITLE", characterPortrait = assetBundle.LoadAsset<Texture>("texSpyIcon"), bodyColor = SpyAssets.spyColor, sortPosition = 7f, crosshair = CharacterAssets.LoadCrosshair("Standard"), podPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/SurvivorPod"), damage = SpyConfig.damage.Value, damageGrowth = SpyConfig.damageGrowth.Value * SpyConfig.damage.Value, attackSpeed = SpyConfig.attackSpeed.Value, attackSpeedGrowth = SpyConfig.attackSpeedGrowth.Value, crit = SpyConfig.crit.Value, critGrowth = SpyConfig.critGrowth.Value, maxHealth = SpyConfig.maxHealth.Value, healthGrowth = SpyConfig.healthGrowth.Value * SpyConfig.maxHealth.Value, healthRegen = SpyConfig.healthRegen.Value, regenGrowth = SpyConfig.regenGrowth.Value * SpyConfig.healthRegen.Value, shield = SpyConfig.shield.Value, shieldGrowth = SpyConfig.shieldGrowth.Value * SpyConfig.shield.Value, armor = SpyConfig.armor.Value, armorGrowth = SpyConfig.armorGrowth.Value * SpyConfig.armor.Value, moveSpeed = SpyConfig.moveSpeed.Value, moveSpeedGrowth = SpyConfig.moveSpeedGrowth.Value * SpyConfig.moveSpeed.Value, jumpPower = SpyConfig.jumpPower.Value, jumpPowerGrowth = SpyConfig.jumpPowerGrowth.Value * SpyConfig.jumpPower.Value, acceleration = SpyConfig.acceleration.Value, jumpCount = SpyConfig.jumpCount.Value, autoCalculateLevelStats = SpyConfig.autoCalculateLevelStats.Value }; public override CustomRendererInfo[] customRendererInfos => new CustomRendererInfo[6] { new CustomRendererInfo { childName = "Model", dontHotpoo = true }, new CustomRendererInfo { childName = "Revolver", dontHotpoo = true }, new CustomRendererInfo { childName = "Knife", dontHotpoo = true }, new CustomRendererInfo { childName = "Watch", dontHotpoo = true }, new CustomRendererInfo { childName = "Tie", dontHotpoo = true }, new CustomRendererInfo { childName = "Visor", dontHotpoo = true } }; public override UnlockableDef characterUnlockableDef => SpyUnlockables.characterUnlockableDef; public override ItemDisplaysBase itemDisplays => new SpyItemDisplays(); public override AssetBundle assetBundle { get; protected set; } public override GameObject bodyPrefab { get; protected set; } public override CharacterBody prefabCharacterBody { get; protected set; } public override GameObject characterModelObject { get; protected set; } public override CharacterModel prefabCharacterModel { get; protected set; } public override GameObject displayPrefab { get; protected set; } public override void Initialize() { base.Initialize(); } public override void InitializeCharacter() { SpyConfig.Init(); SpyUnlockables.Init(); base.InitializeCharacter(); SpyCrosshair.Init(assetBundle); CameraParams.InitializeParams(); ChildLocator componentInChildren = bodyPrefab.GetComponentInChildren<ChildLocator>(); ((Component)componentInChildren.FindChild("Knife")).gameObject.SetActive(false); ((Component)componentInChildren.FindChild("Watch")).gameObject.SetActive(false); DamageTypes.Init(); SpyStates.Init(); SpyTokens.Init(); SpyAssets.Init(assetBundle); SpyBuffs.Init(assetBundle); InitializeEntityStateMachines(); InitializeSkills(); InitializeSkins(); InitializeCharacterMaster(); AdditionalBodySetup(); characterPrefab = bodyPrefab; AddHooks(); } private void AdditionalBodySetup() { AddHitboxes(); bodyPrefab.AddComponent<SpyController>(); } public void AddHitboxes() { Prefabs.SetupHitBoxGroup(characterModelObject, "KnifeHitbox", "KnifeHitbox"); } public override void InitializeEntityStateMachines() { Prefabs.ClearEntityStateMachines(bodyPrefab); Prefabs.AddMainEntityStateMachine(bodyPrefab, "Body", typeof(MainState), typeof(SpawnTeleporterState)); Prefabs.AddEntityStateMachine(bodyPrefab, "Weapon"); Prefabs.AddEntityStateMachine(bodyPrefab, "Weapon2"); Prefabs.AddEntityStateMachine(bodyPrefab, "Watch"); } public override void InitializeSkills() { bodyPrefab.AddComponent<SpyPassive>(); Skills.CreateSkillFamilies(bodyPrefab); AddPassiveSkills(); AddPrimarySkills(); AddSecondarySkills(); AddUtilitySkills(); AddSpecialSkills(); if (SpyPlugin.scepterInstalled) { InitializeScepter(); } } private void AddPassiveSkills() { //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) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) SpyPassive component = bodyPrefab.GetComponent<SpyPassive>(); SkillLocator component2 = bodyPrefab.GetComponent<SkillLocator>(); component2.passiveSkill.enabled = false; component.spyPassive = Skills.CreateSkillDef(new SkillDefInfo { skillName = "KENKO_SPY_PASSIVE_NAME", skillNameToken = "KENKO_SPY_PASSIVE_NAME", skillDescriptionToken = "KENKO_SPY_PASSIVE_DESCRIPTION", skillIcon = assetBundle.LoadAsset<Sprite>("texSpyPassive"), keywordTokens = new string[1] { Tokens.spyBackstabKeyword }, activationState = new SerializableEntityStateType(typeof(Idle)), activationStateMachineName = "", baseMaxStock = 1, baseRechargeInterval = 0f, beginSkillCooldownOnSkillEnd = false, canceledFromSprinting = false, forceSprintDuringState = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)0, resetCooldownTimerOnUse = false, isCombatSkill = false, mustKeyPress = false, cancelSprintingOnActivation = false, rechargeStock = 1, requiredStock = 2, stockToConsume = 1 }); Skills.AddPassiveSkills(component.passiveSkillSlot.skillFamily, component.spyPassive); } private void AddPrimarySkills() { //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_0074: 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_013f: 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) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Diamondback"; skillDefInfo.skillNameToken = "KENKO_SPY_PRIMARY_REVOLVER_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_PRIMARY_REVOLVER_DESCRIPTION"; skillDefInfo.keywordTokens = new string[1] { Tokens.spyCritKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyRevolver"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Shoot)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)0; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 0f; skillDefInfo.rechargeStock = 0; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.mustKeyPress = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = true; skillDefInfo.forceSprintDuringState = false; SpySkillDef spySkillDef = Skills.CreateSkillDef<SpySkillDef>(skillDefInfo); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Ambassador"; skillDefInfo.skillNameToken = "KENKO_SPY_PRIMARY_REVOLVER2_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_PRIMARY_REVOLVER2_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyAmbassador"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Shoot2)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)0; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 0f; skillDefInfo.rechargeStock = 0; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.mustKeyPress = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = true; skillDefInfo.forceSprintDuringState = false; SpySkillDef spySkillDef2 = Skills.CreateSkillDef<SpySkillDef>(skillDefInfo); Skills.AddPrimarySkills(bodyPrefab, spySkillDef, spySkillDef2); } private void AddSecondarySkills() { //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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Stab"; skillDefInfo.skillNameToken = "KENKO_SPY_SECONDARY_KNIFE_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_SECONDARY_KNIFE_DESCRIPTION"; skillDefInfo.keywordTokens = new string[1] { Tokens.agileKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyStab"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(ChargeKnife)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 5f; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = true; skillDefInfo.mustKeyPress = true; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; SpySkillDef spySkillDef = Skills.CreateSkillDef<SpySkillDef>(skillDefInfo); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "BigEarner"; skillDefInfo.skillNameToken = "KENKO_SPY_SECONDARY_KNIFE2_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_SECONDARY_KNIFE2_DESCRIPTION"; skillDefInfo.keywordTokens = new string[2] { Tokens.agileKeyword, Tokens.spyBigEarnerKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyStab2"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(ChargeKnife)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 7f; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = true; skillDefInfo.mustKeyPress = true; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; SpySkillDef spySkillDef2 = Skills.CreateSkillDef<SpySkillDef>(skillDefInfo); Skills.AddSecondarySkills(bodyPrefab, spySkillDef, spySkillDef2); } private void AddUtilitySkills() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Sap"; skillDefInfo.skillNameToken = "KENKO_SPY_UTILITY_FLIP_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_UTILITY_FLIP_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyFlip"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Sap)); skillDefInfo.activationStateMachineName = "Weapon2"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseRechargeInterval = 8f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.mustKeyPress = false; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = false; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = true; SkillDef val = Skills.CreateSkillDef(skillDefInfo); Skills.AddUtilitySkills(bodyPrefab, val); } private void AddSpecialSkills() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_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_0149: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Cloak"; skillDefInfo.skillNameToken = "KENKO_SPY_SPECIAL_WATCH_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_SPECIAL_WATCH_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyCloak"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(Cloak)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)2; skillDefInfo.baseRechargeInterval = 0f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = true; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = false; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; SkillDef val = Skills.CreateSkillDef(skillDefInfo); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "DeadmansWatch"; skillDefInfo.skillNameToken = "KENKO_SPY_SPECIAL_WATCH2_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_SPECIAL_WATCH2_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyWatch"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(SwapWatch)); skillDefInfo.activationStateMachineName = "Watch"; skillDefInfo.interruptPriority = (InterruptPriority)2; skillDefInfo.baseRechargeInterval = 10f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = false; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; SkillDef val2 = Skills.CreateSkillDef(skillDefInfo); Skills.AddSpecialSkills(bodyPrefab, val, val2); } private void InitializeScepter() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0136: 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_014d: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Cloak Scepter"; skillDefInfo.skillNameToken = "KENKO_SPY_SPECIAL_SCEPTER_WATCH_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_SPECIAL_SCEPTER_WATCH_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyCloak"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(CloakScepter)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)2; skillDefInfo.baseRechargeInterval = 0f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = true; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = false; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; cloakScepterSkillDef = Skills.CreateSkillDef(skillDefInfo); skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Deadman's Watch Scepter"; skillDefInfo.skillNameToken = "KENKO_SPY_SPECIAL_SCEPTER_WATCH2_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SPY_SPECIAL_SCEPTER_WATCH2_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSpyWatch"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(SwapWatchScepter)); skillDefInfo.activationStateMachineName = "Weapon"; skillDefInfo.interruptPriority = (InterruptPriority)2; skillDefInfo.baseRechargeInterval = 10f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = false; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; deadmanScepterSkillDef = Skills.CreateSkillDef(skillDefInfo); ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(cloakScepterSkillDef, bodyName, (SkillSlot)3, 0); ItemBase<AncientScepterItem>.instance.RegisterScepterSkill(deadmanScepterSkillDef, bodyName, (SkillSlot)3, 1); } public override void InitializeSkins() { //IL_00ae: 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_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: 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) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) ModelSkinController val = ((Component)prefabCharacterModel).gameObject.AddComponent<ModelSkinController>(); ChildLocator component = ((Component)prefabCharacterModel).GetComponent<ChildLocator>(); RendererInfo[] baseRendererInfos = prefabCharacterModel.baseRendererInfos; List<SkinDef> list = new List<SkinDef>(); SkinDef val2 = Skins.CreateSkinDef("DEFAULT_SKIN", assetBundle.LoadAsset<Sprite>("texDefaultSkin"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val2.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "meshSpy", "meshRevolver", "meshKnife", "meshWatch", "meshTie", "meshVisor"); val2.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[1] { new GameObjectActivation { gameObject = component.FindChildGameObject("Tie"), shouldActivate = true } }; list.Add(val2); SkinDef val3 = Skins.CreateSkinDef("KENKO_SPY_MASTERY_SKIN_NAME", assetBundle.LoadAsset<Sprite>("texMonsoonSkin"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject, SpyUnlockables.masterySkinUnlockableDef); val3.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "meshSpyAlt", "meshRevolverAlt", "meshKnifeAlt", "meshWatchAlt", null, "meshVisorAlt"); val3.rendererInfos[0].defaultMaterial = SpyAssets.spyMonsoonMat; val3.rendererInfos[1].defaultMaterial = SpyAssets.spyMonsoonMat; val3.rendererInfos[2].defaultMaterial = SpyAssets.spyMonsoonMat; val3.rendererInfos[3].defaultMaterial = SpyAssets.spyMonsoonMat; val3.rendererInfos[5].defaultMaterial = SpyAssets.spyVisorMonsoonMat; val3.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[1] { new GameObjectActivation { gameObject = component.FindChildGameObject("Tie"), shouldActivate = false } }; list.Add(val3); val.skins = list.ToArray(); } public override void InitializeCharacterMaster() { SpyAI.Init(bodyPrefab, masterName); } private void AddHooks() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown HUD.onHudTargetChangedGlobal += HUDSetup; LoadoutPanelController.Rebuild += new hook_Rebuild(LoadoutPanelController_Rebuild); HealthComponent.TakeDamageProcess += new hook_TakeDamageProcess(HealthComponent_TakeDamageProcess); GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal; RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); if (SpyPlugin.emotesInstalled) { Emotes(); } } private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { //IL_0002: 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) if (sender.bodyIndex != BodyCatalog.FindBodyIndex("SpyBody")) { return; } SpyController component = ((Component)sender).gameObject.GetComponent<SpyController>(); if (Object.op_Implicit((Object)(object)component)) { if (sender.HasBuff(SpyBuffs.armorBuff)) { args.armorAdd += 100f; } if (sender.HasBuff(SpyBuffs.spyBigEarnerBuff)) { args.moveSpeedMultAdd += (float)sender.GetBuffCount(SpyBuffs.spyBigEarnerBuff) * 0.15f; } } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void Emotes() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__64_0; if (obj == null) { hook_Init val = delegate(orig_Init orig) { orig.Invoke(); GameObject val2 = SpyAssets.mainAssetBundle.LoadAsset<GameObject>("spy_emoteskeleton"); CustomEmotesAPI.ImportArmature(characterPrefab, val2, 0, true); }; <>c.<>9__64_0 = val; obj = (object)val; } SurvivorCatalog.Init += (hook_Init)obj; } private static void LoadoutPanelController_Rebuild(orig_Rebuild orig, LoadoutPanelController self) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.currentDisplayData.bodyIndex != BodyCatalog.FindBodyIndex("SpyBody")) { return; } LanguageTextMeshController[] componentsInChildren = ((Component)self).gameObject.GetComponentsInChildren<LanguageTextMeshController>(); foreach (LanguageTextMeshController val in componentsInChildren) { if (Object.op_Implicit((Object)(object)val) && val.token == "LOADOUT_SKILL_MISC") { val.token = "Passive"; } } } private void HealthComponent_TakeDamageProcess(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_030a: Unknown result type (might be due to invalid IL or missing references) //IL_0314: 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_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Invalid comparison between Unknown and I4 //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Expected O, but got Unknown //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_038b: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_036f: 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_018f: 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_05aa: 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_05b9: Unknown result type (might be due to invalid IL or missing references) //IL_05be: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: 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_0200: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Unknown result type (might be due to invalid IL or missing references) //IL_0406: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0417: Unknown result type (might be due to invalid IL or missing references) //IL_041c: Unknown result type (might be due to invalid IL or missing references) //IL_0421: 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_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Expected O, but got Unknown //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028b: 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) //IL_029d: 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) if (!NetworkServer.active || !self.alive || self.godMode || self.ospTimer > 0f) { return; } CharacterBody body = self.body; CharacterBody val = null; Vector3 val2 = Vector3.zero; if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { val = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)val)) { val2 = val.corePosition - damageInfo.position; } } if (damageInfo.damage > 0f && !damageInfo.rejected && Object.op_Implicit((Object)(object)body)) { if (body.bodyIndex == BodyCatalog.FindBodyIndex("SpyBody")) { SpyController component = ((Component)body).GetComponent<SpyController>(); if (Object.op_Implicit((Object)(object)component) && component.IsStopWatchOut() && component.isSpecialDeadman) { NetworkIdentity val3 = default(NetworkIdentity); if (((Component)self).gameObject.TryGetComponent<NetworkIdentity>(ref val3)) { NetMessageExtensions.Send((INetMessage)(object)new SyncStealth(val3.netId, ((Component)self).gameObject), (NetworkDestination)1); } damageInfo.rejected = true; DamageInfo val4 = new DamageInfo(); if (damageInfo.damage >= body.healthComponent.combinedHealth * SpyConfig.cloakHealthCost.Value) { val4.damage = body.healthComponent.combinedHealth * SpyConfig.cloakHealthCost.Value; val4.damageType = DamageTypeCombo.op_Implicit((DamageType)2051); } else { val4.damage = damageInfo.damage; val4.damageType = DamageTypeCombo.op_Implicit((DamageType)2049); } val4.attacker = null; val4.canRejectForce = true; val4.crit = false; val4.inflictor = null; val4.damageColorIndex = (DamageColorIndex)0; val4.force = Vector3.zero; val4.rejected = false; val4.position = body.corePosition; val4.procChainMask = default(ProcChainMask); val4.procCoefficient = 0f; if (body.skillLocator.special.skillNameToken != "KENKO_SPY_SPECIAL_SCEPTER_WATCH2_NAME") { body.healthComponent.TakeDamage(val4); } MasterSummon val5 = new MasterSummon(); val5.masterPrefab = SpyDecoy.decoyMasterPrefab; val5.ignoreTeamMemberLimit = true; val5.teamIndexOverride = (TeamIndex)1; val5.summonerBodyObject = ((Component)body).gameObject; val5.position = body.previousPosition; val5.rotation = Util.QuaternionSafeLookRotation(body.characterDirection.forward); CharacterMaster val6 = val5.Perform(); Util.CleanseBody(body, true, false, false, true, true, true); if (body.HasBuff(SpyBuffs.spyWatchDebuff)) { body.RemoveBuff(SpyBuffs.spyWatchDebuff); } body.AddBuff(Buffs.Cloak); body.AddBuff(Buffs.CloakSpeed); body.AddBuff(SpyBuffs.armorBuff); } } if (Object.op_Implicit((Object)(object)val) && val.bodyIndex == BodyCatalog.FindBodyIndex("SpyBody") && !DamageAPI.HasModdedDamageType(damageInfo, DamageTypes.SpyExecute) && val.canPerformBackstab && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)67108864)) != 67108864 && (((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)17) || BackstabManager.IsBackstab(-val2, body))) { if (DamageAPI.HasModdedDamageType(damageInfo, DamageTypes.SpyBackStab)) { float damage = damageInfo.damage; if (damageInfo.crit) { damageInfo.damage += damage * 1.5f; } damageInfo.damage *= SpyConfig.spyBackstabMultiplier.Value; damageInfo.crit = true; ((ProcChainMask)(ref damageInfo.procChainMask)).AddProc((ProcType)17); damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)2); damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)2048); DamageAPI.AddModdedDamageType(damageInfo, DamageTypes.SpyExecute); Util.PlaySound("sfx_spy_crit", ((Component)val).gameObject); if (Object.op_Implicit((Object)(object)body.healthComponent)) { SpyController component2 = ((Component)val).GetComponent<SpyController>(); if (body.isChampion || (body.isBoss && Object.op_Implicit((Object)(object)component2))) { if (component2.isDiamondBack) { for (int i = val.GetBuffCount(SpyBuffs.spyDiamondbackBuff); i < 3; i++) { if (val.GetBuffCount(SpyBuffs.spyDiamondbackBuff) < 5) { val.AddBuff(SpyBuffs.spyDiamondbackBuff); } } } if (component2.isBigEarner) { int num = 5; float num2 = 2f; val.ClearTimedBuffs(SpyBuffs.spyBigEarnerBuff); for (int j = 0; j < num; j++) { val.AddTimedBuff(SpyBuffs.spyBigEarnerBuff, num2 * (float)(j + 1) / (float)num); } val.healthComponent.AddBarrier((val.healthComponent.fullHealth + val.healthComponent.fullShield) * 0.2f); } } else if (body.isElite && Object.op_Implicit((Object)(object)component2) && component2.isDiamondBack && val.GetBuffCount(SpyBuffs.spyDiamondbackBuff) < 5) { val.AddBuff(SpyBuffs.spyDiamondbackBuff); } } } else { damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)67108864); } } } orig.Invoke(self, damageInfo); } private static void GlobalEventManager_onCharacterDeathGlobal(DamageReport damageReport) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0293: 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_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Expected O, but got Unknown //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_021e: 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_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025d: 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_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) CharacterBody attackerBody = damageReport.attackerBody; if (!Object.op_Implicit((Object)(object)attackerBody) || !Object.op_Implicit((Object)(object)damageReport.attackerMaster) || !Object.op_Implicit((Object)(object)damageReport.victim) || attackerBody.bodyIndex != BodyCatalog.FindBodyIndex("SpyBody") || !DamageAPI.HasModdedDamageType(damageReport.damageInfo, DamageTypes.SpyExecute)) { return; } SpyController component = ((Component)attackerBody).GetComponent<SpyController>(); if (Object.op_Implicit((Object)(object)component)) { if (attackerBody.skillLocator.special.skillNameToken == "KENKO_SPY_SPECIAL_SCEPTER_WATCH2_NAME") { attackerBody.skillLocator.special.Reset(); } if (component.isDiamondBack) { if (attackerBody.GetBuffCount(SpyBuffs.spyDiamondbackBuff) <= 0) { component.ActivateCritLightning(); } if (NetworkServer.active) { for (int i = 0; i < 2; i++) { if (attackerBody.GetBuffCount(SpyBuffs.spyDiamondbackBuff) < 5) { attackerBody.AddBuff(SpyBuffs.spyDiamondbackBuff); } } } } if (component.isBigEarner) { NetworkIdentity val = default(NetworkIdentity); if (NetworkServer.active && damageReport.attacker.TryGetComponent<NetworkIdentity>(ref val)) { NetMessageExtensions.Send((INetMessage)(object)new SyncResetStab(val.netId), (NetworkDestination)1); } if (!SpyConfig.bigEarnerFullyResets.Value) { component.ResetChainStabPeriod(); } int num = 5; float num2 = 2f; attackerBody.ClearTimedBuffs(SpyBuffs.spyBigEarnerBuff); for (int j = 0; j < num; j++) { attackerBody.AddTimedBuff(SpyBuffs.spyBigEarnerBuff, num2 * (float)(j + 1) / (float)num); } attackerBody.healthComponent.AddBarrier((attackerBody.healthComponent.fullHealth + attackerBody.healthComponent.fullShield) * 0.1f); EffectData val2 = new EffectData(); val2.origin = attackerBody.corePosition; CharacterMotor characterMotor = attackerBody.characterMotor; bool flag = false; if (Object.op_Implicit((Object)(object)characterMotor)) { Vector3 moveDirection = characterMotor.moveDirection; if (moveDirection != Vector3.zero) { val2.rotation = Util.QuaternionSafeLookRotation(moveDirection); flag = true; } } if (!flag) { val2.rotation = attackerBody.transform.rotation; } EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MoveSpeedOnKillActivate"), val2, true); } } NetworkIdentity val3 = default(NetworkIdentity); if (((Component)damageReport.victim).gameObject.TryGetComponent<NetworkIdentity>(ref val3)) { NetMessageExtensions.Send((INetMessage)(object)new SyncStabExplosion(val3.netId, ((Component)damageReport.victim).gameObject), (NetworkDestination)1); } } internal static void HUDSetup(HUD hud) { //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: 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_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0255: 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_0288: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0383: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)hud.targetBodyObject) && Object.op_Implicit((Object)(object)hud.targetMaster) && (Object)(object)hud.targetMaster.bodyPrefab == (Object)(object)characterPrefab && ((NetworkBehaviour)hud.targetMaster).hasAuthority) { Transform parent = ((Component)hud.equipmentIcons[0]).gameObject.transform.parent; Transform val = ((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas") .Find("BottomLeftCluster") .Find("BarRoots") .Find("LevelDisplayCluster"); GameObject val2 = Object.Instantiate<GameObject>(((Component)val).gameObject, ((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas") .Find("BottomLeftCluster")); ((Object)val2).name = "AmmoTracker"; val2.transform.SetParent(((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("CrosshairCanvas") .Find("CrosshairExtras")); Object.DestroyImmediate((Object)(object)((Component)val2.transform.GetChild(0)).gameObject); Object.Destroy((Object)(object)val2.GetComponentInChildren<LevelText>()); Object.Destroy((Object)(object)val2.GetComponentInChildren<ExpBar>()); ((Component)val2.transform.Find("LevelDisplayRoot").Find("ValueText")).gameObject.SetActive(false); Object.DestroyImmediate((Object)(object)((Component)val2.transform.Find("ExpBarRoot")).gameObject); ((Component)val2.transform.Find("LevelDisplayRoot")).GetComponent<RectTransform>().anchoredPosition = new Vector2(-12f, 0f); RectTransform component = val2.GetComponent<RectTransform>(); ((Transform)component).localScale = new Vector3(0.8f, 0.8f, 1f); component.anchorMin = new Vector2(0f, 0f); component.anchorMax = new Vector2(0f, 0f); component.offsetMin = new Vector2(120f, -40f); component.offsetMax = new Vector2(120f, -40f); component.pivot = new Vector2(0.5f, 0f); component.anchoredPosition = new Vector2(50f, 0f); ((Transform)component).localPosition = new Vector3(120f, -40f, 0f); GameObject val3 = Object.Instantiate<GameObject>(SpyAssets.mainAssetBundle.LoadAsset<GameObject>("WeaponChargeBar")); ((Object)val3).name = "StealthMeter"; val3.transform.SetParent(((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("CrosshairCanvas") .Find("CrosshairExtras")); component = val3.GetComponent<RectTransform>(); ((Transform)component).localScale = new Vector3(0.75f, 0.1f, 1f); component.anchorMin = new Vector2(100f, 2f); component.anchorMax = new Vector2(100f, 2f); component.pivot = new Vector2(0.5f, 0f); component.anchoredPosition = new Vector2(100f, 2f); ((Transform)component).localPosition = new Vector3(100f, 2f, 0f); ((Transform)component).rotation = Quaternion.Euler(new Vector3(0f, 0f, 90f)); CloakHudController cloakHudController = val2.AddComponent<CloakHudController>(); cloakHudController.targetHUD = hud; cloakHudController.targetText = ((Component)val2.transform.Find("LevelDisplayRoot").Find("PrefixText")).gameObject.GetComponent<LanguageTextMeshController>(); cloakHudController.durationDisplay = val3; cloakHudController.durationBar = ((Component)val3.transform.GetChild(1)).gameObject.GetComponent<Image>(); cloakHudController.durationBarColor = ((Component)val3.transform.GetChild(0)).gameObject.GetComponent<Image>(); if (!Object.op_Implicit((Object)(object)((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("CrosshairCanvas") .Find("SpyCrosshair"))) { GameObject val4 = Object.Instantiate<GameObject>(SpyCrosshair.spyCrosshair, ((Component)hud).transform.Find("MainContainer").Find("MainUIArea").Find("CrosshairCanvas")); ((Object)val4).name = "SpyCrosshair"; val4.gameObject.GetComponent<HudElement>().targetBodyObject = hud.targetBodyObject; val4.gameObject.GetComponent<HudElement>().targetCharacterBody = hud.targetBodyObject.GetComponent<CharacterBody>(); } } } } } namespace SpyMod.Spy.SkillStates { public class ChargeKnife : BaseSpySkillState { public override void OnEnter() { RefreshState(); base.OnEnter(); ((EntityState)this).PlayCrossfade("Gesture, Override", "ChargeStab", "Swing.playbackRate", 0.3f, 0.05f); Util.PlaySound("sfx_spy_knife_equip", ((EntityState)this).gameObject); ((Component)((BaseState)this).FindModelChild("Revolver")).gameObject.SetActive(false); ((Component)((BaseState)this).FindModelChild("Knife")).gameObject.SetActive(true); if (((EntityState)this).characterBody.HasBuff(SpyBuffs.spyDiamondbackBuff)) { spyController.DeactivateCritLightning(willReturn: true); } spyController.SpinGun(); } public override void FixedUpdate() { base.FixedUpdate(); ((EntityState)this).characterBody.SetAimTimer(2f); if (((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority() && (double)((EntityState)this).fixedAge >= 0.05) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Stab()); } } public override void OnExit() { ((EntityState)this).OnExit(); } 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)3; } } public class Cloak : BaseSpySkillState { private float baseDuration = 1f; private float duration; private bool willWait = false; protected virtual bool sceptered => false; public override void OnEnter() { RefreshState(); base.OnEnter(); if (!sceptered) { duration = baseDuration / ((BaseState)this).attackSpeedStat; } else { duration = 0f; } if (!spyController.IsStopWatchOut()) { if (spyController.cloakTimer >= spyController.maxCloakTimer * 0.2f) { if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(SpyBuffs.spyWatchDebuff); ((EntityState)this).characterBody.AddBuff(Buffs.Cloak); ((EntityState)this).characterBody.AddBuff(Buffs.CloakSpeed); ((EntityState)this).characterBody.AddBuff(SpyBuffs.armorBuff); } spyController.EnableWatchLayer(); spyController.EnterStealth(); } } else { Util.PlaySound("sfx_spy_uncloak_alt", ((EntityState)this).gameObject); willWait = true; spyController.pauseTimer = true; } } public override void FixedUpdate() { base.FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); if (willWait) { spyController.pauseTimer = false; spyController.ExitStealth(); spyController.DisableWatchLayer(); } } 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; } } public class CloakScepter : Cloak { protected override bool sceptered => true; } public class DecoySpawn : BaseState { private float durationBeforeDeath = 0.5f; public override void OnEnter() { ((BaseState)this).OnEnter(); durationBeforeDeath = 0.5f; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= durationBeforeDeath && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { DamageInfo val = new DamageInfo(); val.damage = ((EntityState)this).healthComponent.fullCombinedHealth * 2f; val.attacker = null; val.canRejectForce = false; val.crit = true; val.inflictor = null; val.damageColorIndex = (DamageColorIndex)0; val.damageType = DamageTypeCombo.op_Implicit((DamageType)264194); val.force = Vector3.zero; val.rejected = false; val.position = ((EntityState)this).characterBody.corePosition; val.procChainMask = default(ProcChainMask); val.procCoefficient = 0f; ((EntityState)this).healthComponent.TakeDamage(val); } ((EntityState)this).OnExit(); } } public class MainState : GenericCharacterMain { private Animator animator; public LocalUser localUser; public override void OnEnter() { ((GenericCharacterMain)this).OnEnter(); animator = ((BaseCharacterMain)this).modelAnimator; FindLocalUser(); } private void FindLocalUser() { if (localUser != null || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { return; } foreach (LocalUser readOnlyLocalUsers in LocalUserManager.readOnlyLocalUsersList) { if ((Object)(object)readOnlyLocalUsers.cachedBody == (Object)(object)((EntityState)this).characterBody) { localUser = readOnlyLocalUsers; break; } } } public override void FixedUpdate() { ((GenericCharacterMain)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)animator)) { bool flag = false; if (!((EntityState)this).characterBody.outOfDanger || !((EntityState)this).characterBody.outOfCombat) { flag = true; } animator.SetBool("inCombat", flag); if (((BaseState)this).isGrounded) { animator.SetFloat("airBlend", 0f); } else { animator.SetFloat("airBlend", 1f); } } } public override void ProcessJump() { //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Expected O, but got Unknown //IL_02a8: 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_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Expected O, but got Unknown //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: 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_031d: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)((EntityState)this).characterBody) || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody.inventory) || !((BaseCharacterMain)this).hasCharacterMotor || ((EntityState)this).healthComponent.isInFrozenState) { return; } bool flag = false; bool flag2 = false; if (((EntityState)this).characterBody.inventory.GetItemCountEffective(Items.JumpDamageStrike) > 0) { ((EntityState)this).characterBody.GetBuffCount(Buffs.JumpDamageStrikeCharge); } if (!base.jumpInputReceived || ((EntityState)this).characterMotor.jumpCount >= ((EntityState)this).characterBody.maxJumpCount) { return; } int itemCountEffective = ((EntityState)this).characterBody.inventory.GetItemCountEffective(Items.JumpBoost); float num = 1f; float num2 = 1f; if (((EntityState)this).characterMotor.jumpCount >= ((EntityState)this).characterBody.baseJumpCount) { flag = true; num = 1.5f; num2 = 1.5f; } else if (itemCountEffective > 0 && ((EntityState)this).characterBody.isSprinting) { float num3 = ((EntityState)this).characterBody.acceleration * ((EntityState)this).characterMotor.airControl; if (((EntityState)this).characterBody.moveSpeed > 0f && num3 > 0f) { flag2 = true; float num4 = Mathf.Sqrt(10f * (float)itemCountEffective / num3); float num5 = ((EntityState)this).characterBody.moveSpeed / num3; num = (num4 + num5) / num5; } } GenericCharacterMain.ApplyJumpVelocity(((EntityState)this).characterMotor, ((EntityState)this).characterBody, num, num2, false); if (((BaseCharacterMain)this).hasModelAnimator) { int layerIndex = ((BaseCharacterMain)this).modelAnimator.GetLayerIndex("Body"); if (layerIndex >= 0) { if (((EntityState)this).characterBody.isSprinting) { ((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("SprintJump", ((BaseCharacterMain)this).smoothingParameters.intoJumpTransitionTime, layerIndex); } else if (flag) { ((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("BonusJump", ((BaseCharacterMain)this).smoothingParameters.intoJumpTransitionTime, layerIndex); } else { ((BaseCharacterMain)this).modelAnimator.CrossFadeInFixedTime("Jump", ((BaseCharacterMain)this).smoothingParameters.intoJumpTransitionTime, layerIndex); } } } if (flag) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/FeatherEffect"), new EffectData { origin = ((EntityState)this).characterBody.footPosition }, true); } else if (((EntityState)this).characterMotor.jumpCount > 0) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/CharacterLandImpact"), new EffectData { origin = ((EntityState)this).characterBody.footPosition, scale = ((EntityState)this).characterBody.radius }, true); } if (flag2) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/BoostJumpEffect"), new EffectData { origin = ((EntityState)this).characterBody.footPosition, rotation = Util.QuaternionSafeLookRotation(((EntityState)this).characterMotor.velocity) }, true); } CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.jumpCount++; ((EntityState)this).characterBody.TriggerJumpEventGlobally(); } } public class Sap : BaseSpySkillState { public float jumpDuration = 0.8f; public static float inAirDuration = 0f; public static float jumpPower = 18f; public static float minDampingStrength = 0.2f; public static float maxDampingStrength = 0.05f; private float previousAirControl; protected Vector3 slipVector = Vector3.zero; public float duration = 0.3f; public float speedCoefficient = 7f; private Vector3 cachedForward; private Quaternion slideRotation; private bool isFlip = false; private bool sapped = false; public override void OnEnter() { //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Expected O, but got Unknown //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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: 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_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: 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_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0186: 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_01c8: 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_01a1: 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_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); if (((BaseState)this).isGrounded) { Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector); slipVector = ((Vector3)(ref val)).normalized; cachedForward = ((EntityState)this).characterDirection.forward; Animator modelAnimator = ((EntityState)this).GetModelAnimator(); Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : slipVector); Vector3 val3 = Vector3.Cross(Vector3.up, val2); float num = Vector3.Dot(slipVector, val2); float num2 = Vector3.Dot(slipVector, val3); modelAnimator.SetFloat("dashF", num); modelAnimator.SetFloat("dashR", num2); slideRotation = Quaternion.LookRotation(slipVector, cachedForward); ((EntityState)this).PlayCrossfade("FullBody, Override", "Dash", "Dash.playbackRate", duration * 1.5f, 0.05f); ((EntityState)this).PlayAnimation("Gesture, Override", "BufferEmpty"); Util.PlaySound("sfx_driver_dash", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)BaseSlideState.slideEffectPrefab) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { Vector3 val4 = ((EntityState)this).characterBody.corePosition; Quaternion val5 = Quaternion.identity; Transform val6 = ((BaseState)this).FindModelChild("Base"); if (Object.op_Implicit((Object)(object)val6)) { val4 = val6.position; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { val5 = Util.QuaternionSafeLookRotation(slideRotation * ((EntityState)this).characterDirection.forward, Vector3.up); } EffectManager.SimpleEffect(BaseSlideState.slideEffectPrefab, val4, val5, false); } } else { isFlip = true; ((EntityState)this).characterMotor.disableAirControlUntilCollision = false; ((EntityState)this).PlayCrossfade("FullBody, Override", "Flip", "Flip.playbackRate", jumpDuration, 0.1f); previousAirControl = ((EntityState)this).characterMotor.airControl; ((EntityState)this).characterMotor.airControl = 1f; ((EntityState)this).characterMotor.velocity.y = 0f; ((BaseCharacterController)((EntityState)this).characterMotor).Motor.ForceUnground(0.1f); CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity += Vector3.up * jumpPower; EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/FeatherEffect"), new EffectData { origin = ((EntityState)this).characterBody.footPosition }, true); } } public override void FixedUpdate() { //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) //IL_0093: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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) base.FixedUpdate(); if (((EntityState)this).fixedAge >= duration / 2f && !sapped) { sapped = true; SapEnemy(); } if (isFlip) { if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= jumpDuration) { ((EntityState)this).outer.SetNextStateToMain(); } return; } ((EntityState)this).characterMotor.velocity = Vector3.zero; ((EntityState)this).characterMotor.rootMotion = slipVector * (((BaseState)this).moveSpeedStat * speedCoefficient * Time.fixedDeltaTime) * Mathf.Cos(((EntityState)this).fixedAge / duration * (MathF.PI / 2f)); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterDirection.forward = cachedForward; } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } private void SapEnemy() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Expected O, but got Unknown //IL_013c: 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_0155: 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_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017f: 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_0191: Unknown result type (might be due to invalid IL or missing references) HurtBox[] hurtBoxes = new SphereSearch { origin = ((EntityState)this).transform.position, radius = 20f, mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask }.RefreshCandidates().FilterCandidatesByHurtBoxTeam(TeamMask.GetEnemyTeams(((EntityState)this).characterBody.teamComponent.teamIndex)).OrderCandidatesByDistance() .FilterCandidatesByDistinctHurtBoxEntities() .GetHurtBoxes(); if (hurtBoxes.Length != 0) { CharacterBody body = hurtBoxes[0].healthComponent.body; bool alive = hurtBoxes[0].healthComponent.alive; Vector3 position = ((Component)hurtBoxes[0]).transform.position; Vector3 val = body.corePosition - position; float magnitude = ((Vector3)(ref val)).magnitude; Quaternion val2 = ((magnitude != 0f) ? Util.QuaternionSafeLookRotation(val) : Random.rotationUniform); ProjectileManager.instance.FireProjectile(SpyAssets.sapperPrefab, position, val2, ((EntityState)this).gameObject, 1f, 100f, ((BaseState)this).RollCrit(), (DamageColorIndex)0, (GameObject)null, alive ? (magnitude * 5f) : (-1f), (DamageTypeCombo?)null); DamageInfo val3 = new DamageInfo(); val3.damage = 1f; val3.attacker = ((EntityState)this).gameObject; val3.inflictor = null; val3.force = Vector3.zero; val3.crit = false; val3.procChainMask = default(ProcChainMask); val3.procCoefficient = 1f; val3.position = position; val3.damageColorIndex = (DamageColorIndex)3; val3.damageType = DamageTypeCombo.op_Implicit((DamageType)16777216); val3.damageType.damageSource = (DamageSource)4; Util.PlaySound("sfx_spy_sapper_plant", ((Component)body).gameObject); body.healthComponent.TakeDamage(val3); } } public override void OnExit() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) if (isFlip) { ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); ((EntityState)this).characterMotor.airControl = previousAirControl; } else { CharacterMotor characterMotor = ((EntityState)this).characterMotor; characterMotor.velocity *= 0.8f; } ((EntityState)this).OnExit(); } 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)7; } } public class Shoot : BaseSpySkillState { public float damageCoefficient = SpyConfig.revolverDamageCoefficient.Value; public static float procCoefficient = 1f; public static float baseDuration = 0.7f; public static float force = 200f; public static float recoil = 2f; public static float range = 2000f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat"); public static GameObject critTracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerCaptainShotgun"); protected float duration; protected string muzzleString; protected bool isCrit; protected int diamondbackStacks; public string shootSoundString = "Play_bandit2_R_fire"; protected virtual GameObject tracerPrefab => isCrit ? critTracerEffectPrefab : tracerEffectPrefab; public virtual FalloffModel falloff => (FalloffModel)1; public override void OnEnter() { base.OnEnter(); if (spyController.IsStopWatchOut() && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } if (((EntityState)this).characterBody.hasCloakBuff) { spyController.ExitStealth(); } duration = baseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "GunMuzzle"; isCrit = ((BaseState)this).RollCrit(); diamondbackStacks = ((EntityState)this).characterBody.GetBuffCount(SpyBuffs.spyDiamondbackBuff); if (diamondbackStacks > 0) { if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(SpyBuffs.spyDiamondbackBuff); } if (isCrit) { damageCoefficient *= SpyConfig.diamondBackCritBonus.Value; } else { isCrit = true; } } shootSoundString = (isCrit ? "sfx_spy_revolver_shoot_crit" : "sfx_spy_revolver_shoot"); Fire(); duration = baseDuration / ((BaseState)this).attackSpeedStat; } public override void OnExit() { ((EntityState)this).OnExit(); } public void Fire() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_00be: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: 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_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: 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_013e: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0163: 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_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0186: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: 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_01ba: 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_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Expected O, but got Unknown //IL_01d4: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).PlayCrossfade("Gesture, Override", "Shoot", "Shoot.playbackRate", duration * 2f, duration * 0.05f); EffectManager.SimpleMuzzleFlash(FirePistol2.muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); Util.PlaySound(shootSoundString, ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); base.AddRecoil2(-1f * recoil, -2f * recoil, -0.5f * recoil, 0.5f * recoil); BulletAttack val = new BulletAttack { bulletCount = 1u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damageCoefficient * ((BaseState)this).damageStat, damageColorIndex = (DamageColorIndex)0, falloffModel = falloff, maxDistance = range, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = ((EntityState)this).characterBody.spreadBloomAngle * 2f, isCrit = isCrit, owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = true, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 0.75f, sniper = false, stopperMask = CommonMasks.bullet, weapon = null, tracerEffectPrefab = tracerPrefab, spreadPitchScale = 1f, spreadYawScale = 1f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = FirePistol2.hitEffectPrefab }; val.damageType.damageSource = (DamageSource)1; val.Fire(); } ((EntityState)this).characterBody.AddSpreadBloom(1.25f); } public override void FixedUpdate() { base.FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } 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)1; } } public class Shoot2 : BaseSpySkillState { public float damageCoefficient = SpyConfig.ambassadorDamageCoefficient.Value; public static float procCoefficient = 1f; public static float baseDuration = 0.9f; public static float force = 200f; public static float recoil = 2f; public static float range = 2000f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerGoldGat"); public static GameObject critTracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerCaptainShotgun"); protected float duration; protected string muzzleString; protected bool isCrit; protected int diamondbackStacks; public string shootSoundString = "Play_bandit2_R_fire"; private CameraParamsOverrideHandle camParamsOverrideHandle; private OverlayController overlayController; private float fireTimer; public bool holding; protected virtual GameObject tracerPrefab => isCrit ? Shoot.critTracerEffectPrefab : Shoot.tracerEffectPrefab; public virtual FalloffModel falloff => (FalloffModel)1; public override void OnEnter() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) base.OnEnter(); if (spyController.IsStopWatchOut() && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } if (((EntityState)this).characterBody.hasCloakBuff) { spyController.ExitStealth(); } duration = Shoot.baseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "GunMuzzle"; isCrit = ((BaseState)this).RollCrit(); shootSoundString = (isCrit ? "sfx_spy_revolver_shoot_crit" : "sfx_spy_revolver_shoot"); Fire(); overlayController = HudOverlayManager.AddOverlay(((EntityState)this).gameObject, new OverlayCreationParams { prefab = SpyAssets.headshotOverlay, childLocatorEntry = "ScopeContainer" }); holding = false; } public override void FixedUpdate() { base.FixedUpdate(); fireTimer += Time.fixedDeltaTime; if (((EntityState)this).isAuthority && (((ButtonState)(ref ((EntityState)this).inputBank.skill1)).justReleased || !((EntityState)this).inputBank.skill1.down) && fireTimer >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } else if (((EntityState)this).isAuthority && ((EntityState)this).inputBank.skill1.down && fireTimer >= duration) { holding = true; ((EntityState)this).outer.SetNextState((EntityState)(object)new Shoot2 { holding = true }); } } public void Fire() { //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_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_00b8: 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_00c6: 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_00d3: 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_00e8: 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_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: 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_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_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_011b: Unknown result type (might be d