Decompiled source of Shaman v1.2.0
ShamanMod.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; 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 AncientScepter; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.BeetleGuardMonster; using EntityStates.Commando; using HG; using HG.BlendableTypes; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.Projectile; using RoR2.Skills; using ShamanMod.Modules; using ShamanMod.Modules.Characters; using ShamanMod.Modules.Survivors; using ShamanMod.SkillStates; using ShamanMod.SkillStates.BaseStates; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("ShamanMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ShamanMod")] [assembly: AssemblyTitle("ShamanMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] public class MenuSoundComponent : MonoBehaviour { private uint playID1 = 0u; private void OnEnable() { ((MonoBehaviour)this).StartCoroutine(delayedGunSound(5f / 12f, "ShamanLobby2")); } private IEnumerator delayedGunSound(float delay, string playedSound) { yield return (object)new WaitForSeconds(delay); if (playedSound == "ShamanLobby2") { playID1 = Util.PlaySound(playedSound, ((Component)this).gameObject); } } private void OnDestroy() { if (playID1 != 0) { AkSoundEngine.StopPlayingID(playID1); } } } namespace ShamanMod { internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.manti.ShamanMod", "ShamanMod", "1.2.0")] [R2APISubmoduleDependency(new string[] { "PrefabAPI", "LanguageAPI", "SoundAPI", "UnlockableAPI" })] public class ShamanPlugin : BaseUnityPlugin { public const string MODUID = "com.manti.ShamanMod"; public const string MODNAME = "ShamanMod"; public const string MODVERSION = "1.2.0"; public const string DEVELOPER_PREFIX = "MANTI"; public static ShamanPlugin instance; private void Awake() { instance = this; Log.Init(((BaseUnityPlugin)this).Logger); ShamanAssets.Initialize(); Config.ReadConfig(); States.RegisterStates(); Buffs.RegisterBuffs(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); new ShamanSurvivor().Initialize(); new AcolyteCharacter().Initialize(); new AcolyteBeastCharacter().Initialize(); new AcolyteAngelCharacter().Initialize(); new ContentPacks().Initialize(); Hook(); } private void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); CharacterBody.FixedUpdate += new hook_FixedUpdate(CharacterBody_FixedUpdate); CharacterBody.Start += new hook_Start(CharacterBody_Start); } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self)) { if (self.HasBuff(Buffs.armorBuff)) { self.armor += 100f; } if (self.HasBuff(Buffs.acolyteBeastSummonBuff)) { self.armor += 10f; self.baseDamage += 2f; self.baseMaxHealth += 50f; } if (self.HasBuff(Buffs.acolyteFrenzyBuff)) { self.attackSpeed *= 2f; self.moveSpeed *= 2f; self.damage *= 1.5f; } } } private void CharacterBody_FixedUpdate(orig_FixedUpdate orig, CharacterBody self) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && !(self.baseNameToken != "MANTI_SHAMAN_BODY_NAME") && !self.HasBuff(Buffs.summonCooldownDebuff) && NetworkServer.active) { MasterSummon val = new MasterSummon(); val.masterPrefab = AcolyteCharacter.masterPrefab; if (self.isPlayerControlled) { val.inventoryToCopy = self.inventory; } val.teamIndexOverride = self.teamComponent.teamIndex; val.summonerBodyObject = ((Component)self).gameObject; val.rotation = ((Component)self).gameObject.transform.rotation; Vector3 position = ((Component)self).gameObject.transform.position + new Vector3(Random.value * 6f - 3f, 0.1f + Random.value * 0.25f, Random.value * 6f - 3f); val.position = position; val.Perform(); float num = Mathf.Clamp(45f - (self.attackSpeed - 1f) * 10f, 15f, 60f); self.AddTimedBuff(Buffs.summonCooldownDebuff, num); } } private void CharacterBody_Start(orig_Start orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && NetworkServer.active && !(self.baseNameToken != "MANTI_SHAMAN_BODY_NAME")) { self.AddTimedBuff(Buffs.summonCooldownDebuff, 5f); } } } } namespace ShamanMod.SkillStates { public class AcolyteAngelCurseShoot : GenericProjectileBaseState { public static float BaseDuration = 0.15f; public static float DamageCoefficient = 0.75f; public override void OnEnter() { base.projectilePrefab = Projectiles.curseSkullPrefab; base.effectPrefab = ShamanAssets.staffCastEffect; base.targetMuzzle = "Root"; base.attackSoundString = "ShamanCurseSkullFire"; base.baseDuration = BaseDuration; base.duration = BaseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.SetAimTimer(2f); base.damageCoefficient = DamageCoefficient; base.force = 80f; base.projectilePitchBonus = 0f; base.minSpread = 0f; base.maxSpread = 20f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } public override void PlayAnimation(float duration) { if (!Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { } } } public class AcolyteAngelProjectileAttack : GenericProjectileBaseState { public static float BaseDuration = 0.07f; public static float DamageCoefficient = 0.75f; public override void OnEnter() { base.projectilePrefab = Projectiles.staffCastPrefab; base.effectPrefab = ShamanAssets.staffCastEffect; base.targetMuzzle = "Root"; base.attackSoundString = "ShamanAcolyteAngelProjectileShoot"; base.baseDuration = BaseDuration; base.duration = BaseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.SetAimTimer(2f); base.damageCoefficient = DamageCoefficient; base.force = 80f; base.projectilePitchBonus = 0f; base.minSpread = 0f; base.maxSpread = 12f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } public override void PlayAnimation(float duration) { if (!Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { } } } public class AcolyteAngelShootAttack : BaseSkillState { public static float damageCoefficient = 1.25f; public static float procCoefficient = 1f; public static float baseDuration = 0.15f; public static float force = 800f; public static float recoil = 5f; public static float range = 128f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerEngiTurret"); private float duration; private float fireTime; private bool hasFired; private string muzzleString; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireTime = 0f; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "Root"; } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0062: 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_009b: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_00b8: 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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_00dd: 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_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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_0151: 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_015d: 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) //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_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; ((EntityState)this).characterBody.AddSpreadBloom(1.5f); EffectManager.SimpleMuzzleFlash(ShamanAssets.staffCastEffect, ((EntityState)this).gameObject, muzzleString, false); Util.PlaySound("ShamanAcolyteAngelShoot", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).AddRecoil(-1f * DistortedFusion.recoil, -2f * DistortedFusion.recoil, -0.5f * DistortedFusion.recoil, 0.5f * DistortedFusion.recoil); new BulletAttack { bulletCount = 5u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damageCoefficient * ((BaseState)this).damageStat, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, maxDistance = range, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 25f, isCrit = ((BaseState)this).RollCrit(), owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 0.75f, sniper = false, stopperMask = CommonMasks.bullet, weapon = null, tracerEffectPrefab = tracerEffectPrefab, spreadPitchScale = 1f, spreadYawScale = 1f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = ShamanAssets.magicImpact2Effect }.Fire(); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class AcolyteBeastMeleeSlam : BaseMeleeAttack { public override void OnEnter() { //IL_000f: 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) //IL_003b: Unknown result type (might be due to invalid IL or missing references) hitboxName = "Slam"; damageType = (DamageType)32; damageCoefficient = 7f; procCoefficient = 1f; pushForce = 1200f; bonusForce = Vector3.zero; baseDuration = 3f; attackStartTime = 0.45f; attackEndTime = 0.6f; baseEarlyExitTime = 0.8f; hitStopDuration = 0.012f; attackRecoil = 3f; hitHopVelocity = 12f; swingSoundString = "ShamanAcolyteBeastSlam"; hitSoundString = ""; muzzleString = "SlamHitbox"; swingEffectPrefab = GroundSlam.slamEffectPrefab; hitEffectPrefab = null; Util.PlaySound("ShamanAcolyteBeastAttack", ((EntityState)this).gameObject); base.OnEnter(); } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slam", "Slam.playbackRate", duration, 0.05f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } public override void OnExit() { base.OnExit(); } } public class AcolyteBeastMeleeSwipe : BaseMeleeAttack { public override void OnEnter() { //IL_000e: 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_003a: Unknown result type (might be due to invalid IL or missing references) hitboxName = "Slash"; damageType = (DamageType)0; damageCoefficient = 3.8f; procCoefficient = 1f; pushForce = 300f; bonusForce = Vector3.zero; baseDuration = 1.5f; attackStartTime = 0.4f; attackEndTime = 0.7f; baseEarlyExitTime = 0.8f; hitStopDuration = 0.012f; attackRecoil = 0.5f; hitHopVelocity = 4f; swingSoundString = "ShamanAcolyteBeastSwipe"; hitSoundString = ""; muzzleString = "SlashHitbox"; swingEffectPrefab = ShamanAssets.acolyteBeastSwingEffect; hitEffectPrefab = ShamanAssets.magicImpactEffect; Util.PlaySound("ShamanAcolyteBeastAttack", ((EntityState)this).gameObject); base.OnEnter(); } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slash", "Slash.playbackRate", duration, 0.05f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } public override void OnExit() { base.OnExit(); } } public class AcolyteBeastShootAttack : BaseSkillState { public static float damageCoefficient = 1.25f; public static float procCoefficient = 1f; public static float baseDuration = 0.5f; public static float force = 800f; public static float recoil = 5f; public static float range = 128f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerEngiTurret"); private float duration; private float fireTime; private bool hasFired; private string muzzleString; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireTime = 0f; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "Muzzle"; } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0062: 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_009b: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_00b8: 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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_00dd: 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_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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_0151: 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_015d: 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) //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_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; ((EntityState)this).characterBody.AddSpreadBloom(1.5f); EffectManager.SimpleMuzzleFlash(ShamanAssets.staffCastEffect, ((EntityState)this).gameObject, muzzleString, false); Util.PlaySound("ShamanAcolyteBeastShoot", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).AddRecoil(-1f * DistortedFusion.recoil, -2f * DistortedFusion.recoil, -0.5f * DistortedFusion.recoil, 0.5f * DistortedFusion.recoil); new BulletAttack { bulletCount = 3u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damageCoefficient * ((BaseState)this).damageStat, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, maxDistance = range, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 5f, isCrit = ((BaseState)this).RollCrit(), owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 0.75f, sniper = false, stopperMask = CommonMasks.bullet, weapon = null, tracerEffectPrefab = tracerEffectPrefab, spreadPitchScale = 0.25f, spreadYawScale = 1f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = ShamanAssets.magicImpact2Effect }.Fire(); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class AcolyteMeleeAttack : BaseMeleeAttack { public override void OnEnter() { //IL_000e: 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_003a: Unknown result type (might be due to invalid IL or missing references) hitboxName = "Melee"; damageType = (DamageType)0; damageCoefficient = 3f; procCoefficient = 1f; pushForce = 300f; bonusForce = Vector3.zero; baseDuration = 1f; attackStartTime = 0.2f; attackEndTime = 0.4f; baseEarlyExitTime = 0.4f; hitStopDuration = 0.012f; attackRecoil = 0.5f; hitHopVelocity = 4f; swingSoundString = "ShamanAcolyteSwing"; hitSoundString = ""; muzzleString = "MeleeHitbox"; swingEffectPrefab = ShamanAssets.acolyteSwingEffect; hitEffectPrefab = ShamanAssets.magicImpactEffect; base.OnEnter(); } protected override void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slash", "Slash.playbackRate", duration, 0.05f); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { base.OnHitEnemyAuthority(); } public override void OnExit() { base.OnExit(); } } public class AcolyteShootAttack : BaseSkillState { public static float damageCoefficient = 1f; public static float procCoefficient = 1f; public static float baseDuration = 0.4f; public static float force = 800f; public static float recoil = 5f; public static float range = 128f; public static GameObject tracerEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerEngiTurret"); private float duration; private float fireTime; private bool hasFired; private string muzzleString; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireTime = 0f; ((EntityState)this).characterBody.SetAimTimer(2f); muzzleString = "Muzzle"; } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0062: 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_009b: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_00b8: 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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_00dd: 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_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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_0151: 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_015d: 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) //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_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; ((EntityState)this).characterBody.AddSpreadBloom(1.5f); EffectManager.SimpleMuzzleFlash(ShamanAssets.staffCastEffect, ((EntityState)this).gameObject, muzzleString, false); Util.PlaySound("ShamanAcolyteShoot", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); ((BaseState)this).AddRecoil(-1f * DistortedFusion.recoil, -2f * DistortedFusion.recoil, -0.5f * DistortedFusion.recoil, 0.5f * DistortedFusion.recoil); new BulletAttack { bulletCount = 1u, aimVector = ((Ray)(ref aimRay)).direction, origin = ((Ray)(ref aimRay)).origin, damage = damageCoefficient * ((BaseState)this).damageStat, damageColorIndex = (DamageColorIndex)0, damageType = DamageTypeCombo.op_Implicit((DamageType)0), falloffModel = (FalloffModel)1, maxDistance = range, force = force, hitMask = CommonMasks.bullet, minSpread = 0f, maxSpread = 0f, isCrit = ((BaseState)this).RollCrit(), owner = ((EntityState)this).gameObject, muzzleName = muzzleString, smartCollision = false, procChainMask = default(ProcChainMask), procCoefficient = procCoefficient, radius = 0.75f, sniper = false, stopperMask = CommonMasks.bullet, weapon = null, tracerEffectPrefab = tracerEffectPrefab, spreadPitchScale = 0f, spreadYawScale = 0f, queryTriggerInteraction = (QueryTriggerInteraction)0, hitEffectPrefab = ShamanAssets.magicImpact2Effect }.Fire(); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class Ancestry : BaseSkillState { public static float duration = 1f; public override void OnEnter() { //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: 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_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); Util.PlaySound("ShamanTeleportCast", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.magicImpact2Effect, ((EntityState)this).gameObject, "Muzzle", false); Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && (Object)(object)val != (Object)(object)((EntityState)this).characterBody && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody) { if (NetworkServer.active) { Vector3 val2 = ((EntityState)this).gameObject.transform.position + new Vector3(Random.value * 4f - 2f, 0.1f + Random.value * 1f, Random.value * 4f - 2f); TeleportHelper.TeleportBody(val, val2); } HealthComponent healthComponent = val.healthComponent; healthComponent.barrier += val.maxHealth * 0.6f; Util.PlaySound("ShamanAncestralTeleport", ((Component)val).gameObject); EffectManager.SimpleImpactEffect(ShamanAssets.acolyteSummonEffect, ((EntityState)this).gameObject.transform.position, Vector3.up, true); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class DistortedFusion : BaseSkillState { public static float damageCoefficient = 3f; public static float procCoefficient = 1f; public static float baseDuration = 4f; public static float force = 800f; public static float recoil = 3f; public static float range = 256f; private float duration; private float fireTime; private bool hasFired; private string muzzleString; private int noSacrificed = 0; public override void OnEnter() { //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); fireTime = 3.25f; muzzleString = "Muzzle"; noSacrificed = 0; CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && val.baseNameToken == "MANTI_ACOLYTE_BODY_NAME" && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody) { noSacrificed++; } } if (noSacrificed < 3) { Util.PlaySound("ShamanCastFusionFail", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.magicImpact2Effect, ((EntityState)this).gameObject, muzzleString, false); duration = 0.25f; return; } ((BaseState)this).OnEnter(); Util.PlaySound("ShamanCastFusion", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.castFusionEffect, ((EntityState)this).gameObject, muzzleString, false); duration = 4f; ((EntityState)this).characterBody.SetAimTimer(5f); if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 4f); } ((EntityState)this).PlayAnimation("FullBody, Override", "FusionCast", "ShootGun.playbackRate", 1f, 0f); } private void Fire() { //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0133: 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) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) if (hasFired || noSacrificed <= 2) { return; } hasFired = true; Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && val.baseNameToken == "MANTI_ACOLYTE_BODY_NAME" && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && Object.op_Implicit((Object)(object)((Component)val).gameObject.GetComponent<HealthComponent>()) && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody) { ((Component)val).gameObject.GetComponent<HealthComponent>().Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo)); } } if (NetworkServer.active) { ((EntityState)this).characterBody.SendConstructTurret(((EntityState)this).characterBody, ((EntityState)this).gameObject.transform.position + new Vector3(0f, 10f, 0f), ((EntityState)this).gameObject.transform.rotation, MasterCatalog.FindMasterIndex(AcolyteBeastCharacter.masterPrefab)); } Util.PlaySound("ShamanSummonAcolyteBeast", ((EntityState)this).gameObject); } public override void OnExit() { //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && val.baseNameToken == "MANTI_ACOLYTEBEAST_BODY_NAME" && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && NetworkServer.active && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody && noSacrificed >= 3) { val.healthComponent.HealFraction(1f, default(ProcChainMask)); for (int j = 0; j < noSacrificed - 2; j++) { val.AddTimedBuff(Buffs.acolyteBeastSummonBuff, 480f); } break; } } noSacrificed = 0; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class DistortedFusionScepter : BaseSkillState { public static float damageCoefficient = 3f; public static float procCoefficient = 1f; public static float baseDuration = 4f; public static float force = 800f; public static float recoil = 3f; public static float range = 256f; private float duration; private float fireTime; private bool hasFired; private string muzzleString; private int noSacrificed = 0; public override void OnEnter() { //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); fireTime = 3.25f; muzzleString = "Muzzle"; noSacrificed = 0; CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && val.baseNameToken == "MANTI_ACOLYTE_BODY_NAME" && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody) { noSacrificed++; } } if (noSacrificed < 6) { Util.PlaySound("ShamanCastFusionFail", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.magicImpact2Effect, ((EntityState)this).gameObject, muzzleString, false); duration = 0.25f; return; } ((BaseState)this).OnEnter(); Util.PlaySound("ShamanAcolyteAngelFuse", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.castFusionEffect, ((EntityState)this).gameObject, muzzleString, false); duration = 4f; ((EntityState)this).characterBody.SetAimTimer(5f); if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, 4f); } ((EntityState)this).PlayAnimation("FullBody, Override", "FusionCast", "ShootGun.playbackRate", 1f, 0f); } private void Fire() { //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0133: 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) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) if (hasFired || noSacrificed <= 5) { return; } hasFired = true; Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && val.baseNameToken == "MANTI_ACOLYTE_BODY_NAME" && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && Object.op_Implicit((Object)(object)((Component)val).gameObject.GetComponent<HealthComponent>()) && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody) { ((Component)val).gameObject.GetComponent<HealthComponent>().Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo)); } } if (NetworkServer.active) { ((EntityState)this).characterBody.SendConstructTurret(((EntityState)this).characterBody, ((EntityState)this).gameObject.transform.position + new Vector3(0f, 20f, 0f), ((EntityState)this).gameObject.transform.rotation, MasterCatalog.FindMasterIndex(AcolyteAngelCharacter.masterPrefab)); } Util.PlaySound("ShamanSummonAcolyteAngel", ((EntityState)this).gameObject); Util.PlaySound("ShamanAcolyteAngelBirth", ((EntityState)this).gameObject); } public override void OnExit() { //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)val.master == (Object)null) && !((Object)(object)val.master.minionOwnership == (Object)null) && !((Object)(object)val.master.minionOwnership.ownerMaster == (Object)null) && val.baseNameToken == "MANTI_ACOLYTEANGEL_BODY_NAME" && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && NetworkServer.active && Object.op_Implicit((Object)(object)val.master) && (Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody && noSacrificed >= 8) { val.healthComponent.HealFraction(1f, default(ProcChainMask)); for (int j = 0; j < noSacrificed - 5; j++) { val.AddTimedBuff(Buffs.acolyteBeastSummonBuff, 600f); } break; } } noSacrificed = 0; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime) { Fire(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class FeralCall : BaseSkillState { public static float duration = 1f; public override void OnEnter() { //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); Util.PlaySound("ShamanFrenzyCast", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.magicImpact2Effect, ((EntityState)this).gameObject, "Muzzle", false); Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if ((Object)(object)val == (Object)null || (Object)(object)((Component)val).gameObject == (Object)null || (Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null || (Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null || (Object)(object)val.master == (Object)null || (Object)(object)val.master.minionOwnership == (Object)null || (Object)(object)val.master.minionOwnership.ownerMaster == (Object)null || ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex != ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex || !((Object)(object)val != (Object)(object)((EntityState)this).characterBody) || !Object.op_Implicit((Object)(object)val.master) || !((Object)(object)val.master.minionOwnership.ownerMaster.GetBody() == (Object)(object)((EntityState)this).characterBody) || !(val.baseNameToken == "MANTI_ACOLYTE_BODY_NAME")) { continue; } if (NetworkServer.active) { for (int j = 0; j < 100; j++) { val.AddTimedBuff(Buffs.PermanentCurse, 15f, 100); } val.AddTimedBuff(Buffs.acolyteFrenzyBuff, 15f); } Util.PlaySound("ShamanAcolyteFrenziedGrowl", ((Component)val).gameObject); EffectManager.SimpleImpactEffect(ShamanAssets.acolyteSummonEffect, ((Component)val).gameObject.transform.position, Vector3.up, true); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class FeralCallScepter : BaseSkillState { public static float duration = 1f; public override void OnEnter() { //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_0131: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); Util.PlaySound("ShamanFrenzyCast", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(ShamanAssets.magicImpact2Effect, ((EntityState)this).gameObject, "Muzzle", false); Object[] array = Resources.FindObjectsOfTypeAll(typeof(CharacterBody)); CharacterBody[] array2 = array as CharacterBody[]; foreach (CharacterBody val in array2) { if (!((Object)(object)val == (Object)null) && !((Object)(object)((Component)val).gameObject == (Object)null) && !((Object)(object)((Component)val).gameObject.GetComponent<TeamComponent>() == (Object)null) && !((Object)(object)((EntityState)this).gameObject.GetComponent<TeamComponent>() == (Object)null) && ((Component)val).gameObject.GetComponent<TeamComponent>().teamIndex == ((EntityState)this).gameObject.GetComponent<TeamComponent>().teamIndex && (Object)(object)val != (Object)(object)((EntityState)this).characterBody) { if (NetworkServer.active) { val.AddTimedBuff(Buffs.acolyteFrenzyBuff, 15f); } Util.PlaySound("ShamanAcolyteFrenziedGrowl", ((Component)val).gameObject); EffectManager.SimpleImpactEffect(ShamanAssets.acolyteSummonEffect, ((Component)val).gameObject.transform.position, Vector3.up, true); } } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= FeralCall.duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class GhostVeil : BaseSkillState { public static float duration = 10f; public static float initialSpeedCoefficient = 5f; public static float finalSpeedCoefficient = 2.5f; public static float dodgeFOV = DodgeState.dodgeFOV; public override void OnEnter() { ((BaseState)this).OnEnter(); Util.PlaySound("ShamanGhostEnter", ((EntityState)this).gameObject); if (NetworkServer.active) { ((EntityState)this).characterBody.AddTimedBuff(Buffs.armorBuff, 10f); ((EntityState)this).characterBody.AddTimedBuff(Buffs.Cloak, 10f); ((EntityState)this).characterBody.AddTimedBuff(Buffs.CloakSpeed, 10f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); Util.PlaySound("ShamanGhostExit", ((EntityState)this).gameObject); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class StaffCast : GenericProjectileBaseState { public static float BaseDuration = 0.25f; public static float DamageCoefficient = 0.75f; public override void OnEnter() { base.projectilePrefab = Projectiles.staffCastPrefab; base.effectPrefab = ShamanAssets.staffCastEffect; base.targetMuzzle = "Muzzle"; base.attackSoundString = "ShamanStaffCast"; base.baseDuration = BaseDuration; base.duration = BaseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.SetAimTimer(2f); base.damageCoefficient = DamageCoefficient; base.force = 80f; base.projectilePitchBonus = 0f; base.minSpread = 0f; base.maxSpread = 2f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } public override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("OrbLayer", "OrbShoot", "OrbCast.playbackRate", base.duration, 0f); } } } public class StaffCurseSkill : GenericProjectileBaseState { public static float BaseDuration = 0.75f; public static float DamageCoefficient = 0.75f; public override void OnEnter() { base.projectilePrefab = Projectiles.curseSkullPrefab; base.effectPrefab = ShamanAssets.staffCastEffect; base.targetMuzzle = "Muzzle"; base.attackSoundString = "ShamanCurseSkullFire"; base.baseDuration = BaseDuration; base.duration = BaseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.SetAimTimer(2f); base.damageCoefficient = DamageCoefficient; base.force = 80f; base.projectilePitchBonus = 0f; base.minSpread = 0f; base.maxSpread = 2f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } public override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("Gesture, Override", "AcolyteSummoningSkill", "AcolyteSummoningSkill.playbackRate", base.duration, 0f); } } } public class StaffHealingSkill : GenericProjectileBaseState { public static float BaseDuration = 0.75f; public static float DamageCoefficient = 0.75f; public override void OnEnter() { base.projectilePrefab = Projectiles.healOrbPrefab; base.effectPrefab = ShamanAssets.staffCastEffect; base.targetMuzzle = "Muzzle"; base.attackSoundString = "ShamanHealOrbShoot"; base.baseDuration = BaseDuration; base.duration = BaseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).characterBody.SetAimTimer(2f); base.damageCoefficient = DamageCoefficient; base.force = 80f; base.projectilePitchBonus = 0f; base.minSpread = 0f; base.maxSpread = 2f; base.recoilAmplitude = 0.1f; base.bloom = 10f; ((GenericProjectileBaseState)this).OnEnter(); } public override void FixedUpdate() { ((GenericProjectileBaseState)this).FixedUpdate(); } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } public override void PlayAnimation(float duration) { if (Object.op_Implicit((Object)(object)((EntityState)this).GetModelAnimator())) { ((EntityState)this).PlayAnimation("Gesture, Override", "AcolyteSummoningSkill", "AcolyteSummoningSkill.playbackRate", base.duration, 0f); } } } } namespace ShamanMod.SkillStates.BaseStates { public class BaseMeleeAttack : BaseSkillState { public int swingIndex; protected string hitboxName = "Melee"; protected DamageType damageType = (DamageType)0; protected float damageCoefficient = 3.5f; protected float procCoefficient = 1f; protected float pushForce = 300f; protected Vector3 bonusForce = Vector3.zero; protected float baseDuration = 1f; protected float attackStartTime = 0.2f; protected float attackEndTime = 0.4f; protected float baseEarlyExitTime = 0.4f; protected float hitStopDuration = 0.012f; protected float attackRecoil = 0.75f; protected float hitHopVelocity = 4f; protected bool cancelled = false; protected string swingSoundString = ""; protected string hitSoundString = ""; protected string muzzleString = "MeleeHitbox"; protected GameObject swingEffectPrefab; protected GameObject hitEffectPrefab; protected NetworkSoundEventIndex impactSound; private float earlyExitTime; public float duration; private bool hasFired; private float hitPauseTimer; private OverlapAttack attack; protected bool inHitPause; private bool hasHopped; protected float stopwatch; protected Animator animator; private HitStopCachedState hitStopCachedState; private Vector3 storedVelocity; public override void OnEnter() { //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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: 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) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; earlyExitTime = baseEarlyExitTime / ((BaseState)this).attackSpeedStat; hasFired = false; animator = ((EntityState)this).GetModelAnimator(); ((BaseState)this).StartAimMode(0.5f + duration, false); ((EntityState)this).characterBody.outOfCombatStopwatch = 0f; animator.SetBool("attacking", true); HitBoxGroup hitBoxGroup = null; Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == hitboxName); } PlayAttackAnimation(); attack = new OverlapAttack(); attack.damageType = DamageTypeCombo.op_Implicit(damageType); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.teamIndex = ((BaseState)this).GetTeam(); attack.damage = damageCoefficient * ((BaseState)this).damageStat; attack.procCoefficient = procCoefficient; attack.hitEffectPrefab = hitEffectPrefab; attack.forceVector = bonusForce; attack.pushAwayForce = pushForce; attack.hitBoxGroup = hitBoxGroup; attack.isCrit = ((BaseState)this).RollCrit(); attack.impactSound = impactSound; } protected virtual void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("Gesture, Override", "Slash1", "Slash.playbackRate", duration, 0.05f); } public override void OnExit() { ((EntityState)this).OnExit(); animator.SetBool("attacking", false); } protected virtual void PlaySwingEffect() { EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, muzzleString, true); } protected virtual void OnHitEnemyAuthority() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009b: 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) if (!hasHopped) { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded && hitHopVelocity > 0f) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, hitHopVelocity); } hasHopped = true; } if (!inHitPause && hitStopDuration > 0f) { storedVelocity = ((EntityState)this).characterMotor.velocity; hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, "Slash.playbackRate"); hitPauseTimer = hitStopDuration / ((BaseState)this).attackSpeedStat; inHitPause = true; } } private void FireAttack() { if (!hasFired) { hasFired = true; Util.PlayAttackSpeedSound(swingSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); if (((EntityState)this).isAuthority) { PlaySwingEffect(); ((BaseState)this).AddRecoil(-1f * attackRecoil, -2f * attackRecoil, -0.5f * attackRecoil, 0.5f * attackRecoil); } } if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null)) { OnHitEnemyAuthority(); } } protected virtual void SetNextState() { int num = ((swingIndex == 0) ? 1 : 0); ((EntityState)this).outer.SetNextState((EntityState)(object)new BaseMeleeAttack { swingIndex = num }); } public override void FixedUpdate() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); hitPauseTimer -= Time.fixedDeltaTime; if (hitPauseTimer <= 0f && inHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); inHitPause = false; ((EntityState)this).characterMotor.velocity = storedVelocity; } if (!inHitPause) { stopwatch += Time.fixedDeltaTime; } else { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (Object.op_Implicit((Object)(object)animator)) { animator.SetFloat("Swing.playbackRate", 0f); } } if (stopwatch >= duration * attackStartTime && stopwatch <= duration * attackEndTime) { FireAttack(); } if (stopwatch >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write(swingIndex); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); swingIndex = reader.ReadInt32(); } } public class BaseTimedSkillState : BaseSkillState { public static float TimedBaseDuration; public static float TimedBaseCastStartTime; public static float TimedBaseCastEndTime; protected float duration; protected float castStartTime; protected float castEndTime; protected bool hasFired; protected bool isFiring; protected bool hasExited; protected virtual void InitDurationValues(float baseDuration, float baseCastStartTime, float baseCastEndTime = 1f) { TimedBaseDuration = baseDuration; TimedBaseCastStartTime = baseCastStartTime; TimedBaseCastEndTime = baseCastEndTime; duration = TimedBaseDuration / ((BaseState)this).attackSpeedStat; castStartTime = baseCastStartTime * duration; castEndTime = baseCastEndTime * duration; } protected virtual void OnCastEnter() { } protected virtual void OnCastFixedUpdate() { } protected virtual void OnCastUpdate() { } protected virtual void OnCastExit() { } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!hasFired && ((EntityState)this).fixedAge > castStartTime) { hasFired = true; OnCastEnter(); } bool flag = ((EntityState)this).fixedAge >= castStartTime; bool flag2 = ((EntityState)this).fixedAge >= castEndTime; isFiring = false; if ((flag && !flag2) || (flag && flag2 && !hasFired)) { isFiring = true; OnCastFixedUpdate(); } if (flag2 && !hasExited) { hasExited = true; OnCastExit(); } if (((EntityState)this).fixedAge > duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void Update() { ((EntityState)this).Update(); if (isFiring) { OnCastUpdate(); } } } public class ExampleTimedSkillState : BaseTimedSkillState { public static float SkillBaseDuration = 1.5f; public static float SkillStartTime = 0.2f; public static float SkillEndTime = 0.9f; public override void OnEnter() { ((BaseState)this).OnEnter(); InitDurationValues(SkillBaseDuration, SkillStartTime, SkillEndTime); } protected override void OnCastEnter() { } protected override void OnCastFixedUpdate() { } protected override void OnCastExit() { } } public class ExampleDelayedSkillState : BaseTimedSkillState { public static float SkillBaseDuration = 1.5f; public static float SkillStartTime = 0.2f; public override void OnEnter() { ((BaseState)this).OnEnter(); InitDurationValues(SkillBaseDuration, SkillStartTime); } protected override void OnCastEnter() { } } } namespace ShamanMod.Modules { public static class Buffs { internal static BuffDef armorBuff; internal static BuffDef summonCooldownDebuff; internal static BuffDef acolyteBeastSummonBuff; internal static BuffDef acolyteFrenzyBuff; internal static void RegisterBuffs() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_00b1: Unknown result type (might be due to invalid IL or missing references) armorBuff = AddNewBuff("ArmorBuff", LegacyResourcesAPI.Load<BuffDef>("BuffDefs/HiddenInvincibility").iconSprite, Color.white, canStack: false, isDebuff: false); summonCooldownDebuff = AddNewBuff("ShamanSummonCooldownDebuff", ShamanAssets.mainAssetBundle.LoadAsset<Sprite>("texCooldownDebuff"), new Color(2f / 51f, 16f / 51f, 0f), canStack: false, isDebuff: false); acolyteBeastSummonBuff = AddNewBuff("AcolyteBeastPowerBuff", ShamanAssets.mainAssetBundle.LoadAsset<Sprite>("texCooldownDebuff"), new Color(2f / 51f, 16f / 51f, 0f), canStack: true, isDebuff: false); acolyteFrenzyBuff = AddNewBuff("AcolyteFrenzyBuff", ShamanAssets.mainAssetBundle.LoadAsset<Sprite>("texFeralBuff"), new Color(0.8f, 0f, 0f), canStack: false, isDebuff: false); } internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = buffColor; val.canStack = canStack; val.isDebuff = isDebuff; val.eliteDef = null; val.iconSprite = buffIcon; Content.AddBuffDef(val); return val; } } public class Compat { public static bool TinkersSatchelInstalled; public static bool AetheriumInstalled; public static bool ScepterInstalled; public static void Initialize() { if (Chainloader.PluginInfos.ContainsKey("com.ThinkInvisible.TinkersSatchel")) { TinkersSatchelInstalled = true; } if (Chainloader.PluginInfos.ContainsKey("com.KomradeSpectre.Aetherium")) { AetheriumInstalled = true; } if (Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter")) { ScepterInstalled = true; } } internal static int TryGetScepterCount(Inventory inventory) { if (!ScepterInstalled) { return 0; } return GetScepterCount(inventory); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static int GetScepterCount(Inventory inventory) { return inventory.GetItemCount(((ItemBase)ItemBase<AncientScepterItem>.instance).ItemDef); } } public static class Config { public static void ReadConfig() { } public static ConfigEntry<bool> CharacterEnableConfig(string characterName, string description = "Set to false to disable this character", bool enabledDefault = true) { return ((BaseUnityPlugin)ShamanPlugin.instance).Config.Bind<bool>("General", "Enable " + characterName, enabledDefault, description); } } internal class ContentPacks : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public static List<GameObject> bodyPrefabs = new List<GameObject>(); public static List<GameObject> masterPrefabs = new List<GameObject>(); public static List<GameObject> projectilePrefabs = new List<GameObject>(); public static List<SurvivorDef> survivorDefs = new List<SurvivorDef>(); public static List<UnlockableDef> unlockableDefs = new List<UnlockableDef>(); public static List<SkillFamily> skillFamilies = new List<SkillFamily>(); public static List<SkillDef> skillDefs = new List<SkillDef>(); public static List<Type> entityStates = new List<Type>(); public static List<BuffDef> buffDefs = new List<BuffDef>(); public static List<EffectDef> effectDefs = new List<EffectDef>(); public static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>(); public string identifier => "com.manti.ShamanMod"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.bodyPrefabs.Add(bodyPrefabs.ToArray()); contentPack.masterPrefabs.Add(masterPrefabs.ToArray()); contentPack.projectilePrefabs.Add(projectilePrefabs.ToArray()); contentPack.survivorDefs.Add(survivorDefs.ToArray()); contentPack.unlockableDefs.Add(unlockableDefs.ToArray()); contentPack.skillDefs.Add(skillDefs.ToArray()); contentPack.skillFamilies.Add(skillFamilies.ToArray()); contentPack.entityStateTypes.Add(entityStates.ToArray()); contentPack.buffDefs.Add(buffDefs.ToArray()); contentPack.effectDefs.Add(effectDefs.ToArray()); contentPack.networkSoundEventDefs.Add(networkSoundEventDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } internal class Content { public static void AddCharacterBodyPrefab(GameObject bprefab) { ContentPacks.bodyPrefabs.Add(bprefab); } public static void AddMasterPrefab(GameObject prefab) { ContentPacks.masterPrefabs.Add(prefab); } public static void AddProjectilePrefab(GameObject prefab) { ContentPacks.projectilePrefabs.Add(prefab); } public static void AddSurvivorDef(SurvivorDef survivorDef) { ContentPacks.survivorDefs.Add(survivorDef); } public static void AddUnlockableDef(UnlockableDef unlockableDef) { ContentPacks.unlockableDefs.Add(unlockableDef); } public static void AddSkillDef(SkillDef skillDef) { ContentPacks.skillDefs.Add(skillDef); } public static void AddSkillFamily(SkillFamily skillFamily) { ContentPacks.skillFamilies.Add(skillFamily); } public static void AddEntityState(Type entityState) { ContentPacks.entityStates.Add(entityState); } public static void AddBuffDef(BuffDef buffDef) { ContentPacks.buffDefs.Add(buffDef); } public static void AddEffectDef(EffectDef effectDef) { ContentPacks.effectDefs.Add(effectDef); } public static void AddNetworkSoundEventDef(NetworkSoundEventDef networkSoundEventDef) { ContentPacks.networkSoundEventDefs.Add(networkSoundEventDef); } } internal static class Helpers { internal const string agilePrefix = "<style=cIsUtility>Agile.</style> "; internal static string ScepterDescription(string desc) { return "\n<color=#d299ff>SCEPTER: " + desc + "</color>"; } public static T[] Append<T>(ref T[] array, List<T> list) { int num = array.Length; int count = list.Count; Array.Resize(ref array, num + count); list.CopyTo(array, num); return array; } public static Func<T[], T[]> AppendDel<T>(List<T> list) { return (T[] r) => Append(ref r, list); } } internal static class ItemDisplays { private static Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>(); private static bool recording = false; public static Dictionary<string, int> itemDisplayCheckCount = new Dictionary<string, int>(); public static Dictionary<string, Object> itemDisplayCheckAsset = new Dictionary<string, Object>(); public static void PopulateDisplays() { PopulateDisplaysFromBody("MageBody"); PopulateDisplaysFromBody("LunarExploderBody"); AddCustomLightningArm(); } private static void PopulateDisplaysFromBody(string bodyName) { GameObject obj = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/" + bodyName); object obj2; if (obj == null) { obj2 = null; } else { ModelLocator component = obj.GetComponent<ModelLocator>(); obj2 = ((component == null) ? null : ((Component)component.modelTransform).GetComponent<CharacterModel>()?.itemDisplayRuleSet); } ItemDisplayRuleSet val = (ItemDisplayRuleSet)obj2; if ((Object)(object)val == (Object)null) { Debug.LogError((object)("couldn't load ItemDisplayRuleSet from " + bodyName + ". Check if name was entered correctly")); return; } KeyAssetRuleGroup[] keyAssetRuleGroups = val.keyAssetRuleGroups; for (int i = 0; i < keyAssetRuleGroups.Length; i++) { ItemDisplayRule[] rules = keyAssetRuleGroups[i].displayRuleGroup.rules; for (int j = 0; j < rules.Length; j++) { GameObject followerPrefab = rules[j].followerPrefab; if (Object.op_Implicit((Object)(object)followerPrefab)) { string key = ((Object)followerPrefab).name?.ToLowerInvariant(); if (!itemDisplayPrefabs.ContainsKey(key)) { itemDisplayPrefabs[key] = followerPrefab; itemDisplayCheckCount[key] = 0; itemDisplayCheckAsset[key] = keyAssetRuleGroups[i].keyAsset; } } } } } private static void AddCustomLightningArm() { GameObject val = PrefabAPI.InstantiateClone(itemDisplayPrefabs["DisplayLightningArmRight".ToLowerInvariant()], "DisplayLightningArmCustom", false); LimbMatcher component = val.GetComponent<LimbMatcher>(); component.limbPairs[0].targetChildLimb = "LightningArm1"; component.limbPairs[1].targetChildLimb = "LightningArm2"; component.limbPairs[2].targetChildLimb = "LightningArmEnd"; string key = "DisplayLightningArmCustom".ToLowerInvariant(); itemDisplayPrefabs[key] = val; } public static GameObject LoadDisplay(string name) { if (itemDisplayPrefabs.ContainsKey(name.ToLowerInvariant()) && Object.op_Implicit((Object)(object)itemDisplayPrefabs[name.ToLowerInvariant()])) { if (recording && itemDisplayCheckCount.ContainsKey(name.ToLowerInvariant())) { itemDisplayCheckCount[name.ToLowerInvariant()]++; } return itemDisplayPrefabs[name.ToLowerInvariant()]; } Debug.LogError((object)("item display " + name + " returned null")); return null; } public static void recordUnused() { recording = true; } public static void printUnused() { string text = "used:"; string text2 = "not used:"; foreach (KeyValuePair<string, int> item in itemDisplayCheckCount) { string text3 = $"\n{itemDisplayCheckAsset[item.Key]} | {((Object)itemDisplayPrefabs[item.Key]).name}"; text3 = SpitOutNewRule(itemDisplayCheckAsset[item.Key], ((Object)itemDisplayPrefabs[item.Key]).name); if (item.Value > 0) { text += text3; } else { text2 += text3; } } } private static string SpitOutNewRule(Object asset, string prefabName, string content = "DLC1Content") { string text = ((asset is ItemDef) ? "Items" : "Equipment"); return "\n itemDisplayRules.Add(ItemDisplays.CreateGenericDisplayRule(" + content + "." + text + "." + asset.name + ", \"" + prefabName + "\",\n \"Chest\",\n new Vector3(2, 2, 2),\n new Vector3(0, 0, 0),\n new Vector3(1, 1, 1)));"; } private static void resetUnused() { foreach (KeyValuePair<string, int> item in itemDisplayCheckCount) { itemDisplayCheckCount[item.Key] = 0; } recording = false; } private static Object GetKeyAssetFromString(string itemName) { Object val = (Object)(object)LegacyResourcesAPI.Load<ItemDef>("ItemDefs/" + itemName); if (val == (Object)null) { val = (Object)(object)LegacyResourcesAPI.Load<EquipmentDef>("EquipmentDefs/" + itemName); } if (val == (Object)null) { Debug.LogError((object)("Could not load keyasset for " + itemName)); } return val; } public static KeyAssetRuleGroup CreateGenericDisplayRuleGroup(Object keyAsset_, GameObject itemPrefab, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) ItemDisplayRule val = CreateDisplayRule(itemPrefab, childName, position, rotation, scale); return CreateDisplayRuleGroupWithRules(keyAsset_, val); } public static ItemDisplayRule CreateDisplayRule(string prefabName, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) return CreateDisplayRule(LoadDisplay(prefabName), childName, position, rotation, scale); } public static ItemDisplayRule CreateDisplayRule(GameObject itemPrefab, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_002b: 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_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_003b: 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_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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) ItemDisplayRule result = default(ItemDisplayRule); result.ruleType = (ItemDisplayRuleType)0; result.childName = childName; result.followerPrefab = itemPrefab; result.limbMask = (LimbFlags)0; result.localPos = position; result.localAngles = rotation; result.localScale = scale; return result; } public static ItemDisplayRule CreateLimbMaskDisplayRule(LimbFlags limb) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) ItemDisplayRule result = default(ItemDisplayRule); result.ruleType = (ItemDisplayRuleType)1; result.limbMask = limb; result.childName = ""; result.followerPrefab = null; return result; } public static KeyAssetRuleGroup CreateDisplayRuleGroupWithRules(string itemName, params ItemDisplayRule[] rules) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) return CreateDisplayRuleGroupWithRules(GetKeyAssetFromString(itemName), rules); } public static KeyAssetRuleGroup CreateDisplayRuleGroupWithRules(Object keyAsset_, params ItemDisplayRule[] rules) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_0029: 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_002d: Unknown result type (might be due to invalid IL or missing references) KeyAssetRuleGroup result = default(KeyAssetRuleGroup); result.keyAsset = keyAsset_; result.displayRuleGroup = new DisplayRuleGroup { rules = rules }; return result; } public static KeyAssetRuleGroup CreateGenericDisplayRule(string itemName, string prefabName, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0009: 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) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return CreateGenericDisplayRule(GetKeyAssetFromString(itemName), prefabName, childName, position, rotation, scale); } public static KeyAssetRuleGroup CreateGenericDisplayRule(Object itemDef, string prefabName, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0009: 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) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return CreateGenericDisplayRule(itemDef, LoadDisplay(prefabName), childName, position, rotation, scale); } public static KeyAssetRuleGroup CreateGenericDisplayRule(string itemName, GameObject displayPrefab, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0009: 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) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return CreateGenericDisplayRule(GetKeyAssetFromString(itemName), displayPrefab, childName, position, rotation, scale); } public static KeyAssetRuleGroup CreateGenericDisplayRule(Object itemDef, GameObject displayPrefab, string childName, Vector3 position, Vector3 rotation, Vector3 scale) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_004f: 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_0057: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_0068: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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) KeyAssetRuleGroup result = default(KeyAssetRuleGroup); result.keyAsset = itemDef; result.displayRuleGroup = new DisplayRuleGroup { rules = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, childName = childName, followerPrefab = displayPrefab, limbMask = (LimbFlags)0, localPos = position, localAngles = rotation, localScale = scale } } }; return result; } } internal static class Materials { private static List<Material> cachedMaterials = new List<Material>(); internal static Shader hotpoo = LegacyResourcesAPI.Load<Shader>("Shaders/Deferred/HGStandard"); public static Material CreateHopooMaterial(string materialName) { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown Material val = cachedMaterials.Find(delegate(Material mat) { materialName.Replace(" (Instance)", ""); return ((Object)mat).name.Contains(materialName); }); if (Object.op_Implicit((Object)(object)val)) { return val; } val = ShamanAssets.mainAssetBundle.LoadAsset<Material>(materialName); if (!Object.op_Implicit((Object)(object)val)) { Log.Error("Failed to load material: " + materialName + " - Check to see that the material in your Unity project matches this name"); return new Material(hotpoo); } return val.SetHopooMaterial(); } public static Material SetHopooMaterial(this Material tempMat) { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) if (cachedMaterials.Contains(tempMat)) { return tempMat; } float? num = null; Color? val = null; if (tempMat.IsKeywordEnabled("_NORMALMAP")) { num = tempMat.GetFloat("_BumpScale"); } if (tempMat.IsKeywordEnabled("_EMISSION")) { val = tempMat.GetColor("_EmissionColor"); } tempMat.shader = hotpoo; tempMat.SetColor("_Color", tempMat.GetColor("_Color")); tempMat.SetTexture("_MainTex", tempMat.GetTexture("_MainTex")); tempMat.SetTexture("_EmTex", tempMat.GetTexture("_EmissionMap")); tempMat.EnableKeyword("DITHER"); if (num.HasValue) { tempMat.SetFloat("_NormalStrength", num.Value); } if (val.HasValue) { tempMat.SetColor("_EmColor", val.Value); tempMat.SetFloat("_EmPower", 1f); } if (tempMat.IsKeywordEnabled("NOCULL")) { tempMat.SetInt("_Cull", 0); } if (tempMat.IsKeywordEnabled("LIMBREMOVAL")) { tempMat.SetInt("_LimbRemovalOn", 1); } cachedMaterials.Add(tempMat); return tempMat; } public static Material MakeUnique(this Material material) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (cachedMaterials.Contains(material)) { return new Material(material); } return material; } public static Material SetColor(this Material material, Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) material.SetColor("_Color", color); return material; } public static Material SetNormal(this Material material, float normalStrength = 1f) { material.SetFloat("_NormalStrength", normalStrength); return material; } public static Material SetEmission(this Material material) { return material.SetEmission(1f); } public static Material SetEmission(this Material material, float emission) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return material.SetEmission(emission, Color.white); } public static Material SetEmission(this Material material, float emission, Color emissionColor) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) material.SetFloat("_EmPower", emission); material.SetColor("_EmColor", emissionColor); return material; } public static Material SetCull(this Material material, bool cull = false) { material.SetInt("_Cull", cull ? 1 : 0); return material; } } internal static class Prefabs { private static PhysicMaterial ragdollMaterial; public static GameObject CreateDisplayPrefab(string displayModelName, GameObject prefab, BodyInfo bodyInfo) { GameObject val = ShamanAssets.LoadSurvivorModel(displayModelName); CharacterModel val2 = val.GetComp