Decompiled source of Scout v0.9.6
plugins/OfficialScoutMod.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EmotesAPI; using EntityStates; using EntityStates.AI.Walker; using EntityStates.Commando.CommandoWeapon; using HG; using HG.BlendableTypes; using OfficialScoutMod.Modules; using OfficialScoutMod.Modules.Achievements; using OfficialScoutMod.Modules.BaseStates; using OfficialScoutMod.Modules.Characters; using OfficialScoutMod.Modules.Components; using OfficialScoutMod.Scout; using OfficialScoutMod.Scout.Components; using OfficialScoutMod.Scout.Content; using OfficialScoutMod.Scout.SkillStates; 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.EntityLogic; using RoR2.HudOverlay; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using ThreeEyedGames; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; 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("OfficialScoutMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+b4148046aedeac42f5cac14150615b4ca6a9ea6b")] [assembly: AssemblyProduct("OfficialScoutMod")] [assembly: AssemblyTitle("OfficialScoutMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace OfficialScoutMod { 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.Scout", "Scout", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class ScoutPlugin : BaseUnityPlugin { public const string MODUID = "com.kenko.Scout"; public const string MODNAME = "Scout"; public const string MODVERSION = "1.0.0"; public const string DEVELOPER_PREFIX = "KENKO"; public static ScoutPlugin 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<SyncAtomic>(); Log.Init(((BaseUnityPlugin)this).Logger); Language.Init(); new ScoutSurvivor().Initialize(); new ContentPacks().Initialize(); } } } namespace OfficialScoutMod.Scout { public class ScoutSurvivor : SurvivorBase<ScoutSurvivor> { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Init <>9__62_0; internal void <Emotes>b__62_0(orig_Init orig) { orig.Invoke(); GameObject val = ScoutAssets.mainAssetBundle.LoadAsset<GameObject>("scout_emoteskeleton"); CustomEmotesAPI.ImportArmature(characterPrefab, val, 0, true); } } public const string SCOUT_PREFIX = "KENKO_SCOUT_"; internal static GameObject characterPrefab; public static SkillDef swapScepterSkillDef; public override string assetBundleName => "scout"; public override string bodyName => "ScoutBody"; public override string masterName => "ScoutMonsterMaster"; public override string modelPrefabName => "mdlScout"; public override string displayPrefabName => "ScoutDisplay"; public override string survivorTokenPrefix => "KENKO_SCOUT_"; public override BodyInfo bodyInfo => new BodyInfo { bodyName = bodyName, bodyNameToken = "KENKO_SCOUT_NAME", subtitleNameToken = "KENKO_SCOUT_SUBTITLE", characterPortrait = assetBundle.LoadAsset<Texture>("texScoutIcon"), bodyColor = new Color(0.72156864f, 0.8862745f, 0.23921569f), sortPosition = 7f, crosshair = CharacterAssets.LoadCrosshair("SimpleDot"), podPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/SurvivorPod"), maxHealth = 110f, healthRegen = 1f, armor = 0f, damage = 12f, damageGrowth = 2.4f, jumpCount = 2 }; public override CustomRendererInfo[] customRendererInfos => new CustomRendererInfo[4] { new CustomRendererInfo { childName = "Model" }, new CustomRendererInfo { childName = "ScatterGunMesh" }, new CustomRendererInfo { childName = "BackBatMesh" }, new CustomRendererInfo { childName = "BatMesh" } }; public override UnlockableDef characterUnlockableDef => ScoutUnlockables.characterUnlockableDef; public override ItemDisplaysBase itemDisplays => new ScoutItemDisplays(); 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() { ScoutConfig.Init(); ScoutUnlockables.Init(); base.InitializeCharacter(); ChildLocator componentInChildren = bodyPrefab.GetComponentInChildren<ChildLocator>(); ((Component)componentInChildren.FindChild("BatMesh")).gameObject.SetActive(false); DamageTypes.Init(); ScoutStates.Init(); ScoutTokens.Init(); ScoutAssets.Init(assetBundle); ScoutBuffs.Init(assetBundle); InitializeEntityStateMachines(); InitializeSkills(); InitializeSkins(); InitializeCharacterMaster(); AdditionalBodySetup(); characterPrefab = bodyPrefab; AddHooks(); } private void AdditionalBodySetup() { //IL_0016: 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_0031: Expected O, but got Unknown //IL_0031: Expected O, but got Unknown AddHitboxes(); TempVisualEffectAPI.AddTemporaryVisualEffect(ScoutAssets.atomicEffect, new EffectRadius(pee), new EffectCondition(tempAdd), ""); bodyPrefab.AddComponent<ScoutController>(); static float pee(CharacterBody body) { return 2f * body.radius; } static bool tempAdd(CharacterBody body) { return body.HasBuff(ScoutBuffs.scoutAtomicBuff); } } public void AddHitboxes() { Prefabs.SetupHitBoxGroup(characterModelObject, "Bat", "BatHitbox"); } public override void InitializeEntityStateMachines() { Prefabs.ClearEntityStateMachines(bodyPrefab); Prefabs.AddMainEntityStateMachine(bodyPrefab, "Body", typeof(MainState), typeof(SpawnTeleporterState)); Prefabs.AddEntityStateMachine(bodyPrefab, "Weapon"); Prefabs.AddEntityStateMachine(bodyPrefab, "Weapon2"); } public override void InitializeSkills() { bodyPrefab.AddComponent<ScoutPassive>(); bodyPrefab.AddComponent<ScoutSwap>(); Skills.CreateSkillFamilies(bodyPrefab); AddPassiveSkills(); AddPrimarySkills(); AddSecondarySkills(); AddUtilitySkills(); AddSpecialSkills(); if (ScoutPlugin.scepterInstalled) { InitializeScepter(); } } private void AddPassiveSkills() { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) ScoutPassive component = bodyPrefab.GetComponent<ScoutPassive>(); SkillLocator component2 = bodyPrefab.GetComponent<SkillLocator>(); component2.passiveSkill.enabled = false; component.doubleJumpPassive = Skills.CreateSkillDef(new SkillDefInfo { skillName = "KENKO_SCOUT_PASSIVE_NAME", skillNameToken = "KENKO_SCOUT_PASSIVE_NAME", skillDescriptionToken = "KENKO_SCOUT_PASSIVE_DESCRIPTION", skillIcon = assetBundle.LoadAsset<Sprite>("texDoubleJumpIcon"), keywordTokens = new string[0], 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.doubleJumpPassive); } private void AddPrimarySkills() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01af: 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_0273: Unknown result type (might be due to invalid IL or missing references) ScoutSwap component = bodyPrefab.GetComponent<ScoutSwap>(); ReloadSkillDefInfo reloadSkillDefInfo = new ReloadSkillDefInfo(); reloadSkillDefInfo.skillName = "SplatterGun"; reloadSkillDefInfo.skillNameToken = "KENKO_SCOUT_PRIMARY_SPLATTERGUN_NAME"; reloadSkillDefInfo.skillDescriptionToken = "KENKO_SCOUT_PRIMARY_SPLATTERGUN_DESCRIPTION"; reloadSkillDefInfo.keywordTokens = new string[1] { Tokens.agileKeyword }; reloadSkillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texShotgunIcon"); reloadSkillDefInfo.activationState = new SerializableEntityStateType(typeof(Shoot)); reloadSkillDefInfo.reloadState = new SerializableEntityStateType(typeof(EnterReload)); reloadSkillDefInfo.activationStateMachineName = "Weapon"; reloadSkillDefInfo.interruptPriority = (InterruptPriority)1; reloadSkillDefInfo.reloadInterruptPriority = (InterruptPriority)0; reloadSkillDefInfo.baseMaxStock = 2; reloadSkillDefInfo.baseRechargeInterval = 0f; reloadSkillDefInfo.rechargeStock = 0; reloadSkillDefInfo.requiredStock = 1; reloadSkillDefInfo.stockToConsume = 1; reloadSkillDefInfo.graceDuration = 0.1f; reloadSkillDefInfo.resetCooldownTimerOnUse = false; reloadSkillDefInfo.fullRestockOnAssign = false; reloadSkillDefInfo.dontAllowPastMaxStocks = false; reloadSkillDefInfo.beginSkillCooldownOnSkillEnd = false; reloadSkillDefInfo.mustKeyPress = true; reloadSkillDefInfo.isCombatSkill = true; reloadSkillDefInfo.canceledFromSprinting = false; reloadSkillDefInfo.cancelSprintingOnActivation = false; reloadSkillDefInfo.forceSprintDuringState = false; ReloadSkillDef val = Skills.CreateReloadSkillDef(reloadSkillDefInfo); Skills.AddPrimarySkills(bodyPrefab, (SkillDef)val); reloadSkillDefInfo = new ReloadSkillDefInfo(); reloadSkillDefInfo.skillName = "Rifle"; reloadSkillDefInfo.skillNameToken = "KENKO_SCOUT_PRIMARY_RIFLE_NAME"; reloadSkillDefInfo.skillDescriptionToken = "KENKO_SCOUT_PRIMARY_RIFLE_DESCRIPTION"; reloadSkillDefInfo.keywordTokens = new string[0]; reloadSkillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texRifleIcon"); reloadSkillDefInfo.activationState = new SerializableEntityStateType(typeof(ShootRifle)); reloadSkillDefInfo.reloadState = new SerializableEntityStateType(typeof(EnterRifleReload)); reloadSkillDefInfo.activationStateMachineName = "Weapon"; reloadSkillDefInfo.interruptPriority = (InterruptPriority)1; reloadSkillDefInfo.reloadInterruptPriority = (InterruptPriority)0; reloadSkillDefInfo.baseMaxStock = 7; reloadSkillDefInfo.baseRechargeInterval = 0f; reloadSkillDefInfo.rechargeStock = 0; reloadSkillDefInfo.requiredStock = 1; reloadSkillDefInfo.stockToConsume = 1; reloadSkillDefInfo.graceDuration = 5f; reloadSkillDefInfo.resetCooldownTimerOnUse = false; reloadSkillDefInfo.fullRestockOnAssign = false; reloadSkillDefInfo.dontAllowPastMaxStocks = false; reloadSkillDefInfo.beginSkillCooldownOnSkillEnd = false; reloadSkillDefInfo.mustKeyPress = false; reloadSkillDefInfo.isCombatSkill = true; reloadSkillDefInfo.canceledFromSprinting = false; reloadSkillDefInfo.cancelSprintingOnActivation = true; reloadSkillDefInfo.forceSprintDuringState = false; ReloadSkillDef val2 = Skills.CreateReloadSkillDef(reloadSkillDefInfo); Skills.AddPrimarySkills(bodyPrefab, (SkillDef)val2); component.batSkillDef = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("Bonk", "KENKO_SCOUT_PRIMARY_BONK_NAME", "KENKO_SCOUT_PRIMARY_BONK_DESCRIPTION", assetBundle.LoadAsset<Sprite>("texSwingIcon"), new SerializableEntityStateType(typeof(Swing)))); component.batSkillDef.stepCount = 2; component.batSkillDef.stepGraceDuration = 1f; Skills.AddAdditionalSkills(component.batSkillSlot.skillFamily, (SkillDef)component.batSkillDef); } private void AddSecondarySkills() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) ScoutSwap component = bodyPrefab.GetComponent<ScoutSwap>(); SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Toxic Cleaver"; skillDefInfo.skillNameToken = "KENKO_SCOUT_SECONDARY_CLEAVER_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SCOUT_SECONDARY_CLEAVER_DESCRIPTION"; skillDefInfo.keywordTokens = new string[1] { Tokens.agileKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texButcherKnifeIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(ThrowCleaver)); skillDefInfo.activationStateMachineName = "Weapon2"; skillDefInfo.interruptPriority = (InterruptPriority)1; skillDefInfo.baseMaxStock = 1; skillDefInfo.baseRechargeInterval = 6f; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 1; skillDefInfo.stockToConsume = 1; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = false; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.mustKeyPress = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; SkillDef val = Skills.CreateSkillDef(skillDefInfo); Skills.AddSecondarySkills(bodyPrefab, val); component.ballSkillDef = Skills.CreateSkillDef(new SkillDefInfo { skillName = "Atomic Spikeball", skillNameToken = "KENKO_SCOUT_SECONDARY_SPIKEDBALL_NAME", skillDescriptionToken = "KENKO_SCOUT_SECONDARY_SPIKEDBALL_DESCRIPTION", keywordTokens = new string[1] { Tokens.agileKeyword }, skillIcon = assetBundle.LoadAsset<Sprite>("texBaseballIcon"), activationState = new SerializableEntityStateType(typeof(HitBaseball)), activationStateMachineName = "Weapon2", interruptPriority = (InterruptPriority)1, baseMaxStock = 1, baseRechargeInterval = 6f, rechargeStock = 1, requiredStock = 1, stockToConsume = 1, resetCooldownTimerOnUse = false, fullRestockOnAssign = false, dontAllowPastMaxStocks = false, beginSkillCooldownOnSkillEnd = false, mustKeyPress = false, isCombatSkill = true, canceledFromSprinting = false, cancelSprintingOnActivation = false, forceSprintDuringState = false }); Skills.AddAdditionalSkills(component.ballSkillSlot.skillFamily, component.ballSkillDef); } private void AddUtilitySkills() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Atomic Blast"; skillDefInfo.skillNameToken = "KENKO_SCOUT_UTILITY_ATOMICBLAST_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SCOUT_UTILITY_ATOMICBLAST_DESCRIPTION"; skillDefInfo.keywordTokens = new string[2] { Tokens.agileKeyword, Tokens.miniCritsKeyword }; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texAtomicIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(ActivateAtomic)); skillDefInfo.activationStateMachineName = "Weapon2"; skillDefInfo.interruptPriority = (InterruptPriority)2; skillDefInfo.baseRechargeInterval = 0f; skillDefInfo.baseMaxStock = 1; skillDefInfo.rechargeStock = 1; skillDefInfo.requiredStock = 0; skillDefInfo.stockToConsume = 0; skillDefInfo.resetCooldownTimerOnUse = false; skillDefInfo.fullRestockOnAssign = true; skillDefInfo.dontAllowPastMaxStocks = false; skillDefInfo.mustKeyPress = true; skillDefInfo.beginSkillCooldownOnSkillEnd = false; skillDefInfo.isCombatSkill = true; skillDefInfo.canceledFromSprinting = false; skillDefInfo.cancelSprintingOnActivation = false; skillDefInfo.forceSprintDuringState = false; 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) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Swap"; skillDefInfo.skillNameToken = "KENKO_SCOUT_SPECIAL_SWAP_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SCOUT_SPECIAL_SWAP_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSwapIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(SwapWeapon)); 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 = false; 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); Skills.AddSpecialSkills(bodyPrefab, val); } 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) SkillDefInfo skillDefInfo = new SkillDefInfo(); skillDefInfo.skillName = "Swap Scepter"; skillDefInfo.skillNameToken = "KENKO_SCOUT_SPECIAL_SCEPTER_SWAP_NAME"; skillDefInfo.skillDescriptionToken = "KENKO_SCOUT_SPECIAL_SCEPTER_SWAP_DESCRIPTION"; skillDefInfo.keywordTokens = new string[0]; skillDefInfo.skillIcon = assetBundle.LoadAsset<Sprite>("texSwapIcon"); skillDefInfo.activationState = new SerializableEntityStateType(typeof(SwapWeapon)); 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; swapScepterSkillDef = Skills.CreateSkillDef(skillDefInfo); } 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 val2 = Skins.CreateSkinDef("DEFAULT_SKIN", assetBundle.LoadAsset<Sprite>("texDefaultSkin"), baseRendererInfos, ((Component)prefabCharacterModel).gameObject); val2.meshReplacements = Skins.getMeshReplacements(assetBundle, baseRendererInfos, "meshScout", "meshSuperShotgun", "meshBackBat", "meshBat"); list.Add(val2); val.skins = list.ToArray(); } public override void InitializeCharacterMaster() { ScoutAI.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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown HUD.onHudTargetChangedGlobal += HUDSetup; RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); LoadoutPanelController.Rebuild += new hook_Rebuild(LoadoutPanelController_Rebuild); HealthComponent.TakeDamageProcess += new hook_TakeDamageProcess(HealthComponent_TakeDamageProcess); if (ScoutPlugin.emotesInstalled) { Emotes(); } } [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__62_0; if (obj == null) { hook_Init val = delegate(orig_Init orig) { orig.Invoke(); GameObject val2 = ScoutAssets.mainAssetBundle.LoadAsset<GameObject>("scout_emoteskeleton"); CustomEmotesAPI.ImportArmature(characterPrefab, val2, 0, true); }; <>c.<>9__62_0 = val; obj = (object)val; } SurvivorCatalog.Init += (hook_Init)obj; } private static void LoadoutPanelController_Rebuild(orig_Rebuild orig, LoadoutPanelController self) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); int num = 0; if (self.currentDisplayData.bodyIndex != BodyCatalog.FindBodyIndex("ScoutBody")) { 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") { if (num == 0) { val.token = "Passive"; num++; } if (num == 1) { val.token = "Swap"; } } } } private void HealthComponent_TakeDamageProcess(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo) { //IL_0018: 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_0058: 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_007d: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_00df: 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_00f3: 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_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) CharacterBody body = self.body; EntityStateMachine component = ((Component)body).GetComponent<EntityStateMachine>(); if (Object.op_Implicit((Object)(object)body) && body.bodyIndex == BodyCatalog.FindBodyIndex("ScoutBody")) { ScoutController component2 = ((Component)body).GetComponent<ScoutController>(); if (!component2.InGracePeriod()) { component2.FillAtomic(-10f, isCrit: false); } } if (DamageAPI.HasModdedDamageType(damageInfo, DamageTypes.AtomicCrits)) { damageInfo.damage *= 1.25f; damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)16384); } if (DamageAPI.HasModdedDamageType(damageInfo, DamageTypes.CleaverBonus) && Object.op_Implicit((Object)(object)component) && (component.state is StunState || body.HasBuff(ScoutBuffs.scoutStunMarker))) { damageInfo.crit = true; damageInfo.damageType &= DamageTypeCombo.op_Implicit((DamageType)(-1048577)); damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)4096); Util.PlaySound("sfx_driver_blood_gurgle", ((Component)self).gameObject); } orig.Invoke(self, damageInfo); if (Object.op_Implicit((Object)(object)body) && body.bodyIndex == BodyCatalog.FindBodyIndex("ScoutBody")) { body.RecalculateStats(); } } private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { ScoutController component = ((Component)sender).GetComponent<ScoutController>(); HealthComponent component2 = ((Component)sender).GetComponent<HealthComponent>(); SkillLocator component3 = ((Component)sender).GetComponent<SkillLocator>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && !sender.HasBuff(ScoutBuffs.scoutAtomicBuff)) { if (component.atomicGauge > 0f) { args.baseMoveSpeedAdd += Util.Remap(component.atomicGauge, 0f, component.maxAtomicGauge, 0f, 3f); } } else if (sender.HasBuff(ScoutBuffs.scoutAtomicBuff)) { args.baseMoveSpeedAdd += 3f; args.attackSpeedMultAdd += 1f; } } 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>(ScoutAssets.mainAssetBundle.LoadAsset<GameObject>("WeaponChargeBar")); ((Object)val3).name = "AtomicGauge"; 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)); AtomicGauge atomicGauge = val2.AddComponent<AtomicGauge>(); atomicGauge.targetHUD = hud; atomicGauge.targetText = ((Component)val2.transform.Find("LevelDisplayRoot").Find("PrefixText")).gameObject.GetComponent<LanguageTextMeshController>(); atomicGauge.durationDisplay = val3; atomicGauge.durationBar = ((Component)val3.transform.GetChild(1)).gameObject.GetComponent<Image>(); atomicGauge.durationBarRed = ((Component)val3.transform.GetChild(0)).gameObject.GetComponent<Image>(); } } } } namespace OfficialScoutMod.Scout.SkillStates { public class ActivateAtomic : BaseScoutSkillState { private DamageType damageType; public override void OnEnter() { //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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0268: 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_0279: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Expected O, but got Unknown RefreshState(); base.OnEnter(); if (((EntityState)this).characterBody.HasBuff(ScoutBuffs.scoutAtomicBuff) || scoutController.atomicGauge < 1f || !Object.op_Implicit((Object)(object)scoutController)) { return; } scoutController.ActivateAtomic(); if (scoutController.atomicGauge >= 10f) { if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 1.5f); } if (((EntityState)this).isAuthority) { damageType = (DamageType)131072; damageType = (DamageType)(damageType | ((scoutController.atomicGauge >= scoutController.maxAtomicGauge / 2f) ? 32 : 0)); Result val = new BlastAttack { attacker = ((EntityState)this).gameObject, procChainMask = default(ProcChainMask), impactEffect = (EffectIndex)(-1), losType = (LoSType)0, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit(damageType), procCoefficient = Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 0.1f, 1f), bonusForce = Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 50f, 400f) * Vector3.up, baseForce = Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 250f, 2000f), baseDamage = Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 1f * ((BaseState)this).damageStat, ScoutStaticValues.atomicBlastDamageCoefficient * ((BaseState)this).damageStat), falloffModel = (FalloffModel)0, radius = Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 1f, 16f), position = ((EntityState)this).characterBody.corePosition, attackerFiltering = (AttackerFiltering)2, teamIndex = ((BaseState)this).GetTeam(), inflictor = ((EntityState)this).gameObject, crit = ((BaseState)this).RollCrit() }.Fire(); EffectManager.SpawnEffect(ScoutAssets.atomicImpactEffect, new EffectData { origin = ((EntityState)this).transform.position + Vector3.up * 1.8f, rotation = Quaternion.identity, scale = Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 0.2f, 3f) }, false); } } if (((EntityState)this).isAuthority) { if (!((BaseState)this).isGrounded) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, Util.Remap(scoutController.atomicGauge, 10f, scoutController.maxAtomicGauge, 1f, 16f)); } ((EntityState)this).outer.SetNextStateToMain(); } } } public class EnterReload : BaseScoutSkillState { public static float baseDuration = 0.1f; private float duration => baseDuration / ((BaseState)this).attackSpeedStat; public override void OnEnter() { base.OnEnter(); } public override void FixedUpdate() { base.FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Reload()); } } 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 EnterRifleReload : BaseScoutSkillState { public static float baseDuration = 0.1f; public override void OnEnter() { base.OnEnter(); } public override void FixedUpdate() { //IL_005a: 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_006e: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= baseDuration) { Util.PlaySound("sfx_scout_ooa", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)scoutController)) { scoutController.DropCasing(-((Component)((EntityState)this).GetModelBaseTransform()).transform.right * (float)(-Random.Range(4, 12))); } if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new RifleReload()); } } } 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 HitBaseball : GenericProjectileBaseState { public static float baseDuration = 0.2f; public static float baseDelayDuration = 0.1f * baseDuration; public GameObject ballPrefab = ScoutAssets.baseballPrefab; public ScoutController scoutController; public override void OnEnter() { scoutController = ((EntityState)this).gameObject.GetComponent<ScoutController>(); base.attackSoundString = "sfx_scout_baseball_hit"; base.baseDuration = baseDuration; base.baseDelayBeforeFiringProjectile = baseDelayDuration; base.damageCoefficient = base.damageCoefficient; base.force = 120f; base.projectilePitchBonus = -3.5f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); scoutController.SetupStockSecondary2(); } public override void FireProjectile() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_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_0074: 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_00ea: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { Ray val = ((BaseState)this).GetAimRay(); val = ((GenericProjectileBaseState)this).ModifyProjectileAimRay(val); ((Ray)(ref val)).direction = Util.ApplySpread(((Ray)(ref val)).direction, 0f, 0f, 1f, 1f, 0f, base.projectilePitchBonus); ModdedDamageTypeHolderComponent component = ballPrefab.GetComponent<ModdedDamageTypeHolderComponent>(); if (scoutController.ModdedDamageType == DamageTypes.AtomicCrits) { component.Add(DamageTypes.AtomicCrits); } ProjectileManager.instance.FireProjectile(ballPrefab, ((Ray)(ref val)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref val)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat * ScoutStaticValues.baseballDamageCoefficient, base.force, ((BaseState)this).RollCrit(), (DamageColorIndex)(scoutController.atomicDraining ? 3 : 0), (GameObject)null, -1f); if (component.Has(DamageTypes.AtomicCrits)) { component.Remove(DamageTypes.AtomicCrits); } } } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } 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 override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("Gesture, Override", "BatSwing1", "Swing.playbackRate", base.duration * 4.5f, 0f); } } public override void OnExit() { ((GenericProjectileBaseState)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_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Expected O, but got Unknown //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: 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_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Expected O, but got Unknown //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Expected O, but got Unknown if (!((BaseCharacterMain)this).hasCharacterMotor) { return; } bool flag = false; bool flag2 = false; if (!base.jumpInputReceived || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody) || ((EntityState)this).characterMotor.jumpCount >= ((EntityState)this).characterBody.maxJumpCount) { return; } int itemCount = ((EntityState)this).characterBody.inventory.GetItemCount(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 (itemCount > 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)itemCount / num3); float num5 = ((EntityState)this).characterBody.moveSpeed / num3; num = (num4 + num5) / num5; } } if (((EntityState)this).characterMotor.jumpCount == ((EntityState)this).characterBody.baseJumpCount - 1) { Util.PlaySound("sfx_driver_air_dodge", ((EntityState)this).gameObject); } 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++; } } public class Reload : BaseScoutSkillState { public static float baseDuration = 1.4f; private float duration; private float startReload; private bool startReloadPlayed = false; private float startShell; private bool startReloadShell = false; private float shellsIn; private bool endReloadShell = false; private bool dontPlay = false; private bool hasGivenStock; public override void OnEnter() { base.OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; if (scoutController.stagedReload > 0f) { duration = scoutController.stagedReload; } else { scoutController.stagedReload = duration; } startReload = 0.04f * duration; startShell = 0.05f * duration; shellsIn = 0.5f * duration; dontPlay = scoutController.isSwapped; if (dontPlay && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } ((EntityState)this).PlayCrossfade("Gesture, Override", "ReloadShotgun", "Shoot.playbackRate", duration, 0.05f); Util.PlayAttackSpeedSound("sfx_scout_start_reload", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); } public override void FixedUpdate() { base.FixedUpdate(); if (dontPlay && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } if (((EntityState)this).fixedAge >= startReload && !startReloadPlayed) { scoutController.stagedReload = duration - startReload; startReloadPlayed = true; Util.PlayAttackSpeedSound("sfx_scout_start_reload", ((EntityState)this).gameObject, 1f); } if (((EntityState)this).fixedAge >= startShell && !startReloadShell) { scoutController.stagedReload = duration - startShell; startReloadShell = true; Util.PlayAttackSpeedSound("sfx_scout_shells_out", ((EntityState)this).gameObject, 1f); } if (((EntityState)this).fixedAge >= shellsIn && !endReloadShell) { scoutController.stagedReload = duration - shellsIn; endReloadShell = true; Util.PlayAttackSpeedSound("sfx_scout_shells_in", ((EntityState)this).gameObject, 1f); } if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { Util.PlayAttackSpeedSound("sfx_scout_end_reload", ((EntityState)this).gameObject, 1f); GiveStock(); scoutController.stagedReload = 0f; ((EntityState)this).outer.SetNextStateToMain(); } } private void GiveStock() { if (!hasGivenStock) { for (int i = ((EntityState)this).skillLocator.primary.stock; i < ((EntityState)this).skillLocator.primary.maxStock; i++) { ((EntityState)this).skillLocator.primary.AddOneStock(); } hasGivenStock = true; } } 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 RifleReload : BaseScoutSkillState { public static float baseDuration = 1.4f; private float duration; private bool dontPlay = false; private bool hasGivenStock; public override void OnEnter() { base.OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; if (scoutController.stagedReload > 0f) { duration = scoutController.stagedReload; } else { scoutController.stagedReload = duration; } dontPlay = Object.op_Implicit((Object)(object)((EntityState)this).skillLocator.secondary) == scoutController.isSwapped; if (dontPlay && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); return; } ((EntityState)this).PlayAnimation("Gesture, Override", "ReloadRifle", "Shoot.playbackRate", duration, 0f); Util.PlayAttackSpeedSound("sfx_scout_start_reload_rifle", ((EntityState)this).gameObject, 1f); } public override void FixedUpdate() { base.FixedUpdate(); if (dontPlay && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } else if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { Util.PlayAttackSpeedSound("sfx_scout_finish_rifle_reload", ((EntityState)this).gameObject, 1f); GiveStock(); scoutController.stagedReload = 0f; ((EntityState)this).outer.SetNextStateToMain(); } } private void GiveStock() { if (!hasGivenStock) { for (int i = ((EntityState)this).skillLocator.primary.stock; i < ((EntityState)this).skillLocator.primary.maxStock; i++) { ((EntityState)this).skillLocator.primary.AddOneStock(); } hasGivenStock = true; } } 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 Shoot : BaseScoutSkillState { public static float damageCoefficient = ScoutStaticValues.shotgunDamageCoefficient; public static float procCoefficient = 0.7f; public float baseDuration = 1.2f; public static int bulletCount = 12; public static float bulletSpread = 8f; public static float bulletRecoil = ScoutConfig.adjustShotgunRecoil.Value; public static float bulletRange = 150f; public static float bulletThiccness = 1f; public float selfForce = 3000f; private float earlyExitTime; protected float duration; protected float fireDuration; protected bool hasFired; private bool isCrit; protected string muzzleString; public override void OnEnter() { base.OnEnter(); ((EntityState)this).characterBody.SetAimTimer(5f); muzzleString = "GunMuzzle"; hasFired = false; duration = baseDuration / ((BaseState)this).attackSpeedStat; isCrit = ((BaseState)this).RollCrit(); earlyExitTime = 0.5f * duration; if (isCrit) { Util.PlaySound("sfx_scout_shoot_crit", ((EntityState)this).gameObject); } else { Util.PlaySound("sfx_scout_shoot", ((EntityState)this).gameObject); } ((EntityState)this).PlayAnimation("Gesture, Override", "FireShotgun", "Shoot.playbackRate", duration * 1.5f, 0f); fireDuration = 0f; } public virtual void FireBullet() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0183: 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_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: 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_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Expected O, but got Unknown //IL_021a: 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_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) if (hasFired) { return; } hasFired = true; if (Object.op_Implicit((Object)(object)scoutController)) { scoutController.DropShell(-((Component)((EntityState)this).GetModelBaseTransform()).transform.right * (float)(-Random.Range(4, 12))); } float num = bulletRecoil / ((BaseState)this).attackSpeedStat; base.AddRecoil2(-0.4f * num, -0.8f * num, -0.3f * num, 0.3f * num); ((EntityState)this).characterBody.AddSpreadBloom(4f); EffectManager.SimpleMuzzleFlash(FireBarrage.effectPrefab, ((EntityState)this).gameObject, muzzleString, false); GameObject tracerEffectPrefab = ScoutAssets.scoutTracer; if (isCrit) { tracerEffectPrefab = ScoutAssets.scoutTracerCrit; } if (((EntityState)this).isAuthority) { float damage = damageCoefficient * ((BaseState)this).damageStat; Ray aimRay = ((BaseState)this).GetAimRay(); float num2 = bulletSpread; float radius = bulletThiccness; float force = 50f; BulletAttack val = new BulletAttack { aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damage, damageColorIndex = (DamageColorIndex)(scoutController.atomicDraining ? 3 : 0), damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, maxDistance = bulletRange, force = force, hitMask = CommonMasks.bullet, isCrit = isCrit, owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = true, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = radius, sniper = false, stopperMask = CommonMasks.bullet, weapon = null, tracerEffectPrefab = tracerEffectPrefab, spreadPitchScale = 1f, spreadYawScale = 1f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = FireBarrage.hitEffectPrefab, HitEffectNormal = false }; DamageAPI.AddModdedDamageType(val, scoutController.ModdedDamageType); DamageAPI.AddModdedDamageType(val, DamageTypes.FillAtomicShotgun); val.minSpread = 0f; val.maxSpread = 0f; val.bulletCount = 1u; val.Fire(); uint num3 = (uint)(Mathf.CeilToInt((float)bulletCount / 2f) - 1); val.minSpread = 0f; val.maxSpread = num2 / 1.45f; val.bulletCount = num3; val.Fire(); val.minSpread = num2 / 1.45f; val.maxSpread = num2; val.bulletCount = (uint)Mathf.FloorToInt((float)bulletCount / 2f); val.Fire(); if (!((EntityState)this).characterMotor.isGrounded) { ((EntityState)this).characterMotor.ApplyForce(((Ray)(ref aimRay)).direction * (0f - selfForce) * 0.5f, false, false); } } } public override void FixedUpdate() { base.FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration) { FireBullet(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Reload()); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_001b: 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_001e: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).fixedAge >= earlyExitTime) { return (InterruptPriority)0; } return (InterruptPriority)1; } } public class ShootRifle : BaseScoutSkillState { public float damageCoefficient = ScoutStaticValues.rifleDamageCoefficient; public static float procCoefficient = 1f; public static float baseDuration = 0.8f; public static float force = 200f; public static float recoil = 4f; public static float range = 9000f; protected float duration; protected string muzzleString; protected bool isCrit; protected int diamondbackStacks; public string shootSoundString = "sfx_scout_rifle_shoot"; private CameraParamsOverrideHandle camParamsOverrideHandle; private OverlayController overlayController; private float fireTimer; public bool hasFired; protected virtual GameObject tracerPrefab => isCrit ? ScoutAssets.scoutTracerCrit : ScoutAssets.scoutTracer; public virtual FalloffModel falloff => (FalloffModel)0; public override void OnEnter() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) RefreshState(); base.OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.SetAimTimer(4f); muzzleString = "GunMuzzle"; isCrit = ((BaseState)this).RollCrit(); shootSoundString = "sfx_scout_rifle_shoot"; overlayController = HudOverlayManager.AddOverlay(((EntityState)this).gameObject, new OverlayCreationParams { prefab = ScoutAssets.headshotOverlay, childLocatorEntry = "ScopeContainer" }); } public override void FixedUpdate() { //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: 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_01d9: Unknown result type (might be due to invalid IL or missing references) RefreshState(); base.FixedUpdate(); if (!(scoutController.jamTimer <= 0f)) { return; } fireTimer += Time.fixedDeltaTime; if (!hasFired) { hasFired = true; if (((EntityState)this).isAuthority) { Fire(); } } if (!((EntityState)this).inputBank.skill1.down && fireTimer >= duration) { if (((EntityState)this).skillLocator.primary.stock <= 0) { Util.PlaySound("sfx_scout_ooa", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)scoutController)) { scoutController.DropCasing(-((Component)((EntityState)this).GetModelBaseTransform()).transform.right * (float)(-Random.Range(4, 12))); } if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new RifleReload()); } } else if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } else { if (!((EntityState)this).inputBank.skill1.down || !(fireTimer >= duration)) { return; } if (((EntityState)this).skillLocator.primary.stock <= 0) { Util.PlaySound("sfx_scout_ooa", ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)scoutController)) { scoutController.DropCasing(-((Component)((EntityState)this).GetModelBaseTransform()).transform.right * (float)(-Random.Range(4, 12))); } if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new RifleReload()); } } else { ((EntityState)this).characterBody.SetAimTimer(4f); GenericSkill primary = ((EntityState)this).skillLocator.primary; int stock = primary.stock; primary.stock = stock - 1; Fire(); } } } public void Fire() { //IL_0056: 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_006a: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010d: 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_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: 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_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0158: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016d: 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_0190: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: 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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0201: 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_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Expected O, but got Unknown //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Expected O, but got Unknown ((EntityState)this).characterBody.isSprinting = false; ((EntityState)this).PlayAnimation("Gesture, Override", "FireRifle", "Shoot.playbackRate", duration * 1.5f, 0f); if (Object.op_Implicit((Object)(object)scoutController)) { scoutController.DropShell(-((Component)((EntityState)this).GetModelBaseTransform()).transform.right * (float)(-Random.Range(4, 12))); } fireTimer = 0f; 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 }; DamageAPI.AddModdedDamageType(val, scoutController.ModdedDamageType); DamageAPI.AddModdedDamageType(val, DamageTypes.FillAtomic); val.modifyOutgoingDamageCallback = (ModifyOutgoingDamageCallback)delegate(BulletAttack _bulletAttack, ref BulletHit hitInfo, DamageInfo damageInfo) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //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) if (BulletAttack.IsSniperTargetHit(ref hitInfo)) { damageInfo.damage *= 2f; DamageAPI.AddModdedDamageType(damageInfo, DamageTypes.FillAtomicHeadshot); damageInfo.damageColorIndex = (DamageColorIndex)12; EffectData val2 = new EffectData { origin = hitInfo.point, rotation = Quaternion.LookRotation(-hitInfo.direction) }; val2.SetHurtBoxReference(hitInfo.hitHurtBox); EffectManager.SpawnEffect(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Common/VFX/WeakPointProcEffect.prefab").WaitForCompletion(), val2, true); Util.PlaySound("sfx_driver_headshot", ((EntityState)this).gameObject); } }; val.Fire(); } ((EntityState)this).characterBody.AddSpreadBloom(1.25f); duration = baseDuration / ((EntityState)this).characterBody.attackSpeed; } public override void OnExit() { ((EntityState)this).OnExit(); if (overlayController != null) { HudOverlayManager.RemoveOverlay(overlayController); overlayController = null; } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_001b: 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_001e: Unknown result type (might be due to invalid IL or missing references) if (fireTimer >= duration) { return (InterruptPriority)0; } return (InterruptPriority)2; } } public class SwapWeapon : BaseScoutSkillState { public override void OnEnter() { RefreshState(); base.OnEnter(); Util.PlaySound("sfx_scout_swap_weapon", ((EntityState)this).gameObject); if (scoutController.isSwapped) { ((EntityState)this).PlayAnimation("Gesture, Override", "SwapToGun", "Swap.playbackRate", 0.65f / ((EntityState)this).characterBody.attackSpeed, 0f); scoutController.SwitchLayer(""); ((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)((EntityState)this).gameObject, (SkillDef)(object)scoutSwapPassive.batSkillDef, (SkillOverridePriority)4); ((EntityState)this).skillLocator.secondary.UnsetSkillOverride((object)((EntityState)this).gameObject, scoutSwapPassive.ballSkillDef, (SkillOverridePriority)4); if (((EntityState)this).isAuthority) { ((EntityState)this).skillLocator.secondary.RemoveAllStocks(); for (int i = 0; i < scoutController.currentSecondary1Stock; i++) { ((EntityState)this).skillLocator.secondary.AddOneStock(); } } if (((EntityState)this).skillLocator.secondary.stock < ((EntityState)this).skillLocator.secondary.maxStock) { ((EntityState)this).skillLocator.secondary.rechargeStopwatch = scoutController.secondary1CdTimer; } } else { ((EntityState)this).PlayAnimation("Gesture, Override", "SwapToBat", "Swap.playbackRate", 0.65f / ((EntityState)this).characterBody.attackSpeed, 0f); scoutController.SwitchLayer("Body, Bat"); scoutController.jamTimer = ShootRifle.baseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).skillLocator.primary.SetSkillOverride((object)((EntityState)this).gameObject, (SkillDef)(object)scoutSwapPassive.batSkillDef, (SkillOverridePriority)4); ((EntityState)this).skillLocator.secondary.SetSkillOverride((object)((EntityState)this).gameObject, scoutSwapPassive.ballSkillDef, (SkillOverridePriority)4); if (((EntityState)this).isAuthority) { ((EntityState)this).skillLocator.secondary.RemoveAllStocks(); for (int j = 0; j < scoutController.currentSecondary2Stock; j++) { ((EntityState)this).skillLocator.secondary.AddOneStock(); } } if (((EntityState)this).skillLocator.secondary.stock < ((EntityState)this).skillLocator.secondary.maxStock) { ((EntityState)this).skillLocator.secondary.rechargeStopwatch = scoutController.secondary2CdTimer; } } if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } public class Swing : BaseMeleeAttack { public override void OnEnter() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) RefreshState(); hitboxGroupName = "Bat"; damageType = (DamageType)0; damageCoefficient = ScoutStaticValues.swingDamageCoefficient; procCoefficient = 1f; pushForce = 300f; bonusForce = Vector3.zero; baseDuration = 1.5f; attackStartPercentTime = 0.2f; attackEndPercentTime = 0.3f; earlyExitPercentTime = 0.5f; hitStopDuration = 0.012f; attackRecoil = 0.5f; hitHopVelocity = 4f; swingSoundString = "sfx_driver_swing"; hitSoundString = ""; muzzleString = ((swingIndex % 2 == 0) ? "SwingMuzzle1" : "SwingMuzzle2"); playbackRateParam = "Swing.playbackRate"; swingEffectPrefab = (isAtomic ? ScoutAssets.atomicSwingEffect : ScoutAssets.batSwingEffect); if (isAtomic) { moddedDamageTypeHolder.Add(scoutController.ModdedDamageType); damageType = (DamageType)(damageType | 0x4000); } moddedDamageTypeHolder.Add(DamageTypes.FillAtomic); hitEffectPrefab = ScoutAssets.batHitEffect; impactSound = ScoutAssets.batImpactSoundDef.index; base.OnEnter(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } protected override void FireAttack() { //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_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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; direction.y = Mathf.Max(direction.y, direction.y * 0.5f); ((BaseState)this).FindModelChild("MeleePivot").rotation = Util.QuaternionSafeLookRotation(direction); } base.FireAttack(); } protected override void PlaySwingEffect() { Util.PlaySound(swingSoundString, ((EntityState)this).gameObject); if (Object.op_Implicit((Object)(object)swingEffectPrefab)) { Transform val = ((BaseState)this).FindModelChild(muzzleString); if (Object.op_Implicit((Object)(object)val)) { swingEffectPrefab = Object.Instantiate<GameObject>(swingEffectPrefab, val); } } } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "BatSwing" + (1 + swingIndex), playbackRateParam, duration * 1.2f, 0.05f); } } public class ThrowCleaver : GenericProjectileBaseState { public static float baseDuration = 0.2f; public static float baseDelayDuration = 0.1f * baseDuration; public GameObject cleaver = ScoutAssets.cleaverPrefab; public ScoutController scoutController; public override void OnEnter() { scoutController = ((EntityState)this).gameObject.GetComponent<ScoutController>(); base.attackSoundString = "sfx_scout_cleaver_throw"; base.baseDuration = baseDuration; base.baseDelayBeforeFiringProjectile = baseDelayDuration; base.damageCoefficient = base.damageCoefficient; base.force = 120f; base.projectilePitchBonus = -3.5f; ((GenericProjectileBaseState)this).OnEnter(); scoutController.SetupStockSecondary1(); } public override void FireProjectile() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_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_0074: 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_00ea: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { Ray val = ((BaseState)this).GetAimRay(); val = ((GenericProjectileBaseState)this).ModifyProjectileAimRay(val); ((Ray)(ref val)).direction = Util.ApplySpread(((Ray)(ref val)).direction, 0f, 0f, 1f, 1f, 0f, base.projectilePitchBonus); ModdedDamageTypeHolderComponent component = cleaver.GetComponent<ModdedDamageTypeHolderComponent>(); if (scoutController.ModdedDamageType == DamageTypes.AtomicCrits) { component.Add(DamageTypes.AtomicCrits); } ProjectileManager.instance.FireProjectile(cleaver, ((Ray)(ref val)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref val)).direction), ((EntityState)this).gameObject, ((BaseState)this).damageStat * ScoutStaticValues.cleaverDamageCoefficient, base.force, ((BaseState)this).RollCrit(), (DamageColorIndex)(scoutController.atomicDraining ? 3 : 0), (GameObject)null, -1f); if (component.Has(DamageTypes.AtomicCrits)) { component.Remove(DamageTypes.AtomicCrits); } } } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } 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 override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("Gesture, Override", "ThrowCleaver", "Cleaver.playbackRate", base.duration * 4.5f, 0f); } } } } namespace OfficialScoutMod.Scout.Content { public static class DamageTypes { public static ModdedDamageType Default; public static ModdedDamageType FillAtomic; public static ModdedDamageType FillAtomicShotgun; public static ModdedDamageType FillAtomicHeadshot; public static ModdedDamageType AtomicCrits; public static ModdedDamageType BallStun; public static ModdedDamageType CleaverBonus; internal static void Init() { //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_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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) Default = DamageAPI.ReserveDamageType(); FillAtomic = DamageAPI.ReserveDamageType(); FillAtomicShotgun = DamageAPI.ReserveDamageType(); FillAtomicHeadshot = DamageAPI.ReserveDamageType(); CleaverBonus = DamageAPI.ReserveDamageType(); AtomicCrits = DamageAPI.ReserveDamageType(); BallStun = DamageAPI.ReserveDamageType(); Hook(); } private static void Hook() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown GlobalEventManager.onServerDamageDealt += GlobalEventManager_onServerDamageDealt; SetStateOnHurt.OnTakeDamageServer += new hook_OnTakeDamageServer(SetStateOnHurt_OnTakeDamageServer); } private static void SetStateOnHurt_OnTakeDamageServer(orig_OnTakeDamageServer orig, SetStateOnHurt self, DamageReport damageReport) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { orig.Invoke(self, damageReport); DamageInfo damageInfo = damageReport.damageInfo; GameObject inflictor = damageInfo.inflictor; if (DamageAPI.HasModdedDamageType(damageInfo, BallStun)) { self.SetStun(inflictor.GetComponent<DistanceLobController>().timer * 2f + 1.5f); } } } private static void GlobalEventManager_onServerDamageDealt(DamageReport damageReport) { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) DamageInfo damageInfo = damageReport.damageInfo; if (!Object.op_Implicit((Object)(object)damageReport.attackerBody) || !Object.op_Implicit((Object)(object)damageReport.victimBody)) { return; } HealthComponent victim = damageReport.victim; GameObject inflictor = damageInfo.inflictor; CharacterBody victimBody = damageReport.victimBody; EntityStateMachine component = ((Component)victimBody).GetComponent<EntityStateMachine>(); CharacterBody attackerBody = damageReport.attackerBody; GameObject gameObject = damageReport.attacker.gameObject; ScoutController component2 = ((Component)attackerBody).GetComponent<ScoutController>(); if (!NetworkServer.active || !Object.op_Implicit((Object)(object)component2)) { return; } if (DamageAPI.HasModdedDamageType(damageInfo, FillAtomic)) { if (DamageAPI.HasModdedDamageType(damageInfo, FillAtomicHeadshot)) { component2.FillAtomic(10f / attackerBody.skillLocator.utility.cooldownScale + attackerBody.skillLocator.utility.flatCooldownReduction, damageInfo.crit); } else { component2.FillAtomic(5f / attackerBody.skillLocator.utility.cooldownScale + attackerBody.skillLocator.utility.flatCooldownReduction, damageInfo.crit); } attackerBody.RecalculateStats(); } else if (DamageAPI.HasModdedDamageType(damageInfo, FillAtomicShotgun)) { component2.FillAtomic(1f / attackerBody.skillLocator.utility.cooldownScale + attackerBody.skillLocator.utility.flatCooldownReduction, damageInfo.crit); attackerBody.RecalculateStats(); } if (DamageAPI.HasModdedDamageType(damageInfo, BallStun) && Object.op_Implicit((Object)(object)inflictor)) { damageReport.victimBody.AddTimedBuff(ScoutBuffs.scoutStunMarker, inflictor.GetComponent<DistanceLobController>().timer * 2f + 1.5f); } } } public static class ScoutAI { public static void Init(GameObject bodyPrefab, string masterName) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00fe: 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_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: 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_01c8: 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_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: 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_0330: 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_0364: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) GameObject val = Prefabs.CreateBlankMasterPrefab(bodyPrefab, masterName); BaseAI component = val.GetComponent<BaseAI>(); component.aimVectorDampTime = 0.1f; component.aimVectorMaxSpeed = 360f; AISkillDriver val2 = val.AddComponent<AISkillDriver>(); val2.customName = "Use Primary Swing"; val2.skillSlot = (SkillSlot)0; val2.requiredSkill = null; val2.requireSkillReady = false; val2.requireEquipmentReady = false; val2.minUserHealthFraction = float.NegativeInfinity; val2.maxUserHealthFraction = float.PositiveInfinity; val2.minTargetHealthFraction = float.NegativeInfinity; val2.maxTargetHealthFraction = float.PositiveInfinity; val2.minDistance = 0f; val2.maxDistance = 8f; val2.selectionRequiresTargetLoS = false; val2.selectionRequiresOnGround = false; val2.selectionRequiresAimTarget = false; val2.maxTimesSelected = -1; val2.moveTargetType = (TargetType)0; val2.activationRequiresTargetLoS = false; val2.activationRequiresAimTargetLoS = false; val2.activationRequiresAimConfirmation = false; val2.movementType = (MovementType)1; val2.moveInputScale = 1f; val2.aimType = (AimType)1; val2.ignoreNodeGraph = false; val2.shouldSprint = false; val2.shouldFireEquipment = false; val2.buttonPressType = (ButtonPressType)0; val2.driverUpdateTimerOverride = -1f; val2.resetCurrentEnemyOnNextDriverSelection = false; val2.noRepeat = false; val2.nextHighPriorityOverride = null; AISkillDriver val3 = val.AddComponent<AISkillDriver>(); val3.customName = "Use Secondary Shoot"; val3.skillSlot = (SkillSlot)1; val3.requireSkillReady = true; val3.minDistance = 0f; val3.maxDistance = 25f; val3.selectionRequiresTargetLoS = false; val3.selectionRequiresOnGround = false; val3.selectionRequiresAimTarget = false; val3.maxTimesSelected = -1; val3.moveTargetType = (TargetType)0; val3.activationRequiresTargetLoS = false; val3.activationRequiresAimTargetLoS = false; val3.activationRequiresAimConfirmation = true; val3.movementType = (MovementType)1; val3.moveInputScale = 1f; val3.aimType = (AimType)1; val3.buttonPressType = (ButtonPressType)0; AISkillDriver val4 = val.AddComponent<AISkillDriver>(); val4.customName = "Use Utility Roll"; val4.skillSlot = (SkillSlot)2; val4.requireSkillReady = true; val4.minDistance = 8f; val4.maxDistance = 20f; val4.selectionRequiresTargetLoS = true; val4.selectionRequiresOnGround = false; val4.selectionRequiresAimTarget = false; val4.maxTimesSelected = -1; val4.moveTargetType = (TargetType)0; val4.activationRequiresTargetLoS = false; val4.activationRequiresAimTargetLoS = false; val4.activationRequiresAimConfirmation = false; val4.movementType = (MovementType)2; val4.moveInputScale = 1f; val4.aimType = (AimType)1; val4.buttonPressType = (ButtonPressType)0; AISkillDriver val5 = val.AddComponent<AISkillDriver>(); val5.customName = "Use Special bomb"; val5.skillSlot = (SkillSlot)3; val5.requireSkillReady = true; val5.minDistance = 0f; val5.maxDistance = 20f; val5.selectionRequiresTargetLoS = false; val5.selectionRequiresOnGround = false; val5.selectionRequiresAimTarget = false; val5.maxTimesSelected = -1; val5.moveTargetType = (TargetType)0; val5.activationRequiresTargetLoS = false; val5.activationRequiresAimTargetLoS = false; val5.activationRequiresAimConfirmation = false; val5.movementType = (MovementType)1; val5.moveInputScale = 1f; val5.aimType = (AimType)1; val5.buttonPressType = (ButtonPressType)0; AISkillDriver val6 = val.AddComponent<AISkillDriver>(); val6.customName = "Chase"; val6.skillSlot = (SkillSlot)(-1); val6.requireSkillReady = false; val6.minDistance = 0f; val6.maxDistance = float.PositiveInfinity; val6.moveTargetType = (TargetType)0; val6.activationRequiresTargetLoS = false; val6.activationRequiresAimTargetLoS = false; val6.activationRequiresAimConfirmation = false; val6.movementType = (MovementType)1; val6.moveInputScale = 1f; val6.aimType = (AimType)1; val6.buttonPressType = (ButtonPressType)0; } } public static class ScoutAssets { internal static AssetBundle mainAssetBundle; internal static Material commandoMat; internal static Shader hotpoo = Resources.Load<Shader>("Shaders/Deferred/HGStandard"); internal static GameObject atomicEffect; internal st