Decompiled source of CrusadersEquipment v3.0.7

plugins/CrusadersEquipment.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using EffectSourceConditions;
using HarmonyLib;
using HolyDamageManager;
using ImpendingDoom;
using NodeCanvas.BehaviourTrees;
using NodeCanvas.DialogueTrees;
using NodeCanvas.Framework;
using NodeCanvas.Tasks.Actions;
using SideLoader;
using SideLoader.Model;
using TinyHelper;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace CrusadersEquipment;

public class Lingering
{
	public const string ItemName = "Lingering";

	public const int EnchantID = 2502517;

	public static void MakeEnchant()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		SL_EnchantmentRecipe val = new SL_EnchantmentRecipe();
		val.Name = "Lingering";
		val.Description = "Increases the duration of weapon infusions by 10 seconds.";
		val.EnchantmentID = 2502517;
		val.IncenseItemID = 6000250;
		val.PillarDatas = (PillarData[])(object)new PillarData[2]
		{
			new PillarData
			{
				Direction = (Directions)2,
				IsFar = false
			},
			new PillarData
			{
				Direction = (Directions)3,
				IsFar = true
			}
		};
		val.CompatibleEquipment = new EquipmentData
		{
			RequiredTag = "Weapon",
			Equipments = (IngredientData[])(object)new IngredientData[1]
			{
				new IngredientData
				{
					SelectorType = (IngredientTypes)0,
					SelectorValue = TinyTagManager.GetOrMakeTag("LingeringEligible").TagName
				}
			}
		};
		val.TimeOfDay = (Vector2[])(object)new Vector2[0];
		val.Areas = (AreaEnum[])(object)new AreaEnum[1] { (AreaEnum)506 };
		val.Temperature = (TemperatureSteps[])(object)new TemperatureSteps[0];
		val.WindAltarActivated = false;
		val.IsEnchantingGuildRecipe = false;
		val.EnchantTime = 5f;
		val.Effects = (SL_EffectTransform[])(object)new SL_EffectTransform[0];
		val.AddedDamages = (AdditionalDamage[])(object)new AdditionalDamage[0];
		val.StatModifications = (StatModification[])(object)new StatModification[0];
		val.FlatDamageAdded = (SL_Damage[])(object)new SL_Damage[0];
		val.DamageModifierBonus = (SL_Damage[])(object)new SL_Damage[0];
		val.DamageResistanceBonus = (SL_Damage[])(object)new SL_Damage[0];
		val.HealthAbsorbRatio = 0f;
		val.ManaAbsorbRatio = 0f;
		val.StaminaAbsorbRatio = 0f;
		val.Indestructible = false;
		val.TrackDamageRatio = -1f;
		val.GlobalStatusResistance = 0f;
		SL_EnchantmentRecipe val2 = val;
		((ContentTemplate)val2).ApplyTemplate();
	}
}
public class Doomsayer
{
	public const string ItemName = "Doomsayer";

	public const int EnchantID = 2502515;

	public static void MakeEnchant()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		SL_EnchantmentRecipe val = new SL_EnchantmentRecipe();
		val.Name = "Doomsayer";
		val.Description = "Has a small chance to inflict and spread Impending Doom among your foes.";
		val.EnchantmentID = 2502515;
		val.IncenseItemID = 6000230;
		val.PillarDatas = (PillarData[])(object)new PillarData[2]
		{
			new PillarData
			{
				Direction = (Directions)0,
				IsFar = false
			},
			new PillarData
			{
				Direction = (Directions)1,
				IsFar = false
			}
		};
		val.CompatibleEquipment = new EquipmentData
		{
			RequiredTag = "Weapon",
			Equipments = (IngredientData[])(object)new IngredientData[1]
			{
				new IngredientData
				{
					SelectorType = (IngredientTypes)0,
					SelectorValue = TinyTagManager.GetOrMakeTag("Holy").TagName
				}
			}
		};
		val.TimeOfDay = (Vector2[])(object)new Vector2[0];
		val.Areas = (AreaEnum[])(object)new AreaEnum[1] { (AreaEnum)207 };
		val.Temperature = (TemperatureSteps[])(object)new TemperatureSteps[0];
		val.WindAltarActivated = false;
		val.IsEnchantingGuildRecipe = false;
		val.EnchantTime = 5f;
		val.Effects = (SL_EffectTransform[])(object)new SL_EffectTransform[0];
		val.AddedDamages = (AdditionalDamage[])(object)new AdditionalDamage[0];
		val.StatModifications = (StatModification[])(object)new StatModification[0];
		val.FlatDamageAdded = (SL_Damage[])(object)new SL_Damage[0];
		val.DamageModifierBonus = (SL_Damage[])(object)new SL_Damage[0];
		val.DamageResistanceBonus = (SL_Damage[])(object)new SL_Damage[0];
		val.HealthAbsorbRatio = 0f;
		val.ManaAbsorbRatio = 0f;
		val.StaminaAbsorbRatio = 0f;
		val.Indestructible = false;
		val.TrackDamageRatio = -1f;
		val.GlobalStatusResistance = 0f;
		SL_EnchantmentRecipe val2 = val;
		((ContentTemplate)val2).ApplyTemplate();
	}

	public static void MakeEnchantEffect()
	{
		Enchantment enchantmentPrefab = ResourcesPrefabManager.Instance.GetEnchantmentPrefab(2502515);
		StatusEffect statusEffectPrefab = ResourcesPrefabManager.Instance.GetStatusEffectPrefab("ImpendingDoom");
		if (statusEffectPrefab != null)
		{
			AddThenSpreadStatus val = ((Component)TinyGameObjectManager.GetOrMake(((Component)enchantmentPrefab).transform, "HitEffects", true, true)).gameObject.AddComponent<AddThenSpreadStatus>();
			((AddStatusEffect)val).Status = statusEffectPrefab;
			val.Range = 3f;
			((AddStatusEffect)val).BaseChancesToContract = 20;
		}
		Console.WriteLine("created doomsayer enchant");
	}
}
public class AdamantineIngot
{
	public const string SubfolderName = "AdamantineIngot";

	public const string ItemName = "Puresteel Ingot";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		SL_Item val = new SL_Item
		{
			Name = "Puresteel Ingot",
			Target_ItemID = 6600222,
			New_ItemID = 2501040,
			EffectBehaviour = (EditBehaviours)1,
			Description = "A sizable ignot made of puresteel.",
			SLPackName = CrusadersEquipment.ModFolderName,
			SubfolderName = "AdamantineIngot"
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(val.New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Expected O, but got Unknown
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Expected O, but got Unknown
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "AdamantineIngot".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501040
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6200010
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6000170
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6400070
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6400070
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Puresteel Ingot",
			Target_ItemID = 5700024,
			New_ItemID = 2501041,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class RangersHood
{
	public const string SubfolderName = "RangersHood";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Ranger's Hood";
		((SL_Item)val).Target_ItemID = 3000133;
		((SL_Item)val).New_ItemID = 2501046;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 250;
		((SL_ItemStats)val2).RawWeight = 1f;
		((SL_ItemStats)val2).MaxDurability = 300;
		val2.Damage_Resistance = new float[9] { 8f, 0f, 20f, 0f, 20f, 20f, 0f, 0f, 0f };
		val2.Impact_Resistance = 3f;
		val2.Damage_Protection = 0f;
		val2.Damage_Bonus = HolyDamageManager.GetHolyDamageBonusArray(10f);
		val2.Stamina_Use_Penalty = 0f;
		val2.Mana_Use_Modifier = 0f;
		val2.Movement_Penalty = 0f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 5f;
		val2.Cold_Protection = 5f;
		val2.Corruption_Protection = 0f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		val.VisualDetectabilityAdd = -15f;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "RangersHood";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "RangersHood".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501046
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3000063
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6600070
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Ranger's Hood",
			Target_ItemID = 5700024,
			New_ItemID = 2501047,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class FaraamHelmet
{
	public const string SubfolderName = "FaraamHelmet";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Armor val = new SL_Armor();
		((SL_Item)val).Name = "Faraam Helmet";
		((SL_Item)val).Target_ItemID = 3000133;
		((SL_Item)val).New_ItemID = 2501045;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 1000;
		((SL_ItemStats)val2).RawWeight = 8f;
		((SL_ItemStats)val2).MaxDurability = 300;
		val2.Damage_Resistance = new float[9] { 15f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 10f;
		val2.Damage_Protection = 3f;
		val2.BarrierProtection = 3f;
		val2.Stamina_Use_Penalty = 4f;
		val2.Mana_Use_Modifier = 15f;
		val2.Movement_Penalty = 9f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 0f;
		val2.Cold_Protection = 0f;
		val2.Corruption_Protection = 5f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "FaraamHelmet";
		val.Class = (ArmorClass)3;
		SL_Armor val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}
}
public class FaraamLongsword
{
	public const string SubfolderName = "FaraamLongsword";

	public const string ItemName = "Faraam Longsword";

	public static Item MakeItem()
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Expected O, but got Unknown
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Expected O, but got Unknown
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Expected O, but got Unknown
		//IL_0169: Unknown result type (might be due to invalid IL or missing references)
		//IL_016e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Unknown result type (might be due to invalid IL or missing references)
		//IL_019f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b3: Expected O, but got Unknown
		//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_0207: Unknown result type (might be due to invalid IL or missing references)
		//IL_020d: Expected O, but got Unknown
		//IL_021a: Unknown result type (might be due to invalid IL or missing references)
		//IL_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0224: Unknown result type (might be due to invalid IL or missing references)
		//IL_022e: Expected O, but got Unknown
		float[] array = new float[4] { 5.5f, 35f, 0.8f, 57f };
		SL_Weapon val = new SL_Weapon();
		((SL_Item)val).Name = "Faraam Longsword";
		((SL_Item)val).Target_ItemID = 2000010;
		((SL_Item)val).New_ItemID = 2501044;
		((SL_Item)val).Description = "";
		((SL_Item)val).Tags = TinyTagManager.GetOrMakeTags(new string[4] { "Bastard", "Blade", "Weapon", "Item" });
		((SL_Item)val).StatsHolder = (SL_ItemStats)new SL_WeaponStats
		{
			BaseValue = 2000,
			RawWeight = 9f,
			MaxDurability = 750,
			AttackSpeed = array[2],
			BaseDamage = new List<SL_Damage>
			{
				new SL_Damage
				{
					Damage = array[3],
					Type = (Types)0
				}
			},
			Impact = array[1],
			AutoGenerateAttackData = true,
			StamCost = array[0]
		};
		SL_EffectTransform[] array2 = new SL_EffectTransform[1];
		SL_EffectTransform val2 = new SL_EffectTransform();
		val2.TransformName = "HitEffects";
		val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
		array2[0] = val2;
		((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array2;
		val.SwingSound = (SwingSoundWeapon)3;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "FaraamLongsword";
		((SL_Item)val).ItemVisuals = new SL_ItemVisual
		{
			Prefab_Name = "faraam_longsword_Prefab",
			Prefab_AssetBundle = "faraam_longsword",
			Prefab_SLPack = CrusadersEquipment.ModFolderName,
			PositionOffset = new Vector3(-0.03f, 0f, 0f)
		};
		SL_Weapon val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
		AffectStat val4 = ((Component)TinyGameObjectManager.GetOrMake(((Component)itemPrefab).transform, "Effects", true, true)).gameObject.AddComponent<AffectStat>();
		TagSourceSelector[] tags = (TagSourceSelector[])(object)new TagSourceSelector[1]
		{
			new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit("359")))
		};
		val4.AffectedStat = new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit("96")));
		val4.Tags = tags;
		val4.IsModifier = true;
		val4.Value = 10f;
		return itemPrefab;
	}
}
public class HeavyPlateArmor
{
	public const string SubfolderName = "HeavyPlateArmor";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Heavy Plate Armor";
		((SL_Item)val).Target_ItemID = 3100003;
		((SL_Item)val).New_ItemID = 2502514;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "Heavy armor that adds weight to your weapon swings, passed down by your ancestors.";
		((SL_Item)val).Tags = TinyTagManager.GetOrMakeTags(new string[1] { "Armor" });
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 700;
		((SL_ItemStats)val2).RawWeight = 18f;
		((SL_ItemStats)val2).MaxDurability = 530;
		val2.Damage_Resistance = new float[9] { 28f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Damage_Bonus = new float[9] { 5f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 26f;
		val2.Impact_Bonus = 5f;
		val2.Damage_Protection = 5f;
		val2.Stamina_Use_Penalty = 6f;
		val2.Mana_Use_Modifier = 0f;
		val2.Movement_Penalty = 10f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 0f;
		val2.Cold_Protection = -5f;
		val2.Corruption_Protection = 0f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "HeavyPlateArmor";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		TinyItemManager.SetLegacyResult(3100003, 2502514);
		TinyItemManager.AddEnchantingOption(2502514, 56);
		return ResourcesPrefabManager.Instance.GetItemPrefab(2502514);
	}
}
public class CorruptedLongsword
{
	public const string SubfolderName = "CorruptedLongsword";

	public const string ItemName = "Corrupted Longsword";

	public static Item MakeItem()
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Expected O, but got Unknown
		//IL_00f0: 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_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Expected O, but got Unknown
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: Expected O, but got Unknown
		//IL_0193: Unknown result type (might be due to invalid IL or missing references)
		//IL_0198: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01dd: Expected O, but got Unknown
		//IL_0227: Unknown result type (might be due to invalid IL or missing references)
		//IL_022c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0231: Unknown result type (might be due to invalid IL or missing references)
		//IL_0237: Expected O, but got Unknown
		//IL_0244: Unknown result type (might be due to invalid IL or missing references)
		//IL_0249: Unknown result type (might be due to invalid IL or missing references)
		//IL_024e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0258: Expected O, but got Unknown
		float[] array = new float[4] { 6f, 35f, 0.8f, 57f };
		SL_Weapon val = new SL_Weapon();
		((SL_Item)val).Name = "Corrupted Longsword";
		((SL_Item)val).Target_ItemID = 2000010;
		((SL_Item)val).New_ItemID = 2501026;
		((SL_Item)val).Description = "";
		((SL_Item)val).Tags = TinyTagManager.GetOrMakeTags(new string[5] { "Bastard", "Blade", "Weapon", "Item", "LingeringEligible" });
		((SL_Item)val).StatsHolder = (SL_ItemStats)new SL_WeaponStats
		{
			BaseValue = 2000,
			RawWeight = 9f,
			MaxDurability = 750,
			AttackSpeed = array[2],
			BaseDamage = new List<SL_Damage>
			{
				new SL_Damage
				{
					Damage = array[3],
					Type = (Types)0
				}
			},
			Impact = array[1],
			AutoGenerateAttackData = true,
			StamCost = array[0]
		};
		val.HealthLeechRatio = 0.02f;
		val.HealthBurnLeechRatio = 0.02f;
		SL_EffectTransform[] array2 = new SL_EffectTransform[1];
		SL_EffectTransform val2 = new SL_EffectTransform();
		val2.TransformName = "HitEffects";
		val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
		array2[0] = val2;
		((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array2;
		val.SwingSound = (SwingSoundWeapon)3;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "CorruptedLongsword";
		((SL_Item)val).ItemVisuals = new SL_ItemVisual
		{
			Prefab_Name = "corrupted_longsword_Prefab",
			Prefab_AssetBundle = "corrupted_longsword",
			Prefab_SLPack = CrusadersEquipment.ModFolderName,
			PositionOffset = new Vector3(-0.025f, 0f, 0f)
		};
		SL_Weapon val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
		AffectStat val4 = ((Component)TinyGameObjectManager.GetOrMake(((Component)itemPrefab).transform, "Effects", true, true)).gameObject.AddComponent<AffectStat>();
		TagSourceSelector[] tags = (TagSourceSelector[])(object)new TagSourceSelector[1]
		{
			new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit("359")))
		};
		val4.AffectedStat = new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit("96")));
		val4.Tags = tags;
		val4.IsModifier = true;
		val4.Value = 10f;
		return itemPrefab;
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Expected O, but got Unknown
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Expected O, but got Unknown
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CorruptedLongsword".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501026
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501038
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6500031
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501040
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501040
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Corrupted Longsword",
			Target_ItemID = 5700024,
			New_ItemID = 2501027,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class AncientRelic
{
	public const string SubfolderName = "AncientRelic";

	public const string ItemName = "Ancient Relic";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		SL_Item val = new SL_Item();
		val.Name = "Ancient Relic";
		val.Target_ItemID = 6600222;
		val.New_ItemID = 2501038;
		val.EffectBehaviour = (EditBehaviours)1;
		val.Description = "Legends has it that a relic like this was lost to a golden lich long time ago.";
		val.SLPackName = CrusadersEquipment.ModFolderName;
		val.Tags = TinyTagManager.GetOrMakeTags(new string[4] { "Trinket", "HandsFreeTag", "Relic", "Item" });
		val.SubfolderName = "AncientRelic";
		SL_Item val2 = val;
		((ContentTemplate)val2).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(val2.New_ItemID);
	}

	public static void AddToLightmenderLoot()
	{
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Expected O, but got Unknown
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Expected O, but got Unknown
		GameObject val = GameObject.Find("/AISquadManagerStructure/_Statics/LichGold (Passive)_BczAklXU9EebdVVCCn4yHg");
		if (!Object.op_Implicit((Object)(object)val))
		{
			return;
		}
		Transform obj = val.transform.Find("DialogueTemplate/NPC/DialogueTree");
		DialogueTreeController val2 = ((obj != null) ? ((Component)obj).GetComponent<DialogueTreeController>() : null);
		if (!Object.op_Implicit((Object)(object)val2))
		{
			return;
		}
		Graph val3 = ((val2 != null) ? ((GraphOwner)val2).graph : null);
		if (!Object.op_Implicit((Object)(object)val3) || val3.allNodes == null)
		{
			return;
		}
		List<Node> allNodes = val3.allNodes;
		foreach (GiveReward item in allNodes.Where(delegate(Node n)
		{
			ActionNode val6 = (ActionNode)(object)((n is ActionNode) ? n : null);
			int result;
			if (val6 != null)
			{
				ActionTask action = val6.action;
				GiveReward val7 = (GiveReward)(object)((action is GiveReward) ? action : null);
				result = ((val7 != null) ? 1 : 0);
			}
			else
			{
				result = 0;
			}
			return (byte)result != 0;
		}).Select((Func<Node, GiveReward>)((Node n) => (GiveReward)((ActionNode)n).action)))
		{
			if (item.ItemReward.Count((ItemQuantity x) => new int[4] { 3000210, 3000212, 3000211, 2130060 }.Contains(x.Item.value.ItemID)) == GetExpectedLightmenderDrops())
			{
				ItemQuantity val4 = new ItemQuantity();
				ItemReference val5 = new ItemReference();
				val5.ItemID = CrusadersEquipment.Instance.lightMendersRelicInstance.ItemID;
				val4.Item = new BBParameter<ItemReference>(val5);
				val4.Quantity = BBParameter<int>.op_Implicit(1);
				item.ItemReward.Add(val4);
			}
		}
	}

	private static int GetExpectedLightmenderDrops()
	{
		return 4;
	}
}
public class CrusadersPlateArmor
{
	public const string SubfolderName = "CrusadersPlateArmor";

	public const string ItemName = "Crusader's Plate Armor";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Crusader's Plate Armor";
		((SL_Item)val).Target_ItemID = 3100120;
		((SL_Item)val).New_ItemID = 2502511;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 1000;
		((SL_ItemStats)val2).RawWeight = 18f;
		((SL_ItemStats)val2).MaxDurability = 375;
		val2.Damage_Resistance = new float[9] { 20f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 23f;
		val2.Damage_Protection = 3f;
		val2.BarrierProtection = 3f;
		val2.Damage_Bonus = HolyDamageManager.GetHolyDamageBonusArray(10f);
		val2.Stamina_Use_Penalty = 11f;
		val2.Mana_Use_Modifier = -10f;
		val2.Movement_Penalty = 6f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = -10f;
		val2.Cold_Protection = 0f;
		val2.Corruption_Protection = 10f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "CrusadersPlateArmor";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CrusadersPlateArmor".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2502511
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3100120
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3000060
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Crusader's Plate Armor",
			Target_ItemID = 5700024,
			New_ItemID = 2502512,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		TinyItemManager.AddEnchantingOption(((SL_Item)val).New_ItemID, 48);
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class CrusadersArmor
{
	public const string SubfolderName = "CrusadersArmor";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Crusader's Armor";
		((SL_Item)val).Target_ItemID = 3100110;
		((SL_Item)val).New_ItemID = 2501014;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 700;
		((SL_ItemStats)val2).RawWeight = 10f;
		((SL_ItemStats)val2).MaxDurability = 350;
		val2.Damage_Resistance = new float[9] { 21f, 0f, 20f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 10f;
		val2.Damage_Protection = 2f;
		val2.Damage_Bonus = HolyDamageManager.GetHolyDamageBonusArray(10f);
		val2.Stamina_Use_Penalty = 0f;
		val2.Mana_Use_Modifier = 0f;
		val2.Movement_Penalty = 0f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 0f;
		val2.Cold_Protection = 0f;
		val2.Corruption_Protection = 0f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "CrusadersArmor";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Expected O, but got Unknown
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CrusadersArmor".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501014
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3100110
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3000060
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501021
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Crusader's Armor",
			Target_ItemID = 5700024,
			New_ItemID = 2501025,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		TinyItemManager.AddEnchantingOption(((SL_Item)val).New_ItemID, 48);
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class CrusadersBoots
{
	public const string SubfolderName = "CrusadersBoots";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Crusader's Boots";
		((SL_Item)val).Target_ItemID = 3000062;
		((SL_Item)val).New_ItemID = 2501035;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 300;
		((SL_ItemStats)val2).RawWeight = 3f;
		((SL_ItemStats)val2).MaxDurability = 250;
		val2.Damage_Resistance = new float[9] { 10f, 0f, 10f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 6f;
		val2.Damage_Protection = 0f;
		val2.Damage_Bonus = new float[9];
		val2.Stamina_Use_Penalty = 0f;
		val2.Mana_Use_Modifier = 0f;
		val2.Movement_Penalty = -10f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 0f;
		val2.Cold_Protection = 0f;
		val2.Corruption_Protection = 0f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "CrusadersBoots";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Expected O, but got Unknown
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CrusadersBoots".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501035
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3000205
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3000062
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501021
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Crusader's Boots",
			Target_ItemID = 5700024,
			New_ItemID = 2501036,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		TinyItemManager.AddEnchantingOption(((SL_Item)val).New_ItemID, 50);
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class CrusadersHood
{
	public const string SubfolderName = "CrusadersHood";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Crusader's Hood";
		((SL_Item)val).Target_ItemID = 3000133;
		((SL_Item)val).New_ItemID = 2501033;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 250;
		((SL_ItemStats)val2).RawWeight = 1f;
		((SL_ItemStats)val2).MaxDurability = 300;
		val2.Damage_Resistance = new float[9] { 10f, 0f, 10f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 10f;
		val2.Damage_Protection = 1f;
		val2.Damage_Bonus = HolyDamageManager.GetHolyDamageBonusArray(10f);
		val2.Stamina_Use_Penalty = 0f;
		val2.Mana_Use_Modifier = 0f;
		val2.Movement_Penalty = 0f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 0f;
		val2.Cold_Protection = 0f;
		val2.Corruption_Protection = 15f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "CrusadersHood";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CrusadersHood".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501033
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 3000063
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501021
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Crusader's Hood",
			Target_ItemID = 5700024,
			New_ItemID = 2501034,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		TinyItemManager.AddEnchantingOption(((SL_Item)val).New_ItemID, 49);
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class CrusadersRoundShield
{
	public const string SubfolderName = "CrusadersRoundShield";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		SL_Weapon val = new SL_Weapon
		{
			Name = "Crusader's Round Shield",
			Target_ItemID = 2300000,
			New_ItemID = 2501020,
			EffectBehaviour = (EditBehaviours)1,
			Description = "A basic shield of wood and iron that has been painted white.",
			SLPackName = CrusadersEquipment.ModFolderName,
			SubfolderName = "CrusadersRoundShield"
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CrusadersRoundShield".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501020
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2300000
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501021
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Crusader's Round Shield",
			Target_ItemID = 5700024,
			New_ItemID = 2501024,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class CrusadersShield
{
	public const string SubfolderName = "CrusadersShield";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		SL_Weapon val = new SL_Weapon
		{
			Name = "Crusader's Shield",
			Target_ItemID = 2300130,
			New_ItemID = 2501015,
			EffectBehaviour = (EditBehaviours)1,
			Description = "This was originally a Blood-red shield used by the leaders of northern tribes, but it was later painted to indicate affiliation to Elatt.",
			SLPackName = CrusadersEquipment.ModFolderName,
			SubfolderName = "CrusadersShield"
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "CrusadersShield".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501015
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2300130
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501021
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Crusader's Shield",
			Target_ItemID = 5700024,
			New_ItemID = 2501023,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class PuresteelLongsword
{
	public const string SubfolderName = "PuresteelLongsword";

	public const string ItemName = "Puresteel Longsword";

	public static Item MakeItem()
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fa: Expected O, but got Unknown
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Expected O, but got Unknown
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_0139: Expected O, but got Unknown
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0186: Unknown result type (might be due to invalid IL or missing references)
		//IL_0191: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cb: Expected O, but got Unknown
		//IL_0215: Unknown result type (might be due to invalid IL or missing references)
		//IL_021a: Unknown result type (might be due to invalid IL or missing references)
		//IL_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0225: Expected O, but got Unknown
		//IL_0232: Unknown result type (might be due to invalid IL or missing references)
		//IL_0237: Unknown result type (might be due to invalid IL or missing references)
		//IL_023c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0246: Expected O, but got Unknown
		float[] array = new float[4] { 5.2f, 30f, 0.9f, 48f };
		SL_Weapon val = new SL_Weapon();
		((SL_Item)val).Name = "Puresteel Longsword";
		((SL_Item)val).Target_ItemID = 2000010;
		((SL_Item)val).New_ItemID = 2501029;
		((SL_Item)val).Description = "";
		((SL_Item)val).Tags = TinyTagManager.GetOrMakeTags(new string[7] { "Bastard", "Holy", "Blade", "Weapon", "Item", "MaulShoveTag", "LingeringEligible" });
		((SL_Item)val).StatsHolder = (SL_ItemStats)new SL_WeaponStats
		{
			BaseValue = 2000,
			RawWeight = 4.5f,
			MaxDurability = 650,
			AttackSpeed = array[2],
			BaseDamage = new List<SL_Damage>
			{
				new SL_Damage
				{
					Damage = array[3],
					Type = (Types)0
				}
			},
			Impact = array[1],
			AutoGenerateAttackData = true,
			StamCost = array[0]
		};
		SL_EffectTransform[] array2 = new SL_EffectTransform[1];
		SL_EffectTransform val2 = new SL_EffectTransform();
		val2.TransformName = "HitEffects";
		val2.Effects = (SL_Effect[])(object)new SL_Effect[0];
		array2[0] = val2;
		((SL_Item)val).EffectTransforms = (SL_EffectTransform[])(object)array2;
		val.SwingSound = (SwingSoundWeapon)3;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "PuresteelLongsword";
		((SL_Item)val).ItemVisuals = new SL_ItemVisual
		{
			Prefab_Name = "puresteel_longsword_Prefab",
			Prefab_AssetBundle = "puresteel_longsword",
			Prefab_SLPack = CrusadersEquipment.ModFolderName,
			PositionOffset = new Vector3(-0.03f, 0f, 0f)
		};
		SL_Weapon val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
		AffectStat val4 = ((Component)TinyGameObjectManager.GetOrMake(((Component)itemPrefab).transform, "Effects", true, true)).gameObject.AddComponent<AffectStat>();
		TagSourceSelector[] tags = (TagSourceSelector[])(object)new TagSourceSelector[1]
		{
			new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit("359")))
		};
		val4.AffectedStat = new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit("96")));
		val4.Tags = tags;
		val4.IsModifier = true;
		val4.Value = 10f;
		return itemPrefab;
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Expected O, but got Unknown
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Expected O, but got Unknown
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "PuresteelLongsword".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501029
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501038
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6300030
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501040
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 2501040
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Puresteel Longsword",
			Target_ItemID = 5700024,
			New_ItemID = 2501028,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class HolyWaterItem
{
	public const string SubfolderName = "HolyWater";

	public const string ItemName = "Holy Water";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Expected O, but got Unknown
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Expected O, but got Unknown
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Expected O, but got Unknown
		SL_Item val = new SL_Item();
		val.Name = "Holy Water";
		val.EffectBehaviour = (EditBehaviours)1;
		val.Target_ItemID = 4300100;
		val.New_ItemID = 2501031;
		val.Description = "The drinker becomes Blessed and experiences a short Burst of Divinity.";
		val.StatsHolder = new SL_ItemStats
		{
			RawWeight = 0.3f,
			BaseValue = 4
		};
		SL_EffectTransform[] array = new SL_EffectTransform[1];
		SL_EffectTransform val2 = new SL_EffectTransform();
		val2.TransformName = "Effects";
		val2.Effects = (SL_Effect[])(object)new SL_Effect[1] { (SL_Effect)new SL_AddBoonEffect
		{
			StatusEffect = "Bless",
			AmplifiedEffect = "Bless Amplified",
			ChanceToContract = 100
		} };
		array[0] = val2;
		val.EffectTransforms = (SL_EffectTransform[])(object)array;
		val.SLPackName = CrusadersEquipment.ModFolderName;
		val.SubfolderName = "HolyWater";
		SL_Item val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(val3.New_ItemID);
		StatusEffect statusEffectPrefab = ResourcesPrefabManager.Instance.GetStatusEffectPrefab("BurstOfDivinity");
		if (statusEffectPrefab != null)
		{
			AddStatusEffect val4 = ((Component)TinyGameObjectManager.GetOrMake(((Component)itemPrefab).transform, "Effects", true, true)).gameObject.AddComponent<AddStatusEffect>();
			val4.Status = statusEffectPrefab;
			val4.BaseChancesToContract = 100;
		}
		return itemPrefab;
	}

	public static Item MakeRecipe()
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Expected O, but got Unknown
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Expected O, but got Unknown
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Expected O, but got Unknown
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: Expected O, but got Unknown
		string text = UID.op_Implicit(TinyUIDManager.MakeUID("Holy Water", "com.ehaugw.crusadersequipment", "Recipe"));
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)0,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 5,
					ItemID = 2501031
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)0,
					Ingredient_Tag = "Water"
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6000010
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6600040
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Crafting: Holy Water",
			Target_ItemID = 5700076,
			New_ItemID = 2501032,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
[BepInPlugin("com.ehaugw.crusadersequipment", "Crusaders Equipment", "3.0.6")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency("com.ehaugw.tinyhelper", "4.3.4")]
[BepInDependency("com.ehaugw.impendingdoom", "1.0.0")]
[BepInDependency("com.ehaugw.holydamagemanager", "1.0.0")]
public class CrusadersEquipment : BaseUnityPlugin
{
	public static CrusadersEquipment Instance;

	public const string GUID = "com.ehaugw.crusadersequipment";

	public const string VERSION = "3.0.6";

	public const string NAME = "Crusaders Equipment";

	public static string ModFolderName = Directory.GetParent(typeof(CrusadersEquipment).Assembly.Location).Name.ToString();

	public Item holyWaterInstance;

	public Item holyWaterRecipeInstance;

	public Item corruptedLongswordInstance;

	public Item puresteelLongswordInstance;

	public Item lightMendersRelicInstance;

	public Item adamantineIngotInstance;

	public Item blessedLongswordRecipeInstance;

	public Item corruptedLongswordRecipeInstance;

	public Item puresteelLongswordRecipeInstance;

	public Item adamantineIngotRecipeInstance;

	public Item crusadersArmorInstance;

	public Item crusadersPlateArmorInstance;

	public Item crusadersRoundShieldInstance;

	public Item crusadersShieldInstance;

	public Item thickWhitePaintInstance;

	public Item crusadersHoodInstance;

	public Item crusadersBootsInstance;

	public Item thickWhitePaintRecipeInstance;

	public Item crusadersShieldRecipeInstance;

	public Item crusadersRoundShieldRecipeInstance;

	public Item crusadersArmorRecipeInstance;

	public Item crusadersPlateArmorRecipeInstance;

	public Item crusadersHoodRecipeInstance;

	public Item crusadersBootsRecipeInstance;

	public Item zealotsArmorInstance;

	public Item zealotsBootsInstance;

	public Item heavyPlateArmorInstance;

	public Trainer altarTrainer;

	internal void Awake()
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Expected O, but got Unknown
		Instance = this;
		SL.BeforePacksLoaded += OnBeforePacksLoaded;
		SL.OnPacksLoaded += OnPackLoaded;
		SL.OnSceneLoaded += OnSceneLoadedEquipment;
		Harmony val = new Harmony("com.ehaugw.crusadersequipment");
		val.PatchAll();
		Doomsayer.MakeEnchant();
		Lingering.MakeEnchant();
	}

	private void OnBeforePacksLoaded()
	{
	}

	private void OnPackLoaded()
	{
		corruptedLongswordInstance = CorruptedLongsword.MakeItem();
		puresteelLongswordInstance = PuresteelLongsword.MakeItem();
		lightMendersRelicInstance = AncientRelic.MakeItem();
		adamantineIngotInstance = AdamantineIngot.MakeItem();
		corruptedLongswordRecipeInstance = CorruptedLongsword.MakeRecipes();
		puresteelLongswordRecipeInstance = PuresteelLongsword.MakeRecipes();
		adamantineIngotRecipeInstance = AdamantineIngot.MakeRecipes();
		holyWaterInstance = HolyWaterItem.MakeItem();
		holyWaterRecipeInstance = HolyWaterItem.MakeRecipe();
		crusadersArmorInstance = CrusadersArmor.MakeItem();
		crusadersPlateArmorInstance = CrusadersPlateArmor.MakeItem();
		crusadersHoodInstance = CrusadersHood.MakeItem();
		crusadersBootsInstance = CrusadersBoots.MakeItem();
		crusadersRoundShieldInstance = CrusadersRoundShield.MakeItem();
		crusadersShieldInstance = CrusadersShield.MakeItem();
		thickWhitePaintInstance = ThickWhitePaint.MakeItem();
		zealotsArmorInstance = ZealotsArmor.MakeItem();
		zealotsBootsInstance = ZealotsBoots.MakeItem();
		heavyPlateArmorInstance = HeavyPlateArmor.MakeItem();
		crusadersArmorRecipeInstance = CrusadersArmor.MakeRecipes();
		crusadersPlateArmorRecipeInstance = CrusadersPlateArmor.MakeRecipes();
		crusadersHoodRecipeInstance = CrusadersHood.MakeRecipes();
		crusadersBootsRecipeInstance = CrusadersBoots.MakeRecipes();
		crusadersRoundShieldRecipeInstance = CrusadersRoundShield.MakeRecipes();
		crusadersShieldRecipeInstance = CrusadersShield.MakeRecipes();
		thickWhitePaintRecipeInstance = ThickWhitePaint.MakeRecipes();
		MakeGoldToSilverRecipe();
		FaraamLongsword.MakeItem();
		FaraamHelmet.MakeItem();
		RangersHood.MakeItem();
		RangersHood.MakeRecipes();
		Doomsayer.MakeEnchantEffect();
		RadiantSpark.Init();
	}

	private void MakeGoldToSilverRecipe()
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Expected O, but got Unknown
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: 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_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Expected O, but got Unknown
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		string uID = "com.ehaugw.crusadersequipment.goldingottosilverrecipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)2,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 100,
					ItemID = 9000010
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6300030
				}
			},
			UID = uID
		}).ApplyTemplate();
	}

	private void OnSceneLoadedEquipment()
	{
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_011f: Expected O, but got Unknown
		//IL_01df: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ff: Expected O, but got Unknown
		//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0306: Unknown result type (might be due to invalid IL or missing references)
		//IL_0312: Expected O, but got Unknown
		foreach (GameObject item in Resources.FindObjectsOfTypeAll<GameObject>().Where(delegate(GameObject x)
		{
			int result;
			if (((Object)x).name == "HumanSNPC_Blacksmith")
			{
				Merchant componentInChildren = x.GetComponentInChildren<Merchant>();
				result = (((((componentInChildren != null) ? componentInChildren.ShopName : null) ?? "") == "Vyzyrinthrix the Blacksmith") ? 1 : 0);
			}
			else
			{
				result = 0;
			}
			return (byte)result != 0;
		}))
		{
			GuaranteedDrop val = item.GetComponentsInChildren<GuaranteedDrop>()?.FirstOrDefault((Func<GuaranteedDrop, bool>)((GuaranteedDrop table) => ((ItemDropper)table).ItemGenatorName == "Recipes"));
			if (val != null && At.GetField<GuaranteedDrop>(val, "m_itemDrops") is List<BasicItemDrop> list)
			{
				Item[] array = (Item[])(object)new Item[8] { puresteelLongswordRecipeInstance, adamantineIngotRecipeInstance, crusadersArmorRecipeInstance, crusadersPlateArmorRecipeInstance, crusadersShieldRecipeInstance, crusadersRoundShieldRecipeInstance, crusadersHoodRecipeInstance, crusadersBootsRecipeInstance };
				foreach (Item itemRef in array)
				{
					list.Add(new BasicItemDrop
					{
						ItemRef = itemRef,
						MaxDropCount = 1,
						MinDropCount = 1
					});
				}
			}
		}
		GameObject obj = GameObject.Find("UNPC_LaineAberforthA");
		GuaranteedDrop val2 = ((obj == null) ? null : obj.GetComponentsInChildren<GuaranteedDrop>()?.FirstOrDefault((Func<GuaranteedDrop, bool>)((GuaranteedDrop table) => ((ItemDropper)table).ItemGenatorName == "Recipes")));
		if (val2 != null && At.GetField<GuaranteedDrop>(val2, "m_itemDrops") is List<BasicItemDrop> list2)
		{
			Item[] array2 = (Item[])(object)new Item[2] { holyWaterRecipeInstance, thickWhitePaintRecipeInstance };
			foreach (Item itemRef2 in array2)
			{
				list2.Add(new BasicItemDrop
				{
					ItemRef = itemRef2,
					MaxDropCount = 1,
					MinDropCount = 1
				});
			}
		}
		GameObject[] array3 = (GameObject[])(object)new GameObject[2]
		{
			GameObject.Find("UNPC_MathiasA (1)"),
			GameObject.Find("UNPC_MathiasA (2)")
		};
		foreach (GameObject val3 in array3)
		{
			GuaranteedDrop val4 = ((val3 == null) ? null : val3.GetComponentsInChildren<GuaranteedDrop>()?.FirstOrDefault((Func<GuaranteedDrop, bool>)((GuaranteedDrop table) => ((ItemDropper)table).ItemGenatorName == "Recipes")));
			if (val4 != null && At.GetField<GuaranteedDrop>(val4, "m_itemDrops") is List<BasicItemDrop> list3)
			{
				Item[] array4 = (Item[])(object)new Item[5] { zealotsArmorInstance, zealotsBootsInstance, crusadersArmorInstance, crusadersBootsInstance, crusadersHoodInstance };
				foreach (Item itemRef3 in array4)
				{
					list3.Add(new BasicItemDrop
					{
						ItemRef = itemRef3,
						MaxDropCount = 1,
						MinDropCount = 1
					});
				}
			}
		}
	}
}
[HarmonyPatch(typeof(GiveReward), "OnExecute")]
public class GiveReward_OnExecute
{
	[HarmonyPrefix]
	public static void Prefix(GiveReward __instance)
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Expected O, but got Unknown
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Expected O, but got Unknown
		if (__instance.ItemReward.Count((ItemQuantity x) => new int[4] { 3000210, 3000212, 3000211, 2130060 }.Contains(x.Item.value.ItemID)) >= 4)
		{
			ItemQuantity val = new ItemQuantity();
			ItemReference val2 = new ItemReference();
			val2.ItemID = CrusadersEquipment.Instance.lightMendersRelicInstance.ItemID;
			val.Item = new BBParameter<ItemReference>(val2);
			val.Quantity = BBParameter<int>.op_Implicit(1);
			__instance.ItemReward.Add(val);
		}
	}
}
[HarmonyPatch(typeof(Weapon), "AddImbueEffect")]
public class Weapon_AddImbueEffect
{
	[HarmonyPrefix]
	public static void Prefix(Weapon __instance, ref float _lifespan)
	{
		if (((Equipment)__instance).ActiveEnchantmentIDs.Contains(2502517))
		{
			_lifespan += 10f;
		}
	}
}
public class RadiantSpark
{
	public static void Init()
	{
		Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(8200040);
		Skill val = (Skill)(object)((itemPrefab is Skill) ? itemPrefab : null);
		Blast baseBlast = ((Component)((Component)val).transform.Find("Effects")).gameObject.GetComponents<ShootBlast>()[0].BaseBlast;
		Transform transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)baseBlast).transform).transform;
		AddThenSpreadStatus val2 = ((Component)transform).gameObject.AddComponent<AddThenSpreadStatus>();
		((AddStatusEffect)val2).Status = ImpendingDoomMod.Instance.impendingDoomInstance;
		val2.Range = 2f;
		Transform orMake = TinyGameObjectManager.GetOrMake(((Component)val2).transform, "SourceConditions", true, true);
		SourceConditionEquipment val3 = ((Component)orMake).gameObject.AddComponent<SourceConditionEquipment>();
		val3.RequiredItemID = 2502506;
	}
}
public class ThickWhitePaint
{
	public const string SubfolderName = "ThickWhitePaint";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Expected O, but got Unknown
		SL_Item val = new SL_Item
		{
			Name = "Thick White Paint",
			Target_ItemID = 6600070,
			New_ItemID = 2501021,
			EffectBehaviour = (EditBehaviours)1,
			Description = "Thick white paint that can easily be applied to objects.",
			SLPackName = CrusadersEquipment.ModFolderName,
			SubfolderName = "ThickWhitePaint"
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(val.New_ItemID);
	}

	public static Item MakeRecipes()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_009b: Expected O, but got Unknown
		//IL_009d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Expected O, but got Unknown
		//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Expected O, but got Unknown
		string text = "com.ehaugw.crusadersequipment." + "ThickWhitePaint".ToLower() + "recipe";
		((ContentTemplate)new SL_Recipe
		{
			StationType = (CraftingType)0,
			Results = new List<ItemQty>
			{
				new ItemQty
				{
					Quantity = 1,
					ItemID = 2501021
				}
			},
			Ingredients = new List<Ingredient>
			{
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6200070
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6000070
				},
				new Ingredient
				{
					Type = (ActionTypes)1,
					Ingredient_ItemID = 6600070
				}
			},
			UID = text
		}).ApplyTemplate();
		SL_RecipeItem val = new SL_RecipeItem
		{
			Name = "Alchemy: Thick White Paint",
			Target_ItemID = 5700076,
			New_ItemID = 2501022,
			EffectBehaviour = (EditBehaviours)1,
			RecipeUID = text
		};
		((ContentTemplate)val).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val).New_ItemID);
	}
}
public class ZealotsArmor
{
	public const string SubfolderName = "ZealotsArmor";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Zealot's Armor";
		((SL_Item)val).Target_ItemID = 3100470;
		((SL_Item)val).New_ItemID = 2501042;
		((SL_Item)val).EffectBehaviour = (EditBehaviours)1;
		((SL_Item)val).Description = "";
		SL_EquipmentStats val2 = new SL_EquipmentStats();
		((SL_ItemStats)val2).BaseValue = 1000;
		((SL_ItemStats)val2).RawWeight = 15f;
		((SL_ItemStats)val2).MaxDurability = 500;
		val2.Damage_Resistance = new float[9] { 25f, 0f, 25f, 0f, 0f, 0f, 0f, 0f, 0f };
		val2.Impact_Resistance = 18f;
		val2.Damage_Protection = 2f;
		val2.Damage_Bonus = HolyDamageManager.GetHolyDamageBonusArray(14f);
		val2.Stamina_Use_Penalty = 6f;
		val2.Mana_Use_Modifier = 0f;
		val2.Movement_Penalty = 6f;
		val2.Pouch_Bonus = 0f;
		val2.Heat_Protection = 0f;
		val2.Cold_Protection = -6f;
		val2.Corruption_Protection = 10f;
		((SL_Item)val).StatsHolder = (SL_ItemStats)(object)val2;
		((SL_Item)val).SLPackName = CrusadersEquipment.ModFolderName;
		((SL_Item)val).SubfolderName = "ZealotsArmor";
		SL_Equipment val3 = val;
		((ContentTemplate)val3).ApplyTemplate();
		return ResourcesPrefabManager.Instance.GetItemPrefab(((SL_Item)val3).New_ItemID);
	}
}
public class ZealotsBoots
{
	public const string SubfolderName = "ZealotsBoots";

	public static Item MakeItem()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Expected O, but got Unknown
		SL_Equipment val = new SL_Equipment();
		((SL_Item)val).Name = "Zealot's Boots";
		(

plugins/CustomWeaponBehaviour.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using HolyDamageManager;
using Photon;
using SideLoader;
using TinyHelper;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace CustomWeaponBehaviour;

public class MaulShoveBehaviour
{
	public virtual bool Eligible(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).HasTag(CustomWeaponBehaviour.MaulShoveTag);
	}

	public virtual bool IsActive(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Invalid comparison between Unknown and I4
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Invalid comparison between Unknown and I4
		return (int)weapon.Type != 53 && (int)BehaviourManager.GetCurrentAnimationType(weapon) == 53;
	}

	public bool IsMaulShoveMode(Weapon weapon)
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		int result;
		if (Eligible(weapon) && ((Item)weapon).IsEquipped)
		{
			Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
			if (!((Object)(object)((ownerCharacter != null) ? ownerCharacter.LeftHandEquipment : null) == (Object)null))
			{
				Character ownerCharacter2 = ((EffectSynchronizer)weapon).OwnerCharacter;
				Equipment val = ((ownerCharacter2 != null) ? ownerCharacter2.LeftHandEquipment : null);
				if (val == null || !((Item)val).HasTag(CustomWeaponBehaviour.HandsFreeTag))
				{
					result = (((Equipment)weapon).TwoHanded ? 1 : 0);
					goto IL_005b;
				}
			}
			result = 1;
		}
		else
		{
			result = 0;
		}
		goto IL_005b;
		IL_005b:
		return (byte)result != 0;
	}

	public void PostAffectDamage(ref Weapon weapon, DamageList original, ref DamageList result)
	{
		if (!IsMaulShoveMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplyDamageModifier(weapon, original, ref result);
		}
	}

	public void PostAffectImpact(ref Weapon weapon, float original, ref float result)
	{
		if (!IsMaulShoveMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplyImpactModifier(weapon, original, ref result);
		}
	}

	public void PostAffectSpeed(ref Weapon weapon, float original, ref float result)
	{
		if (!IsMaulShoveMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplySpeedModifier(weapon, original, ref result);
		}
	}

	public void PostAffectStaminaCost(ref Weapon weapon, float original, ref float result)
	{
		if (!IsMaulShoveMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplyStaminaModifier(weapon, original, ref result);
		}
	}
}
public class BastardBehaviour
{
	public static WeaponType? GetBastardType(WeaponType type)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected I4, but got Unknown
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		return (int)type switch
		{
			1 => (WeaponType)52, 
			0 => (WeaponType)51, 
			2 => (WeaponType)53, 
			_ => type, 
		};
	}

	public virtual bool Eligible(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).HasTag(CustomWeaponBehaviour.BastardTag) && !((Equipment)weapon).TwoHanded;
	}

	public bool IsBastardMode(Weapon weapon)
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		if (!Eligible(weapon) || !((Item)weapon).IsEquipped)
		{
			goto IL_0064;
		}
		Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
		if (!((Object)(object)((ownerCharacter != null) ? ownerCharacter.LeftHandEquipment : null) == (Object)null))
		{
			Character ownerCharacter2 = ((EffectSynchronizer)weapon).OwnerCharacter;
			Equipment val = ((ownerCharacter2 != null) ? ownerCharacter2.LeftHandEquipment : null);
			if (val == null || !((Item)val).HasTag(CustomWeaponBehaviour.HandsFreeTag))
			{
				goto IL_0064;
			}
		}
		int result = ((!CustomWeaponBehaviour.Instance.maulShoveBehaviour.IsActive(weapon)) ? 1 : 0);
		goto IL_0065;
		IL_0065:
		return (byte)result != 0;
		IL_0064:
		result = 0;
		goto IL_0065;
	}

	public void PostAffectDamage(ref Weapon weapon, DamageList original, ref DamageList result)
	{
		if (!IsBastardMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplyDamageModifier(weapon, original, ref result);
		}
	}

	public void PostAffectImpact(ref Weapon weapon, float original, ref float result)
	{
		if (!IsBastardMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplyImpactModifier(weapon, original, ref result);
		}
	}

	public void PostAffectSpeed(ref Weapon weapon, float original, ref float result)
	{
		if (!IsBastardMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplySpeedModifier(weapon, original, ref result);
		}
	}

	public void PostAffectStaminaCost(ref Weapon weapon, float original, ref float result)
	{
		if (!IsBastardMode(weapon))
		{
			return;
		}
		foreach (IBastardModifier iBastardModifier in CustomWeaponBehaviour.IBastardModifiers)
		{
			iBastardModifier.ApplyStaminaModifier(weapon, original, ref result);
		}
	}
}
public class AttackCancelByBlockBehaviour
{
	public bool IsBlockMode(Character character)
	{
		return Eligible(character);
	}

	public virtual bool Eligible(Character character)
	{
		return false;
	}
}
public class AttackCancelBySkillBehaviour
{
	public bool IsAttackCancelBySkillMode(Character character)
	{
		return Eligible(character);
	}

	public virtual bool Eligible(Character character)
	{
		return false;
	}
}
public class SpecialLeapBehaviour
{
	public virtual bool IsSpecialLeapMode(Weapon weapon)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).IsEquipped && ((Item)weapon).HasTag(CustomWeaponBehaviour.SpecialLeapTag);
	}
}
public class HalfHandedBehaviour
{
	public bool IsHalfHandedMode(Weapon weapon)
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		if (!Eligible(weapon) || !((Item)weapon).IsEquipped)
		{
			goto IL_005a;
		}
		Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
		if (!((Object)(object)((ownerCharacter != null) ? ownerCharacter.LeftHandEquipment : null) == (Object)null))
		{
			Character ownerCharacter2 = ((EffectSynchronizer)weapon).OwnerCharacter;
			Equipment val = ((ownerCharacter2 != null) ? ownerCharacter2.LeftHandEquipment : null);
			if (val == null || !((Item)val).HasTag(CustomWeaponBehaviour.HandsFreeTag))
			{
				goto IL_005a;
			}
		}
		int result = ((!((Equipment)weapon).TwoHanded) ? 1 : 0);
		goto IL_005b;
		IL_005b:
		return (byte)result != 0;
		IL_005a:
		result = 0;
		goto IL_005b;
	}

	public virtual bool Eligible(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).HasTag(CustomWeaponBehaviour.HalfHandedTag);
	}
}
public class ParryBehaviour
{
	public virtual float GetParryWindow(Weapon weapon)
	{
		return 0.3f;
	}

	public virtual float GetParryWindUp(Weapon weapon)
	{
		return 0.1f;
	}

	public bool IsParryMode(Weapon weapon)
	{
		int result;
		if (((Item)weapon).IsEquipped && Eligible(weapon))
		{
			Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
			result = (((Object)(object)((ownerCharacter != null) ? ownerCharacter.LeftHandEquipment : null) == (Object)null || OffhandEligible((weapon != null) ? ((EffectSynchronizer)weapon).OwnerCharacter : null)) ? 1 : 0);
		}
		else
		{
			result = 0;
		}
		return (byte)result != 0;
	}

	public virtual bool OffhandEligible(Character character)
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Invalid comparison between Unknown and I4
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		Equipment obj = ((character != null) ? character.LeftHandEquipment : null);
		Weapon val = (Weapon)(object)((obj is Weapon) ? obj : null);
		return val != null && ((int)val.Type != 100 || ((Item)val).HasTag(CustomWeaponBehaviour.BucklerTag));
	}

	public virtual bool Eligible(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).HasTag(CustomWeaponBehaviour.ParryTag);
	}

	public virtual bool DidSuccessfulParry(Weapon weapon)
	{
		int result;
		if (IsParryMode(weapon))
		{
			Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
			if (ownerCharacter != null && ownerCharacter.Blocking && Time.time - (float)At.GetField<Character>(ownerCharacter, "m_blockTime") < GetParryWindow(weapon) && ownerCharacter.Blocking)
			{
				result = ((Time.time - (float)At.GetField<Character>(ownerCharacter, "m_blockTime") > GetParryWindUp(weapon)) ? 1 : 0);
				goto IL_0065;
			}
		}
		result = 0;
		goto IL_0065;
		IL_0065:
		return (byte)result != 0;
	}

	public virtual void DeliverParry(Character blocker, Character striker, Vector3 _hitDir, float impactDamage)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		At.Invoke<Character>(striker, "StabilityHit", new object[4]
		{
			impactDamage / 2f,
			Vector3.Angle(((Component)striker).transform.forward, -_hitDir),
			false,
			blocker
		});
		CasualStagger.Stagger(striker);
	}
}
public class HolyBehaviour
{
	public virtual Types GetHolyDamageType()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		return HolyDamageManager.GetDamageType();
	}

	public virtual float GetHolyWeaponConvertionRate(Weapon weapon)
	{
		return 0.2f;
	}

	public bool IsHolyWeaponMode(Weapon weapon)
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		if (((Item)weapon).IsEquipped && Eligible(weapon) && weapon.Imbued)
		{
			Effect[] imbuedEffects = weapon.FirstImbue.ImbuedEffects;
			foreach (Effect val in imbuedEffects)
			{
				WeaponDamage val2 = (WeaponDamage)(object)((val is WeaponDamage) ? val : null);
				if (val2 != null && ((PunctualDamage)val2).Damages.Length != 0 && ((PunctualDamage)val2).Damages[0].Type == GetHolyDamageType())
				{
					return true;
				}
			}
		}
		return false;
	}

	public virtual bool Eligible(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).HasTag(CustomWeaponBehaviour.HolyWeaponTag);
	}

	public void PostAffectDamage(ref Weapon _weapon, DamageList original, ref DamageList _damageList)
	{
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Expected O, but got Unknown
		if (IsHolyWeaponMode(_weapon))
		{
			float totalDamage = _damageList.TotalDamage;
			float holyWeaponConvertionRate = GetHolyWeaponConvertionRate(_weapon);
			_damageList *= 1f - holyWeaponConvertionRate;
			_damageList.Add(new DamageType(GetHolyDamageType(), totalDamage * holyWeaponConvertionRate));
		}
	}
}
public class FinesseBehaviour
{
	public bool IsFinesseMode(Weapon weapon)
	{
		return ((Item)weapon).IsEquipped && Eligible(weapon);
	}

	public virtual bool Eligible(Weapon weapon)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return ((Item)weapon).HasTag(CustomWeaponBehaviour.FinesseTag);
	}
}
public class BehaviourManager
{
	public static WeaponType GetCurrentAnimationType(Weapon weapon)
	{
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		if (((Item)weapon).IsEquipped)
		{
			Character ownerCharacter = ((EffectSynchronizer)weapon).OwnerCharacter;
			Animator val = ((ownerCharacter != null) ? ownerCharacter.Animator : null);
			if (val != null)
			{
				return (WeaponType)val.GetInteger("WeaponType");
			}
		}
		return weapon.Type;
	}

	public static bool IsComboAttack(Character __instance, int _type, int _id)
	{
		return _type switch
		{
			0 => true, 
			1 => __instance.NextAtkAllowed == 2, 
			_ => false, 
		};
	}

	public static bool AdaptGrip(Character __instance, ref int _type, ref int _id)
	{
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Invalid comparison between Unknown and I4
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Invalid comparison between Unknown and I4
		//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_019e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0204: 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_0234: 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_0226: Invalid comparison between Unknown and I4
		Weapon val = ((__instance != null) ? __instance.CurrentWeapon : null);
		if ((Object)(object)val == (Object)null)
		{
			return false;
		}
		if (_type == 2502 || _type == 2511)
		{
			object field = At.GetField<Character>(__instance, "m_lastUsedSkill");
			MeleeSkill val2 = (MeleeSkill)((field is MeleeSkill) ? field : null);
			if (val2 != null && ((int)((Item)val2).ActivateEffectAnimType == 502 || (int)((Item)val2).ActivateEffectAnimType == 511) && ((AttackSkill)val2).RequiredWeaponTypes[0] != val.Type)
			{
				CustomWeaponBehaviour.ChangeGrip(__instance, ((AttackSkill)val2).RequiredWeaponTypes[0]);
				return true;
			}
		}
		if (CustomWeaponBehaviour.Instance.finesseBehaviour.IsFinesseMode(val) && _type == 1 && !IsComboAttack(__instance, _type, _id))
		{
			CustomWeaponBehaviour.ChangeGrip(__instance, (WeaponType)1);
			return true;
		}
		if (CustomWeaponBehaviour.Instance.halfHandedBehaviour.IsHalfHandedMode(val) && _type == 1 && !IsComboAttack(__instance, _type, _id))
		{
			_type = 0;
			CustomWeaponBehaviour.ChangeGrip(__instance, (WeaponType)54);
			return true;
		}
		if (CustomWeaponBehaviour.Instance.maulShoveBehaviour.IsMaulShoveMode(val) && _type == 1 && !IsComboAttack(__instance, _type, _id))
		{
			CustomWeaponBehaviour.ChangeGrip(__instance, (WeaponType)53);
			return true;
		}
		if (CustomWeaponBehaviour.Instance.bastardBehaviour.IsBastardMode(val))
		{
			WeaponType? bastardType = BastardBehaviour.GetBastardType(val.Type);
			if (bastardType.HasValue)
			{
				WeaponType valueOrDefault = bastardType.GetValueOrDefault();
				if (true && Extensions.Contains(new int[3] { 0, 1, 2500 }, _type))
				{
					CustomWeaponBehaviour.ChangeGrip(__instance, valueOrDefault);
					Equipment val3 = ((__instance != null) ? __instance.LeftHandEquipment : null);
					if (val3 != null && ((Item)val3).HasTag(CustomWeaponBehaviour.HandsFreeTag) && ((Item)val3).HasTag(CustomWeaponBehaviour.LanternTag) && (int)val3.IKType == 1)
					{
						val3.IKType = (IKMode)0;
					}
					return true;
				}
			}
		}
		return false;
	}

	public static bool SpellHasAttackAnimation(Character character)
	{
		if (character.IsCasting && character.Animator.GetInteger("AttackID") < 2)
		{
			return true;
		}
		return false;
	}

	public static bool AttackHasSpellAnimation(Character character)
	{
		if (!character.IsCasting && character.Animator.GetInteger("AttackID") >= 2)
		{
			return true;
		}
		return false;
	}
}
public interface IBaseDamageModifier
{
	bool Eligible(Weapon weapon);

	void Apply(Weapon weapon, DamageList original, ref DamageList result);
}
public interface IBastardModifier
{
	void ApplyDamageModifier(Weapon weapon, DamageList original, ref DamageList modifier);

	void ApplyImpactModifier(Weapon weapon, float original, ref float modifier);

	void ApplySpeedModifier(Weapon weapon, float original, ref float result);

	void ApplyStaminaModifier(Weapon weapon, float original, ref float result);
}
public interface IMaulShoveModifier
{
	void ApplyDamageModifier(Weapon weapon, DamageList original, ref DamageList result);

	void ApplyImpactModifier(Weapon weapon, float original, ref float result);

	void ApplySpeedModifier(Weapon weapon, float original, ref float result);
}
public class CustomBehaviourFormulas
{
	public static void PostAffectSpeed(Weapon weapon, ref float result)
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)weapon == (Object)null))
		{
			float original = result;
			CustomWeaponBehaviour.Instance.bastardBehaviour.PostAffectSpeed(ref weapon, original, ref result);
			CustomWeaponBehaviour.Instance.maulShoveBehaviour.PostAffectSpeed(ref weapon, original, ref result);
			if (WeaponManager.Speeds.ContainsKey(weapon.Type) && WeaponManager.Speeds.ContainsKey(BehaviourManager.GetCurrentAnimationType(weapon)))
			{
				result *= WeaponManager.Speeds[BehaviourManager.GetCurrentAnimationType(weapon)] / WeaponManager.Speeds[weapon.Type];
			}
			if (result < 0f)
			{
				result = 0f;
			}
		}
	}

	public static void PostAffectDamage(ref Weapon _weapon, ref DamageList result)
	{
		DamageList original = result.Clone();
		foreach (IBaseDamageModifier iBaseDamageModifier in CustomWeaponBehaviour.IBaseDamageModifiers)
		{
			if (iBaseDamageModifier.Eligible(_weapon))
			{
				iBaseDamageModifier.Apply(_weapon, original, ref result);
			}
		}
		CustomWeaponBehaviour.Instance.maulShoveBehaviour.PostAffectDamage(ref _weapon, original, ref result);
		CustomWeaponBehaviour.Instance.bastardBehaviour.PostAffectDamage(ref _weapon, original, ref result);
		CustomWeaponBehaviour.Instance.holyBehaviour.PostAffectDamage(ref _weapon, original, ref result);
	}

	public static void PostAffectImpact(ref Weapon _weapon, ref float _impactDamage)
	{
		float original = _impactDamage;
		CustomWeaponBehaviour.Instance.maulShoveBehaviour.PostAffectImpact(ref _weapon, original, ref _impactDamage);
		CustomWeaponBehaviour.Instance.bastardBehaviour.PostAffectImpact(ref _weapon, original, ref _impactDamage);
		if (_impactDamage < 0f)
		{
			_impactDamage = 0f;
		}
	}

	public static void PostAffectStaminaCost(Weapon _weapon, ref float _staminaCost)
	{
		float original = _staminaCost;
		CustomWeaponBehaviour.Instance.bastardBehaviour.PostAffectStaminaCost(ref _weapon, original, ref _staminaCost);
		if (_staminaCost < 0f)
		{
			_staminaCost = 0f;
		}
	}
}
public class EnableHitDetection : Effect
{
	protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
	{
		Item parentItem = ((Effect)this).ParentItem;
		MeleeSkill val = (MeleeSkill)(object)((parentItem is MeleeSkill) ? parentItem : null);
		if (val != null && (Object)(object)val.MeleeHitDetector != (Object)null)
		{
			MeleeHitDetector val2 = ((_affectedCharacter != null) ? _affectedCharacter.SkillMeleeDetector : null);
			if (val2 != null)
			{
				val2.HitStarted(-1);
				return;
			}
		}
		Weapon obj = ((_affectedCharacter != null) ? _affectedCharacter.CurrentWeapon : null);
		MeleeWeapon val3 = (MeleeWeapon)(object)((obj is MeleeWeapon) ? obj : null);
		if (val3 != null)
		{
			((Weapon)val3).HitStarted(-1);
		}
	}
}
public class WeaponSkillAnimationSelector : Effect
{
	public WeaponType WeaponType;

	protected override void ActivateLocally(Character character, object[] _infos)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		CustomWeaponBehaviour.ChangeGrip(character, WeaponType);
	}

	public static void SetCustomAttackAnimation(Skill skill, WeaponType weaponType)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		Transform transform = TinyGameObjectManager.MakeFreshObject("ActivationEffects", true, true, ((Component)skill).transform).transform;
		((Component)transform).gameObject.AddComponent<WeaponSkillAnimationSelector>().WeaponType = weaponType;
	}
}
[HarmonyPatch(typeof(Skill), "HasAllRequirements")]
public class Skill_HasAllRequirements
{
	[HarmonyPrefix]
	public static void Prefix(Skill __instance, bool _tryingToActivate)
	{
		if (_tryingToActivate)
		{
			MeleeSkill val = (MeleeSkill)(object)((__instance is MeleeSkill) ? __instance : null);
			if (val != null && ((EffectSynchronizer)__instance).OwnerCharacter.NextAtkAllowed == 2 && CustomWeaponBehaviour.Instance.attackCancelBySkillBehaviour.IsAttackCancelBySkillMode(((EffectSynchronizer)__instance).OwnerCharacter) && ((Skill)val).HasAllRequirements(false))
			{
				((EffectSynchronizer)__instance).OwnerCharacter.ForceCancel(true, true);
				At.SetValue<bool>(true, typeof(Character), (object)((EffectSynchronizer)__instance).OwnerCharacter, "m_inLocomotion");
				At.SetValue<bool>(true, typeof(Character), (object)((EffectSynchronizer)__instance).OwnerCharacter, "m_nextIsLocomotion");
			}
		}
	}
}
[HarmonyPatch(typeof(Character), "BlockInput")]
public class Character_BlockInput
{
	[HarmonyPrefix]
	public static bool Prefix(Character __instance, ref bool _active)
	{
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Invalid comparison between Unknown and I4
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Invalid comparison between Unknown and I4
		if (__instance.IsAI)
		{
			return true;
		}
		if (!__instance.IsPhotonPlayerLocal || __instance.Sheathing || __instance.PreparingToSleep || __instance.Dodging || (int)__instance.CurrentSpellCast == 35 || (int)__instance.CurrentSpellCast == 900)
		{
			return true;
		}
		if (!_active || (__instance.InLocomotion && __instance.NextIsLocomotion))
		{
			return true;
		}
		if (__instance.ShieldEquipped || (Object)(object)__instance.CurrentWeapon == (Object)null || !CustomWeaponBehaviour.Instance.attackCancelByBlockBehaviour.IsBlockMode(__instance))
		{
			return true;
		}
		int num = (int)At.GetValue(typeof(Character), (object)__instance, "m_dodgeAllowedInAction");
		if (num > 0 && __instance.NextAtkAllowed > 0)
		{
			((MonoBehaviour)__instance).photonView.RPC("SendBlockStateTrivial", (PhotonTargets)0, new object[1] { true });
			__instance.StealthInput(false);
			return false;
		}
		return true;
	}
}
[HarmonyPatch(typeof(Character), "SendPerformAttackTrivial", new Type[]
{
	typeof(int),
	typeof(int)
})]
public class Character_SendPerformAttackTrivial
{
	[HarmonyPrefix]
	public static void Prefix(Character __instance, ref int _type, ref int _id)
	{
		BehaviourManager.AdaptGrip(__instance, ref _type, ref _id);
	}
}
[HarmonyPatch(typeof(Character), "HitEnded")]
public class Character_HitEnded
{
	[HarmonyPrefix]
	public static void Prefix(Character __instance, ref int _attackID)
	{
		if (_attackID != -2 && !__instance.IsCasting)
		{
			CustomWeaponBehaviour.ResetGrip(__instance);
		}
	}
}
[HarmonyPatch(typeof(Character), "StopLocomotionAction")]
public class Character_StopLocomotionAction
{
	[HarmonyPrefix]
	public static void Prefix(Character __instance)
	{
		CustomWeaponBehaviour.ResetGrip(__instance);
	}
}
[HarmonyPatch(typeof(Character), "ReceiveBlock", new Type[]
{
	typeof(MonoBehaviour),
	typeof(float),
	typeof(Vector3),
	typeof(float),
	typeof(float),
	typeof(Character),
	typeof(float)
})]
public class Character_ReceiveBlock
{
	[HarmonyPrefix]
	public static void Prefix(Character __instance, Character _dealerChar, Vector3 _hitDir, ref float _knockBack)
	{
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		if (CustomWeaponBehaviour.Instance.parryBehaviour.DidSuccessfulParry(__instance.CurrentWeapon))
		{
			float num = _knockBack;
			float? obj;
			if (__instance == null)
			{
				obj = null;
			}
			else
			{
				Weapon currentWeapon = __instance.CurrentWeapon;
				obj = ((currentWeapon != null) ? new float?(currentWeapon.Impact) : null);
			}
			float? num2 = obj;
			_knockBack = num - num2.GetValueOrDefault();
			if (_knockBack < 0f)
			{
				_knockBack = 0f;
			}
			ParryBehaviour parryBehaviour = CustomWeaponBehaviour.Instance.parryBehaviour;
			float? obj2;
			if (__instance == null)
			{
				obj2 = null;
			}
			else
			{
				Weapon currentWeapon2 = __instance.CurrentWeapon;
				obj2 = ((currentWeapon2 != null) ? new float?(currentWeapon2.Impact) : null);
			}
			num2 = obj2;
			parryBehaviour.DeliverParry(__instance, _dealerChar, _hitDir, num2.GetValueOrDefault());
		}
	}
}
[HarmonyPatch(typeof(AttackSkill), "OwnerHasAllRequiredItems")]
public class AttackSkill_OwnerHasAllRequiredItemsMainHand
{
	[HarmonyPrefix]
	public static void Prefix(AttackSkill __instance, out List<WeaponType> __state)
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		__state = null;
		object obj;
		if (__instance == null)
		{
			obj = null;
		}
		else
		{
			Character ownerCharacter = ((EffectSynchronizer)__instance).OwnerCharacter;
			obj = ((ownerCharacter != null) ? ownerCharacter.CurrentWeapon : null);
		}
		Weapon val = (Weapon)obj;
		if (val == null || __instance.RequiredWeaponTypes == null)
		{
			return;
		}
		WeaponType? bastardType = BastardBehaviour.GetBastardType(val.Type);
		if (bastardType.HasValue)
		{
			WeaponType valueOrDefault = bastardType.GetValueOrDefault();
			if (__instance.RequiredWeaponTypes.Contains(valueOrDefault) && !__instance.RequiredWeaponTypes.Contains(val.Type) && CustomWeaponBehaviour.Instance.bastardBehaviour.IsBastardMode(val))
			{
				__state = __instance.RequiredWeaponTypes;
				__instance.RequiredWeaponTypes = new List<WeaponType>(__state);
				__instance.RequiredWeaponTypes.Add(val.Type);
			}
		}
	}

	public static void Postfix(AttackSkill __instance, List<WeaponType> __state)
	{
		if (__state != null)
		{
			__instance.RequiredWeaponTypes = __state;
		}
	}
}
[HarmonyPatch(typeof(AttackSkill), "OwnerHasAllRequiredItems")]
public class AttackSkill_OwnerHasAllRequiredItemsOffHand
{
	[HarmonyPrefix]
	public static void Prefix(AttackSkill __instance, out Tuple<List<WeaponType>, Equipment> __state)
	{
		//IL_0048: 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)
		__state = null;
		Character val = ((__instance != null) ? ((EffectSynchronizer)__instance).OwnerCharacter : null);
		if (val != null)
		{
			Weapon leftHandWeapon = val.LeftHandWeapon;
			if (leftHandWeapon != null && __instance.RequiredOffHandTypes != null && __instance.RequiredOffHandTypes.Contains((WeaponType)30) && ((Item)leftHandWeapon).HasTag(CustomWeaponBehaviour.PointyTag))
			{
				__state = new Tuple<List<WeaponType>, Equipment>(__instance.RequiredOffHandTypes, (Equipment)(object)(val.LeftHandWeapon ?? null));
				__instance.RequiredOffHandTypes = new List<WeaponType>(__state.Item1);
				__instance.RequiredOffHandTypes.Add(leftHandWeapon.Type);
				At.SetValue<Weapon>(leftHandWeapon, typeof(Character), (object)val, "m_leftHandEquipment");
			}
		}
	}

	public static void Postfix(AttackSkill __instance, Tuple<List<WeaponType>, Equipment> __state)
	{
		if (__state != null)
		{
			__instance.RequiredOffHandTypes = __state.Item1;
			At.SetValue<Equipment>(__state.Item2, typeof(Character), (object)((__instance != null) ? ((EffectSynchronizer)__instance).OwnerCharacter : null), "m_leftHandEquipment");
		}
	}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class WeaponDamage_BuildDamage
{
	[HarmonyPrefix]
	public static void Prefix(WeaponDamage __instance, ref AttackSkill ___m_attackSkill, out List<WeaponType> __state)
	{
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		__state = null;
		AttackSkill obj = ___m_attackSkill;
		object obj2;
		if (obj == null)
		{
			obj2 = null;
		}
		else
		{
			Character ownerCharacter = ((EffectSynchronizer)obj).OwnerCharacter;
			obj2 = ((ownerCharacter != null) ? ownerCharacter.CurrentWeapon : null);
		}
		Weapon val = (Weapon)obj2;
		if (val == null || ___m_attackSkill.RequiredWeaponTypes == null)
		{
			return;
		}
		WeaponType? bastardType = BastardBehaviour.GetBastardType(val.Type);
		if (bastardType.HasValue)
		{
			WeaponType valueOrDefault = bastardType.GetValueOrDefault();
			if (true && ___m_attackSkill.RequiredWeaponTypes.Contains(valueOrDefault) && !___m_attackSkill.RequiredWeaponTypes.Contains(val.Type) && CustomWeaponBehaviour.Instance.bastardBehaviour.IsBastardMode(val))
			{
				__state = ___m_attackSkill.RequiredWeaponTypes;
				___m_attackSkill.RequiredWeaponTypes = new List<WeaponType>(__state) { val.Type };
			}
		}
	}

	public static void Postfix(AttackSkill ___m_attackSkill, List<WeaponType> __state)
	{
		if (__state != null && (Object)(object)___m_attackSkill != (Object)null)
		{
			___m_attackSkill.RequiredWeaponTypes = __state;
		}
	}
}
[HarmonyPatch(typeof(AttackSkill), "OwnerHasAllRequiredItems")]
public class AttackSkill_OwnerHasAllRequiredItemsFist
{
	[HarmonyPrefix]
	public static void Prefix(AttackSkill __instance, out Tuple<List<WeaponType>, Equipment> __state)
	{
		//IL_0048: 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)
		__state = null;
		Character val = ((__instance != null) ? ((EffectSynchronizer)__instance).OwnerCharacter : null);
		if (val != null)
		{
			Weapon currentWeapon = val.CurrentWeapon;
			if (currentWeapon != null && __instance.RequiredOffHandTypes != null && __instance.RequiredOffHandTypes.Contains((WeaponType)30) && ((Item)currentWeapon).HasTag(CustomWeaponBehaviour.PointyTag))
			{
				__state = new Tuple<List<WeaponType>, Equipment>(__instance.RequiredOffHandTypes, (Equipment)(object)(val.LeftHandWeapon ?? null));
				__instance.RequiredOffHandTypes = new List<WeaponType>(__state.Item1);
				__instance.RequiredOffHandTypes.Add(currentWeapon.Type);
				At.SetValue<Weapon>(currentWeapon, typeof(Character), (object)val, "m_leftHandEquipment");
			}
		}
	}

	public static void Postfix(AttackSkill __instance, Tuple<List<WeaponType>, Equipment> __state)
	{
		if (__state != null)
		{
			__instance.RequiredOffHandTypes = __state.Item1;
			At.SetValue<Equipment>(__state.Item2, typeof(Character), (object)((__instance != null) ? ((EffectSynchronizer)__instance).OwnerCharacter : null), "m_leftHandEquipment");
		}
	}
}
[HarmonyPatch(typeof(CharacterStats), "GetAmplifiedAttackSpeed")]
public class CharacterStats_GetAmplifiedAttackSpeed
{
	[HarmonyPostfix]
	public static void Postfix(CharacterStats __instance, ref float __result, ref Character ___m_character)
	{
		Character obj = ___m_character;
		Weapon val = ((obj != null) ? obj.CurrentWeapon : null);
		if (!((Object)(object)val == (Object)null))
		{
			CustomBehaviourFormulas.PostAffectSpeed(val, ref __result);
		}
	}
}
[HarmonyPatch(typeof(WeaponStats), "GetAttackStamCost")]
public class WeaponStats_GetAttackStamCost
{
	[HarmonyPostfix]
	public static void Postfix(WeaponStats __instance, Item ___m_item, ref float __result)
	{
		Weapon val = (Weapon)(object)((___m_item is Weapon) ? ___m_item : null);
		if (val != null)
		{
			CustomBehaviourFormulas.PostAffectStaminaCost(val, ref __result);
		}
	}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Weapon_BaseImpact
{
	[HarmonyPostfix]
	public static void Postfix(Weapon __instance, ref float __result)
	{
		CustomBehaviourFormulas.PostAffectImpact(ref __instance, ref __result);
	}
}
[HarmonyPatch(typeof(WeaponStats), "GetAttackImpact")]
public class WeaponStats_GetAttackImpact
{
	[HarmonyPostfix]
	public static void Postfix(WeaponStats __instance, int _attackID, ref float __result, Item ___m_item)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Expected O, but got Unknown
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: 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_006f: Unknown result type (might be due to invalid IL or missing references)
		Weapon val = (Weapon)___m_item;
		WeaponType val2 = val.Type;
		object obj;
		if (val == null)
		{
			obj = null;
		}
		else
		{
			Character ownerCharacter = ((EffectSynchronizer)val).OwnerCharacter;
			obj = ((ownerCharacter != null) ? ownerCharacter.Animator : null);
		}
		Animator val3 = (Animator)obj;
		if (val3 != null && UnityEngineExtensions.HasParameter(val3, "WeaponType"))
		{
			val2 = (WeaponType)val3.GetInteger("WeaponType");
		}
		float num = 1f;
		if (WeaponStatData.WeaponBaseDataDict.Keys.Contains(val2))
		{
			num = WeaponStatData.WeaponBaseDataDict[val2].ImpactMult[_attackID];
		}
		__result = val.Impact * num;
	}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Weapon_Damage
{
	[HarmonyPostfix]
	public static void Postfix(Weapon __instance, ref DamageList __result)
	{
		__result = __result.Clone();
		CustomBehaviourFormulas.PostAffectDamage(ref __instance, ref __result);
	}
}
[HarmonyPatch(typeof(WeaponStats), "GetAttackDamage")]
public class WeaponStats_GetAttackDamage
{
	[HarmonyPostfix]
	public static void Postfix(WeaponStats __instance, int _attackID, ref IList<float> __result, Item ___m_item)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Expected O, but got Unknown
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: 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_007b: Unknown result type (might be due to invalid IL or missing references)
		Weapon val = (Weapon)___m_item;
		WeaponType val2 = val.Type;
		object obj;
		if (val == null)
		{
			obj = null;
		}
		else
		{
			Character ownerCharacter = ((EffectSynchronizer)val).OwnerCharacter;
			obj = ((ownerCharacter != null) ? ownerCharacter.Animator : null);
		}
		Animator val3 = (Animator)obj;
		if (val3 != null && UnityEngineExtensions.HasParameter(val3, "WeaponType"))
		{
			val2 = (WeaponType)val3.GetInteger("WeaponType");
		}
		float[] array = new float[5] { 1f, 1f, 1f, 1f, 1f };
		if (WeaponStatData.WeaponBaseDataDict.Keys.Contains(val2))
		{
			array = WeaponStatData.WeaponBaseDataDict[val2].DamageMult;
		}
		if (_attackID < 0 || _attackID >= array.Length)
		{
			_attackID = 0;
		}
		DamageList damage = val.Damage;
		for (int i = 0; i < damage.Count && i < __result.Count; i++)
		{
			__result[i] = damage[i].Damage * array[_attackID];
		}
	}
}
public class WeaponStatData
{
	public static Dictionary<WeaponType, WeaponStatData> WeaponBaseDataDict = new Dictionary<WeaponType, WeaponStatData>
	{
		{
			(WeaponType)0,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.495f, 1.265f, 1.265f },
				ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.1f, 1.1f },
				StamMult = new float[5] { 1f, 1f, 1.2f, 1.1f, 1.1f }
			}
		},
		{
			(WeaponType)51,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.5f, 1.265f, 1.265f },
				ImpactMult = new float[5] { 1f, 1f, 1.5f, 1.1f, 1.1f },
				StamMult = new float[5] { 1f, 1f, 1.3f, 1.1f, 1.1f }
			}
		},
		{
			(WeaponType)1,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				StamMult = new float[5] { 1f, 1f, 1.2f, 1.2f, 1.2f }
			}
		},
		{
			(WeaponType)52,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				StamMult = new float[5] { 1f, 1f, 1.375f, 1.375f, 1.35f }
			}
		},
		{
			(WeaponType)2,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				ImpactMult = new float[5] { 1f, 1f, 2.5f, 1.3f, 1.3f },
				StamMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f }
			}
		},
		{
			(WeaponType)53,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 0.75f, 1.4f, 1.4f },
				ImpactMult = new float[5] { 1f, 1f, 2f, 1.4f, 1.4f },
				StamMult = new float[5] { 1f, 1f, 1.2f, 1.2f, 1.2f }
			}
		},
		{
			(WeaponType)50,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.7f },
				ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.7f },
				StamMult = new float[5] { 1f, 1f, 1.25f, 1.25f, 1.75f }
			}
		},
		{
			(WeaponType)54,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.4f, 1.3f, 1.2f },
				ImpactMult = new float[5] { 1f, 1f, 1.2f, 1.2f, 1.1f },
				StamMult = new float[5] { 1f, 1f, 1.25f, 1.25f, 1.25f }
			}
		},
		{
			(WeaponType)55,
			new WeaponStatData
			{
				DamageMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				ImpactMult = new float[5] { 1f, 1f, 1.3f, 1.3f, 1.3f },
				StamMult = new float[5] { 1f, 1f, 1.3f, 1.2f, 1.2f }
			}
		}
	};

	public float[] DamageMult;

	public float[] ImpactMult;

	public float[] StamMult;
}
[BepInPlugin("com.ehaugw.customweaponbehaviour", "Custom Weapon Behaviour", "3.1.3")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency("com.ehaugw.holydamagemanager", "1.0.0")]
[BepInDependency("com.ehaugw.tinyhelper", "4.3.4")]
public class CustomWeaponBehaviour : BaseUnityPlugin
{
	public const string GUID = "com.ehaugw.customweaponbehaviour";

	public const string VERSION = "3.1.3";

	public const string NAME = "Custom Weapon Behaviour";

	public static CustomWeaponBehaviour Instance;

	public static Tag BastardTag;

	public static Tag FinesseTag;

	public static Tag HolyWeaponTag;

	public static Tag HalfHandedTag;

	public static Tag SpecialLeapTag;

	public static Tag ParryTag;

	public static Tag BucklerTag;

	public static Tag WandTag;

	public static Tag HandsFreeTag;

	public static Tag LanternTag;

	public static Tag MaulShoveTag;

	public static Tag PointyTag;

	public BastardBehaviour bastardBehaviour = new BastardBehaviour();

	public MaulShoveBehaviour maulShoveBehaviour = new MaulShoveBehaviour();

	public FinesseBehaviour finesseBehaviour = new FinesseBehaviour();

	public HalfHandedBehaviour halfHandedBehaviour = new HalfHandedBehaviour();

	public HolyBehaviour holyBehaviour = new HolyBehaviour();

	public ParryBehaviour parryBehaviour = new ParryBehaviour();

	public AttackCancelByBlockBehaviour attackCancelByBlockBehaviour = new AttackCancelByBlockBehaviour();

	public AttackCancelBySkillBehaviour attackCancelBySkillBehaviour = new AttackCancelBySkillBehaviour();

	public static List<IBastardModifier> IBastardModifiers = new List<IBastardModifier>();

	public static List<IMaulShoveModifier> IMaulShoveModifiers = new List<IMaulShoveModifier>();

	public static List<IBaseDamageModifier> IBaseDamageModifiers = new List<IBaseDamageModifier>();

	internal void Awake()
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Expected O, but got Unknown
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Expected O, but got Unknown
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Expected O, but got Unknown
		IBastardModifiers.Add(new BastardModifier());
		IMaulShoveModifiers.Add(new MaulShoveModifier());
		Instance = this;
		Harmony val = new Harmony("com.ehaugw.customweaponbehaviour");
		val.PatchAll();
		SL.BeforePacksLoaded += BeforePacksLoaded;
		SL.OnPacksLoaded += OnPacksLoaded;
		TinyHelper.OnDescriptionModified = (DescriptionModifier)Delegate.Combine((Delegate?)(object)TinyHelper.OnDescriptionModified, (Delegate?)new DescriptionModifier(CustomTagDescriptionModifier));
	}

	private void CustomTagDescriptionModifier(Item item, ref string description)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		string text = "";
		foreach (Tuple<Tag, string> item2 in new List<Tuple<Tag, string>>
		{
			new Tuple<Tag, string>(PointyTag, "Pointy"),
			new Tuple<Tag, string>(BastardTag, "Bastard"),
			new Tuple<Tag, string>(FinesseTag, "Finesse"),
			new Tuple<Tag, string>(HolyWeaponTag, "Holy"),
			new Tuple<Tag, string>(WandTag, "Wand")
		})
		{
			if (item.HasTag(item2.Item1))
			{
				text = text + ((text.Length > 0) ? ", " : "") + item2.Item2;
			}
		}
		if (text.Length > 0)
		{
			description = text + "\n\n" + description;
		}
	}

	private void BeforePacksLoaded()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: 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_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		PointyTag = TinyTagManager.GetOrMakeTag("Pointy");
		BastardTag = TinyTagManager.GetOrMakeTag("Bastard");
		FinesseTag = TinyTagManager.GetOrMakeTag("Finesse");
		HolyWeaponTag = TinyTagManager.GetOrMakeTag("Holy");
		ParryTag = TinyTagManager.GetOrMakeTag("Parry");
		BucklerTag = TinyTagManager.GetOrMakeTag("Buckler");
		HalfHandedTag = TinyTagManager.GetOrMakeTag("HalfHanded");
		SpecialLeapTag = TinyTagManager.GetOrMakeTag("SpecialLeap");
		WandTag = TinyTagManager.GetOrMakeTag("Wand");
		HandsFreeTag = TinyTagManager.GetOrMakeTag("HandsFreeTag");
		LanternTag = TinyTagManager.GetOrMakeTag("Lantern");
		MaulShoveTag = TinyTagManager.GetOrMakeTag("MaulShoveTag");
	}

	private void OnPacksLoaded()
	{
	}

	public static void ChangeGrip(Character character, WeaponType toMoveset)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Expected O, but got Unknown
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected I4, but got Unknown
		((CharacterKnowledge)character.Inventory.SkillKnowledge).AddItem(new Item());
		if (character != null)
		{
			Animator animator = character.Animator;
			if (animator != null)
			{
				animator.SetInteger("WeaponType", (int)toMoveset);
			}
		}
	}

	public static void ResetGrip(Character character)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Expected I4, but got Unknown
		//IL_0049: 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_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Invalid comparison between Unknown and I4
		Weapon val = ((character != null) ? character.CurrentWeapon : null);
		if (val != null && character != null)
		{
			Animator animator = character.Animator;
			if (animator != null)
			{
				animator.SetInteger("WeaponType", (int)val.Type);
			}
		}
		Equipment val2 = ((character != null) ? character.LeftHandEquipment : null);
		if (val2 != null && ((Item)val2).HasTag(HandsFreeTag) && ((Item)val2).HasTag(LanternTag) && (int)val2.IKType == 0)
		{
			val2.IKType = (IKMode)1;
		}
	}
}
public class MaulShoveModifier : IMaulShoveModifier
{
	public void ApplyDamageModifier(Weapon weapon, DamageList original, ref DamageList result)
	{
		result += original * -0.25f;
	}

	public void ApplyImpactModifier(Weapon weapon, float original, ref float result)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Invalid comparison between Unknown and I4
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Invalid comparison between Unknown and I4
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Invalid comparison between Unknown and I4
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Invalid comparison between Unknown and I4
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Invalid comparison between Unknown and I4
		WeaponType type = weapon.Type;
		WeaponType val = type;
		if ((int)val <= 2)
		{
			if ((int)val <= 1)
			{
				goto IL_002a;
			}
			if ((int)val != 2)
			{
				return;
			}
		}
		else
		{
			if (val - 51 <= 1)
			{
				goto IL_002a;
			}
			if ((int)val != 53)
			{
				return;
			}
		}
		result += original * 0.5f;
		return;
		IL_002a:
		result += original * 2f;
	}

	public void ApplySpeedModifier(Weapon weapon, float original, ref float result)
	{
		result += original * -0.2f;
	}
}
public class BastardModifier : IBastardModifier
{
	public void ApplyDamageModifier(Weapon weapon, DamageList original, ref DamageList result)
	{
		result += original * 0.1f;
	}

	public void ApplyImpactModifier(Weapon weapon, float original, ref float result)
	{
		result += original * 0.1f;
	}

	public void ApplySpeedModifier(Weapon weapon, float original, ref float result)
	{
		result += 0.1f;
	}

	public void ApplyStaminaModifier(Weapon weapon, float original, ref float stamina)
	{
		stamina += original * -0.4f;
	}
}

plugins/EffectSourceConditions.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using TinyHelper;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace EffectSourceConditions;

public class DynamicSkillStat : MonoBehaviour
{
	public float ManaCost = 0f;

	public float StaminaCost = 0f;

	public float HealthCost = 0f;

	public float Cooldown = 2f;

	public float DurabilityCost = 0f;

	public SpellCastType CastType = (SpellCastType)(-1);

	public SpellCastModifier CastModifier = (SpellCastModifier)(-1);

	public float MobileCastMovementMult = -1f;

	public int CastSheatheRequired = 0;

	public bool CastLocomotionEnabled = false;

	public void SetSkillStats(Skill skill)
	{
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		skill.ManaCost = ManaCost;
		skill.StaminaCost = StaminaCost;
		skill.HealthCost = HealthCost;
		skill.DurabilityCost = DurabilityCost;
		((Item)skill).CastSheathRequired = CastSheatheRequired;
		((Item)skill).MobileCastMovementMult = MobileCastMovementMult;
		((Item)skill).CastModifier = CastModifier;
		((Item)skill).CastLocomotionEnabled = CastLocomotionEnabled;
		if (((Item)skill).ActivateEffectAnimType != CastType)
		{
			At.SetValue<SpellCastType>(CastType, typeof(Item), (object)skill, "m_activateEffectAnimType");
		}
		if (!skill.InCooldown())
		{
			skill.Cooldown = Cooldown;
		}
	}

	public static void UnsetSkillStats(Skill skill)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Invalid comparison between Unknown and I4
		skill.ManaCost = 0f;
		skill.StaminaCost = 0f;
		skill.HealthCost = 0f;
		skill.DurabilityCost = 0f;
		((Item)skill).CastSheathRequired = 0;
		((Item)skill).MobileCastMovementMult = -1f;
		((Item)skill).CastModifier = (SpellCastModifier)0;
		((Item)skill).CastLocomotionEnabled = false;
		if ((int)((Item)skill).ActivateEffectAnimType != -1)
		{
			At.SetValue<SpellCastType>((SpellCastType)(-1), typeof(Item), (object)skill, "m_activateEffectAnimType");
		}
		if (!skill.InCooldown())
		{
			skill.Cooldown = 0f;
		}
	}

	public static void TryUpdateSkillStats(Skill skill)
	{
		DynamicSkillStat[] componentsInChildren = ((Component)skill).gameObject.GetComponentsInChildren<DynamicSkillStat>();
		if (componentsInChildren == null || componentsInChildren.Length == 0)
		{
			return;
		}
		bool flag = false;
		DynamicSkillStat[] array = componentsInChildren;
		foreach (DynamicSkillStat dynamicSkillStat in array)
		{
			Character ownerCharacter = ((EffectSynchronizer)skill).OwnerCharacter;
			if (ownerCharacter == null)
			{
				continue;
			}
			SourceCondition[] components = ((Component)dynamicSkillStat).gameObject.GetComponents<SourceCondition>();
			if (components == null)
			{
				continue;
			}
			SourceCondition[] array2 = components;
			foreach (SourceCondition sourceCondition in array2)
			{
				if (sourceCondition.CharacterHasRequirement(ownerCharacter))
				{
					dynamicSkillStat.SetSkillStats(skill);
					flag = true;
				}
			}
		}
		if (!flag)
		{
			UnsetSkillStats(skill);
		}
	}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
public class Item_Description
{
	[HarmonyPrefix]
	public static void Prefix(Item __instance)
	{
		Skill val = (Skill)(object)((__instance is Skill) ? __instance : null);
		if (val != null)
		{
			DynamicSkillStat.TryUpdateSkillStats(val);
		}
	}
}
[HarmonyPatch(typeof(Skill), "HasBaseRequirements")]
public class Skill_HasBaseRequirements
{
	[HarmonyPrefix]
	public static void Prefix(Skill __instance)
	{
		DynamicSkillStat.TryUpdateSkillStats(__instance);
	}
}
[BepInPlugin("com.ehaugw.effectsourceconditions", "Effect Source Conditions", "2.2.1")]
public class EffectSourceConditions : BaseUnityPlugin
{
	[HarmonyPatch(/*Could not decode attribute arguments.*/)]
	public class WeaponDamage_BuildDamage
	{
		[HarmonyPrefix]
		public static bool Prefix(Effect __instance, Character _targetCharacter, ref DamageList _list, ref float _knockback)
		{
			return HasSourceConditions(__instance);
		}
	}

	[HarmonyPatch(/*Could not decode attribute arguments.*/)]
	public class PunctualDamage_BuildDamage
	{
		[HarmonyPrefix]
		public static bool Prefix(Effect __instance, Character _targetCharacter, ref DamageList _list, ref float _knockback)
		{
			return HasSourceConditions(__instance);
		}
	}

	[HarmonyPatch(typeof(Effect), "TryTriggerConditions", new Type[]
	{
		typeof(Character),
		typeof(bool)
	})]
	public class Effect_TryTriggerConditions
	{
		[HarmonyPrefix]
		public static bool Prefix(Effect __instance, Character _affectedCharacter, bool _skipPriority)
		{
			return HasSourceConditions(__instance);
		}
	}

	public const string GUID = "com.ehaugw.effectsourceconditions";

	public const string VERSION = "2.2.1";

	public const string NAME = "Effect Source Conditions";

	public const string EFFECTS_CONTAINER_ACTIVATION = "ActivationEffects";

	public const string EFFECTS_CONTAINER = "Effects";

	public const string SOURCE_CONDITION_CONTAINER = "SourceConditions";

	public const string EFFECTS_MANUAL_CONTAINER = "ManualContainer";

	internal void Awake()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		Harmony val = new Harmony("com.ehaugw.effectsourceconditions");
		val.PatchAll();
	}

	public static bool HasSourceConditions(Effect __instance)
	{
		object obj;
		if (__instance == null)
		{
			obj = null;
		}
		else
		{
			Transform transform = ((Component)__instance).transform;
			if (transform == null)
			{
				obj = null;
			}
			else
			{
				Transform obj2 = transform.Find("SourceConditions");
				if (obj2 == null)
				{
					obj = null;
				}
				else
				{
					GameObject gameObject = ((Component)obj2).gameObject;
					obj = ((gameObject != null) ? gameObject.GetComponents<SourceCondition>() : null);
				}
			}
		}
		if (obj == null)
		{
			obj = new SourceCondition[0];
		}
		SourceCondition[] array = (SourceCondition[])obj;
		foreach (SourceCondition sourceCondition in array)
		{
			if (!sourceCondition.CharacterHasRequirement(__instance.SourceCharacter))
			{
				return false;
			}
		}
		return true;
	}
}
public class EffectSourceConditionChecker : EffectCondition
{
	protected override bool CheckIsValid(Character _affectedCharacter)
	{
		SourceCondition[] componentsInChildren = ((Component)((Component)this).transform.parent.parent).gameObject.GetComponentsInChildren<SourceCondition>();
		if (componentsInChildren != null)
		{
			SourceCondition[] array = componentsInChildren;
			foreach (SourceCondition sourceCondition in array)
			{
				if (sourceCondition.CharacterHasRequirement(_affectedCharacter))
				{
					return !base.Invert;
				}
			}
		}
		return base.Invert;
	}

	public static ActivationCondition AddToSkill(Skill skill)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Expected O, but got Unknown
		Transform orMake = TinyGameObjectManager.GetOrMake(((Component)skill).transform, "AdditionalActivationConditions", true, true);
		GameObject gameObject = ((Component)TinyGameObjectManager.GetOrMake(orMake, "EffectSourceConditionChecker", true, true)).gameObject;
		ActivationCondition val = new ActivationCondition();
		EffectSourceConditionChecker condition = gameObject.AddComponent<EffectSourceConditionChecker>();
		val.Condition = (EffectCondition)(object)condition;
		At.SetValue<string>("This would have no effect.", typeof(ActivationCondition), (object)val, "m_defaultMessage");
		List<ActivationCondition> list = (At.GetValue(typeof(Skill), (object)skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
		list.Add(val);
		At.SetValue<ActivationCondition[]>(list.ToArray(), typeof(Skill), (object)skill, "m_additionalConditions");
		return val;
	}
}
public abstract class SourceCondition : MonoBehaviour
{
	public abstract bool CharacterHasRequirement(Character character);
}
public class SourceConditionEquipment : SourceCondition
{
	public int RequiredItemID;

	public bool Inverted = false;

	public Item RequiredSkill
	{
		get
		{
			return ResourcesPrefabManager.Instance.GetItemPrefab(RequiredItemID);
		}
		set
		{
			RequiredItemID = value.ItemID;
		}
	}

	public override bool CharacterHasRequirement(Character character)
	{
		int result;
		if (RequiredItemID != 0)
		{
			int? obj;
			if (character == null)
			{
				obj = null;
			}
			else
			{
				CharacterInventory inventory = character.Inventory;
				if (inventory == null)
				{
					obj = null;
				}
				else
				{
					CharacterEquipment equipment = inventory.Equipment;
					obj = ((equipment != null) ? new int?(equipment.ItemEquippedCount(RequiredItemID)) : null);
				}
			}
			int? num = obj;
			result = (((num.GetValueOrDefault() > 0) ^ Inverted) ? 1 : 0);
		}
		else
		{
			result = 1;
		}
		return (byte)result != 0;
	}
}
public class SourceConditionMana : SourceCondition
{
	public float ManaCost = 0f;

	public bool Inverted = false;

	public override bool CharacterHasRequirement(Character character)
	{
		return (ManaCost <= 0f || character.Mana >= character.Stats.GetFinalManaConsumption((Tag[])null, ManaCost)) ^ Inverted;
	}
}
public class SourceConditionQuest : SourceCondition
{
	public int[] Quests;

	public bool Inverted = false;

	public LogicType Logic = (LogicType)0;

	public override bool CharacterHasRequirement(Character character)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		return QuestRequirements.HasQuestKnowledge(character, Quests, Logic, Inverted, false);
	}
}
public class SourceConditionStatusEffect : SourceCondition
{
	public string statusEffectName;

	public bool Inverted = false;

	public StatusEffect RequiredStatusEffect
	{
		get
		{
			return ResourcesPrefabManager.Instance.GetStatusEffectPrefab(statusEffectName);
		}
		set
		{
			statusEffectName = value.IdentifierName;
		}
	}

	public override bool CharacterHasRequirement(Character character)
	{
		int num;
		if (statusEffectName != null)
		{
			bool? obj;
			if (character == null)
			{
				obj = null;
			}
			else
			{
				StatusEffectManager statusEffectMngr = character.StatusEffectMngr;
				obj = ((statusEffectMngr != null) ? new bool?(statusEffectMngr.HasStatusEffect(statusEffectName)) : null);
			}
			bool? flag = obj;
			num = (flag.GetValueOrDefault() ? 1 : 0);
		}
		else
		{
			num = 0;
		}
		return (byte)((uint)num ^ (Inverted ? 1u : 0u)) != 0;
	}
}
public class SourceConditionSkill : SourceCondition
{
	public int RequiredSkillID;

	public bool Inverted = false;

	public Item RequiredSkill
	{
		get
		{
			return ResourcesPrefabManager.Instance.GetItemPrefab(RequiredSkillID);
		}
		set
		{
			RequiredSkillID = value.ItemID;
		}
	}

	public override bool CharacterHasRequirement(Character character)
	{
		int result;
		if (RequiredSkillID != 0)
		{
			bool? obj;
			if (character == null)
			{
				obj = null;
			}
			else
			{
				CharacterInventory inventory = character.Inventory;
				if (inventory == null)
				{
					obj = null;
				}
				else
				{
					CharacterSkillKnowledge skillKnowledge = inventory.SkillKnowledge;
					obj = ((skillKnowledge != null) ? new bool?(((CharacterKnowledge)skillKnowledge).IsItemLearned(RequiredSkillID)) : null);
				}
			}
			bool? flag = obj;
			result = ((flag.GetValueOrDefault() ^ Inverted) ? 1 : 0);
		}
		else
		{
			result = 1;
		}
		return (byte)result != 0;
	}
}

plugins/HolyDamageManager.dll

Decompiled 6 months ago
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace HolyDamageManager;

[BepInPlugin("com.ehaugw.holydamagemanager", "Holy Damage Manager", "1.0.0")]
public class HolyDamageManager : BaseUnityPlugin
{
	public const string GUID = "com.ehaugw.holydamagemanager";

	public const string VERSION = "1.0.0";

	public const string NAME = "Holy Damage Manager";

	private static Types m_holyDamageType;

	private static Tag m_holyDamageTag;

	internal void Awake()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		SetHolyType((Types)3);
		SetHolyTag(Tag.None);
	}

	public static void SetHolyType(Types type)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		m_holyDamageType = type;
	}

	public static void SetHolyTag(Tag tag)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		m_holyDamageTag = tag;
	}

	public static float BuffHolyDamageOrHealing(Character character, float value)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Expected O, but got Unknown
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		DamageList val = new DamageList(GetDamageType(), value);
		character.Stats.GetAmplifiedDamage((IList<Tag>)(object)new Tag[1] { GetDamageTag() }, ref val);
		return val.TotalDamage;
	}

	public static Tag GetDamageTag()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		return m_holyDamageTag;
	}

	public static Types GetDamageType()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		return m_holyDamageType;
	}

	public static int GetHolyIndex()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected I4, but got Unknown
		return (int)GetDamageType();
	}

	public static float[] GetHolyDamageBonusArray(float damageBonus)
	{
		float[] array = new float[9];
		array[GetHolyIndex()] = damageBonus;
		return array;
	}
}

plugins/ImpendingDoom.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using HarmonyLib;
using HolyDamageManager;
using SideLoader;
using TinyHelper;
using TinyHelper.Effects;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
namespace ImpendingDoom;

public class WillDieFromImpendingDoom : EffectCondition
{
	protected override bool CheckIsValid(Character _affectedCharacter)
	{
		StatusEffect statusEffectOfName = _affectedCharacter.StatusEffectMngr.GetStatusEffectOfName(ImpendingDoomMod.Instance.impendingDoomInstance.IdentifierName);
		if (statusEffectOfName != null)
		{
			float num = ImpendingDoom.RemainingDamage(_affectedCharacter, statusEffectOfName);
			if (num >= _affectedCharacter.Health && num >= 40f)
			{
				return true;
			}
		}
		return false;
	}
}
public class EffectInitializer
{
	public static StatusEffect MakeImpendingDoomPrefab()
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: Unknown result type (might be due to invalid IL or missing references)
		//IL_014f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
		string impendingDoomEffectName = ModTheme.ImpendingDoomEffectName;
		string[] obj = new string[5] { "Take 1 ", null, null, null, null };
		Types damageType = HolyDamageManager.GetDamageType();
		obj[1] = ((object)(Types)(ref damageType)).ToString();
		obj[2] = " over time and be smitten by thunder if you build up too much ";
		obj[3] = ModTheme.ImpendingDoomEffectName;
		obj[4] = ".";
		string text = string.Concat(obj);
		string text2 = Directory.GetParent(typeof(ImpendingDoomMod).Assembly.Location).ToString();
		StatusEffect val = TinyEffectManager.MakeStatusEffectPrefab("ImpendingDoom", "ImpendingDoom", text, 15f, 1f, (StackBehaviors)1, "HolyBlaze", true, (string)null, (UID?)null, "com.ehaugw.impendingdoom", "\\SideLoader\\Texture2D\\impendingDoomIcon.png", impendingDoomEffectName, text2);
		EffectSignature statusEffectSignature = val.StatusEffectSignature;
		Transform transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)statusEffectSignature).transform).transform;
		ImpendingDoom impendingDoom = ((Component)transform).gameObject.AddComponent<ImpendingDoom>();
		((Effect)impendingDoom).UseOnce = false;
		transform = TinyGameObjectManager.MakeFreshObject("Effects", true, true, ((Component)statusEffectSignature).transform).transform;
		WillDieFromImpendingDoom willDieFromImpendingDoom = ((Component)transform).gameObject.AddComponent<WillDieFromImpendingDoom>();
		ShootBlastFromEffect val2 = ((Component)transform).gameObject.AddComponent<ShootBlastFromEffect>();
		((Effect)val2).UseOnce = true;
		((Behaviour)val2).enabled = true;
		((Component)val2).transform.parent = transform;
		((ShootBlast)val2).BaseBlast = SL_ShootBlast.GetBlastPrefab((BlastPrefabs)99).GetComponent<Blast>();
		((ShootBlast)val2).InstanstiatedAmount = 5;
		((Shooter)val2).CastPosition = (CastPositionType)0;
		((Shooter)val2).TargetType = (TargetTypes)0;
		((Shooter)val2).TransformName = "ShooterTransform";
		((ShootBlast)val2).UseTargetCharacterPositionType = false;
		((Effect)val2).SyncType = (SyncTypes)0;
		((Effect)val2).OverrideEffectCategory = (EffectCategories)0;
		((Effect)val2).BasePotencyValue = 1f;
		((Effect)val2).Delay = 0.25f;
		((Shooter)val2).LocalCastPositionAdd = new Vector3(0f, -1f, 0f);
		((ShootBlast)val2).BaseBlast.Radius = 4f;
		statusEffectSignature.Effects = new List<Effect>
		{
			(Effect)(object)impendingDoom,
			(Effect)(object)val2
		};
		Transform val3 = ((Component)((ShootBlast)val2).BaseBlast).transform.Find("Effects");
		PunctualDamage component = ((Component)val3).GetComponent<PunctualDamage>();
		Object.Destroy((Object)(object)component);
		component = (PunctualDamage)(object)((Component)val3).gameObject.AddComponent<ImpendingDoomDamage>();
		((Effect)component).Delay = 0.25f;
		component.Knockback = 40f;
		return val;
	}
}
public class ImpendingDoom : Effect
{
	public const float RANGE = 4f;

	public const float LIFE_SPAN = 15f;

	public const float DAMAGE = 15f;

	public const float REFRESH_RATE = 1f;

	public const float BOOM_THRESHOLD = 40f;

	protected override void ActivateLocally(Character character, object[] _infos)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Expected O, but got Unknown
		object field = At.GetField<Effect>((Effect)(object)this, "m_parentStatusEffect");
		StatusEffect val = (StatusEffect)((field is StatusEffect) ? field : null);
		if (val != null && (Object)(object)((EffectSynchronizer)val).SourceCharacter != (Object)null && !character.Invincible)
		{
			float num = HolyDamageManager.BuffHolyDamageOrHealing(((EffectSynchronizer)val).SourceCharacter, 1f);
			DamageList val2 = new DamageList(HolyDamageManager.GetDamageType(), num);
			character.Stats.GetMitigatedDamage((Tag[])null, ref val2, true);
			character.Stats.ReceiveDamage(val2.TotalDamage);
		}
	}

	public static DamageList RemainingDamageList(Character character, StatusEffect parentStatusEffect, bool mitigated = true)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Expected O, but got Unknown
		float num = HolyDamageManager.BuffHolyDamageOrHealing(character, 15f * parentStatusEffect.RemainingLifespan / 15f);
		DamageList result = new DamageList(HolyDamageManager.GetDamageType(), num);
		if (mitigated)
		{
			character.Stats.GetMitigatedDamage((Tag[])null, ref result, true);
		}
		return result;
	}

	public static float RemainingDamage(Character character, StatusEffect parentStatusEffect, bool mitigated = true)
	{
		return RemainingDamageList(character, parentStatusEffect, mitigated).TotalDamage;
	}
}
[HarmonyPatch(typeof(StatusEffectManager), "OverrideStatusEffect", new Type[]
{
	typeof(StatusEffect),
	typeof(StatusEffect)
})]
public class StatusEffectManager_OverrideStatusEffect_ImpendingDoom
{
	[HarmonyPrefix]
	public static void Prefix(StatusEffectManager __instance, StatusEffect _existingEffect, StatusEffect _newEffect, out StatusData __state)
	{
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Expected O, but got Unknown
		__state = null;
		if (_newEffect.IdentifierName == _existingEffect.IdentifierName && _newEffect.IdentifierName == ImpendingDoomMod.Instance.impendingDoomInstance.IdentifierName)
		{
			__state = _newEffect.StatusData;
			_newEffect.StatusData = new StatusData(__state);
			_newEffect.StatusData.LifeSpan = ((_newEffect.RemainingLifespan != 0f) ? _newEffect.RemainingLifespan : _newEffect.StartLifespan) + _existingEffect.RemainingLifespan;
		}
	}

	[HarmonyPostfix]
	public static void Postfix(StatusEffectManager __instance, StatusEffect _existingEffect, StatusEffect _newEffect, StatusData __state)
	{
		if (__state != null)
		{
			_newEffect.StatusData = __state;
		}
	}
}
internal class ImpendingDoomDamage : PunctualDamage
{
	protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
	{
		EffectSynchronizer sourceSynchronizer = ((Effect)this).SourceSynchronizer;
		StatusEffect parentStatusEffect = (StatusEffect)(object)((sourceSynchronizer is StatusEffect) ? sourceSynchronizer : null);
		DamageList val = ImpendingDoom.RemainingDamageList(_affectedCharacter, parentStatusEffect);
		base.Damages = val.List.ToArray();
		base.DamageAmplifiedByOwner = false;
		((PunctualDamage)this).ActivateLocally(_affectedCharacter, _infos);
	}
}
[BepInPlugin("com.ehaugw.impendingdoom", "Impending Doom", "1.0.0")]
public class ImpendingDoomMod : BaseUnityPlugin
{
	public const string GUID = "com.ehaugw.impendingdoom";

	public const string VERSION = "1.0.0";

	public const string NAME = "Impending Doom";

	public static ImpendingDoomMod Instance;

	public StatusEffect impendingDoomInstance;

	internal void Awake()
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		Instance = this;
		Harmony val = new Harmony("com.ehaugw.impendingdoom");
		val.PatchAll();
		SL.OnPacksLoaded += OnPackLoaded;
	}

	private void OnPackLoaded()
	{
		impendingDoomInstance = EffectInitializer.MakeImpendingDoomPrefab();
	}
}
public class ModTheme
{
	public enum Theme
	{
		Elatt,
		DawnWeaver,
		Atheist,
		Crusader
	}

	public static Theme? modTheme;

	public const string ImpendingDoomEffectIdentifierName = "ImpendingDoom";

	public static Theme GetTheme => modTheme ?? Theme.Crusader;

	public static string ImpendingDoomEffectName => "Impending Doom";

	public static string Themifization()
	{
		return null;
	}
}

plugins/TinyHelper.dll

Decompiled 6 months ago
#define DEBUG
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
using BepInEx;
using HarmonyLib;
using Localizer;
using NodeCanvas.DialogueTrees;
using NodeCanvas.Framework;
using NodeCanvas.Tasks.Actions;
using NodeCanvas.Tasks.Conditions;
using Photon;
using TinyHelper.Effects;
using TinyHelper.Interfaces;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("0.0.0.0")]
public static class TinyHelpers
{
	public static void Shuffle<T>(this IList<T> list)
	{
		Random random = new Random();
		int count = list.Count;
		for (int num = list.Count - 1; num > 1; num--)
		{
			int index = random.Next(num + 1);
			T value = list[index];
			list[index] = list[num];
			list[num] = value;
		}
	}
}
namespace TinyHelper
{
	public static class At
	{
		public static BindingFlags flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		public static object Call(object obj, string method, params object[] args)
		{
			MethodInfo method2 = obj.GetType().GetMethod(method, flags);
			if (method2 != null)
			{
				return method2.Invoke(obj, args);
			}
			return null;
		}

		public static void SetValue<T>(T value, Type type, object obj, string field)
		{
			FieldInfo field2 = type.GetField(field, flags);
			if (field2 != null)
			{
				field2.SetValue(obj, value);
			}
		}

		public static object GetValue(Type type, object obj, string value)
		{
			FieldInfo field = type.GetField(value, flags);
			if (field != null)
			{
				return field.GetValue(obj);
			}
			return null;
		}

		public static void InheritBaseValues(object _derived, object _base)
		{
			FieldInfo[] fields = _base.GetType().GetFields(flags);
			foreach (FieldInfo fieldInfo in fields)
			{
				try
				{
					_derived.GetType().GetField(fieldInfo.Name).SetValue(_derived, fieldInfo.GetValue(_base));
				}
				catch
				{
				}
			}
		}
	}
	public class QuestKnowledgeCondition : EffectCondition
	{
		public int[] Quests;

		public LogicType Logic = LogicType.Any;

		protected override bool CheckIsValid(Character _affectedCharacter)
		{
			return QuestRequirements.HasQuestKnowledge(_affectedCharacter, Quests, Logic);
		}
	}
	public class StatusEffectsCondition : EffectCondition
	{
		public enum LogicType
		{
			Any,
			All
		}

		public string[] StatusEffectNames;

		public LogicType Logic = LogicType.Any;

		protected override bool CheckIsValid(Character _affectedCharacter)
		{
			StatusEffectManager statusEffectManager = ((_affectedCharacter != null) ? _affectedCharacter.StatusEffectMngr : null);
			if (statusEffectManager != null)
			{
				IEnumerable<bool> source = StatusEffectNames.Select((string x) => (Object)(object)statusEffectManager.GetStatusEffectOfName(x) != (Object)null);
				return (Logic == LogicType.Any) ? source.Any((bool x) => x) : source.All((bool x) => x);
			}
			return false;
		}
	}
	public class AddNewStatusEffectRandom : AddStatusEffectRandom
	{
		protected override bool TryTriggerConditions()
		{
			List<StatusEffect> list = base.Statuses.ToList();
			list.Shuffle();
			base.ForceID = -1;
			for (int i = 0; i < list.Count; i++)
			{
				StatusEffect val = list[i];
				if (!((Object)(object)val == (Object)null) && !((Object)(object)((Effect)this).m_affectedCharacter == (Object)null) && !((Effect)this).m_affectedCharacter.StatusEffectMngr.HasStatusEffect(val.EffectFamily))
				{
					base.ForceID = UnityEngineExtensions.IndexOf<StatusEffect>(base.Statuses, val);
					break;
				}
			}
			return ((AddStatusEffectRandom)this).TryTriggerConditions();
		}
	}
	public class CooldownChangeEffect : Effect
	{
		public float HitKnockbackCooldown = -1f;

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			Item parentItem = ((Effect)this).ParentItem;
			Skill val = (Skill)(object)((parentItem is Skill) ? parentItem : null);
			if (val != null && HitKnockbackCooldown != -1f && _affectedCharacter.IsInKnockback)
			{
				At.SetValue(HitKnockbackCooldown, typeof(Skill), val, "m_remainingCooldownTime");
			}
		}
	}
	public class EquipSkillDurabilityCondition : EquipDurabilityCondition
	{
		protected override bool CheckIsValid(Character _affectedCharacter)
		{
			Skill component = ((Component)((Component)this).transform.parent.parent).gameObject.GetComponent<Skill>();
			if (component != null)
			{
				base.DurabilityRequired = component.DurabilityCost;
			}
			return ((EquipDurabilityCondition)this).CheckIsValid(_affectedCharacter);
		}

		public static ActivationCondition AddToSkill(Skill skill, EquipmentSlotIDs slot)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			Transform orMake = TinyGameObjectManager.GetOrMake(((Component)skill).transform, "AdditionalActivationConditions", setActive: true, dontDestroyOnLoad: true);
			GameObject gameObject = ((Component)TinyGameObjectManager.GetOrMake(orMake, "EquipSkillDurabilityCondition", setActive: true, dontDestroyOnLoad: true)).gameObject;
			ActivationCondition val = new ActivationCondition();
			EquipSkillDurabilityCondition equipSkillDurabilityCondition = gameObject.AddComponent<EquipSkillDurabilityCondition>();
			((EquipDurabilityCondition)equipSkillDurabilityCondition).EquipmentSlot = slot;
			val.Condition = (EffectCondition)(object)equipSkillDurabilityCondition;
			At.SetValue("A required piece of equipment is missing or too damaged to be used this way.", typeof(ActivationCondition), val, "m_defaultMessage");
			List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
			list.Add(val);
			At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
			return val;
		}

		public static ActivationCondition AddToSkillNotBroken(Skill skill, EquipmentSlotIDs slot)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			Transform orMake = TinyGameObjectManager.GetOrMake(((Component)skill).transform, "AdditionalActivationConditions", setActive: true, dontDestroyOnLoad: true);
			GameObject gameObject = ((Component)TinyGameObjectManager.GetOrMake(orMake, "EquipDurabilityCondition", setActive: true, dontDestroyOnLoad: true)).gameObject;
			ActivationCondition val = new ActivationCondition();
			EquipDurabilityCondition val2 = gameObject.AddComponent<EquipDurabilityCondition>();
			val2.EquipmentSlot = slot;
			val2.DurabilityRequired = 0f;
			val.Condition = (EffectCondition)(object)val2;
			At.SetValue("A required piece of equipment is missing or broken.", typeof(ActivationCondition), val, "m_defaultMessage");
			List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
			list.Add(val);
			At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
			return val;
		}
	}
	public class AffectCorruption : Effect
	{
		public float AffectQuantity = 0f;

		public bool AffectOwner = false;

		public bool IsRaw = false;

		protected override KeyValuePair<string, Type>[] GenerateSignature()
		{
			return new KeyValuePair<string, Type>[1]
			{
				new KeyValuePair<string, Type>("Value", typeof(float))
			};
		}

		public override void SetValue(string[] _data)
		{
			if (_data == null || _data.Length >= 1)
			{
				float.TryParse(_data[0], out AffectQuantity);
			}
		}

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			if (AffectOwner)
			{
				_affectedCharacter = ((Effect)this).OwnerCharacter;
			}
			if ((Object)(object)_affectedCharacter != (Object)null && _affectedCharacter.Alive && Object.op_Implicit((Object)(object)_affectedCharacter.PlayerStats))
			{
				_affectedCharacter.PlayerStats.AffectCorruptionLevel(AffectQuantity, !IsRaw);
			}
		}
	}
	public class UseMana : Effect
	{
		public float UsedMana = 0f;

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			_affectedCharacter.Stats.UseMana((Tag[])null, UsedMana);
		}
	}
	public class SpecificImbueCondition : EffectCondition
	{
		public ImbueEffectPreset imbueEffectPreset;

		private bool inverse = false;

		protected override bool CheckIsValid(Character _affectedCharacter)
		{
			Weapon val = ((_affectedCharacter != null) ? _affectedCharacter.CurrentWeapon : null);
			return val != null && val.HasImbuePreset(imbueEffectPreset);
		}

		public static ActivationCondition AddToSkill(Skill skill, ImbueEffectPreset imbueEffectPreset, bool inverse = false)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			GameObject val = new GameObject("SpecificImbueCondition");
			ActivationCondition val2 = new ActivationCondition();
			SpecificImbueCondition specificImbueCondition = val.AddComponent<SpecificImbueCondition>();
			Object.DontDestroyOnLoad((Object)(object)specificImbueCondition);
			val.SetActive(false);
			val2.Condition = (EffectCondition)(object)specificImbueCondition;
			specificImbueCondition.inverse = inverse;
			specificImbueCondition.imbueEffectPreset = imbueEffectPreset;
			At.SetValue("You do not have the required imbue effect.", typeof(ActivationCondition), val2, "m_defaultMessage");
			List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
			list.Add(val2);
			At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
			return val2;
		}
	}
	public class ExtendedAddStatusEffect : AddStatusEffect
	{
		public bool ExtendDuration = false;

		protected override void ActivateLocally(Character _targetCharacter, object[] _infos)
		{
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected O, but got Unknown
			StatusEffect status = base.Status;
			if (ExtendDuration)
			{
				bool? obj;
				if (_targetCharacter == null)
				{
					obj = null;
				}
				else
				{
					StatusEffectManager statusEffectMngr = _targetCharacter.StatusEffectMngr;
					obj = ((statusEffectMngr != null) ? new bool?(statusEffectMngr.HasStatusEffect(status.IdentifierName)) : null);
				}
				bool? flag = obj;
				if (flag.GetValueOrDefault())
				{
					StatusData statusData = status.StatusData;
					status.StatusData = new StatusData(statusData);
					StatusEffect statusEffectOfName = _targetCharacter.StatusEffectMngr.GetStatusEffectOfName(status.IdentifierName);
					float num = ((statusEffectOfName != null) ? statusEffectOfName.RemainingLifespan : 0f);
					float num2 = ((status.RemainingLifespan > 0f) ? status.RemainingLifespan : status.StartLifespan);
					status.StatusData.LifeSpan = num2 + num;
					((AddStatusEffect)this).ActivateLocally(_targetCharacter, _infos);
					status.StatusData = statusData;
					return;
				}
			}
			((AddStatusEffect)this).ActivateLocally(_targetCharacter, _infos);
		}
	}
	public static class AnimatorExtension
	{
		public static bool HasParameter(this Animator animator, string paramName)
		{
			AnimatorControllerParameter[] parameters = animator.parameters;
			foreach (AnimatorControllerParameter val in parameters)
			{
				if (val.name == paramName)
				{
					return true;
				}
			}
			return false;
		}
	}
	public class TinyCharacterManager
	{
		public static Character SpawnCharacter(string uid, Vector3 position, Vector3 rotation)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			Character character = CharacterManager.Instance.GetCharacter(uid);
			if ((Object)(object)character != (Object)null)
			{
				return character;
			}
			object[] array = new object[4]
			{
				4,
				"NewPlayerPrefab",
				uid,
				string.Empty
			};
			GameObject val = PhotonNetwork.InstantiateSceneObject("_characters/NewPlayerPrefab", position, Quaternion.Euler(rotation), (byte)0, array);
			val.SetActive(false);
			Character component = val.GetComponent<Character>();
			component.SetUID(UID.op_Implicit(uid));
			At.SetValue<Character>(component, typeof(int), 1, "m_isAI");
			return component;
		}
	}
	public class TinyDialogueManager
	{
		public static GameObject AssignTrainerTemplate(Transform parentTransform)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			Object obj = Object.Instantiate(Resources.Load("editor/templates/TrainerTemplate"));
			GameObject val = (GameObject)(object)((obj is GameObject) ? obj : null);
			val.transform.parent = parentTransform;
			val.transform.position = parentTransform.position;
			val.transform.rotation = parentTransform.rotation;
			return val;
		}

		public static DialogueActor SetDialogueActorName(GameObject dialogueGameObject, string name)
		{
			DialogueActor componentInChildren = dialogueGameObject.GetComponentInChildren<DialogueActor>();
			componentInChildren.SetName(name);
			return componentInChildren;
		}

		public static Trainer SetTrainerSkillTree(GameObject trainerTemplate, UID skillTreeUID)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			Trainer componentInChildren = trainerTemplate.GetComponentInChildren<Trainer>();
			At.SetValue<UID>(skillTreeUID, typeof(Trainer), componentInChildren, "m_skillTreeUID");
			return componentInChildren;
		}

		public static Graph GetDialogueGraph(GameObject trainerTemplate)
		{
			DialogueTreeController componentInChildren = trainerTemplate.GetComponentInChildren<DialogueTreeController>();
			return ((GraphOwner)componentInChildren).graph;
		}

		public static void SetActorReference(Graph graph, DialogueActor actor)
		{
			List<ActorParameter> list = At.GetValue(typeof(DialogueTree), (graph is DialogueTree) ? graph : null, "_actorParameters") as List<ActorParameter>;
			list[0].actor = (IDialogueActor)(object)actor;
			list[0].name = actor.name;
		}

		public static ActionNode MakeTrainDialogueAction(Graph graph, Trainer trainer)
		{
			Node obj = graph.allNodes[1];
			ActionNode val = (ActionNode)(object)((obj is ActionNode) ? obj : null);
			ActionTask action = val.action;
			((TrainDialogueAction)((action is TrainDialogueAction) ? action : null)).Trainer = new BBParameter<Trainer>(trainer);
			return val;
		}

		public static ActionNode MakeStartQuest(Graph graph, int questID)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			ActionNode val = graph.AddNode<ActionNode>();
			GiveQuest val3 = (GiveQuest)(object)(val.action = (ActionTask)new GiveQuest());
			ref BBParameter<Quest> quest = ref val3.quest;
			Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(questID);
			quest = new BBParameter<Quest>((Quest)(object)((itemPrefab is Quest) ? itemPrefab : null));
			return val;
		}

		public static ActionNode MakeQuestEvent(Graph graph, string EventUID)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			ActionNode val = graph.AddNode<ActionNode>();
			SendQuestEvent val3 = (SendQuestEvent)(object)(val.action = (ActionTask)new SendQuestEvent());
			val3.QuestEventRef = new QuestEventReference
			{
				EventUID = EventUID
			};
			return val;
		}

		public static ConditionNode MakeEventOccuredCondition(Graph graph, string EventUID)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Expected O, but got Unknown
			ConditionNode val = graph.AddNode<ConditionNode>();
			val.condition = (ConditionTask)new Condition_QuestEventOccured();
			return val;
		}

		public static ActionNode MakeGiveItemReward(Graph graph, int itemID, Receiver receiver, int quantity = 1)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			ActionNode val = graph.AddNode<ActionNode>();
			GiveReward val3 = (GiveReward)(object)(val.action = (ActionTask)new GiveReward());
			val3.RewardReceiver = receiver;
			ItemQuantity val4 = new ItemQuantity();
			ItemReference val5 = new ItemReference();
			val5.ItemID = itemID;
			val4.Item = new BBParameter<ItemReference>(val5);
			val4.Quantity = BBParameter<int>.op_Implicit(quantity);
			val3.ItemReward = new List<ItemQuantity> { val4 };
			return val;
		}

		public static StatementNodeExt MakeStatementNode(Graph graph, string name, string statementText)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			StatementNodeExt val = graph.AddNode<StatementNodeExt>();
			val.statement = new Statement(statementText);
			val.SetActorName(name);
			return val;
		}

		public static MultipleChoiceNodeExt MakeMultipleChoiceNode(Graph graph, string[] statementTexts)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_0037: Expected O, but got Unknown
			MultipleChoiceNodeExt val = graph.AddNode<MultipleChoiceNodeExt>();
			foreach (string text in statementTexts)
			{
				val.availableChoices.Add(new Choice
				{
					statement = new Statement
					{
						text = text
					}
				});
			}
			return val;
		}
	}
	public class TinyGameObjectManager
	{
		public static Transform GetOrMake(Transform parent, string child, bool setActive, bool dontDestroyOnLoad)
		{
			return parent.Find(child) ?? MakeFreshObject(child, setActive, dontDestroyOnLoad, parent).transform;
		}

		public static GameObject InstantiateClone(GameObject sourceGameObject, bool setActive, bool dontDestroyOnLoad)
		{
			return InstantiateClone(sourceGameObject, ((Object)sourceGameObject).name + "(Clone)", setActive, dontDestroyOnLoad);
		}

		public static GameObject InstantiateClone(GameObject sourceGameObject, string newGameObjectName, bool setActive, bool dontDestroyOnLoad)
		{
			GameObject val = Object.Instantiate<GameObject>(sourceGameObject);
			val.SetActive(setActive);
			((Object)val).name = newGameObjectName;
			if (dontDestroyOnLoad)
			{
				Object.DontDestroyOnLoad((Object)(object)val);
			}
			return val;
		}

		public static Transform MakeFreshTransform(Transform parent, string child, bool setActive, bool dontDestroyOnLoad)
		{
			return MakeFreshObject(child, setActive, dontDestroyOnLoad, parent).transform;
		}

		public static GameObject MakeFreshObject(string newGameObjectName, bool setActive, bool dontDestroyOnLoad, Transform parent = null)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			GameObject val = new GameObject(newGameObjectName);
			val.SetActive(setActive);
			if ((Object)(object)parent != (Object)null)
			{
				val.transform.SetParent(parent);
			}
			if (dontDestroyOnLoad)
			{
				RecursiveDontDestroyOnLoad(val.transform);
			}
			return val;
		}

		public static void RecursiveDontDestroyOnLoad(Transform transform)
		{
			Transform val = transform;
			while ((Object)(object)val.parent != (Object)null)
			{
				val = val.parent;
			}
			Object.DontDestroyOnLoad((Object)(object)((Component)val).gameObject);
		}
	}
	public enum Behaviour
	{
		Add,
		Purge,
		Replace
	}
	public class TinyItemManager
	{
		private static Dictionary<int, ItemLocalization> m_ItemLocalizationDictionary;

		private static Dictionary<string, Item> m_ItemPrefabDictionary;

		private static Dictionary<int, ItemLocalization> ItemLocalizationDictionary
		{
			get
			{
				if (m_ItemLocalizationDictionary == null)
				{
					m_ItemLocalizationDictionary = At.GetValue(typeof(LocalizationManager), LocalizationManager.Instance, "m_itemLocalization") as Dictionary<int, ItemLocalization>;
				}
				return m_ItemLocalizationDictionary;
			}
		}

		private static Dictionary<string, Item> ItemPrefabDictionary
		{
			get
			{
				if (m_ItemPrefabDictionary == null)
				{
					m_ItemPrefabDictionary = At.GetValue(typeof(ResourcesPrefabManager), null, "ITEM_PREFABS") as Dictionary<string, Item>;
				}
				return m_ItemPrefabDictionary;
			}
		}

		public static bool SetLegacyResult(int itemID, int legacyOutcomeID)
		{
			Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(itemID);
			if ((Object)(object)itemPrefab != (Object)null)
			{
				itemPrefab.LegacyItemID = legacyOutcomeID;
				return true;
			}
			return false;
		}

		public static bool AddEnchantingOption(int itemID, int enchantingRecipeID)
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: 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)
			Item itemPrefab = ResourcesPrefabManager.Instance.GetItemPrefab(itemID);
			EnchantmentRecipe enchantmentRecipeForID = RecipeManager.Instance.GetEnchantmentRecipeForID(enchantingRecipeID);
			if ((Object)(object)enchantmentRecipeForID != (Object)null && (Object)(object)itemPrefab != (Object)null)
			{
				List<IngredientData> list = enchantmentRecipeForID.CompatibleEquipments.CompatibleEquipments.ToList();
				list.Add(new IngredientData
				{
					Type = (IngredientType)1,
					SpecificIngredient = itemPrefab
				});
				enchantmentRecipeForID.CompatibleEquipments = new EquipmentData
				{
					EquipmentTag = enchantmentRecipeForID.CompatibleEquipments.EquipmentTag,
					CompatibleEquipments = list.ToArray()
				};
				return true;
			}
			return false;
		}

		public static Item MakeItem(int newID, int targetID, string name = null, string description = null, string identifierName = null)
		{
			Item val = TryCloneTargetItem(newID, targetID, newID + "_" + identifierName);
			ApplyNameAndDescription(val, name, description);
			return val;
		}

		public static Skill MakeSkill(int newID, int targetID, string name = null, string description = null, string identifierName = null, int? manaCost = 0, int? staminaCost = 0, int? healthCost = 0, bool? ignoreLearnNotification = null, bool? hideInUI = null)
		{
			Item obj = MakeItem(newID, targetID, name, description, identifierName);
			Skill val = (Skill)(object)((obj is Skill) ? obj : null);
			if (manaCost.HasValue)
			{
				val.ManaCost = manaCost.GetValueOrDefault();
			}
			if (healthCost.HasValue)
			{
				val.HealthCost = healthCost.GetValueOrDefault();
			}
			if (staminaCost.HasValue)
			{
				val.StaminaCost = staminaCost.GetValueOrDefault();
			}
			val.IgnoreLearnNotification = ignoreLearnNotification.GetValueOrDefault();
			return val;
		}

		public static Item TryCloneTargetItem(int newID, int targetID, string identifierName = null)
		{
			Dictionary<string, Item> itemPrefabDictionary = ItemPrefabDictionary;
			Item item = GetItem(targetID.ToString());
			if ((Object)(object)item == (Object)null)
			{
				TinyHelper.TinyHelperPrint("Could not find target item with ID " + targetID + ".");
				return null;
			}
			if ((Object)(object)((Component)item).gameObject.GetComponent<Item>() == (Object)null)
			{
				TinyHelper.TinyHelperPrint(((Object)item).name + " is does not have an Item component.");
				return null;
			}
			GameObject val = Object.Instantiate<GameObject>(((Component)item).gameObject);
			val.SetActive(false);
			Object.DontDestroyOnLoad((Object)(object)val);
			Item component = val.GetComponent<Item>();
			component.ItemID = newID;
			((Object)component).name = identifierName ?? (newID + "_" + component.Name.Replace(" ", ""));
			ItemPrefabDictionary.Add(component.ItemID.ToString(), component);
			return component;
		}

		public static void ApplyNameAndDescription(Item item, string name, string description)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Expected O, but got Unknown
			ItemLocalization value = new ItemLocalization(name, description);
			At.SetValue(name, typeof(Item), item, "m_name");
			if (ItemLocalizationDictionary.ContainsKey(item.ItemID))
			{
				ItemLocalizationDictionary[item.ItemID] = value;
			}
			else
			{
				ItemLocalizationDictionary.Add(item.ItemID, value);
			}
		}

		private static Item GetItem(int itemID)
		{
			return GetItem(itemID.ToString());
		}

		private static Item GetItem(string itemID)
		{
			return ItemPrefabDictionary[itemID];
		}
	}
	public class TinyHelperRPCManager : MonoBehaviour
	{
		public static TinyHelperRPCManager Instance;

		internal void Start()
		{
			Instance = this;
			PhotonView val = ((Component)this).gameObject.AddComponent<PhotonView>();
			val.viewID = 954;
			Debug.Log((object)("Registered TinyHelpertRPC with ViewID " + ((MonoBehaviour)this).photonView.viewID));
		}

		[PunRPC]
		public void ApplyAddImbueEffectRPC(string weaponGUID, int infusionID, float duration)
		{
			Item item = ItemManager.Instance.GetItem(weaponGUID);
			Weapon val = (Weapon)(object)((item is Weapon) ? item : null);
			? val2 = val;
			EffectPreset effectPreset = ResourcesPrefabManager.Instance.GetEffectPreset(infusionID);
			((Weapon)val2).AddImbueEffect((ImbueEffectPreset)(object)((effectPreset is ImbueEffectPreset) ? effectPreset : null), duration, (ImbueStack)null);
		}
	}
	public class QuestRequirements
	{
		public static bool HasQuestEvent(string questEventUID)
		{
			return QuestEventManager.Instance.GetEventCurrentStack(questEventUID) > 0;
		}

		public static bool HasQuestKnowledge(Character character, int[] questIDs, LogicType logicType, bool inverted = false, bool requireCompleted = false)
		{
			bool flag = false;
			object obj;
			if (character == null)
			{
				obj = null;
			}
			else
			{
				CharacterInventory inventory = character.Inventory;
				obj = ((inventory != null) ? inventory.QuestKnowledge : null);
			}
			CharacterQuestKnowledge q = (CharacterQuestKnowledge)obj;
			if (q != null)
			{
				IEnumerable<bool> source = questIDs.Select((int x) => ((CharacterKnowledge)q).IsItemLearned(x) && (q.IsQuestCompleted(x) || !requireCompleted));
				flag = flag || ((logicType == LogicType.Any) ? source.Any((bool x) => x) : source.All((bool x) => x));
			}
			return flag ^ inverted;
		}
	}
	public enum LogicType
	{
		Any,
		All
	}
	public class SkillRequirements
	{
		public static bool SafeHasSkillKnowledge(Character character, int skillID)
		{
			bool? obj;
			if (character == null)
			{
				obj = null;
			}
			else
			{
				CharacterInventory inventory = character.Inventory;
				if (inventory == null)
				{
					obj = null;
				}
				else
				{
					CharacterSkillKnowledge skillKnowledge = inventory.SkillKnowledge;
					obj = ((skillKnowledge != null) ? new bool?(((CharacterKnowledge)skillKnowledge).IsItemLearned(skillID)) : null);
				}
			}
			bool? flag = obj;
			return flag.GetValueOrDefault();
		}
	}
	public class CustomTexture
	{
		public enum SpriteBorderTypes
		{
			None,
			Item,
			TrainerSkill
		}

		public enum IconName
		{
			m_itemIcon,
			SkillTreeIcon
		}

		private static Dictionary<string, byte[]> m_loadedTextures;

		private static Dictionary<string, byte[]> LoadedTextures
		{
			get
			{
				if (m_loadedTextures == null)
				{
					m_loadedTextures = new Dictionary<string, byte[]>();
				}
				return m_loadedTextures;
			}
		}

		public static Texture2D LoadTexture(string filePath, int mipCount, bool linear, FilterMode filterMode, float? mipMapBias = null, string rootPath = null)
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			filePath = (rootPath ?? TinyHelper.PLUGIN_ROOT_PATH) + filePath;
			if (!LoadedTextures.ContainsKey(filePath))
			{
				LoadedTextures[filePath] = File.ReadAllBytes(filePath);
			}
			Texture2D val = new Texture2D(4, 4, (TextureFormat)12, mipCount > 0, linear);
			((Texture)val).filterMode = filterMode;
			((Texture)val).mipMapBias = mipMapBias ?? ((Texture)val).mipMapBias;
			ImageConversion.LoadImage(val, LoadedTextures[filePath]);
			((Texture)val).filterMode = (FilterMode)1;
			return val;
		}

		public static Sprite MakeSprite(Texture2D texture, SpriteBorderTypes spriteBorderType)
		{
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			float num;
			float num2;
			float num3;
			float num4;
			switch (spriteBorderType)
			{
			case SpriteBorderTypes.Item:
				num = 1f;
				num2 = 2f;
				num3 = 2f;
				num4 = 3f;
				break;
			case SpriteBorderTypes.TrainerSkill:
				num = 1f;
				num2 = 1f;
				num3 = 1f;
				num4 = 2f;
				break;
			default:
				num = 0f;
				num2 = 0f;
				num3 = 0f;
				num4 = 0f;
				break;
			}
			return Sprite.Create(texture, new Rect(num, num3, (float)((Texture)texture).width - num2, (float)((Texture)texture).height - num4), new Vector2(0f, 0f), 100f, 0u);
		}
	}
	public class CooldownChangeWeaponDamageTargetHealth : WeaponDamageTargetHealth
	{
		public float ExecuteSetCooldown = -1f;

		public float HitKnockbackCooldown = -1f;

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			Item parentItem = ((Effect)this).ParentItem;
			Skill val = (Skill)(object)((parentItem is Skill) ? parentItem : null);
			if (val != null)
			{
				if (HitKnockbackCooldown != -1f && _affectedCharacter.IsInKnockback)
				{
					At.SetValue(HitKnockbackCooldown, typeof(Skill), val, "m_remainingCooldownTime");
				}
				bool isDead = _affectedCharacter.IsDead;
				((WeaponDamage)this).ActivateLocally(_affectedCharacter, _infos);
				if (!isDead && _affectedCharacter.IsDead && ExecuteSetCooldown != -1f)
				{
					At.SetValue(ExecuteSetCooldown, typeof(Skill), val, "m_remainingCooldownTime");
				}
			}
		}
	}
	public class ToggleEffect : Effect
	{
		public StatusEffect StatusEffectInstance;

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			if (_affectedCharacter.StatusEffectMngr.HasStatusEffect(StatusEffectInstance.IdentifierName))
			{
				_affectedCharacter.StatusEffectMngr.CleanseStatusEffect(((Object)StatusEffectInstance).name);
			}
			else
			{
				_affectedCharacter.StatusEffectMngr.AddStatusEffect(StatusEffectInstance, ((Effect)this).SourceCharacter);
			}
		}
	}
	public class AddThenSpreadStatus : AddStatusEffect
	{
		public float Range;

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			if (base.AffectController)
			{
				_affectedCharacter = ((Effect)this).OwnerCharacter;
			}
			if ((Object)(object)((_affectedCharacter != null) ? _affectedCharacter.StatusEffectMngr : null) == (Object)null || (Object)(object)base.Status == (Object)null)
			{
				return;
			}
			if (_affectedCharacter.StatusEffectMngr.HasStatusEffect(base.Status.IdentifierName))
			{
				List<Character> source = new List<Character>();
				CharacterManager.Instance.FindCharactersInRange(_affectedCharacter.CenterPosition, Range, ref source);
				foreach (Character item in source.Where((Character c) => !c.IsAlly(((Effect)this).SourceCharacter)))
				{
					((AddStatusEffect)this).ActivateLocally(item, _infos);
				}
			}
			((AddStatusEffect)this).ActivateLocally(_affectedCharacter, _infos);
		}
	}
	public class EmptyOffHandCondition : EffectCondition
	{
		public bool AllowDrawnTwoHandedInRight = false;

		public bool AllowSheathedTwoHandedInLeft = false;

		protected override bool CheckIsValid(Character _affectedCharacter)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_affectedCharacter == (Object)null)
			{
				goto IL_00dc;
			}
			bool? obj;
			if (_affectedCharacter == null)
			{
				obj = null;
			}
			else
			{
				Equipment leftHandEquipment = _affectedCharacter.LeftHandEquipment;
				obj = ((leftHandEquipment != null) ? new bool?(((Item)leftHandEquipment).HasTag(TinyTagManager.GetOrMakeTag("HandsFreeTag"))) : null);
			}
			if (obj ?? true)
			{
				bool? obj2;
				if (_affectedCharacter == null)
				{
					obj2 = null;
				}
				else
				{
					Weapon currentWeapon = _affectedCharacter.CurrentWeapon;
					obj2 = ((currentWeapon != null) ? new bool?(((Equipment)currentWeapon).TwoHanded) : null);
				}
				bool? flag = obj2;
				if (!flag.GetValueOrDefault())
				{
					goto IL_00dc;
				}
			}
			if (!_affectedCharacter.Sheathed && AllowDrawnTwoHandedInRight)
			{
				Weapon currentWeapon2 = _affectedCharacter.CurrentWeapon;
				if (currentWeapon2 == null || ((Equipment)currentWeapon2).TwoHandedRight)
				{
					goto IL_00dc;
				}
			}
			int result;
			if (_affectedCharacter.Sheathed && AllowSheathedTwoHandedInLeft)
			{
				Weapon currentWeapon3 = _affectedCharacter.CurrentWeapon;
				result = ((currentWeapon3 == null || ((Equipment)currentWeapon3).TwoHandedRight) ? 1 : 0);
			}
			else
			{
				result = 0;
			}
			goto IL_00dd;
			IL_00dc:
			result = 1;
			goto IL_00dd;
			IL_00dd:
			return (byte)result != 0;
		}

		public static ActivationCondition AddToSkill(Skill skill, bool allowDrawnTwoHandedInRight = false, bool allowSheathedTwoHandedInLeft = false)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			GameObject val = new GameObject("EmptyOffhandCondition");
			ActivationCondition val2 = new ActivationCondition();
			EmptyOffHandCondition emptyOffHandCondition = val.AddComponent<EmptyOffHandCondition>();
			Object.DontDestroyOnLoad((Object)(object)emptyOffHandCondition);
			val.SetActive(false);
			val2.Condition = (EffectCondition)(object)emptyOffHandCondition;
			emptyOffHandCondition.AllowDrawnTwoHandedInRight = allowDrawnTwoHandedInRight;
			emptyOffHandCondition.AllowSheathedTwoHandedInLeft = allowSheathedTwoHandedInLeft;
			At.SetValue("Requires an empty left hand.", typeof(ActivationCondition), val2, "m_defaultMessage");
			List<ActivationCondition> list = (At.GetValue(typeof(Skill), skill, "m_additionalConditions") as ActivationCondition[])?.ToList() ?? new List<ActivationCondition>();
			list.Add(val2);
			At.SetValue(list.ToArray(), typeof(Skill), skill, "m_additionalConditions");
			return val2;
		}
	}
	internal class InputEnablerEffect : Effect
	{
		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			StatusEffect parentStatusEffect = base.m_parentStatusEffect;
			if (parentStatusEffect != null && (double)((_affectedCharacter != null) ? _affectedCharacter.AnimMoveSqMagnitude : 0f) > 0.1 && (double)parentStatusEffect.Age > 0.5)
			{
				StatusEffectManager statusEffectMngr = _affectedCharacter.StatusEffectMngr;
				if (statusEffectMngr != null)
				{
					statusEffectMngr.CleanseStatusEffect(parentStatusEffect.IdentifierName);
				}
				_affectedCharacter.ForceCancel(true, true);
			}
		}
	}
	internal class TinyUnofficialPatches
	{
	}
	[HarmonyPatch(typeof(Skill), "HasEnoughMana")]
	public class Skill_HasEnoughMana
	{
		[HarmonyPostfix]
		public static void Postfix(Skill __instance, ref bool _tryingToActivate, ref bool __result)
		{
			if (__instance.ManaCost <= 0f)
			{
				__result = true;
			}
		}
	}
	[HarmonyPatch(typeof(Skill), "HasEnoughStamina")]
	public class Skill_HasEnoughStamina
	{
		[HarmonyPostfix]
		public static void Postfix(Skill __instance, ref bool _tryingToActivate, ref bool __result)
		{
			if (__instance.StaminaCost <= 0f)
			{
				__result = true;
			}
		}
	}
	[HarmonyPatch(typeof(Skill), "HasEnoughHealth")]
	public class Skill_HasEnoughHealth
	{
		[HarmonyPostfix]
		public static void Postfix(Skill __instance, ref bool _tryingToActivate, ref bool __result)
		{
			if (__instance.HealthCost <= 0f)
			{
				__result = true;
			}
		}
	}
	public class WeaponManager
	{
		public static Dictionary<WeaponType, float> Speeds = new Dictionary<WeaponType, float>
		{
			{
				(WeaponType)0,
				1.251f
			},
			{
				(WeaponType)1,
				1.399f
			},
			{
				(WeaponType)2,
				1.629f
			},
			{
				(WeaponType)51,
				1.71f
			},
			{
				(WeaponType)52,
				1.667f
			},
			{
				(WeaponType)53,
				2.036f
			},
			{
				(WeaponType)54,
				1.499f
			},
			{
				(WeaponType)50,
				1.612f
			}
		};
	}
	public class TinyTagManager
	{
		public static Tag GetOrMakeTag(string name)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			Tag val = ((IEnumerable<Tag>)TagSourceManager.Instance.DbTags).FirstOrDefault((Func<Tag, bool>)((Tag x) => x.TagName == name));
			if (val == Tag.None)
			{
				((Tag)(ref val))..ctor(TagSourceManager.TagRoot, name);
				((Tag)(ref val)).SetTagType((TagTypes)0);
				TagSourceManager.Instance.DbTags.Add(val);
				TagSourceManager.Instance.RefreshTags(true);
				return val;
			}
			return val;
		}

		public static string[] GetOrMakeTags(string[] names)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			foreach (string name in names)
			{
				GetOrMakeTag(name);
			}
			return names;
		}

		public static string[] GetSafeTags(string[] tags)
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			List<string> list = new List<string>();
			foreach (string tag in tags)
			{
				((IEnumerable<Tag>)TagSourceManager.Instance.DbTags).FirstOrDefault((Func<Tag, bool>)((Tag x) => x.TagName == tag || ((Tag)(ref x)).UID == UID.op_Implicit(tag)));
				if (true)
				{
					list.Add(tag);
				}
			}
			return list.ToArray();
		}
	}
	public class TinyUIDManager
	{
		public static UID MakeUID(string name, string modGUID, string category)
		{
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			if (modGUID == null || name == null || category == null)
			{
				Debug.LogError((object)$"TinyUIDManager.MakeUID({name}, {modGUID}, {category} returned a random UID. This will cause trouble in multiplayer!");
				return default(UID);
			}
			return new UID((modGUID + "." + category + "." + name).Replace(" ", "").ToLower());
		}
	}
	[BepInPlugin("com.ehaugw.tinyhelper", "Tiny Helper", "4.3.4")]
	public class TinyHelper : BaseUnityPlugin
	{
		public delegate void DescriptionModifier(Item item, ref string description);

		[HarmonyPatch(typeof(ResourcesPrefabManager), "Load")]
		public class ResourcesPrefabManager_Load
		{
			[HarmonyPostfix]
			public static void Postfix()
			{
				ResourcesPrefabManager instance = ResourcesPrefabManager.Instance;
				if (instance != null && instance.Loaded)
				{
					TinyHelper.OnPrefabLoaded();
				}
			}
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		public class Item_Description
		{
			[HarmonyPostfix]
			public static void Postfix(Item __instance, ref string __result)
			{
				OnDescriptionModified(__instance, ref __result);
			}
		}

		public const string GUID = "com.ehaugw.tinyhelper";

		public const string VERSION = "4.3.4";

		public const string NAME = "Tiny Helper";

		public static DescriptionModifier OnDescriptionModified;

		public static TinyHelper Instance;

		private static int tinyHelperPrintedMessages;

		public static string PLUGIN_ROOT_PATH => typeof(TinyHelper).Assembly.Location + "\\..\\..\\";

		public static event Action OnPrefabLoaded;

		internal void Awake()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			Instance = this;
			GameObject val = new GameObject("CrusaderRPC");
			Object.DontDestroyOnLoad((Object)(object)val);
			val.AddComponent<TinyHelperRPCManager>();
			Harmony val2 = new Harmony("com.ehaugw.tinyhelper");
			val2.PatchAll();
		}

		public static void TinyHelperPrint(string str)
		{
			Debug.Log((object)("TinyHelper #" + tinyHelperPrintedMessages++ + ": " + str));
		}

		static TinyHelper()
		{
			TinyHelper.OnPrefabLoaded = delegate
			{
			};
			OnDescriptionModified = delegate
			{
			};
			tinyHelperPrintedMessages = 0;
		}
	}
	public class DelayedTask
	{
		public static Task GetTask(int milliseconds)
		{
			TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
			new Timer(delegate
			{
				tcs.SetResult(null);
			}).Change(milliseconds, -1);
			return tcs.Task;
		}
	}
	public class TinyEffectManager
	{
		public static StatusEffect MakeStatusEffectPrefab(string effectName, string familyName, string description, float lifespan, float refreshRate, StackBehaviors stackBehavior, string targetStatusName, bool isMalusEffect, string tagID = null, UID? uid = null, string modGUID = null, string iconFileName = null, string displayName = null, string rootPath = null)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Expected O, but got Unknown
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Expected O, but got Unknown
			//IL_0194: Expected O, but got Unknown
			//IL_0219: 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_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Expected O, but got Unknown
			Dictionary<string, StatusEffect> dictionary = At.GetValue(typeof(ResourcesPrefabManager), null, "STATUSEFFECT_PREFABS") as Dictionary<string, StatusEffect>;
			StatusEffectFamily val = MakeStatusEffectFamiliy(familyName, stackBehavior, -1, (LengthTypes)0);
			GameObject val2 = TinyGameObjectManager.InstantiateClone(((Component)dictionary[targetStatusName]).gameObject, effectName, setActive: false, dontDestroyOnLoad: true);
			StatusEffect obj = val2.GetComponent<StatusEffect>() ?? val2.AddComponent<StatusEffect>();
			StatusEffect val3 = obj;
			dictionary[effectName] = obj;
			StatusEffect val4 = val3;
			At.SetValue(effectName, typeof(StatusEffect), val4, "m_identifierName");
			At.SetValue<StatusEffectFamily>(val, typeof(StatusEffect), val4, "m_bindFamily");
			At.SetValue(displayName ?? effectName, typeof(StatusEffect), val4, "m_nameLocKey");
			At.SetValue(description, typeof(StatusEffect), val4, "m_descriptionLocKey");
			val4.RefreshRate = refreshRate;
			val4.IsMalusEffect = isMalusEffect;
			At.SetValue<EffectSignatureModes>((EffectSignatureModes)1, typeof(StatusEffect), val4, "m_effectSignatureMode");
			At.SetValue<FamilyModes>((FamilyModes)0, typeof(StatusEffect), val4, "m_familyMode");
			val4.RequiredStatus = null;
			val4.RemoveRequiredStatus = false;
			if (iconFileName != null)
			{
				val4.OverrideIcon = CustomTexture.MakeSprite(CustomTexture.LoadTexture(iconFileName, 0, linear: false, (FilterMode)0, null, rootPath), CustomTexture.SpriteBorderTypes.None);
			}
			TagSourceSelector value = ((tagID != null) ? new TagSourceSelector(TagSourceManager.Instance.GetTag(UID.op_Implicit(tagID))) : new TagSourceSelector());
			At.SetValue<TagSourceSelector>(value, typeof(StatusEffect), val4, "m_effectType");
			StatusData val5 = new StatusData(val4.StatusData);
			StatusData val6 = val5;
			val4.StatusData = val5;
			StatusData val7 = val6;
			val7.LifeSpan = lifespan;
			List<StatusData> list = At.GetValue(typeof(StatusEffect), val4, "m_statusStack") as List<StatusData>;
			list[0] = val7;
			Object.Destroy((Object)(object)((Component)val2.GetComponentInChildren<EffectSignature>()).gameObject);
			EffectSignature val8 = TinyGameObjectManager.MakeFreshObject("Signature", setActive: true, dontDestroyOnLoad: true).AddComponent<EffectSignature>();
			((Object)val8).name = "Signature";
			val8.SignatureUID = (UID)(((??)uid) ?? TinyUIDManager.MakeUID(effectName, modGUID, "Status Effect"));
			EffectSignature effectSignature = (val7.EffectSignature = val8);
			val.EffectSignature = effectSignature;
			StatusEffectFamilySelector val10 = new StatusEffectFamilySelector();
			((UidSelector<StatusEffectFamily>)(object)val10).Set(val);
			At.SetValue<StatusEffectFamilySelector>(val10, typeof(StatusEffect), val4, "m_stackingFamily");
			return val4;
		}

		public static StatusEffectFamily MakeStatusEffectFamiliy(string familyName, StackBehaviors stackBehavior, int maxStackCount, LengthTypes lengthType, UID? uid = null, string modGUID = null)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			StatusEffectFamily val = new StatusEffectFamily();
			uid = (UID)(((??)uid) ?? ((modGUID != null) ? TinyUIDManager.MakeUID(familyName, modGUID, "Status Effect Family") : UID.Generate()));
			At.SetValue<UID>(uid.Value, typeof(StatusEffectFamily), val, "m_uid");
			val.Name = familyName;
			val.StackBehavior = stackBehavior;
			val.MaxStackCount = maxStackCount;
			val.LengthType = lengthType;
			return val;
		}

		public static void SetNameAndDesc(EffectPreset imbueEffect, string name, string desc)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Expected O, but got Unknown
			ItemLocalization value = new ItemLocalization(name, desc);
			if (At.GetValue(typeof(LocalizationManager), LocalizationManager.Instance, "m_itemLocalization") is Dictionary<int, ItemLocalization> dictionary)
			{
				if (dictionary.ContainsKey(imbueEffect.PresetID))
				{
					dictionary[imbueEffect.PresetID] = value;
				}
				else
				{
					dictionary.Add(imbueEffect.PresetID, value);
				}
			}
		}

		public static AddStatusEffectBuildUp MakeStatusEffectBuildup(Transform effectTransform, string statusEffectName, float buildup)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			AddStatusEffectBuildUp val = ((Component)effectTransform).gameObject.AddComponent<AddStatusEffectBuildUp>();
			val.BuildUpValue = buildup;
			val.Status = ResourcesPrefabManager.Instance.GetStatusEffectPrefab(statusEffectName);
			((Effect)val).OverrideEffectCategory = (EffectCategories)4;
			return val;
		}

		public static AddStatusEffect MakeStatusEffectChance(Transform effectTransform, string statusEffectName, int chance)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			AddStatusEffect val = ((Component)effectTransform).gameObject.AddComponent<AddStatusEffect>();
			val.SetChanceToContract(chance);
			val.Status = ResourcesPrefabManager.Instance.GetStatusEffectPrefab(statusEffectName);
			((Effect)val).OverrideEffectCategory = (EffectCategories)4;
			return val;
		}

		public static WeaponDamage MakeWeaponDamage(Transform effectTransform, float baseDamage, float damageScaling, Types damageType, float knockback)
		{
			//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_002a: 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_0032: Expected O, but got Unknown
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			WeaponDamage val = ((Component)effectTransform).gameObject.AddComponent<WeaponDamage>();
			val.WeaponDamageMult = 1f + damageScaling;
			val.OverrideDType = damageType;
			((PunctualDamage)val).Damages = (DamageType[])(object)new DamageType[1]
			{
				new DamageType(damageType, baseDamage)
			};
			((Effect)val).OverrideEffectCategory = (EffectCategories)4;
			((PunctualDamage)val).Knockback = knockback;
			return val;
		}

		public static WeaponDamage MakeDynamicWeaponDamage(Transform effectTransform, IDamageScaler damageScaler)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			DynamicWeaponDamage dynamicWeaponDamage = ((Component)effectTransform).gameObject.AddComponent<DynamicWeaponDamage>();
			((Effect)dynamicWeaponDamage).OverrideEffectCategory = (EffectCategories)4;
			dynamicWeaponDamage.DamageScaler = damageScaler;
			return (WeaponDamage)(object)dynamicWeaponDamage;
		}

		public static void MakeAbsorbHealth(Transform effectTransform, float absorbRatio)
		{
			AddAbsorbHealth obj = ((Component)effectTransform).gameObject.AddComponent<AddAbsorbHealth>();
			At.SetValue(absorbRatio, typeof(AddAbsorbHealth), obj, "m_healthRatio");
		}

		public static ImbueEffectPreset MakeImbuePreset(int imbueID, string name, string description, string iconFileName = null, int? visualEffectID = null, List<Skill> replaceOnSkills = null, string statusEffectName = null, int? chanceToContract = null, int? buildUp = null, float? scalingDamage = null, float? flatDamage = null, float? knockback = null, Types? damageType = null)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Expected O, but got I4
			//IL_023b->IL023b: Incompatible stack types: O vs I4
			//IL_0234->IL023b: Incompatible stack types: I4 vs O
			//IL_0234->IL023b: Incompatible stack types: O vs I4
			Dictionary<int, EffectPreset> dictionary = (Dictionary<int, EffectPreset>)At.GetValue(typeof(ResourcesPrefabManager), null, "EFFECTPRESET_PREFABS");
			if (!dictionary.ContainsKey(imbueID))
			{
				GameObject val = new GameObject(imbueID + "_" + name.Replace(" ", ""));
				val.SetActive(true);
				Object.DontDestroyOnLoad((Object)(object)val);
				ImbueEffectPreset val2 = val.AddComponent<ImbueEffectPreset>();
				((Object)val2).name = imbueID + "_" + name.Replace(" ", "");
				At.SetValue(imbueID, typeof(EffectPreset), val2, "m_StatusEffectID");
				At.SetValue(name, typeof(ImbueEffectPreset), val2, "m_imbueNameKey");
				At.SetValue(description, typeof(ImbueEffectPreset), val2, "m_imbueDescKey");
				if (visualEffectID.HasValue)
				{
					val2.ImbueStatusIcon = ((ImbueEffectPreset)dictionary[visualEffectID.Value]).ImbueStatusIcon;
					val2.ImbueFX = ((ImbueEffectPreset)dictionary[visualEffectID.Value]).ImbueFX;
				}
				if (iconFileName != null)
				{
					val2.ImbueStatusIcon = CustomTexture.MakeSprite(CustomTexture.LoadTexture(iconFileName, 0, linear: false, (FilterMode)0), CustomTexture.SpriteBorderTypes.None);
				}
				SetNameAndDesc((EffectPreset)(object)val2, name, description);
				dictionary.Add(imbueID, (EffectPreset)(object)val2);
				if (statusEffectName != null && chanceToContract.GetValueOrDefault() > 0)
				{
					MakeStatusEffectChance(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", setActive: true, dontDestroyOnLoad: true), statusEffectName, chanceToContract.GetValueOrDefault());
				}
				if (statusEffectName != null && buildUp.GetValueOrDefault() > 0)
				{
					MakeStatusEffectBuildup(TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", setActive: true, dontDestroyOnLoad: true), statusEffectName, buildUp.GetValueOrDefault());
				}
				if (scalingDamage.GetValueOrDefault() > 0f || flatDamage.GetValueOrDefault() > 0f || knockback.GetValueOrDefault() > 0f)
				{
					object obj = TinyGameObjectManager.GetOrMake(((Component)val2).transform, "Effects", setActive: true, dontDestroyOnLoad: true);
					float valueOrDefault = flatDamage.GetValueOrDefault();
					valueOrDefault = scalingDamage.GetValueOrDefault();
					Types? val3 = damageType;
					int num;
					if (val3.HasValue)
					{
						obj = val3.GetValueOrDefault();
						num = (int)obj;
					}
					else
					{
						num = 9;
						obj = num;
						num = (int)obj;
					}
					MakeWeaponDamage((Transform)(object)num, valueOrDefault, valueOrDefault, (Types)obj, knockback.GetValueOrDefault());
				}
				foreach (Skill item in replaceOnSkills ?? new List<Skill>())
				{
					if ((Object)(object)item != (Object)null)
					{
						((ImbueObject)((Component)item).GetComponentInChildren<ImbueWeapon>()).ImbuedEffect = val2;
					}
				}
				return val2;
			}
			return null;
		}

		public static EffectPreset GetEffectPreset(int effectID)
		{
			Dictionary<int, EffectPreset> dictionary = (Dictionary<int, EffectPreset>)At.GetValue(typeof(ResourcesPrefabManager), null, "EFFECTPRESET_PREFABS");
			if (dictionary.ContainsKey(effectID))
			{
				EffectPreset val = dictionary[effectID];
				if (val != null)
				{
					return val;
				}
			}
			return null;
		}

		public static void AddStatusEffectForDuration(Character character, StatusEffect statusEffect, float duration, Character source = null)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			StatusData statusData = statusEffect.StatusData;
			statusEffect.StatusData = new StatusData(statusData);
			statusEffect.StatusData.LifeSpan = duration;
			character.StatusEffectMngr.AddStatusEffect(statusEffect, source);
			statusEffect.StatusData = statusData;
		}

		public static void ChangeEffectPresetDamageTypeData(EffectPreset effect, Types originalType, Types newType)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			PunctualDamage[] componentsInChildren = ((Component)effect).gameObject.GetComponentsInChildren<PunctualDamage>();
			foreach (PunctualDamage val in componentsInChildren)
			{
				WeaponDamage val2 = (WeaponDamage)(object)((val is WeaponDamage) ? val : null);
				if (val2 != null && val2.OverrideDType == originalType)
				{
					val2.OverrideDType = newType;
				}
				DamageType[] damages = val.Damages;
				foreach (DamageType val3 in damages)
				{
					if (val3.Type == originalType)
					{
						val3.Type = newType;
					}
				}
			}
		}
	}
	public class CasualStagger : Effect
	{
		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			Stagger(_affectedCharacter);
		}

		public static void Stagger(Character character)
		{
			At.SetValue<HurtType>((HurtType)1, typeof(Character), character, "m_hurtType");
			character.Animator.SetTrigger("Knockback");
			character.ForceCancel(false, true);
			((MonoBehaviour)character).Invoke("DelayedForceCancel", 0.3f);
			if (Object.op_Implicit((Object)(object)character.CharacterUI))
			{
				character.CharacterUI.OnPlayerKnocked();
			}
		}
	}
	public class CooldownChangeWeaponDamage : WeaponDamage
	{
		public float ExecutionSetCooldown = -1f;

		public float HitKnockbackCooldown = -1f;

		protected override void ActivateLocally(Character _affectedCharacter, object[] _infos)
		{
			Item parentItem = ((Effect)this).ParentItem;
			Skill val = (Skill)(object)((parentItem is Skill) ? parentItem : null);
			if (val != null)
			{
				if (HitKnockbackCooldown != -1f && _affectedCharacter.IsInKnockback)
				{
					At.SetValue(HitKnockbackCooldown, typeof(Skill), val, "m_remainingCooldownTime");
				}
				bool isDead = _affectedCharacter.IsDead;
				((WeaponDamage)this).ActivateLocally(_affectedCharacter, _infos);
				if (!isDead && _affectedCharacter.IsDead && ExecutionSetCooldown != -1f)
				{
					At.SetValue(ExecutionSetCooldown, typeof(Skill), val, "m_remainingCooldownTime");
				}
			}
		}
	}
}
namespace TinyHelper.Interfaces
{
	public interface IDamageScaler
	{
		float GetWeaponDamageMult(WeaponDamage weaponDamage);

		Types GetOverrideDType(WeaponDamage weaponDamage);

		DamageType[] GetDamages(WeaponDamage weaponDamage);

		float GetKnockback(WeaponDamage weaponDamage);
	}
}
namespace TinyHelper.Effects
{
	public class DynamicWeaponDamage : WeaponDamage
	{
		public IDamageScaler DamageScaler = null;

		private void Recalculate()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			Console.WriteLine("recalculated");
			Debug.WriteLine("recalculated");
			base.WeaponDamageMult = DamageScaler.GetWeaponDamageMult((WeaponDamage)(object)this);
			base.OverrideDType = DamageScaler.GetOverrideDType((WeaponDamage)(object)this);
			((PunctualDamage)this).Damages = DamageScaler.GetDamages((WeaponDamage)(object)this);
			((PunctualDamage)this).Knockback = DamageScaler.GetKnockback((WeaponDamage)(object)this);
		}

		protected override void StartInit()
		{
			Recalculate();
			((WeaponDamage)this).StartInit();
		}

		public override Weapon BuildDamage(Character _targetCharacter, ref DamageList _list, ref float _knockback)
		{
			Recalculate();
			return ((WeaponDamage)this).BuildDamage(_targetCharacter, ref _list, ref _knockback);
		}

		protected override void BuildDamage(Weapon _weapon, Character _targetCharacter, bool _isSkillOrShield, ref DamageList _list, ref float _knockback)
		{
			Recalculate();
			((WeaponDamage)this).BuildDamage(_weapon, _targetCharacter, _isSkillOrShield, ref _list, ref _knockback);
		}

		protected override void ActivateLocally(Character _targetCharacter, object[] _infos)
		{
			Recalculate();
			((WeaponDamage)this).ActivateLocally(_targetCharacter, _infos);
		}

		protected override DamageList DealHit(Character _targetCharacter)
		{
			Recalculate();
			return ((WeaponDamage)this).DealHit(_targetCharacter);
		}

		public override float DamageMult(Character _targetCharacter, bool _isSkill)
		{
			Recalculate();
			return ((WeaponDamage)this).DamageMult(_targetCharacter, _isSkill);
		}

		public override float KnockbackMult(Character _targetCharacter, bool _isSkill)
		{
			Recalculate();
			return ((WeaponDamage)this).KnockbackMult(_targetCharacter, _isSkill);
		}
	}
	public class ShootBlastFromEffect : ShootBlast
	{
		public override void Setup(TargetingSystem _targetSystem, Transform _parent)
		{
			Character sourceCharacter = ((Effect)this).SourceCharacter;
			((Shooter)this).Setup(((sourceCharacter != null) ? sourceCharacter.TargetingSystem : null) ?? _targetSystem, _parent);
		}
	}
}