Decompiled source of WeaponAttributes v1.0.0

WeaponAttributes.dll

Decompiled 17 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace WeaponAttributesMod;

[BepInPlugin("com.valheim.weaponattributes", "WeaponAttributes", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class WeaponAttributesPlugin : BaseUnityPlugin
{
	public const string PluginGUID = "com.valheim.weaponattributes";

	public const string PluginName = "WeaponAttributes";

	public const string PluginVersion = "1.0.0";

	public const string CUSTOM_DATA_KEY = "WeaponAttributes_Enchant";

	public const string CUSTOM_DATA_BOSS_KEY = "WeaponAttributes_Boss";

	public const string CUSTOM_DATA_LEVEL_KEY = "WeaponAttributes_Level";

	public static ConfigEntry<float> BaseAttributeDamage;

	public static ConfigEntry<bool> DualAttributeSplit;

	private Harmony m_harmony;

	public static readonly Dictionary<string, string[]> BossEnchantMap = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase)
	{
		{
			"TrophyEikthyr",
			new string[1] { "lightning" }
		},
		{
			"TrophyTheElder",
			new string[1] { "physical" }
		},
		{
			"TrophyBonemass",
			new string[1] { "poison" }
		},
		{
			"TrophyDragonQueen",
			new string[1] { "frost" }
		},
		{
			"TrophyGoblinKing",
			new string[1] { "fire" }
		},
		{
			"TrophySeekerQueen",
			new string[2] { "poison", "lightning" }
		},
		{
			"TrophyFader",
			new string[2] { "fire", "spirit" }
		}
	};

	public static readonly Dictionary<string, string> BossNameMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
	{
		{ "TrophyEikthyr", "eikthyr" },
		{ "TrophyTheElder", "elder" },
		{ "TrophyBonemass", "bonemass" },
		{ "TrophyDragonQueen", "moder" },
		{ "TrophyGoblinKing", "yagluth" },
		{ "TrophySeekerQueen", "queen" },
		{ "TrophyFader", "fader" }
	};

	public static readonly Dictionary<string, string> BossKeyToTrophyPrefab = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
	{
		{ "eikthyr", "TrophyEikthyr" },
		{ "elder", "TrophyTheElder" },
		{ "bonemass", "TrophyBonemass" },
		{ "moder", "TrophyDragonQueen" },
		{ "yagluth", "TrophyGoblinKing" },
		{ "queen", "TrophySeekerQueen" },
		{ "fader", "TrophyFader" }
	};

	public static readonly Dictionary<string, string> BossMobTrophyMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
	{
		{ "eikthyr", "TrophyDeer" },
		{ "elder", "TrophyForestTroll" },
		{ "bonemass", "TrophyBlob" },
		{ "moder", "TrophyHatchling" },
		{ "yagluth", "TrophyGoblinShaman" },
		{ "queen", "TrophySeekerBrute" },
		{ "fader", "TrophyAsksvin" }
	};

	public static readonly Dictionary<string, string[]> BossKeyAttributesMap = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase)
	{
		{
			"eikthyr",
			new string[1] { "lightning" }
		},
		{
			"elder",
			new string[1] { "physical" }
		},
		{
			"bonemass",
			new string[1] { "poison" }
		},
		{
			"moder",
			new string[1] { "frost" }
		},
		{
			"yagluth",
			new string[1] { "fire" }
		},
		{
			"queen",
			new string[2] { "poison", "lightning" }
		},
		{
			"fader",
			new string[2] { "fire", "spirit" }
		}
	};

	public static readonly Dictionary<string, Sprite> BossSprites = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);

	public static string m_upgradingEnchant = null;

	public static string m_upgradingBoss = null;

	public static string m_upgradingLevel = null;

	private static void RegisterIcon(string key, string base64Data)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Expected O, but got Unknown
		//IL_003d: 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)
		try
		{
			byte[] array = Convert.FromBase64String(base64Data);
			Texture2D val = new Texture2D(64, 64, (TextureFormat)4, false);
			if (ImageConversion.LoadImage(val, array))
			{
				Sprite value = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
				BossSprites[key] = value;
			}
		}
		catch (Exception)
		{
		}
	}

	private static void LoadEmbeddedIcons()
	{
		RegisterIcon("bonemass", "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");
		RegisterIcon("eikthyr", "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");
		RegisterIcon("elder", "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAU5SURBVHhe7Zt7bFNVHMdP27W962tbu3Z9rutj6+1aRqeMGcSpgYHgQCOJQjDOKUaJc/hM8PkPOMwijj26EKYsBCdEiSgTVAIhi8+FIMQwY8zYhhenaGJQL0pct5/53fQachOUsfbevr7JJ9k5TXbO/X3v99xzT1pCcsopp5xykkZBQur8hDiF/VmjACEDNCH9wv6sEE1IPU3ISJw1ws8zXuj+XRoN81BBwQRNyHBWRYF3/6DPx46Ew7FahWI0q6KA7t+p0TA/RyKA7HG7f8+aKPDuH/B62Z8iEeB5MFuigO7fodEwE3PnwuUMh0KxmkyPAu/+ux4Py1RVgZDdpaWZHQV0fyWlYc7OqYIr0WQwZGYUePffcZexY+E5cCVO0sHMjAK6v4KimJFQGP6PPqcrs6LAu7/X7Wa/C4XhamjU6zMnCrz731aG4WoZqqAzIwq8+/0uN/tNMAQzYYfDmf5RQPcbKIo5TYfgWrhPl8ZR4N3f5Sxlvw5UwrXwia8iNk+eplFA929XU8zJiiDMhqjNkX5R4N3f6XCxJyqCMFvuTbcooPvL1RRzvJyGRHDU60+fKPDu99qd7Jf+ACSKDqstPaKA7i9Tq5nPfQFINGu0utSOAu/+dquD/dRbAYnmQ7c3dr1cnrpRQPeXqtTMoKccksVWizU1o8C73221s8c85ZBM7snXpl4U0P0lKjVztMwPyeY9lye1osC732G2sYfdPhCDLcUlXBQChKwSzkd08e5/VOoDMcECBAlpEc5HVPHuv1ZsZQ+5vCAmKVEAdL9eqWIGnB4QG8kLwLvfZrKyA24/HAqE4X2nRzQkLwC6v1ipYvY7ymDw1nr4MdoDp5tbANtiIGkBePdbjWZ2n90NQ6vXcgU40fgAYFsMJC0Aur9IqWLetrkBGX7iaZjo7oFji5ZybTGQrAC8+5uLzOxeaykgo5tb4YfuHjgQqubaYiBZAXDzgYPvMNtj/SUuQIaf2cgV4OD8G7m2GEhWAPx+D/fsN1kv7S5xAXLqscfhHBZgwc1cO9m8bnFMxXeC9wvnl3SFCAni4JsKzRd3WVyAHF/3CDBdPXBk2UqunWzaTda/4wUQfyvsJ8SMg7foii70mZ2AfLx4OTBdUTi14SmunWxeNJjYeARqhfMTRdyZv4qaeKPYCUif1Q3j7Z3wfVcU3iwLcH3JZDWlOx9/JVYL5yaKcPEJy2Rnuo22qV6TA5Chh5u5AnzWuI5rJ5MauWKMJmSncF6iqZKQCBcDbcFv2412QN6qrIbR9g442xmF/Qtu4fqSwbM6I3f7S34qRBOyb55cPtZZZJvuMdoB+WBJA4x3RrlC9Nq9XF+iqVMomSAhX0h2+/PinwZN+fpfu4tswHPk7rWwp/qGf9uJZIO2MLXOBGlC2nAteEFv+quj0ArJ5GWDeTIik4/iAiych2TyE2KgCRmslSvGWw2WWHuBFZLBqwUl0zcplAyu/OWEeIXzkFTxKAwvVOQxW/SWqa2GEkgkbQbL9G15KjwJxlu/Xjh+SogmpAGLMF+uGH9Oa7zUprdAInhJa5pcKM9D56XZ989E+GjE1TlEZGea1LoLr+gtMBvW5xv+iMhkePw9jAUWjpeSim+T+9ExvBsepQxsq84MM+HJ/MI/6xTKc3HXD2PEhOOkvPCNESePF3GdTD62Io86v54ysBs1xslN2mK4nOc1xlgzZbi4Spn/S41MMR7P+leSvOklWvGzg23x25j/kcR/0Y8Xjk8X4f9Ke+GbG14cLma4f8DC4N9xajPyonPKKaecckpR/QPTVzoMS1L/iwAAAABJRU5ErkJggg==");
		RegisterIcon("fader", "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");
		RegisterIcon("moder", "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");
		RegisterIcon("queen", "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAZpSURBVHhe7Zt9UBR1GMf9z2H3ON5E5V3xlF1u8IWXQdNIVDCV1FJhQCmCNOEQTfEdMUQxXg9BBHxJQ1EJdFAbMxotX5BxNF8yrKmA01UMtdJczeTkaX6bR+fvtyccKncH9535zDh3u8/+nue7373dHezRwyyzzDLLLMNIwrIBFjKZM/55t5GFh8chimFK8c+7hWiGCaIY5lcEzTDh+PddXsh96ykTONvo8EaKYWq7VRQ07rvtL+Jll4+oaT+f+m4VBeS+1eQJ3CDVSUA4f5bzV7eJgsZ91/JN/KD646DBNiqse0RBcP+t8dzAX74BbQacPdj1o6Bx32VPPi/76SjgOG3J6NpRENwPCeZkV74GXdi8G9o1o6Bx33lXLj/gh69AF/2r96lp3y4YBeS+dFIQ537pMLSFQ+G6rhUFjftO27N59wtfQHuwmTW960RBcH/iOM793EFoL/2OlappX2/Tj0Kr+1vS+f5nKkEfHPJSTD8KgvsTxnH9a/ZDR7AOf8d0o6Bx37Eoje9XXQEdwfXIDjXtY6JRENwfP5ZzO/E5iDH47G4YfrGE+BynT/Yq04uCxn2HgrW827d7QYwZDUUwuykfBp0qJb7DsQ6bYlpRENwPHsO5Ht0NYnjVlED877kCoapNxPc4zpWb1bTPMNOIgsb9vhtSeJeqXSDG9LpNrQNAjDy3ldgGp/f6FaYRBeS+ZXAg53KkBMTwOb0N4u8onyHuVi54HNtObItjNWOycUdB437vnGTe+fAOECPyah4xAESEKp/YFsexrEBNextxFAT3g0ZzToe2gRh+1cVE49oEni8k9sGxT000zii0up+xknc6sAXEiFTlQvztHJ3ENilBfrSY2A/HalqI8UVBcH/caM5xfzGIMeLURqJhMd67qgTnSnJ/bRxKlMYVBY37vdKW8Q7lhYDjtK8QYm4oQXErp10EfZdH1MDplbxAiIKFh8c0fD2dLsH9sQGcQ1kBiBFQnQeKW9l6Mbgqn6iDI1wLWDYBX0+nqtX91MV83z35gONYlg8x15GzZJPP4/1rOeBaTtbTxigGgNyXjHmd67NrA4jxRjU69ckG20PIBSVRTxuDD0Djvt3qj/g+JUrAcSvLgdib2aBo6jh4TW0MPgDB/cBRXO/t2SBG8JksKPizAn7+5xrsvPclKJqy9AavqY1BB6Bx32blfN5+aybguOzMhLmNWXBHfQ+QHrc0g+K3LL3B62pj0AEI7o8exdlvTgcxgk9nCA0cuH9CGMDJhxeJ5toDXlcbgw2g1f3l8XyvovUgRrSKbEZf5t7IJOpqY7ABoJsPdHDbzCS1XcFaECOsNgMUNzNfiJk/phN1tTHYANDf9whnQEriI7v8NSDG+FPriYb0BdXA67aSnfQErYHy8IjC1/fKJZHLWWEAS+Ie2OV+DGLI96YSDemLb2UqUVeDTcqix2gNBrkVlshk9ujg0piZd22zk0EXITVpENeY0SHCLn9C1NPGasEcXhgAy/rj6+sUCb8CwWMabTOTQBdOG1dBdH060VxbzOXSoV9xMlFPG+nUSU3okbiHTNYTX1unCF18aLm8ziY18YlN+grQhefOZJit+oRoUheoee/y1UQdHNpnWIMFw3yKr6vTRHl6Dv0vBuH3rNOWwfNwUC6Ht8+ug7gb6c8l9FIauBasJPbHkSqihdPf4G+FKIapoL2HNVinLGqxXrsE2mLI7lXw5vE1EPH9/8OYdSUNJp1cA74VycT2uqBHDucolq0x2OmvkebXQBI29Q+rlEToDCQxEcb1TpBmmAxKLq+znPfB39LkhfAqsVwU20wN8apHF2B8HQaTrUwmpRjmOO3no5ImxqmlSQvglbA8oYUe4c+hK3/PgQPd8XUYVE+jUEuN8OcsE2OfWK5IgJfK0vgWOjAAvQlGp34QfnyjEMUwIWgItK+3ShIX9UiyVAEvhXkxzdRwP+S8Ye779ZHw08iyNZTcs44OnXxXsjgWXgQ6cvp9yssLvf6uRQPGj2eUenqbXCo8qPh4q+jIGTy98EPQByo6/CH1mv91oQbLVqGI4ccxeglPjCxbJTQxdHADFRzYREVM46k5kc3U/NnwDLFRaioy9IHFxKDbaGjCPT7DnDfIk97L1tN3B7lPT2PhP0m0QSlqHP264LVMXujJDTUnPEeg+weGyRX+zbIJ6Lsu2bRZZplllllGqn8BPhVfiPZPJVkAAAAASUVORK5CYII=");
		RegisterIcon("yagluth", "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");
	}

	private void Awake()
	{
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Expected O, but got Unknown
		BaseAttributeDamage = ((BaseUnityPlugin)this).Config.Bind<float>("General", "BaseAttributeDamage", 10f, "Amount of additional damage granted by enchantment (level 1)");
		DualAttributeSplit = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DualAttributeSplit", false, "Split total base attribute damage among multi-attributes or apply base damage to each");
		m_harmony = new Harmony("com.valheim.weaponattributes");
		m_harmony.PatchAll();
		PrefabManager.OnPrefabsRegistered += CustomEnchantingTable.RegisterCustomTable;
		((BaseUnityPlugin)this).Logger.LogInfo((object)"WeaponAttributes 1.0.0 loaded successfully!");
	}

	private void OnDestroy()
	{
		if (m_harmony != null)
		{
			m_harmony.UnpatchSelf();
		}
	}

	public static bool IsWeapon(ItemData item)
	{
		//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_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Invalid comparison between Unknown and I4
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Invalid comparison between Unknown and I4
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Invalid comparison between Unknown and I4
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Invalid comparison between Unknown and I4
		if (item == null || item.m_shared == null)
		{
			return false;
		}
		ItemType itemType = item.m_shared.m_itemType;
		return (int)itemType == 3 || (int)itemType == 14 || (int)itemType == 22 || (int)itemType == 4;
	}

	public static string GetBossKeyFromItem(ItemData item)
	{
		if (item == null)
		{
			return null;
		}
		if ((Object)(object)item.m_dropPrefab != (Object)null && BossNameMap.TryGetValue(((Object)item.m_dropPrefab).name, out var value))
		{
			return value;
		}
		if (item.m_shared != null && !string.IsNullOrEmpty(item.m_shared.m_name))
		{
			foreach (KeyValuePair<string, string> item2 in BossNameMap)
			{
				string key = item2.Key;
				if (IsItemMatch(item, key))
				{
					return item2.Value;
				}
			}
		}
		return null;
	}

	public static string[] GetBossAttributesFromItem(ItemData item)
	{
		if (item == null)
		{
			return null;
		}
		if ((Object)(object)item.m_dropPrefab != (Object)null && BossEnchantMap.TryGetValue(((Object)item.m_dropPrefab).name, out var value))
		{
			return value;
		}
		if (item.m_shared != null && !string.IsNullOrEmpty(item.m_shared.m_name))
		{
			foreach (KeyValuePair<string, string[]> item2 in BossEnchantMap)
			{
				string key = item2.Key;
				if (IsItemMatch(item, key))
				{
					return item2.Value;
				}
			}
		}
		return null;
	}

	public static bool IsItemMatch(ItemData item, string prefabName)
	{
		if (item == null || string.IsNullOrEmpty(prefabName))
		{
			return false;
		}
		if ((Object)(object)item.m_dropPrefab != (Object)null && string.Equals(((Object)item.m_dropPrefab).name, prefabName, StringComparison.OrdinalIgnoreCase))
		{
			return true;
		}
		if ((Object)(object)ObjectDB.instance != (Object)null)
		{
			GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(prefabName);
			if ((Object)(object)itemPrefab != (Object)null)
			{
				ItemDrop component = itemPrefab.GetComponent<ItemDrop>();
				if ((Object)(object)component != (Object)null && component.m_itemData != null && component.m_itemData.m_shared != null && item.m_shared != null && string.Equals(item.m_shared.m_name, component.m_itemData.m_shared.m_name, StringComparison.OrdinalIgnoreCase))
				{
					return true;
				}
			}
		}
		return false;
	}

	public static int CountInventoryItem(Inventory inv, string prefabName)
	{
		if (inv == null || string.IsNullOrEmpty(prefabName))
		{
			return 0;
		}
		int num = 0;
		List<ItemData> allItems = inv.GetAllItems();
		for (int i = 0; i < allItems.Count; i++)
		{
			ItemData val = allItems[i];
			if (val != null && IsItemMatch(val, prefabName))
			{
				num += val.m_stack;
			}
		}
		return num;
	}

	public static ItemData FindInventoryItem(Inventory inv, string prefabName)
	{
		if (inv == null || string.IsNullOrEmpty(prefabName))
		{
			return null;
		}
		List<ItemData> allItems = inv.GetAllItems();
		for (int i = 0; i < allItems.Count; i++)
		{
			ItemData val = allItems[i];
			if (val != null && IsItemMatch(val, prefabName))
			{
				return val;
			}
		}
		return null;
	}

	public static int RemoveInventoryItem(Inventory inv, string prefabName, int amount)
	{
		if (inv == null || string.IsNullOrEmpty(prefabName) || amount <= 0)
		{
			return 0;
		}
		int num = amount;
		List<ItemData> allItems = inv.GetAllItems();
		int num2 = allItems.Count - 1;
		while (num2 >= 0 && num > 0)
		{
			if (num2 < allItems.Count)
			{
				ItemData val = allItems[num2];
				if (val != null && IsItemMatch(val, prefabName))
				{
					int num3 = Mathf.Min(val.m_stack, num);
					inv.RemoveItem(val, num3);
					num -= num3;
				}
			}
			num2--;
		}
		return amount - num;
	}

	public static string GetAttributeEnchantString(ItemData item)
	{
		if (item == null || item.m_customData == null)
		{
			return null;
		}
		if (item.m_customData.TryGetValue("WeaponAttributes_Enchant", out var value))
		{
			return value;
		}
		return null;
	}

	public static string GetEnchantBossKey(ItemData item)
	{
		if (item == null || item.m_customData == null)
		{
			return null;
		}
		if (item.m_customData.TryGetValue("WeaponAttributes_Boss", out var value))
		{
			return value;
		}
		return null;
	}

	public static int GetEnchantLevel(ItemData item)
	{
		if (item == null || item.m_customData == null)
		{
			return 0;
		}
		if (item.m_customData.TryGetValue("WeaponAttributes_Level", out var value) && int.TryParse(value, out var result))
		{
			return Mathf.Clamp(result, 1, 5);
		}
		if (!string.IsNullOrEmpty(GetAttributeEnchantString(item)))
		{
			return 1;
		}
		return 0;
	}

	public static int GetMobTrophyCountForLevel(int targetLevel)
	{
		return targetLevel switch
		{
			1 => 1, 
			2 => 5, 
			3 => 10, 
			4 => 15, 
			5 => 20, 
			_ => 1, 
		};
	}

	public static string GetMobTrophyPrefab(string bossKey)
	{
		if (string.IsNullOrEmpty(bossKey))
		{
			return null;
		}
		if (BossMobTrophyMap.TryGetValue(bossKey, out var value))
		{
			return value;
		}
		return null;
	}

	public static void SetAttributeEnchant(ItemData item, string bossKey, string[] attrs, int level)
	{
		if (item != null && attrs != null && attrs.Length != 0)
		{
			if (item.m_customData == null)
			{
				item.m_customData = new Dictionary<string, string>();
			}
			item.m_customData["WeaponAttributes_Enchant"] = string.Join(",", attrs);
			if (!string.IsNullOrEmpty(bossKey))
			{
				item.m_customData["WeaponAttributes_Boss"] = bossKey;
			}
			item.m_customData["WeaponAttributes_Level"] = Mathf.Clamp(level, 1, 5).ToString();
		}
	}

	public static void ApplyEnchantDamage(ItemData item, ref DamageTypes dmg)
	{
		string attributeEnchantString = GetAttributeEnchantString(item);
		if (string.IsNullOrEmpty(attributeEnchantString))
		{
			return;
		}
		string[] array = attributeEnchantString.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries);
		if (array.Length == 0)
		{
			return;
		}
		int num = Mathf.Clamp(GetEnchantLevel(item), 1, 5);
		float num2 = BaseAttributeDamage.Value * (float)num;
		float num3 = (DualAttributeSplit.Value ? (num2 / (float)array.Length) : num2);
		for (int i = 0; i < array.Length; i++)
		{
			switch (array[i].Trim().ToLower())
			{
			case "lightning":
				dmg.m_lightning += num3;
				break;
			case "poison":
				dmg.m_poison += num3;
				break;
			case "frost":
				dmg.m_frost += num3;
				break;
			case "fire":
				dmg.m_fire += num3;
				break;
			case "spirit":
				dmg.m_spirit += num3;
				break;
			case "physical":
				dmg.m_damage += num3;
				break;
			}
		}
	}

	public static string GetAttributeNameLocalized(string attr)
	{
		return attr.Trim().ToLower() switch
		{
			"lightning" => Localization.instance.Localize("$inventory_lightning"), 
			"poison" => Localization.instance.Localize("$inventory_poison"), 
			"frost" => Localization.instance.Localize("$inventory_frost"), 
			"fire" => Localization.instance.Localize("$inventory_fire"), 
			"spirit" => Localization.instance.Localize("$inventory_spirit"), 
			"physical" => Localization.instance.Localize("$inventory_damage"), 
			_ => attr, 
		};
	}

	public static string GetBossEnchantColor(string bossKey, string enchantStr)
	{
		string text = ((bossKey != null) ? bossKey.Trim().ToLower() : "");
		if (string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(enchantStr))
		{
			string text2 = enchantStr.ToLower();
			if (text2.Contains("fire") && text2.Contains("spirit"))
			{
				text = "fader";
			}
			else if (text2.Contains("poison") && text2.Contains("lightning"))
			{
				text = "queen";
			}
			else if (text2.Contains("lightning"))
			{
				text = "eikthyr";
			}
			else if (text2.Contains("physical"))
			{
				text = "elder";
			}
			else if (text2.Contains("poison"))
			{
				text = "bonemass";
			}
			else if (text2.Contains("frost"))
			{
				text = "moder";
			}
			else if (text2.Contains("fire"))
			{
				text = "yagluth";
			}
		}
		return text switch
		{
			"eikthyr" => "#FFD700", 
			"elder" => "#707070", 
			"bonemass" => "#48D858", 
			"moder" => "#1E90FF", 
			"yagluth" => "#FF453A", 
			"queen" => "#BA55D3", 
			"fader" => "#8B4513", 
			_ => null, 
		};
	}
}
[HarmonyPatch(typeof(ItemData), "GetDamage", new Type[]
{
	typeof(int),
	typeof(float)
})]
public static class Patch_ItemData_GetDamage
{
	public static void Postfix(ItemData __instance, ref DamageTypes __result)
	{
		WeaponAttributesPlugin.ApplyEnchantDamage(__instance, ref __result);
	}
}
[HarmonyPatch(typeof(ItemData), "GetTooltip", new Type[]
{
	typeof(ItemData),
	typeof(int),
	typeof(bool),
	typeof(float),
	typeof(int),
	typeof(bool)
})]
public static class Patch_ItemData_GetTooltip
{
	public static void Postfix(ItemData item, ref string __result)
	{
		if (item == null)
		{
			return;
		}
		string attributeEnchantString = WeaponAttributesPlugin.GetAttributeEnchantString(item);
		if (string.IsNullOrEmpty(attributeEnchantString))
		{
			return;
		}
		string[] array = attributeEnchantString.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries);
		if (array.Length != 0)
		{
			int enchantLevel = WeaponAttributesPlugin.GetEnchantLevel(item);
			float num = WeaponAttributesPlugin.BaseAttributeDamage.Value * (float)Mathf.Clamp(enchantLevel, 1, 5);
			float num2 = (WeaponAttributesPlugin.DualAttributeSplit.Value ? (num / (float)array.Length) : num);
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append($"\n<color=#A020F0>◆ Enchantment (Lv.{enchantLevel}/5):</color>");
			for (int i = 0; i < array.Length; i++)
			{
				string attributeNameLocalized = WeaponAttributesPlugin.GetAttributeNameLocalized(array[i]);
				stringBuilder.Append($"\n  {attributeNameLocalized}: <color=#00FFFF>+{num2:0}</color>");
			}
			__result += stringBuilder.ToString();
		}
	}
}
[HarmonyPatch(typeof(InventoryGrid), "UpdateGui")]
public static class Patch_InventoryGrid_UpdateGui
{
	private const string OLD_BADGE_NAME = "WeaponAttributes_BossBadge";

	private static FieldInfo m_elementsField = typeof(InventoryGrid).GetField("m_elements", BindingFlags.Instance | BindingFlags.NonPublic);

	private static FieldInfo m_qualityField = typeof(InventoryElement).GetField("m_quality", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

	private static FieldInfo m_iconField = typeof(InventoryElement).GetField("m_icon", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

	public static void Postfix(InventoryGrid __instance, Player player, ItemData dragItem)
	{
		if ((Object)(object)__instance == (Object)null || m_elementsField == null || m_qualityField == null)
		{
			return;
		}
		Inventory inventory = __instance.GetInventory();
		if (inventory == null || !(m_elementsField.GetValue(__instance) is IList list))
		{
			return;
		}
		int width = inventory.GetWidth();
		if (width <= 0)
		{
			return;
		}
		for (int i = 0; i < list.Count; i++)
		{
			object obj = list[i];
			if (obj == null)
			{
				continue;
			}
			object? value = m_qualityField.GetValue(obj);
			TMP_Text val = (TMP_Text)((value is TMP_Text) ? value : null);
			if (m_iconField != null)
			{
				object? value2 = m_iconField.GetValue(obj);
				Image val2 = (Image)((value2 is Image) ? value2 : null);
				if ((Object)(object)val2 != (Object)null)
				{
					Transform val3 = ((Component)val2).transform.Find("WeaponAttributes_BossBadge");
					if ((Object)(object)val3 != (Object)null)
					{
						Object.Destroy((Object)(object)((Component)val3).gameObject);
					}
				}
			}
			int num = i % width;
			int num2 = i / width;
			ItemData itemAt = inventory.GetItemAt(num, num2);
			if (itemAt == null || !WeaponAttributesPlugin.IsWeapon(itemAt))
			{
				continue;
			}
			string attributeEnchantString = WeaponAttributesPlugin.GetAttributeEnchantString(itemAt);
			if (!string.IsNullOrEmpty(attributeEnchantString) && (Object)(object)val != (Object)null)
			{
				string enchantBossKey = WeaponAttributesPlugin.GetEnchantBossKey(itemAt);
				string bossEnchantColor = WeaponAttributesPlugin.GetBossEnchantColor(enchantBossKey, attributeEnchantString);
				if (!string.IsNullOrEmpty(bossEnchantColor))
				{
					int quality = itemAt.m_quality;
					int enchantLevel = WeaponAttributesPlugin.GetEnchantLevel(itemAt);
					((Component)val).gameObject.SetActive(true);
					((Behaviour)val).enabled = true;
					val.enableWordWrapping = false;
					val.overflowMode = (TextOverflowModes)0;
					val.text = $"{quality}<color={bossEnchantColor}>+{enchantLevel}</color>";
				}
			}
		}
	}
}
public static class CustomEnchantingTable
{
	public static GameObject m_enchantingTablePrefab = null;

	public static void RegisterCustomTable()
	{
		//IL_020d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0214: Expected O, but got Unknown
		//IL_026f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0279: Expected O, but got Unknown
		//IL_0285: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Expected O, but got Unknown
		//IL_029a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a4: Expected O, but got Unknown
		//IL_02af: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b9: Expected O, but got Unknown
		//IL_02be: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c5: Expected O, but got Unknown
		try
		{
			if ((Object)(object)m_enchantingTablePrefab != (Object)null)
			{
				return;
			}
			GameObject val = PrefabManager.Instance.CreateClonedPrefab("piece_enchanting_table", "piece_artisanstation");
			if ((Object)(object)val == (Object)null)
			{
				val = PrefabManager.Instance.CreateClonedPrefab("piece_enchanting_table", "piece_workbench");
			}
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)"[WeaponAttributes] Could not clone base table for piece_enchanting_table");
				return;
			}
			Shader val2 = Shader.Find("Standard");
			if ((Object)(object)val2 == (Object)null)
			{
				Renderer componentInChildren = val.GetComponentInChildren<Renderer>(true);
				val2 = (((Object)(object)componentInChildren != (Object)null && (Object)(object)componentInChildren.sharedMaterial != (Object)null) ? componentInChildren.sharedMaterial.shader : null);
			}
			int num = LayerMask.NameToLayer("piece");
			if (num < 0)
			{
				num = val.layer;
			}
			Collider[] componentsInChildren = val.GetComponentsInChildren<Collider>(true);
			foreach (Collider val3 in componentsInChildren)
			{
				if (!((Object)(object)val3 == (Object)null) && !val3.isTrigger && !((Object)(object)((Component)val3).GetComponent<EffectArea>() != (Object)null))
				{
					num = ((Component)val3).gameObject.layer;
					val3.enabled = false;
				}
			}
			Renderer[] componentsInChildren2 = val.GetComponentsInChildren<Renderer>(true);
			foreach (Renderer val4 in componentsInChildren2)
			{
				if ((Object)(object)val4 != (Object)null && (Object)(object)((Component)val4).gameObject != (Object)(object)val)
				{
					val4.enabled = false;
				}
			}
			CraftingStation component = val.GetComponent<CraftingStation>();
			if ((Object)(object)component != (Object)null)
			{
				component.m_name = "Enchanting Table";
				component.m_rangeBuild = 10f;
				component.m_useDistance = 2.8f;
			}
			BuildCustomBlenderModel(val, val2, num);
			Sprite val5 = LoadEmbeddedSprite("BossSoulTableIcon.png");
			PieceConfig val6 = new PieceConfig();
			val6.PieceTable = "Hammer";
			val6.Category = "Crafting";
			val6.Name = "Enchanting Table";
			val6.Description = "An ancient boss soul forge with a runic anvil and crystal brazier for enchanting weapons.";
			if ((Object)(object)val5 != (Object)null)
			{
				val6.Icon = val5;
			}
			val6.AddRequirement(new RequirementConfig("RoundLog", 8, 0, true));
			val6.AddRequirement(new RequirementConfig("Tin", 10, 0, true));
			val6.AddRequirement(new RequirementConfig("SurtlingCore", 4, 0, true));
			val6.AddRequirement(new RequirementConfig("Stone", 4, 0, true));
			CustomPiece val7 = new CustomPiece(val, false, val6);
			PieceManager.Instance.AddPiece(val7);
			m_enchantingTablePrefab = val;
			Debug.Log((object)"[WeaponAttributes] Successfully registered piece_enchanting_table with custom 3D model via Jotunn!");
			if ((Object)(object)component != (Object)null)
			{
				RegisterStationExtensions(component, val2, num);
			}
		}
		catch (Exception ex)
		{
			Debug.LogError((object)("[WeaponAttributes] Exception in RegisterCustomTable: " + ex));
		}
	}

	private static void RegisterStationExtensions(CraftingStation targetStation, Shader baseShader, int pieceLayer)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Expected O, but got Unknown
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Expected O, but got Unknown
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Expected O, but got Unknown
		//IL_00de: 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_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0123: Expected O, but got Unknown
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Expected O, but got Unknown
		//IL_013f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: Expected O, but got Unknown
		//IL_0150: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Expected O, but got Unknown
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: 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_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d2: Expected O, but got Unknown
		//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e2: Expected O, but got Unknown
		//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Expected O, but got Unknown
		//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Expected O, but got Unknown
		//IL_023a: 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_0262: Unknown result type (might be due to invalid IL or missing references)
		//IL_0279: Unknown result type (might be due to invalid IL or missing references)
		//IL_027f: Expected O, but got Unknown
		//IL_0289: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Expected O, but got Unknown
		//IL_029a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a0: Expected O, but got Unknown
		//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b0: Expected O, but got Unknown
		RegisterSingleExtension("piece_enchant_ext_elder", "Elder's Root Totem", "An ancient magical root bound in bronze runic rings, infused with the energy of the Black Forest. Increases Enchanting Table level (+1).", "Ext1_ElderMesh.bin.gz", "Ext1_ElderIcon.png", targetStation, baseShader, pieceLayer, new Color(0.18f, 0.95f, 0.52f, 1f), new Vector3(0f, 1.05f, 0f), new Vector3(0.95f, 1.35f, 0.95f), (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Bronze", 6, 0, true),
			new RequirementConfig("AncientSeed", 3, 0, true),
			new RequirementConfig("GreydwarfEye", 10, 0, true),
			new RequirementConfig("Wood", 10, 0, true)
		});
		RegisterSingleExtension("piece_enchant_ext_bonemass", "Bonemass Poison Urn", "A dark forged iron cauldron adorned with skulls and boiling toxic swamp ooze. Increases Enchanting Table level (+1).", "Ext2_BonemassMesh.bin.gz", "Ext2_BonemassIcon.png", targetStation, baseShader, pieceLayer, new Color(0.42f, 1f, 0.12f, 1f), new Vector3(0f, 0.95f, 0f), new Vector3(1.05f, 1.15f, 1.05f), (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Iron", 10, 0, true),
			new RequirementConfig("ElderBark", 10, 0, true),
			new RequirementConfig("Ooze", 10, 0, true),
			new RequirementConfig("BoneFragments", 10, 0, true)
		});
		RegisterSingleExtension("piece_enchant_ext_moder", "Moder's Crystal Altar", "A silver pedestal with dragon wings and a cluster of glowing frost crystals. Increases Enchanting Table level (+1).", "Ext3_ModerMesh.bin.gz", "Ext3_ModerIcon.png", targetStation, baseShader, pieceLayer, new Color(0.22f, 0.85f, 1f, 1f), new Vector3(0f, 0.95f, 0f), new Vector3(1.05f, 1.25f, 1.05f), (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("Silver", 10, 0, true),
			new RequirementConfig("Crystal", 8, 0, true),
			new RequirementConfig("FreezeGland", 4, 0, true),
			new RequirementConfig("Obsidian", 10, 0, true)
		});
		RegisterSingleExtension("piece_enchant_ext_yagluth", "Yagluth's Eternal Flame", "A ritual platform of black metal and gold burning with the undying arcane flame of the Goblin King. Increases Enchanting Table level (+1).", "Ext4_YagluthMesh.bin.gz", "Ext4_YagluthIcon.png", targetStation, baseShader, pieceLayer, new Color(0.95f, 0.18f, 0.62f, 1f), new Vector3(0f, 0.95f, 0f), new Vector3(1.15f, 1.15f, 1.15f), (RequirementConfig[])(object)new RequirementConfig[4]
		{
			new RequirementConfig("BlackMetal", 10, 0, true),
			new RequirementConfig("GoblinTotem", 2, 0, true),
			new RequirementConfig("Tar", 10, 0, true),
			new RequirementConfig("SurtlingCore", 5, 0, true)
		});
	}

	private static void RegisterSingleExtension(string prefabName, string displayName, string description, string meshResName, string iconResName, CraftingStation targetStation, Shader baseShader, int pieceLayer, Color lightColor, Vector3 lightLocalPos, Vector3 colliderSize, RequirementConfig[] reqs)
	{
		//IL_015a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Expected O, but got Unknown
		//IL_0186: 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_01aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0228: Unknown result type (might be due to invalid IL or missing references)
		//IL_0235: Unknown result type (might be due to invalid IL or missing references)
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_0288: Expected O, but got Unknown
		//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0318: Unknown result type (might be due to invalid IL or missing references)
		//IL_031f: Expected O, but got Unknown
		//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b5: Expected O, but got Unknown
		try
		{
			GameObject val = PrefabManager.Instance.CreateClonedPrefab(prefabName, "piece_workbench_ext1");
			if ((Object)(object)val == (Object)null)
			{
				val = PrefabManager.Instance.CreateClonedPrefab(prefabName, "forge_ext1");
			}
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)("[WeaponAttributes] Could not clone base extension prefab for " + prefabName));
				return;
			}
			Collider[] componentsInChildren = val.GetComponentsInChildren<Collider>(true);
			foreach (Collider val2 in componentsInChildren)
			{
				if (!((Object)(object)val2 == (Object)null) && !val2.isTrigger && !((Object)(object)((Component)val2).GetComponent<EffectArea>() != (Object)null))
				{
					val2.enabled = false;
				}
			}
			Renderer[] componentsInChildren2 = val.GetComponentsInChildren<Renderer>(true);
			foreach (Renderer val3 in componentsInChildren2)
			{
				if ((Object)(object)val3 != (Object)null && (Object)(object)((Component)val3).gameObject != (Object)(object)val)
				{
					val3.enabled = false;
				}
			}
			StationExtension val4 = val.GetComponent<StationExtension>();
			if ((Object)(object)val4 == (Object)null)
			{
				val4 = val.AddComponent<StationExtension>();
			}
			val4.m_craftingStation = targetStation;
			val4.m_maxStationDistance = 6f;
			GameObject val5 = new GameObject(prefabName + "_Model");
			val5.layer = pieceLayer;
			val5.transform.SetParent(val.transform, false);
			val5.transform.localPosition = Vector3.zero;
			val5.transform.localRotation = Quaternion.identity;
			val5.transform.localScale = Vector3.one;
			BoxCollider val6 = val5.AddComponent<BoxCollider>();
			val6.center = new Vector3(0f, colliderSize.y * 0.5f, 0f);
			val6.size = colliderSize;
			BoxCollider val7 = val.GetComponent<BoxCollider>();
			if ((Object)(object)val7 == (Object)null)
			{
				val7 = val.AddComponent<BoxCollider>();
			}
			val7.center = new Vector3(0f, colliderSize.y * 0.5f, 0f);
			val7.size = colliderSize;
			((Collider)val7).enabled = true;
			WearNTear component = val.GetComponent<WearNTear>();
			if ((Object)(object)component != (Object)null)
			{
				component.m_new = val5;
				component.m_worn = val5;
				component.m_broken = val5;
			}
			GameObject val8 = new GameObject("ExtMagicLight");
			val8.transform.SetParent(val5.transform, false);
			val8.transform.localPosition = lightLocalPos;
			Light val9 = val8.AddComponent<Light>();
			val9.type = (LightType)2;
			val9.color = lightColor;
			val9.range = 4.2f;
			val9.intensity = 1.45f;
			LoadEmbeddedMeshIntoRoot(val5, meshResName, baseShader, pieceLayer);
			if (prefabName == "piece_enchant_ext_yagluth")
			{
				AttachAnimatedValheimFireToYagluth(val5, val9);
			}
			Sprite val10 = LoadEmbeddedSprite(iconResName);
			PieceConfig val11 = new PieceConfig();
			val11.PieceTable = "Hammer";
			val11.Category = "Crafting";
			val11.CraftingStation = "piece_enchanting_table";
			val11.Name = displayName;
			val11.Description = description;
			if ((Object)(object)val10 != (Object)null)
			{
				val11.Icon = val10;
			}
			if (reqs != null)
			{
				for (int j = 0; j < reqs.Length; j++)
				{
					val11.AddRequirement(reqs[j]);
				}
			}
			CustomPiece val12 = new CustomPiece(val, false, val11);
			PieceManager.Instance.AddPiece(val12);
			Debug.Log((object)("[WeaponAttributes] Registered station extension: " + prefabName));
		}
		catch (Exception ex)
		{
			Debug.LogError((object)("[WeaponAttributes] Failed to register extension " + prefabName + ": " + ex));
		}
	}

	private static void AttachAnimatedValheimFireToYagluth(GameObject modelRoot, Light magicLight)
	{
		//IL_01a8: 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_01db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0365: Unknown result type (might be due to invalid IL or missing references)
		//IL_0389: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			if ((Object)(object)magicLight != (Object)null)
			{
				YagluthFireLightFlicker yagluthFireLightFlicker = ((Component)magicLight).gameObject.AddComponent<YagluthFireLightFlicker>();
				yagluthFireLightFlicker.m_light = magicLight;
			}
			string[] array = new string[5] { "piece_groundtorch_wood", "piece_groundtorch", "fire_pit", "hearth", "bonfire" };
			GameObject val = null;
			for (int i = 0; i < array.Length; i++)
			{
				val = PrefabManager.Instance.GetPrefab(array[i]);
				if ((Object)(object)val != (Object)null)
				{
					break;
				}
			}
			if (!((Object)(object)val != (Object)null))
			{
				return;
			}
			Transform val2 = null;
			Transform[] componentsInChildren = val.GetComponentsInChildren<Transform>(true);
			foreach (Transform val3 in componentsInChildren)
			{
				if ((Object)(object)val3 == (Object)null)
				{
					continue;
				}
				string text = ((Object)val3).name.ToLowerInvariant();
				switch (text)
				{
				default:
					if (!(text == "flames"))
					{
						continue;
					}
					break;
				case "_enabled":
				case "_enabled_high":
				case "fire":
					break;
				}
				val2 = val3;
				break;
			}
			if ((Object)(object)val2 == (Object)null)
			{
				val2 = val.transform;
			}
			GameObject val4 = Object.Instantiate<GameObject>(((Component)val2).gameObject);
			((Object)val4).name = "YagluthRealAnimatedFireFX";
			val4.transform.SetParent(modelRoot.transform, false);
			val4.transform.localPosition = new Vector3(0f, 0.5f, 0f);
			val4.transform.localRotation = Quaternion.identity;
			val4.transform.localScale = new Vector3(0.75f, 0.78f, 0.75f);
			val4.SetActive(true);
			componentsInChildren = val4.GetComponentsInChildren<Transform>(true);
			foreach (Transform val5 in componentsInChildren)
			{
				if ((Object)(object)val5 != (Object)null)
				{
					((Component)val5).gameObject.SetActive(true);
				}
			}
			Color val6 = default(Color);
			((Color)(ref val6))..ctor(0.72f, 0.14f, 0.88f, 1f);
			Color val7 = default(Color);
			((Color)(ref val7))..ctor(0.88f, 0.12f, 0.48f, 1f);
			Renderer[] componentsInChildren2 = val4.GetComponentsInChildren<Renderer>(true);
			foreach (Renderer val8 in componentsInChildren2)
			{
				if ((Object)(object)val8 == (Object)null)
				{
					continue;
				}
				if (val8 is MeshRenderer && !((Object)val8).name.ToLowerInvariant().Contains("flame") && !((Object)val8).name.ToLowerInvariant().Contains("fire") && !((Object)val8).name.ToLowerInvariant().Contains("glow"))
				{
					val8.enabled = false;
					continue;
				}
				Material[] materials = val8.materials;
				if (materials == null)
				{
					continue;
				}
				foreach (Material val9 in materials)
				{
					if (!((Object)(object)val9 == (Object)null))
					{
						if (val9.HasProperty("_Color"))
						{
							val9.SetColor("_Color", val6);
						}
						if (val9.HasProperty("_TintColor"))
						{
							val9.SetColor("_TintColor", val7);
						}
						if (val9.HasProperty("_EmissionColor"))
						{
							val9.SetColor("_EmissionColor", val6 * 2.2f);
						}
					}
				}
				val8.materials = materials;
			}
		}
		catch (Exception ex)
		{
			Debug.LogWarning((object)("[WeaponAttributes] AttachAnimatedValheimFireToYagluth warning: " + ex.Message));
		}
	}

	private static Sprite LoadEmbeddedSprite(string resName)
	{
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Expected O, but got Unknown
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			using Stream stream = executingAssembly.GetManifestResourceStream(resName);
			if (stream == null)
			{
				return null;
			}
			byte[] array = new byte[stream.Length];
			stream.Read(array, 0, array.Length);
			Texture2D val = new Texture2D(128, 128, (TextureFormat)4, false);
			if (ImageConversion.LoadImage(val, array))
			{
				return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
			}
		}
		catch (Exception ex)
		{
			Debug.LogWarning((object)("[WeaponAttributes] Failed to load icon " + resName + ": " + ex.Message));
		}
		return null;
	}

	private static Material CreatePBRMaterial(Shader shader, string matName)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Expected O, but got Unknown
		//IL_0038: 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_0f20: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f27: Expected O, but got Unknown
		//IL_04a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0502: Unknown result type (might be due to invalid IL or missing references)
		//IL_0507: Unknown result type (might be due to invalid IL or missing references)
		//IL_054d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0557: Unknown result type (might be due to invalid IL or missing references)
		//IL_055c: Unknown result type (might be due to invalid IL or missing references)
		//IL_05fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0606: Unknown result type (might be due to invalid IL or missing references)
		//IL_060b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0651: Unknown result type (might be due to invalid IL or missing references)
		//IL_065b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0660: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_06dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0782: Unknown result type (might be due to invalid IL or missing references)
		//IL_078c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0791: Unknown result type (might be due to invalid IL or missing references)
		//IL_0804: Unknown result type (might be due to invalid IL or missing references)
		//IL_080e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0813: Unknown result type (might be due to invalid IL or missing references)
		//IL_0859: Unknown result type (might be due to invalid IL or missing references)
		//IL_0863: Unknown result type (might be due to invalid IL or missing references)
		//IL_0868: Unknown result type (might be due to invalid IL or missing references)
		//IL_08ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_08bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0903: Unknown result type (might be due to invalid IL or missing references)
		//IL_090d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0912: Unknown result type (might be due to invalid IL or missing references)
		//IL_0958: Unknown result type (might be due to invalid IL or missing references)
		//IL_0962: Unknown result type (might be due to invalid IL or missing references)
		//IL_0967: Unknown result type (might be due to invalid IL or missing references)
		//IL_09da: Unknown result type (might be due to invalid IL or missing references)
		//IL_09e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_09e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a2f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a39: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a3e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a84: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a8e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a93: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ad9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ae3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ae8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b2e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b38: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b3d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b83: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b8d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b92: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bd8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0be2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0be7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c2d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c37: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c3c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c82: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c8c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c91: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d5e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d68: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d6d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0db3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0dbd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0dc2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e08: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e12: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e17: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e5d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e67: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e6c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0eb2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ebc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ec1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f04: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f0e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f13: Unknown result type (might be due to invalid IL or missing references)
		//IL_1433: Unknown result type (might be due to invalid IL or missing references)
		//IL_1458: Unknown result type (might be due to invalid IL or missing references)
		//IL_1056: Unknown result type (might be due to invalid IL or missing references)
		//IL_1058: Unknown result type (might be due to invalid IL or missing references)
		//IL_105c: Unknown result type (might be due to invalid IL or missing references)
		//IL_1118: Unknown result type (might be due to invalid IL or missing references)
		//IL_111a: Unknown result type (might be due to invalid IL or missing references)
		//IL_111e: Unknown result type (might be due to invalid IL or missing references)
		//IL_13e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_14ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_12c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_12c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_12d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_12d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_11f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_1512: Unknown result type (might be due to invalid IL or missing references)
		//IL_1309: Unknown result type (might be due to invalid IL or missing references)
		//IL_130b: Unknown result type (might be due to invalid IL or missing references)
		//IL_131b: Unknown result type (might be due to invalid IL or missing references)
		//IL_1320: Unknown result type (might be due to invalid IL or missing references)
		//IL_12ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_12f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_1300: Unknown result type (might be due to invalid IL or missing references)
		//IL_1305: Unknown result type (might be due to invalid IL or missing references)
		//IL_1328: Unknown result type (might be due to invalid IL or missing references)
		Material val = new Material(shader);
		((Object)val).name = matName;
		Color val2 = default(Color);
		((Color)(ref val2))..ctor(0.25f, 0.2f, 0.16f, 1f);
		float num = 0f;
		float num2 = 0.25f;
		Color val3 = Color.black;
		bool flag = false;
		switch (matName)
		{
		case "DarkYggdrasilWood":
			((Color)(ref val2))..ctor(0.22f, 0.15f, 0.11f, 1f);
			num = 0.05f;
			num2 = 0.22f;
			break;
		case "CarvedDarkStone":
			((Color)(ref val2))..ctor(0.28f, 0.29f, 0.34f, 1f);
			num = 0.1f;
			num2 = 0.3f;
			break;
		case "ForgedBlackIron":
			((Color)(ref val2))..ctor(0.24f, 0.25f, 0.29f, 1f);
			num = 0.85f;
			num2 = 0.62f;
			break;
		case "PolishedSteelEdge":
			((Color)(ref val2))..ctor(0.68f, 0.72f, 0.78f, 1f);
			num = 0.92f;
			num2 = 0.8f;
			break;
		case "AgedBoneSkull":
			((Color)(ref val2))..ctor(0.76f, 0.68f, 0.54f, 1f);
			num = 0.02f;
			num2 = 0.35f;
			break;
		case "DarkHorn":
			((Color)(ref val2))..ctor(0.18f, 0.14f, 0.11f, 1f);
			num = 0.08f;
			num2 = 0.45f;
			break;
		case "GlowingSoulCrystal":
			((Color)(ref val2))..ctor(0.72f, 0.22f, 0.98f, 1f);
			num = 0.2f;
			num2 = 0.88f;
			val3 = new Color(0.75f, 0.18f, 1f, 1f) * 2.2f;
			flag = true;
			break;
		case "GlowingArcaneRune":
			((Color)(ref val2))..ctor(0.9f, 0.35f, 1f, 1f);
			num = 0.1f;
			num2 = 0.8f;
			val3 = new Color(0.88f, 0.25f, 1f, 1f) * 3.8f;
			flag = true;
			break;
		case "ArcaneEmberCoal":
			((Color)(ref val2))..ctor(0.35f, 0.1f, 0.48f, 1f);
			num = 0.05f;
			num2 = 0.2f;
			val3 = new Color(0.62f, 0.12f, 0.92f, 1f) * 1.6f;
			flag = true;
			break;
		case "PurpleLeatherWrap":
			((Color)(ref val2))..ctor(0.32f, 0.14f, 0.38f, 1f);
			num = 0.05f;
			num2 = 0.3f;
			break;
		case "AncientBronze":
			((Color)(ref val2))..ctor(0.55f, 0.36f, 0.16f, 1f);
			num = 0.88f;
			num2 = 0.68f;
			break;
		case "GlowingEmeraldLeaf":
			((Color)(ref val2))..ctor(0.15f, 0.88f, 0.48f, 1f);
			num = 0.1f;
			num2 = 0.75f;
			val3 = new Color(0.12f, 0.92f, 0.5f, 1f) * 2.2f;
			flag = true;
			break;
		case "GlowingToxicAcid":
			((Color)(ref val2))..ctor(0.38f, 0.95f, 0.08f, 1f);
			num = 0.05f;
			num2 = 0.85f;
			val3 = new Color(0.4f, 1f, 0.08f, 1f) * 2.6f;
			flag = true;
			break;
		case "ShiningSilver":
			((Color)(ref val2))..ctor(0.76f, 0.82f, 0.9f, 1f);
			num = 0.92f;
			num2 = 0.8f;
			break;
		case "GlowingFrostCrystal":
			((Color)(ref val2))..ctor(0.18f, 0.82f, 1f, 1f);
			num = 0.2f;
			num2 = 0.88f;
			val3 = new Color(0.18f, 0.85f, 1f, 1f) * 2.2f;
			flag = true;
			break;
		case "GreenBlackMetal":
			((Color)(ref val2))..ctor(0.12f, 0.2f, 0.15f, 1f);
			num = 0.88f;
			num2 = 0.72f;
			break;
		case "YagluthGold":
			((Color)(ref val2))..ctor(0.82f, 0.62f, 0.2f, 1f);
			num = 0.9f;
			num2 = 0.75f;
			break;
		case "GlowingEternalFlame":
			((Color)(ref val2))..ctor(0.92f, 0.15f, 0.58f, 1f);
			num = 0.05f;
			num2 = 0.8f;
			val3 = new Color(0.95f, 0.18f, 0.62f, 1f) * 2.8f;
			flag = true;
			break;
		case "MossyForestPatch":
			((Color)(ref val2))..ctor(0.2f, 0.34f, 0.14f, 1f);
			num = 0.02f;
			num2 = 0.18f;
			break;
		case "GlowingElderRune":
			((Color)(ref val2))..ctor(0.15f, 0.96f, 0.58f, 1f);
			num = 0.05f;
			num2 = 0.85f;
			val3 = new Color(0.12f, 1f, 0.58f, 1f) * 2.8f;
			flag = true;
			break;
		case "DeepIndigoLeaf":
			((Color)(ref val2))..ctor(0.24f, 0.18f, 0.46f, 1f);
			num = 0.12f;
			num2 = 0.62f;
			val3 = new Color(0.28f, 0.18f, 0.56f, 1f) * 0.7f;
			flag = true;
			break;
		case "ElderOrbCoreInner":
			((Color)(ref val2))..ctor(0.22f, 0.96f, 0.64f, 1f);
			num = 0.05f;
			num2 = 0.92f;
			val3 = new Color(0.18f, 0.98f, 0.62f, 1f) * 2.1f;
			flag = true;
			break;
		case "ElderOrbVortexGreen":
			((Color)(ref val2))..ctor(0.1f, 0.96f, 0.55f, 1f);
			num = 0.08f;
			num2 = 0.9f;
			val3 = new Color(0.08f, 1f, 0.56f, 1f) * 2.8f;
			flag = true;
			break;
		case "ElderOrbVortexPurple":
			((Color)(ref val2))..ctor(0.52f, 0.16f, 0.92f, 1f);
			num = 0.08f;
			num2 = 0.88f;
			val3 = new Color(0.56f, 0.18f, 0.95f, 1f) * 2.2f;
			flag = true;
			break;
		case "SkullEyeCavity":
			((Color)(ref val2))..ctor(0.03f, 0.03f, 0.03f, 1f);
			num = 0f;
			num2 = 0.05f;
			break;
		case "GlowingAcidRune":
			((Color)(ref val2))..ctor(0.42f, 0.88f, 0.14f, 1f);
			num = 0.08f;
			num2 = 0.8f;
			val3 = new Color(0.38f, 0.92f, 0.12f, 1f) * 2f;
			flag = true;
			break;
		case "BonemassAcidSurface":
			((Color)(ref val2))..ctor(0.28f, 0.88f, 0.04f, 1f);
			num = 0.05f;
			num2 = 0.9f;
			val3 = new Color(0.3f, 0.92f, 0.05f, 1f) * 2.1f;
			flag = true;
			break;
		case "BonemassBubblesA":
			((Color)(ref val2))..ctor(0.42f, 0.96f, 0.1f, 1f);
			num = 0.05f;
			num2 = 0.92f;
			val3 = new Color(0.4f, 0.98f, 0.12f, 1f) * 2.5f;
			flag = true;
			break;
		case "BonemassBubblesB":
			((Color)(ref val2))..ctor(0.5f, 0.98f, 0.16f, 1f);
			num = 0.05f;
			num2 = 0.92f;
			val3 = new Color(0.48f, 1f, 0.18f, 1f) * 2.7f;
			flag = true;
			break;
		case "BonemassRisingDroplets":
			((Color)(ref val2))..ctor(0.62f, 1f, 0.25f, 1f);
			num = 0f;
			num2 = 0.95f;
			val3 = new Color(0.58f, 1f, 0.24f, 1f) * 3.4f;
			flag = true;
			break;
		case "GlowingIceRune":
			((Color)(ref val2))..ctor(0.18f, 0.88f, 1f, 1f);
			num = 0.08f;
			num2 = 0.85f;
			val3 = new Color(0.15f, 0.9f, 1f, 1f) * 2.5f;
			flag = true;
			break;
		case "ModerCrystalCyan":
			((Color)(ref val2))..ctor(0.12f, 0.82f, 1f, 1f);
			num = 0.22f;
			num2 = 0.94f;
			val3 = new Color(0.1f, 0.85f, 1f, 1f) * 2.1f;
			flag = true;
			break;
		case "ModerCrystalAzure":
			((Color)(ref val2))..ctor(0.12f, 0.45f, 0.96f, 1f);
			num = 0.22f;
			num2 = 0.94f;
			val3 = new Color(0.12f, 0.48f, 1f, 1f) * 1.9f;
			flag = true;
			break;
		case "ModerCrystalViolet":
			((Color)(ref val2))..ctor(0.54f, 0.18f, 0.96f, 1f);
			num = 0.22f;
			num2 = 0.94f;
			val3 = new Color(0.56f, 0.2f, 1f, 1f) * 1.9f;
			flag = true;
			break;
		case "YagluthPinkStone":
			((Color)(ref val2))..ctor(0.35f, 0.25f, 0.27f, 1f);
			num = 0.06f;
			num2 = 0.22f;
			break;
		case "DarkCarvedRune":
			((Color)(ref val2))..ctor(0.04f, 0.04f, 0.05f, 1f);
			num = 0.1f;
			num2 = 0.12f;
			break;
		case "YagluthCharcoal":
			((Color)(ref val2))..ctor(0.08f, 0.05f, 0.07f, 1f);
			num = 0.04f;
			num2 = 0.08f;
			break;
		case "YagluthLavaBed":
			((Color)(ref val2))..ctor(1f, 0.42f, 0.08f, 1f);
			num = 0f;
			num2 = 0f;
			val3 = new Color(1f, 0.36f, 0.05f, 1f) * 2.2f;
			flag = true;
			break;
		case "GlowingFireRune":
			((Color)(ref val2))..ctor(1f, 0.48f, 0.26f, 1f);
			num = 0f;
			num2 = 0f;
			val3 = new Color(1f, 0.4f, 0.22f, 1f) * 2.1f;
			flag = true;
			break;
		case "YagluthFlameCore":
			((Color)(ref val2))..ctor(0.95f, 0.28f, 0.46f, 1f);
			num = 0f;
			num2 = 0f;
			val3 = new Color(1f, 0.35f, 0.48f, 1f) * 2.3f;
			flag = true;
			break;
		case "YagluthFlameMid":
			((Color)(ref val2))..ctor(0.58f, 0.12f, 0.72f, 1f);
			num = 0f;
			num2 = 0f;
			val3 = new Color(0.62f, 0.14f, 0.76f, 1f) * 1.85f;
			flag = true;
			break;
		case "YagluthFlameOuter":
			((Color)(ref val2))..ctor(0.46f, 0.06f, 0.24f, 1f);
			num = 0f;
			num2 = 0f;
			val3 = new Color(0.52f, 0.08f, 0.28f, 1f) * 1.45f;
			flag = true;
			break;
		case "YagluthFireSparks":
			((Color)(ref val2))..ctor(1f, 0.55f, 0.28f, 1f);
			num = 0f;
			num2 = 0f;
			val3 = new Color(1f, 0.45f, 0.62f, 1f) * 3.4f;
			flag = true;
			break;
		}
		Texture2D val4 = new Texture2D(64, 64, (TextureFormat)4, false);
		((Texture)val4).wrapMode = (TextureWrapMode)0;
		int hashCode = matName.GetHashCode();
		bool flag2 = matName == "ElderOrbCoreInner";
		bool flag3 = matName == "BonemassAcidSurface" || matName == "BonemassBubblesA" || matName == "BonemassBubblesB";
		bool flag4 = matName == "ModerCrystalCyan" || matName == "ModerCrystalAzure" || matName == "ModerCrystalViolet";
		bool flag5 = matName == "YagluthFlameCore" || matName == "YagluthFlameMid" || matName == "YagluthFlameOuter";
		Color val5 = default(Color);
		Color val6 = default(Color);
		Color val7 = default(Color);
		Color val8 = default(Color);
		Color val9 = default(Color);
		Color val10 = default(Color);
		Color val11 = default(Color);
		Color val12 = default(Color);
		for (int i = 0; i < 64; i++)
		{
			for (int j = 0; j < 64; j++)
			{
				if (flag2)
				{
					float num3 = Mathf.Sin((float)j * 0.18f + Mathf.Cos((float)i * 0.18f) * 2.5f) * 0.5f + 0.5f;
					((Color)(ref val5))..ctor(0.28f, 0.08f, 0.58f, 1f);
					((Color)(ref val6))..ctor(0.1f, 0.96f, 0.58f, 1f);
					val4.SetPixel(j, i, Color.Lerp(val5, val6, num3));
				}
				else if (flag3)
				{
					float num4 = Mathf.Sin((float)j * 0.28f + Mathf.Sin((float)i * 0.22f) * 2.2f) * Mathf.Cos((float)i * 0.28f - Mathf.Cos((float)j * 0.22f) * 2.2f);
					float num5 = Mathf.Clamp01(num4 * 0.5f + 0.5f);
					((Color)(ref val7))..ctor(0.14f, 0.58f, 0.02f, 1f);
					((Color)(ref val8))..ctor(0.65f, 1f, 0.22f, 1f);
					val4.SetPixel(j, i, Color.Lerp(val7, val8, num5));
				}
				else if (flag4)
				{
					float num6 = Mathf.Abs(Mathf.Sin(((float)j + (float)i * 0.7f) * 0.32f + (float)(hashCode & 7)));
					float num7 = Mathf.Abs(Mathf.Cos(((float)j * 0.6f - (float)i) * 0.28f + (float)(hashCode & 0xD)));
					float num8 = ((num6 < 0.14f || num7 < 0.12f) ? 1.35f : Mathf.Lerp(0.75f, 1.12f, num6 * num7));
					val4.SetPixel(j, i, new Color(Mathf.Clamp01(val2.r * num8), Mathf.Clamp01(val2.g * num8), Mathf.Clamp01(val2.b * num8), 1f));
				}
				else if (flag5)
				{
					float num9 = (float)j / 63f;
					float num10 = (float)i / 63f;
					float num11 = Mathf.Clamp01((1f - num10) * 0.48f + num9 * 0.62f);
					((Color)(ref val9))..ctor(0.24f, 0.015f, 0.06f, 1f);
					((Color)(ref val10))..ctor(0.42f, 0.06f, 0.68f, 1f);
					((Color)(ref val11))..ctor(0.86f, 0.14f, 0.48f, 1f);
					((Color)(ref val12))..ctor(1f, 0.44f, 0.1f, 1f);
					Color val13 = ((num11 < 0.38f) ? Color.Lerp(val9, val10, num11 / 0.38f) : ((!(num11 < 0.72f)) ? Color.Lerp(val11, val12, (num11 - 0.72f) / 0.28f) : Color.Lerp(val10, val11, (num11 - 0.38f) / 0.34f)));
					val4.SetPixel(j, i, val13);
				}
				else
				{
					float num12 = Mathf.Sin((float)j * 0.35f + Mathf.Sin((float)i * 0.2f) * 2f + (float)(hashCode & 0xF)) * 0.06f;
					float num13 = ((float)((j * 37 + i * 131 + hashCode) & 0xFF) / 255f - 0.5f) * 0.08f;
					float num14 = Mathf.Clamp(1f + num12 + num13, 0.82f, 1.18f);
					val4.SetPixel(j, i, new Color(Mathf.Clamp01(val2.r * num14), Mathf.Clamp01(val2.g * num14), Mathf.Clamp01(val2.b * num14), 1f));
				}
			}
		}
		val4.Apply();
		val.mainTexture = (Texture)(object)val4;
		val.color = Color.white;
		if (val.HasProperty("_Color"))
		{
			val.SetColor("_Color", Color.white);
		}
		if (val.HasProperty("_MainTex"))
		{
			val.SetTexture("_MainTex", (Texture)(object)val4);
		}
		if (val.HasProperty("_Metallic"))
		{
			val.SetFloat("_Metallic", num);
		}
		if (val.HasProperty("_Glossiness"))
		{
			val.SetFloat("_Glossiness", num2);
		}
		if (flag)
		{
			if (val.HasProperty("_EmissionColor"))
			{
				val.SetColor("_EmissionColor", val3);
			}
			if (val.HasProperty("_EmissiveColor"))
			{
				val.SetColor("_EmissiveColor", val3);
			}
			val.EnableKeyword("_EMISSION");
		}
		return val;
	}

	private static void BuildCustomBlenderModel(GameObject root, Shader baseShader, int pieceLayer)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: 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_00ae: 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_00eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: 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_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b4: Expected O, but got Unknown
		//IL_01de: Unknown result type (might be due to invalid IL or missing references)
		//IL_0211: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = new GameObject("BossSoulForgeModel");
		val.layer = pieceLayer;
		val.transform.SetParent(root.transform, false);
		val.transform.localPosition = Vector3.zero;
		val.transform.localRotation = Quaternion.identity;
		val.transform.localScale = Vector3.one;
		BoxCollider val2 = val.AddComponent<BoxCollider>();
		val2.center = new Vector3(0f, 0.48f, 0f);
		val2.size = new Vector3(2.22f, 0.96f, 1.16f);
		BoxCollider val3 = val.AddComponent<BoxCollider>();
		val3.center = new Vector3(0f, 1.32f, 0.42f);
		val3.size = new Vector3(2.35f, 0.72f, 0.28f);
		BoxCollider val4 = val.AddComponent<BoxCollider>();
		val4.center = new Vector3(-0.05f, 1.12f, -0.02f);
		val4.size = new Vector3(1.65f, 0.34f, 0.68f);
		BoxCollider val5 = root.GetComponent<BoxCollider>();
		if ((Object)(object)val5 == (Object)null)
		{
			val5 = root.AddComponent<BoxCollider>();
		}
		val5.center = new Vector3(0f, 0.55f, 0f);
		val5.size = new Vector3(2.22f, 1.1f, 1.16f);
		((Collider)val5).enabled = true;
		WearNTear component = root.GetComponent<WearNTear>();
		if ((Object)(object)component != (Object)null)
		{
			component.m_new = val;
			component.m_worn = val;
			component.m_broken = val;
		}
		GameObject val6 = new GameObject("SoulBrazierLight");
		val6.transform.SetParent(val.transform, false);
		val6.transform.localPosition = new Vector3(-0.5f, 1.32f, -0.04f);
		Light val7 = val6.AddComponent<Light>();
		val7.type = (LightType)2;
		val7.color = new Color(0.78f, 0.22f, 1f, 1f);
		val7.range = 5.5f;
		val7.intensity = 1.65f;
		LoadEmbeddedMeshIntoRoot(val, "BossSoulTableMesh.bin.gz", baseShader, pieceLayer);
	}

	private static void LoadEmbeddedMeshIntoRoot(GameObject modelRoot, string resourceName, Shader baseShader, int pieceLayer)
	{
		//IL_0235: 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_0230: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: 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_027a: Unknown result type (might be due to invalid IL or missing references)
		//IL_027c: Unknown result type (might be due to invalid IL or missing references)
		//IL_027e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0284: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0276: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Unknown result type (might be due to invalid IL or missing references)
		//IL_0350: Unknown result type (might be due to invalid IL or missing references)
		//IL_0357: Expected O, but got Unknown
		//IL_037b: Unknown result type (might be due to invalid IL or missing references)
		//IL_038a: Unknown result type (might be due to invalid IL or missing references)
		//IL_039c: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_041c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0421: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0453: Unknown result type (might be due to invalid IL or missing references)
		//IL_0458: Unknown result type (might be due to invalid IL or missing references)
		//IL_080a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0811: Expected O, but got Unknown
		//IL_069a: Unknown result type (might be due to invalid IL or missing references)
		//IL_069c: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_049f: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_06ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_062a: Unknown result type (might be due to invalid IL or missing references)
		//IL_062f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0876: Unknown result type (might be due to invalid IL or missing references)
		//IL_0878: Unknown result type (might be due to invalid IL or missing references)
		//IL_0749: Unknown result type (might be due to invalid IL or missing references)
		//IL_074e: Unknown result type (might be due to invalid IL or missing references)
		//IL_066f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0674: Unknown result type (might be due to invalid IL or missing references)
		//IL_07a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_07aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_07fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0803: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			using Stream stream = executingAssembly.GetManifestResourceStream(resourceName);
			if (stream != null)
			{
				using (GZipStream gZipStream = new GZipStream(stream, CompressionMode.Decompress))
				{
					using MemoryStream memoryStream = new MemoryStream();
					byte[] array = new byte[16384];
					int count;
					while ((count = gZipStream.Read(array, 0, array.Length)) > 0)
					{
						memoryStream.Write(array, 0, count);
					}
					memoryStream.Position = 0L;
					using BinaryReader binaryReader = new BinaryReader(memoryStream);
					uint num = binaryReader.ReadUInt32();
					Vector3 val = default(Vector3);
					Vector3 val2 = default(Vector3);
					Vector3 val3 = default(Vector3);
					Vector3 val4 = default(Vector3);
					Vector3 val6 = default(Vector3);
					Color32 val9 = default(Color32);
					for (int i = 0; i < num; i++)
					{
						byte count2 = binaryReader.ReadByte();
						string text = Encoding.UTF8.GetString(binaryReader.ReadBytes(count2));
						uint num2 = binaryReader.ReadUInt32();
						uint num3 = binaryReader.ReadUInt32();
						Vector3[] array2 = (Vector3[])(object)new Vector3[num2];
						Vector3[] array3 = (Vector3[])(object)new Vector3[num2];
						Vector2[] array4 = (Vector2[])(object)new Vector2[num2];
						int[] array5 = new int[num3];
						bool flag = text == "ElderOrbCoreInner" || text == "ElderOrbVortexGreen" || text == "ElderOrbVortexPurple";
						int num4;
						switch (text)
						{
						default:
							num4 = ((text == "BonemassRisingDroplets") ? 1 : 0);
							break;
						case "BonemassAcidSurface":
						case "BonemassBubblesA":
						case "BonemassBubblesB":
							num4 = 1;
							break;
						}
						bool flag2 = (byte)num4 != 0;
						bool flag3 = text == "ModerCrystalCyan" || text == "ModerCrystalAzure" || text == "ModerCrystalViolet";
						int num5;
						switch (text)
						{
						default:
							num5 = ((text == "YagluthFireSparks") ? 1 : 0);
							break;
						case "YagluthFlameCore":
						case "YagluthFlameMid":
						case "YagluthFlameOuter":
							num5 = 1;
							break;
						}
						bool flag4 = (byte)num5 != 0;
						((Vector3)(ref val))..ctor(0f, 0.88f, 0f);
						((Vector3)(ref val2))..ctor(0f, 0.885f, 0f);
						((Vector3)(ref val3))..ctor(0f, 0.5f, 0f);
						((Vector3)(ref val4))..ctor(0f, 0.46f, 0f);
						Vector3 val5 = (flag ? val : (flag2 ? val2 : (flag3 ? val3 : (flag4 ? val4 : Vector3.zero))));
						for (int j = 0; j < num2; j++)
						{
							((Vector3)(ref val6))..ctor(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
							ref Vector3 reference = ref array2[j];
							reference = ((flag || flag2 || flag3 || flag4) ? (val6 - val5) : val6);
						}
						for (int j = 0; j < num2; j++)
						{
							ref Vector3 reference2 = ref array3[j];
							reference2 = new Vector3(binaryReader.ReadSingle(), binaryReader.ReadSingle(), binaryReader.ReadSingle());
						}
						for (int j = 0; j < num2; j++)
						{
							ref Vector2 reference3 = ref array4[j];
							reference3 = new Vector2(binaryReader.ReadSingle(), binaryReader.ReadSingle());
						}
						for (int k = 0; k < num3; k++)
						{
							array5[k] = binaryReader.ReadUInt16();
						}
						GameObject val7 = new GameObject("Part_" + text);
						val7.layer = pieceLayer;
						val7.transform.SetParent(modelRoot.transform, false);
						val7.transform.localPosition = val5;
						val7.transform.localRotation = Quaternion.identity;
						val7.transform.localScale = Vector3.one;
						if (flag)
						{
							ElderOrbVortexAnimator elderOrbVortexAnimator = val7.AddComponent<ElderOrbVortexAnimator>();
							switch (text)
							{
							case "ElderOrbCoreInner":
								elderOrbVortexAnimator.m_rotSpeed = new Vector3(18f, 38f, 12f);
								elderOrbVortexAnimator.m_pulseScale = 0.06f;
								elderOrbVortexAnimator.m_pulseSpeed = 2.6f;
								elderOrbVortexAnimator.m_scrollUV = true;
								elderOrbVortexAnimator.m_uvSpeed = new Vector2(0.18f, 0.12f);
								break;
							case "ElderOrbVortexGreen":
								elderOrbVortexAnimator.m_rotSpeed = new Vector3(45f, -85f, 32f);
								elderOrbVortexAnimator.m_pulseScale = 0.045f;
								elderOrbVortexAnimator.m_pulseSpeed = 3.4f;
								break;
							case "ElderOrbVortexPurple":
								elderOrbVortexAnimator.m_rotSpeed = new Vector3(-55f, 72f, -42f);
								elderOrbVortexAnimator.m_pulseScale = 0.05f;
								elderOrbVortexAnimator.m_pulseSpeed = 2.9f;
								break;
							}
						}
						else if (flag2)
						{
							BonemassAcidBubbler bonemassAcidBubbler = val7.AddComponent<BonemassAcidBubbler>();
							bonemassAcidBubbler.m_baseLocalPos = val5;
							switch (text)
							{
							case "BonemassAcidSurface":
								bonemassAcidBubbler.m_mode = 0;
								break;
							case "BonemassBubblesA":
								bonemassAcidBubbler.m_mode = 1;
								bonemassAcidBubbler.m_phaseOffset = 0f;
								break;
							case "BonemassBubblesB":
								bonemassAcidBubbler.m_mode = 1;
								bonemassAcidBubbler.m_phaseOffset = 3.14159f;
								break;
							case "BonemassRisingDroplets":
								bonemassAcidBubbler.m_mode = 2;
								break;
							}
						}
						else if (flag3)
						{
							ModerCrystalPulseAnimator moderCrystalPulseAnimator = val7.AddComponent<ModerCrystalPulseAnimator>();
							moderCrystalPulseAnimator.m_baseLocalPos = val5;
							switch (text)
							{
							case "ModerCrystalCyan":
								moderCrystalPulseAnimator.m_phaseOffset = 0f;
								moderCrystalPulseAnimator.m_baseEmission = new Color(0.1f, 0.85f, 1f, 1f);
								break;
							case "ModerCrystalAzure":
								moderCrystalPulseAnimator.m_phaseOffset = 2.09f;
								moderCrystalPulseAnimator.m_baseEmission = new Color(0.12f, 0.48f, 1f, 1f);
								break;
							case "ModerCrystalViolet":
								moderCrystalPulseAnimator.m_phaseOffset = 4.18f;
								moderCrystalPulseAnimator.m_baseEmission = new Color(0.56f, 0.2f, 1f, 1f);
								break;
							}
						}
						else if (flag4)
						{
							YagluthEternalFlameAnimator yagluthEternalFlameAnimator = val7.AddComponent<YagluthEternalFlameAnimator>();
							yagluthEternalFlameAnimator.m_baseLocalPos = val5;
							switch (text)
							{
							case "YagluthFlameCore":
								yagluthEternalFlameAnimator.m_layerMode = 0;
								yagluthEternalFlameAnimator.m_rotSpeedY = 36f;
								yagluthEternalFlameAnimator.m_phaseOffset = 0f;
								yagluthEternalFlameAnimator.m_baseEmission = new Color(1f, 0.35f, 0.48f, 1f);
								break;
							case "YagluthFlameMid":
								yagluthEternalFlameAnimator.m_layerMode = 1;
								yagluthEternalFlameAnimator.m_rotSpeedY = -28f;
								yagluthEternalFlameAnimator.m_phaseOffset = 2.1f;
								yagluthEternalFlameAnimator.m_baseEmission = new Color(0.62f, 0.14f, 0.76f, 1f);
								break;
							case "YagluthFlameOuter":
								yagluthEternalFlameAnimator.m_layerMode = 2;
								yagluthEternalFlameAnimator.m_rotSpeedY = 20f;
								yagluthEternalFlameAnimator.m_phaseOffset = 4.2f;
								yagluthEternalFlameAnimator.m_baseEmission = new Color(0.52f, 0.08f, 0.28f, 1f);
								break;
							case "YagluthFireSparks":
								yagluthEternalFlameAnimator.m_layerMode = 3;
								yagluthEternalFlameAnimator.m_rotSpeedY = 52f;
								yagluthEternalFlameAnimator.m_phaseOffset = 1.05f;
								yagluthEternalFlameAnimator.m_baseEmission = new Color(1f, 0.48f, 0.62f, 1f);
								break;
							}
						}
						Mesh val8 = new Mesh();
						((Object)val8).name = "Mesh_" + text;
						val8.vertices = array2;
						val8.normals = array3;
						val8.uv = array4;
						Vector2[] uv = (Vector2[])(object)new Vector2[num2];
						Color32[] array6 = (Color32[])(object)new Color32[num2];
						((Color32)(ref val9))..ctor((byte)0, (byte)0, (byte)0, byte.MaxValue);
						for (int j = 0; j < num2; j++)
						{
							array6[j] = val9;
						}
						val8.uv2 = uv;
						val8.colors32 = array6;
						val8.triangles = array5;
						val8.RecalculateBounds();
						val8.RecalculateTangents();
						MeshFilter val10 = val7.AddComponent<MeshFilter>();
						val10.sharedMesh = val8;
						MeshRenderer val11 = val7.AddComponent<MeshRenderer>();
						((Renderer)val11).sharedMaterial = CreatePBRMaterial(baseShader, text);
					}
					return;
				}
			}
			Debug.LogWarning((object)("[WeaponAttributes] Resource " + resourceName + " not found in assembly!"));
		}
		catch (Exception ex)
		{
			Debug.LogError((object)("[WeaponAttributes] Failed to load mesh " + resourceName + ": " + ex));
		}
	}
}
public class ElderOrbVortexAnimator : MonoBehaviour
{
	public Vector3 m_rotSpeed = new Vector3(30f, 60f, 20f);

	public float m_pulseScale = 0.05f;

	public float m_pulseSpeed = 3f;

	public bool m_scrollUV = false;

	public Vector2 m_uvSpeed = new Vector2(0.15f, 0.1f);

	private Material m_instMat;

	private float m_phaseOffset;

	private void Start()
	{
		m_phaseOffset = Random.Range(0f, 6.28f);
		if (m_scrollUV)
		{
			MeshRenderer component = ((Component)this).GetComponent<MeshRenderer>();
			if ((Object)(object)component != (Object)null && (Object)(object)((Renderer)component).material != (Object)null)
			{
				m_instMat = ((Renderer)component).material;
			}
		}
	}

	private void Update()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		float deltaTime = Time.deltaTime;
		float num = Time.time + m_phaseOffset;
		((Component)this).transform.Rotate(m_rotSpeed * deltaTime, (Space)1);
		float num2 = 1f + Mathf.Sin(num * m_pulseSpeed) * m_pulseScale;
		((Component)this).transform.localScale = new Vector3(num2, num2, num2);
		if (m_scrollUV && (Object)(object)m_instMat != (Object)null)
		{
			Vector2 mainTextureOffset = default(Vector2);
			((Vector2)(ref mainTextureOffset))..ctor(num * m_uvSpeed.x % 1f, num * m_uvSpeed.y % 1f);
			m_instMat.mainTextureOffset = mainTextureOffset;
		}
	}
}
public class BonemassAcidBubbler : MonoBehaviour
{
	public int m_mode = 0;

	public Vector3 m_baseLocalPos = new Vector3(0f, 0.885f, 0f);

	public float m_phaseOffset = 0f;

	private Material m_instMat;

	private void Start()
	{
		MeshRenderer component = ((Component)this).GetComponent<MeshRenderer>();
		if ((Object)(object)component != (Object)null && (Object)(object)((Renderer)component).material != (Object)null)
		{
			m_instMat = ((Renderer)component).material;
		}
	}

	private void Update()
	{
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0150: 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_024d: Unknown result type (might be due to invalid IL or missing references)
		//IL_026a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
		float deltaTime = Time.deltaTime;
		float num = Time.time + m_phaseOffset;
		if (m_mode == 0)
		{
			((Component)this).transform.Rotate(0f, 14f * deltaTime, 0f, (Space)1);
			float num2 = Mathf.Sin(num * 2.2f) * 0.006f;
			((Component)this).transform.localPosition = new Vector3(m_baseLocalPos.x, m_baseLocalPos.y + num2, m_baseLocalPos.z);
			if ((Object)(object)m_instMat != (Object)null)
			{
				m_instMat.mainTextureOffset = new Vector2(num * 0.09f % 1f, Mathf.Sin(num * 0.6f) * 0.12f % 1f);
			}
		}
		else if (m_mode == 1)
		{
			float num3 = Mathf.Sin(num * 3.6f);
			float num4 = Mathf.Cos(num * 2.3f);
			float num5 = 1f + num3 * 0.24f + num4 * 0.08f;
			float num6 = 1f - num3 * 0.06f;
			((Component)this).transform.localScale = new Vector3(num6, Mathf.Max(0.55f, num5), num6);
			((Component)this).transform.Rotate(0f, ((m_phaseOffset > 1f) ? (-12f) : 12f) * deltaTime, 0f, (Space)1);
			((Component)this).transform.localPosition = new Vector3(m_baseLocalPos.x, m_baseLocalPos.y + num3 * 0.01f, m_baseLocalPos.z);
		}
		else if (m_mode == 2)
		{
			float num7 = Time.time * 0.75f % 1f;
			float num8 = num7 * 0.11f;
			float num9 = Mathf.Sin(num7 * (float)Math.PI);
			float num10 = Mathf.Lerp(0.65f, 1.18f, num9);
			((Component)this).transform.localPosition = new Vector3(m_baseLocalPos.x, m_baseLocalPos.y + num8, m_baseLocalPos.z);
			((Component)this).transform.localScale = new Vector3(1f, num10, 1f);
			((Component)this).transform.Rotate(0f, 38f * deltaTime, 0f, (Space)1);
		}
	}
}
public class ModerCrystalPulseAnimator : MonoBehaviour
{
	public Vector3 m_baseLocalPos = new Vector3(0f, 0.5f, 0f);

	public float m_phaseOffset = 0f;

	public Color m_baseEmission = new Color(0.15f, 0.85f, 1f, 1f);

	private Material m_instMat;

	private void Start()
	{
		MeshRenderer component = ((Component)this).GetComponent<MeshRenderer>();
		if ((Object)(object)component != (Object)null && (Object)(object)((Renderer)component).material != (Object)null)
		{
			m_instMat = ((Renderer)component).material;
		}
	}

	private void Update()
	{
		//IL_0076: 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_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_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
		float num = Time.time * 2.2f + m_phaseOffset;
		float num2 = Mathf.Sin(num) * 0.5f + 0.5f;
		float num3 = 1f + Mathf.Sin(num) * 0.025f;
		float num4 = Mathf.Sin(num * 0.8f) * 0.008f;
		((Component)this).transform.localPosition = new Vector3(m_baseLocalPos.x, m_baseLocalPos.y + num4, m_baseLocalPos.z);
		((Component)this).transform.localScale = new Vector3(1f, num3, 1f);
		if ((Object)(object)m_instMat != (Object)null)
		{
			float num5 = Mathf.Lerp(1.35f, 3.1f, num2);
			Color val = m_baseEmission * num5;
			if (m_instMat.HasProperty("_EmissionColor"))
			{
				m_instMat.SetColor("_EmissionColor", val);
			}
			m_instMat.mainTextureOffset = new Vector2(Time.time * 0.04f % 1f, Time.time * 0.06f % 1f);
		}
	}
}
public class YagluthEternalFlameAnimator : MonoBehaviour
{
	public int m_layerMode = 0;

	public Vector3 m_baseLocalPos = new Vector3(0f, 0.46f, 0f);

	public float m_rotSpeedY = 25f;

	public float m_phaseOffset = 0f;

	public Color m_baseEmission = new Color(0.85f, 0.2f, 0.65f, 1f);

	private Material m_instMat;

	private Mesh m_instMesh;

	private Vector3[] m_baseVerts;

	private Vector3[] m_workVerts;

	private float m_accumYaw = 0f;

	private void Start()
	{
		MeshRenderer component = ((Component)this).GetComponent<MeshRenderer>();
		if ((Object)(object)component != (Object)null && (Object)(object)((Renderer)component).material != (Object)null)
		{
			m_instMat = ((Renderer)component).material;
			if (m_instMat.HasProperty("_Glossiness"))
			{
				m_instMat.SetFloat("_Glossiness", 0f);
			}
			if (m_instMat.HasProperty("_Metallic"))
			{
				m_instMat.SetFloat("_Metallic", 0f);
			}
		}
		if (m_layerMode >= 0 && m_layerMode <= 2)
		{
			MeshFilter component2 = ((Component)this).GetComponent<MeshFilter>();
			if ((Object)(object)component2 != (Object)null && (Object)(object)component2.mesh != (Object)null)
			{
				m_instMesh = component2.mesh;
				m_baseVerts = m_instMesh.vertices;
				m_workVerts = (Vector3[])(object)new Vector3[m_baseVerts.Length];
			}
		}
	}

	private void Update()
	{
		//IL_014c: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0273: Unknown result type (might be due to invalid IL or missing references)
		//IL_0278: Unknown result type (might be due to invalid IL or missing references)
		//IL_030f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0355: Unknown result type (might be due to invalid IL or missing references)
		//IL_035c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0361: Unknown result type (might be due to invalid IL or missing references)
		//IL_0388: Unknown result type (might be due to invalid IL or missing references)
		float deltaTime = Time.deltaTime;
		float num = Time.time * 4.2f + m_phaseOffset;
		if (m_layerMode == 3)
		{
			float num2 = Time.time * 0.85f % 1f;
			float num3 = num2 * 0.16f;
			float num4 = Mathf.Lerp(0.7f, 1.25f, Mathf.Sin(num2 * (float)Math.PI));
			m_accumYaw = (m_accumYaw + m_rotSpeedY * deltaTime) % 360f;
			((Component)this).transform.localPosition = new Vector3(m_baseLocalPos.x, m_baseLocalPos.y + num3, m_baseLocalPos.z);
			((Component)this).transform.localRotation = Quaternion.Euler(0f, m_accumYaw, 0f);
			((Component)this).transform.localScale = new Vector3(1f, num4, 1f);
			return;
		}
		m_accumYaw = (m_accumYaw + m_rotSpeedY * deltaTime) % 360f;
		float num5 = Mathf.Sin(num * 1.15f) * 3.5f;
		float num6 = Mathf.Cos(num * 0.92f) * 3.5f;
		((Component)this).transform.localRotation = Quaternion.Euler(num5, m_accumYaw, num6);
		if ((Object)(object)m_instMesh != (Object)null && m_baseVerts != null)
		{
			int num7 = m_baseVerts.Length;
			for (int i = 0; i < num7; i++)
			{
				Vector3 val = m_baseVerts[i];
				float num8 = Mathf.Clamp01(val.y / 0.56f);
				float num9 = num8 * num8;
				float num10 = val.y * 15f - num * 2.2f + (val.x - val.z) * 9f;
				float num11 = Mathf.Sin(num10) * 0.022f * num9;
				float num12 = Mathf.Cos(num10 * 0.88f + 1.3f) * 0.022f * num9;
				float num13 = Mathf.Sin(num * 1.7f + (val.x + val.z) * 12f) * 0.028f * num8;
				ref Vector3 reference = ref m_workVerts[i];
				reference = new Vector3(val.x + num11, val.y + num13, val.z + num12);
			}
			m_instMesh.vertices = m_workVerts;
		}
		if ((Object)(object)m_instMat != (Object)null)
		{
			float num14 = Time.time * ((m_layerMode == 1) ? (-0.16f) : 0.18f) % 1f;
			float num15 = (0f - Time.time) * (0.48f + (float)m_layerMode * 0.1f) % 1f;
			m_instMat.mainTextureOffset = new Vector2(num14, num15);
			float num16 = 0.5f + 0.5f * Mathf.Sin(num * 2.1f + Mathf.Cos(num * 3.3f));
			float num17 = Mathf.Lerp(1.45f, 2.75f, num16);
			Color val2 = m_baseEmission * num17;
			if (m_instMat.HasProperty("_EmissionColor"))
			{
				m_instMat.SetColor("_EmissionColor", val2);
			}
		}
	}
}
public class YagluthFireLightFlicker : MonoBehaviour
{
	public Light m_light;

	private void Update()
	{
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due t