Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CaptainTurretBeacon v1.0.0
CaptainTurretBeacon.dll
Decompiled 9 months agousing System; using System.Collections; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CaptainBeaconCooldown; using EntityStates; using EntityStates.Captain.Weapon; using EntityStates.CaptainSupplyDrop; using Microsoft.CodeAnalysis; using MonoMod.RuntimeDetour; using On.RoR2; using On.RoR2.CharacterAI; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: AssemblyTitle("CaptainTurretBeacon")] [assembly: AssemblyProduct("CaptainTurretBeacon")] [assembly: AssemblyInformationalVersion("1.0.0+e5518f4560f3a0ae7661f6590137fb2bd7085a53")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCompany("CaptainTurretBeacon")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace CaptainTurretBeacon { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("HIFU.CaptainTurretBeacon", "CaptainTurretBeacon", "1.0.0")] public class Main : BaseUnityPlugin { public const string PluginGUID = "HIFU.CaptainTurretBeacon"; public const string PluginAuthor = "HIFU"; public const string PluginName = "CaptainTurretBeacon"; public const string PluginVersion = "1.0.0"; public static ManualLogSource ctbLogger; public static bool CaptainBeaconCooldownLoaded; public static AssetBundle bundle; public static Main Instance; public Hook hook; public bool hooked = false; public static ConfigEntry<float> beaconCooldown { get; set; } public void Awake() { Instance = this; ctbLogger = ((BaseUnityPlugin)this).Logger; bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)Instance).Info.Location), "captainturretbeacon")); beaconCooldown = ((BaseUnityPlugin)this).Config.Bind<float>("Behavior", "Cooldown Amount", 60f, "Enabled when Phys09s Captain Beacon Cooldown and Tweaks is installed. The cooldown that the Beacon skill has."); CallSupplyTurretSkillDef.Init(); TurretFireSkillDef.Init(); Prefabs.Init(); AddCooldownToBeacon(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public void AddCooldownToBeacon() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown try { hook = new Hook((MethodBase)typeof(CaptainBeaconCooldown).GetMethod("Awake", (BindingFlags)(-1)), typeof(Main).GetMethod("AddCooldownsHook", (BindingFlags)(-1))); } catch { } } private static void AddCooldownsHook(Action<CaptainBeaconCooldown> orig, CaptainBeaconCooldown self) { orig(self); Array.Resize(ref self.beaconNameTokens, self.beaconNameTokens.Length + 1); self.beaconNameTokens[self.beaconNameTokens.Length - 1] = "CAPTAIN_SUPPLY_TURRET_NAME"; Array.Resize(ref self.beaconCooldowns, self.beaconCooldowns.Length + 1); self.beaconCooldowns[self.beaconCooldowns.Length - 1] = beaconCooldown.Value; } } public static class Prefabs { [CompilerGenerated] private static class <>O { public static hook_Init <0>__OnBodyCatalogInit; public static hook_OnBodyDamaged <1>__OnAIDamaged; } public static GameObject beaconPrefab; public static GameObject turretBodyPrefab; public static GameObject turretMasterPrefab; public static GameObject indicatorPrefab; public static GameObject tracerPrefab; public static GameObject muzzleFlashPrefab; public static GameObject impactPrefab; public static BodyIndex captainBodyIndex; public static void Init() { //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_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_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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_00b3: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: 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_01fc: 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_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Expected O, but got Unknown //IL_0243: 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_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_0352: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_03f3: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Unknown result type (might be due to invalid IL or missing references) //IL_044a: Unknown result type (might be due to invalid IL or missing references) //IL_0450: Expected O, but got Unknown //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_046b: Unknown result type (might be due to invalid IL or missing references) //IL_0471: Expected O, but got Unknown beaconPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"7eaa9cf9fa18c374ab0c0acc09db93a2").WaitForCompletion(), "Captain Turret Beacon", true); GenericDisplayNameProvider component = beaconPrefab.GetComponent<GenericDisplayNameProvider>(); component.displayToken = "CAPTAIN_SUPPLY_TURRET_NAME"; EntityStateMachine component2 = beaconPrefab.GetComponent<EntityStateMachine>(); component2.mainStateType = new SerializableEntityStateType(typeof(TurretMainState)); SkinnedMeshRenderer component3 = ((Component)beaconPrefab.GetComponent<ModelLocator>()._modelTransform.Find("CaptainSupplyDropMesh")).GetComponent<SkinnedMeshRenderer>(); Material val = new Material(Addressables.LoadAssetAsync<Material>((object)"5be601672a643584a8bf78a2ca56c12b").WaitForCompletion()); val.SetTexture("_MainTex", (Texture)(object)Main.bundle.LoadAsset<Texture2D>("texTurretBeaconDiffuse.png")); val.SetColor("_EmColor", Color.white); val.SetFloat("_EmPower", 5.5f); ((Renderer)component3).material = val; beaconPrefab.AddComponent<HopooGames>(); PrefabAPI.RegisterNetworkPrefab(beaconPrefab); ContentAddition.AddNetworkedObject(beaconPrefab); turretBodyPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"04508f474b420d546b5d55a9a18a9698").WaitForCompletion(), "Captain Turret Body", true); CharacterBody component4 = turretBodyPrefab.GetComponent<CharacterBody>(); component4.baseNameToken = "CAPTAIN_TURRET_NAME"; component4.baseDamage = 9.6f; component4.levelDamage = 1.92f; HealthComponent component5 = turretBodyPrefab.GetComponent<HealthComponent>(); component5.isDefaultGodMode = true; component5.godMode = true; GenericSkill component6 = turretBodyPrefab.GetComponent<GenericSkill>(); SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); val2.variants = (Variant[])(object)new Variant[1]; val2.defaultVariantIndex = 0u; val2.variants[0] = new Variant { skillDef = TurretFireSkillDef.skillDef, unlockableDef = null }; ContentAddition.AddSkillFamily(val2); component6._skillFamily = val2; component4.portraitIcon = (Texture)(object)Main.bundle.LoadAsset<Texture2D>("texCaptainTurretPortrait.png"); Texture2D val3 = Addressables.LoadAssetAsync<Texture2D>((object)"d67c887632cd1704ebe3a19486dbe843").WaitForCompletion(); Material val4 = new Material(Addressables.LoadAssetAsync<Material>((object)"a9b91ae3f60a5d14a97ec97e5991dc57").WaitForCompletion()); val4.SetTexture("_MainTex", (Texture)(object)Main.bundle.LoadAsset<Texture2D>("texCaptainTurretDiffuse.png")); val4.SetTexture("_PrintRamp", (Texture)(object)val3); val4.SetColor("_EmColor", Color.white); val4.SetFloat("_EmPower", 5.5f); Transform modelTransform = turretBodyPrefab.GetComponent<ModelLocator>()._modelTransform; HurtBoxGroup component7 = ((Component)modelTransform).GetComponent<HurtBoxGroup>(); HurtBox val5 = component7.hurtBoxes[0]; HurtBox val6 = component7.hurtBoxes[1]; Array.Resize(ref component7.hurtBoxes, 0); Object.Destroy((Object)(object)((Component)val5).GetComponent<HurtBox>()); Object.Destroy((Object)(object)((Component)val5).GetComponent<CapsuleCollider>()); Object.Destroy((Object)(object)((Component)val6).GetComponent<HurtBox>()); Object.Destroy((Object)(object)((Component)val6).GetComponent<BoxCollider>()); component7.mainHurtBox = null; Object.Destroy((Object)(object)((Component)modelTransform).GetComponent<HurtBoxGroup>()); Mesh mesh = Addressables.LoadAssetAsync<Mesh>((object)"bc52bb41b17826042a15ba20e4447f32").WaitForCompletion(); SkinnedMeshRenderer component8 = ((Component)modelTransform.Find("EngiTurretMesh")).GetComponent<SkinnedMeshRenderer>(); ((Renderer)component8).material = val4; SkinDefParams val7 = ScriptableObject.CreateInstance<SkinDefParams>(); val7.rendererInfos = (RendererInfo[])(object)new RendererInfo[1]; val7.rendererInfos[0] = new RendererInfo { renderer = (Renderer)(object)component8, defaultMaterial = val4, defaultShadowCastingMode = (ShadowCastingMode)1, hideOnDeath = false, ignoreOverlays = false, ignoresMaterialOverrides = false }; val7.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1]; val7.meshReplacements[0] = new MeshReplacement { mesh = mesh, renderer = (Renderer)(object)component8 }; SkinDef val8 = ScriptableObject.CreateInstance<SkinDef>(); val8.rootObject = ((Component)modelTransform).gameObject; val8.skinDefParams = val7; ModelSkinController component9 = ((Component)modelTransform).GetComponent<ModelSkinController>(); component9.skins[0] = val8; ContentAddition.AddBody(turretBodyPrefab); turretMasterPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"ab6d27c997dd03546bcb6f3176059eba").WaitForCompletion(), "Captain Turret Master", true); CharacterMaster component10 = turretMasterPrefab.GetComponent<CharacterMaster>(); component10.bodyPrefab = turretBodyPrefab; ContentAddition.AddMaster(turretMasterPrefab); SetUpVFX(); object obj = <>O.<0>__OnBodyCatalogInit; if (obj == null) { hook_Init val9 = OnBodyCatalogInit; <>O.<0>__OnBodyCatalogInit = val9; obj = (object)val9; } BodyCatalog.Init += (hook_Init)obj; object obj2 = <>O.<1>__OnAIDamaged; if (obj2 == null) { hook_OnBodyDamaged val10 = OnAIDamaged; <>O.<1>__OnAIDamaged = val10; obj2 = (object)val10; } BaseAI.OnBodyDamaged += (hook_OnBodyDamaged)obj2; } private static void OnAIDamaged(orig_OnBodyDamaged orig, BaseAI self, DamageReport damageReport) { if (Object.op_Implicit((Object)(object)self.currentEnemy.characterBody) && self.currentEnemy.characterBody.baseNameToken == "CAPTAIN_TURRET_NAME") { self.currentEnemy.Reset(); } else { orig.Invoke(self, damageReport); } } private static IEnumerator OnBodyCatalogInit(orig_Init orig) { yield return orig.Invoke(); captainBodyIndex = BodyCatalog.FindBodyIndex("CaptainBody(Clone)"); } public static void SetUpVFX() { //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_003a: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown //IL_011a: 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_0131: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: 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_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Expected O, but got Unknown //IL_01e7: 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_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Expected O, but got Unknown //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Expected O, but got Unknown //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_0373: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Expected O, but got Unknown //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03b2: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_03e7: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_043d: Unknown result type (might be due to invalid IL or missing references) //IL_0442: Unknown result type (might be due to invalid IL or missing references) //IL_0448: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) //IL_0469: Unknown result type (might be due to invalid IL or missing references) //IL_046f: Unknown result type (might be due to invalid IL or missing references) //IL_04a2: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Unknown result type (might be due to invalid IL or missing references) //IL_04b0: Expected O, but got Unknown //IL_04c8: Unknown result type (might be due to invalid IL or missing references) //IL_04cd: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04e4: Unknown result type (might be due to invalid IL or missing references) //IL_04ee: Unknown result type (might be due to invalid IL or missing references) //IL_04f3: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_0512: Unknown result type (might be due to invalid IL or missing references) //IL_0524: Unknown result type (might be due to invalid IL or missing references) //IL_0529: Unknown result type (might be due to invalid IL or missing references) //IL_053b: Unknown result type (might be due to invalid IL or missing references) //IL_0540: Unknown result type (might be due to invalid IL or missing references) //IL_0555: Unknown result type (might be due to invalid IL or missing references) indicatorPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"5ba295c0a3919a544939e6efe1ff17b3").WaitForCompletion(), "Captain Turret Range Indicator VFX", true); Transform val = indicatorPrefab.transform.Find("Radius, Spherical"); val.localScale = Vector3.one * 60f * 2f; Material val2 = new Material(Addressables.LoadAssetAsync<Material>((object)"efcdb7ab1fe128a4eb2d79a8024c25bd").WaitForCompletion()); Texture2D val3 = Addressables.LoadAssetAsync<Texture2D>((object)"cd8abd51143aa5140aded186614aa040").WaitForCompletion(); val2.SetTexture("_MainTex", (Texture)(object)val3); val2.SetTexture("_Cloud1Tex", (Texture)(object)val3); val2.SetColor("_TintColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)0, (byte)0, (byte)128))); ((Renderer)((Component)val).GetComponent<MeshRenderer>()).material = val2; PrefabAPI.RegisterNetworkPrefab(indicatorPrefab); tracerPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"561b80f2f7f29ba4cb234df1444df815").WaitForCompletion(), "Captain Turret Tracer VFX", false); LineRenderer component = tracerPrefab.GetComponent<LineRenderer>(); Gradient val4 = new Gradient(); GradientColorKey[] array = (GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.red, 0f), new GradientColorKey(Color.red, 1f) }; val4.SetKeys(array, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }); component.colorGradient = val4; Texture2D val5 = Addressables.LoadAssetAsync<Texture2D>((object)"d67c887632cd1704ebe3a19486dbe843").WaitForCompletion(); Material val6 = new Material(Addressables.LoadAssetAsync<Material>((object)"7fa66dfdd452dab48af0fbe1993f04d6").WaitForCompletion()); val6.SetTexture("_RemapTex", (Texture)(object)val5); ((Renderer)component).material = val6; ContentAddition.AddEffect(tracerPrefab); muzzleFlashPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"1a8f4ee7d7e360d42ba0dca68ff828c6").WaitForCompletion(), "Captain Turret Muzzle Flash VFX", false); Transform transform = muzzleFlashPrefab.transform; ParticleSystemRenderer component2 = ((Component)transform.Find("Ring")).GetComponent<ParticleSystemRenderer>(); Material val7 = new Material(Addressables.LoadAssetAsync<Material>((object)"67a2cf616ad4b42479cd8bdb2b0b0ca2").WaitForCompletion()); val7.SetTexture("_RemapTex", (Texture)(object)val5); ((Renderer)component2).material = val7; ColorOverLifetimeModule colorOverLifetime = ((Component)transform.Find("Flames")).GetComponent<ParticleSystem>().colorOverLifetime; Gradient val8 = new Gradient(); GradientColorKey[] array2 = (GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(Color32.op_Implicit(new Color32(byte.MaxValue, (byte)103, (byte)100, byte.MaxValue)), 0.053f), new GradientColorKey(Color32.op_Implicit(new Color32((byte)233, (byte)0, (byte)13, byte.MaxValue)), 0.309f), new GradientColorKey(Color32.op_Implicit(new Color32((byte)233, (byte)0, (byte)26, byte.MaxValue)), 1f) }; GradientAlphaKey[] array3 = (GradientAlphaKey[])(object)new GradientAlphaKey[3]; array3[0] = new GradientAlphaKey(0f, 0f); array3[0] = new GradientAlphaKey(1f, 0.141f); array3[0] = new GradientAlphaKey(0f, 1f); val8.SetKeys(array2, array3); ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val4); ColorOverLifetimeModule colorOverLifetime2 = ((Component)transform.Find("Flash")).GetComponent<ParticleSystem>().colorOverLifetime; Gradient val9 = new Gradient(); val9.SetKeys(array, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(0.271f, 0f), new GradientAlphaKey(0f, 1f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime2)).color = MinMaxGradient.op_Implicit(val9); Light component3 = ((Component)transform.Find("Point light")).GetComponent<Light>(); component3.color = Color.red; ContentAddition.AddEffect(muzzleFlashPrefab); impactPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"5a6d604670c05594a83b3727683e711d").WaitForCompletion(), "Captain Turret Impact VFX", false); Transform transform2 = impactPrefab.transform; ColorOverLifetimeModule colorOverLifetime3 = ((Component)transform2.Find("Flash")).GetComponent<ParticleSystem>().colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime3)).color = MinMaxGradient.op_Implicit(val9); ColorOverLifetimeModule colorOverLifetime4 = ((Component)transform2.Find("Flames")).GetComponent<ParticleSystem>().colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime4)).color = MinMaxGradient.op_Implicit(val8); Transform val10 = transform2.Find("Ring"); ParticleSystemRenderer component4 = ((Component)val10).GetComponent<ParticleSystemRenderer>(); ((Renderer)component4).material = val7; ColorOverLifetimeModule colorOverLifetime5 = ((Component)val10).GetComponent<ParticleSystem>().colorOverLifetime; Gradient val11 = new Gradient(); GradientColorKey[] array4 = (GradientColorKey[])(object)new GradientColorKey[2]; array4[0] = new GradientColorKey(Color32.op_Implicit(new Color32((byte)202, (byte)0, (byte)35, byte.MaxValue)), 0f); array4[0] = new GradientColorKey(Color.red, 0.585f); GradientAlphaKey[] array5 = (GradientAlphaKey[])(object)new GradientAlphaKey[3]; array5[0] = new GradientAlphaKey(1f, 0f); array5[1] = new GradientAlphaKey(1f, 0.479f); array5[1] = new GradientAlphaKey(0.082f, 1f); val11.SetKeys(array4, array5); ((ColorOverLifetimeModule)(ref colorOverLifetime5)).color = MinMaxGradient.op_Implicit(val11); ContentAddition.AddEffect(impactPrefab); } } public class CallSupplyTurretSkillDef { public static void Init() { //IL_000d: 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_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState(typeof(CallSupplyTurretState), ref flag); ContentAddition.AddEntityState(typeof(TurretMainState), ref flag); ContentAddition.AddEntityState(typeof(TurretFireState), ref flag); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.skillName = "CaptainSupplyDropTurret"; val.skillNameToken = "CAPTAIN_SUPPLY_TURRET_NAME"; val.skillDescriptionToken = "CAPTAIN_SUPPLY_TURRET_DESCRIPTION"; val.icon = Main.bundle.LoadAsset<Sprite>("texCaptainTurret.png"); val.activationStateMachineName = "Weapon"; val.activationState = new SerializableEntityStateType(typeof(CallSupplyTurretState)); val.interruptPriority = (InterruptPriority)2; val.baseRechargeInterval = 0f; val.baseMaxStock = 1; val.rechargeStock = 0; val.requiredStock = 1; val.stockToConsume = 0; val.attackSpeedBuffsRestockSpeed = false; val.attackSpeedBuffsRestockSpeed_Multiplier = 1f; val.resetCooldownTimerOnUse = false; val.fullRestockOnAssign = true; val.dontAllowPastMaxStocks = false; val.beginSkillCooldownOnSkillEnd = true; val.isCooldownBlockedUntilManuallyReset = false; val.cancelSprintingOnActivation = true; val.forceSprintDuringState = false; val.canceledFromSprinting = true; val.isCombatSkill = true; val.mustKeyPress = true; val.triggeredByPressRelease = false; val.autoHandleLuminousShot = true; val.hideStockCount = false; LanguageAPI.Add("CAPTAIN_SUPPLY_TURRET_NAME", "Beacon: Turret"); LanguageAPI.Add("CAPTAIN_SUPPLY_TURRET_DESCRIPTION", "<style=cIsUtility>Request</style> a turret that <style=cIsUtility>inherits all your items</style> and attacks all nearby enemies for <style=cIsDamage>200% damage per second</style>."); LanguageAPI.Add("CAPTAIN_TURRET_NAME", "Captain Turret"); ContentAddition.AddSkillDef(val); SkillFamily val2 = Addressables.LoadAssetAsync<SkillFamily>((object)"d72f3891fdf9e744d93ed1df83c1098a").WaitForCompletion(); SkillFamily val3 = Addressables.LoadAssetAsync<SkillFamily>((object)"6e49127cdcc369c4da9be6fb00913307").WaitForCompletion(); Array.Resize(ref val2.variants, val2.variants.Length + 1); val2.variants[val2.variants.Length - 1].skillDef = val; Array.Resize(ref val3.variants, val3.variants.Length + 1); val3.variants[val3.variants.Length - 1].skillDef = val; } } public class TurretFireSkillDef { public static SkillDef skillDef; public static void Init() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) skillDef = ScriptableObject.CreateInstance<SkillDef>(); skillDef.skillName = "CaptainTurretFire"; skillDef.skillNameToken = "CAPTAIN_SUPPLY_TURRET_FIRE_NAME"; skillDef.skillDescriptionToken = "CAPTAIN_SUPPLY_TURRET_FIRE_DESCRIPTION"; skillDef.icon = null; skillDef.activationStateMachineName = "Weapon"; skillDef.activationState = new SerializableEntityStateType(typeof(TurretFireState)); skillDef.interruptPriority = (InterruptPriority)0; skillDef.baseRechargeInterval = 0f; skillDef.baseMaxStock = 1; skillDef.rechargeStock = 1; skillDef.requiredStock = 1; skillDef.stockToConsume = 1; skillDef.attackSpeedBuffsRestockSpeed = false; skillDef.attackSpeedBuffsRestockSpeed_Multiplier = 1f; skillDef.resetCooldownTimerOnUse = false; skillDef.fullRestockOnAssign = true; skillDef.dontAllowPastMaxStocks = false; skillDef.beginSkillCooldownOnSkillEnd = false; skillDef.isCooldownBlockedUntilManuallyReset = false; skillDef.cancelSprintingOnActivation = true; skillDef.forceSprintDuringState = false; skillDef.canceledFromSprinting = false; skillDef.isCombatSkill = true; skillDef.mustKeyPress = false; skillDef.triggeredByPressRelease = false; skillDef.autoHandleLuminousShot = true; skillDef.hideStockCount = false; ContentAddition.AddSkillDef(skillDef); } } public class CallSupplyTurretState : CallSupplyDropBase { public override void OnEnter() { base.supplyDropPrefab = Prefabs.beaconPrefab; ((CallSupplyDropBase)this).OnEnter(); } } public class HopooGames : NetworkBehaviour { public GameObject turretInstance; private static int kCmdCmdSpawnTurret; [Command] public void CmdSpawnTurret(GameObject builder, Vector3 position, Quaternion rotation) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)builder)) { return; } CharacterBody component = builder.GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } GameObject masterPrefab = MasterCatalog.GetMasterPrefab(MasterCatalog.FindMasterIndex(Prefabs.turretMasterPrefab)); if (!Object.op_Implicit((Object)(object)masterPrefab)) { return; } CharacterMaster master = component.master; if (!Object.op_Implicit((Object)(object)master)) { return; } KillTurretInstance(); CharacterMaster val = new MasterSummon { masterPrefab = masterPrefab, position = position, rotation = rotation, summonerBodyObject = builder, ignoreTeamMemberLimit = true, inventoryToCopy = master.inventory }.Perform(); Inventory inventory = val.inventory; if (Object.op_Implicit((Object)(object)inventory)) { inventory.RemoveItem(Items.Mushroom, inventory.GetItemCount(Items.Mushroom)); } CharacterBody body = val.GetBody(); if (Object.op_Implicit((Object)(object)body)) { if (!body.HasBuff(Buffs.Intangible)) { body.AddBuff(Buffs.Intangible); } HealthComponent healthComponent = body.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent)) { healthComponent.godMode = true; healthComponent.isDefaultGodMode = true; } } turretInstance = ((Component)val).gameObject; } public void OnDisable() { KillTurretInstance(); } public void OnDestroy() { KillTurretInstance(); } public void KillTurretInstance() { if (!Object.op_Implicit((Object)(object)turretInstance)) { return; } CharacterMaster component = turretInstance.GetComponent<CharacterMaster>(); CharacterBody body = component.GetBody(); if (Object.op_Implicit((Object)(object)body)) { HealthComponent healthComponent = body.healthComponent; if (Object.op_Implicit((Object)(object)healthComponent)) { healthComponent.godMode = false; healthComponent.isDefaultGodMode = false; } } component.TrueKill(); } private void UNetVersion() { } protected static void InvokeCmdCmdSpawnTurret(NetworkBehaviour obj, NetworkReader reader) { //IL_0023: 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) if (!NetworkServer.active) { Debug.LogError((object)"Command CmdSpawnTurret called on client."); } else { ((HopooGames)(object)obj).CmdSpawnTurret(reader.ReadGameObject(), reader.ReadVector3(), reader.ReadQuaternion()); } } public void CallCmdSpawnTurret(GameObject builder, Vector3 position, Quaternion rotation) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (!NetworkClient.active) { Debug.LogError((object)"Command function CmdSpawnTurret called on server."); return; } if (((NetworkBehaviour)this).isServer) { CmdSpawnTurret(builder, position, rotation); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)5); val.WritePackedUInt32((uint)kCmdCmdSpawnTurret); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.Write(builder); val.Write(position); val.Write(rotation); ((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdSpawnTurret"); } static HopooGames() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kCmdCmdSpawnTurret = -3705997; NetworkBehaviour.RegisterCommandDelegate(typeof(HopooGames), kCmdCmdSpawnTurret, new CmdDelegate(InvokeCmdCmdSpawnTurret)); NetworkCRC.RegisterBehaviour("HopooGames", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } public class TurretFireState : BaseState { public static GameObject effectPrefab = Prefabs.muzzleFlashPrefab; public static GameObject hitEffectPrefab = Prefabs.impactPrefab; public static GameObject tracerEffectPrefab = Prefabs.tracerPrefab; public static string attackSoundString = "Play_engi_R_turret_shot"; public static float damageCoefficient = 0.7f; public static float force = 200f; public static float minSpread = 0f; public static float maxSpread = 1.5f; public static float baseDuration = 0.35f; private float duration; private static int stateHash = Animator.StringToHash("FireGauss"); private static int paramHash = Animator.StringToHash("FireGauss.playbackRate"); public override void OnEnter() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_0148: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; Util.PlaySound(attackSoundString, ((EntityState)this).gameObject); Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).StartAimMode(aimRay, 2f, false); ((EntityState)this).PlayAnimation("Gesture", stateHash, paramHash, duration); string text = "Muzzle"; EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, text, false); if (((EntityState)this).isAuthority) { BulletAttack val = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, aimVector = ((Ray)(ref aimRay)).direction, minSpread = minSpread, maxSpread = maxSpread, bulletCount = 1u, damage = damageCoefficient * base.damageStat, force = force, tracerEffectPrefab = tracerEffectPrefab, muzzleName = text, hitEffectPrefab = hitEffectPrefab, isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), HitEffectNormal = false, radius = 0.15f }; val.damageType.damageSource = (DamageSource)1; val.Fire(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //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 TurretMainState : BaseMainState { public static GameObject turretPrefab = Prefabs.turretMasterPrefab; public GameObject turretPrefabInstance; public GameObject indicatorInstance; public CharacterBody ownerBody; public float heightOffset = 3.5f; public HopooGames hopooGames; public bool enableRadiusIndicator { get { return Object.op_Implicit((Object)(object)indicatorInstance); } set { //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) if (enableRadiusIndicator != value) { if (value) { indicatorInstance = Object.Instantiate<GameObject>(Prefabs.indicatorPrefab, ((EntityState)this).transform.position, Quaternion.identity); indicatorInstance.GetComponent<NetworkedBodyAttachment>().AttachToGameObjectAndSpawn(((EntityState)this).gameObject, (string)null); } else { Object.Destroy((Object)(object)indicatorInstance); indicatorInstance = null; } } } } public override Interactability GetInteractability(Interactor activator) { //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 (Interactability)0; } public override void OnEnter() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) ((BaseCaptainSupplyDropState)this).OnEnter(); hopooGames = ((Component)((EntityState)this).outer).GetComponent<HopooGames>(); GenericOwnership component = ((Component)((EntityState)this).outer).GetComponent<GenericOwnership>(); Vector3 position = ((Component)((BaseCaptainSupplyDropState)this).interactionComponent).transform.position + ((Component)((BaseCaptainSupplyDropState)this).interactionComponent).transform.up * heightOffset; if (!Object.op_Implicit((Object)(object)component)) { return; } GameObject ownerObject = component.ownerObject; if (Object.op_Implicit((Object)(object)ownerObject)) { if (Object.op_Implicit((Object)(object)hopooGames) && ((EntityState)this).isAuthority) { hopooGames.CallCmdSpawnTurret(ownerObject, position, ((Component)((BaseCaptainSupplyDropState)this).interactionComponent).transform.rotation); } enableRadiusIndicator = true; } } public override void OnExit() { enableRadiusIndicator = false; ((BaseCaptainSupplyDropState)this).OnExit(); } } }