Decompiled source of MagnificentMagicks v4.2.0

MagnificentMagicks.dll

Decompiled 2 months ago
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 BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("MagnificentMagicks")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MagnificentMagicks")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("21fd0ae0-12ac-4ca9-9492-972a7d3d8423")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace MagnificentMagicks;

[BepInPlugin("TheRonTron.MagnificentMagicks", "Magnificent Magicks", "4.2.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class MagnificentMagicks : BaseUnityPlugin
{
	public const string PluginGUID = "com.jotunn.StaffUpgrades";

	public ConfigEntry<int> Balls;

	public ConfigEntry<int> Shards;

	public ConfigEntry<bool> Bros;

	public ConfigEntry<int> Bombs;

	public ConfigEntry<int> Roots;

	public CustomStatusEffect AshMageSE;

	public void Awake()
	{
		GenerateConfig();
		Logger.ShowDate = true;
		Game.isModded = true;
		PrefabManager.OnVanillaPrefabsAvailable += delegate
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			Material prefab3 = Cache.GetPrefab<Material>("shieldstaffbulbs_mat");
			prefab3.SetOverrideTag("RenderType", "Fade");
			prefab3.color = Color.op_Implicit(new Vector4(0.5f, 0.5f, 0.5f, 0.5f));
			prefab3.renderQueue = 3000;
			MeshRenderer componentInChildren = PrefabManager.Instance.GetPrefab("StaffShield").GetComponentInChildren<MeshRenderer>();
			((Renderer)componentInChildren).sharedMaterials = (Material[])(object)new Material[2]
			{
				((Renderer)PrefabManager.Instance.GetPrefab("StaffShield").GetComponentInChildren<MeshRenderer>()).sharedMaterial,
				prefab3
			};
		};
		PrefabManager.OnPrefabsRegistered += delegate
		{
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024b: Expected O, but got Unknown
			//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0764: Unknown result type (might be due to invalid IL or missing references)
			//IL_0847: Unknown result type (might be due to invalid IL or missing references)
			//IL_0854: Unknown result type (might be due to invalid IL or missing references)
			//IL_0861: Unknown result type (might be due to invalid IL or missing references)
			//IL_086e: Unknown result type (might be due to invalid IL or missing references)
			//IL_087b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0888: Unknown result type (might be due to invalid IL or missing references)
			//IL_0895: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0929: Unknown result type (might be due to invalid IL or missing references)
			//IL_092e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0931: Unknown result type (might be due to invalid IL or missing references)
			//IL_0936: Unknown result type (might be due to invalid IL or missing references)
			//IL_093e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0945: Unknown result type (might be due to invalid IL or missing references)
			//IL_0951: Expected O, but got Unknown
			//IL_0e24: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e2b: Expected O, but got Unknown
			//IL_0e90: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e97: Expected O, but got Unknown
			//IL_0eea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ef1: Expected O, but got Unknown
			//IL_0f44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f4b: Expected O, but got Unknown
			//IL_0f9b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fa2: Expected O, but got Unknown
			//IL_0fae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fb5: Expected O, but got Unknown
			//IL_10c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_10d0: Expected O, but got Unknown
			//IL_1111: Unknown result type (might be due to invalid IL or missing references)
			//IL_1118: Expected O, but got Unknown
			//IL_1159: Unknown result type (might be due to invalid IL or missing references)
			//IL_1160: Expected O, but got Unknown
			//IL_11d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_11db: Expected O, but got Unknown
			//IL_11e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_11ee: Expected O, but got Unknown
			//IL_1293: Unknown result type (might be due to invalid IL or missing references)
			//IL_13d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1523: Unknown result type (might be due to invalid IL or missing references)
			//IL_169d: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0692: Unknown result type (might be due to invalid IL or missing references)
			//IL_0697: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cc: Unknown result type (might be due to invalid IL or missing references)
			PrefabManager.Instance.GetPrefab("HelmetPointyHat").GetComponent<ItemDrop>().m_itemData.m_shared.m_eitrRegenModifier = 0.1f;
			PrefabManager.Instance.GetPrefab("HelmetYule").GetComponent<ItemDrop>().m_itemData.m_shared.m_eitrRegenModifier = 0.1f;
			SE_Stats prefab = Cache.GetPrefab<SE_Stats>("SetEffect_MageArmor");
			((StatusEffect)prefab).m_icon = PrefabManager.Instance.GetPrefab("HelmetMage").GetComponent<ItemDrop>().m_itemData.m_shared.m_icons.ElementAt(0);
			prefab.m_eitrRegenMultiplier = 1.3f;
			prefab.m_raiseSkill = (SkillType)10;
			prefab.m_raiseSkillModifier = 0.15f;
			prefab.m_skillLevel = (SkillType)10;
			prefab.m_modifyAttackSkill = (SkillType)10;
			prefab.m_damageModifier = 1.15f;
			PrefabManager.Instance.GetPrefab("HelmetMage").GetComponent<ItemDrop>().m_itemData.m_shared.m_setName = "mage_armor";
			PrefabManager.Instance.GetPrefab("HelmetMage").GetComponent<ItemDrop>().m_itemData.m_shared.m_setStatusEffect = (StatusEffect)(object)prefab;
			PrefabManager.Instance.GetPrefab("ArmorMageChest").GetComponent<ItemDrop>().m_itemData.m_shared.m_setName = "mage_armor";
			PrefabManager.Instance.GetPrefab("ArmorMageChest").GetComponent<ItemDrop>().m_itemData.m_shared.m_setStatusEffect = (StatusEffect)(object)prefab;
			PrefabManager.Instance.GetPrefab("ArmorMageLegs").GetComponent<ItemDrop>().m_itemData.m_shared.m_setName = "mage_armor";
			PrefabManager.Instance.GetPrefab("ArmorMageLegs").GetComponent<ItemDrop>().m_itemData.m_shared.m_setStatusEffect = (StatusEffect)(object)prefab;
			SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>();
			((Object)val).name = "SetEffect_AshMageArmor";
			((StatusEffect)val).m_name = "$se_mageseteffect_name";
			((StatusEffect)val).m_icon = PrefabManager.Instance.GetPrefab("HelmetMage_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_icons.ElementAt(0);
			((StatusEffect)val).m_tooltip = "$se_mageseteffect_tooltip";
			val.m_eitrRegenMultiplier = 1.6f;
			val.m_raiseSkill = (SkillType)9;
			val.m_raiseSkillModifier = 0.15f;
			val.m_skillLevel = (SkillType)9;
			val.m_skillLevelModifier = 15f;
			val.m_modifyAttackSkill = (SkillType)9;
			val.m_damageModifier = 1.15f;
			CustomStatusEffect val2 = new CustomStatusEffect((StatusEffect)(object)val, false);
			ItemManager.Instance.AddStatusEffect(val2);
			PrefabManager.Instance.GetPrefab("HelmetMage_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_setName = "ashmage_armor";
			PrefabManager.Instance.GetPrefab("HelmetMage_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_setStatusEffect = val2.StatusEffect;
			PrefabManager.Instance.GetPrefab("ArmorMageChest_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_setName = "ashmage_armor";
			PrefabManager.Instance.GetPrefab("ArmorMageChest_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_setStatusEffect = val2.StatusEffect;
			PrefabManager.Instance.GetPrefab("ArmorMageLegs_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_setName = "ashmage_armor";
			PrefabManager.Instance.GetPrefab("ArmorMageLegs_Ashlands").GetComponent<ItemDrop>().m_itemData.m_shared.m_setStatusEffect = val2.StatusEffect;
			SharedData shared = PrefabManager.Instance.GetPrefab("StaffFireball").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack = shared.m_secondaryAttack;
			shared.m_attack.m_attackStartNoise = 10f;
			shared.m_aiAttackRange = 20f;
			shared.m_aiAttackRangeMin = 15f;
			shared.m_aiAttackInterval = 0f;
			shared.m_aiAttackMaxAngle = 15f;
			secondaryAttack.m_attackType = (AttackType)2;
			secondaryAttack.m_attackAnimation = "staff_fireball";
			secondaryAttack.m_attackChainLevels = 2;
			secondaryAttack.m_attackStamina = 0f;
			secondaryAttack.m_attackEitr = 35 * Balls.Value;
			secondaryAttack.m_speedFactor = 0.3f;
			secondaryAttack.m_speedFactorRotation = 0.3f;
			secondaryAttack.m_attackHitNoise = 0f;
			secondaryAttack.m_attackRange = 2f;
			secondaryAttack.m_attackHeight = 1.2f;
			secondaryAttack.m_attackOffset = 0.2f;
			secondaryAttack.m_attackProjectile = shared.m_attack.m_attackProjectile;
			secondaryAttack.m_projectileVel = 20f;
			secondaryAttack.m_projectileAccuracy = 4f;
			secondaryAttack.m_projectileAccuracyMin = 2f;
			secondaryAttack.m_launchAngle = -5f;
			secondaryAttack.m_projectiles = Balls.Value;
			SharedData shared2 = PrefabManager.Instance.GetPrefab("StaffIceShards").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack2 = shared2.m_secondaryAttack;
			shared2.m_attack.m_attackStartNoise = 10f;
			shared2.m_aiAttackRange = 15f;
			shared2.m_aiAttackRangeMin = 10f;
			shared2.m_aiAttackInterval = 0f;
			shared2.m_aiAttackMaxAngle = 15f;
			secondaryAttack2.m_attackType = (AttackType)2;
			secondaryAttack2.m_attackAnimation = "staff_rapidfire";
			secondaryAttack2.m_loopingAttack = true;
			secondaryAttack2.m_attackStamina = 0f;
			secondaryAttack2.m_attackEitr = 5f;
			secondaryAttack2.m_speedFactor = 0.5f;
			secondaryAttack2.m_speedFactorRotation = 1f;
			secondaryAttack2.m_attackHitNoise = 0f;
			secondaryAttack2.m_damageMultiplier = 1f / (float)Shards.Value;
			secondaryAttack2.m_attackRange = 2f;
			secondaryAttack2.m_attackHeight = 1.2f;
			secondaryAttack2.m_attackOffset = 0.2f;
			secondaryAttack2.m_raiseSkillAmount = 0.2f / (float)Shards.Value;
			secondaryAttack2.m_attackProjectile = shared2.m_attack.m_attackProjectile;
			secondaryAttack2.m_projectileVel = 30f;
			secondaryAttack2.m_projectileVelMin = 30f;
			secondaryAttack2.m_projectileAccuracy = 8f;
			secondaryAttack2.m_projectileAccuracyMin = 4f;
			secondaryAttack2.m_launchAngle = -4f;
			secondaryAttack2.m_projectiles = Shards.Value;
			secondaryAttack2.m_projectileBursts = 999;
			secondaryAttack2.m_burstInterval = 0.2f;
			secondaryAttack2.m_perBurstResourceUsage = true;
			secondaryAttack2.m_startEffect = shared2.m_attack.m_startEffect;
			secondaryAttack2.m_burstEffect = shared2.m_attack.m_burstEffect;
			GameObject prefab2 = PrefabManager.Instance.GetPrefab("fx_shield_start");
			ParticleSystem[] componentsInChildren = prefab2.GetComponentsInChildren<ParticleSystem>();
			foreach (ParticleSystem val3 in componentsInChildren)
			{
				if (((Object)((Component)val3).gameObject).name == "Landing Shockwave")
				{
					MainModule main = ((Component)val3).GetComponentInChildren<ParticleSystem>().main;
					((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1;
				}
				if (((Object)((Component)val3).gameObject).name == "Shockwave Pixels")
				{
					MainModule main2 = ((Component)val3).GetComponentInChildren<ParticleSystem>().main;
					((MainModule)(ref main2)).simulationSpace = (ParticleSystemSimulationSpace)1;
				}
			}
			SharedData shared3 = PrefabManager.Instance.GetPrefab("StaffShield").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack3 = shared3.m_secondaryAttack;
			shared3.m_name = "Staff of Sacrifice";
			shared3.m_attack.m_attackStartNoise = 10f;
			shared3.m_aiAttackRange = 25f;
			shared3.m_aiAttackRangeMin = 20f;
			shared3.m_aiAttackInterval = 60f;
			shared3.m_aiAttackMaxAngle = 15f;
			secondaryAttack3.m_attackType = (AttackType)2;
			secondaryAttack3.m_attackAnimation = "staff_summon";
			secondaryAttack3.m_attackStamina = 0f;
			secondaryAttack3.m_attackEitr = 70f;
			secondaryAttack3.m_attackHealthPercentage = 60f;
			secondaryAttack3.m_speedFactor = 0.3f;
			secondaryAttack3.m_speedFactorRotation = 0.3f;
			secondaryAttack3.m_attackHitNoise = 0f;
			secondaryAttack3.m_attackRange = 0f;
			secondaryAttack3.m_attackHeight = 1.8f;
			secondaryAttack3.m_attackOffset = 0.3f;
			secondaryAttack3.m_attackRayWidth = 0.3f;
			secondaryAttack3.m_attackProjectile = PrefabManager.Instance.GetPrefab("DvergerMistile_spawn");
			secondaryAttack3.m_projectileAccuracy = 2f;
			PrefabManager.Instance.GetPrefab("DvergerMistile_spawn").GetComponent<SpawnAbility>().m_minToSpawn = 3;
			Humanoid component = PrefabManager.Instance.GetPrefab("Mistile").GetComponent<Humanoid>();
			((Character)component).m_damageModifiers.m_blunt = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_slash = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_pierce = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_fire = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_frost = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_lightning = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_poison = (DamageModifier)4;
			((Character)component).m_damageModifiers.m_spirit = (DamageModifier)6;
			SharedData shared4 = PrefabManager.Instance.GetPrefab("Mistile_kamikaze").GetComponent<ItemDrop>().m_itemData.m_shared;
			shared4.m_damages.m_damage = 120f;
			shared4.m_damages.m_blunt = 0f;
			shared4.m_damages.m_spirit = 30f;
			SpawnAbility component2 = PrefabManager.Instance.GetPrefab("staff_skeleton_spawn").GetComponent<SpawnAbility>();
			component2.m_setMaxInstancesFromWeaponLevel = Bros.Value;
			component2.m_levelUpSettings.Add(new LevelUpSettings
			{
				m_skill = (SkillType)10,
				m_skillLevel = 100,
				m_setLevel = 1,
				m_maxSpawns = 6
			});
			Transform child = PrefabManager.Instance.GetPrefab("Skeleton_Friendly").GetComponentInChildren<Transform>().GetChild(1)
				.GetChild(0)
				.GetChild(0)
				.GetChild(0)
				.GetChild(2)
				.GetChild(0)
				.GetChild(0)
				.GetChild(1)
				.GetChild(0)
				.GetChild(1);
			child.Rotate(-32f, -90f, 8f);
			child.Translate(0f, 0.035f, 0.018f);
			MonsterAI component3 = PrefabManager.Instance.GetPrefab("Skeleton_Friendly").GetComponent<MonsterAI>();
			component3.m_consumeItems = new List<ItemDrop>
			{
				PrefabManager.Instance.GetPrefab("BoneFragments").GetComponent<ItemDrop>(),
				PrefabManager.Instance.GetPrefab("Entrails").GetComponent<ItemDrop>()
			};
			component3.m_consumeSearchRange = 10f;
			PrefabManager.Instance.GetPrefab("Skeleton_Friendly").GetComponent<Tameable>().m_fedDuration = 60f;
			PrefabManager.Instance.GetPrefab("skeleton_sword").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackInterval = 0f;
			PrefabManager.Instance.GetPrefab("skeleton_sword").GetComponent<ItemDrop>().m_itemData.m_shared.m_attack.m_attackRange = 1.4f;
			PrefabManager.Instance.GetPrefab("skeleton_sword2").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackInterval = 0f;
			PrefabManager.Instance.GetPrefab("skeleton_sword2").GetComponent<ItemDrop>().m_itemData.m_shared.m_attack.m_attackRange = 1.4f;
			PrefabManager.Instance.GetPrefab("draugr_sword").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackInterval = 0f;
			PrefabManager.Instance.GetPrefab("draugr_sword").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackRange = 1.8f;
			PrefabManager.Instance.GetPrefab("draugr_axe").GetComponent<ItemDrop>().m_itemData.m_shared.m_attack.m_attackRange = 1.8f;
			PrefabManager.Instance.GetPrefab("draugr_axe").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackInterval = 0f;
			PrefabManager.Instance.GetPrefab("draugr_axe").GetComponent<ItemDrop>().m_itemData.m_shared.m_attack.m_attackRange = 1.4f;
			PrefabManager.Instance.GetPrefab("skeleton_mace").GetComponent<ItemDrop>().m_itemData.m_shared.m_attack.m_attackRange = 2f;
			PrefabManager.Instance.GetPrefab("skeleton_mace").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackInterval = 0f;
			PrefabManager.Instance.GetPrefab("skeleton_mace").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackRange = 1.6f;
			PrefabManager.Instance.GetPrefab("skeleton_sword_hildir").GetComponent<ItemDrop>().m_itemData.m_shared.m_attack.m_attackRange = 2.6f;
			PrefabManager.Instance.GetPrefab("skeleton_sword_hildir").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackInterval = 0f;
			PrefabManager.Instance.GetPrefab("skeleton_sword_hildir").GetComponent<ItemDrop>().m_itemData.m_shared.m_aiAttackRange = 2.2f;
			Humanoid component4 = PrefabManager.Instance.GetPrefab("Skeleton_Friendly").GetComponent<Humanoid>();
			component4.m_defaultItems = (GameObject[])(object)new GameObject[0];
			component4.m_randomWeapon = (GameObject[])(object)new GameObject[8]
			{
				PrefabManager.Instance.GetPrefab("skeleton_sword2"),
				PrefabManager.Instance.GetPrefab("skeleton_sword2"),
				PrefabManager.Instance.GetPrefab("draugr_sword"),
				PrefabManager.Instance.GetPrefab("draugr_sword"),
				PrefabManager.Instance.GetPrefab("draugr_axe"),
				PrefabManager.Instance.GetPrefab("draugr_axe"),
				PrefabManager.Instance.GetPrefab("skeleton_mace"),
				PrefabManager.Instance.GetPrefab("skeleton_sword_hildir")
			};
			component4.m_randomArmor = (GameObject[])(object)new GameObject[3]
			{
				PrefabManager.Instance.GetPrefab("HelmetBronze"),
				PrefabManager.Instance.GetPrefab("HelmetIron"),
				PrefabManager.Instance.GetPrefab("HelmetYule")
			};
			component4.m_randomShield.SetValue(PrefabManager.Instance.GetPrefab("ShieldBanded"), 0);
			component4.m_randomShield.SetValue(PrefabManager.Instance.GetPrefab("ShieldIronBuckler"), 2);
			component4.m_randomShield.SetValue(PrefabManager.Instance.GetPrefab("ShieldSilver"), 3);
			ItemSet val4 = new ItemSet();
			val4.m_name = "DeadBronze";
			val4.m_items = (GameObject[])(object)new GameObject[4]
			{
				PrefabManager.Instance.GetPrefab("HelmetBronze"),
				PrefabManager.Instance.GetPrefab("CapeTrollHide"),
				PrefabManager.Instance.GetPrefab("BeltStrength"),
				PrefabManager.Instance.GetPrefab("ArmorBronzeLegs")
			};
			ItemSet val5 = val4;
			val4 = new ItemSet();
			val4.m_name = "DeadIron";
			val4.m_items = (GameObject[])(object)new GameObject[3]
			{
				PrefabManager.Instance.GetPrefab("HelmetIron"),
				PrefabManager.Instance.GetPrefab("ArmorIronChest"),
				PrefabManager.Instance.GetPrefab("ArmorIronLegs")
			};
			ItemSet val6 = val4;
			val4 = new ItemSet();
			val4.m_name = "DeadSnow";
			val4.m_items = (GameObject[])(object)new GameObject[3]
			{
				PrefabManager.Instance.GetPrefab("HelmetYule"),
				PrefabManager.Instance.GetPrefab("ArmorWolfChest"),
				PrefabManager.Instance.GetPrefab("ArmorWolfLegs")
			};
			ItemSet val7 = val4;
			val4 = new ItemSet();
			val4.m_name = "No Pants!";
			val4.m_items = (GameObject[])(object)new GameObject[1] { PrefabManager.Instance.GetPrefab("ArmorBronzeLegs") };
			ItemSet val8 = val4;
			component4.m_randomSets = (ItemSet[])(object)new ItemSet[4] { val5, val6, val7, val8 };
			CreatureConfig val9 = new CreatureConfig();
			CustomCreature val10 = new CustomCreature("SkeletonArcher_Friendly", "Skeleton_Friendly", val9);
			Humanoid component5 = val10.Prefab.GetComponent<Humanoid>();
			((Character)component5).m_name = "$enemy_skeleton_summoned";
			component5.m_defaultItems = (GameObject[])(object)new GameObject[0];
			component5.m_randomWeapon = (GameObject[])(object)new GameObject[5]
			{
				PrefabManager.Instance.GetPrefab("skeleton_bow2"),
				PrefabManager.Instance.GetPrefab("skeleton_bow2"),
				PrefabManager.Instance.GetPrefab("skeleton_bow2"),
				PrefabManager.Instance.GetPrefab("skeleton_bow2"),
				PrefabManager.Instance.GetPrefab("draugr_bow")
			};
			component5.m_randomArmor = (GameObject[])(object)new GameObject[6]
			{
				PrefabManager.Instance.GetPrefab("HelmetLeather"),
				PrefabManager.Instance.GetPrefab("HelmetBronze"),
				PrefabManager.Instance.GetPrefab("HelmetYule"),
				PrefabManager.Instance.GetPrefab("CapeDeerHide"),
				PrefabManager.Instance.GetPrefab("CapeTrollHide"),
				PrefabManager.Instance.GetPrefab("ArmorBronzeLegs")
			};
			component5.m_randomShield = (GameObject[])(object)new GameObject[0];
			val4 = new ItemSet();
			val4.m_name = "DeadLeather";
			val4.m_items = (GameObject[])(object)new GameObject[2]
			{
				PrefabManager.Instance.GetPrefab("CapeDeerHide"),
				PrefabManager.Instance.GetPrefab("HelmetLeather")
			};
			ItemSet val11 = val4;
			val4 = new ItemSet();
			val4.m_name = "DeadTroll";
			val4.m_items = (GameObject[])(object)new GameObject[2]
			{
				PrefabManager.Instance.GetPrefab("CapeTrollHide"),
				PrefabManager.Instance.GetPrefab("HelmetLeather")
			};
			ItemSet val12 = val4;
			val4 = new ItemSet();
			val4.m_name = "DeadElf";
			val4.m_items = (GameObject[])(object)new GameObject[2]
			{
				PrefabManager.Instance.GetPrefab("HelmetYule"),
				PrefabManager.Instance.GetPrefab("CapeWolf")
			};
			ItemSet val13 = val4;
			component5.m_randomSets = (ItemSet[])(object)new ItemSet[5] { val11, val12, val5, val13, val8 };
			CreatureManager.Instance.AddCreature(val10);
			ItemConfig val14 = new ItemConfig();
			CustomItem val15 = new CustomItem("staff_skeletonarcher_spawn", "staff_skeleton_spawn", val14);
			ItemManager.Instance.AddItem(val15);
			SpawnAbility component6 = val15.ItemPrefab.GetComponent<SpawnAbility>();
			component6.m_spawnPrefab.SetValue(PrefabManager.Instance.GetPrefab("SkeletonArcher_Friendly"), 0);
			SharedData shared5 = PrefabManager.Instance.GetPrefab("StaffSkeleton").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack4 = shared5.m_secondaryAttack;
			shared5.m_attack.m_attackStartNoise = 10f;
			shared5.m_aiAttackRange = 30f;
			shared5.m_aiAttackRangeMin = 25f;
			shared5.m_aiAttackInterval = 60f;
			shared5.m_aiAttackMaxAngle = 15f;
			secondaryAttack4.m_attackType = (AttackType)2;
			secondaryAttack4.m_attackAnimation = "staff_summon";
			secondaryAttack4.m_hitTerrain = false;
			secondaryAttack4.m_attackStamina = 0f;
			secondaryAttack4.m_attackEitr = 100f;
			secondaryAttack4.m_attackHealthPercentage = 40f;
			secondaryAttack4.m_speedFactor = 0.3f;
			secondaryAttack4.m_speedFactorRotation = 0.3f;
			secondaryAttack4.m_attackHitNoise = 0f;
			secondaryAttack4.m_attackRange = 0f;
			secondaryAttack4.m_attackHeight = 0f;
			secondaryAttack4.m_attackProjectile = PrefabManager.Instance.GetPrefab("staff_skeletonarcher_spawn");
			secondaryAttack4.m_projectileVel = 0f;
			secondaryAttack4.m_projectileVelMin = 0f;
			secondaryAttack4.m_projectileAccuracy = 1f;
			secondaryAttack4.m_projectileAccuracyMin = 1f;
			secondaryAttack4.m_startEffect = shared5.m_attack.m_startEffect;
			SharedData shared6 = PrefabManager.Instance.GetPrefab("StaffClusterbomb").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack5 = shared6.m_secondaryAttack;
			shared6.m_attack.m_attackStartNoise = 10f;
			shared6.m_aiAttackRange = 30f;
			shared6.m_aiAttackRangeMin = 25f;
			shared6.m_aiAttackInterval = 60f;
			shared6.m_aiAttackMaxAngle = 15f;
			secondaryAttack5.m_attackType = (AttackType)2;
			secondaryAttack5.m_attackAnimation = "staff_fireball";
			secondaryAttack5.m_attackChainLevels = 2;
			secondaryAttack5.m_attackStamina = 0f;
			secondaryAttack5.m_attackEitr = 30 * Bombs.Value;
			secondaryAttack5.m_speedFactor = 0.3f;
			secondaryAttack5.m_speedFactorRotation = 0.3f;
			secondaryAttack5.m_attackHitNoise = 0f;
			secondaryAttack5.m_attackRange = 2f;
			secondaryAttack5.m_attackHeight = 1.2f;
			secondaryAttack5.m_attackOffset = 0.2f;
			secondaryAttack5.m_raiseSkillAmount = 0.1f;
			secondaryAttack5.m_attackProjectile = shared6.m_attack.m_attackProjectile;
			secondaryAttack5.m_projectileVel = 20f;
			secondaryAttack5.m_projectileAccuracy = 8f;
			secondaryAttack5.m_projectileAccuracyMin = 2f;
			secondaryAttack5.m_launchAngle = -5f;
			secondaryAttack5.m_projectiles = Bombs.Value;
			SharedData shared7 = PrefabManager.Instance.GetPrefab("StaffLightning").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack6 = shared7.m_secondaryAttack;
			shared7.m_attack.m_attackStartNoise = 10f;
			shared7.m_aiAttackRange = 10f;
			shared7.m_aiAttackRangeMin = 5f;
			shared7.m_aiAttackInterval = 2f;
			shared7.m_aiAttackMaxAngle = 15f;
			secondaryAttack6.m_attackType = (AttackType)2;
			secondaryAttack6.m_attackAnimation = "staff_lightningshot";
			secondaryAttack6.m_attackStamina = 0f;
			secondaryAttack6.m_attackEitr = 25f;
			secondaryAttack6.m_speedFactor = 0.3f;
			secondaryAttack6.m_speedFactorRotation = 0f;
			secondaryAttack6.m_attackStartNoise = 15f;
			secondaryAttack6.m_attackHitNoise = 8f;
			secondaryAttack6.m_recoilPushback = 80f;
			secondaryAttack6.m_attackRange = 1f;
			secondaryAttack6.m_attackHeight = 1.2f;
			secondaryAttack6.m_attackOffset = 0.2f;
			secondaryAttack6.m_requiresReload = true;
			secondaryAttack6.m_reloadAnimation = "recharge_lightningstaff";
			secondaryAttack6.m_reloadTime = 3.8f;
			secondaryAttack6.m_reloadEitrDrain = 25f;
			secondaryAttack6.m_attackProjectile = shared7.m_attack.m_attackProjectile;
			secondaryAttack6.m_projectileVel = 200f;
			secondaryAttack6.m_projectileVelMin = 0f;
			secondaryAttack6.m_projectileAccuracy = 5f;
			secondaryAttack6.m_projectileAccuracyMin = 0f;
			secondaryAttack6.m_launchAngle = -1f;
			secondaryAttack6.m_projectiles = 12;
			SharedData shared8 = PrefabManager.Instance.GetPrefab("StaffGreenRoots").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack7 = shared8.m_secondaryAttack;
			shared8.m_attack.m_attackStartNoise = 10f;
			shared8.m_aiAttackRange = 25f;
			shared8.m_aiAttackRangeMin = 20f;
			shared8.m_aiAttackInterval = 0f;
			shared8.m_aiAttackMaxAngle = 15f;
			secondaryAttack7.m_attackType = (AttackType)2;
			secondaryAttack7.m_attackAnimation = "staff_fireball";
			secondaryAttack7.m_attackChainLevels = 2;
			secondaryAttack7.m_attackStamina = 0f;
			secondaryAttack7.m_attackEitr = 55 * Roots.Value;
			secondaryAttack7.m_speedFactor = 0.3f;
			secondaryAttack7.m_speedFactorRotation = 0.3f;
			secondaryAttack7.m_attackHitNoise = 0f;
			secondaryAttack7.m_attackRange = 2f;
			secondaryAttack7.m_attackHeight = 1.2f;
			secondaryAttack7.m_attackOffset = 0.2f;
			secondaryAttack7.m_attackProjectile = shared8.m_attack.m_attackProjectile;
			secondaryAttack7.m_projectileVel = 20f;
			secondaryAttack7.m_projectileAccuracy = 8f;
			secondaryAttack7.m_projectileAccuracyMin = 4f;
			secondaryAttack7.m_launchAngle = -5f;
			secondaryAttack7.m_projectiles = Roots.Value;
			SharedData shared9 = PrefabManager.Instance.GetPrefab("StaffRedTroll").GetComponent<ItemDrop>().m_itemData.m_shared;
			Attack secondaryAttack8 = shared9.m_secondaryAttack;
			shared9.m_attack.m_attackStartNoise = 10f;
			shared9.m_aiAttackRange = 30f;
			shared9.m_aiAttackRangeMin = 25f;
			shared9.m_aiAttackInterval = 300f;
			shared9.m_aiAttackMaxAngle = 15f;
			secondaryAttack8.m_attackType = (AttackType)2;
			secondaryAttack8.m_attackAnimation = "staff_trollsummon";
			secondaryAttack8.m_hitTerrain = false;
			secondaryAttack8.m_attackStamina = 0f;
			secondaryAttack8.m_attackEitr = 240f;
			secondaryAttack8.m_attackHealthPercentage = 84f;
			secondaryAttack8.m_speedFactor = 0.3f;
			secondaryAttack8.m_speedFactorRotation = 0.3f;
			secondaryAttack8.m_attackHitNoise = 0f;
			secondaryAttack8.m_attackRange = 15f;
			secondaryAttack8.m_attackHeight = 0f;
			secondaryAttack8.m_cantUseInDungeon = true;
			secondaryAttack8.m_attackProjectile = shared9.m_attack.m_attackProjectile;
			secondaryAttack8.m_projectileVel = 0f;
			secondaryAttack8.m_projectileVelMin = 0f;
			secondaryAttack8.m_projectileAccuracy = 16f;
			secondaryAttack8.m_projectileAccuracyMin = 12f;
			secondaryAttack8.m_projectiles = 2;
			secondaryAttack8.m_startEffect = shared9.m_attack.m_startEffect;
			PrefabManager.Instance.GetPrefab("staff_redtroll_spawn").GetComponent<SpawnAbility>().m_spawnRadius = 8f;
		};
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
	}

	public void GenerateConfig()
	{
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Expected O, but got Unknown
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Expected O, but got Unknown
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Expected O, but got Unknown
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Expected O, but got Unknown
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Expected O, but got Unknown
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Expected O, but got Unknown
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Expected O, but got Unknown
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Expected O, but got Unknown
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Expected O, but got Unknown
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Expected O, but got Unknown
		((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
		Balls = ((BaseUnityPlugin)this).Config.Bind<int>("Staff of Embers", "Amount of Fireballs", 2, new ConfigDescription("Designates Amount of Fireballs", (AcceptableValueBase)null, new object[2]
		{
			new AcceptableValueRange<int>(1, 100),
			(object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			}
		}));
		Shards = ((BaseUnityPlugin)this).Config.Bind<int>("Staff of Frost", "Strength of Blizzard", 8, new ConfigDescription("Designates Number of Iceshards", (AcceptableValueBase)null, new object[2]
		{
			new AcceptableValueRange<int>(1, 100),
			(object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			}
		}));
		Bros = ((BaseUnityPlugin)this).Config.Bind<bool>("DeadRaiser", "Lock Spawn Amount to Staff Level", true, new ConfigDescription("Switch Amount of SkeleBros between Item Quality or BloodMagic Skill", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes
		{
			IsAdminOnly = true
		} }));
		Bombs = ((BaseUnityPlugin)this).Config.Bind<int>("Staff of Fracturing", "Amount of Firebombs", 3, new ConfigDescription("Designates the number of Firebombs cast", (AcceptableValueBase)null, new object[2]
		{
			new AcceptableValueRange<int>(1, 100),
			(object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			}
		}));
		Roots = ((BaseUnityPlugin)this).Config.Bind<int>("Staff of the Wild", "Amount of Roots", 2, new ConfigDescription("Designates the number of Roots Summoned", (AcceptableValueBase)null, new object[2]
		{
			new AcceptableValueRange<int>(1, 100),
			(object)new ConfigurationManagerAttributes
			{
				IsAdminOnly = true
			}
		}));
		SynchronizationManager.OnConfigurationSynchronized += delegate(object obj, ConfigurationSynchronizationEventArgs attr)
		{
			if (attr.InitialSynchronization)
			{
				Logger.LogMessage((object)"Initial Config sync event received");
			}
			else
			{
				Logger.LogMessage((object)"Config sync event received");
			}
		};
	}
}