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 ChillDrone v2.1.4
ChillDrone.dll
Decompiled a year agousing System; 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.Configuration; using Chen.ChillDrone.Drone.States; using Chen.GradiusMod; using Chen.GradiusMod.Drones; using Chen.GradiusMod.Items.GradiusOption; using Chen.GradiusMod.Items.GradiusOption.Components; using Chen.Helpers.GeneralHelpers; using Chen.Helpers.LogHelpers; using Chen.Helpers.UnityHelpers; using EntityStates; using EntityStates.EngiTurret.EngiTurretWeapon; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Skills; using TILER2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("ChillDrone.Tests")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("ChillDrone")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("2.1.2.0")] [assembly: AssemblyInformationalVersion("2.1.2")] [assembly: AssemblyProduct("ChillDrone")] [assembly: AssemblyTitle("ChillDrone")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.1.2.0")] [module: UnverifiableCode] namespace Chen.ChillDrone { internal class ContentProvider : GenericContentPackProvider { internal List<GameObject> bodyObjects = new List<GameObject>(); internal List<GameObject> masterObjects = new List<GameObject>(); protected override string ContentIdentifier() { return "com.Chen.ChillDrone"; } protected override void LoadStaticContentAsyncActions(LoadStaticContentAsyncArgs args) { base.contentPack.bodyPrefabs.Add(bodyObjects.ToArray()); base.contentPack.masterPrefabs.Add(masterObjects.ToArray()); } } [BepInPlugin("com.Chen.ChillDrone", "ChillDrone", "2.1.4")] [BepInDependency("com.bepis.r2api", "5.1.3")] [BepInDependency("com.Chen.ChensHelpers", "1.1.3")] [BepInDependency("com.Chen.ChensGradiusMod", "3.5.5")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [R2APISubmoduleDependency(new string[] { "DamageAPI", "RecalculateStatsAPI" })] public class ModPlugin : BaseUnityPlugin { public const string ModVer = "2.1.4"; public const string ModName = "ChillDrone"; public const string ModGuid = "com.Chen.ChillDrone"; internal static ConfigFile cfgFile; internal static Log Log; internal static List<DroneInfo> dronesList = new List<DroneInfo>(); internal static AssetBundle assetBundle; internal static ContentProvider contentProvider; private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) Log = new Log(((BaseUnityPlugin)this).Logger); contentProvider = new ContentProvider(); Log.Debug((object)"Initializing config file..."); cfgFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "com.Chen.ChillDrone.cfg"), true); Log.Debug((object)"Loading asset bundle..."); BundleInfo val = default(BundleInfo); ((BundleInfo)(ref val))..ctor("Chen.ChillDrone.chilldrone_assets", (BundleType)0); assetBundle = new AssetsManager(val).Register(); Extensions.ConvertShaders(assetBundle); Log.Debug((object)"Registering Chill Drone..."); dronesList = DroneCatalog.Initialize("com.Chen.ChillDrone", cfgFile); DroneCatalog.ScopedSetupAll(dronesList); ((GenericContentPackProvider)contentProvider).Initialize(); } internal static bool DebugCheck() { return false; } } } namespace Chen.ChillDrone.Drone { internal class ChillDrone : Drone<ChillDrone> { private static readonly Lazy<InteractableSpawnCard> _iscBasis = new Lazy<InteractableSpawnCard>((Func<InteractableSpawnCard>)(() => Resources.Load<InteractableSpawnCard>("spawncards/interactablespawncard/iscBrokenDrone1"))); private static readonly Lazy<SkillDef> _skillBasis = new Lazy<SkillDef>((Func<SkillDef>)(() => Resources.Load<SkillDef>("skilldefs/drone1body/Drone1BodyGun"))); private static readonly Lazy<GameObject> _flameDroneMaster = new Lazy<GameObject>((Func<GameObject>)(() => Resources.Load<GameObject>("prefabs/charactermasters/FlameDroneMaster"))); public static ModdedDamageType chillOnHit { get; private set; } public static BuffDef chillBuff { get; private set; } public static InteractableSpawnCard iSpawnCard { get; private set; } public override bool canHaveOptions => true; private GameObject brokenObject { get; set; } private DirectorCardHolder iDirectorCardHolder { get; set; } private GameObject droneBody { get; set; } private GameObject droneMaster { get; set; } private static InteractableSpawnCard interactableSpawnCardBasis => _iscBasis.Value; private static SkillDef skillBasis => _skillBasis.Value; private static GameObject flameDroneMaster => _flameDroneMaster.Value; protected override GameObject DroneCharacterMasterObject => droneMaster; protected override void SetupConfig() { ((Drone)this).spawnWeightWithMachinesArtifact = 0; ((Drone)this).SetupConfig(); } protected override void SetupComponents() { //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_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02da: 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_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_034a: 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_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Expected O, but got Unknown //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: 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_0546: Unknown result type (might be due to invalid IL or missing references) //IL_054b: Unknown result type (might be due to invalid IL or missing references) //IL_0567: Unknown result type (might be due to invalid IL or missing references) //IL_0571: Expected O, but got Unknown //IL_0590: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05b2: Unknown result type (might be due to invalid IL or missing references) //IL_05f5: Unknown result type (might be due to invalid IL or missing references) //IL_05fa: Unknown result type (might be due to invalid IL or missing references) //IL_0605: Unknown result type (might be due to invalid IL or missing references) //IL_060c: Unknown result type (might be due to invalid IL or missing references) //IL_0613: Unknown result type (might be due to invalid IL or missing references) //IL_0615: Unknown result type (might be due to invalid IL or missing references) //IL_061a: Unknown result type (might be due to invalid IL or missing references) //IL_0623: Expected O, but got Unknown //IL_0624: Unknown result type (might be due to invalid IL or missing references) //IL_0629: Unknown result type (might be due to invalid IL or missing references) //IL_0631: Unknown result type (might be due to invalid IL or missing references) //IL_0633: Unknown result type (might be due to invalid IL or missing references) //IL_0638: Unknown result type (might be due to invalid IL or missing references) //IL_063a: Unknown result type (might be due to invalid IL or missing references) //IL_0644: Expected O, but got Unknown ((Drone)this).SetupComponents(); LanguageAPI.Add("CHILL_DRONE_NAME", "Chill Drone"); LanguageAPI.Add("CHILL_DRONE_CONTEXT", "Repair Chill Drone"); LanguageAPI.Add("CHILL_DRONE_INTERACTABLE_NAME", "Broken Chill Drone"); LanguageAPI.Add("CHILL_DRONE_INTERACTABLE_INSPECT", "A drone that slows nearby enemies with it's beam."); LanguageAPI.Add("CHILL_DRONE_INTERACTABLE_TITLE", "Broken Chill Drone"); brokenObject = PrefabAPI.InstantiateClone(((SpawnCard)interactableSpawnCardBasis).prefab, ((Drone)this).name + "Broken", true); SummonMasterBehavior component = brokenObject.GetComponent<SummonMasterBehavior>(); droneMaster = PrefabAPI.InstantiateClone(component.masterPrefab, ((Drone)this).name + "Master", true); ModPlugin.contentProvider.masterObjects.Add(droneMaster); AISkillDriver[] components = droneMaster.GetComponents<AISkillDriver>(); foreach (AISkillDriver val in components) { Object.Destroy((Object)(object)val); } AISkillDriver[] array = Extensions.DeepCopyComponentsTo<AISkillDriver>(flameDroneMaster, droneMaster).ToArray(); array[1].maxDistance = EmitSlow.detectionDistance; array[2].maxDistance = array[1].maxDistance + EmitSlow.detectionDistance * 0.5f; array[3].minDistance = array[2].maxDistance; Extensions.SetAllDriversToAimTowardsEnemies(array); CharacterMaster component2 = droneMaster.GetComponent<CharacterMaster>(); droneBody = PrefabAPI.InstantiateClone(component2.bodyPrefab, ((Drone)this).name + "Body", true); ModPlugin.contentProvider.bodyObjects.Add(droneBody); CharacterBody component3 = droneBody.GetComponent<CharacterBody>(); component3.baseNameToken = "CHILL_DRONE_NAME"; component3.baseMaxHealth *= 0.9f; component3.baseRegen *= 3f; component3.baseDamage = 3f; component3.baseCrit = 0f; component3.baseArmor *= 1.3f; component3.baseMoveSpeed *= 0.7f; component3.levelMaxHealth *= 0.9f; component3.levelRegen *= 3f; component3.levelDamage = 1f; component3.levelCrit = 0f; component3.levelArmor *= 1.3f; component3.levelMoveSpeed *= 0.7f; component3.portraitIcon = ModPlugin.assetBundle.LoadAsset<Texture>("Assets/GEMO/texChillDrone.png"); GameObject val2 = ModPlugin.assetBundle.LoadAsset<GameObject>("Assets/GEMO/mdlChillDrone.prefab"); Quaternion localRotation = val2.transform.localRotation; Extensions.ReplaceModel(droneBody, val2, false); val2.transform.localRotation = localRotation; Extensions.InitializeDroneModelComponents(val2, component3, 1.3f); ((Component)val2.transform.Find("PropellerLEffect")).gameObject.AddComponent<RotateObject>().rotationSpeed = new Vector3(0f, 0f, 900f); ((Component)val2.transform.Find("PropellerREffect")).gameObject.AddComponent<RotateObject>().rotationSpeed = new Vector3(0f, 0f, -900f); SkillLocator component4 = droneBody.GetComponent<SkillLocator>(); bool flag = default(bool); ContentAddition.AddEntityState<EmitSlow>(ref flag); SkillDef val3 = Object.Instantiate<SkillDef>(skillBasis); val3.activationState = new SerializableEntityStateType(typeof(EmitSlow)); val3.baseRechargeInterval = 4f; val3.beginSkillCooldownOnSkillEnd = true; val3.baseMaxStock = 1; val3.fullRestockOnAssign = false; ContentAddition.AddSkillDef(val3); SkillFamily val4 = Object.Instantiate<SkillFamily>(component4.primary.skillFamily); val4.variants = (Variant[])(object)new Variant[1]; Variant[] variants = val4.variants; Variant val5 = new Variant { skillDef = val3 }; ((Variant)(ref val5)).viewableNode = new Node("", false, (Node)null); variants[0] = val5; Reflection.SetFieldValue<SkillFamily>((object)component4.primary, "_skillFamily", val4); ContentAddition.AddSkillFamily(val4); CharacterDeathBehavior orAddComponent = Extensions.GetOrAddComponent<CharacterDeathBehavior>((Component)(object)component3); orAddComponent.deathState = new SerializableEntityStateType(typeof(DeathState)); component2.bodyPrefab = droneBody; component.masterPrefab = droneMaster; PurchaseInteraction component5 = brokenObject.GetComponent<PurchaseInteraction>(); component5.cost = 80; component5.Networkcost = component5.cost; component5.contextToken = "CHILL_DRONE_CONTEXT"; component5.displayNameToken = "CHILL_DRONE_INTERACTABLE_NAME"; GenericDisplayNameProvider component6 = brokenObject.GetComponent<GenericDisplayNameProvider>(); component6.displayToken = "CHILL_DRONE_NAME"; GameObject val6 = ModPlugin.assetBundle.LoadAsset<GameObject>("Assets/GEMO/mdlChillDroneBroken.prefab"); Extensions.ReplaceModel(brokenObject, val6, false); Highlight component7 = brokenObject.GetComponent<Highlight>(); component7.targetRenderer = (Renderer)(object)val6.GetComponentInChildren<MeshRenderer>(); EntityLocator val7 = val6.AddComponent<EntityLocator>(); val7.entity = brokenObject; GameObject gameObject = ((Component)val6.transform.GetChild(0)).gameObject; EntityLocator val8 = gameObject.AddComponent<EntityLocator>(); val8.entity = brokenObject; GameObject gameObject2 = ((Component)brokenObject.transform.Find("ModelBase").Find("BrokenDroneVFX")).gameObject; gameObject2.transform.parent = val6.transform; GameObject gameObject3 = ((Component)gameObject2.transform.Find("Small Sparks, Mesh")).gameObject; ShapeModule shape = gameObject3.GetComponent<ParticleSystem>().shape; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)13; ((ShapeModule)(ref shape)).meshShapeType = (ParticleSystemMeshShapeType)1; ((ShapeModule)(ref shape)).meshRenderer = (MeshRenderer)component7.targetRenderer; GameObject gameObject4 = ((Component)gameObject2.transform.Find("Damage Point")).gameObject; gameObject4.transform.localPosition = Vector3.zero; gameObject4.transform.localRotation = Quaternion.identity; gameObject4.transform.localScale = Vector3.one; iSpawnCard = Object.Instantiate<InteractableSpawnCard>(interactableSpawnCardBasis); ((Object)iSpawnCard).name = "iscBroken" + ((Drone)this).name; ((SpawnCard)iSpawnCard).prefab = brokenObject; DirectorCard card = new DirectorCard { spawnCard = (SpawnCard)(object)iSpawnCard, selectionWeight = 2, minimumStageCompletions = 0, spawnDistance = (MonsterSpawnDistance)1, preventOverhead = false }; iDirectorCardHolder = new DirectorCardHolder { Card = card, MonsterCategory = (MonsterCategory)0, InteractableCategory = (InteractableCategory)5 }; } protected override void SetupBehavior() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Expected O, but got Unknown ((Drone)this).SetupBehavior(); Item<GradiusOption>.instance.SetToRotateOptions(((Object)droneMaster).name); Item<GradiusOption>.instance.SetRotateOptionMultiplier(((Object)droneMaster).name, 1.2f); chillOnHit = DamageAPI.ReserveDamageType(); chillBuff = ScriptableObject.CreateInstance<BuffDef>(); chillBuff.canStack = false; chillBuff.isDebuff = true; ((Object)chillBuff).name = "Chill Drone - Chilled"; chillBuff.iconSprite = ModPlugin.assetBundle.LoadAsset<Sprite>("Assets/texBuffChill.png"); ContentAddition.AddBuffDef(chillBuff); DirectorAPI.InteractableActions += DirectorAPI_InteractableActions; RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(ChillDrone_GetStatCoefficients); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageInfo); if (DamageAPI.HasModdedDamageType(damageInfo, chillOnHit)) { self.body.AddTimedBuff(chillBuff, 1f); } } private void ChillDrone_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (sender.HasBuff(chillBuff)) { args.moveSpeedMultAdd -= 0.7f; args.jumpPowerMultAdd -= 0.7f; } } private void DirectorAPI_InteractableActions(DccsPool arg0, StageInfo arg1) { if (((StageInfo)(ref arg1)).CheckStage((Stage)32, Array.Empty<string>()) || ((StageInfo)(ref arg1)).CheckStage((Stage)256, Array.Empty<string>())) { Helpers.ForEachPoolEntryInDccsPool(arg0, (Action<PoolEntry>)delegate(PoolEntry poolEntry) { DirectorAPI.AddCard(poolEntry.dccs, iDirectorCardHolder); }); } } internal static bool DebugCheck() { return false; } } } namespace Chen.ChillDrone.Drone.States { internal class DeathState : DroneDeathState { protected override bool SpawnInteractable { get; set; } = ((Drone)Drone<ChillDrone>.instance).canBeRepurchased; protected override InteractableSpawnCard GetInteractableSpawnCard => ChillDrone.iSpawnCard; } internal class EmitSlow : BaseState { public static readonly float detectionDistance = 20f; private static readonly float angularDetection = 60f; private static readonly string muzzleString = "Muzzle"; private static readonly float maxDistance = detectionDistance * 2f; private static readonly float duration = 5f; private float stopwatch; private float fireTimer; private Transform modelTransform; private BullseyeSearch enemyFinder; private Ray aimRay; private List<HurtBox> results = new List<HurtBox>(); private readonly List<GameObject> laserEffectInstances = new List<GameObject>(); private readonly List<Transform> laserEffectInstanceEndTransforms = new List<Transform>(); private Transform muzzleTransform; private static FireBeam fireBeamInstance => new FireBeam(); private static GameObject laserPrefab => fireBeamInstance.laserPrefab; private static string attackSoundString => fireBeamInstance.attackSoundString; private static float fireFrequency => fireBeamInstance.fireFrequency; private static GameObject effectPrefab => fireBeamInstance.effectPrefab; private static float minSpread => fireBeamInstance.minSpread; private static float maxSpread => fireBeamInstance.maxSpread; private static float force => fireBeamInstance.force; private static GameObject hitEffectPrefab => fireBeamInstance.hitEffectPrefab; private void InitializeEnemyFinder() { //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_0012: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) enemyFinder = new BullseyeSearch { viewer = ((EntityState)this).characterBody, maxDistanceFilter = detectionDistance, maxAngleFilter = angularDetection, searchOrigin = ((Ray)(ref aimRay)).origin, searchDirection = ((Ray)(ref aimRay)).direction, filterByLoS = true, sortMode = (SortMode)3, teamMaskFilter = TeamMask.allButNeutral }; if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent)) { ((TeamMask)(ref enemyFinder.teamMaskFilter)).RemoveTeam(((EntityState)this).teamComponent.teamIndex); } enemyFinder.RefreshCandidates(); results = enemyFinder.GetResults().ToList(); } private void FireBullet(Ray laserRay) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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_00db: 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_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)effectPrefab)) { EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, muzzleString, false); } if (((EntityState)this).isAuthority) { BulletAttack val = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref laserRay)).origin, aimVector = ((Ray)(ref laserRay)).direction, minSpread = minSpread, maxSpread = maxSpread, bulletCount = 1u, damage = base.damageStat, procCoefficient = 1f / fireFrequency, force = force, muzzleName = muzzleString, hitEffectPrefab = hitEffectPrefab, isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), HitEffectNormal = false, maxDistance = maxDistance, radius = 0f }; DamageAPI.AddModdedDamageType(val, ChillDrone.chillOnHit); val.Fire(); } } private void InitializeOptionDataStructure() { Item<GradiusOption>.instance.FireForAllOptions(((EntityState)this).characterBody, (Action<GameObject, OptionBehavior, GameObject, Vector3>)delegate(GameObject option, OptionBehavior behavior, GameObject _t, Vector3 _d) { if (behavior.O.ContainsKey("laserEffectInstances")) { List<GameObject> list = behavior.O["laserEffectInstances"] as List<GameObject>; list.Clear(); } else { behavior.O["laserEffectInstances"] = new List<GameObject>(); } if (behavior.O.ContainsKey("laserEffectInstanceEndTransforms")) { List<Transform> list2 = behavior.O["laserEffectInstanceEndTransforms"] as List<Transform>; list2.Clear(); } else { behavior.O["laserEffectInstanceEndTransforms"] = new List<Transform>(); } }); } private void OptionsFire(Action<GameObject, OptionBehavior, GameObject, Vector3, List<GameObject>, List<Transform>> action) { Item<GradiusOption>.instance.FireForAllOptions(((EntityState)this).characterBody, (Action<GameObject, OptionBehavior, GameObject, Vector3>)delegate(GameObject option, OptionBehavior behavior, GameObject target, Vector3 direction) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) if (behavior.O.ContainsKey("laserEffectInstances") && behavior.O.ContainsKey("laserEffectInstanceEndTransforms")) { List<GameObject> arg = behavior.O["laserEffectInstances"] as List<GameObject>; List<Transform> arg2 = behavior.O["laserEffectInstanceEndTransforms"] as List<Transform>; action(option, behavior, target, direction, arg, arg2); } }); } private void OptionFireBullet(Ray laserRay, GameObject option) { //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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: 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_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)effectPrefab)) { Extensions.MuzzleEffect(option, effectPrefab, false); } if (((EntityState)this).isAuthority) { float damage = base.damageStat * Item<GradiusOption>.instance.damageMultiplier; BulletAttack val = new BulletAttack { owner = ((EntityState)this).gameObject, weapon = option, origin = ((Ray)(ref laserRay)).origin, aimVector = ((Ray)(ref laserRay)).direction, minSpread = minSpread, maxSpread = maxSpread, bulletCount = 1u, damage = damage, procCoefficient = 1f / fireFrequency, force = force * Item<GradiusOption>.instance.damageMultiplier, muzzleName = muzzleString, hitEffectPrefab = hitEffectPrefab, isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), HitEffectNormal = false, maxDistance = maxDistance, radius = 0f }; DamageAPI.AddModdedDamageType(val, ChillDrone.chillOnHit); val.Fire(); } } public override void OnEnter() { //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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); InitializeOptionDataStructure(); Util.PlaySound(attackSoundString, ((EntityState)this).gameObject); aimRay = ((BaseState)this).GetAimRay(); InitializeEnemyFinder(); if (!Object.op_Implicit((Object)(object)laserPrefab)) { return; } modelTransform = ((EntityState)this).GetModelTransform(); if (!Object.op_Implicit((Object)(object)modelTransform)) { return; } muzzleTransform = modelTransform.Find(muzzleString); if (!Object.op_Implicit((Object)(object)muzzleTransform)) { return; } for (int i = 0; i < results.Count; i++) { GameObject val = Object.Instantiate<GameObject>(laserPrefab, muzzleTransform.position, muzzleTransform.rotation); val.transform.parent = muzzleTransform; laserEffectInstances.Add(val); laserEffectInstanceEndTransforms.Add(val.GetComponent<ChildLocator>().FindChild("LaserEnd")); OptionsFire(delegate(GameObject option, OptionBehavior _b, GameObject _t, Vector3 _d, List<GameObject> laserEffects, List<Transform> laserEndTransforms) { GameObject val2 = Object.Instantiate<GameObject>(laserPrefab, option.transform); val2.transform.parent = option.transform; laserEffects.Add(val2); laserEndTransforms.Add(val2.GetComponent<ChildLocator>().FindChild("LaserEnd")); }); } } public override void FixedUpdate() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0137: 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_015c: 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_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); stopwatch += Time.fixedDeltaTime; fireTimer += Time.fixedDeltaTime; float num3 = fireFrequency * ((EntityState)this).characterBody.attackSpeed; float num2 = 1f / num3; Vector3 position = muzzleTransform.position; Ray val3 = default(Ray); RaycastHit val4 = default(RaycastHit); for (int i = 0; i < results.Count; i++) { HurtBox hurtBox = results[i]; GameObject val = laserEffectInstances[i]; if (Object.op_Implicit((Object)(object)hurtBox) && Object.op_Implicit((Object)(object)hurtBox.healthComponent) && hurtBox.healthComponent.alive) { Transform val2 = laserEffectInstanceEndTransforms[i]; Vector3 position2 = ((Component)hurtBox).transform.position; ((Ray)(ref val3))..ctor(position, position2 - position); if (fireTimer > num2) { FireBullet(val3); } if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val2)) { Vector3 point = ((Ray)(ref val3)).GetPoint(maxDistance); if (Util.CharacterRaycast(((EntityState)this).gameObject, val3, ref val4, maxDistance, LayerMask.op_Implicit(LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)), (QueryTriggerInteraction)0)) { point = ((RaycastHit)(ref val4)).point; } val2.position = point; } OptionsFire(delegate(GameObject option, OptionBehavior _b, GameObject _t, Vector3 _d, List<GameObject> laserEffects, List<Transform> laserEndTransforms) { //IL_0019: 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) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_0034: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) Transform val5 = laserEndTransforms[i]; Vector3 position3 = option.transform.position; Vector3 position4 = ((Component)hurtBox).transform.position; Ray laserRay = default(Ray); ((Ray)(ref laserRay))..ctor(position3, position4 - position3); if (fireTimer > num2) { OptionFireBullet(laserRay, option); } if (Object.op_Implicit((Object)(object)laserEffects[i]) && Object.op_Implicit((Object)(object)val5)) { Vector3 point2 = ((Ray)(ref laserRay)).GetPoint(maxDistance); RaycastHit val6 = default(RaycastHit); if (Physics.Raycast(position3, position4 - position3, ref val6, maxDistance, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask), (QueryTriggerInteraction)0)) { point2 = ((RaycastHit)(ref val6)).point; } val5.position = point2; } }); } else if (Object.op_Implicit((Object)(object)val)) { OptionsFire(delegate(GameObject option, OptionBehavior _b, GameObject _t, Vector3 _d, List<GameObject> laserEffects, List<Transform> laserEndTransforms) { EntityState.Destroy((Object)(object)laserEffects[i]); laserEffects.RemoveAt(i); laserEndTransforms.RemoveAt(i); }); EntityState.Destroy((Object)(object)val); results.RemoveAt(i); laserEffectInstances.RemoveAt(i); laserEffectInstanceEndTransforms.RemoveAt(i); int num4 = i; i = num4 - 1; } } if (fireTimer > num2) { fireTimer = 0f; } if (((EntityState)this).isAuthority && (stopwatch >= duration || results.Count == 0)) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { foreach (GameObject laserEffectInstance in laserEffectInstances) { if (Object.op_Implicit((Object)(object)laserEffectInstance)) { EntityState.Destroy((Object)(object)laserEffectInstance); } } laserEffectInstances.Clear(); laserEffectInstanceEndTransforms.Clear(); OptionsFire(delegate(GameObject _o, OptionBehavior _b, GameObject _t, Vector3 _d, List<GameObject> laserEffects, List<Transform> laserEndTransforms) { foreach (GameObject laserEffect in laserEffects) { if (Object.op_Implicit((Object)(object)laserEffect)) { EntityState.Destroy((Object)(object)laserEffect); } } laserEffects.Clear(); laserEndTransforms.Clear(); }); results.Clear(); ((EntityState)this).OnExit(); } } }