Some mods may be broken due to the recent Alloyed Collective update.
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(); } } }