using System;
using System.Collections.Generic;
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 EntityStates;
using EntityStates.Merc;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Parry")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+454e438b8916d1bf466f0c2d603128b67fb3887b")]
[assembly: AssemblyProduct("Parry")]
[assembly: AssemblyTitle("Parry")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
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 Parry
{
[BepInPlugin("com.Nuxlar.Parry", "Parry", "1.3.1")]
public class Parry : BaseUnityPlugin
{
private AssetBundle parryAssets;
private Sprite parryIcon;
private Sprite parryBuffIcon;
private Sprite parryActivatedBuffIcon;
public static BuffDef parryBuffDef;
public static BuffDef parryActivatedBuffDef;
private GameObject merc = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercBody.prefab").WaitForCompletion();
public static GameObject parryImpact = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/ImpactMercFocusedAssault.prefab").WaitForCompletion();
public static GameObject parryFunImpact = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainAirstrikeAltImpact.prefab").WaitForCompletion();
public static SkillDef parrySkillDef = ScriptableObject.CreateInstance<SkillDef>();
private static BodyIndex mercBodyIndex;
public static ConfigEntry<float> parryFunDamageMultiplier;
public static ConfigEntry<float> parryFunRadius;
public static ConfigEntry<bool> parryFunEnabled;
private static ConfigFile ParryConfig { get; set; }
public void Awake()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Expected O, but got Unknown
ParryConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.Parry.cfg", true);
parryFunDamageMultiplier = ParryConfig.Bind<float>("General", "Fun Mode Damage Multiplier", 20f, "This number is multiplied by the base 500% damage, so 20 would be 10000% damage.");
parryFunRadius = ParryConfig.Bind<float>("General", "Fun Mode Damage Radius", 26f, "How large the retalitory strike radius is in fun mode.");
parryFunEnabled = ParryConfig.Bind<bool>("General", "Enable Fun Mode", false, "Parry but fun.");
parryAssets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "parrybundle.bundle"));
parryIcon = parryAssets.LoadAsset<Sprite>("Assets/parryIconNux.png");
parryBuffIcon = parryAssets.LoadAsset<Sprite>("Assets/parryBuffIconNux.png");
parryActivatedBuffIcon = parryAssets.LoadAsset<Sprite>("Assets/parryActivatedBuffIconNux.png");
bool flag = default(bool);
ContentAddition.AddEntityState<ParryHold>(ref flag);
ContentAddition.AddEntityState<ParryStrike>(ref flag);
CreateParryBuffs();
CreateParrySkill();
ParryStrike.parrySoundDef = CreateNetworkSoundEventDef("Play_nux_parry");
ParryStrike.evisSoundDef = CreateNetworkSoundEventDef("Play_merc_sword_impact");
HealthComponent.TakeDamage += new hook_TakeDamage(TakeDamageHook);
RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad));
}
private void OnLoad()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
mercBodyIndex = BodyCatalog.FindBodyIndex("MercBody");
}
private void TakeDamageHook(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
if (NetworkServer.active && self.body.bodyIndex == mercBodyIndex && self.body.HasBuff(parryBuffDef) && damageInfo.damage > 0f)
{
HandleParryBuffsServer(self.body);
}
else
{
orig.Invoke(self, damageInfo);
}
}
public static void HandleParryBuffsServer(CharacterBody body)
{
if (body.HasBuff(parryBuffDef))
{
body.RemoveBuff(parryBuffDef);
}
if (!body.HasBuff(parryActivatedBuffDef))
{
body.AddBuff(parryActivatedBuffDef);
}
body.AddTimedBuff(Buffs.Immune, ParryStrike.invulnDuration);
}
private void CreateParryBuffs()
{
//IL_003f: 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_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
parryBuffDef = ScriptableObject.CreateInstance<BuffDef>();
((Object)parryBuffDef).name = "ParryBuffNux";
parryBuffDef.canStack = false;
parryBuffDef.isCooldown = false;
parryBuffDef.isDebuff = false;
parryBuffDef.buffColor = Color.cyan;
parryBuffDef.iconSprite = parryBuffIcon;
((Object)parryBuffDef).name = ((Object)parryBuffDef).name;
parryActivatedBuffDef = ScriptableObject.CreateInstance<BuffDef>();
((Object)parryActivatedBuffDef).name = "ParryActivatedBuffNux";
parryActivatedBuffDef.canStack = false;
parryActivatedBuffDef.isCooldown = false;
parryActivatedBuffDef.isDebuff = false;
parryActivatedBuffDef.buffColor = Color.cyan;
parryActivatedBuffDef.iconSprite = parryActivatedBuffIcon;
((Object)parryActivatedBuffDef).name = ((Object)parryActivatedBuffDef).name;
ContentAddition.AddBuffDef(parryBuffDef);
ContentAddition.AddBuffDef(parryActivatedBuffDef);
}
private void CreateParrySkill()
{
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Expected O, but got Unknown
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
parrySkillDef.skillName = "FocusedStrike";
((Object)parrySkillDef).name = "FocusedStrike";
parrySkillDef.skillNameToken = "Focused Strike";
parrySkillDef.skillDescriptionToken = "Ready your blade, release before an incoming strike to <style=cIsUtility>parry</style> enemy attacks for <style=cIsDamage>500%-1500% damage to all nearby enemies.</style>";
parrySkillDef.icon = parryIcon;
parrySkillDef.activationState = new SerializableEntityStateType(typeof(ParryHold));
parrySkillDef.activationStateMachineName = "Body";
parrySkillDef.interruptPriority = (InterruptPriority)2;
parrySkillDef.baseMaxStock = 1;
parrySkillDef.baseRechargeInterval = 5f;
parrySkillDef.rechargeStock = 1;
parrySkillDef.requiredStock = 1;
parrySkillDef.stockToConsume = 1;
parrySkillDef.dontAllowPastMaxStocks = false;
parrySkillDef.beginSkillCooldownOnSkillEnd = false;
parrySkillDef.canceledFromSprinting = false;
parrySkillDef.forceSprintDuringState = false;
parrySkillDef.fullRestockOnAssign = true;
parrySkillDef.resetCooldownTimerOnUse = false;
parrySkillDef.isCombatSkill = true;
parrySkillDef.mustKeyPress = false;
parrySkillDef.cancelSprintingOnActivation = true;
ContentAddition.AddSkillDef(parrySkillDef);
SkillFamily skillFamily = merc.GetComponent<SkillLocator>().secondary.skillFamily;
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val = new Variant
{
skillDef = parrySkillDef
};
((Variant)(ref val)).viewableNode = new Node(parrySkillDef.skillNameToken, false, (Node)null);
variants[num] = val;
}
public static NetworkSoundEventDef CreateNetworkSoundEventDef(string eventName)
{
NetworkSoundEventDef obj = ScriptableObject.CreateInstance<NetworkSoundEventDef>();
obj.akId = AkSoundEngine.GetIDFromString(eventName);
obj.eventName = eventName;
ContentAddition.AddNetworkSoundEventDef(obj);
return obj;
}
}
public class ParryHold : BaseState
{
public static float baseMinDuration = 0f;
public static string readySoundString = "Play_merc_sword_impact";
private bool playedSound;
private float minDuration;
public override void OnEnter()
{
((BaseState)this).OnEnter();
playedSound = false;
minDuration = baseMinDuration / base.attackSpeedStat;
((EntityState)this).PlayCrossfade("FullBody, Override", "GroundLight2", "GroundLight.playbackRate", 999f, 0.05f);
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
bool flag = ((EntityState)this).fixedAge >= minDuration;
if (flag && !playedSound)
{
playedSound = true;
Util.PlaySound(readySoundString, ((EntityState)this).gameObject);
}
if (((EntityState)this).isAuthority && (!Object.op_Implicit((Object)(object)((EntityState)this).inputBank) || !((EntityState)this).inputBank.skill2.down) && flag)
{
((EntityState)this).outer.SetNextState((EntityState)(object)new ParryStrike());
}
}
}
public class ParryStrike : BaseState
{
public static NetworkSoundEventDef parrySoundDef;
public static NetworkSoundEventDef evisSoundDef;
public static float totalDuration = 0.35f;
public static float attackDelay = 0.3f;
public static float invulnDuration = 1f;
public static float blastAttackDamageCoefficient = 5f;
public static float projectileGrazeRadius = 3f;
private bool hasFiredServer;
private bool hasFiredClient;
public override void OnEnter()
{
((BaseState)this).OnEnter();
if (NetworkServer.active)
{
CleanBuffsServer();
if (!((EntityState)this).characterBody.HasBuff(Parry.parryBuffDef))
{
((EntityState)this).characterBody.AddBuff(Parry.parryBuffDef);
}
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= attackDelay)
{
if (!hasFiredClient)
{
DoAttackClient();
}
if (NetworkServer.active && !hasFiredServer)
{
DoAttackServer();
}
}
else
{
CheckProjectileGrazeServer();
}
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= totalDuration)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
if (NetworkServer.active)
{
if (!hasFiredServer)
{
DoAttackServer();
}
CleanBuffsServer();
}
((EntityState)this).PlayAnimation("FullBody, Override", "UppercutExit");
((EntityState)this).OnExit();
}
private void CleanBuffsServer()
{
if (NetworkServer.active)
{
if (((EntityState)this).characterBody.HasBuff(Parry.parryActivatedBuffDef))
{
((EntityState)this).characterBody.RemoveBuff(Parry.parryActivatedBuffDef);
}
if (((EntityState)this).characterBody.HasBuff(Parry.parryBuffDef))
{
((EntityState)this).characterBody.RemoveBuff(Parry.parryBuffDef);
}
}
}
private void DoAttackClient()
{
hasFiredClient = true;
((EntityState)this).PlayCrossfade("FullBody, Override", "Uppercut", "Uppercut.playbackRate", 1f, totalDuration - attackDelay);
Util.PlaySound("Play_merc_m2_uppercut", ((EntityState)this).gameObject);
}
private void DoAttackServer()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: 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_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_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_021c: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_022d: Unknown result type (might be due to invalid IL or missing references)
//IL_023b: Unknown result type (might be due to invalid IL or missing references)
//IL_0246: Unknown result type (might be due to invalid IL or missing references)
//IL_024d: Unknown result type (might be due to invalid IL or missing references)
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_0257: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Unknown result type (might be due to invalid IL or missing references)
//IL_0271: Unknown result type (might be due to invalid IL or missing references)
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
//IL_0278: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_027f: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0289: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
//IL_028a: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: 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_00b5: 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_02a4: Unknown result type (might be due to invalid IL or missing references)
//IL_02af: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkServer.active || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
return;
}
hasFiredServer = true;
bool num = ((EntityState)this).characterBody.HasBuff(Parry.parryActivatedBuffDef);
DamageType val = (DamageType)32;
float num2 = blastAttackDamageCoefficient;
float num3 = 13f;
if (num)
{
if (Parry.parryFunEnabled.Value)
{
DeleteProjectilesServer(((EntityState)this).characterBody.radius + Parry.parryFunRadius.Value);
num2 *= Parry.parryFunDamageMultiplier.Value;
}
else
{
DeleteProjectilesServer(((EntityState)this).characterBody.radius + 13f);
num2 *= 3f;
num3 = 24f;
}
val = (DamageType)(val | 0x800000);
if (Object.op_Implicit((Object)(object)parrySoundDef))
{
EffectManager.SimpleSoundEffect(parrySoundDef.index, ((EntityState)this).characterBody.corePosition, true);
}
}
EffectManager.SimpleImpactEffect(Evis.hitEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.one, true);
EffectManager.SimpleImpactEffect(Evis.hitEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.zero, true);
EffectManager.SimpleImpactEffect(Evis.hitEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.left, true);
EffectManager.SimpleImpactEffect(Evis.hitEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.right, true);
Result val2 = ((!Parry.parryFunEnabled.Value) ? new BlastAttack
{
impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Evis.hitEffectPrefab),
attacker = ((EntityState)this).gameObject,
inflictor = ((EntityState)this).gameObject,
teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject),
baseDamage = base.damageStat * num2,
baseForce = 250f,
position = ((EntityState)this).characterBody.corePosition,
radius = ((EntityState)this).characterBody.radius + num3,
falloffModel = (FalloffModel)0,
damageType = DamageTypeCombo.op_Implicit(val),
attackerFiltering = (AttackerFiltering)2
}.Fire() : new BlastAttack
{
impactEffect = EffectCatalog.FindEffectIndexFromPrefab(Parry.parryFunImpact),
attacker = ((EntityState)this).gameObject,
inflictor = ((EntityState)this).gameObject,
teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject),
baseDamage = base.damageStat * num2,
baseForce = 10000f,
position = ((EntityState)this).characterBody.corePosition,
radius = ((EntityState)this).characterBody.radius + Parry.parryFunRadius.Value,
falloffModel = (FalloffModel)0,
damageType = DamageTypeCombo.op_Implicit(val),
attackerFiltering = (AttackerFiltering)2
}.Fire());
if (val2.hitCount > 0 && Object.op_Implicit((Object)(object)evisSoundDef))
{
EffectManager.SimpleSoundEffect(evisSoundDef.index, ((EntityState)this).characterBody.corePosition, true);
}
CleanBuffsServer();
}
private void CheckProjectileGrazeServer()
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkServer.active || projectileGrazeRadius <= 0f || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody) || !((EntityState)this).characterBody.HasBuff(Parry.parryBuffDef))
{
return;
}
Collider[] array = Physics.OverlapSphere(((EntityState)this).characterBody.corePosition, projectileGrazeRadius + ((EntityState)this).characterBody.radius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.projectile)).mask));
for (int i = 0; i < array.Length; i++)
{
ProjectileController componentInParent = ((Component)array[i]).GetComponentInParent<ProjectileController>();
if (Object.op_Implicit((Object)(object)componentInParent) && !componentInParent.cannotBeDeleted && (Object)(object)componentInParent.owner != (Object)(object)((EntityState)this).gameObject && (!Object.op_Implicit((Object)(object)componentInParent.teamFilter) || componentInParent.teamFilter.teamIndex != ((BaseState)this).GetTeam()))
{
bool flag = false;
ProjectileSimple component = ((Component)componentInParent).gameObject.GetComponent<ProjectileSimple>();
ProjectileCharacterController component2 = ((Component)componentInParent).gameObject.GetComponent<ProjectileCharacterController>();
if ((!Object.op_Implicit((Object)(object)component) || (Object.op_Implicit((Object)(object)component) && component.desiredForwardSpeed == 0f)) && !Object.op_Implicit((Object)(object)component2))
{
flag = true;
}
if (!flag)
{
Parry.HandleParryBuffsServer(((EntityState)this).characterBody);
break;
}
}
}
}
private void DeleteProjectilesServer(float radius)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
List<ProjectileController> list = new List<ProjectileController>();
Collider[] array = Physics.OverlapSphere(((EntityState)this).characterBody.corePosition, radius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.projectile)).mask));
for (int i = 0; i < array.Length; i++)
{
ProjectileController componentInParent = ((Component)array[i]).GetComponentInParent<ProjectileController>();
if (Object.op_Implicit((Object)(object)componentInParent) && !componentInParent.cannotBeDeleted && (Object)(object)componentInParent.owner != (Object)(object)((EntityState)this).gameObject && (!Object.op_Implicit((Object)(object)componentInParent.teamFilter) || componentInParent.teamFilter.teamIndex != ((BaseState)this).GetTeam()))
{
bool flag = false;
ProjectileSimple component = ((Component)componentInParent).gameObject.GetComponent<ProjectileSimple>();
ProjectileCharacterController component2 = ((Component)componentInParent).gameObject.GetComponent<ProjectileCharacterController>();
if ((!Object.op_Implicit((Object)(object)component) || (Object.op_Implicit((Object)(object)component) && component.desiredForwardSpeed == 0f)) && !Object.op_Implicit((Object)(object)component2))
{
flag = true;
}
if (!flag && !list.Contains(componentInParent))
{
list.Add(componentInParent);
}
}
}
int count = list.Count;
for (int j = 0; j < count; j++)
{
GameObject gameObject = ((Component)list[j]).gameObject;
if (Object.op_Implicit((Object)(object)gameObject))
{
EntityState.Destroy((Object)(object)gameObject);
}
}
}
}
}