Decompiled source of JJBA Dio v1.0.0

plugins/JJBADio.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using EntityStates;
using JJBAMod.Modules;
using JJBAMod.Modules.BaseStates;
using JJBAMod.Modules.Characters;
using JJBAMod.Modules.Stands;
using JJBAMod.Survivors.Dio.Components;
using JJBAMod.Survivors.Dio.SkillStates;
using KinematicCharacterController;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.WwiseUtils;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("JJBADio")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+384ff630de143ea0a2c0f656a44d2900138c18b5")]
[assembly: AssemblyProduct("JJBADio")]
[assembly: AssemblyTitle("JJBADio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace JJBAMod.Survivors.Dio
{
	public static class DioAI
	{
		public static void Init(GameObject bodyPrefab, string masterName)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: 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_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: 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_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_032b: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = Prefabs.CreateBlankMasterPrefab(bodyPrefab, masterName);
			BaseAI component = obj.GetComponent<BaseAI>();
			component.aimVectorDampTime = 0.1f;
			component.aimVectorMaxSpeed = 360f;
			AISkillDriver obj2 = obj.AddComponent<AISkillDriver>();
			obj2.customName = "Use Primary Swing";
			obj2.skillSlot = (SkillSlot)0;
			obj2.requiredSkill = null;
			obj2.requireSkillReady = false;
			obj2.requireEquipmentReady = false;
			obj2.minUserHealthFraction = float.NegativeInfinity;
			obj2.maxUserHealthFraction = float.PositiveInfinity;
			obj2.minTargetHealthFraction = float.NegativeInfinity;
			obj2.maxTargetHealthFraction = float.PositiveInfinity;
			obj2.minDistance = 0f;
			obj2.maxDistance = 8f;
			obj2.selectionRequiresTargetLoS = false;
			obj2.selectionRequiresOnGround = false;
			obj2.selectionRequiresAimTarget = false;
			obj2.maxTimesSelected = -1;
			obj2.moveTargetType = (TargetType)0;
			obj2.activationRequiresTargetLoS = false;
			obj2.activationRequiresAimTargetLoS = false;
			obj2.activationRequiresAimConfirmation = false;
			obj2.movementType = (MovementType)1;
			obj2.moveInputScale = 1f;
			obj2.aimType = (AimType)1;
			obj2.ignoreNodeGraph = false;
			obj2.shouldSprint = false;
			obj2.shouldFireEquipment = false;
			obj2.buttonPressType = (ButtonPressType)0;
			obj2.driverUpdateTimerOverride = -1f;
			obj2.resetCurrentEnemyOnNextDriverSelection = false;
			obj2.noRepeat = false;
			obj2.nextHighPriorityOverride = null;
			AISkillDriver obj3 = obj.AddComponent<AISkillDriver>();
			obj3.customName = "Use Secondary First Bomb";
			obj3.skillSlot = (SkillSlot)1;
			obj3.requireSkillReady = true;
			obj3.minDistance = 0f;
			obj3.maxDistance = 8f;
			obj3.selectionRequiresTargetLoS = false;
			obj3.selectionRequiresOnGround = false;
			obj3.selectionRequiresAimTarget = false;
			obj3.maxTimesSelected = -1;
			obj3.moveTargetType = (TargetType)0;
			obj3.activationRequiresTargetLoS = false;
			obj3.activationRequiresAimTargetLoS = false;
			obj3.activationRequiresAimConfirmation = true;
			obj3.movementType = (MovementType)1;
			obj3.moveInputScale = 1f;
			obj3.aimType = (AimType)1;
			obj3.buttonPressType = (ButtonPressType)0;
			AISkillDriver obj4 = obj.AddComponent<AISkillDriver>();
			obj4.customName = "Use Utility Bomb Dash";
			obj4.skillSlot = (SkillSlot)2;
			obj4.requireSkillReady = true;
			obj4.minDistance = 8f;
			obj4.maxDistance = 20f;
			obj4.selectionRequiresTargetLoS = true;
			obj4.selectionRequiresOnGround = false;
			obj4.selectionRequiresAimTarget = false;
			obj4.maxTimesSelected = -1;
			obj4.moveTargetType = (TargetType)0;
			obj4.activationRequiresTargetLoS = false;
			obj4.activationRequiresAimTargetLoS = false;
			obj4.activationRequiresAimConfirmation = false;
			obj4.movementType = (MovementType)2;
			obj4.moveInputScale = 1f;
			obj4.aimType = (AimType)1;
			obj4.buttonPressType = (ButtonPressType)0;
			AISkillDriver obj5 = obj.AddComponent<AISkillDriver>();
			obj5.customName = "Use Special Sheer Heart Attack";
			obj5.skillSlot = (SkillSlot)3;
			obj5.requireSkillReady = true;
			obj5.minDistance = 0f;
			obj5.maxDistance = 20f;
			obj5.selectionRequiresTargetLoS = false;
			obj5.selectionRequiresOnGround = false;
			obj5.selectionRequiresAimTarget = false;
			obj5.maxTimesSelected = -1;
			obj5.moveTargetType = (TargetType)0;
			obj5.activationRequiresTargetLoS = false;
			obj5.activationRequiresAimTargetLoS = false;
			obj5.activationRequiresAimConfirmation = false;
			obj5.movementType = (MovementType)1;
			obj5.moveInputScale = 1f;
			obj5.aimType = (AimType)1;
			obj5.buttonPressType = (ButtonPressType)0;
			AISkillDriver obj6 = obj.AddComponent<AISkillDriver>();
			obj6.customName = "Chase";
			obj6.skillSlot = (SkillSlot)(-1);
			obj6.requireSkillReady = false;
			obj6.minDistance = 0f;
			obj6.maxDistance = float.PositiveInfinity;
			obj6.moveTargetType = (TargetType)0;
			obj6.activationRequiresTargetLoS = false;
			obj6.activationRequiresAimTargetLoS = false;
			obj6.activationRequiresAimConfirmation = false;
			obj6.movementType = (MovementType)1;
			obj6.moveInputScale = 1f;
			obj6.aimType = (AimType)1;
			obj6.buttonPressType = (ButtonPressType)0;
		}
	}
	public static class DioAssets
	{
		public static GameObject theWorldModel;

		public static GameObject knifeProjectilePrefab;

		public static GameObject roadRollerPrefab;

		public static TextAsset ultimateScene;

		public static Texture cutInTexture;

		public static Texture2D auraTexture;

		public static ModdedDamageType vampireDamageType;

		public static ModdedDamageType drainDamageType;

		public static NetworkSoundEventDef[] standPunchHitSoundEvents;

		public static NetworkSoundEventDef dioPunchHitSoundEvent;

		public static NetworkSoundEventDef knifeHitSoundEvent;

		public static NetworkSoundEventDef timeSkipHitSoundEvent;

		private static AssetBundle _assetBundle;

		public static void Init(AssetBundle assetBundle)
		{
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			_assetBundle = assetBundle;
			standPunchHitSoundEvents = (NetworkSoundEventDef[])(object)new NetworkSoundEventDef[DioSounds.standPunchHits.Length];
			for (int i = 0; i < standPunchHitSoundEvents.Length; i++)
			{
				standPunchHitSoundEvents[i] = Content.CreateAndAddNetworkSoundEventDef(DioSounds.standPunchHits[i]);
			}
			dioPunchHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_bandit2_m2_impact");
			knifeHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_JJBA_KnifeHit");
			timeSkipHitSoundEvent = Content.CreateAndAddNetworkSoundEventDef("Play_Dio_TimeSkipHit");
			theWorldModel = _assetBundle.LoadAsset<GameObject>("mdlTheWorld3");
			cutInTexture = (Texture)(object)_assetBundle.LoadAsset<Texture2D>("texDioCutIn");
			auraTexture = _assetBundle.LoadAsset<Texture2D>("texDioAura");
			TheWorldTimeStop.track = StandCinematic.LoadTrack(_assetBundle.LoadAsset<TextAsset>("DioTimeStopCamera"));
			vampireDamageType = DamageAPI.ReserveDamageType();
			drainDamageType = DamageAPI.ReserveDamageType();
			DioFX.Init();
			DioRoadRollerCutscene.track = StandCinematic.LoadTrack(_assetBundle.LoadAsset<TextAsset>("DioUltimateCamera"));
			ultimateScene = _assetBundle.LoadAsset<TextAsset>("DioUltimateScene");
			DioRoadRollerCutscene.scene = RoadRollerScene.Load(ultimateScene);
			Asset.ConvertAllRenderersToHopooShader(theWorldModel);
			roadRollerPrefab = _assetBundle.LoadAsset<GameObject>("DioRoadRoller");
			if (Object.op_Implicit((Object)(object)roadRollerPrefab))
			{
				Asset.ConvertAllRenderersToHopooShader(roadRollerPrefab);
			}
			CreateKnife();
			if (Object.op_Implicit((Object)(object)knifeProjectilePrefab))
			{
				Content.AddProjectilePrefab(knifeProjectilePrefab);
			}
		}

		private static void CreateKnife()
		{
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: 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_016d: Unknown result type (might be due to invalid IL or missing references)
			knifeProjectilePrefab = Asset.CloneProjectilePrefab("CommandoGrenadeProjectile", "DioKnifeProjectile");
			Object.DestroyImmediate((Object)(object)knifeProjectilePrefab.GetComponent<ProjectileImpactExplosion>());
			ApplyTorqueOnStart component = knifeProjectilePrefab.GetComponent<ApplyTorqueOnStart>();
			if (Object.op_Implicit((Object)(object)component))
			{
				Object.DestroyImmediate((Object)(object)component);
			}
			ProjectileSingleTargetImpact obj = knifeProjectilePrefab.AddComponent<ProjectileSingleTargetImpact>();
			obj.destroyOnWorld = true;
			obj.destroyWhenNotAlive = true;
			obj.impactEffect = SharedEffects.punchHitImpactEffect;
			obj.enemyHitSound = knifeHitSoundEvent;
			Rigidbody component2 = knifeProjectilePrefab.GetComponent<Rigidbody>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.useGravity = false;
				component2.freezeRotation = true;
				component2.collisionDetectionMode = (CollisionDetectionMode)2;
			}
			SphereCollider component3 = knifeProjectilePrefab.GetComponent<SphereCollider>();
			if (Object.op_Implicit((Object)(object)component3))
			{
				component3.radius = 0.2f;
			}
			ProjectileSimple val = knifeProjectilePrefab.GetComponent<ProjectileSimple>();
			if (!Object.op_Implicit((Object)(object)val))
			{
				val = knifeProjectilePrefab.AddComponent<ProjectileSimple>();
			}
			val.desiredForwardSpeed = 110f;
			val.updateAfterFiring = true;
			val.lifetime = 1.2f;
			knifeProjectilePrefab.AddComponent<TimeStopKnife>();
			knifeProjectilePrefab.AddComponent<KnifeCollisionGuard>();
			ProjectileController component4 = knifeProjectilePrefab.GetComponent<ProjectileController>();
			component4.startSound = "";
			component4.procCoefficient = 1f;
			if ((Object)(object)_assetBundle.LoadAsset<GameObject>("DioKnifeGhost") != (Object)null)
			{
				GameObject val2 = Asset.CreateProjectileGhostPrefab(_assetBundle, "DioKnifeGhost");
				if (val2.transform.childCount > 0)
				{
					val2.transform.GetChild(0).localRotation = Quaternion.Euler(DioStaticValues.knifeGhostRotation);
				}
				val2.transform.localScale = Vector3.one * 1.6f;
				component4.ghostPrefab = val2;
			}
		}
	}
	public static class DioFX
	{
		public static readonly Color gold = new Color(1f, 0.82f, 0.2f);

		public static readonly Color paleGold = new Color(1f, 0.95f, 0.7f);

		public static readonly Color blood = new Color(0.75f, 0.02f, 0.05f);

		public static GameObject timeStopFlash;

		public static GameObject goldFlash;

		public static GameObject bloodSpray;

		public static GameObject stingyEyesTracer;

		public static GameObject frostBurst;

		public static readonly Color frost = new Color(0.7f, 0.9f, 1f);

		public static void Init()
		{
			timeStopFlash = Register(TimeStopFlash());
			goldFlash = Register(GoldFlash());
			bloodSpray = Register(BloodSpray());
			frostBurst = Register(FrostBurst());
			stingyEyesTracer = Asset.CloneTracer("TracerGolem", "DioStingyEyesTracer") ?? Asset.CloneTracer("TracerCommandoDefault", "DioStingyEyesTracer");
		}

		private static GameObject Register(GameObject effect)
		{
			Content.CreateAndAddEffectDef(effect);
			return effect;
		}

		private static Color A(Color color, float alpha)
		{
			//IL_0000: 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_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)
			return new Color(color.r, color.g, color.b, alpha);
		}

		private static GameObject TimeStopFlash()
		{
			//IL_0052: 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_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: 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_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("DioTimeStopFlash", 2.5f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Wave", (Texture)(object)FX.Ring, (Facing)0);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 1.1f, 1.1f, 30f, 30f, 0f, 0f);
			FX.Colors(obj2, A(paleGold, 0.9f), A(gold, 0f), 0.01f);
			FX.Blast(obj2, 0.02f, 1f);
			ParticleSystem obj3 = FX.Particles(obj, "Floor", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj3, 1, 0f);
			FX.Life(obj3, 0.9f, 0.9f, 18f, 18f, 0f, 0f);
			FX.Colors(obj3, A(gold, 0.8f), A(gold, 0f), 0.01f);
			FX.Blast(obj3, 0.05f, 1f);
			ParticleSystem obj4 = FX.Particles(obj, "Core", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj4, 3, 0f);
			FX.Life(obj4, 0.35f, 0.5f, 5f, 7f, 0f, 0f);
			FX.Colors(obj4, A(Color.white, 1f), A(gold, 0f), 0.01f);
			FX.Grow(obj4, 0.4f, 1.3f);
			ParticleSystem obj5 = FX.Particles(obj, "Sparks", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj5, 60, 0f);
			FX.Life(obj5, 0.4f, 0.9f, 0.08f, 0.18f, 14f, 30f);
			FX.Sphere(obj5, 0.4f, 1f);
			FX.Drag(obj5, 0.08f);
			FX.Colors(obj5, A(Color.white, 1f), A(gold, 0f), 0.05f);
			FX.AddLight(obj, gold, 30f, 12f, 0.9f);
			return obj;
		}

		private static GameObject GoldFlash()
		{
			//IL_0052: 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_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: 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_0178: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("DioGoldFlash", 1.2f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Ring", (Texture)(object)FX.Ring, (Facing)0);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.35f, 0.35f, 3f, 3f, 0f, 0f);
			FX.Colors(obj2, A(paleGold, 0.85f), A(gold, 0f), 0.01f);
			FX.Blast(obj2, 0.1f, 1f);
			ParticleSystem obj3 = FX.Particles(obj, "Core", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj3, 2, 0f);
			FX.Life(obj3, 0.2f, 0.3f, 1.6f, 2.2f, 0f, 0f);
			FX.Colors(obj3, A(Color.white, 0.9f), A(gold, 0f), 0.01f);
			ParticleSystem obj4 = FX.Particles(obj, "Sparks", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj4, 18, 0f);
			FX.Life(obj4, 0.2f, 0.45f, 0.05f, 0.1f, 6f, 14f);
			FX.Sphere(obj4, 0.3f, 1f);
			FX.Drag(obj4, 0.1f);
			FX.Colors(obj4, A(Color.white, 1f), A(gold, 0f), 0.05f);
			FX.AddLight(obj, gold, 8f, 6f, 0.35f);
			return obj;
		}

		private static GameObject BloodSpray()
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("DioBloodSpray", 1.5f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Drops", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj2, 26, 0f);
			FX.Life(obj2, 0.4f, 0.8f, 0.05f, 0.11f, 3f, 7f);
			FX.Sphere(obj2, 0.4f, 1f);
			FX.Gravity(obj2, 1.2f);
			FX.Colors(obj2, A(blood, 1f), A(blood * 0.5f, 0.6f), 0.01f);
			ParticleSystem obj3 = FX.Particles(obj, "Mist", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj3, 6, 0f);
			FX.Life(obj3, 0.4f, 0.7f, 0.5f, 0.9f, 0.2f, 0.6f);
			FX.Sphere(obj3, 0.3f, 1f);
			FX.Colors(obj3, A(blood, 0.6f), A(blood, 0f), 0.05f);
			FX.Grow(obj3, 0.6f, 1.3f);
			return obj;
		}

		private static GameObject FrostBurst()
		{
			//IL_0052: 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_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: 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_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: 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_0199: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = FX.NewEffect("DioFrostBurst", 1.6f, (string)null);
			ParticleSystem obj2 = FX.Particles(obj, "Ring", (Texture)(object)FX.Ring, (Facing)1);
			FX.Burst(obj2, 1, 0f);
			FX.Life(obj2, 0.5f, 0.5f, 2f, 2f, 0f, 0f);
			FX.Colors(obj2, A(Color.white, 0.9f), A(frost, 0f), 0.01f);
			FX.Blast(obj2, 0.1f, 1f);
			ParticleSystem obj3 = FX.Particles(obj, "Shards", (Texture)(object)FX.Spark, (Facing)2);
			FX.Burst(obj3, 40, 0f);
			FX.Life(obj3, 0.35f, 0.8f, 0.06f, 0.14f, 6f, 16f);
			FX.Sphere(obj3, 0.3f, 1f);
			FX.Gravity(obj3, 1f);
			FX.Colors(obj3, A(Color.white, 1f), A(frost, 0f), 0.05f);
			ParticleSystem obj4 = FX.Particles(obj, "Mist", (Texture)(object)FX.SoftDot, (Facing)0);
			FX.Burst(obj4, 10, 0f);
			FX.Life(obj4, 0.6f, 1.1f, 0.6f, 1.2f, 0.3f, 1f);
			FX.Sphere(obj4, 0.5f, 1f);
			FX.Colors(obj4, A(frost, 0.5f), A(frost, 0f), 0.05f);
			FX.Grow(obj4, 0.6f, 1.6f);
			FX.AddLight(obj, frost, 10f, 5f, 0.4f);
			return obj;
		}
	}
	public static class DioSounds
	{
		public static readonly string[] standPunchSwings = new string[3] { "Play_JJBA_StandSwing1", "Play_JJBA_StandSwing2", "Play_JJBA_StandSwing3" };

		public static readonly string[] standPunchHits = new string[3] { "Play_JJBA_StandHit1", "Play_JJBA_StandHit2", "Play_JJBA_StandHit3" };

		public static readonly string[] dioSwings = new string[3] { "Play_Kira_Swing1", "Play_Kira_Swing2", "Play_Kira_Swing3" };

		public const string dioPunchHit = "Play_bandit2_m2_impact";

		private static readonly string[][] punchShouts = new string[3][]
		{
			new string[1] { "Play_Dio_Shout1" },
			new string[1] { "Play_Dio_Shout2" },
			new string[1] { "Play_Dio_Shout3" }
		};

		public const string knifeThrow = "Play_Dio_KnifeThrow";

		public const string knifeHit = "Play_JJBA_KnifeHit";

		public const string dash = "Play_Dio_Dash";

		public const string timeSkip = "Play_Dio_TimeSkip";

		public const string timeSkipHit = "Play_Dio_TimeSkipHit";

		public const string rushStart = "Play_Dio_Rush";

		public const string rushFinish = "Play_Dio_RushFinish";

		public const string heatStart = "Play_Dio_HeatStart";

		public const string heatHit = "Play_Dio_HeatHit";

		public const string ghaHit = "Play_Dio_GhaHit";

		public const string ghaAtk = "Play_Dio_GhaAtk";

		public const string timeStopCall = "Play_Dio_TheWorld";

		public const string timeStop = "Play_JJBA_TimeStop";

		public const string timeResume = "Play_JJBA_TimeResume";

		public const string timeResumeLine = "Play_Dio_TimeResume";

		public const string timeStopShot = "Play_Dio_TimeStopShot";

		public const string drainLunge = "Play_Dio_DrainLunge";

		public const string drainGrab = "Play_Dio_DrainGrab";

		public const string drainSuck = "Play_Dio_DrainSuck";

		public const string drainEnd = "Play_Dio_DrainEnd";

		public const string knifeWall = "Play_Dio_KnifeWall";

		public const string muda = "Play_Dio_Muda";

		public const string step = "Play_Dio_Step";

		public static string PunchShout(int step)
		{
			return Pick(punchShouts[step % punchShouts.Length]);
		}

		private static string Pick(string[] options)
		{
			return options[Random.Range(0, options.Length)];
		}
	}
	public static class DioStates
	{
		public static void Init()
		{
			Content.AddEntityState(typeof(TheWorldPunch));
			Content.AddEntityState(typeof(KnifeThrow));
			Content.AddEntityState(typeof(MudaRush));
			Content.AddEntityState(typeof(TheWorldUltimate));
			Content.AddEntityState(typeof(TheWorldTimeStop));
			Content.AddEntityState(typeof(TimeSkip));
			Content.AddEntityState(typeof(DioHeatAttack));
			Content.AddEntityState(typeof(DioHeatStrike));
			Content.AddEntityState(typeof(DioRoadRollerCutscene));
			Content.AddEntityState(typeof(StingyEyes));
			Content.AddEntityState(typeof(VaporizationFreezing));
			Content.AddEntityState(typeof(DioFreezeShatter));
			Content.AddEntityState(typeof(BehindYou));
			Content.AddEntityState(typeof(WryyyDive));
			Content.AddEntityState(typeof(WryyyDiveLanding));
			Content.AddEntityState(typeof(VampireStrike));
			Content.AddEntityState(typeof(MudaFinisher));
			Content.AddEntityState(typeof(DioBloodDrain));
			Content.AddEntityState(typeof(DioBloodDrink));
			Content.AddEntityState(typeof(TimeStoppedState));
		}
	}
	public static class DioStaticValues
	{
		public const float punchDamageCoefficient = 2.6f;

		public const float dioPunchDamageCoefficient = 1.2f;

		public const float punchLockOnRange = 15f;

		public const float punchStandCost = 4f;

		public const int knivesPerThrow = 3;

		public const float knifeDamageCoefficient = 1.6f;

		public const float knifeSpread = 7f;

		public const float knifeSpeed = 110f;

		public static readonly Vector3 knifeGhostRotation = new Vector3(0f, 0f, 0f);

		public const int rushHits = 12;

		public const float rushHitDamageCoefficient = 0.7f;

		public const float rushFinisherDamageCoefficient = 5f;

		public const float rushStandCost = 30f;

		public const float timeStopDuration = 5f;

		public const float timeStopStandCost = 50f;

		public const float timeStopCooldown = 40f;

		public const float knifeHangDistance = 1.5f;

		public const float timeSkipDistance = 24f;

		public const float timeSkipDamageCoefficient = 4f;

		public const float timeSkipStandCost = 20f;

		public const float timeSkipCooldown = 8f;

		public const float heatRange = 30f;

		public const float heatStandCost = 40f;

		public const float heatCooldown = 25f;

		public const float heatHitDamageCoefficient = 3f;

		public const float heatFinisherDamageCoefficient = 21f;

		public const float ghaOpeningDamageCoefficient = 3f;

		public const float ghaLandingDamageCoefficient = 12f;

		public const float ghaPoundDamageCoefficient = 0.6f;

		public const float ghaFinaleDamageCoefficient = 30f;

		public const float drainLungeSpeed = 22f;

		public const float drainTickDamageCoefficient = 1.2f;

		public const int drainTicks = 6;

		public const float drainEndDamageCoefficient = 5f;

		public const float drainHealFraction = 0.5f;

		public const float drainStandRestore = 4f;

		public const float drainStandCost = 10f;

		public const float drainCooldown = 12f;

		public const float freezeGrabDamageCoefficient = 2f;

		public const float freezeShatterDamageCoefficient = 8f;

		public const float freezeShatterRadius = 9f;

		public const float freezeStandCost = 15f;

		public const float freezeCooldown = 10f;

		public const float vampireDamageCoefficient = 2.4f;

		public const float vampireHealFraction = 0.12f;

		public const float stingyEyesDamageCoefficient = 3.2f;

		public const float stingyEyesRange = 120f;

		public const float stingyEyesCooldown = 6f;

		public const float behindYouRange = 30f;

		public const float behindYouBlinkDistance = 14f;

		public const float behindYouDamageCoefficient = 5f;

		public const float behindYouStandCost = 15f;

		public const float behindYouCooldown = 6f;

		public const float mudaDamageCoefficient = 3.5f;

		public const float mudaFinalDamageCoefficient = 9f;

		public const float mudaStandCost = 25f;

		public const float mudaCooldown = 8f;

		public const float diveLeapSpeed = 30f;

		public const float diveSpeed = 70f;

		public const float diveStopDuration = 3f;

		public const float diveDamageCoefficient = 16f;

		public const float diveRadius = 12f;

		public const float diveStandCost = 35f;

		public const float diveCooldown = 25f;
	}
	public static class DioTokens
	{
		public static void Init()
		{
			string text = "KAVAHN_DIO_";
			string text2 = "DIO, the vampire of Part 3, and his stand The World.<color=#CCD3E0>\n\n< ! > The World's punches lock on and fly to the enemy, so keep moving while it fights.\n\n< ! > Knives thrown while time is stopped hang in the air and all strike when it starts again.\n\n< ! > Save Road Roller for a boss: on one it becomes a cutscene, on anything else a heavy strike.</color>";
			Language.Add(text + "NAME", "Dio Brando");
			Language.Add(text + "DESCRIPTION", text2);
			Language.Add(text + "SUBTITLE", "The World");
			Language.Add(text + "LORE", "\"The World! Time, stop!\"");
			Language.Add(text + "OUTRO_FLAVOR", "...and so he left, to rule the world from the shadows.");
			Language.Add(text + "OUTRO_FAILURE", "...and so he vanished, turned to ash by the sun.");
			Language.Add(text + "STAND_NAME", "THE WORLD");
			Language.Add(text + "DEFAULT_SKIN_NAME", "Default");
			Language.Add(text + "PASSIVE_NAME", "Stand: The World");
			Language.Add(text + "PASSIVE_DESCRIPTION", "The World's attacks spend its <style=cIsUtility>stand meter</style>. While it's out, it takes <style=cIsHealing>half the damage</style> aimed at Dio. If the meter runs dry, the stand <style=cDeath>breaks</style>.");
			Language.Add(text + "PRIMARY_PUNCH_NAME", "The World");
			Language.Add(text + "PRIMARY_PUNCH_DESCRIPTION", "<style=cIsUtility>Agile.</style> " + $"<style=cIsUtility>Lock on</style> to an enemy within {15f}m. The World <style=cIsUtility>dashes</style> to it and punches for <style=cIsDamage>{260f}% damage</style>. Without his stand, Dio strikes for <style=cIsDamage>{120.00001f}% damage</style>.");
			Language.Add(text + "SECONDARY_KNIVES_NAME", "Knife Throw");
			Language.Add(text + "SECONDARY_KNIVES_DESCRIPTION", $"Throw a fan of <style=cIsDamage>{3}</style> knives for <style=cIsDamage>{160f}% damage</style> each. In stopped time they <style=cIsUtility>hang in the air</style> until time moves again.");
			Language.Add(text + "UTILITY_TIMESKIP_NAME", "Time Skip");
			Language.Add(text + "UTILITY_TIMESKIP_DESCRIPTION", $"Time stops for an instant and you <style=cIsUtility>dash {24f}m</style> where you aim. The World hits everything in your path for <style=cIsDamage>{400f}% damage</style> and <style=cIsDamage>stuns</style>.");
			Language.Add(text + "SPECIAL_RUSH_NAME", "MUDA MUDA MUDA");
			Language.Add(text + "SPECIAL_RUSH_DESCRIPTION", $"The World punches the locked-on enemy <style=cIsDamage>{12} times for {70f}% damage</style> each, then hits once more for <style=cIsDamage>{500f}% damage</style>.");
			Language.Add(text + "ULTIMATE_TIMESTOP_NAME", "THE WORLD");
			Language.Add(text + "ULTIMATE_TIMESTOP_DESCRIPTION", $"<style=cIsUtility>Ultimate.</style> <style=cIsUtility>Stop time</style> for {5f} seconds. Enemies and their projectiles freeze while you keep moving. Bosses stop for half as long. Costs {50f} stand meter.");
			Language.Add(text + "TIMESTOP_LABEL", "TIME STOPPED");
			Language.Add(text + "ULTIMATE_TITLE", "THE WORLD");
			Language.Add(text + "HEAT_NAME", "Road Roller");
			Language.Add(text + "HEAT_DESCRIPTION", $"<style=cIsUtility>Heat attack.</style> On a <style=cIsDamage>boss</style>: stop time and crush it under a road roller for up to <style=cIsDamage>{7440f}% damage</style>. Otherwise: appear behind the enemy, jab 3 times for <style=cIsDamage>{300f}% damage</style>, then punch through it for <style=cIsDamage>{2100f}% damage</style>. Costs {40f} stand meter.");
			Language.Add(text + "GHA_TITLE", "ROAD ROLLER DA!");
			Language.Add(text + "STANDSPECIAL_DRAIN_NAME", "Blood Drain");
			Language.Add(text + "STANDSPECIAL_DRAIN_DESCRIPTION", $"Lunge and <style=cIsUtility>grab</style> an enemy, then drink its blood: <style=cIsDamage>{6}x{120.00001f}% damage</style>, healing for <style=cIsHealing>{50f}%</style> of it and <style=cIsUtility>refilling the stand meter</style>. Then throw it away for <style=cIsDamage>{500f}% damage</style>.");
			Language.Add(text + "STANDSPECIAL_FREEZE_NAME", "Vaporization Freezing");
			Language.Add(text + "STANDSPECIAL_FREEZE_DESCRIPTION", $"Lunge and grab an enemy, <style=cIsUtility>freezing</style> it for <style=cIsDamage>{200f}% damage</style>. The World shatters it for <style=cIsDamage>{800f}% damage</style>, <style=cIsUtility>freezing</style> everything within {9f}m. Costs {15f} stand meter.");
			Language.Add(text + "PRIMARY_VAMPIRE_NAME", "Vampire Strikes");
			Language.Add(text + "PRIMARY_VAMPIRE_DESCRIPTION", "<style=cIsUtility>Agile.</style> " + $"Claw with your own hands for <style=cIsDamage>{240.00002f}% damage</style>, healing for <style=cIsHealing>{12f}%</style> of the damage dealt. No stand needed.");
			Language.Add(text + "SECONDARY_EYES_NAME", "Space Ripper Stingy Eyes");
			Language.Add(text + "SECONDARY_EYES_DESCRIPTION", $"Fire two high-pressure beams from your eyes for <style=cIsDamage>2x{320f}% damage</style>. They <style=cIsUtility>pierce</style> every enemy in the line. No stand needed.");
			Language.Add(text + "UTILITY_BEHIND_NAME", "Behind You");
			Language.Add(text + "UTILITY_BEHIND_DESCRIPTION", $"Time stops for an instant and you <style=cIsUtility>appear behind</style> the targeted enemy. The World kicks it away for <style=cIsDamage>{500f}% damage</style> and <style=cIsDamage>stuns</style>. With no target, <style=cIsUtility>blink {14f}m</style> ahead. Costs {15f} stand meter.");
			Language.Add(text + "SPECIAL_MUDA_NAME", "MUDA!");
			Language.Add(text + "SPECIAL_MUDA_DESCRIPTION", $"The World flies at the locked-on enemy and lands two blows for <style=cIsDamage>{350f}% damage</style>, then a last one for <style=cIsDamage>{900f}% damage</style>.");
			Language.Add(text + "ULTIMATE_DIVE_NAME", "WRYYY!");
			Language.Add(text + "ULTIMATE_DIVE_DESCRIPTION", $"<style=cIsUtility>Ultimate.</style> Leap high and <style=cIsUtility>stop time</style> for {3f} seconds at the top, then dive at where you aim. The landing hits everything within {12f}m for <style=cIsDamage>{1600f}% damage</style> and <style=cIsDamage>stuns</style>. Costs {35f} stand meter.");
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.kavahn.JJBADio", "JJBADio", "1.0.0")]
	public class DioPlugin : BaseUnityPlugin
	{
		private void Awake()
		{
			string? directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			Asset.AddBundleFolder(directoryName);
			SoundBanks.Add(directoryName, "JJBADio.bnk");
			JJBAPlugin.Safely((Action)delegate
			{
				((CharacterBase<DioSurvivor>)(object)new DioSurvivor()).Initialize();
			});
		}
	}
	public class DioSurvivor : SurvivorBase<DioSurvivor>
	{
		public const string DIO_PREFIX = "KAVAHN_DIO_";

		public const float modelScale = 1.34f;

		private static bool hooked;

		public override string assetBundleName => "jjbadio";

		public override string bodyName => "KavahnDioBody";

		public override string masterName => "KavahnDioMonsterMaster";

		public override string modelPrefabName => "mdlDio";

		public override string displayPrefabName => "DioDisplay";

		public override string survivorTokenPrefix => "KAVAHN_DIO_";

		public bool Available
		{
			get
			{
				if (Object.op_Implicit((Object)(object)((CharacterBase<DioSurvivor>)(object)this).assetBundle))
				{
					return ((CharacterBase<DioSurvivor>)(object)this).assetBundle.Contains(((CharacterBase<DioSurvivor>)(object)this).modelPrefabName);
				}
				return false;
			}
		}

		public override BodyInfo bodyInfo => new BodyInfo
		{
			bodyName = ((CharacterBase<DioSurvivor>)(object)this).bodyName,
			bodyNameToken = "KAVAHN_DIO_NAME",
			subtitleNameToken = "KAVAHN_DIO_SUBTITLE",
			characterPortrait = Icon<Texture>("texDioIcon", "texHenryIcon"),
			bodyColor = new Color(0.95f, 0.78f, 0.25f),
			sortPosition = 104f,
			crosshair = Asset.LoadCrosshair("Standard"),
			podPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/SurvivorPod"),
			maxHealth = 110f,
			healthRegen = 1.5f,
			armor = 0f,
			moveSpeed = 7.5f,
			jumpCount = 1,
			cameraParamsVerticalOffset = 1.7f,
			cameraParamsDepth = -12f
		};

		public override CustomRendererInfo[] customRendererInfos
		{
			get
			{
				//IL_003e: 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_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_0059: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0070: Expected O, but got Unknown
				ChildLocator val = (Object.op_Implicit((Object)(object)((CharacterBase<DioSurvivor>)(object)this).characterModelObject) ? ((CharacterBase<DioSurvivor>)(object)this).characterModelObject.GetComponent<ChildLocator>() : null);
				if (!Object.op_Implicit((Object)(object)val))
				{
					return (CustomRendererInfo[])(object)new CustomRendererInfo[0];
				}
				List<CustomRendererInfo> list = new List<CustomRendererInfo>();
				NameTransformPair[] transformPairs = val.transformPairs;
				foreach (NameTransformPair val2 in transformPairs)
				{
					if (val2.name.StartsWith("Mesh"))
					{
						list.Add(new CustomRendererInfo
						{
							childName = val2.name
						});
					}
				}
				return list.ToArray();
			}
		}

		public override UnlockableDef characterUnlockableDef => null;

		public override ItemDisplaysBase itemDisplays => null;

		public override AssetBundle assetBundle { get; protected set; }

		public override GameObject bodyPrefab { get; protected set; }

		public override CharacterBody prefabCharacterBody { get; protected set; }

		public override GameObject characterModelObject { get; protected set; }

		public override CharacterModel prefabCharacterModel { get; protected set; }

		public override GameObject displayPrefab { get; protected set; }

		private T Icon<T>(string name, string fallback) where T : Object
		{
			T val = ((CharacterBase<DioSurvivor>)(object)this).assetBundle.LoadAsset<T>(name);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return ((CharacterBase<DioSurvivor>)(object)this).assetBundle.LoadAsset<T>(fallback);
			}
			return val;
		}

		public override void Initialize()
		{
			((CharacterBase<DioSurvivor>)(object)this).assetBundle = Asset.LoadAssetBundle(((CharacterBase<DioSurvivor>)(object)this).assetBundleName);
			if (!Available)
			{
				Log.Warning((object)"the asset bundle has no dio in it yet, skipping him (rebuild it with Tools/build_bundle.sh)");
			}
			else
			{
				((CharacterBase<DioSurvivor>)(object)this).Initialize();
			}
		}

		public override void InitializeCharacter()
		{
			base.InitializeCharacter();
			DioStates.Init();
			DioTokens.Init();
			DioAssets.Init(((CharacterBase<DioSurvivor>)(object)this).assetBundle);
			((CharacterBase<DioSurvivor>)(object)this).InitializeEntityStateMachines();
			((CharacterBase<DioSurvivor>)(object)this).InitializeSkills();
			((CharacterBase<DioSurvivor>)(object)this).InitializeSkins();
			((CharacterBase<DioSurvivor>)(object)this).InitializeCharacterMaster();
			AdditionalBodySetup();
		}

		private void AdditionalBodySetup()
		{
			//IL_000c: 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)
			//IL_0039: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: 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_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: 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_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: 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_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0155: Expected O, but got Unknown
			Transform transform = ((CharacterBase<DioSurvivor>)(object)this).characterModelObject.transform;
			transform.localScale *= 1.34f;
			if (Object.op_Implicit((Object)(object)((SurvivorBase<DioSurvivor>)this).displayPrefab))
			{
				Transform transform2 = ((SurvivorBase<DioSurvivor>)this).displayPrefab.transform;
				transform2.localScale *= 1.34f;
			}
			Prefabs.SetupHitBoxGroup(((CharacterBase<DioSurvivor>)(object)this).characterModelObject, "SwordGroup", new string[1] { "SwordHitbox" });
			if (!Object.op_Implicit((Object)(object)((CharacterBase<DioSurvivor>)(object)this).bodyPrefab.GetComponent<AkGameObj>()))
			{
				((CharacterBase<DioSurvivor>)(object)this).bodyPrefab.AddComponent<AkGameObj>();
			}
			((CharacterBase<DioSurvivor>)(object)this).bodyPrefab.AddComponent<TimeStop>();
			Stands.AddStandUser(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, ((CharacterBase<DioSurvivor>)(object)this).bodyName, new StandDefinition
			{
				standNameToken = "KAVAHN_DIO_STAND_NAME",
				color = new Color(1f, 0.82f, 0.25f),
				standModelPrefab = DioAssets.theWorldModel,
				modelScale = 1.29f,
				actionModelScale = 1.5f,
				standOffset = new Vector3(0.7f, 0f, -1f),
				standoffFromTarget = 1.3f,
				hitboxCenter = new Vector3(0f, 0f, 1.2f),
				hitboxSize = new Vector3(3.3f, 3.3f, 3.5f),
				maxGauge = 130f
			});
			((CharacterBase<DioSurvivor>)(object)this).bodyPrefab.AddComponent<StandTracker>().maxTrackingDistance = 15f;
			((CharacterBase<DioSurvivor>)(object)this).bodyPrefab.AddComponent<DioAura>();
			if (!hooked)
			{
				hooked = true;
				GlobalEventManager.onServerDamageDealt += OnServerDamageDealt;
			}
			GameObject[] array = (GameObject[])(object)new GameObject[2]
			{
				((CharacterBase<DioSurvivor>)(object)this).bodyPrefab,
				((SurvivorBase<DioSurvivor>)this).displayPrefab
			};
			foreach (GameObject val in array)
			{
				if (Object.op_Implicit((Object)(object)val))
				{
					val.AddComponent<SoundbankLoader>().soundbankStrings = SharedEffects.vanillaSoundbanks;
				}
			}
		}

		private static void OnServerDamageDealt(DamageReport report)
		{
			//IL_0028: 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_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			DamageInfo damageInfo = report.damageInfo;
			CharacterBody attackerBody = report.attackerBody;
			if (damageInfo == null || !Object.op_Implicit((Object)(object)attackerBody) || !Object.op_Implicit((Object)(object)attackerBody.healthComponent))
			{
				return;
			}
			if (DamageAPI.HasModdedDamageType(damageInfo, DioAssets.vampireDamageType))
			{
				attackerBody.healthComponent.Heal(report.damageDealt * 0.12f, default(ProcChainMask), true);
			}
			if (DamageAPI.HasModdedDamageType(damageInfo, DioAssets.drainDamageType))
			{
				attackerBody.healthComponent.Heal(report.damageDealt * 0.5f, default(ProcChainMask), true);
				StandUser component = ((Component)attackerBody).GetComponent<StandUser>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.Restore(4f);
				}
			}
		}

		public override void InitializeEntityStateMachines()
		{
			Prefabs.ClearEntityStateMachines(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab);
			Prefabs.AddMainEntityStateMachine(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, "Body", typeof(GenericCharacterMain), typeof(SpawnTeleporterState));
			Prefabs.AddEntityStateMachine(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, "Weapon", (Type)null, (Type)null, true, true);
			Prefabs.AddEntityStateMachine(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, "Weapon2", (Type)null, (Type)null, true, true);
		}

		public override void InitializeSkills()
		{
			//IL_0018: 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_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Expected O, but got Unknown
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: 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_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Expected O, but got Unknown
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: 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_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: 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_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Expected O, but got Unknown
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Expected O, but got Unknown
			//IL_030c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Expected O, but got Unknown
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_044e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0455: Expected O, but got Unknown
			//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0510: Unknown result type (might be due to invalid IL or missing references)
			//IL_0517: Expected O, but got Unknown
			//IL_0573: Unknown result type (might be due to invalid IL or missing references)
			//IL_0578: Unknown result type (might be due to invalid IL or missing references)
			//IL_058c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f4: Expected O, but got Unknown
			//IL_0650: Unknown result type (might be due to invalid IL or missing references)
			//IL_0655: Unknown result type (might be due to invalid IL or missing references)
			//IL_0669: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06be: Expected O, but got Unknown
			//IL_0722: Unknown result type (might be due to invalid IL or missing references)
			//IL_0727: Unknown result type (might be due to invalid IL or missing references)
			//IL_073b: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07aa: Expected O, but got Unknown
			//IL_0806: Unknown result type (might be due to invalid IL or missing references)
			//IL_080b: Unknown result type (might be due to invalid IL or missing references)
			//IL_081f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0894: Unknown result type (might be due to invalid IL or missing references)
			//IL_089b: Expected O, but got Unknown
			//IL_08ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0904: Unknown result type (might be due to invalid IL or missing references)
			//IL_0918: Unknown result type (might be due to invalid IL or missing references)
			//IL_0987: Unknown result type (might be due to invalid IL or missing references)
			//IL_098e: Expected O, but got Unknown
			//IL_09ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a03: Unknown result type (might be due to invalid IL or missing references)
			Skills.ClearGenericSkills(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab);
			((CharacterBase<DioSurvivor>)(object)this).bodyPrefab.GetComponent<SkillLocator>().passiveSkill = new PassiveSkill
			{
				enabled = true,
				skillNameToken = "KAVAHN_DIO_PASSIVE_NAME",
				skillDescriptionToken = "KAVAHN_DIO_PASSIVE_DESCRIPTION",
				keywordToken = "KEYWORD_JJBA_STAND",
				icon = Icon<Sprite>("texDioPassive", "texPassiveIcon")
			};
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillSlot)0, false);
			SteppedSkillDef val = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("DioTheWorld", "KAVAHN_DIO_PRIMARY_PUNCH_NAME", "KAVAHN_DIO_PRIMARY_PUNCH_DESCRIPTION", Icon<Sprite>("texDioPrimary", "texPrimaryIcon"), new SerializableEntityStateType(typeof(TheWorldPunch)), "Weapon", true));
			val.stepCount = 3;
			val.stepGraceDuration = 0.5f;
			SteppedSkillDef val2 = Skills.CreateSkillDef<SteppedSkillDef>(new SkillDefInfo("DioVampireStrikes", "KAVAHN_DIO_PRIMARY_VAMPIRE_NAME", "KAVAHN_DIO_PRIMARY_VAMPIRE_DESCRIPTION", Icon<Sprite>("texDioPrimaryVampire", "texPrimaryIcon"), new SerializableEntityStateType(typeof(VampireStrike)), "Weapon", true));
			val2.stepCount = 3;
			val2.stepGraceDuration = 0.5f;
			Skills.AddPrimarySkills(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[2]
			{
				(SkillDef)val,
				(SkillDef)val2
			});
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillSlot)1, false);
			SkillDef val3 = Skills.CreateSkillDef(new SkillDefInfo
			{
				skillName = "DioKnifeThrow",
				skillNameToken = "KAVAHN_DIO_SECONDARY_KNIVES_NAME",
				skillDescriptionToken = "KAVAHN_DIO_SECONDARY_KNIVES_DESCRIPTION",
				skillIcon = Icon<Sprite>("texDioSecondary", "texSecondaryIcon"),
				activationState = new SerializableEntityStateType(typeof(KnifeThrow)),
				activationStateMachineName = "Weapon2",
				interruptPriority = (InterruptPriority)1,
				baseRechargeInterval = 3.5f,
				baseMaxStock = 2,
				rechargeStock = 1,
				requiredStock = 1,
				stockToConsume = 1,
				fullRestockOnAssign = true,
				mustKeyPress = false,
				isCombatSkill = true,
				cancelSprintingOnActivation = true
			});
			SkillDef val4 = Skills.CreateSkillDef(new SkillDefInfo
			{
				skillName = "DioStingyEyes",
				skillNameToken = "KAVAHN_DIO_SECONDARY_EYES_NAME",
				skillDescriptionToken = "KAVAHN_DIO_SECONDARY_EYES_DESCRIPTION",
				skillIcon = Icon<Sprite>("texDioSecondaryFan", "texSecondaryIcon"),
				activationState = new SerializableEntityStateType(typeof(StingyEyes)),
				activationStateMachineName = "Weapon2",
				interruptPriority = (InterruptPriority)1,
				baseRechargeInterval = 6f,
				baseMaxStock = 1,
				fullRestockOnAssign = true,
				mustKeyPress = false,
				isCombatSkill = true,
				cancelSprintingOnActivation = true
			});
			Skills.AddSecondarySkills(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[2] { val3, val4 });
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillSlot)2, false);
			SkillDefInfo val5 = new SkillDefInfo();
			val5.skillName = "DioTimeSkip";
			val5.skillNameToken = "KAVAHN_DIO_UTILITY_TIMESKIP_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_UTILITY_TIMESKIP_DESCRIPTION";
			val5.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val5.skillIcon = Icon<Sprite>("texDioUtility", "texUtilityIcon");
			val5.activationState = new SerializableEntityStateType(typeof(TimeSkip));
			val5.activationStateMachineName = "Body";
			val5.interruptPriority = (InterruptPriority)2;
			val5.baseRechargeInterval = 8f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.isCombatSkill = true;
			StandSkillDef val6 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val6.standCost = 20f;
			val5 = new SkillDefInfo();
			val5.skillName = "DioBehindYou";
			val5.skillNameToken = "KAVAHN_DIO_UTILITY_BEHIND_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_UTILITY_BEHIND_DESCRIPTION";
			val5.keywordTokens = new string[2] { "KEYWORD_JJBA_STAND", "KEYWORD_STUNNING" };
			val5.skillIcon = Icon<Sprite>("texDioUtilityStep", "texUtilityIcon");
			val5.activationState = new SerializableEntityStateType(typeof(BehindYou));
			val5.activationStateMachineName = "Body";
			val5.interruptPriority = (InterruptPriority)2;
			val5.baseRechargeInterval = 6f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.isCombatSkill = true;
			StandSkillDef val7 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val7.standCost = 15f;
			Skills.AddUtilitySkills(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[2]
			{
				(SkillDef)val6,
				(SkillDef)val7
			});
			Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillSlot)3, false);
			val5 = new SkillDefInfo();
			val5.skillName = "DioMudaRush";
			val5.skillNameToken = "KAVAHN_DIO_SPECIAL_RUSH_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_SPECIAL_RUSH_DESCRIPTION";
			val5.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val5.skillIcon = Icon<Sprite>("texDioSpecial", "texSpecialIcon");
			val5.activationState = new SerializableEntityStateType(typeof(MudaRush));
			val5.activationStateMachineName = "Weapon2";
			val5.interruptPriority = (InterruptPriority)1;
			val5.baseRechargeInterval = 9f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val8 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val8.standCost = 30f;
			val5 = new SkillDefInfo();
			val5.skillName = "DioMudaFinisher";
			val5.skillNameToken = "KAVAHN_DIO_SPECIAL_MUDA_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_SPECIAL_MUDA_DESCRIPTION";
			val5.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val5.skillIcon = Icon<Sprite>("texDioSpecialMuda", "texSpecialIcon");
			val5.activationState = new SerializableEntityStateType(typeof(MudaFinisher));
			val5.activationStateMachineName = "Weapon2";
			val5.interruptPriority = (InterruptPriority)1;
			val5.baseRechargeInterval = 8f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val9 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val9.standCost = 25f;
			Skills.AddSpecialSkills(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillDef[])(object)new SkillDef[2]
			{
				(SkillDef)val8,
				(SkillDef)val9
			});
			val5 = new SkillDefInfo();
			val5.skillName = "DioBloodDrain";
			val5.skillNameToken = "KAVAHN_DIO_STANDSPECIAL_DRAIN_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_STANDSPECIAL_DRAIN_DESCRIPTION";
			val5.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val5.skillIcon = Icon<Sprite>("texDioDrain", "texSpecialIcon");
			val5.activationState = new SerializableEntityStateType(typeof(DioBloodDrain));
			val5.activationStateMachineName = "Body";
			val5.interruptPriority = (InterruptPriority)2;
			val5.baseRechargeInterval = 12f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.mustKeyPress = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val10 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val10.standCost = 10f;
			val5 = new SkillDefInfo();
			val5.skillName = "DioVaporizationFreezing";
			val5.skillNameToken = "KAVAHN_DIO_STANDSPECIAL_FREEZE_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_STANDSPECIAL_FREEZE_DESCRIPTION";
			val5.keywordTokens = new string[2] { "KEYWORD_JJBA_STAND", "KEYWORD_FREEZING" };
			val5.skillIcon = Icon<Sprite>("texDioWall", "texSecondaryIcon");
			val5.activationState = new SerializableEntityStateType(typeof(VaporizationFreezing));
			val5.activationStateMachineName = "Body";
			val5.interruptPriority = (InterruptPriority)2;
			val5.baseRechargeInterval = 10f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.mustKeyPress = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val11 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val11.standCost = 15f;
			Skills.AddSkillToFamily(ExtraSkills.AddStandSpecial(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, (SkillDef)(object)val10).skillFamily, (SkillDef)(object)val11, (UnlockableDef)null);
			val5 = new SkillDefInfo();
			val5.skillName = "DioTimeStop";
			val5.skillNameToken = "KAVAHN_DIO_ULTIMATE_TIMESTOP_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_ULTIMATE_TIMESTOP_DESCRIPTION";
			val5.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val5.skillIcon = Icon<Sprite>("texDioUltimate", "texSpecialIcon");
			val5.activationState = new SerializableEntityStateType(typeof(TheWorldUltimate));
			val5.activationStateMachineName = "Weapon2";
			val5.interruptPriority = (InterruptPriority)1;
			val5.baseRechargeInterval = 40f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.mustKeyPress = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val12 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val12.standCost = 50f;
			GenericSkill val13 = Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, "TheWorld", "Ultimate", false);
			Skills.AddSkillToFamily(val13.skillFamily, (SkillDef)(object)val12, (UnlockableDef)null);
			val5 = new SkillDefInfo();
			val5.skillName = "DioWryyyDive";
			val5.skillNameToken = "KAVAHN_DIO_ULTIMATE_DIVE_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_ULTIMATE_DIVE_DESCRIPTION";
			val5.keywordTokens = new string[2] { "KEYWORD_JJBA_STAND", "KEYWORD_STUNNING" };
			val5.skillIcon = Icon<Sprite>("texDioQuickStop", "texSpecialIcon");
			val5.activationState = new SerializableEntityStateType(typeof(WryyyDive));
			val5.activationStateMachineName = "Body";
			val5.interruptPriority = (InterruptPriority)2;
			val5.baseRechargeInterval = 25f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.mustKeyPress = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val14 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val14.standCost = 35f;
			Skills.AddSkillToFamily(val13.skillFamily, (SkillDef)(object)val14, (UnlockableDef)null);
			ExtraSkills.Slots(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab).skill = val13;
			val5 = new SkillDefInfo();
			val5.skillName = "DioRoadRoller";
			val5.skillNameToken = "KAVAHN_DIO_HEAT_NAME";
			val5.skillDescriptionToken = "KAVAHN_DIO_HEAT_DESCRIPTION";
			val5.keywordTokens = new string[1] { "KEYWORD_JJBA_STAND" };
			val5.skillIcon = Icon<Sprite>("texDioHeat", "texSpecialIcon");
			val5.activationState = new SerializableEntityStateType(typeof(DioHeatAttack));
			val5.activationStateMachineName = "Body";
			val5.interruptPriority = (InterruptPriority)2;
			val5.baseRechargeInterval = 25f;
			val5.baseMaxStock = 1;
			val5.fullRestockOnAssign = true;
			val5.mustKeyPress = true;
			val5.isCombatSkill = true;
			val5.cancelSprintingOnActivation = true;
			StandSkillDef val15 = Skills.CreateSkillDef<StandSkillDef>(val5);
			val15.standCost = 40f;
			GenericSkill val16 = Skills.CreateGenericSkillWithSkillFamily(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, "HeatAttack", "HeatAttack", false);
			Skills.AddSkillToFamily(val16.skillFamily, (SkillDef)(object)val15, (UnlockableDef)null);
			ExtraSkills.Slots(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab).heatAttack = val16;
		}

		public override void InitializeSkins()
		{
			ModelSkinController obj = ((Component)((CharacterBase<DioSurvivor>)(object)this).prefabCharacterModel).gameObject.AddComponent<ModelSkinController>();
			SkinDef val = Skins.CreateSkinDef("DEFAULT_SKIN", Icon<Sprite>("texDioSkin", "texMainSkin"), ((CharacterBase<DioSurvivor>)(object)this).prefabCharacterModel.baseRendererInfos, ((Component)((CharacterBase<DioSurvivor>)(object)this).prefabCharacterModel).gameObject, (UnlockableDef)null);
			obj.skins = (SkinDef[])(object)new SkinDef[1] { val };
		}

		public override void InitializeCharacterMaster()
		{
			DioAI.Init(((CharacterBase<DioSurvivor>)(object)this).bodyPrefab, ((SurvivorBase<DioSurvivor>)this).masterName);
		}
	}
}
namespace JJBAMod.Survivors.Dio.SkillStates
{
	public class VampireStrike : BaseMeleeAttack
	{
		public override void OnEnter()
		{
			//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_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)
			base.hitboxGroupName = "SwordGroup";
			base.damageType = DamageTypeCombo.GenericPrimary;
			base.damageCoefficient = 2.4f;
			base.procCoefficient = 1f;
			base.pushForce = 250f;
			base.baseDuration = 0.7f;
			base.attackStartPercentTime = 0.2f;
			base.attackEndPercentTime = 0.45f;
			base.earlyExitPercentTime = 0.55f;
			base.hitStopDuration = 0.03f;
			base.attackRecoil = 0.5f;
			base.hitHopVelocity = 5f;
			base.muzzleString = ((base.swingIndex % 2 == 0) ? "SwingLeft" : "SwingRight");
			base.swingSoundString = DioSounds.dioSwings[base.swingIndex % DioSounds.dioSwings.Length];
			base.swingEffectPrefab = SharedEffects.punchSwingEffect;
			base.hitEffectPrefab = (Object.op_Implicit((Object)(object)DioFX.bloodSpray) ? DioFX.bloodSpray : SharedEffects.punchHitImpactEffect);
			base.impactSound = DioAssets.dioPunchHitSoundEvent.index;
			((BaseMeleeAttack)this).OnEnter();
			if (base.swingIndex == 2)
			{
				Util.PlaySound(DioSounds.PunchShout(base.swingIndex), ((EntityState)this).gameObject);
			}
		}

		protected override void ModifyOverlapAttack(OverlapAttack attack)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			((BaseMeleeAttack)this).ModifyOverlapAttack(attack);
			DamageAPI.AddModdedDamageType(attack, DioAssets.vampireDamageType);
		}
	}
	public class MudaFinisher : BaseSkillState
	{
		public static float baseDuration = 1.1f;

		private static readonly float[] hitTimes = new float[3] { 0.15f, 0.4f, 0.75f };

		private float duration;

		private int hitIndex;

		private StandUser standUser;

		private OverlapAttack attack;

		private Vector3 aim;

		private readonly List<HurtBox> hits = new List<HurtBox>();

		public override void OnEnter()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: 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_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: 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_01dc: Expected O, but got Unknown
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			duration = baseDuration / ((BaseState)this).attackSpeedStat;
			standUser = ((EntityState)this).GetComponent<StandUser>();
			Ray aimRay = ((BaseState)this).GetAimRay();
			aim = ((Ray)(ref aimRay)).direction;
			((BaseState)this).StartAimMode(duration + 0.3f, false);
			if (Object.op_Implicit((Object)(object)standUser))
			{
				standUser.UseStand(25f);
				object obj;
				if (!((EntityState)this).isAuthority)
				{
					obj = null;
				}
				else
				{
					StandTracker obj2 = StandTracker.Of(((EntityState)this).gameObject);
					obj = ((obj2 != null) ? obj2.GetTrackingTarget() : null);
				}
				HurtBox val = (HurtBox)obj;
				if (Object.op_Implicit((Object)(object)val))
				{
					standUser.BeginTargetedAction(val, duration, hitTimes[0] * duration);
				}
				else
				{
					standUser.BeginAction(aim, 2.6f, duration);
				}
				standUser.PlayStandAnimation("Muda1", 0.05f);
			}
			((EntityState)this).PlayCrossfade("Gesture, Override", "StandPunch3", "Slash.playbackRate", duration, 0.05f);
			Util.PlaySound("Play_Dio_Muda", ((EntityState)this).gameObject);
			DioAura.Surge(((EntityState)this).gameObject, duration + 0.3f);
			attack = new OverlapAttack
			{
				attacker = ((EntityState)this).gameObject,
				inflictor = ((EntityState)this).gameObject,
				teamIndex = ((BaseState)this).GetTeam(),
				procCoefficient = 1f,
				hitEffectPrefab = SharedEffects.punchHitImpactEffect,
				hitBoxGroup = ((Object.op_Implicit((Object)(object)standUser) && Object.op_Implicit((Object)(object)standUser.hitBoxGroup)) ? standUser.hitBoxGroup : ((BaseState)this).FindHitBoxGroup("SwordGroup")),
				isCrit = ((BaseState)this).RollCrit(),
				damageType = DamageTypeCombo.GenericSpecial,
				impactSound = DioAssets.standPunchHitSoundEvents[0].index
			};
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			while (hitIndex < hitTimes.Length && ((EntityState)this).fixedAge >= hitTimes[hitIndex] * duration)
			{
				Hit(hitIndex++);
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Hit(int index)
		{
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: 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_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			bool flag = index == hitTimes.Length - 1;
			if (index > 0 && Object.op_Implicit((Object)(object)standUser))
			{
				standUser.PlayStandAnimation("Muda" + (1 + index), 0.05f);
			}
			Util.PlaySound(DioSounds.standPunchSwings[index % DioSounds.standPunchSwings.Length], Object.op_Implicit((Object)(object)standUser) ? standUser.StandObject : ((EntityState)this).gameObject);
			if (flag)
			{
				Util.PlaySound(DioSounds.PunchShout(2), ((EntityState)this).gameObject);
				if (Object.op_Implicit((Object)(object)DioFX.goldFlash) && Object.op_Implicit((Object)(object)standUser))
				{
					EffectManager.SpawnEffect(DioFX.goldFlash, new EffectData
					{
						origin = standUser.ActionPoint,
						scale = 1.2f
					}, false);
				}
			}
			if (((EntityState)this).isAuthority)
			{
				Vector3 val = new Vector3(aim.x, 0f, aim.z);
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				attack.ResetIgnoredHealthComponents();
				attack.damage = (flag ? 9f : 3.5f) * ((BaseState)this).damageStat;
				attack.forceVector = (flag ? (normalized * 4000f + Vector3.up * 1500f) : (normalized * 400f));
				attack.damageType = (flag ? DamageTypeCombo.GenericSpecial : (DamageTypeCombo.GenericSpecial | DamageTypeCombo.op_Implicit((DamageType)32)));
				hits.Clear();
				attack.Fire(hits);
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class DioBloodDrain : BaseSkillState
	{
		public static float lungeTime = 0.35f;

		private Vector3 lungeDirection;

		private OverlapAttack attack;

		private readonly List<HurtBox> hits = new List<HurtBox>();

		protected virtual float StandCost => 10f;

		public override void OnEnter()
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_00aa: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			StandUser component = ((EntityState)this).GetComponent<StandUser>();
			if (Object.op_Implicit((Object)(object)component))
			{
				component.UseStand(StandCost);
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			lungeDirection = ((Ray)(ref aimRay)).direction;
			lungeDirection.y = Mathf.Clamp(lungeDirection.y, -0.2f, 0.25f);
			((Vector3)(ref lungeDirection)).Normalize();
			Vector3 val = default(Vector3);
			((Vector3)(ref val))..ctor(lungeDirection.x, 0f, lungeDirection.z);
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && ((Vector3)(ref val)).sqrMagnitude > 0.01f)
			{
				((EntityState)this).characterDirection.forward = ((Vector3)(ref val)).normalized;
			}
			((EntityState)this).PlayAnimation("FullBody, Override", "DrainStart", "ShootGun.playbackRate", lungeTime, 0f);
			Util.PlaySound("Play_Dio_DrainLunge", ((EntityState)this).gameObject);
			DioAura.Surge(((EntityState)this).gameObject, lungeTime + 0.3f);
			attack = LungeAttack();
		}

		protected virtual OverlapAttack LungeAttack()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return DioBloodDrink.MakeAttack(((EntityState)this).gameObject, ((BaseState)this).GetTeam(), 1.2f * ((BaseState)this).damageStat, ((BaseState)this).RollCrit(), ((BaseState)this).FindHitBoxGroup("SwordGroup"));
		}

		protected virtual EntityState Caught(HurtBoxReference victim)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return (EntityState)(object)new DioBloodDrink
			{
				victim = victim
			};
		}

		public override void FixedUpdate()
		{
			//IL_0023: 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_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (!((EntityState)this).isAuthority)
			{
				return;
			}
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity = lungeDirection * 22f;
			}
			hits.Clear();
			if (attack.Fire(hits) && hits.Count > 0)
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
				{
					((EntityState)this).characterMotor.velocity = Vector3.zero;
				}
				((EntityState)this).outer.SetNextState(Caught(HurtBoxReference.FromHurtBox(hits[0])));
			}
			else if (((EntityState)this).fixedAge >= lungeTime)
			{
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
				{
					CharacterMotor characterMotor = ((EntityState)this).characterMotor;
					characterMotor.velocity *= 0.2f;
				}
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)2;
		}
	}
	public class DioBloodDrink : BaseSkillState
	{
		public static float grabTime = 0.25f;

		public static float tickInterval = 0.2f;

		public static float endTime = 0.45f;

		public HurtBoxReference victim;

		private HurtBox victimBox;

		private OverlapAttack attack;

		private int ticks;

		private bool ending;

		private float endAge;

		private bool thrown;

		private readonly List<HurtBox> hits = new List<HurtBox>();

		public static OverlapAttack MakeAttack(GameObject owner, TeamIndex team, float damage, bool crit, HitBoxGroup group)
		{
			//IL_0000: 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)
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: 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_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_003c: 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_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			//IL_005e: Expected O, but got Unknown
			OverlapAttack val = new OverlapAttack
			{
				attacker = owner,
				inflictor = owner,
				teamIndex = team,
				damage = damage,
				procCoefficient = 0.5f,
				hitBoxGroup = group,
				isCrit = crit,
				damageType = (DamageTypeCombo.GenericSpecial | DamageTypeCombo.op_Implicit((DamageType)32))
			};
			DamageAPI.AddModdedDamageType(val, DioAssets.drainDamageType);
			return val;
		}

		public override void OnEnter()
		{
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			victimBox = ((HurtBoxReference)(ref victim)).ResolveHurtBox();
			((EntityState)this).PlayAnimation("FullBody, Override", "DrainGrab", "ShootGun.playbackRate", grabTime, 0f);
			Util.PlaySound("Play_Dio_DrainGrab", ((EntityState)this).gameObject);
			Blood();
			DioAura.Surge(((EntityState)this).gameObject, grabTime + tickInterval * 6f + endTime);
			attack = MakeAttack(((EntityState)this).gameObject, ((BaseState)this).GetTeam(), 1.2f * ((BaseState)this).damageStat, ((BaseState)this).RollCrit(), ((BaseState)this).FindHitBoxGroup("SwordGroup"));
		}

		public override void FixedUpdate()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Expected O, but got Unknown
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
			}
			if (!ending)
			{
				if (!(((EntityState)this).fixedAge < grabTime))
				{
					int num = Mathf.Min(6, 1 + (int)((((EntityState)this).fixedAge - grabTime) / tickInterval));
					while (ticks < num)
					{
						Tick(ticks++);
					}
					bool flag = Object.op_Implicit((Object)(object)victimBox) && Object.op_Implicit((Object)(object)victimBox.healthComponent) && victimBox.healthComponent.alive;
					if (ticks >= 6 || (((EntityState)this).isAuthority && !flag && ticks > 0))
					{
						End();
					}
				}
				return;
			}
			endAge += Time.fixedDeltaTime;
			if (!thrown && endAge >= endTime * 0.3f)
			{
				thrown = true;
				if (((EntityState)this).isAuthority)
				{
					attack.ResetIgnoredHealthComponents();
					attack.damage = 5f * ((BaseState)this).damageStat;
					attack.damageType = DamageTypeCombo.GenericSpecial;
					attack.forceVector = ((EntityState)this).transform.forward * 3000f + Vector3.up * 1200f;
					hits.Clear();
					attack.Fire(hits);
				}
				if (Object.op_Implicit((Object)(object)DioFX.goldFlash) && Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
				{
					EffectManager.SpawnEffect(DioFX.goldFlash, new EffectData
					{
						origin = ((EntityState)this).characterBody.corePosition + ((EntityState)this).transform.forward,
						scale = 1f
					}, false);
				}
			}
			if (((EntityState)this).isAuthority && endAge >= endTime)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Tick(int index)
		{
			if (index == 0)
			{
				((EntityState)this).PlayCrossfade("FullBody, Override", "DrainLoop", "ShootGun.playbackRate", tickInterval * 2f, 0.05f);
			}
			if (index % 2 == 0)
			{
				Util.PlaySound("Play_Dio_DrainSuck", ((EntityState)this).gameObject);
			}
			Blood();
			if (((EntityState)this).isAuthority)
			{
				attack.ResetIgnoredHealthComponents();
				hits.Clear();
				attack.Fire(hits);
			}
		}

		private void End()
		{
			ending = true;
			((EntityState)this).PlayAnimation("FullBody, Override", "DrainEnd", "ShootGun.playbackRate", endTime, 0f);
			Util.PlaySound("Play_Dio_DrainEnd", ((EntityState)this).gameObject);
		}

		private void Blood()
		{
			//IL_001e: 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_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			if (Object.op_Implicit((Object)(object)DioFX.bloodSpray) && Object.op_Implicit((Object)(object)victimBox))
			{
				EffectManager.SpawnEffect(DioFX.bloodSpray, new EffectData
				{
					origin = ((Component)victimBox).transform.position,
					scale = 1f
				}, false);
			}
		}

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			((BaseSkillState)this).OnSerialize(writer);
			NetworkExtensions.Write(writer, victim);
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//IL_0009: 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)
			((BaseSkillState)this).OnDeserialize(reader);
			victim = NetworkExtensions.ReadHurtBoxReference(reader);
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)7;
		}
	}
	public class DioHeatAttack : BaseSkillState
	{
		public static float bossStartDuration = 4f / 15f;

		private HurtBoxReference targetReference;

		private HurtBox target;

		private bool boss;

		private StandUser standUser;

		public override void OnEnter()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			standUser = ((EntityState)this).GetComponent<StandUser>();
			if (((EntityState)this).isAuthority)
			{
				target = FindTarget();
				targetReference = HurtBoxReference.FromHurtBox(target);
			}
			else
			{
				target = ((HurtBoxReference)(ref targetReference)).ResolveHurtBox();
			}
			CharacterBody val = ((Object.op_Implicit((Object)(object)target) && Object.op_Implicit((Object)(object)target.healthComponent)) ? target.healthComponent.body : null);
			boss = Object.op_Implicit((Object)(object)val) && (val.isChampion || val.isBoss);
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
			}
			if (Object.op_Implicit((Object)(object)target))
			{
				Vector3 val2 = ((Component)target).transform.position - ((EntityState)this).transform.position;
				val2.y = 0f;
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && ((Vector3)(ref val2)).sqrMagnitude > 0.01f)
				{
					((EntityState)this).characterDirection.forward = ((Vector3)(ref val2)).normalized;
				}
			}
			if (Object.op_Implicit((Object)(object)standUser))
			{
				standUser.UseStand(40f);
			}
			if (boss)
			{
				((EntityState)this).PlayAnimation("FullBody, Override", "GhaStart", "ShootGun.playbackRate", bossStartDuration, 0f);
				if (Object.op_Implicit((Object)(object)standUser))
				{
					standUser.PlayStandAnimation("GhaStart", 0.05f);
				}
				Util.PlaySound("Play_Dio_HeatStart", ((EntityState)this).gameObject);
			}
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.HiddenInvincibility, bossStartDuration + 0.2f);
			}
		}

		private HurtBox FindTarget()
		{
			//IL_0029: 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_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: 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_0054: 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_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_0066: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			StandTracker val = StandTracker.Of(((EntityState)this).gameObject);
			HurtBox val2 = (Object.op_Implicit((Object)(object)val) ? val.GetTrackingTarget() : null);
			if (Object.op_Implicit((Object)(object)val2))
			{
				return val2;
			}
			Ray aimRay = ((BaseState)this).GetAimRay();
			BullseyeSearch val3 = new BullseyeSearch
			{
				teamMaskFilter = TeamMask.GetEnemyTeams(((BaseState)this).GetTeam()),
				filterByLoS = true,
				searchOrigin = ((Ray)(ref aimRay)).origin,
				searchDirection = ((Ray)(ref aimRay)).direction,
				sortMode = (SortMode)3,
				maxDistanceFilter = 30f,
				maxAngleFilter = 45f
			};
			val3.RefreshCandidates();
			val3.FilterOutGameObject(((EntityState)this).gameObject);
			return val3.GetResults().FirstOrDefault();
		}

		public override void FixedUpdate()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity = Vector3.zero;
			}
			if (((EntityState)this).isAuthority)
			{
				if (!boss)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new DioHeatStrike
					{
						targetReference = targetReference
					});
				}
				else if (((EntityState)this).fixedAge >= bossStartDuration)
				{
					((EntityState)this).outer.SetNextState((EntityState)(object)new DioRoadRollerCutscene
					{
						targetReference = targetReference
					});
				}
			}
		}

		public override void OnSerialize(NetworkWriter writer)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			((BaseSkillState)this).OnSerialize(writer);
			NetworkExtensions.Write(writer, targetReference);
		}

		public override void OnDeserialize(NetworkReader reader)
		{
			//IL_0009: 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)
			((BaseSkillState)this).OnDeserialize(reader);
			targetReference = NetworkExtensions.ReadHurtBoxReference(reader);
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			return (InterruptPriority)7;
		}
	}
	public class DioHeatStrike : BaseState
	{
		public HurtBoxReference targetReference;

		public static float arriveTime = 0.15f;

		public static float[] jabTimes = new float[3] { 0.4f, 0.52f, 0.64f };

		public static float windupTime = 0.75f;

		public static float donutTime = 0.95f;

		public static float duration = 1.6f;

		public static float stopDuration = 1.1f;

		public static float behindGap = 2.5f;

		private HurtBox target;

		private StandUser standUser;

		private CharacterModel characterModel;

		private HurtBoxGroup hurtBoxGroup;

		private bool hidden;

		private bool arrived;

		private int jabIndex;

		private bool woundUp;

		private bool donut;

		private Vector3 forward;

		public override void OnEnter()
		{
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			standUser = ((EntityState)this).GetComponent<StandUser>();
			target = ((HurtBoxReference)(ref targetReference)).ResolveHurtBox();
			forward = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).transform.forward);
			Util.PlaySound("Play_JJBA_TimeStop", ((EntityState)this).gameObject);
			Util.PlaySound("Play_Dio_TimeSkip", ((EntityState)this).gameObject);
			TimeStop component = ((EntityState)this).GetComponent<TimeStop>();
			if (Object.op_Implicit((Object)(object)component) && !component.Running)
			{
				component.Begin(stopDuration);
			}
			DioAura.Surge(((EntityState)this).gameObject, duration);
			((EntityState)this).PlayAnimation("Gesture, Override", "Blink", "ThrowBomb.playbackRate", arriveTime + 0.15f, 0f);
			Flash(((EntityState)this).characterBody.corePosition, 1f);
			DioAfterimage.Spawn(((EntityState)this).characterBody, 0.7f, 0.7f);
			Hide(hide: true);
			if (NetworkServer.active)
			{
				((EntityState)this).characterBody.AddTimedBuff(Buffs.ArmorBoost, duration);
			}
		}

		public override void FixedUpdate()
		{
			//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_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
			{
				((EntityState)this).characterMotor.velocity = new Vector3(0f, Mathf.Min(((EntityState)this).characterMotor.velocity.y, 0f), 0f);
			}
			if (!arrived && ((EntityState)this).fixedAge >= arriveTime)
			{
				Arrive();
			}
			while (arrived && jabIndex < jabTimes.Length && ((EntityState)this).fixedAge >= jabTimes[jabIndex])
			{
				if (Object.op_Implicit((Object)(object)standUser))
				{
					standUser.PlayStandAnimation("Muda" + (1 + jabIndex % 3), 0.05f);
				}
				jabIndex++;
				Hit(3f, 200f, finisher: false);
			}
			if (arrived && !woundUp && ((EntityState)this).fixedAge >= windupTime)
			{
				woundUp = true;
				if (Object.op_Implicit((Object)(object)standUser))
				{
					standUser.PlayStandAnimation("Punch3", 0.05f);
				}
				((EntityState)this).PlayCrossfade("Gesture, Override", "StandPunch3", "Slash.playbackRate", duration - windupTime, 0.05f);
				Util.PlaySound(DioSounds.PunchShout(3), ((EntityState)this).gameObject);
			}
			if (arrived && !donut && ((EntityState)this).fixedAge >= donutTime)
			{
				donut = true;
				Donut();
			}
			if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		private void Arrive()
		{
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: 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_0031: 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_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_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			arrived = true;
			if (((EntityState)this).isAuthority && TargetAlive())
			{
				Vector3 facing;
				Vector3 val = BehindTarget(out facing);
				TeleportHelper.TeleportBody(((EntityState)this).characterBody, val + Vector3.up * 0.1f, false);
				forward = facing;
				if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
				{
					((EntityState)this).characterDirection.forward = facing;
				}
			}
			Hide(hide: false);
			DioAfterimage.Spawn(((EntityState)this).characterBody);
			Flash(((EntityState)this).characterBody.corePosition, 0.8f);
			Util.PlaySound("Play_Dio_HeatStart", ((EntityState)this).gameObject);
			if (Object.op_Implicit((Object)(object)standUser))
			{
				if (TargetAlive())
				{
					standUser.BeginTargetedAction(target, duration - arriveTime, 0.2f);
				}
				else
				{
					standUser.BeginAction(forward, 3f, duration - arriveTime);
				}
				standUser.PlayStandAnimation("Appear", 0.05f);
			}
		}

		private Vector3 BehindTarget(out Vector3 facing)
		{
			//IL_000d: 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)
			return BehindSpot(((EntityState)this).characterBody, target, forward, behindGap, out facing);
		}

		public static Vector3 Beh