Decompiled source of BossAdd v1.1.1

BepInEx/plugins/bossadd/AnimationSpeedManager.dll

Decompiled 15 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using HarmonyLib;
using JetBrains.Annotations;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("AnimationSpeedManager")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AnimationSpeedManager")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("B3A6D52C-449A-4665-9FD0-BB48C8CF2CDF")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
public static class AnimationSpeedManager
{
	public delegate double Handler(Character character, double speed);

	private static readonly Harmony harmony = new Harmony("AnimationSpeedManager");

	private static bool hasMarkerPatch = false;

	private static readonly MethodInfo method = AccessTools.DeclaredMethod(typeof(CharacterAnimEvent), "CustomFixedUpdate", (Type[])null, (Type[])null);

	private static int index = 0;

	private static bool changed = false;

	private static Handler[][] handlers = Array.Empty<Handler[]>();

	private static readonly Dictionary<int, List<Handler>> handlersPriorities = new Dictionary<int, List<Handler>>();

	[PublicAPI]
	public static void Add(Handler handler, int priority = 400)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Expected O, but got Unknown
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Expected O, but got Unknown
		if (!hasMarkerPatch)
		{
			harmony.Patch((MethodBase)method, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(AnimationSpeedManager), "markerPatch", (Type[])null, (Type[])null)), (HarmonyMethod)null);
			hasMarkerPatch = true;
		}
		if (!handlersPriorities.TryGetValue(priority, out List<Handler> value))
		{
			handlersPriorities.Add(priority, value = new List<Handler>());
			harmony.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(AnimationSpeedManager), "wrapper", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}
		value.Add(handler);
		handlers = (from kv in handlersPriorities
			orderby kv.Key
			select kv.Value.ToArray()).ToArray();
	}

	private static void wrapper(Character ___m_character, Animator ___m_animator)
	{
		Character ___m_character2 = ___m_character;
		double num = (double)___m_animator.speed * 10000000.0 % 100.0;
		if ((!(num > 10.0) || !(num < 30.0)) && !(___m_animator.speed <= 0.001f))
		{
			double num2 = ___m_animator.speed;
			double num3 = handlers[index++].Aggregate(num2, (double current, Handler handler) => handler(___m_character2, current));
			if (num3 != num2)
			{
				___m_animator.speed = (float)(num3 - num3 % 1E-05);
				changed = true;
			}
		}
	}

	private static void markerPatch(Animator ___m_animator)
	{
		if (changed)
		{
			double num = (double)___m_animator.speed * 10000000.0 % 100.0;
			if ((num < 10.0 || num > 30.0) ? true : false)
			{
				___m_animator.speed += 1.9E-06f;
			}
			changed = false;
		}
		index = 0;
	}
}

BepInEx/plugins/bossadd/bossadd.dll

Decompiled 15 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;
using bossadd.Patches;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace bossadd
{
	public static class BonemassConfig
	{
		public static ConfigEntry<bool> SplitEnabled { get; private set; }

		public static ConfigEntry<float> SplitHealthThreshold { get; private set; }

		public static ConfigEntry<bool> KillConditionEnabled { get; private set; }

		public static ConfigEntry<bool> KillOrderEnabled { get; private set; }

		public static ConfigEntry<float> WrongOrderHealPercent { get; private set; }

		public static ConfigEntry<float> MiniLeashDistance { get; private set; }

		public static ConfigEntry<float> MiniDamageMult { get; private set; }

		public static ConfigEntry<float> MiniHPMult { get; private set; }

		public static ConfigEntry<float> MiniSpeedMult { get; private set; }

		public static ConfigEntry<float> MiniAttackRangeMult { get; private set; }

		public static ConfigEntry<float> MiniAttackIntervalMult { get; private set; }

		public static ConfigEntry<float> MiniAnimationSpeedMult { get; private set; }

		public static ConfigEntry<string> MiniResistBlunt { get; private set; }

		public static ConfigEntry<string> MiniResistSlash { get; private set; }

		public static ConfigEntry<string> MiniResistPierce { get; private set; }

		public static ConfigEntry<string> MiniResistFire { get; private set; }

		public static ConfigEntry<string> MiniResistFrost { get; private set; }

		public static ConfigEntry<string> MiniResistLightning { get; private set; }

		public static ConfigEntry<string> MiniResistPoison { get; private set; }

		public static ConfigEntry<string> MiniResistSpirit { get; private set; }

		public static ConfigEntry<bool> BonusSpawnEnabled { get; private set; }

		public static ConfigEntry<string> BonusSpawnPrefab { get; private set; }

		public static ConfigEntry<float> BonusSpawnChance { get; private set; }

		public static ConfigEntry<int> BonusSpawnCount { get; private set; }

		public static ConfigEntry<float> BonusSpawnHealthThreshold { get; private set; }

		public static ConfigEntry<float> BonusSpawnMinDistanceFromBoss { get; private set; }

		public static ConfigEntry<float> ProjectileSpeedMult { get; private set; }

		public static ConfigEntry<float> ProjectileDamageBlunt { get; private set; }

		public static ConfigEntry<float> ProjectileHitRadius { get; private set; }

		public static ConfigEntry<float> ProjectileDamagePoison { get; private set; }

		public static ConfigEntry<bool> ProjectileStickyEnabled { get; private set; }

		public static ConfigEntry<string> ProjectileStickySourceEffect { get; private set; }

		public static ConfigEntry<string> ProjectileStickyDisplayName { get; private set; }

		public static ConfigEntry<float> ProjectileStickyDuration { get; private set; }

		public static ConfigEntry<float> ProjectilePushForceFallback { get; private set; }

		public static ConfigEntry<float> ProjectileSpawnOffsetDistance { get; private set; }

		public static ConfigEntry<float> ProjectileAimHeightOffset { get; private set; }

		public static ConfigEntry<bool> MiniInvulnerableEnabled { get; private set; }

		public static ConfigEntry<string> PhaseMessage { get; private set; }

		public static ConfigEntry<float> PhaseMessageHP { get; private set; }

		public static void Bind(ConfigFile cfg)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Expected O, but got Unknown
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Expected O, but got Unknown
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Expected O, but got Unknown
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Expected O, but got Unknown
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Expected O, but got Unknown
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_026b: Expected O, but got Unknown
			//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Expected O, but got Unknown
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0319: Expected O, but got Unknown
			//IL_0366: Unknown result type (might be due to invalid IL or missing references)
			//IL_0370: Expected O, but got Unknown
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c7: Expected O, but got Unknown
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_041e: Expected O, but got Unknown
			//IL_04a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b3: Expected O, but got Unknown
			//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fc: Expected O, but got Unknown
			//IL_053b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0545: Expected O, but got Unknown
			//IL_0584: Unknown result type (might be due to invalid IL or missing references)
			//IL_058e: Expected O, but got Unknown
			//IL_05cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d7: Expected O, but got Unknown
			//IL_0616: Unknown result type (might be due to invalid IL or missing references)
			//IL_0620: Expected O, but got Unknown
			//IL_065f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0669: Expected O, but got Unknown
			//IL_06a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b2: Expected O, but got Unknown
			//IL_06ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0709: Expected O, but got Unknown
			//IL_0756: Unknown result type (might be due to invalid IL or missing references)
			//IL_0760: Expected O, but got Unknown
			//IL_07ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b7: Expected O, but got Unknown
			//IL_0804: Unknown result type (might be due to invalid IL or missing references)
			//IL_080e: Expected O, but got Unknown
			//IL_0849: Unknown result type (might be due to invalid IL or missing references)
			//IL_0853: Expected O, but got Unknown
			//IL_0892: Unknown result type (might be due to invalid IL or missing references)
			//IL_089c: Expected O, but got Unknown
			//IL_08db: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e5: Expected O, but got Unknown
			//IL_0932: Unknown result type (might be due to invalid IL or missing references)
			//IL_093c: Expected O, but got Unknown
			//IL_0989: Unknown result type (might be due to invalid IL or missing references)
			//IL_0993: Expected O, but got Unknown
			//IL_09e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ea: Expected O, but got Unknown
			//IL_0a37: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a41: Expected O, but got Unknown
			//IL_0a7c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a86: Expected O, but got Unknown
			//IL_0ac5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0acf: Expected O, but got Unknown
			//IL_0b1c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b26: Expected O, but got Unknown
			//IL_0b68: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b72: Expected O, but got Unknown
			//IL_0bbf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc9: Expected O, but got Unknown
			//IL_0c16: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c20: Expected O, but got Unknown
			//IL_0c5f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c69: Expected O, but got Unknown
			//IL_0cb6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc0: Expected O, but got Unknown
			SplitEnabled = cfg.Bind<bool>("Bonemass", "(Split Summon) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Bonemass.SplitSummon.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9000
				}
			}));
			SplitHealthThreshold = cfg.Bind<float>("Bonemass", "(Split Summon) HPThreshold", 50f, new ConfigDescription(LocalizationManager.Desc("Bonemass.SplitSummon.HPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 99f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8990
				}
			}));
			KillConditionEnabled = cfg.Bind<bool>("Bonemass", "(Kill Condition) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Bonemass.KillCondition.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8000
				}
			}));
			KillOrderEnabled = cfg.Bind<bool>("Bonemass", "(Kill Condition) OrderEnabled", true, new ConfigDescription(LocalizationManager.Desc("Bonemass.KillCondition.OrderEnabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7990
				}
			}));
			WrongOrderHealPercent = cfg.Bind<float>("Bonemass", "(Kill Condition) WrongOrderHeal", 5f, new ConfigDescription(LocalizationManager.Desc("Bonemass.KillCondition.WrongOrderHeal"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 50f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7980
				}
			}));
			MiniInvulnerableEnabled = cfg.Bind<bool>("Bonemass", "(Kill Condition) MiniInvulnerable", true, new ConfigDescription(LocalizationManager.Desc("Bonemass.KillCondition.MiniInvulnerable"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7970
				}
			}));
			MiniLeashDistance = cfg.Bind<float>("Bonemass", "(Kill Condition) MiniLeashDistance", 50f, new ConfigDescription(LocalizationManager.Desc("Bonemass.KillCondition.MiniLeashDistance"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7960
				}
			}));
			MiniDamageMult = cfg.Bind<float>("Bonemass", "(Mini Stat) DamageMult", 1f, new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniStat.DamageMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7000
				}
			}));
			MiniHPMult = cfg.Bind<float>("Bonemass", "(Mini Stat) HPMult", 0.3f, new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniStat.HPMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.05f, 1f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6990
				}
			}));
			MiniSpeedMult = cfg.Bind<float>("Bonemass", "(Mini Stat) SpeedMult", 1.6f, new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniStat.SpeedMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6980
				}
			}));
			MiniAttackRangeMult = cfg.Bind<float>("Bonemass", "(Mini Stat) AttackRangeMult", 0.35f, new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniStat.AttackRangeMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 1f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6970
				}
			}));
			MiniAttackIntervalMult = cfg.Bind<float>("Bonemass", "(Mini Stat) AttackIntervalMult", 1f, new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniStat.AttackIntervalMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.3f, 3f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6960
				}
			}));
			MiniAnimationSpeedMult = cfg.Bind<float>("Bonemass", "(Mini Stat) AnimationSpeedMult", 1.6f, new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniStat.AnimationSpeedMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 3f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6950
				}
			}));
			AcceptableValueList<string> val = new AcceptableValueList<string>(new string[8] { "Inherit", "Normal", "Resistant", "VeryResistant", "Weak", "VeryWeak", "Immune", "Ignore" });
			MiniResistBlunt = cfg.Bind<string>("Bonemass", "(Mini Resist) Blunt", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Blunt"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6000
				}
			}));
			MiniResistSlash = cfg.Bind<string>("Bonemass", "(Mini Resist) Slash", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Slash"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5990
				}
			}));
			MiniResistPierce = cfg.Bind<string>("Bonemass", "(Mini Resist) Pierce", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Pierce"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5980
				}
			}));
			MiniResistFire = cfg.Bind<string>("Bonemass", "(Mini Resist) Fire", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Fire"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5970
				}
			}));
			MiniResistFrost = cfg.Bind<string>("Bonemass", "(Mini Resist) Frost", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Frost"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5960
				}
			}));
			MiniResistLightning = cfg.Bind<string>("Bonemass", "(Mini Resist) Lightning", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Lightning"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5950
				}
			}));
			MiniResistPoison = cfg.Bind<string>("Bonemass", "(Mini Resist) Poison", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Poison"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5940
				}
			}));
			MiniResistSpirit = cfg.Bind<string>("Bonemass", "(Mini Resist) Spirit", "Inherit", new ConfigDescription(LocalizationManager.Desc("Bonemass.MiniResist.Spirit"), (AcceptableValueBase)(object)val, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5930
				}
			}));
			ProjectileSpeedMult = cfg.Bind<float>("Bonemass", "(Throw Projectile) SpeedMult", 3f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.SpeedMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5000
				}
			}));
			ProjectileDamageBlunt = cfg.Bind<float>("Bonemass", "(Throw Projectile) DamageBlunt", 20f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.DamageBlunt"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4990
				}
			}));
			ProjectileHitRadius = cfg.Bind<float>("Bonemass", "(Throw Projectile) HitRadius", 1f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.HitRadius"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 3f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4980
				}
			}));
			ProjectileDamagePoison = cfg.Bind<float>("Bonemass", "(Throw Projectile) DamagePoison", 15f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.DamagePoison"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4970
				}
			}));
			ProjectileStickyEnabled = cfg.Bind<bool>("Bonemass", "(Throw Projectile) StickyEnabled", true, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.StickyEnabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4960
				}
			}));
			ProjectileStickySourceEffect = cfg.Bind<string>("Bonemass", "(Throw Projectile) StickySourceEffect", "Tared", new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.StickySourceEffect"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4950
				}
			}));
			ProjectileStickyDisplayName = cfg.Bind<string>("Bonemass", "(Throw Projectile) StickyDisplayName", "오물투성이", new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.StickyDisplayName"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4940
				}
			}));
			ProjectileStickyDuration = cfg.Bind<float>("Bonemass", "(Throw Projectile) StickyDuration", 5f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.StickyDuration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 30f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4930
				}
			}));
			ProjectilePushForceFallback = cfg.Bind<float>("Bonemass", "(Throw Projectile) PushForceFallback", 25f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.PushForceFallback"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4920
				}
			}));
			ProjectileSpawnOffsetDistance = cfg.Bind<float>("Bonemass", "(Throw Projectile) SpawnOffsetDistance", 7f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.SpawnOffsetDistance"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 15f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4910
				}
			}));
			ProjectileAimHeightOffset = cfg.Bind<float>("Bonemass", "(Throw Projectile) AimHeightOffset", 2.5f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowProjectile.AimHeightOffset"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 6f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4905
				}
			}));
			BonusSpawnEnabled = cfg.Bind<bool>("Bonemass", "(Throw Summon) Enabled", false, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowSummon.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 4000
				}
			}));
			BonusSpawnPrefab = cfg.Bind<string>("Bonemass", "(Throw Summon) Prefab", "Blob", new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowSummon.Prefab"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3990
				}
			}));
			BonusSpawnChance = cfg.Bind<float>("Bonemass", "(Throw Summon) Chance", 50f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowSummon.Chance"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3980
				}
			}));
			BonusSpawnCount = cfg.Bind<int>("Bonemass", "(Throw Summon) Count", 1, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowSummon.Count"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 10), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3970
				}
			}));
			BonusSpawnHealthThreshold = cfg.Bind<float>("Bonemass", "(Throw Summon) HPThreshold", 100f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowSummon.HPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3960
				}
			}));
			BonusSpawnMinDistanceFromBoss = cfg.Bind<float>("Bonemass", "(Throw Summon) MinDistanceFromBoss", 8f, new ConfigDescription(LocalizationManager.Desc("Bonemass.ThrowSummon.MinDistanceFromBoss"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 30f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 3950
				}
			}));
			PhaseMessage = cfg.Bind<string>("Bonemass", "(Phase) Message", "", new ConfigDescription(LocalizationManager.Desc("Bonemass.Phase.Message"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 2000
				}
			}));
			PhaseMessageHP = cfg.Bind<float>("Bonemass", "(Phase) MessageHP", 50f, new ConfigDescription(LocalizationManager.Desc("Bonemass.Phase.MessageHP"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 1990
				}
			}));
		}
	}
	internal static class MiniBonemassVariants
	{
		public const int Count = 5;

		public static readonly string[] Names = new string[5] { "MiniBonemass_Red", "MiniBonemass_Orange", "MiniBonemass_Yellow", "MiniBonemass_Green", "MiniBonemass_Blue" };

		public static readonly string[] KoreanNames = new string[5] { "빨강", "주황", "노랑", "초록", "파랑" };

		public static readonly Color[] Colors = (Color[])(object)new Color[5]
		{
			new Color(1f, 0.05f, 0.05f),
			new Color(1f, 0.45f, 0f),
			new Color(1f, 1f, 0f),
			new Color(0f, 0.9f, 0.8f),
			new Color(0.05f, 0.3f, 1f)
		};

		public static bool IsMini(string prefabName)
		{
			return prefabName?.StartsWith("MiniBonemass_") ?? false;
		}

		public static int IndexOf(string prefabName)
		{
			for (int i = 0; i < Names.Length; i++)
			{
				if (Names[i] == prefabName)
				{
					return i;
				}
			}
			return -1;
		}
	}
	internal static class MonsterDB
	{
		private static readonly FieldInfo s_namedPrefabsField = AccessTools.Field(typeof(ZNetScene), "m_namedPrefabs");

		private static readonly GameObject[] s_variants = (GameObject[])(object)new GameObject[5];

		private static readonly Dictionary<GameObject, GameObject> s_weaponCloneCache = new Dictionary<GameObject, GameObject>();

		private static GameObject s_templateHolder;

		private static bool s_itemsLogged = false;

		private static readonly FieldInfo s_attackRangeField = AccessTools.Field(typeof(Attack), "m_attackRange");

		private static readonly List<GameObject> s_pendingObjectDBItems = new List<GameObject>();

		private static readonly MethodInfo s_updateRegistersMethod = AccessTools.Method(typeof(ObjectDB), "UpdateRegisters", (Type[])null, (Type[])null);

		private static void EnsureTemplateHolder()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			if (!((Object)(object)s_templateHolder != (Object)null))
			{
				s_templateHolder = new GameObject("MiniBonemassTemplateHolder");
				s_templateHolder.SetActive(false);
				Object.DontDestroyOnLoad((Object)(object)s_templateHolder);
			}
		}

		[HarmonyPostfix]
		public static void Postfix(ZNetScene __instance)
		{
			if (!(s_namedPrefabsField.GetValue(__instance) is Dictionary<int, GameObject> namedPrefabs))
			{
				Plugin.Log.LogError((object)"[MonsterDB] m_namedPrefabs 접근 실패");
				return;
			}
			for (int i = 0; i < 5; i++)
			{
				RegisterVariant(__instance, namedPrefabs, i);
			}
		}

		private static void RegisterVariant(ZNetScene zns, Dictionary<int, GameObject> namedPrefabs, int idx)
		{
			//IL_000f: 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_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: 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_0269: 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_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02be: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_038b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			string text = MiniBonemassVariants.Names[idx];
			Color tint = MiniBonemassVariants.Colors[idx];
			if ((Object)(object)zns.GetPrefab(text) != (Object)null)
			{
				return;
			}
			if ((Object)(object)s_variants[idx] != (Object)null)
			{
				zns.m_prefabs.Add(s_variants[idx]);
				namedPrefabs[StringExtensionMethods.GetStableHashCode(text)] = s_variants[idx];
				Plugin.Log.LogInfo((object)("[MonsterDB] " + text + " 재등록"));
				return;
			}
			GameObject prefab = zns.GetPrefab("Bonemass");
			if ((Object)(object)prefab == (Object)null)
			{
				Plugin.Log.LogError((object)("[MonsterDB] Bonemass 프리팹 없음 — " + text + " 등록 실패"));
				return;
			}
			LogBonemassAttackItems(prefab);
			bool activeSelf = prefab.activeSelf;
			prefab.SetActive(false);
			GameObject val = Object.Instantiate<GameObject>(prefab);
			prefab.SetActive(activeSelf);
			((Object)val).name = text;
			Object.DontDestroyOnLoad((Object)(object)val);
			EnsureTemplateHolder();
			val.transform.SetParent(s_templateHolder.transform, false);
			val.SetActive(true);
			Character component = prefab.GetComponent<Character>();
			Character component2 = val.GetComponent<Character>();
			if ((Object)(object)component2 != (Object)null)
			{
				component2.m_boss = false;
				component2.m_bossEvent = "";
				component2.m_runSpeed *= BonemassConfig.MiniSpeedMult.Value;
				component2.m_walkSpeed *= BonemassConfig.MiniSpeedMult.Value;
				component2.m_swimSpeed *= BonemassConfig.MiniSpeedMult.Value;
				component2.m_acceleration *= BonemassConfig.MiniSpeedMult.Value;
				if ((Object)(object)component != (Object)null)
				{
					component2.m_health = Mathf.Max(component.m_health * BonemassConfig.MiniHPMult.Value, 1f);
				}
			}
			if ((Object)(object)component2 != (Object)null)
			{
				DamageModifiers damageModifiers = component2.m_damageModifiers;
				damageModifiers.m_blunt = ParseModifier(BonemassConfig.MiniResistBlunt.Value, damageModifiers.m_blunt);
				damageModifiers.m_slash = ParseModifier(BonemassConfig.MiniResistSlash.Value, damageModifiers.m_slash);
				damageModifiers.m_pierce = ParseModifier(BonemassConfig.MiniResistPierce.Value, damageModifiers.m_pierce);
				damageModifiers.m_fire = ParseModifier(BonemassConfig.MiniResistFire.Value, damageModifiers.m_fire);
				damageModifiers.m_frost = ParseModifier(BonemassConfig.MiniResistFrost.Value, damageModifiers.m_frost);
				damageModifiers.m_lightning = ParseModifier(BonemassConfig.MiniResistLightning.Value, damageModifiers.m_lightning);
				damageModifiers.m_poison = ParseModifier(BonemassConfig.MiniResistPoison.Value, damageModifiers.m_poison);
				damageModifiers.m_spirit = ParseModifier(BonemassConfig.MiniResistSpirit.Value, damageModifiers.m_spirit);
				component2.m_damageModifiers = damageModifiers;
			}
			RemoveNonMeleeAttackItems(val);
			ZNetView component3 = val.GetComponent<ZNetView>();
			if ((Object)(object)component3 != (Object)null)
			{
				component3.m_persistent = false;
			}
			MonsterAI component4 = val.GetComponent<MonsterAI>();
			if ((Object)(object)component4 != (Object)null && BonemassConfig.MiniAttackIntervalMult.Value != 1f)
			{
				component4.m_minAttackInterval *= BonemassConfig.MiniAttackIntervalMult.Value;
			}
			CharacterDrop component5 = val.GetComponent<CharacterDrop>();
			if ((Object)(object)component5 != (Object)null)
			{
				component5.m_drops.Clear();
			}
			ApplyTint(val, tint);
			val.transform.localScale = Vector3.one * 0.3f;
			zns.m_prefabs.Add(val);
			namedPrefabs[StringExtensionMethods.GetStableHashCode(text)] = val;
			s_variants[idx] = val;
		}

		private static void LogBonemassAttackItems(GameObject original)
		{
			if (!s_itemsLogged)
			{
				s_itemsLogged = true;
				if ((Object)(object)original.GetComponent<Humanoid>() == (Object)null)
				{
					Plugin.Log.LogWarning((object)"[MonsterDB:진단] Bonemass에 Humanoid 컴포넌트 없음 — m_defaultItems 기반 접근 불가, 다른 방식 필요");
				}
			}
		}

		private static void RemoveNonMeleeAttackItems(GameObject mini)
		{
			Humanoid component = mini.GetComponent<Humanoid>();
			if (!((Object)(object)component == (Object)null))
			{
				float rangeMult = BonemassConfig.MiniAttackRangeMult.Value;
				float intervalMult = BonemassConfig.MiniAttackIntervalMult.Value;
				component.m_defaultItems = (from go in FilterMeleeOnly(component.m_defaultItems)
					select CreateMiniExclusiveWeapon(go, rangeMult, intervalMult)).ToArray();
				component.m_randomWeapon = (from go in FilterMeleeOnly(component.m_randomWeapon)
					select CreateMiniExclusiveWeapon(go, rangeMult, intervalMult)).ToArray();
			}
		}

		private static GameObject CreateMiniExclusiveWeapon(GameObject weaponPrefab, float rangeMult, float intervalMult)
		{
			if ((Object)(object)weaponPrefab == (Object)null)
			{
				return weaponPrefab;
			}
			if (s_weaponCloneCache.TryGetValue(weaponPrefab, out var value))
			{
				return value;
			}
			ItemDrop component = weaponPrefab.GetComponent<ItemDrop>();
			if (component?.m_itemData?.m_shared == null)
			{
				return weaponPrefab;
			}
			bool activeSelf = weaponPrefab.activeSelf;
			weaponPrefab.SetActive(false);
			GameObject val = Object.Instantiate<GameObject>(weaponPrefab);
			weaponPrefab.SetActive(activeSelf);
			((Object)val).name = ((Object)weaponPrefab).name + "_MiniBonemass";
			Object.DontDestroyOnLoad((Object)(object)val);
			val.SetActive(false);
			ItemDrop component2 = val.GetComponent<ItemDrop>();
			SharedData shared = component2.m_itemData.m_shared;
			if (shared == component.m_itemData.m_shared)
			{
				Plugin.Log.LogWarning((object)("[MonsterDB:진단] " + ((Object)val).name + " SharedData가 원본과 공유 중 — 독립 복제 실패, 별도 조치 필요"));
			}
			shared.m_aiAttackRange *= rangeMult;
			if (shared.m_aiAttackRangeMin > 0f)
			{
				shared.m_aiAttackRangeMin *= rangeMult;
			}
			ScaleAttackRange(shared.m_attack, rangeMult);
			ScaleAttackRange(shared.m_secondaryAttack, rangeMult);
			shared.m_aiAttackInterval *= intervalMult;
			RegisterInObjectDB(val);
			Plugin.Log.LogInfo((object)("[MonsterDB] MiniBonemass 전용 무기 생성: " + ((Object)val).name + " — " + $"aiAttackRange={shared.m_aiAttackRange:F2} attackRange={GetAttackRange(shared.m_attack):F2} " + "secondaryAttackRange=" + ((shared.m_secondaryAttack != null) ? GetAttackRange(shared.m_secondaryAttack).ToString("F2") : "N/A") + " " + $"aiAttackInterval={shared.m_aiAttackInterval:F2} (rangeMult {rangeMult:F2} / intervalMult {intervalMult:F2})"));
			s_weaponCloneCache[weaponPrefab] = val;
			return val;
		}

		private static void ScaleAttackRange(Attack attack, float mult)
		{
			if (attack != null && !(s_attackRangeField == null))
			{
				float num = (float)(s_attackRangeField.GetValue(attack) ?? ((object)0f));
				s_attackRangeField.SetValue(attack, num * mult);
			}
		}

		private static float GetAttackRange(Attack attack)
		{
			if (attack == null || s_attackRangeField == null)
			{
				return 0f;
			}
			return (float)(s_attackRangeField.GetValue(attack) ?? ((object)0f));
		}

		private static void RegisterInObjectDB(GameObject itemPrefab)
		{
			if (!s_pendingObjectDBItems.Contains(itemPrefab))
			{
				s_pendingObjectDBItems.Add(itemPrefab);
			}
			TryFlushPendingObjectDBItems();
		}

		internal static void TryFlushPendingObjectDBItems()
		{
			if ((Object)(object)ObjectDB.instance == (Object)null)
			{
				return;
			}
			bool flag = false;
			List<GameObject> list = new List<GameObject>();
			foreach (GameObject item in s_pendingObjectDBItems)
			{
				if (!((Object)(object)item == (Object)null) && !ObjectDB.instance.m_items.Contains(item))
				{
					if (ObjectDB.instance.m_items.Exists((GameObject existing) => (Object)(object)existing != (Object)null && ((Object)existing).name == ((Object)item).name))
					{
						Plugin.Log.LogWarning((object)("[MonsterDB] ObjectDB 등록 스킵(이름 중복): " + ((Object)item).name));
						continue;
					}
					ObjectDB.instance.m_items.Add(item);
					flag = true;
					list.Add(item);
				}
			}
			if (!flag)
			{
				return;
			}
			try
			{
				s_updateRegistersMethod?.Invoke(ObjectDB.instance, null);
			}
			catch (Exception ex)
			{
				Plugin.Log.LogError((object)("[MonsterDB:진단] UpdateRegisters() 호출 중 예외 — " + ex.GetType().Name + ": " + ex.Message + " (내부: " + ex.InnerException?.GetType().Name + ": " + ex.InnerException?.Message + ")"));
				return;
			}
			foreach (GameObject item2 in list)
			{
				GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(((Object)item2).name);
				if ((Object)(object)itemPrefab != (Object)(object)item2)
				{
					Plugin.Log.LogWarning((object)("[MonsterDB] ObjectDB 등록 후 조회 검증 실패: " + ((Object)item2).name + " — " + (((Object)(object)itemPrefab == (Object)null) ? "못찾음" : "다른 객체가 조회됨")));
				}
			}
		}

		private static GameObject[] FilterMeleeOnly(GameObject[] arr)
		{
			if (arr == null || arr.Length == 0)
			{
				return arr;
			}
			return arr.Where(delegate(GameObject go)
			{
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Invalid comparison between Unknown and I4
				//IL_0086: Unknown result type (might be due to invalid IL or missing references)
				if ((Object)(object)go == (Object)null)
				{
					return true;
				}
				Attack val = go.GetComponent<ItemDrop>()?.m_itemData?.m_shared?.m_attack;
				if (val == null)
				{
					return true;
				}
				bool flag = (int)val.m_attackType == 0 || (int)val.m_attackType == 1;
				if (!flag)
				{
					Plugin.Log.LogInfo((object)("[MonsterDB] MiniBonemass 근접외 공격 제거: " + ((Object)go).name + " " + $"(attackType={val.m_attackType})"));
				}
				return flag;
			}).ToArray();
		}

		private static DamageModifier ParseModifier(string value, DamageModifier original)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			if (string.IsNullOrEmpty(value) || value == "Inherit")
			{
				return original;
			}
			if (Enum.TryParse<DamageModifier>(value, out DamageModifier result))
			{
				return result;
			}
			Plugin.Log.LogWarning((object)("[MonsterDB] 알 수 없는 저항값 '" + value + "' → Inherit 처리"));
			return original;
		}

		internal static void ApplyTint(GameObject go, Color tint)
		{
			//IL_016e: 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_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: 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_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: 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_0109: Unknown result type (might be due to invalid IL or missing references)
			Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true);
			foreach (Renderer val in componentsInChildren)
			{
				if (val is ParticleSystemRenderer)
				{
					continue;
				}
				Material[] sharedMaterials = val.sharedMaterials;
				bool flag = false;
				for (int j = 0; j < sharedMaterials.Length; j++)
				{
					if (!((Object)(object)sharedMaterials[j] == (Object)null))
					{
						Material val2 = new Material(sharedMaterials[j]);
						if (val2.HasProperty("_Color"))
						{
							Color color = val2.color;
							val2.color = new Color(tint.r, tint.g, tint.b, color.a);
						}
						if (val2.HasProperty("_EmissionColor"))
						{
							val2.EnableKeyword("_EMISSION");
							val2.SetColor("_EmissionColor", tint * 15f);
						}
						if (val2.HasProperty("_TintColor"))
						{
							val2.SetColor("_TintColor", new Color(tint.r, tint.g, tint.b, 0.5f));
						}
						sharedMaterials[j] = val2;
						flag = true;
					}
				}
				if (flag)
				{
					val.sharedMaterials = sharedMaterials;
				}
			}
			ParticleSystem[] componentsInChildren2 = go.GetComponentsInChildren<ParticleSystem>(true);
			foreach (ParticleSystem val3 in componentsInChildren2)
			{
				MainModule main = val3.main;
				EmissionModule emission = val3.emission;
				((EmissionModule)(ref emission)).rateOverTimeMultiplier = ((EmissionModule)(ref emission)).rateOverTimeMultiplier * 0.1f;
				((EmissionModule)(ref emission)).rateOverDistanceMultiplier = ((EmissionModule)(ref emission)).rateOverDistanceMultiplier * 0.1f;
				((MainModule)(ref main)).startSizeMultiplier = ((MainModule)(ref main)).startSizeMultiplier * 0.35f;
				MinMaxGradient startColor = ((MainModule)(ref main)).startColor;
				Color color2 = ((MinMaxGradient)(ref startColor)).color;
				((MainModule)(ref main)).startColor = new MinMaxGradient(new Color(tint.r, tint.g, tint.b, color2.a * 0.06f));
			}
		}
	}
	[HarmonyPatch]
	internal static class MonsterDBObjectDBRegisterPatch
	{
		[HarmonyTargetMethods]
		private static IEnumerable<MethodBase> TargetMethods()
		{
			yield return AccessTools.Method(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null);
			yield return AccessTools.Method(typeof(ObjectDB), "CopyOtherDB", (Type[])null, (Type[])null);
		}

		[HarmonyPostfix]
		public static void Postfix()
		{
			MonsterDB.TryFlushPendingObjectDBItems();
		}
	}
	public static class EikthyrSummonConfig
	{
		public static ConfigEntry<bool> Enabled { get; private set; }

		public static ConfigEntry<SummonTriggerMode> TriggerMode { get; private set; }

		public static ConfigEntry<int> HealthStepCount { get; private set; }

		public static ConfigEntry<float> TimerInterval { get; private set; }

		public static ConfigEntry<string> SummonPrefab { get; private set; }

		public static ConfigEntry<int> SummonCount { get; private set; }

		public static ConfigEntry<int> SummonLevel { get; private set; }

		public static ConfigEntry<int> MaxTotalSummons { get; private set; }

		public static ConfigEntry<bool> UseCLLC { get; private set; }

		public static ConfigEntry<bool> SpecialSummonEnabled { get; private set; }

		public static ConfigEntry<float> SpecialSummonHealthThreshold { get; private set; }

		public static ConfigEntry<string> SpecialSummonPrefab { get; private set; }

		public static ConfigEntry<int> SpecialSummonCount { get; private set; }

		public static ConfigEntry<int> SpecialSummonLevel { get; private set; }

		public static ConfigEntry<string> SpecialSummonVfxPrefab { get; private set; }

		public static ConfigEntry<bool> Phase2Enabled { get; private set; }

		public static ConfigEntry<float> Phase2HealthThreshold { get; private set; }

		public static ConfigEntry<string> StompAnimName { get; private set; }

		public static ConfigEntry<float> LightningProcChance { get; private set; }

		public static ConfigEntry<int> LightningCount { get; private set; }

		public static ConfigEntry<float> LightningDamageBlunt { get; private set; }

		public static ConfigEntry<float> LightningDamageSlash { get; private set; }

		public static ConfigEntry<float> LightningDamagePierce { get; private set; }

		public static ConfigEntry<float> LightningDamageLightning { get; private set; }

		public static ConfigEntry<float> LightningPushForce { get; private set; }

		public static ConfigEntry<float> LightningStartDelay { get; private set; }

		public static ConfigEntry<float> LightningSafeZoneRadius { get; private set; }

		public static ConfigEntry<float> LightningDotDuration { get; private set; }

		public static ConfigEntry<float> LightningDotMinDamage { get; private set; }

		public static ConfigEntry<float> LightningDotMaxDamage { get; private set; }

		public static ConfigEntry<bool> HornLaunchEnabled { get; private set; }

		public static ConfigEntry<float> HornLaunchHealthThreshold { get; private set; }

		public static ConfigEntry<string> HornLaunchAnimName { get; private set; }

		public static ConfigEntry<float> HornLaunchHorizontalForce { get; private set; }

		public static ConfigEntry<float> HornLaunchVerticalForce { get; private set; }

		public static ConfigEntry<float> HornLaunchProcChance { get; private set; }

		public static ConfigEntry<bool> HornLaunchAffectsBlocking { get; private set; }

		public static ConfigEntry<string> PhaseMessage { get; private set; }

		public static ConfigEntry<float> PhaseMessageHP { get; private set; }

		public static void Bind(ConfigFile cfg)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Expected O, but got Unknown
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Expected O, but got Unknown
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Expected O, but got Unknown
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Expected O, but got Unknown
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Expected O, but got Unknown
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Expected O, but got Unknown
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Expected O, but got Unknown
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Expected O, but got Unknown
			//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Expected O, but got Unknown
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Expected O, but got Unknown
			//IL_0456: Unknown result type (might be due to invalid IL or missing references)
			//IL_0460: Expected O, but got Unknown
			//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b7: Expected O, but got Unknown
			//IL_0504: Unknown result type (might be due to invalid IL or missing references)
			//IL_050e: Expected O, but got Unknown
			//IL_055b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0565: Expected O, but got Unknown
			//IL_05b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bc: Expected O, but got Unknown
			//IL_0609: Unknown result type (might be due to invalid IL or missing references)
			//IL_0613: Expected O, but got Unknown
			//IL_0660: Unknown result type (might be due to invalid IL or missing references)
			//IL_066a: Expected O, but got Unknown
			//IL_06b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c1: Expected O, but got Unknown
			//IL_070e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0718: Expected O, but got Unknown
			//IL_0753: Unknown result type (might be due to invalid IL or missing references)
			//IL_075d: Expected O, but got Unknown
			//IL_0798: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a2: Expected O, but got Unknown
			//IL_07e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ef: Expected O, but got Unknown
			//IL_083c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0846: Expected O, but got Unknown
			//IL_0885: Unknown result type (might be due to invalid IL or missing references)
			//IL_088f: Expected O, but got Unknown
			//IL_08d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08db: Expected O, but got Unknown
			//IL_091c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0926: Expected O, but got Unknown
			//IL_096c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0976: Expected O, but got Unknown
			//IL_09b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09bb: Expected O, but got Unknown
			//IL_09f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a00: Expected O, but got Unknown
			//IL_0a4d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a57: Expected O, but got Unknown
			//IL_0a96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa0: Expected O, but got Unknown
			//IL_0ae2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aec: Expected O, but got Unknown
			//IL_0b2d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b37: Expected O, but got Unknown
			//IL_0b76: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b80: Expected O, but got Unknown
			//IL_0bbf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc9: Expected O, but got Unknown
			//IL_0c16: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c20: Expected O, but got Unknown
			HornLaunchEnabled = cfg.Bind<bool>("Eikthyr", "(Horn Attack) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9000
				}
			}));
			HornLaunchHealthThreshold = cfg.Bind<float>("Eikthyr", "(Horn Attack) HPThreshold", 100f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.HPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8990
				}
			}));
			HornLaunchAnimName = cfg.Bind<string>("Eikthyr", "(Horn Attack) Anim", "attack1", new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.Anim"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8980
				}
			}));
			HornLaunchHorizontalForce = cfg.Bind<float>("Eikthyr", "(Horn Attack) HorizontalForce", 15f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.HorizontalForce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8970
				}
			}));
			HornLaunchVerticalForce = cfg.Bind<float>("Eikthyr", "(Horn Attack) VerticalForce", 12f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.VerticalForce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8960
				}
			}));
			HornLaunchProcChance = cfg.Bind<float>("Eikthyr", "(Horn Attack) ProcChance", 100f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.ProcChance"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8950
				}
			}));
			HornLaunchAffectsBlocking = cfg.Bind<bool>("Eikthyr", "(Horn Attack) AffectsBlocking", false, new ConfigDescription(LocalizationManager.Desc("Eikthyr.HornAttack.AffectsBlocking"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8940
				}
			}));
			Phase2Enabled = cfg.Bind<bool>("Eikthyr", "(Lightning) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8000
				}
			}));
			Phase2HealthThreshold = cfg.Bind<float>("Eikthyr", "(Lightning) HPThreshold", 50f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.HPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 99f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7990
				}
			}));
			StompAnimName = cfg.Bind<string>("Eikthyr", "(Lightning) StompAnim", "stomp", new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.StompAnim"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7980
				}
			}));
			LightningProcChance = cfg.Bind<float>("Eikthyr", "(Lightning) ProcChance", 50f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.ProcChance"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7970
				}
			}));
			LightningCount = cfg.Bind<int>("Eikthyr", "(Lightning) Count", 3, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.Count"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7960
				}
			}));
			LightningDamageBlunt = cfg.Bind<float>("Eikthyr", "(Lightning) DamageBlunt", 0f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DamageBlunt"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1000f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7950
				}
			}));
			LightningDamageSlash = cfg.Bind<float>("Eikthyr", "(Lightning) DamageSlash", 0f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DamageSlash"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1000f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7940
				}
			}));
			LightningDamagePierce = cfg.Bind<float>("Eikthyr", "(Lightning) DamagePierce", 0f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DamagePierce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1000f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7930
				}
			}));
			LightningDamageLightning = cfg.Bind<float>("Eikthyr", "(Lightning) DamageLightning", 50f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DamageLightning"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1000f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7920
				}
			}));
			LightningPushForce = cfg.Bind<float>("Eikthyr", "(Lightning) PushForce", 30f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.PushForce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7915
				}
			}));
			LightningStartDelay = cfg.Bind<float>("Eikthyr", "(Lightning) StartDelay", 0.8f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.StartDelay"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7910
				}
			}));
			LightningSafeZoneRadius = cfg.Bind<float>("Eikthyr", "(Lightning) SafeZoneRadius", 10f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.SafeZoneRadius"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 49f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7900
				}
			}));
			LightningDotDuration = cfg.Bind<float>("Eikthyr", "(Lightning) DotDuration", 4f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DotDuration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 30f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7890
				}
			}));
			LightningDotMinDamage = cfg.Bind<float>("Eikthyr", "(Lightning) DotMinDamage", 1f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DotMinDamage"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7880
				}
			}));
			LightningDotMaxDamage = cfg.Bind<float>("Eikthyr", "(Lightning) DotMaxDamage", 5f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Lightning.DotMaxDamage"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7870
				}
			}));
			Enabled = cfg.Bind<bool>("Eikthyr", "(Summon) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7000
				}
			}));
			TriggerMode = cfg.Bind<SummonTriggerMode>("Eikthyr", "(Summon) TriggerMode", SummonTriggerMode.Both, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.TriggerMode"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6990
				}
			}));
			HealthStepCount = cfg.Bind<int>("Eikthyr", "(Summon) HealthStepCount", 10, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.HealthStepCount"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6980
				}
			}));
			TimerInterval = cfg.Bind<float>("Eikthyr", "(Summon) TimerInterval", 30f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.TimerInterval"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 3600f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6970
				}
			}));
			SummonPrefab = cfg.Bind<string>("Eikthyr", "(Summon) Prefab", "Troll", new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.Prefab"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6960
				}
			}));
			SummonCount = cfg.Bind<int>("Eikthyr", "(Summon) Count", 2, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.Count"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 50), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6950
				}
			}));
			SummonLevel = cfg.Bind<int>("Eikthyr", "(Summon) Level", 1, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.Level"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6940
				}
			}));
			MaxTotalSummons = cfg.Bind<int>("Eikthyr", "(Summon) MaxTotal", 20, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.MaxTotal"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 200), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6930
				}
			}));
			UseCLLC = cfg.Bind<bool>("Eikthyr", "(Summon) UseCLLC", false, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.UseCLLC"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6920
				}
			}));
			SpecialSummonEnabled = cfg.Bind<bool>("Eikthyr", "(Special Summon) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.SpecialEnabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6800
				}
			}));
			SpecialSummonHealthThreshold = cfg.Bind<float>("Eikthyr", "(Special Summon) HPThreshold", 50f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.SpecialHPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 99f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6790
				}
			}));
			SpecialSummonPrefab = cfg.Bind<string>("Eikthyr", "(Special Summon) Prefab", "Troll", new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.SpecialPrefab"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6780
				}
			}));
			SpecialSummonCount = cfg.Bind<int>("Eikthyr", "(Special Summon) Count", 1, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.SpecialCount"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 10), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6770
				}
			}));
			SpecialSummonLevel = cfg.Bind<int>("Eikthyr", "(Special Summon) Level", 3, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.SpecialLevel"), (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 5), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6760
				}
			}));
			SpecialSummonVfxPrefab = cfg.Bind<string>("Eikthyr", "(Special Summon) VFX", "vfx_GodExplosion", new ConfigDescription(LocalizationManager.Desc("Eikthyr.Summon.SpecialVFX"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6750
				}
			}));
			PhaseMessage = cfg.Bind<string>("Eikthyr", "(Phase) Message", "", new ConfigDescription(LocalizationManager.Desc("Eikthyr.Phase.Message"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6000
				}
			}));
			PhaseMessageHP = cfg.Bind<float>("Eikthyr", "(Phase) MessageHP", 50f, new ConfigDescription(LocalizationManager.Desc("Eikthyr.Phase.MessageHP"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 5990
				}
			}));
		}
	}
	public static class ModerConfig
	{
		public static ConfigEntry<bool> AirBreathEnabled { get; private set; }

		public static ConfigEntry<float> AirBreathCooldown { get; private set; }

		public static ConfigEntry<float> AirBreathTickInterval { get; private set; }

		public static ConfigEntry<float> AirBreathDuration { get; private set; }

		public static ConfigEntry<float> AirBreathRange { get; private set; }

		public static ConfigEntry<float> AirBreathAngle { get; private set; }

		public static ConfigEntry<float> AirBreathDamageFrost { get; private set; }

		public static ConfigEntry<float> AirBreathDamageBlunt { get; private set; }

		public static ConfigEntry<float> AirBreathStaggerMult { get; private set; }

		public static ConfigEntry<string> AirBreathVFX { get; private set; }

		public static ConfigEntry<float> AirBreathMinAltitude { get; private set; }

		public static ConfigEntry<float> AirBreathHPThreshold { get; private set; }

		public static ConfigEntry<string> AirBreathPhaseMessage { get; private set; }

		public static ConfigEntry<float> AirBreathPhaseMessageHP { get; private set; }

		public static ConfigEntry<bool> GroundBreathEnabled { get; private set; }

		public static ConfigEntry<float> GroundBreathTickInterval { get; private set; }

		public static ConfigEntry<float> GroundBreathDuration { get; private set; }

		public static ConfigEntry<float> GroundBreathRange { get; private set; }

		public static ConfigEntry<float> GroundBreathAngle { get; private set; }

		public static ConfigEntry<float> GroundBreathHeight { get; private set; }

		public static ConfigEntry<float> GroundBreathDamageFrost { get; private set; }

		public static ConfigEntry<float> GroundBreathDamageBlunt { get; private set; }

		public static ConfigEntry<float> GroundBreathPushForce { get; private set; }

		public static ConfigEntry<float> GroundBreathStaggerMult { get; private set; }

		public static ConfigEntry<bool> StrikeEnabled { get; private set; }

		public static ConfigEntry<float> StrikeRadius { get; private set; }

		public static ConfigEntry<float> StrikeExpandDuration { get; private set; }

		public static ConfigEntry<float> StrikeDamageBlunt { get; private set; }

		public static ConfigEntry<float> StrikePushForce { get; private set; }

		public static ConfigEntry<float> StrikePushForceY { get; private set; }

		public static ConfigEntry<float> StrikeStaggerMult { get; private set; }

		public static ConfigEntry<string> StrikeImpactVFX { get; private set; }

		public static ConfigEntry<float> StrikeImpactVFXScale { get; private set; }

		public static ConfigEntry<bool> FearEnabled { get; private set; }

		public static ConfigEntry<float> FearHPThreshold { get; private set; }

		public static ConfigEntry<float> FearCooldown { get; private set; }

		public static ConfigEntry<float> FearRadius { get; private set; }

		public static ConfigEntry<float> FearDamageFrost { get; private set; }

		public static ConfigEntry<float> FearDamageBlunt { get; private set; }

		public static ConfigEntry<float> FearPushForce { get; private set; }

		public static ConfigEntry<float> FearStaggerMult { get; private set; }

		public static ConfigEntry<bool> FearBlockable { get; private set; }

		public static ConfigEntry<string> FearVFX { get; private set; }

		public static ConfigEntry<string> FearSFX { get; private set; }

		public static ConfigEntry<float> FearDuration { get; private set; }

		public static ConfigEntry<string> FearSourceEffect { get; private set; }

		public static ConfigEntry<string> FearDisplayName { get; private set; }

		public static ConfigEntry<bool> FearDamageReductionEnabled { get; private set; }

		public static ConfigEntry<float> FearDamageReductionPercent { get; private set; }

		public static void Bind(ConfigFile cfg)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Expected O, but got Unknown
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Expected O, but got Unknown
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Expected O, but got Unknown
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Expected O, but got Unknown
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Expected O, but got Unknown
			//IL_0297: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Expected O, but got Unknown
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f8: Expected O, but got Unknown
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_0341: Expected O, but got Unknown
			//IL_038e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0398: Expected O, but got Unknown
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ef: Expected O, but got Unknown
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0438: Expected O, but got Unknown
			//IL_0485: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Expected O, but got Unknown
			//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d4: Expected O, but got Unknown
			//IL_0521: Unknown result type (might be due to invalid IL or missing references)
			//IL_052b: Expected O, but got Unknown
			//IL_0578: Unknown result type (might be due to invalid IL or missing references)
			//IL_0582: Expected O, but got Unknown
			//IL_05cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d9: Expected O, but got Unknown
			//IL_0626: Unknown result type (might be due to invalid IL or missing references)
			//IL_0630: Expected O, but got Unknown
			//IL_067d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0687: Expected O, but got Unknown
			//IL_06d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06de: Expected O, but got Unknown
			//IL_072b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0735: Expected O, but got Unknown
			//IL_0782: Unknown result type (might be due to invalid IL or missing references)
			//IL_078c: Expected O, but got Unknown
			//IL_07d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Expected O, but got Unknown
			//IL_081e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0828: Expected O, but got Unknown
			//IL_0875: Unknown result type (might be due to invalid IL or missing references)
			//IL_087f: Expected O, but got Unknown
			//IL_08cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d6: Expected O, but got Unknown
			//IL_0923: Unknown result type (might be due to invalid IL or missing references)
			//IL_092d: Expected O, but got Unknown
			//IL_097a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0984: Expected O, but got Unknown
			//IL_09d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09db: Expected O, but got Unknown
			//IL_0a28: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a32: Expected O, but got Unknown
			//IL_0a7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a89: Expected O, but got Unknown
			//IL_0ac4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ace: Expected O, but got Unknown
			//IL_0b0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b17: Expected O, but got Unknown
			//IL_0b56: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b60: Expected O, but got Unknown
			//IL_0bad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb7: Expected O, but got Unknown
			//IL_0bf6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c00: Expected O, but got Unknown
			//IL_0c3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c49: Expected O, but got Unknown
			//IL_0c84: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c8e: Expected O, but got Unknown
			//IL_0cdb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce5: Expected O, but got Unknown
			//IL_0d20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d2a: Expected O, but got Unknown
			//IL_0d77: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d81: Expected O, but got Unknown
			//IL_0dce: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd8: Expected O, but got Unknown
			//IL_0e25: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e2f: Expected O, but got Unknown
			//IL_0e7c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e86: Expected O, but got Unknown
			//IL_0ed3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0edd: Expected O, but got Unknown
			//IL_0f2a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f34: Expected O, but got Unknown
			//IL_0f73: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f7d: Expected O, but got Unknown
			//IL_0fca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fd4: Expected O, but got Unknown
			AirBreathEnabled = cfg.Bind<bool>("Moder", "(Air Breath) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9000
				}
			}));
			AirBreathCooldown = cfg.Bind<float>("Moder", "(Air Breath) Cooldown", 8f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.Cooldown"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 60f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8990
				}
			}));
			AirBreathTickInterval = cfg.Bind<float>("Moder", "(Air Breath) TickInterval", 0.35f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.TickInterval"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 2f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8985
				}
			}));
			AirBreathDuration = cfg.Bind<float>("Moder", "(Air Breath) Duration", 2.5f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.Duration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8982
				}
			}));
			AirBreathRange = cfg.Bind<float>("Moder", "(Air Breath) Range", 28f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.Range"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(5f, 80f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8980
				}
			}));
			AirBreathAngle = cfg.Bind<float>("Moder", "(Air Breath) Angle", 60f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.Angle"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 180f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8970
				}
			}));
			AirBreathDamageFrost = cfg.Bind<float>("Moder", "(Air Breath) DamageFrost", 7f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.DamageFrost"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8960
				}
			}));
			AirBreathDamageBlunt = cfg.Bind<float>("Moder", "(Air Breath) DamageBlunt", 0f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.DamageBlunt"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8950
				}
			}));
			AirBreathStaggerMult = cfg.Bind<float>("Moder", "(Air Breath) StaggerMult", 0.3f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.StaggerMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8945
				}
			}));
			AirBreathVFX = cfg.Bind<string>("Moder", "(Air Breath) VFX", "vfx_dragon_coldbreath", new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.VFX"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8940
				}
			}));
			AirBreathMinAltitude = cfg.Bind<float>("Moder", "(Air Breath) MinAltitude", 8f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.MinAltitude"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 30f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8930
				}
			}));
			AirBreathHPThreshold = cfg.Bind<float>("Moder", "(Air Breath) HPThreshold", 100f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.HPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8920
				}
			}));
			AirBreathPhaseMessage = cfg.Bind<string>("Moder", "(Air Breath) PhaseMessage", "", new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.PhaseMessage"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8910
				}
			}));
			AirBreathPhaseMessageHP = cfg.Bind<float>("Moder", "(Air Breath) PhaseMessageHP", 50f, new ConfigDescription(LocalizationManager.Desc("Moder.AirBreath.PhaseMessageHP"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8900
				}
			}));
			GroundBreathEnabled = cfg.Bind<bool>("Moder", "(Ground Breath) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8890
				}
			}));
			GroundBreathTickInterval = cfg.Bind<float>("Moder", "(Ground Breath) TickInterval", 0.35f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.TickInterval"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 2f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8880
				}
			}));
			GroundBreathDuration = cfg.Bind<float>("Moder", "(Ground Breath) Duration", 2f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.Duration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 10f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8875
				}
			}));
			GroundBreathRange = cfg.Bind<float>("Moder", "(Ground Breath) Range", 10f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.Range"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(2f, 40f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8870
				}
			}));
			GroundBreathAngle = cfg.Bind<float>("Moder", "(Ground Breath) Angle", 50f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.Angle"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 180f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8860
				}
			}));
			GroundBreathHeight = cfg.Bind<float>("Moder", "(Ground Breath) Height", 1f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.Height"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8850
				}
			}));
			GroundBreathDamageFrost = cfg.Bind<float>("Moder", "(Ground Breath) DamageFrost", 8f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.DamageFrost"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8840
				}
			}));
			GroundBreathDamageBlunt = cfg.Bind<float>("Moder", "(Ground Breath) DamageBlunt", 0f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.DamageBlunt"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8830
				}
			}));
			GroundBreathPushForce = cfg.Bind<float>("Moder", "(Ground Breath) PushForce", 20f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.PushForce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8820
				}
			}));
			GroundBreathStaggerMult = cfg.Bind<float>("Moder", "(Ground Breath) StaggerMult", 0.3f, new ConfigDescription(LocalizationManager.Desc("Moder.GroundBreath.StaggerMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8815
				}
			}));
			FearEnabled = cfg.Bind<bool>("Moder", "(Dragon Fear) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8000
				}
			}));
			FearHPThreshold = cfg.Bind<float>("Moder", "(Dragon Fear) HPThreshold", 100f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.HPThreshold"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7990
				}
			}));
			FearCooldown = cfg.Bind<float>("Moder", "(Dragon Fear) Cooldown", 25f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.Cooldown"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(5f, 300f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7980
				}
			}));
			FearRadius = cfg.Bind<float>("Moder", "(Dragon Fear) Radius", 15f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.Radius"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 60f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7970
				}
			}));
			FearDamageFrost = cfg.Bind<float>("Moder", "(Dragon Fear) DamageFrost", 30f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.DamageFrost"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7960
				}
			}));
			FearDamageBlunt = cfg.Bind<float>("Moder", "(Dragon Fear) DamageBlunt", 0f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.DamageBlunt"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7950
				}
			}));
			FearPushForce = cfg.Bind<float>("Moder", "(Dragon Fear) PushForce", 20f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.PushForce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 200f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7940
				}
			}));
			FearStaggerMult = cfg.Bind<float>("Moder", "(Dragon Fear) StaggerMult", 1f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.StaggerMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7930
				}
			}));
			FearBlockable = cfg.Bind<bool>("Moder", "(Dragon Fear) Blockable", true, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.Blockable"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7920
				}
			}));
			FearVFX = cfg.Bind<string>("Moder", "(Dragon Fear) VFX", "", new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.VFX"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7910
				}
			}));
			FearSFX = cfg.Bind<string>("Moder", "(Dragon Fear) SFX", "", new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.SFX"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7900
				}
			}));
			FearDuration = cfg.Bind<float>("Moder", "(Dragon Fear) Duration", 1.5f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.Duration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7895
				}
			}));
			FearSourceEffect = cfg.Bind<string>("Moder", "(Dragon Fear) SourceEffect", "Tared", new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.SourceEffect"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7890
				}
			}));
			FearDisplayName = cfg.Bind<string>("Moder", "(Dragon Fear) DisplayName", "경직", new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.DisplayName"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7885
				}
			}));
			FearDamageReductionEnabled = cfg.Bind<bool>("Moder", "(Dragon Fear) DamageReductionEnabled", false, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.DamageReductionEnabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7880
				}
			}));
			FearDamageReductionPercent = cfg.Bind<float>("Moder", "(Dragon Fear) DamageReductionPercent", 30f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonFear.DamageReductionPercent"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 90f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7875
				}
			}));
			StrikeEnabled = cfg.Bind<bool>("Moder", "(Dragon Strike) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 7000
				}
			}));
			StrikeRadius = cfg.Bind<float>("Moder", "(Dragon Strike) Radius", 50f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.Radius"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(5f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6990
				}
			}));
			StrikeExpandDuration = cfg.Bind<float>("Moder", "(Dragon Strike) ExpandDuration", 2f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.ExpandDuration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.3f, 8f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6988
				}
			}));
			StrikeDamageBlunt = cfg.Bind<float>("Moder", "(Dragon Strike) DamageBlunt", 40f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.DamageBlunt"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6985
				}
			}));
			StrikePushForce = cfg.Bind<float>("Moder", "(Dragon Strike) PushForce", 25f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.PushForce"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1000f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6980
				}
			}));
			StrikePushForceY = cfg.Bind<float>("Moder", "(Dragon Strike) PushForceY", 8f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.PushForceY"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6970
				}
			}));
			StrikeStaggerMult = cfg.Bind<float>("Moder", "(Dragon Strike) StaggerMult", 1f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.StaggerMult"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6975
				}
			}));
			StrikeImpactVFX = cfg.Bind<string>("Moder", "(Dragon Strike) ImpactVFX", "vfx_gdking_stomp", new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.ImpactVFX"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6973
				}
			}));
			StrikeImpactVFXScale = cfg.Bind<float>("Moder", "(Dragon Strike) ImpactVFXScale", 1f, new ConfigDescription(LocalizationManager.Desc("Moder.DragonStrike.ImpactVFXScale"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 6972
				}
			}));
		}
	}
	[BepInPlugin("bossadd", "BossAdd", "1.1.0")]
	public class Plugin : BaseUnityPlugin
	{
		public static ManualLogSource Log;

		public static bool SummonBlocked = false;

		private bool _playerWasDead = false;

		private float _unblockTime = 0f;

		private static readonly HashSet<string> _tickErrorLogged = new HashSet<string>();

		public static Plugin Instance { get; private set; }

		private void Awake()
		{
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			Instance = this;
			Log = ((BaseUnityPlugin)this).Logger;
			LocalizationManager.Init();
			BossStatConfig.Bind(((BaseUnityPlugin)this).Config);
			EikthyrSummonConfig.Bind(((BaseUnityPlugin)this).Config);
			BossSummonConfig.Bind(((BaseUnityPlugin)this).Config);
			TheElderConfig.Bind(((BaseUnityPlugin)this).Config);
			BonemassConfig.Bind(((BaseUnityPlugin)this).Config);
			ModerConfig.Bind(((BaseUnityPlugin)this).Config);
			YagluthConfig.Bind(((BaseUnityPlugin)this).Config);
			QueenConfig.Bind(((BaseUnityPlugin)this).Config);
			new Harmony("bossadd").PatchAll();
			LogBuildInfo();
			Log.LogInfo((object)"BossAdd loaded.");
		}

		private void LogBuildInfo()
		{
			try
			{
				string location = Assembly.GetExecutingAssembly().Location;
				DateTime lastWriteTime = File.GetLastWriteTime(location);
				string text;
				using (MD5 mD = MD5.Create())
				{
					using FileStream inputStream = File.OpenRead(location);
					byte[] array = mD.ComputeHash(inputStream);
					text = BitConverter.ToString(array, 0, 4).Replace("-", "");
				}
				Log.LogInfo((object)($"[BossAdd:빌드정보] dll 수정시각={lastWriteTime:yyyy-MM-dd HH:mm:ss}, " + "md5앞8자리=" + text));
			}
			catch (Exception ex)
			{
				Log.LogWarning((object)("[BossAdd:빌드정보] 확인 실패 — " + ex.Message));
			}
		}

		private void Update()
		{
			SafeTick("EikthyrTimerSummonHandler", EikthyrTimerSummonHandler.Tick);
			SafeTick("BossTimerSummonHandler", BossTimerSummonHandler.Tick);
			SafeTick("TheElderRockThrowHandler", TheElderRockThrowHandler.Tick);
			SafeTick("ModerAirBreathHandler", ModerAirBreathHandler.Tick);
			SafeTick("DragonGroundBreathHandler", DragonGroundBreathHandler.Tick);
			SafeTick("YagluthRageHandler", YagluthRageHandler.Tick);
			SafeTick("YagluthDeathZoneHandler", YagluthDeathZoneHandler.Tick);
			SafeTick("YagluthMeteorFireHandler", YagluthMeteorFireHandler.Tick);
			SafeTick("QueenBroodTimerHandler", QueenBroodTimerHandler.Tick);
			SafeTick("QueenPoisonZoneHandler", QueenPoisonZoneHandler.Tick);
			SafeTick("BonemassSplitState.TickOrphanCheck", BonemassSplitState.TickOrphanCheck);
			SafeTick("BonemassMiniLeashHandler", BonemassMiniLeashHandler.Tick);
			SafeTick("CheckRespawn", CheckRespawn);
		}

		private static void SafeTick(string name, Action tick)
		{
			try
			{
				tick();
			}
			catch (Exception arg)
			{
				if (_tickErrorLogged.Add(name))
				{
					Log.LogError((object)("[BossAdd:Tick오류] '" + name + "' 핸들러에서 예외 발생 — 이 핸들러는 " + $"계속 실패할 수 있으나 추가 로그는 세션당 1회로 생략됨. {arg}"));
				}
			}
		}

		private void CheckRespawn()
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				return;
			}
			if (((Character)Player.m_localPlayer).IsDead())
			{
				if (!_playerWasDead)
				{
					_playerWasDead = true;
					SummonBlocked = true;
					Log.LogInfo((object)"[EikthyrSummon] 플레이어 사망 → 소환 차단 시작");
				}
			}
			else if (_playerWasDead)
			{
				_playerWasDead = false;
				EikthyrSummonHelper.DespawnSummons("플레이어 리스폰");
				_unblockTime = Time.time + 3f;
				Log.LogInfo((object)"[EikthyrSummon] 플레이어 리스폰 → 3초 후 소환 재개 예정");
			}
			if (SummonBlocked && _unblockTime > 0f && Time.time >= _unblockTime)
			{
				SummonBlocked = false;
				_unblockTime = 0f;
				Log.LogInfo((object)"[EikthyrSummon] 소환 차단 해제 — 전투 재개");
			}
		}
	}
	public static class QueenConfig
	{
		public static ConfigEntry<bool> BroodHPEnabled { get; private set; }

		public static ConfigEntry<float> BroodHPStep { get; private set; }

		public static ConfigEntry<int> BroodHPCount { get; private set; }

		public static ConfigEntry<int> BroodHPLevel { get; private set; }

		public static ConfigEntry<float> BroodHPScale { get; private set; }

		public static ConfigEntry<string> BroodHPPrefab { get; private set; }

		public static ConfigEntry<string> BroodHPVFX { get; private set; }

		public static ConfigEntry<string> BroodHPMessage { get; private set; }

		public static ConfigEntry<bool> BroodTimerEnabled { get; private set; }

		public static ConfigEntry<float> BroodTimerInterval { get; private set; }

		public static ConfigEntry<int> BroodTimerCount { get; private set; }

		public static ConfigEntry<int> BroodTimerLevel { get; private set; }

		public static ConfigEntry<float> BroodTimerScale { get; private set; }

		public static ConfigEntry<string> BroodTimerPrefab { get; private set; }

		public static ConfigEntry<string> BroodTimerVFX { get; private set; }

		public static ConfigEntry<bool> BreathSummonEnabled { get; private set; }

		public static ConfigEntry<string> BreathSummonVFXTrigger { get; private set; }

		public static ConfigEntry<float> BreathSummonChance { get; private set; }

		public static ConfigEntry<string> BreathSummonPrefab { get; private set; }

		public static ConfigEntry<int> BreathSummonCount { get; private set; }

		public static ConfigEntry<int> BreathSummonLevel { get; private set; }

		public static ConfigEntry<float> BreathSummonScale { get; private set; }

		public static ConfigEntry<string> BreathSummonVFX { get; private set; }

		public static ConfigEntry<bool> BreathSummonDebugScan { get; private set; }

		public static ConfigEntry<bool> PoisonEnabled { get; private set; }

		public static ConfigEntry<float> PoisonMoveInterval { get; private set; }

		public static ConfigEntry<float> PoisonDuration { get; private set; }

		public static ConfigEntry<float> PoisonRadius { get; private set; }

		public static ConfigEntry<float> PoisonDamagePerTick { get; private set; }

		public static ConfigEntry<float> PoisonTickInterval { get; private set; }

		public static ConfigEntry<int> PoisonMaxZones { get; private set; }

		public static ConfigEntry<string> PoisonVFX { get; private set; }

		public static ConfigEntry<float> PoisonVFXScale { get; private set; }

		public static void Bind(ConfigFile cfg)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Expected O, but got Unknown
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Expected O, but got Unknown
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Expected O, but got Unknown
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Expected O, but got Unknown
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Expected O, but got Unknown
			//IL_027e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Expected O, but got Unknown
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Expected O, but got Unknown
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0324: Expected O, but got Unknown
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_036d: Expected O, but got Unknown
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Expected O, but got Unknown
			//IL_0403: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Expected O, but got Unknown
			//IL_044f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0459: Expected O, but got Unknown
			//IL_049a: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a4: Expected O, but got Unknown
			//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fb: Expected O, but got Unknown
			//IL_053a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0544: Expected O, but got Unknown
			//IL_057f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0589: Expected O, but got Unknown
			//IL_05c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ce: Expected O, but got Unknown
			//IL_061b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0625: Expected O, but got Unknown
			//IL_0667: Unknown result type (might be due to invalid IL or missing references)
			//IL_0671: Expected O, but got Unknown
			//IL_06b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bc: Expected O, but got Unknown
			//IL_0709: Unknown result type (might be due to invalid IL or missing references)
			//IL_0713: Expected O, but got Unknown
			//IL_0752: Unknown result type (might be due to invalid IL or missing references)
			//IL_075c: Expected O, but got Unknown
			//IL_079b: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a5: Expected O, but got Unknown
			//IL_07e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ee: Expected O, but got Unknown
			//IL_0829: Unknown result type (might be due to invalid IL or missing references)
			//IL_0833: Expected O, but got Unknown
			//IL_0880: Unknown result type (might be due to invalid IL or missing references)
			//IL_088a: Expected O, but got Unknown
			//IL_08cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d6: Expected O, but got Unknown
			//IL_0917: Unknown result type (might be due to invalid IL or missing references)
			//IL_0921: Expected O, but got Unknown
			//IL_096e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0978: Expected O, but got Unknown
			//IL_09b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c1: Expected O, but got Unknown
			//IL_0a00: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a0a: Expected O, but got Unknown
			PoisonEnabled = cfg.Bind<bool>("The Queen", "(Poison Field) Enabled", true, new ConfigDescription(LocalizationManager.Desc("Queen.PoisonField.Enabled"), (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 9000
				}
			}));
			PoisonMoveInterval = cfg.Bind<float>("The Queen", "(Poison Field) MoveInterval", 10f, new ConfigDescription(LocalizationManager.Desc("Queen.PoisonField.MoveInterval"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 120f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8990
				}
			}));
			PoisonDuration = cfg.Bind<float>("The Queen", "(Poison Field) Duration", 20f, new ConfigDescription(LocalizationManager.Desc("Queen.PoisonField.Duration"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 300f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8980
				}
			}));
			PoisonRadius = cfg.Bind<float>("The Queen", "(Poison Field) Radius", 6f, new ConfigDescription(LocalizationManager.Desc("Queen.PoisonField.Radius"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 50f), new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = 8970