using System;
using System.Collections.Generic;
using System.Diagnostics;
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 EntityStates;
using EntityStates.BeetleGuardMonster;
using EntityStates.Bell.BellWeapon;
using EntityStates.ImpMonster;
using EntityStates.LemurianMonster;
using EntityStates.LunarWisp;
using EntityStates.MagmaWorm;
using EntityStates.Wisp1Monster;
using HG;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using On.EntityStates.LemurianMonster;
using On.EntityStates.LunarWisp;
using On.EntityStates.Wisp1Monster;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.CharacterAI;
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.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("EnemiesPlus")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a6ca0a77f3c426debb87d97738f624a9da9fef75")]
[assembly: AssemblyProduct("EnemiesPlus")]
[assembly: AssemblyTitle("EnemiesPlus")]
[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 EnemiesPlus
{
[BepInPlugin("com.Nuxlar.EnemiesPlus", "EnemiesPlus", "1.0.5")]
public class EnemiesPlus : BaseUnityPlugin
{
private GameObject beetleMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleMaster.prefab").WaitForCompletion();
private GameObject beetleBody = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleBody.prefab").WaitForCompletion();
private GameObject lemMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/LemurianMaster.prefab").WaitForCompletion();
private GameObject lemBody = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/LemurianBody.prefab").WaitForCompletion();
private GameObject impMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Imp/ImpMaster.prefab").WaitForCompletion();
private GameObject impBody = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Imp/ImpBody.prefab").WaitForCompletion();
private GameObject beetleQueenSpit = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleQueenSpit.prefab").WaitForCompletion();
private GameObject beetleQueenAcid = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleQueenAcid.prefab").WaitForCompletion();
public static GameObject beetleSpit = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleQueenSpit.prefab").WaitForCompletion(), "BeetleSpitProjectileNux");
public static GameObject beetleSpitGhost = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleQueenSpitGhost.prefab").WaitForCompletion(), "BeetleSpitProjectileGhostNux");
public static GameObject beetleSpitExplosion = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleSpitExplosion.prefab").WaitForCompletion(), "BeetleSpitExplosionNux");
public static GameObject voidSpike = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpVoidspikeProjectile.prefab").WaitForCompletion(), "VoidSpikeNux");
private SpawnCard greaterWispCard = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/GreaterWisp/cscGreaterWisp.asset").WaitForCompletion();
private SpawnCard bellCard = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/Bell/cscBell.asset").WaitForCompletion();
private BuffDef beetleJuice = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Beetle/bdBeetleJuice.asset").WaitForCompletion();
private GameObject beetleGuard = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleGuardBody.prefab").WaitForCompletion();
private GameObject beetleGuardMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Beetle/BeetleGuardMaster.prefab").WaitForCompletion();
private BuffDef teamWarcryBuff = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/TeamWarCry/bdTeamWarCry.asset").WaitForCompletion();
private GameObject frenzyAura = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/TeamWarCry/TeamWarCryAura.prefab").WaitForCompletion(), "BGFrenzyAura");
private static Material frenzyMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/WardOnLevel/matWarbannerBuffBillboard.mat").WaitForCompletion();
private GameObject bellMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bell/BellMaster.prefab").WaitForCompletion();
private GameObject bell = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bell/BellBody.prefab").WaitForCompletion();
private Sprite fireBuffSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffOnFireIcon.tif").WaitForCompletion();
private GameObject lunarGolemMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/LunarGolemMaster.prefab").WaitForCompletion();
private GameObject lunarGolem = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarGolem/LunarGolemBody.prefab").WaitForCompletion();
private GameObject lunarWisp = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispBody.prefab").WaitForCompletion();
private GameObject lunarWispMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispMaster.prefab").WaitForCompletion();
private GameObject lunarWispTrackingBomb = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarWisp/LunarWispTrackingBomb.prefab").WaitForCompletion(), "LunarWispOrbNux");
private GameObject magmaWorm = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/MagmaWorm/MagmaWormBody.prefab").WaitForCompletion();
private GameObject electricWorm = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElectricWorm/ElectricWormBody.prefab").WaitForCompletion();
private GameObject magmaWormMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/MagmaWorm/MagmaWormMaster.prefab").WaitForCompletion();
private GameObject electricWormMaster = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElectricWorm/ElectricWormMaster.prefab").WaitForCompletion();
public static GameObject helfireIgniteEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/BurnNearby/HelfireIgniteEffect.prefab").WaitForCompletion();
public static BuffDef frenzyBuff;
public static BuffDef helfireBuff;
private ModdedDamageType beetleJuiceDT;
private ModdedDamageType helfireDT;
private DotIndex helfireDotIdx;
public static ConfigEntry<bool> enableBeetleChanges;
public static ConfigEntry<bool> enableBeetleFamilyChanges;
public static ConfigEntry<bool> enableBeetleGuardChanges;
public static ConfigEntry<bool> enableBeetleQueenChanges;
public static ConfigEntry<bool> enableLemurianChanges;
public static ConfigEntry<bool> enableWispChanges;
public static ConfigEntry<bool> enableGreaterWispChanges;
public static ConfigEntry<bool> enableBellChanges;
public static ConfigEntry<bool> enableImpChanges;
public static ConfigEntry<bool> enableWormChanges;
public static ConfigEntry<bool> enableLunarGolemChanges;
public static ConfigEntry<bool> enableLunarWispChanges;
private static ConfigFile EPConfig { 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_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_0212: Unknown result type (might be due to invalid IL or missing references)
//IL_0217: 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_01db: Unknown result type (might be due to invalid IL or missing references)
//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: 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_0255: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_0276: Unknown result type (might be due to invalid IL or missing references)
//IL_0280: Unknown result type (might be due to invalid IL or missing references)
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0312: Unknown result type (might be due to invalid IL or missing references)
//IL_031c: Unknown result type (might be due to invalid IL or missing references)
//IL_033d: Unknown result type (might be due to invalid IL or missing references)
//IL_0347: Unknown result type (might be due to invalid IL or missing references)
//IL_0368: Unknown result type (might be due to invalid IL or missing references)
//IL_0372: Unknown result type (might be due to invalid IL or missing references)
//IL_0393: Unknown result type (might be due to invalid IL or missing references)
//IL_039d: Unknown result type (might be due to invalid IL or missing references)
//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0593: Unknown result type (might be due to invalid IL or missing references)
//IL_046c: Unknown result type (might be due to invalid IL or missing references)
//IL_0471: Unknown result type (might be due to invalid IL or missing references)
//IL_05bd: Unknown result type (might be due to invalid IL or missing references)
//IL_05ca: Unknown result type (might be due to invalid IL or missing references)
//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0603: Unknown result type (might be due to invalid IL or missing references)
//IL_065f: Unknown result type (might be due to invalid IL or missing references)
//IL_0664: Unknown result type (might be due to invalid IL or missing references)
//IL_0532: Unknown result type (might be due to invalid IL or missing references)
//IL_0b44: Unknown result type (might be due to invalid IL or missing references)
//IL_0b4e: Expected O, but got Unknown
//IL_0b55: Unknown result type (might be due to invalid IL or missing references)
//IL_0b5f: Expected O, but got Unknown
//IL_0b66: Unknown result type (might be due to invalid IL or missing references)
//IL_0b70: Expected O, but got Unknown
//IL_0b77: Unknown result type (might be due to invalid IL or missing references)
//IL_0b81: Expected O, but got Unknown
//IL_0b88: Unknown result type (might be due to invalid IL or missing references)
//IL_0b92: Expected O, but got Unknown
//IL_0b99: Unknown result type (might be due to invalid IL or missing references)
//IL_0ba3: Expected O, but got Unknown
//IL_0baa: Unknown result type (might be due to invalid IL or missing references)
//IL_0bb4: Expected O, but got Unknown
//IL_0bbb: Unknown result type (might be due to invalid IL or missing references)
//IL_0bc5: Expected O, but got Unknown
//IL_0bcc: Unknown result type (might be due to invalid IL or missing references)
//IL_0bd6: Expected O, but got Unknown
//IL_0bdd: Unknown result type (might be due to invalid IL or missing references)
//IL_0be7: Expected O, but got Unknown
//IL_0bee: Unknown result type (might be due to invalid IL or missing references)
//IL_0bf8: Expected O, but got Unknown
//IL_0bff: Unknown result type (might be due to invalid IL or missing references)
//IL_0c05: Expected O, but got Unknown
//IL_0c18: Unknown result type (might be due to invalid IL or missing references)
//IL_0c1d: Unknown result type (might be due to invalid IL or missing references)
//IL_0c29: Unknown result type (might be due to invalid IL or missing references)
//IL_0c33: Expected O, but got Unknown
//IL_0c3a: Unknown result type (might be due to invalid IL or missing references)
//IL_0c44: Expected O, but got Unknown
//IL_0abb: Unknown result type (might be due to invalid IL or missing references)
//IL_0838: Unknown result type (might be due to invalid IL or missing references)
//IL_083d: Unknown result type (might be due to invalid IL or missing references)
//IL_071d: Unknown result type (might be due to invalid IL or missing references)
//IL_0b12: Unknown result type (might be due to invalid IL or missing references)
//IL_0b32: Unknown result type (might be due to invalid IL or missing references)
//IL_0b38: Unknown result type (might be due to invalid IL or missing references)
//IL_08a4: Unknown result type (might be due to invalid IL or missing references)
//IL_089a: Unknown result type (might be due to invalid IL or missing references)
//IL_092c: Unknown result type (might be due to invalid IL or missing references)
//IL_0931: Unknown result type (might be due to invalid IL or missing references)
//IL_0998: Unknown result type (might be due to invalid IL or missing references)
//IL_098e: Unknown result type (might be due to invalid IL or missing references)
EPConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.EnemiesPlus.cfg", true);
enableBeetleFamilyChanges = EPConfig.Bind<bool>("General", "Enable Beetle Family Changes", true, "Makes BeetleJuice stackable");
enableBeetleChanges = EPConfig.Bind<bool>("General", "Enable Beetle Changes", true, "Adds projectile attack to beetles");
enableBeetleGuardChanges = EPConfig.Bind<bool>("General", "Enable Beetle Guard Changes", true, "Adds rally cry to beetle guards");
enableBeetleQueenChanges = EPConfig.Bind<bool>("General", "Enable Beetle Queen Changes", true, "Adds BeetleJuice to Beetle Queen attacks and spit explodes mid air");
enableLemurianChanges = EPConfig.Bind<bool>("General", "Enable Lemurian Changes", true, "Adds slight leap to Lemurian bite");
enableWispChanges = EPConfig.Bind<bool>("General", "Enable Wisp Changes", true, "Increases Wisp bullet count");
enableGreaterWispChanges = EPConfig.Bind<bool>("General", "Enable Greater Wisp Changes", true, "Decreases Greater Wisp credit cost");
enableBellChanges = EPConfig.Bind<bool>("General", "Enable Brass Contraption Changes", true, "Adds a new ability, BuffBeam to Brass Contraptions");
enableImpChanges = EPConfig.Bind<bool>("General", "Enable Imp Changes", true, "Changes Imp's primary attack to be ranged");
enableWormChanges = EPConfig.Bind<bool>("General", "Enable Worm Changes", true, "Changes Worms to have better targeting and adds a leap attack");
enableLunarGolemChanges = EPConfig.Bind<bool>("General", "Enable Lunar Golem Changes", true, "Adds a new ability, Lunar Shell to Lunar Golems");
enableLunarWispChanges = EPConfig.Bind<bool>("General", "Enable Lunar Wisp Changes", true, "Increases Lunar Wisp movement speed and acceleration, orb applies helfire");
if (enableBeetleFamilyChanges.Value)
{
beetleJuice.canStack = true;
}
beetleJuiceDT = DamageAPI.ReserveDamageType();
ModdedDamageTypeHolderComponent val = beetleSpit.AddComponent<ModdedDamageTypeHolderComponent>();
if (enableBeetleQueenChanges.Value)
{
beetleQueenSpit.GetComponent<ProjectileImpactExplosion>().destroyOnEnemy = true;
val.Add(beetleJuiceDT);
beetleQueenSpit.AddComponent<ModdedDamageTypeHolderComponent>().Add(beetleJuiceDT);
beetleQueenAcid.AddComponent<ModdedDamageTypeHolderComponent>().Add(beetleJuiceDT);
}
helfireDT = DamageAPI.ReserveDamageType();
lunarWispTrackingBomb.AddComponent<ModdedDamageTypeHolderComponent>().Add(helfireDT);
if (enableGreaterWispChanges.Value)
{
greaterWispCard.directorCreditCost = 120;
}
bool flag = default(bool);
ContentAddition.AddEntityState<BeetleSpit>(ref flag);
ContentAddition.AddEntityState<SpikeSlash>(ref flag);
ContentAddition.AddEntityState<RallyCry>(ref flag);
ContentAddition.AddEntityState<BuffBeamPlus>(ref flag);
Transform transform = beetleSpit.transform;
transform.localScale /= 2f;
beetleSpit.GetComponent<Rigidbody>().useGravity = false;
beetleSpit.GetComponent<ProjectileController>().ghostPrefab = beetleSpitGhost;
ProjectileImpactExplosion component = beetleSpit.GetComponent<ProjectileImpactExplosion>();
component.impactEffect = beetleSpitExplosion;
((ProjectileExplosion)component).childrenProjectilePrefab = null;
component.destroyOnEnemy = true;
((ProjectileExplosion)component).fireChildren = false;
((ProjectileExplosion)component).blastRadius = 2f;
Transform transform2 = beetleSpitGhost.transform;
transform2.localScale /= 2f;
Transform child = beetleSpitGhost.transform.GetChild(1);
child.localScale /= 2f;
Transform child2 = beetleSpitGhost.transform.GetChild(0).GetChild(0);
child2.localScale /= 2f;
Transform child3 = beetleSpitGhost.transform.GetChild(1).GetChild(0);
child3.localScale /= 2f;
Transform child4 = beetleSpitGhost.transform.GetChild(1).GetChild(1);
child4.localScale /= 2f;
Transform child5 = beetleSpitExplosion.transform.GetChild(0);
child5.localScale /= 2f;
foreach (Transform item in beetleSpitExplosion.transform.GetChild(0))
{
item.localScale /= 2f;
}
ContentAddition.AddEffect(beetleSpitExplosion);
if (enableBeetleChanges.Value)
{
SkillLocator component2 = beetleBody.GetComponent<SkillLocator>();
component2.primary.skillFamily.variants[0].skillDef.activationState = new SerializableEntityStateType(typeof(BeetleSpit));
component2.primary.skillFamily.variants[0].skillDef.baseRechargeInterval = 3f;
component2.secondary.skillFamily.variants[0].skillDef.baseMaxStock = 0;
AISkillDriver[] components = beetleMaster.GetComponents<AISkillDriver>();
foreach (AISkillDriver val3 in components)
{
switch (val3.customName)
{
case "HeadbuttOffNodegraph":
val3.minDistance = 5f;
val3.maxDistance = 20f;
break;
case "ChaseOffNodegraph":
val3.maxDistance = 5f;
val3.movementType = (MovementType)3;
break;
case "FollowNodeGraphToTarget":
val3.minDistance = 15f;
break;
}
}
}
SetupBGBuff();
frenzyAura.GetComponent<DestroyOnTimer>().duration = 8f;
((Renderer)((Component)frenzyAura.transform.GetChild(0)).GetComponent<ParticleSystemRenderer>()).sharedMaterial = frenzyMat;
ContentAddition.AddEntityState<RallyCry>(ref flag);
if (enableBeetleGuardChanges.Value)
{
AISkillDriver obj = beetleGuardMaster.AddComponent<AISkillDriver>();
obj.customName = "RallyCry";
obj.skillSlot = (SkillSlot)2;
obj.requireSkillReady = true;
obj.movementType = (MovementType)0;
beetleGuard.GetComponent<SkillLocator>().utility.skillFamily.variants[0].skillDef.activationState = new SerializableEntityStateType(typeof(RallyCry));
}
SetupHelfireBuff();
if (enableBellChanges.Value)
{
BuffBeamSetup();
}
if (enableImpChanges.Value)
{
SkillDef skillDef = impBody.GetComponent<SkillLocator>().primary.skillFamily.variants[0].skillDef;
skillDef.activationState = new SerializableEntityStateType(typeof(SpikeSlash));
skillDef.baseRechargeInterval = 5f;
AISkillDriver[] components = impMaster.GetComponents<AISkillDriver>();
foreach (AISkillDriver val4 in components)
{
switch (val4.customName)
{
case "Slash":
val4.minDistance = 15f;
val4.maxDistance = 45f;
break;
case "LeaveNodegraph":
val4.minDistance = 0f;
val4.maxDistance = 15f;
val4.shouldSprint = true;
val4.movementType = (MovementType)3;
break;
case "StrafeBecausePrimaryIsntReady":
val4.minDistance = 15f;
break;
case "BlinkBecauseClose":
val4.minDistance = 25f;
val4.maxDistance = 45f;
break;
case "PathToTarget":
val4.minDistance = 15f;
break;
}
}
}
if (enableLemurianChanges.Value)
{
lemBody.GetComponent<SkillLocator>().secondary.skillFamily.variants[0].skillDef.baseRechargeInterval = 1f;
}
voidSpike.GetComponent<ProjectileImpactExplosion>().destroyOnWorld = true;
if (enableWormChanges.Value)
{
ParticleSystem[] componentsInChildren = ((Component)magmaWorm.GetComponent<ModelLocator>().modelTransform).gameObject.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem obj2 in componentsInChildren)
{
obj2.startSize *= 2f;
}
SkillDef skillDef2 = magmaWorm.GetComponent<SkillLocator>().utility.skillFamily.variants[0].skillDef;
skillDef2.activationState = new SerializableEntityStateType(typeof(Leap));
skillDef2.baseRechargeInterval = 60f;
skillDef2.activationStateMachineName = "Weapon";
AISkillDriver[] components = magmaWormMaster.GetComponents<AISkillDriver>();
foreach (AISkillDriver val5 in components)
{
if (val5.customName == "Blink")
{
val5.shouldSprint = true;
val5.minDistance = 0f;
val5.aimType = (AimType)1;
}
else
{
val5.skillSlot = (SkillSlot)(-1);
}
}
componentsInChildren = ((Component)electricWorm.GetComponent<ModelLocator>().modelTransform).gameObject.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem obj3 in componentsInChildren)
{
obj3.startSize *= 2f;
}
SkillDef skillDef3 = electricWorm.GetComponent<SkillLocator>().utility.skillFamily.variants[0].skillDef;
skillDef3.activationState = new SerializableEntityStateType(typeof(Leap));
skillDef3.baseRechargeInterval = 60f;
skillDef3.activationStateMachineName = "Weapon";
components = electricWormMaster.GetComponents<AISkillDriver>();
foreach (AISkillDriver val6 in components)
{
if (val6.customName == "Blink")
{
val6.shouldSprint = true;
val6.minDistance = 0f;
val6.aimType = (AimType)1;
}
else
{
val6.skillSlot = (SkillSlot)(-1);
}
}
}
if (enableLunarWispChanges.Value)
{
CharacterBody component3 = lunarWisp.GetComponent<CharacterBody>();
component3.baseMoveSpeed = 20f;
component3.baseAcceleration = 20f;
AISkillDriver[] components = lunarWispMaster.GetComponents<AISkillDriver>();
foreach (AISkillDriver val7 in components)
{
switch (val7.customName)
{
case "Back Up":
val7.maxDistance = 15f;
break;
case "Minigun":
val7.minDistance = 15f;
val7.maxDistance = 75f;
break;
case "Chase":
val7.minDistance = 30f;
val7.shouldSprint = true;
break;
}
}
}
if (enableLunarGolemChanges.Value)
{
lunarGolem.GetComponent<SetStateOnHurt>().canBeHitStunned = false;
lunarGolem.GetComponent<SkillLocator>().secondary.skillFamily.variants[0].skillDef.interruptPriority = (InterruptPriority)6;
(from driver in lunarGolemMaster.GetComponents<AISkillDriver>()
where driver.customName == "StrafeAndShoot"
select driver).First().requireSkillReady = true;
AISkillDriver obj4 = lunarGolemMaster.AddComponent<AISkillDriver>();
obj4.customName = "LunarShell";
obj4.skillSlot = (SkillSlot)1;
obj4.requireSkillReady = true;
obj4.requireEquipmentReady = false;
obj4.driverUpdateTimerOverride = 3f;
obj4.moveTargetType = (TargetType)0;
obj4.movementType = (MovementType)1;
}
CharacterMaster.OnBodyStart += new hook_OnBodyStart(RearrangeSkillDrivers);
CharacterBody.OnBuffFirstStackGained += new hook_OnBuffFirstStackGained(AddHelfireEffect);
CharacterBody.OnBuffFinalStackLost += new hook_OnBuffFinalStackLost(RemoveHelfireEffect);
Bite.OnEnter += new hook_OnEnter(BiteLeap);
FireEmbers.OnEnter += new hook_OnEnter(IncreaseWispEmbers);
SeekingBomb.OnEnter += new hook_OnEnter(ReplaceSeekingBombPrefab);
WormBodyPositionsDriver.FixedUpdateServer += new hook_FixedUpdateServer(RemoveRandomTurns);
GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(AddBeetleJuiceStack);
GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(ApplyHelfire);
HealthComponent.Heal += new hook_Heal(PreventHelfireHeal);
CharacterBody.UpdateAllTemporaryVisualEffects += new hook_UpdateAllTemporaryVisualEffects(AddFrenzyVFX);
CustomDotBehaviour val8 = new CustomDotBehaviour(AddPercentHelfireDamage);
helfireDotIdx = DotAPI.RegisterDotDef(0.2f, 0f, (DamageColorIndex)7, helfireBuff, val8, (CustomDotVisual)null);
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(AddFrenzyBehavior);
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(AddLunarShellBehavior);
}
private void RemoveRandomTurns(orig_FixedUpdateServer orig, WormBodyPositionsDriver self)
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: 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_0161: 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_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_0238: Unknown result type (might be due to invalid IL or missing references)
//IL_023d: Unknown result type (might be due to invalid IL or missing references)
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0258: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: Unknown result type (might be due to invalid IL or missing references)
//IL_0269: 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_0283: Unknown result type (might be due to invalid IL or missing references)
//IL_028b: Unknown result type (might be due to invalid IL or missing references)
//IL_0295: 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_02a8: Unknown result type (might be due to invalid IL or missing references)
//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
//IL_033f: 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_01ed: Unknown result type (might be due to invalid IL or missing references)
//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: 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)
if (!enableWormChanges.Value)
{
orig.Invoke(self);
return;
}
CharacterBody component = ((Component)self).gameObject.GetComponent<CharacterBody>();
Vector3 val = self.referenceTransform.position;
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.master) && ((object)(from machine in ((Component)self).gameObject.GetComponents<EntityStateMachine>()
where machine.customName == "Weapon"
select machine).First().state).GetType() != typeof(Leap))
{
BaseAI component2 = component.masterObject.GetComponent<BaseAI>();
if (Object.op_Implicit((Object)(object)component2) && component2.currentEnemy != null && (Object)(object)component2.currentEnemy.characterBody != (Object)null)
{
val = component2.currentEnemy.characterBody.corePosition;
}
}
float speedMultiplier = self.wormBodyPositions.speedMultiplier;
Vector3 val2 = val - self.chaserPosition;
Vector3 normalized = ((Vector3)(ref val2)).normalized;
float num = (float)((self.chaserIsUnderground ? ((double)self.maxTurnSpeed) : ((double)self.maxTurnSpeed * (double)self.turnRateCoefficientAboveGround)) * (Math.PI / 180.0));
Vector3 val3 = Vector3.RotateTowards(new Vector3(self.chaserVelocity.x, 0f, self.chaserVelocity.z), new Vector3(normalized.x, 0f, normalized.z) * speedMultiplier, num * Time.fixedDeltaTime, float.PositiveInfinity);
val3 = ((Vector3)(ref val3)).normalized * speedMultiplier;
float num2 = val.y - self.chaserPosition.y;
float num3 = (0f - self.chaserVelocity.y) * self.yDamperConstant;
float num4 = num2 * self.ySpringConstant;
if (self.allowShoving && (double)Mathf.Abs(self.chaserVelocity.y) < (double)self.yShoveVelocityThreshold && (double)num2 > (double)self.yShovePositionThreshold)
{
val2 = self.chaserVelocity;
self.chaserVelocity = Vector3Utils.XAZ(ref val2, self.chaserVelocity.y + self.yShoveForce * Time.fixedDeltaTime);
}
if (!self.chaserIsUnderground)
{
num4 *= self.wormForceCoefficientAboveGround;
num3 *= self.wormForceCoefficientAboveGround;
}
val2 = self.chaserVelocity;
self.chaserVelocity = Vector3Utils.XAZ(ref val2, self.chaserVelocity.y + (num4 + num3) * Time.fixedDeltaTime);
self.chaserVelocity += Physics.gravity * Time.fixedDeltaTime;
self.chaserVelocity = new Vector3(val3.x, self.chaserVelocity.y, val3.z);
self.chaserPosition += self.chaserVelocity * Time.fixedDeltaTime;
self.chasePositionVisualizer.position = self.chaserPosition;
self.chaserIsUnderground = 0.0 - (double)num2 < (double)self.wormBodyPositions.undergroundTestYOffset;
self.keyFrameGenerationTimer -= Time.deltaTime;
if (!((double)self.keyFrameGenerationTimer > 0.0))
{
self.keyFrameGenerationTimer = self.keyFrameGenerationInterval;
self.wormBodyPositions.AttemptToGenerateKeyFrame(self.wormBodyPositions.GetSynchronizedTimeStamp() + self.wormBodyPositions.followDelay, self.chaserPosition, self.chaserVelocity);
}
}
private void ReplaceSeekingBombPrefab(orig_OnEnter orig, SeekingBomb self)
{
if (enableLunarWispChanges.Value)
{
SeekingBomb.projectilePrefab = lunarWispTrackingBomb;
}
orig.Invoke(self);
}
private void AddHelfireEffect(orig_OnBuffFirstStackGained orig, CharacterBody self, BuffDef buffDef)
{
orig.Invoke(self, buffDef);
if ((Object)(object)buffDef == (Object)(object)helfireBuff)
{
((Component)self).gameObject.AddComponent<NuxHelfireEffectController>();
}
}
private void RemoveHelfireEffect(orig_OnBuffFinalStackLost orig, CharacterBody self, BuffDef buffDef)
{
orig.Invoke(self, buffDef);
if ((Object)(object)buffDef == (Object)(object)helfireBuff)
{
Object.Destroy((Object)(object)((Component)self).gameObject.GetComponent<NuxHelfireEffectController>());
}
}
private void AddPercentHelfireDamage(DotController self, DotStack dotStack)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: 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_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
if (dotStack.dotIndex == helfireDotIdx && Object.op_Implicit((Object)(object)self.victimBody) && Object.op_Implicit((Object)(object)self.victimBody.healthComponent))
{
dotStack.damageType = (DamageType)(dotStack.damageType | 1);
dotStack.damage = self.victimBody.healthComponent.fullHealth * 0.1f / 10f * 0.2f;
}
}
private void AddLunarShellBehavior(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && sender.HasBuff(Buffs.LunarShell))
{
args.armorAdd += 200f;
}
}
private void BuffBeamSetup()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
SkillDef val = ScriptableObject.CreateInstance<SkillDef>();
val.skillName = "BuffBeam";
((Object)val).name = "BuffBeam";
val.skillNameToken = "BuffBeam";
val.skillDescriptionToken = "Creates a beam to a nearby ally and makes them invincible";
val.activationState = new SerializableEntityStateType(typeof(BuffBeamPlus));
val.activationStateMachineName = "Weapon";
val.interruptPriority = (InterruptPriority)6;
val.baseMaxStock = 1;
val.baseRechargeInterval = 30f;
val.rechargeStock = 1;
val.requiredStock = 1;
val.stockToConsume = 1;
val.dontAllowPastMaxStocks = true;
val.beginSkillCooldownOnSkillEnd = true;
val.canceledFromSprinting = false;
val.forceSprintDuringState = false;
val.fullRestockOnAssign = true;
val.resetCooldownTimerOnUse = false;
val.isCombatSkill = true;
val.mustKeyPress = false;
val.cancelSprintingOnActivation = false;
ContentAddition.AddSkillDef(val);
GenericSkill val2 = bell.AddComponent<GenericSkill>();
val2.skillName = "BuffBeam";
SkillFamily val3 = ScriptableObject.CreateInstance<SkillFamily>();
((Object)val3).name = "BellBuffBeamFamily";
val3.variants = (Variant[])(object)new Variant[1]
{
new Variant
{
skillDef = val
}
};
val2._skillFamily = val3;
ContentAddition.AddSkillFamily(val3);
bell.GetComponent<SkillLocator>().secondary = val2;
AISkillDriver obj = bellMaster.AddComponent<AISkillDriver>();
obj.customName = "BuffBeam";
obj.skillSlot = (SkillSlot)1;
obj.requireSkillReady = true;
obj.requireEquipmentReady = false;
obj.maxUserHealthFraction = 0.8f;
obj.moveTargetType = (TargetType)0;
}
private void IncreaseWispEmbers(orig_OnEnter orig, FireEmbers self)
{
if (enableWispChanges.Value)
{
FireEmbers.damageCoefficient = 0.75f;
FireEmbers.bulletCount = 6;
}
orig.Invoke(self);
}
private void SetupBGBuff()
{
//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)
frenzyBuff = ScriptableObject.CreateInstance<BuffDef>();
((Object)frenzyBuff).name = "BGFrenzy";
frenzyBuff.canStack = false;
frenzyBuff.isCooldown = false;
frenzyBuff.isDebuff = false;
frenzyBuff.buffColor = Color.yellow;
frenzyBuff.iconSprite = teamWarcryBuff.iconSprite;
((Object)frenzyBuff).name = ((Object)frenzyBuff).name;
ContentAddition.AddBuffDef(frenzyBuff);
}
private void SetupHelfireBuff()
{
//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)
helfireBuff = ScriptableObject.CreateInstance<BuffDef>();
((Object)helfireBuff).name = "Helfire";
helfireBuff.canStack = true;
helfireBuff.isCooldown = false;
helfireBuff.isDebuff = true;
helfireBuff.buffColor = Color.cyan;
helfireBuff.iconSprite = fireBuffSprite;
((Object)helfireBuff).name = ((Object)helfireBuff).name;
ContentAddition.AddBuffDef(helfireBuff);
}
private void RearrangeSkillDrivers(orig_OnBodyStart orig, CharacterMaster self, CharacterBody body)
{
orig.Invoke(self, body);
if (((Object)body).name == "BeetleGuardBody(Clone)" && enableBeetleGuardChanges.Value)
{
int num = 2;
AISkillDriver[] skillDrivers = ((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers;
if (num >= 0 && num < skillDrivers.Length)
{
AISkillDriver val = skillDrivers[num];
skillDrivers[num] = skillDrivers[^1];
skillDrivers[^1] = val;
}
((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers = skillDrivers;
}
if (((Object)body).name == "BellBody(Clone)" && enableBellChanges.Value)
{
int num2 = 2;
AISkillDriver[] skillDrivers2 = ((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers;
if (num2 >= 0 && num2 < skillDrivers2.Length)
{
AISkillDriver val2 = skillDrivers2[num2];
skillDrivers2[num2] = skillDrivers2[^1];
skillDrivers2[^1] = val2;
}
((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers = skillDrivers2;
}
if (((Object)body).name == "LunarGolemBody(Clone)" && enableLunarGolemChanges.Value)
{
int num3 = 0;
AISkillDriver[] array = ((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers;
if (num3 >= 0 && num3 < array.Length)
{
List<AISkillDriver> list = new List<AISkillDriver>();
list.Add(array[^1]);
for (int i = 0; i < array.Length - 1; i++)
{
if (i != array.Length - 1)
{
list.Add(array[i]);
}
}
array = list.ToArray();
}
((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers = array;
}
if (!(((Object)body).name == "MagmaWormBody(Clone)"))
{
return;
}
int num4 = 0;
AISkillDriver[] array2 = ((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers;
if (num4 >= 0 && num4 < array2.Length)
{
List<AISkillDriver> list2 = new List<AISkillDriver>();
list2.Add(array2[1]);
for (int j = 0; j < array2.Length - 1; j++)
{
if (j != array2.Length - 1)
{
list2.Add(array2[j]);
}
}
array2 = list2.ToArray();
}
((Component)self).gameObject.GetComponent<BaseAI>().skillDrivers = array2;
}
private void AddFrenzyVFX(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self)
{
orig.Invoke(self);
self.UpdateSingleTemporaryVisualEffect(ref self.teamWarCryEffectInstance, frenzyAura, self.bestFitRadius, self.HasBuff(frenzyBuff), "HeadCenter");
}
private void AddFrenzyBehavior(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender) && sender.HasBuff(frenzyBuff))
{
args.attackSpeedMultAdd += 0.25f;
args.moveSpeedMultAdd += 0.25f;
}
}
private float PreventHelfireHeal(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procChainMask, bool nonRegen)
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)self.body) && self.body.HasBuff(helfireBuff))
{
return 0f;
}
return orig.Invoke(self, amount, procChainMask, nonRegen);
}
private void ApplyHelfire(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, damageInfo, victim);
if (Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)victim) && !damageInfo.rejected)
{
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
CharacterBody component2 = victim.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2) && (component.HasBuff(Buffs.LunarShell) || DamageAPI.HasModdedDamageType(damageInfo, helfireDT)))
{
DotController.InflictDot(victim, damageInfo.attacker, helfireDotIdx, 10f, 1f, (uint?)null);
}
}
}
private void AddBeetleJuiceStack(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_000c: 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_006b: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, damageInfo, victim);
if (!DamageAPI.HasModdedDamageType(damageInfo, beetleJuiceDT) || !Object.op_Implicit((Object)(object)victim) || damageInfo.rejected)
{
return;
}
CharacterBody component = victim.GetComponent<CharacterBody>();
if (!Object.op_Implicit((Object)(object)component))
{
return;
}
component.AddTimedBuff(beetleJuice, 5f);
foreach (TimedBuff timedBuff in component.timedBuffs)
{
if (timedBuff.buffIndex == Buffs.BeetleJuice.buffIndex)
{
timedBuff.timer = 5f;
}
}
}
private void BiteLeap(orig_OnEnter orig, Bite self)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: 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_006a: 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_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self);
if (enableLemurianChanges.Value)
{
Ray aimRay = ((BaseState)self).GetAimRay();
Vector3 val = ((Ray)(ref aimRay)).direction;
val.y = 0f;
float magnitude = ((Vector3)(ref val)).magnitude;
if ((double)magnitude > 0.0)
{
val /= magnitude;
}
CharacterMotor characterMotor = ((EntityState)self).characterMotor;
Vector3 velocity = val * ((EntityState)self).characterBody.moveSpeed * 2f;
velocity.y = ((EntityState)self).characterBody.jumpPower * 0.25f;
characterMotor.velocity = velocity;
((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground();
}
}
}
public class BeetleSpit : BaseState
{
public static float baseDuration = 1f;
public static float damageCoefficient;
public static string attackSoundString = "Play_beetle_worker_attack";
private GameObject projectilePrefab = EnemiesPlus.beetleSpit;
private bool hasFired;
private float stopwatch;
private float duration;
public override void OnEnter()
{
((BaseState)this).OnEnter();
stopwatch = 0f;
duration = baseDuration / base.attackSpeedStat;
((EntityState)this).GetModelTransform();
Util.PlayAttackSpeedSound(attackSoundString, ((EntityState)this).gameObject, 2f);
((EntityState)this).PlayCrossfade("Body", "EmoteSurprise", "Headbutt.playbackRate", duration, 0.1f);
}
public override void FixedUpdate()
{
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: 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)
((EntityState)this).FixedUpdate();
stopwatch += Time.deltaTime;
if (!hasFired && (double)stopwatch >= (double)duration)
{
hasFired = true;
Ray aimRay = ((BaseState)this).GetAimRay();
ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat * 1f, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f);
}
if (!((double)((EntityState)this).fixedAge < (double)duration) && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)2;
}
}
public class BuffBeamPlus : BaseState
{
public static float duration;
public static GameObject buffBeamPrefab;
public static AnimationCurve beamWidthCurve;
public static string playBeamSoundString;
public static string stopBeamSoundString;
public HurtBox target;
private float healTimer;
private float healInterval;
private float healChunk;
private CharacterBody targetBody;
private GameObject buffBeamInstance;
private BezierCurveLine healBeamCurve;
private Transform muzzleTransform;
private Transform beamTipTransform;
public override void OnEnter()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Expected O, but got Unknown
//IL_0025: 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_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Invalid comparison between Unknown and I4
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Invalid comparison between Unknown and I4
((BaseState)this).OnEnter();
Util.PlaySound(BuffBeam.playBeamSoundString, ((EntityState)this).gameObject);
Ray aimRay = ((BaseState)this).GetAimRay();
BullseyeSearch val = new BullseyeSearch();
val.teamMaskFilter = TeamMask.none;
if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent))
{
((TeamMask)(ref val.teamMaskFilter)).AddTeam(((EntityState)this).teamComponent.teamIndex);
}
val.filterByLoS = false;
val.maxDistanceFilter = 50f;
val.maxAngleFilter = 360f;
val.searchOrigin = ((Ray)(ref aimRay)).origin;
val.searchDirection = ((Ray)(ref aimRay)).direction;
val.sortMode = (SortMode)1;
val.RefreshCandidates();
val.FilterOutGameObject(((EntityState)this).gameObject);
List<HurtBox> list = val.GetResults().ToList();
if (list.Count > 0)
{
foreach (HurtBox item in list)
{
if (Object.op_Implicit((Object)(object)item.healthComponent) && Object.op_Implicit((Object)(object)item.healthComponent.body) && item.healthComponent.alive)
{
CharacterBody body = item.healthComponent.body;
if (Object.op_Implicit((Object)(object)body) && ((Object)body).name != "BellBody(Clone)" && ((int)body.hullClassification == 1 || (int)body.hullClassification == 2))
{
target = item;
targetBody = body;
body.AddBuff(Buffs.Immune.buffIndex);
break;
}
}
}
}
if (!Object.op_Implicit((Object)(object)target) && !Object.op_Implicit((Object)(object)targetBody))
{
((EntityState)this).outer.SetNextStateToMain();
return;
}
string text = "Muzzle";
Transform modelTransform = ((EntityState)this).GetModelTransform();
if (!Object.op_Implicit((Object)(object)modelTransform))
{
return;
}
ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>();
if (Object.op_Implicit((Object)(object)component))
{
muzzleTransform = component.FindChild(text);
buffBeamInstance = Object.Instantiate<GameObject>(BuffBeam.buffBeamPrefab);
ChildLocator component2 = buffBeamInstance.GetComponent<ChildLocator>();
if (Object.op_Implicit((Object)(object)component2))
{
beamTipTransform = component2.FindChild("BeamTip");
}
healBeamCurve = buffBeamInstance.GetComponentInChildren<BezierCurveLine>();
}
}
private void UpdateHealBeamVisuals()
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
healBeamCurve.lineRenderer.widthMultiplier = BuffBeam.beamWidthCurve.Evaluate(((EntityState)this).age / BuffBeam.duration);
healBeamCurve.v0 = muzzleTransform.forward * 3f;
((Component)healBeamCurve).transform.position = muzzleTransform.position;
if (Object.op_Implicit((Object)(object)target))
{
beamTipTransform.position = ((Component)targetBody.mainHurtBox).transform.position;
}
}
public override void Update()
{
((EntityState)this).Update();
UpdateHealBeamVisuals();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if ((!((double)((EntityState)this).fixedAge < (double)BuffBeam.duration) || (Object)(object)target == (Object)null) && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
Util.PlaySound(BuffBeam.stopBeamSoundString, ((EntityState)this).gameObject);
EntityState.Destroy((Object)(object)buffBeamInstance);
if (Object.op_Implicit((Object)(object)targetBody))
{
targetBody.RemoveBuff(Buffs.Immune.buffIndex);
}
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)6;
}
public override void OnSerialize(NetworkWriter writer)
{
//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)
((EntityState)this).OnSerialize(writer);
HurtBoxReference val = HurtBoxReference.FromHurtBox(target);
((HurtBoxReference)(ref val)).Write(writer);
}
public override void OnDeserialize(NetworkReader reader)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).OnDeserialize(reader);
HurtBoxReference val = default(HurtBoxReference);
((HurtBoxReference)(ref val)).Read(reader);
GameObject obj = ((HurtBoxReference)(ref val)).ResolveGameObject();
target = ((obj != null) ? obj.GetComponent<HurtBox>() : null);
}
}
public class RallyCry : BaseState
{
public float baseDuration = 3.5f;
public float buffDuration = 8f;
private Animator modelAnimator;
private List<HurtBox> nearbyAllies;
private float duration;
private bool hasCastBuff;
public override void OnEnter()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Expected O, but got Unknown
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: 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)
((BaseState)this).OnEnter();
duration = baseDuration / base.attackSpeedStat;
Ray aimRay = ((BaseState)this).GetAimRay();
BullseyeSearch val = new BullseyeSearch();
val.teamMaskFilter = TeamMask.none;
if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent))
{
((TeamMask)(ref val.teamMaskFilter)).AddTeam(((EntityState)this).teamComponent.teamIndex);
}
val.filterByLoS = false;
val.maxDistanceFilter = 16f;
val.maxAngleFilter = 360f;
val.searchOrigin = ((Ray)(ref aimRay)).origin;
val.searchDirection = ((Ray)(ref aimRay)).direction;
val.sortMode = (SortMode)1;
val.RefreshCandidates();
val.FilterOutGameObject(((EntityState)this).gameObject);
nearbyAllies = val.GetResults().ToList();
modelAnimator = ((EntityState)this).GetModelAnimator();
if (Object.op_Implicit((Object)(object)modelAnimator))
{
Util.PlayAttackSpeedSound("Play_beetle_guard_death", ((EntityState)this).gameObject, 0.5f);
((EntityState)this).PlayCrossfade("Body", "DefenseUp", "DefenseUp.playbackRate", duration, 0.2f);
}
}
public override void FixedUpdate()
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).FixedUpdate();
if (Object.op_Implicit((Object)(object)modelAnimator) && (double)modelAnimator.GetFloat("DefenseUp.activate") > 0.5 && !hasCastBuff)
{
ScaleParticleSystemDuration component = Object.Instantiate<GameObject>(DefenseUp.defenseUpPrefab, ((EntityState)this).transform.position, Quaternion.identity, ((EntityState)this).transform).GetComponent<ScaleParticleSystemDuration>();
if (Object.op_Implicit((Object)(object)component))
{
component.newDuration = buffDuration;
}
hasCastBuff = true;
if (NetworkServer.active)
{
((EntityState)this).characterBody.AddTimedBuff(Buffs.SmallArmorBoost, buffDuration);
foreach (HurtBox nearbyAlly in nearbyAllies)
{
if (Object.op_Implicit((Object)(object)nearbyAlly.healthComponent.body) && !nearbyAlly.healthComponent.body.HasBuff(EnemiesPlus.frenzyBuff))
{
nearbyAlly.healthComponent.body.AddTimedBuff(EnemiesPlus.frenzyBuff, buffDuration);
}
}
}
}
if (!((double)((EntityState)this).fixedAge < (double)duration) && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)2;
}
}
public class SpikeSlash : BaseState
{
public static float baseDuration = 3.5f;
public static float damageCoefficient = 4f;
public static float procCoefficient;
public static float selfForce;
public static float forceMagnitude = 16f;
public static GameObject hitEffectPrefab;
public static GameObject swipeEffectPrefab;
public static string enterSoundString;
public static string slashSoundString;
public static float walkSpeedPenaltyCoefficient;
public static GameObject projectilePrefab = EnemiesPlus.voidSpike;
private Animator modelAnimator;
private float duration;
private int slashCount;
private Transform modelTransform;
public override void OnEnter()
{
((BaseState)this).OnEnter();
duration = DoubleSlash.baseDuration / base.attackSpeedStat;
modelAnimator = ((EntityState)this).GetModelAnimator();
modelTransform = ((EntityState)this).GetModelTransform();
((EntityState)this).characterMotor.walkSpeedPenaltyCoefficient = DoubleSlash.walkSpeedPenaltyCoefficient;
Util.PlayAttackSpeedSound(DoubleSlash.enterSoundString, ((EntityState)this).gameObject, base.attackSpeedStat);
if (Object.op_Implicit((Object)(object)modelAnimator))
{
((EntityState)this).PlayAnimation("Gesture, Additive", "DoubleSlash", "DoubleSlash.playbackRate", duration);
((EntityState)this).PlayAnimation("Gesture, Override", "DoubleSlash", "DoubleSlash.playbackRate", duration);
}
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
((EntityState)this).characterBody.SetAimTimer(duration + 2f);
}
}
public override void OnExit()
{
((EntityState)this).characterMotor.walkSpeedPenaltyCoefficient = 1f;
((EntityState)this).OnExit();
}
private void HandleSlash(string animatorParamName, string muzzleName, string hitBoxGroupName)
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0069: Unknown result type (might be due to invalid IL or missing references)
if (!((double)modelAnimator.GetFloat(animatorParamName) <= 0.100000001490116))
{
Util.PlaySound(DoubleSlash.slashSoundString, ((EntityState)this).gameObject);
EffectManager.SimpleMuzzleFlash(DoubleSlash.swipeEffectPrefab, ((EntityState)this).gameObject, muzzleName, true);
slashCount++;
Ray aimRay = ((BaseState)this).GetAimRay();
ProjectileManager.instance.FireProjectile(projectilePrefab, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, base.damageStat * 1f, 0f, Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master), (DamageColorIndex)0, (GameObject)null, -1f);
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (NetworkServer.active && Object.op_Implicit((Object)(object)modelAnimator))
{
switch (slashCount)
{
case 0:
HandleSlash("HandR.hitBoxActive", "SwipeRight", "HandR");
break;
case 1:
HandleSlash("HandL.hitBoxActive", "SwipeLeft", "HandL");
break;
}
}
if (!((double)((EntityState)this).fixedAge < (double)duration) && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)2;
}
}
public class NuxHelfireEffectController : MonoBehaviour
{
private CharacterBody victimBody;
private ModelLocator modelLocator;
private BurnEffectController helfireEffectController;
private GameObject helfireEffectPrefab = EnemiesPlus.helfireIgniteEffect;
private void Start()
{
victimBody = ((Component)this).GetComponent<CharacterBody>();
modelLocator = ((Component)this).GetComponent<ModelLocator>();
AddHelfireEffect();
}
private void OnDestroy()
{
RemoveHelfireEffect();
}
private void AddHelfireEffect()
{
//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_0050: Expected O, but got Unknown
victimBody = (Object.op_Implicit((Object)(object)victimBody) ? victimBody : ((Component)this).GetComponent<CharacterBody>());
if (Object.op_Implicit((Object)(object)victimBody))
{
EffectManager.SpawnEffect(helfireEffectPrefab, new EffectData
{
origin = victimBody.corePosition
}, true);
}
modelLocator = (Object.op_Implicit((Object)(object)modelLocator) ? modelLocator : ((Component)this).GetComponent<ModelLocator>());
if (Object.op_Implicit((Object)(object)modelLocator) && Object.op_Implicit((Object)(object)modelLocator.modelTransform))
{
helfireEffectController = ((Component)this).gameObject.AddComponent<BurnEffectController>();
helfireEffectController.effectType = BurnEffectController.helfireEffect;
helfireEffectController.target = ((Component)modelLocator.modelTransform).gameObject;
}
}
private void RemoveHelfireEffect()
{
if (Object.op_Implicit((Object)(object)helfireEffectController))
{
Object.Destroy((Object)(object)helfireEffectController);
}
}
}
}