Decompiled source of Tsunami Items v0.0.9

TsunamiItemCore.dll

Decompiled a month 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 System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates.Croco;
using EntityStates.Mage.Weapon;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Navigation;
using TsunamiItemCore.Equipment;
using TsunamiItemCore.Items;
using TsunamiItemCore.Utils;
using TsunamiItemCore.Utils.Components;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyCompany("TsunamiItemCore")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TsunamiItemCore")]
[assembly: AssemblyTitle("TsunamiItemCore")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace TsunamiItemCore
{
	[BepInPlugin("com.Phreel.TsunamiItemsRevived", "TsunamiItems", "0.0.9")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "ItemAPI", "LanguageAPI" })]
	public class Main : BaseUnityPlugin
	{
		public const string ModGuid = "com.Phreel.TsunamiItemsRevived";

		public const string ModName = "TsunamiItemsRevived";

		public const string ModVer = "0.0.9";

		public static AssetBundle MainAssets;

		public List<ItemBase> Items = new List<ItemBase>();

		public List<EquipmentBase> Equipments = new List<EquipmentBase>();

		public static ManualLogSource ModLogger;

		private void Awake()
		{
			ModLogger = ((BaseUnityPlugin)this).Logger;
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("TsunamiItemCore.tsunamiitemcoreassets"))
			{
				MainAssets = AssetBundle.LoadFromStream(stream);
			}
			IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes()
				where !type.IsAbstract && type.IsSubclassOf(typeof(ItemBase))
				select type;
			foreach (Type item in enumerable)
			{
				ItemBase itemBase = (ItemBase)Activator.CreateInstance(item);
				if (ValidateItem(itemBase, Items))
				{
					itemBase.Init(((BaseUnityPlugin)this).Config);
				}
			}
			IEnumerable<Type> enumerable2 = from type in Assembly.GetExecutingAssembly().GetTypes()
				where !type.IsAbstract && type.IsSubclassOf(typeof(EquipmentBase))
				select type;
			foreach (Type item2 in enumerable2)
			{
				EquipmentBase equipmentBase = (EquipmentBase)Activator.CreateInstance(item2);
				if (ValidateEquipment(equipmentBase, Equipments))
				{
					equipmentBase.Init(((BaseUnityPlugin)this).Config);
				}
			}
		}

		public bool ValidateItem(ItemBase item, List<ItemBase> itemList)
		{
			bool value = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Enable Item?", true, "Should this item appear in runs?").Value;
			bool value2 = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Blacklist Item from AI Use?", false, "Should the AI not be able to obtain this item?").Value;
			if (value)
			{
				itemList.Add(item);
				if (value2)
				{
					item.AIBlacklisted = true;
				}
			}
			return value;
		}

		public bool ValidateEquipment(EquipmentBase equipment, List<EquipmentBase> equipmentList)
		{
			if (((BaseUnityPlugin)this).Config.Bind<bool>("Equipment: " + equipment.EquipmentName, "Enable Equipment?", true, "Should this equipment appear in runs?").Value)
			{
				equipmentList.Add(equipment);
				return true;
			}
			return false;
		}
	}
}
namespace TsunamiItemCore.Utils
{
	public static class ItemHelpers
	{
		public static RendererInfo[] ItemDisplaySetup(GameObject obj, bool debugmode = false)
		{
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: 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_00de: Unknown result type (might be due to invalid IL or missing references)
			List<Renderer> list = new List<Renderer>();
			MeshRenderer[] componentsInChildren = obj.GetComponentsInChildren<MeshRenderer>();
			if (componentsInChildren.Length != 0)
			{
				list.AddRange((IEnumerable<Renderer>)(object)componentsInChildren);
			}
			SkinnedMeshRenderer[] componentsInChildren2 = obj.GetComponentsInChildren<SkinnedMeshRenderer>();
			if (componentsInChildren2.Length != 0)
			{
				list.AddRange((IEnumerable<Renderer>)(object)componentsInChildren2);
			}
			RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[list.Count];
			for (int i = 0; i < list.Count; i++)
			{
				if (debugmode)
				{
					MaterialControllerComponents.HGControllerFinder hGControllerFinder = ((Component)list[i]).gameObject.AddComponent<MaterialControllerComponents.HGControllerFinder>();
					hGControllerFinder.Renderer = list[i];
				}
				array[i] = new RendererInfo
				{
					defaultMaterial = ((list[i] is SkinnedMeshRenderer) ? list[i].sharedMaterial : list[i].material),
					renderer = list[i],
					defaultShadowCastingMode = (ShadowCastingMode)1,
					ignoreOverlays = false
				};
			}
			return array;
		}

		public static string OrderManifestLoreFormatter(string deviceName, string estimatedDelivery, string sentTo, string trackingNumber, string devicePickupDesc, string shippingMethod, string orderDetails)
		{
			string[] value = new string[19]
			{
				"<align=left>Estimated Delivery:<indent=70%>Sent To:</indent></align>",
				"<align=left>" + estimatedDelivery + "<indent=70%>" + sentTo + "</indent></align>",
				"\n",
				"<indent=1%><style=cIsDamage><size=125%><u>  Shipping Details:</u></size></style></indent>",
				"\n",
				"<indent=2%>-Order: <style=cIsUtility>" + deviceName + "</style></indent>",
				"<indent=4%><style=cStack>Tracking Number:  " + trackingNumber + "</style></indent>",
				"\n",
				"<indent=2%>-Order Description: " + devicePickupDesc + "</indent>",
				"\n",
				"<indent=2%>-Shipping Method: <style=cIsHealth>" + shippingMethod + "</style></indent>",
				"\n",
				"\n",
				"\n",
				"<indent=2%>-Order Details: " + orderDetails + "</indent>",
				"\n",
				"\n",
				"\n",
				"<style=cStack>Delivery being brought to you by the brand new </style><style=cIsUtility>Orbital Drop-Crate System (TM)</style>. <style=cStack><u>No refunds.</u></style>"
			};
			return string.Join("\n", value);
		}

		public static void RefreshTimedBuffs(CharacterBody body, BuffDef buffDef, float duration)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_003e: 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)
			if (!Object.op_Implicit((Object)body) || body.GetBuffCount(buffDef) <= 0)
			{
				return;
			}
			foreach (TimedBuff timedBuff in body.timedBuffs)
			{
				if (buffDef.buffIndex == timedBuff.buffIndex)
				{
					timedBuff.timer = duration;
				}
			}
		}

		public static void RefreshTimedBuffs(CharacterBody body, BuffDef buffDef, float taperStart, float taperDuration)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)body) || body.GetBuffCount(buffDef) <= 0)
			{
				return;
			}
			int num = 0;
			foreach (TimedBuff timedBuff in body.timedBuffs)
			{
				if (buffDef.buffIndex == timedBuff.buffIndex)
				{
					timedBuff.timer = taperStart + (float)num * taperDuration;
					num++;
				}
			}
		}

		public static void AddBuffAndDot(BuffDef buff, float duration, int stackCount, CharacterBody body)
		{
			//IL_0033: 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_003b: Invalid comparison between Unknown and I4
			//IL_007f: 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_0053: 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)
			if (!NetworkServer.active)
			{
				return;
			}
			DotIndex val = (DotIndex)Array.FindIndex(DotController.dotDefs, (DotDef dotDef) => (Object)(object)dotDef.associatedBuff == (Object)(object)buff);
			for (int i = 0; i < stackCount; i++)
			{
				if ((int)val != -1)
				{
					DotController.InflictDot(((Component)body).gameObject, ((Component)body).gameObject, val, duration, 0.25f, (uint?)null);
				}
				else
				{
					body.AddTimedBuff(buff.buffIndex, duration);
				}
			}
		}

		public static DotIndex FindAssociatedDotForBuff(BuffDef buff)
		{
			//IL_0024: 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)
			return (DotIndex)Array.FindIndex(DotController.dotDefs, (DotDef dotDef) => (Object)(object)dotDef.associatedBuff == (Object)(object)buff);
		}
	}
	public static class MathHelpers
	{
		public static string FloatToPercentageString(float number, float numberBase = 100f)
		{
			return (number * numberBase).ToString("##0") + "%";
		}

		public static Vector3 ClosestPointOnSphereToPoint(Vector3 origin, float radius, Vector3 targetPosition)
		{
			//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_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_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//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_0019: 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_0022: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = targetPosition - origin;
			val = Vector3.Normalize(val);
			val *= radius;
			return origin + val;
		}

		public static List<Vector3> DistributePointsEvenlyAroundSphere(int points, float radius, Vector3 origin)
		{
			//IL_0066: 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_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			List<Vector3> list = new List<Vector3>();
			double num = Math.PI * (3.0 - Math.Sqrt(5.0));
			for (int i = 0; i < points; i++)
			{
				int num2 = 1 - i / (points - 1) * 2;
				double num3 = Math.Sqrt(1 - num2 * num2);
				double num4 = num * (double)i;
				float num5 = (float)(Math.Cos(num4) * num3);
				float num6 = (float)(Math.Sin(num4) * num3);
				Vector3 val = origin + new Vector3(num5, (float)num2, num6);
				list.Add(val * radius);
			}
			return list;
		}

		public static List<Vector3> DistributePointsEvenlyAroundCircle(int points, float radius, Vector3 origin, float angleOffset = 0f)
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_0053: Unknown result type (might be due to invalid IL or missing references)
			List<Vector3> list = new List<Vector3>();
			Vector3 item = default(Vector3);
			for (int i = 0; i < points; i++)
			{
				double num = Math.PI * 2.0 / (double)points;
				double num2 = num * (double)i + (double)angleOffset;
				((Vector3)(ref item))..ctor((float)((double)radius * Math.Cos(num2) + (double)origin.x), origin.y, (float)((double)radius * Math.Sin(num2) + (double)origin.z));
				list.Add(item);
			}
			return list;
		}

		public static Vector3 GetPointOnUnitSphereCap(Quaternion targetDirection, float angle)
		{
			//IL_0013: 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_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: 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_0046: 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_004c: 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)
			float num = Random.Range(0f, angle) * (MathF.PI / 180f);
			Vector2 insideUnitCircle = Random.insideUnitCircle;
			Vector2 val = ((Vector2)(ref insideUnitCircle)).normalized * Mathf.Sin(num);
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(val.x, val.y, Mathf.Cos(num));
			return targetDirection * val2;
		}

		public static Vector3 GetPointOnUnitSphereCap(Vector3 targetDirection, float angle)
		{
			//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_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return GetPointOnUnitSphereCap(Quaternion.LookRotation(targetDirection), angle);
		}

		public static Vector3 RandomPointOnCircle(Vector3 origin, float radius, Xoroshiro128Plus random)
		{
			//IL_0012: 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_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_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			float num = random.RangeFloat(0f, MathF.PI * 2f);
			return origin + new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)) * radius;
		}

		public static float InverseHyperbolicScaling(float baseValue, float additionalValue, float maxValue, int itemCount)
		{
			return baseValue + (maxValue - baseValue) * (1f - 1f / (1f + additionalValue * (float)(itemCount - 1)));
		}
	}
	public static class MiscUtils
	{
		public static Vector3? RaycastToDirection(Vector3 position, float maxDistance, Vector3 direction, int layer)
		{
			//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_0019: Unknown result type (might be due to invalid IL or missing references)
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(new Ray(position, direction), ref val, maxDistance, layer, (QueryTriggerInteraction)1))
			{
				return ((RaycastHit)(ref val)).point;
			}
			return null;
		}

		public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> toShuffle, Xoroshiro128Plus random)
		{
			List<T> list = new List<T>();
			foreach (T item in toShuffle)
			{
				list.Insert(random.RangeInt(0, list.Count + 1), item);
			}
			return list;
		}

		public static Vector3 FindClosestNodeToPosition(Vector3 position, HullClassification hullClassification, bool checkAirNodes = false)
		{
			//IL_001c: 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: 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_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_0052: 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_0068: 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_0043: 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_006c: Unknown result type (might be due to invalid IL or missing references)
			NodeGraph val = (checkAirNodes ? SceneInfo.instance.airNodes : SceneInfo.instance.groundNodes);
			NodeIndex val2 = val.FindClosestNode(position, hullClassification, float.PositiveInfinity);
			if (val2 != NodeIndex.invalid)
			{
				Vector3 result = default(Vector3);
				val.GetNodePosition(val2, ref result);
				return result;
			}
			Main.ModLogger.LogInfo((object)$"No closest node to be found for XYZ: {position}, returning 0,0,0");
			return Vector3.zero;
		}

		public static bool TeleportBody(CharacterBody characterBody, GameObject target, GameObject teleportEffect, HullClassification hullClassification, Xoroshiro128Plus rng, float minDistance = 20f, float maxDistance = 45f, bool teleportAir = false)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: 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_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_0064: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)characterBody))
			{
				return false;
			}
			SpawnCard val = ScriptableObject.CreateInstance<SpawnCard>();
			val.hullSize = hullClassification;
			val.nodeGraphType = (GraphType)(teleportAir ? 1 : 0);
			val.prefab = Resources.Load<GameObject>("SpawnCards/HelperPrefab");
			GameObject val2 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(val, new DirectorPlacementRule
			{
				placementMode = (PlacementMode)1,
				position = target.transform.position,
				minDistance = minDistance,
				maxDistance = maxDistance
			}, rng));
			if (Object.op_Implicit((Object)(object)val2))
			{
				TeleportHelper.TeleportBody(characterBody, val2.transform.position);
				if (Object.op_Implicit((Object)(object)teleportEffect))
				{
					EffectManager.SimpleEffect(teleportEffect, val2.transform.position, Quaternion.identity, true);
				}
				Object.Destroy((Object)(object)val2);
				Object.Destroy((Object)(object)val);
				return true;
			}
			Object.Destroy((Object)(object)val);
			return false;
		}

		public static Vector3? AboveTargetVectorFromDamageInfo(DamageInfo damageInfo, float distanceAboveTarget)
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Expected O, but got Unknown
			//IL_0055: 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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: 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_0088: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Expected O, but got Unknown
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Expected O, but got Unknown
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: 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_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			if (damageInfo.rejected || !Object.op_Implicit((Object)(object)damageInfo.attacker))
			{
				return null;
			}
			CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)component))
			{
				TeamMask enemyTeams = TeamMask.GetEnemyTeams(component.teamComponent.teamIndex);
				HurtBox val = new SphereSearch
				{
					radius = 1f,
					mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
					origin = damageInfo.position
				}.RefreshCandidates().FilterCandidatesByHurtBoxTeam(enemyTeams).OrderCandidatesByDistance()
					.FilterCandidatesByDistinctHurtBoxEntities()
					.GetHurtBoxes()
					.FirstOrDefault();
				if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)val.healthComponent) && Object.op_Implicit((Object)val.healthComponent.body))
				{
					CharacterBody body = val.healthComponent.body;
					Vector3 val2 = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f));
					Vector3? val3 = RaycastToDirection(val2, distanceAboveTarget, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
					if (val3.HasValue)
					{
						return val3.Value;
					}
					return val2 + Vector3.up * distanceAboveTarget;
				}
			}
			return null;
		}

		public static Vector3? AboveTargetBody(CharacterBody body, float distanceAbove)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			//IL_0035: 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_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_005b: 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_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: 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_0085: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)body))
			{
				return null;
			}
			Vector3 val = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f));
			Vector3? val2 = RaycastToDirection(val, distanceAbove, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
			if (val2.HasValue)
			{
				return val2.Value;
			}
			return val + Vector3.up * distanceAbove;
		}

		public static Dictionary<string, Vector3> GetAimSurfaceAlignmentInfo(Ray ray, int layerMask, float distance)
		{
			//IL_0007: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_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_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_008f: 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)
			Dictionary<string, Vector3> dictionary = new Dictionary<string, Vector3>();
			RaycastHit val = default(RaycastHit);
			if (!Physics.Raycast(ray, ref val, distance, layerMask, (QueryTriggerInteraction)1))
			{
				Main.ModLogger.LogInfo((object)$"GetAimSurfaceAlignmentInfo did not hit anything in the aim direction on the specified layer ({layerMask}).");
				return null;
			}
			Vector3 point = ((RaycastHit)(ref val)).point;
			Vector3 val2 = Vector3.Cross(((Ray)(ref ray)).direction, Vector3.up);
			Vector3 val3 = Vector3.ProjectOnPlane(((RaycastHit)(ref val)).normal, val2);
			Vector3 value = Vector3.Cross(val2, val3);
			dictionary.Add("Position", point);
			dictionary.Add("Right", val2);
			dictionary.Add("Forward", value);
			dictionary.Add("Up", val3);
			return dictionary;
		}
	}
	public static class NetworkingHelpers
	{
		public static T GetObjectFromNetIdValue<T>(uint netIdValue)
		{
			//IL_002c: 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)
			NetworkInstanceId key = default(NetworkInstanceId);
			((NetworkInstanceId)(ref key))..ctor(netIdValue);
			NetworkIdentity value = null;
			if (NetworkServer.active)
			{
				NetworkServer.objects.TryGetValue(key, out value);
			}
			else
			{
				ClientScene.objects.TryGetValue(key, out value);
			}
			if (Object.op_Implicit((Object)(object)value))
			{
				T component = ((Component)value).GetComponent<T>();
				if (component != null)
				{
					return component;
				}
			}
			return default(T);
		}
	}
}
namespace TsunamiItemCore.Utils.Components
{
	public class MaterialControllerComponents
	{
		public class HGControllerFinder : MonoBehaviour
		{
			public Renderer Renderer;

			public Material Material;

			public void Start()
			{
				if (Object.op_Implicit((Object)(object)Renderer))
				{
					Material = Renderer.materials[0];
					if (Object.op_Implicit((Object)(object)Material))
					{
						switch (((Object)Material.shader).name)
						{
						case "Hopoo Games/Deferred/Standard":
						{
							HGStandardController hGStandardController = ((Component)this).gameObject.AddComponent<HGStandardController>();
							hGStandardController.Material = Material;
							hGStandardController.Renderer = Renderer;
							break;
						}
						case "Hopoo Games/FX/Cloud Remap":
						{
							HGCloudRemapController hGCloudRemapController = ((Component)this).gameObject.AddComponent<HGCloudRemapController>();
							hGCloudRemapController.Material = Material;
							hGCloudRemapController.Renderer = Renderer;
							break;
						}
						case "Hopoo Games/FX/Cloud Intersection Remap":
						{
							HGIntersectionController hGIntersectionController = ((Component)this).gameObject.AddComponent<HGIntersectionController>();
							hGIntersectionController.Material = Material;
							hGIntersectionController.Renderer = Renderer;
							break;
						}
						}
					}
				}
				Object.Destroy((Object)(object)this);
			}
		}

		public class HGStandardController : MonoBehaviour
		{
			public enum _RampInfoEnum
			{
				TwoTone = 0,
				SmoothedTwoTone = 1,
				Unlitish = 3,
				Subsurface = 4,
				Grass = 5
			}

			public enum _DecalLayerEnum
			{
				Default,
				Environment,
				Character,
				Misc
			}

			public enum _CullEnum
			{
				Off,
				Front,
				Back
			}

			public enum _PrintDirectionEnum
			{
				BottomUp = 0,
				TopDown = 1,
				BackToFront = 3
			}

			public Material Material;

			public Renderer Renderer;

			public string MaterialName;

			public bool _EnableCutout;

			public Color _Color;

			public Texture _MainTex;

			public Vector2 _MainTexScale;

			public Vector2 _MainTexOffset;

			[Range(0f, 5f)]
			public float _NormalStrength;

			public Texture _NormalTex;

			public Vector2 _NormalTexScale;

			public Vector2 _NormalTexOffset;

			public Color _EmColor;

			public Texture _EmTex;

			[Range(0f, 10f)]
			public float _EmPower;

			[Range(0f, 1f)]
			public float _Smoothness;

			public bool _IgnoreDiffuseAlphaForSpeculars;

			public _RampInfoEnum _RampChoice;

			public _DecalLayerEnum _DecalLayer;

			[Range(0f, 1f)]
			public float _SpecularStrength;

			[Range(0.1f, 20f)]
			public float _SpecularExponent;

			public _CullEnum _Cull_Mode;

			public bool _EnableDither;

			[Range(0f, 1f)]
			public float _FadeBias;

			public bool _EnableFresnelEmission;

			public Texture _FresnelRamp;

			[Range(0.1f, 20f)]
			public float _FresnelPower;

			public Texture _FresnelMask;

			[Range(0f, 20f)]
			public float _FresnelBoost;

			public bool _EnablePrinting;

			[Range(-25f, 25f)]
			public float _SliceHeight;

			[Range(0f, 10f)]
			public float _PrintBandHeight;

			[Range(0f, 1f)]
			public float _PrintAlphaDepth;

			public Texture _PrintAlphaTexture;

			public Vector2 _PrintAlphaTextureScale;

			public Vector2 _PrintAlphaTextureOffset;

			[Range(0f, 10f)]
			public float _PrintColorBoost;

			[Range(0f, 4f)]
			public float _PrintAlphaBias;

			[Range(0f, 1f)]
			public float _PrintEmissionToAlbedoLerp;

			public _PrintDirectionEnum _PrintDirection;

			public Texture _PrintRamp;

			[Range(-10f, 10f)]
			public float _EliteBrightnessMin;

			[Range(-10f, 10f)]
			public float _EliteBrightnessMax;

			public bool _EnableSplatmap;

			public bool _UseVertexColorsInstead;

			[Range(0f, 1f)]
			public float _BlendDepth;

			public Texture _SplatmapTex;

			public Vector2 _SplatmapTexScale;

			public Vector2 _SplatmapTexOffset;

			[Range(0f, 20f)]
			public float _SplatmapTileScale;

			public Texture _GreenChannelTex;

			public Texture _GreenChannelNormalTex;

			[Range(0f, 1f)]
			public float _GreenChannelSmoothness;

			[Range(-2f, 5f)]
			public float _GreenChannelBias;

			public Texture _BlueChannelTex;

			public Texture _BlueChannelNormalTex;

			[Range(0f, 1f)]
			public float _BlueChannelSmoothness;

			[Range(-2f, 5f)]
			public float _BlueChannelBias;

			public bool _EnableFlowmap;

			public Texture _FlowTexture;

			public Texture _FlowHeightmap;

			public Vector2 _FlowHeightmapScale;

			public Vector2 _FlowHeightmapOffset;

			public Texture _FlowHeightRamp;

			public Vector2 _FlowHeightRampScale;

			public Vector2 _FlowHeightRampOffset;

			[Range(-1f, 1f)]
			public float _FlowHeightBias;

			[Range(0.1f, 20f)]
			public float _FlowHeightPower;

			[Range(0.1f, 20f)]
			public float _FlowEmissionStrength;

			[Range(0f, 15f)]
			public float _FlowSpeed;

			[Range(0f, 5f)]
			public float _MaskFlowStrength;

			[Range(0f, 5f)]
			public float _NormalFlowStrength;

			[Range(0f, 10f)]
			public float _FlowTextureScaleFactor;

			public bool _EnableLimbRemoval;

			public void Start()
			{
				GrabMaterialValues();
			}

			public void GrabMaterialValues()
			{
				//IL_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: 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_0078: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
				//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_00e6: 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_02cd: Unknown result type (might be due to invalid IL or missing references)
				//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
				//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
				//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
				//IL_0402: Unknown result type (might be due to invalid IL or missing references)
				//IL_0407: Unknown result type (might be due to invalid IL or missing references)
				//IL_0520: Unknown result type (might be due to invalid IL or missing references)
				//IL_0525: Unknown result type (might be due to invalid IL or missing references)
				//IL_0536: Unknown result type (might be due to invalid IL or missing references)
				//IL_053b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0562: Unknown result type (might be due to invalid IL or missing references)
				//IL_0567: Unknown result type (might be due to invalid IL or missing references)
				//IL_0578: Unknown result type (might be due to invalid IL or missing references)
				//IL_057d: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)Material))
				{
					_EnableCutout = Material.IsKeywordEnabled("CUTOUT");
					_Color = Material.GetColor("_Color");
					_MainTex = Material.GetTexture("_MainTex");
					_MainTexScale = Material.GetTextureScale("_MainTex");
					_MainTexOffset = Material.GetTextureOffset("_MainTex");
					_NormalStrength = Material.GetFloat("_NormalStrength");
					_NormalTex = Material.GetTexture("_NormalTex");
					_NormalTexScale = Material.GetTextureScale("_NormalTex");
					_NormalTexOffset = Material.GetTextureOffset("_NormalTex");
					_EmColor = Material.GetColor("_EmColor");
					_EmTex = Material.GetTexture("_EmTex");
					_EmPower = Material.GetFloat("_EmPower");
					_Smoothness = Material.GetFloat("_Smoothness");
					_IgnoreDiffuseAlphaForSpeculars = Material.IsKeywordEnabled("FORCE_SPEC");
					_RampChoice = (_RampInfoEnum)Material.GetFloat("_RampInfo");
					_DecalLayer = (_DecalLayerEnum)Material.GetFloat("_DecalLayer");
					_SpecularStrength = Material.GetFloat("_SpecularStrength");
					_SpecularExponent = Material.GetFloat("_SpecularExponent");
					_Cull_Mode = (_CullEnum)Material.GetFloat("_Cull");
					_EnableDither = Material.IsKeywordEnabled("DITHER");
					_FadeBias = Material.GetFloat("_FadeBias");
					_EnableFresnelEmission = Material.IsKeywordEnabled("FRESNEL_EMISSION");
					_FresnelRamp = Material.GetTexture("_FresnelRamp");
					_FresnelPower = Material.GetFloat("_FresnelPower");
					_FresnelMask = Material.GetTexture("_FresnelMask");
					_FresnelBoost = Material.GetFloat("_FresnelBoost");
					_EnablePrinting = Material.IsKeywordEnabled("PRINT_CUTOFF");
					_SliceHeight = Material.GetFloat("_SliceHeight");
					_PrintBandHeight = Material.GetFloat("_SliceBandHeight");
					_PrintAlphaDepth = Material.GetFloat("_SliceAlphaDepth");
					_PrintAlphaTexture = Material.GetTexture("_SliceAlphaTex");
					_PrintAlphaTextureScale = Material.GetTextureScale("_SliceAlphaTex");
					_PrintAlphaTextureOffset = Material.GetTextureOffset("_SliceAlphaTex");
					_PrintColorBoost = Material.GetFloat("_PrintBoost");
					_PrintAlphaBias = Material.GetFloat("_PrintBias");
					_PrintEmissionToAlbedoLerp = Material.GetFloat("_PrintEmissionToAlbedoLerp");
					_PrintDirection = (_PrintDirectionEnum)Material.GetFloat("_PrintDirection");
					_PrintRamp = Material.GetTexture("_PrintRamp");
					_EliteBrightnessMin = Material.GetFloat("_EliteBrightnessMin");
					_EliteBrightnessMax = Material.GetFloat("_EliteBrightnessMax");
					_EnableSplatmap = Material.IsKeywordEnabled("SPLATMAP");
					_UseVertexColorsInstead = Material.IsKeywordEnabled("USE_VERTEX_COLORS");
					_BlendDepth = Material.GetFloat("_Depth");
					_SplatmapTex = Material.GetTexture("_SplatmapTex");
					_SplatmapTexScale = Material.GetTextureScale("_SplatmapTex");
					_SplatmapTexOffset = Material.GetTextureOffset("_SplatmapTex");
					_SplatmapTileScale = Material.GetFloat("_SplatmapTileScale");
					_GreenChannelTex = Material.GetTexture("_GreenChannelTex");
					_GreenChannelNormalTex = Material.GetTexture("_GreenChannelNormalTex");
					_GreenChannelSmoothness = Material.GetFloat("_GreenChannelSmoothness");
					_GreenChannelBias = Material.GetFloat("_GreenChannelBias");
					_BlueChannelTex = Material.GetTexture("_BlueChannelTex");
					_BlueChannelNormalTex = Material.GetTexture("_BlueChannelNormalTex");
					_BlueChannelSmoothness = Material.GetFloat("_BlueChannelSmoothness");
					_BlueChannelBias = Material.GetFloat("_BlueChannelBias");
					_EnableFlowmap = Material.IsKeywordEnabled("FLOWMAP");
					_FlowTexture = Material.GetTexture("_FlowTex");
					_FlowHeightmap = Material.GetTexture("_FlowHeightmap");
					_FlowHeightmapScale = Material.GetTextureScale("_FlowHeightmap");
					_FlowHeightmapOffset = Material.GetTextureOffset("_FlowHeightmap");
					_FlowHeightRamp = Material.GetTexture("_FlowHeightRamp");
					_FlowHeightRampScale = Material.GetTextureScale("_FlowHeightRamp");
					_FlowHeightRampOffset = Material.GetTextureOffset("_FlowHeightRamp");
					_FlowHeightBias = Material.GetFloat("_FlowHeightBias");
					_FlowHeightPower = Material.GetFloat("_FlowHeightPower");
					_FlowEmissionStrength = Material.GetFloat("_FlowEmissionStrength");
					_FlowSpeed = Material.GetFloat("_FlowSpeed");
					_MaskFlowStrength = Material.GetFloat("_FlowMaskStrength");
					_NormalFlowStrength = Material.GetFloat("_FlowNormalStrength");
					_FlowTextureScaleFactor = Material.GetFloat("_FlowTextureScaleFactor");
					_EnableLimbRemoval = Material.IsKeywordEnabled("LIMBREMOVAL");
					MaterialName = ((Object)Material).name;
				}
			}

			public void Update()
			{
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: 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_013d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0154: Unknown result type (might be due to invalid IL or missing references)
				//IL_0182: Unknown result type (might be due to invalid IL or missing references)
				//IL_0427: Unknown result type (might be due to invalid IL or missing references)
				//IL_043e: Unknown result type (might be due to invalid IL or missing references)
				//IL_05ae: Unknown result type (might be due to invalid IL or missing references)
				//IL_05c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_07e6: Unknown result type (might be due to invalid IL or missing references)
				//IL_07fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0854: Unknown result type (might be due to invalid IL or missing references)
				//IL_086b: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)Material))
				{
					if (((Object)Material).name != MaterialName && Object.op_Implicit((Object)(object)Renderer))
					{
						GrabMaterialValues();
						PutMaterialIntoMeshRenderer(Renderer, Material);
					}
					SetShaderKeywordBasedOnBool(_EnableCutout, Material, "CUTOUT");
					Material.SetColor("_Color", _Color);
					if (Object.op_Implicit((Object)(object)_MainTex))
					{
						Material.SetTexture("_MainTex", _MainTex);
						Material.SetTextureScale("_MainTex", _MainTexScale);
						Material.SetTextureOffset("_MainTex", _MainTexOffset);
					}
					else
					{
						Material.SetTexture("_MainTex", (Texture)null);
					}
					Material.SetFloat("_NormalStrength", _NormalStrength);
					if (Object.op_Implicit((Object)(object)_NormalTex))
					{
						Material.SetTexture("_NormalTex", _NormalTex);
						Material.SetTextureScale("_NormalTex", _NormalTexScale);
						Material.SetTextureOffset("_NormalTex", _NormalTexOffset);
					}
					else
					{
						Material.SetTexture("_NormalTex", (Texture)null);
					}
					Material.SetColor("_EmColor", _EmColor);
					if (Object.op_Implicit((Object)(object)_EmTex))
					{
						Material.SetTexture("_EmTex", _EmTex);
					}
					else
					{
						Material.SetTexture("_EmTex", (Texture)null);
					}
					Material.SetFloat("_EmPower", _EmPower);
					Material.SetFloat("_Smoothness", _Smoothness);
					SetShaderKeywordBasedOnBool(_IgnoreDiffuseAlphaForSpeculars, Material, "FORCE_SPEC");
					Material.SetFloat("_RampInfo", Convert.ToSingle(_RampChoice));
					Material.SetFloat("_DecalLayer", Convert.ToSingle(_DecalLayer));
					Material.SetFloat("_SpecularStrength", _SpecularStrength);
					Material.SetFloat("_SpecularExponent", _SpecularExponent);
					Material.SetFloat("_Cull", Convert.ToSingle(_Cull_Mode));
					SetShaderKeywordBasedOnBool(_EnableDither, Material, "DITHER");
					Material.SetFloat("_FadeBias", _FadeBias);
					SetShaderKeywordBasedOnBool(_EnableFresnelEmission, Material, "FRESNEL_EMISSION");
					if (Object.op_Implicit((Object)(object)_FresnelRamp))
					{
						Material.SetTexture("_FresnelRamp", _FresnelRamp);
					}
					else
					{
						Material.SetTexture("_FresnelRamp", (Texture)null);
					}
					Material.SetFloat("_FresnelPower", _FresnelPower);
					if (Object.op_Implicit((Object)(object)_FresnelMask))
					{
						Material.SetTexture("_FresnelMask", _FresnelMask);
					}
					else
					{
						Material.SetTexture("_FresnelMask", (Texture)null);
					}
					Material.SetFloat("_FresnelBoost", _FresnelBoost);
					SetShaderKeywordBasedOnBool(_EnablePrinting, Material, "PRINT_CUTOFF");
					Material.SetFloat("_SliceHeight", _SliceHeight);
					Material.SetFloat("_SliceBandHeight", _PrintBandHeight);
					Material.SetFloat("_SliceAlphaDepth", _PrintAlphaDepth);
					if (Object.op_Implicit((Object)(object)_PrintAlphaTexture))
					{
						Material.SetTexture("_SliceAlphaTex", _PrintAlphaTexture);
						Material.SetTextureScale("_SliceAlphaTex", _PrintAlphaTextureScale);
						Material.SetTextureOffset("_SliceAlphaTex", _PrintAlphaTextureOffset);
					}
					else
					{
						Material.SetTexture("_SliceAlphaTex", (Texture)null);
					}
					Material.SetFloat("_PrintBoost", _PrintColorBoost);
					Material.SetFloat("_PrintBias", _PrintAlphaBias);
					Material.SetFloat("_PrintEmissionToAlbedoLerp", _PrintEmissionToAlbedoLerp);
					Material.SetFloat("_PrintDirection", Convert.ToSingle(_PrintDirection));
					if (Object.op_Implicit((Object)(object)_PrintRamp))
					{
						Material.SetTexture("_PrintRamp", _PrintRamp);
					}
					else
					{
						Material.SetTexture("_PrintRamp", (Texture)null);
					}
					Material.SetFloat("_EliteBrightnessMin", _EliteBrightnessMin);
					Material.SetFloat("_EliteBrightnessMax", _EliteBrightnessMax);
					SetShaderKeywordBasedOnBool(_EnableSplatmap, Material, "SPLATMAP");
					SetShaderKeywordBasedOnBool(_UseVertexColorsInstead, Material, "USE_VERTEX_COLORS");
					Material.SetFloat("_Depth", _BlendDepth);
					if (Object.op_Implicit((Object)(object)_SplatmapTex))
					{
						Material.SetTexture("_SplatmapTex", _SplatmapTex);
						Material.SetTextureScale("_SplatmapTex", _SplatmapTexScale);
						Material.SetTextureOffset("_SplatmapTex", _SplatmapTexOffset);
					}
					else
					{
						Material.SetTexture("_SplatmapTex", (Texture)null);
					}
					Material.SetFloat("_SplatmapTileScale", _SplatmapTileScale);
					if (Object.op_Implicit((Object)(object)_GreenChannelTex))
					{
						Material.SetTexture("_GreenChannelTex", _GreenChannelTex);
					}
					else
					{
						Material.SetTexture("_GreenChannelTex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_GreenChannelNormalTex))
					{
						Material.SetTexture("_GreenChannelNormalTex", _GreenChannelNormalTex);
					}
					else
					{
						Material.SetTexture("_GreenChannelNormalTex", (Texture)null);
					}
					Material.SetFloat("_GreenChannelSmoothness", _GreenChannelSmoothness);
					Material.SetFloat("_GreenChannelBias", _GreenChannelBias);
					if (Object.op_Implicit((Object)(object)_BlueChannelTex))
					{
						Material.SetTexture("_BlueChannelTex", _BlueChannelTex);
					}
					else
					{
						Material.SetTexture("_BlueChannelTex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_BlueChannelNormalTex))
					{
						Material.SetTexture("_BlueChannelNormalTex", _BlueChannelNormalTex);
					}
					else
					{
						Material.SetTexture("_BlueChannelNormalTex", (Texture)null);
					}
					Material.SetFloat("_BlueChannelSmoothness", _BlueChannelSmoothness);
					Material.SetFloat("_BlueChannelBias", _BlueChannelBias);
					SetShaderKeywordBasedOnBool(_EnableFlowmap, Material, "FLOWMAP");
					if (Object.op_Implicit((Object)(object)_FlowTexture))
					{
						Material.SetTexture("_FlowTex", _FlowTexture);
					}
					else
					{
						Material.SetTexture("_FlowTex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_FlowHeightmap))
					{
						Material.SetTexture("_FlowHeightmap", _FlowHeightmap);
						Material.SetTextureScale("_FlowHeightmap", _FlowHeightmapScale);
						Material.SetTextureOffset("_FlowHeightmap", _FlowHeightmapOffset);
					}
					else
					{
						Material.SetTexture("_FlowHeightmap", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_FlowHeightRamp))
					{
						Material.SetTexture("_FlowHeightRamp", _FlowHeightRamp);
						Material.SetTextureScale("_FlowHeightRamp", _FlowHeightRampScale);
						Material.SetTextureOffset("_FlowHeightRamp", _FlowHeightRampOffset);
					}
					else
					{
						Material.SetTexture("_FlowHeightRamp", (Texture)null);
					}
					Material.SetFloat("_FlowHeightBias", _FlowHeightBias);
					Material.SetFloat("_FlowHeightPower", _FlowHeightPower);
					Material.SetFloat("_FlowEmissionStrength", _FlowEmissionStrength);
					Material.SetFloat("_FlowSpeed", _FlowSpeed);
					Material.SetFloat("_FlowMaskStrength", _MaskFlowStrength);
					Material.SetFloat("_FlowNormalStrength", _NormalFlowStrength);
					Material.SetFloat("_FlowTextureScaleFactor", _FlowTextureScaleFactor);
					SetShaderKeywordBasedOnBool(_EnableLimbRemoval, Material, "LIMBREMOVAL");
				}
			}
		}

		public class HGCloudRemapController : MonoBehaviour
		{
			public enum _SrcBlendFloatEnum
			{
				Zero,
				One,
				DstColor,
				SrcColor,
				OneMinusDstColor,
				SrcAlpha,
				OneMinusSrcColor,
				DstAlpha,
				OneMinusDstAlpha,
				SrcAlphaSaturate,
				OneMinusSrcAlpha
			}

			public enum _DstBlendFloatEnum
			{
				Zero,
				One,
				DstColor,
				SrcColor,
				OneMinusDstColor,
				SrcAlpha,
				OneMinusSrcColor,
				DstAlpha,
				OneMinusDstAlpha,
				SrcAlphaSaturate,
				OneMinusSrcAlpha
			}

			public enum _CullEnum
			{
				Off,
				Front,
				Back
			}

			public enum _ZTestEnum
			{
				Disabled,
				Never,
				Less,
				Equal,
				LessEqual,
				Greater,
				NotEqual,
				GreaterEqual,
				Always
			}

			public Material Material;

			public Renderer Renderer;

			public string MaterialName;

			public _SrcBlendFloatEnum _Source_Blend_Mode;

			public _DstBlendFloatEnum _Destination_Blend_Mode;

			public int _InternalSimpleBlendMode;

			public Color _Tint;

			public bool _DisableRemapping;

			public Texture _MainTex;

			public Vector2 _MainTexScale;

			public Vector2 _MainTexOffset;

			public Texture _RemapTex;

			public Vector2 _RemapTexScale;

			public Vector2 _RemapTexOffset;

			[Range(0f, 2f)]
			public float _SoftFactor;

			[Range(1f, 20f)]
			public float _BrightnessBoost;

			[Range(0f, 20f)]
			public float _AlphaBoost;

			[Range(0f, 1f)]
			public float _AlphaBias;

			public bool _UseUV1;

			public bool _FadeWhenNearCamera;

			[Range(0f, 1f)]
			public float _FadeCloseDistance;

			public _CullEnum _Cull_Mode;

			public _ZTestEnum _ZTest_Mode;

			[Range(-10f, 10f)]
			public float _DepthOffset;

			public bool _CloudRemapping;

			public bool _DistortionClouds;

			[Range(-2f, 2f)]
			public float _DistortionStrength;

			public Texture _Cloud1Tex;

			public Vector2 _Cloud1TexScale;

			public Vector2 _Cloud1TexOffset;

			public Texture _Cloud2Tex;

			public Vector2 _Cloud2TexScale;

			public Vector2 _Cloud2TexOffset;

			public Vector4 _CutoffScroll;

			public bool _VertexColors;

			public bool _LuminanceForVertexAlpha;

			public bool _LuminanceForTextureAlpha;

			public bool _VertexOffset;

			public bool _FresnelFade;

			public bool _SkyboxOnly;

			[Range(-20f, 20f)]
			public float _FresnelPower;

			[Range(0f, 3f)]
			public float _VertexOffsetAmount;

			public void Start()
			{
				GrabMaterialValues();
			}

			public void GrabMaterialValues()
			{
				//IL_0065: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
				//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_024b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0250: Unknown result type (might be due to invalid IL or missing references)
				//IL_0261: Unknown result type (might be due to invalid IL or missing references)
				//IL_0266: Unknown result type (might be due to invalid IL or missing references)
				//IL_028d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0292: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
				//IL_02be: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)Material))
				{
					_Source_Blend_Mode = (_SrcBlendFloatEnum)Material.GetFloat("_SrcBlend");
					_Destination_Blend_Mode = (_DstBlendFloatEnum)Material.GetFloat("_DstBlend");
					_InternalSimpleBlendMode = (int)Material.GetFloat("_InternalSimpleBlendMode");
					_Tint = Material.GetColor("_TintColor");
					_DisableRemapping = Material.IsKeywordEnabled("DISABLEREMAP");
					_MainTex = Material.GetTexture("_MainTex");
					_MainTexScale = Material.GetTextureScale("_MainTex");
					_MainTexOffset = Material.GetTextureOffset("_MainTex");
					_RemapTex = Material.GetTexture("_RemapTex");
					_RemapTexScale = Material.GetTextureScale("_RemapTex");
					_RemapTexOffset = Material.GetTextureOffset("_RemapTex");
					_SoftFactor = Material.GetFloat("_InvFade");
					_BrightnessBoost = Material.GetFloat("_Boost");
					_AlphaBoost = Material.GetFloat("_AlphaBoost");
					_AlphaBias = Material.GetFloat("_AlphaBias");
					_UseUV1 = Material.IsKeywordEnabled("USE_UV1");
					_FadeWhenNearCamera = Material.IsKeywordEnabled("FADECLOSE");
					_FadeCloseDistance = Material.GetFloat("_FadeCloseDistance");
					_Cull_Mode = (_CullEnum)Material.GetFloat("_Cull");
					_ZTest_Mode = (_ZTestEnum)Material.GetFloat("_ZTest");
					_DepthOffset = Material.GetFloat("_DepthOffset");
					_CloudRemapping = Material.IsKeywordEnabled("USE_CLOUDS");
					_DistortionClouds = Material.IsKeywordEnabled("CLOUDOFFSET");
					_DistortionStrength = Material.GetFloat("_DistortionStrength");
					_Cloud1Tex = Material.GetTexture("_Cloud1Tex");
					_Cloud1TexScale = Material.GetTextureScale("_Cloud1Tex");
					_Cloud1TexOffset = Material.GetTextureOffset("_Cloud1Tex");
					_Cloud2Tex = Material.GetTexture("_Cloud2Tex");
					_Cloud2TexScale = Material.GetTextureScale("_Cloud2Tex");
					_Cloud2TexOffset = Material.GetTextureOffset("_Cloud2Tex");
					_CutoffScroll = Material.GetVector("_CutoffScroll");
					_VertexColors = Material.IsKeywordEnabled("VERTEXCOLOR");
					_LuminanceForVertexAlpha = Material.IsKeywordEnabled("VERTEXALPHA");
					_LuminanceForTextureAlpha = Material.IsKeywordEnabled("CALCTEXTUREALPHA");
					_VertexOffset = Material.IsKeywordEnabled("VERTEXOFFSET");
					_FresnelFade = Material.IsKeywordEnabled("FRESNEL");
					_SkyboxOnly = Material.IsKeywordEnabled("SKYBOX_ONLY");
					_FresnelPower = Material.GetFloat("_FresnelPower");
					_VertexOffsetAmount = Material.GetFloat("_OffsetAmount");
					MaterialName = ((Object)Material).name;
				}
			}

			public void Update()
			{
				//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
				//IL_0114: Unknown result type (might be due to invalid IL or missing references)
				//IL_012b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0180: Unknown result type (might be due to invalid IL or missing references)
				//IL_0197: Unknown result type (might be due to invalid IL or missing references)
				//IL_032d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0344: Unknown result type (might be due to invalid IL or missing references)
				//IL_039b: Unknown result type (might be due to invalid IL or missing references)
				//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)Material))
				{
					if (((Object)Material).name != MaterialName && Object.op_Implicit((Object)(object)Renderer))
					{
						GrabMaterialValues();
						PutMaterialIntoMeshRenderer(Renderer, Material);
					}
					Material.SetFloat("_SrcBlend", Convert.ToSingle(_Source_Blend_Mode));
					Material.SetFloat("_DstBlend", Convert.ToSingle(_Destination_Blend_Mode));
					Material.SetFloat("_InternalSimpleBlendMode", (float)_InternalSimpleBlendMode);
					Material.SetColor("_TintColor", _Tint);
					SetShaderKeywordBasedOnBool(_DisableRemapping, Material, "DISABLEREMAP");
					if (Object.op_Implicit((Object)(object)_MainTex))
					{
						Material.SetTexture("_MainTex", _MainTex);
						Material.SetTextureScale("_MainTex", _MainTexScale);
						Material.SetTextureOffset("_MainTex", _MainTexOffset);
					}
					else
					{
						Material.SetTexture("_MainTex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_RemapTex))
					{
						Material.SetTexture("_RemapTex", _RemapTex);
						Material.SetTextureScale("_RemapTex", _RemapTexScale);
						Material.SetTextureOffset("_RemapTex", _RemapTexOffset);
					}
					else
					{
						Material.SetTexture("_RemapTex", (Texture)null);
					}
					Material.SetFloat("_InvFade", _SoftFactor);
					Material.SetFloat("_Boost", _BrightnessBoost);
					Material.SetFloat("_AlphaBoost", _AlphaBoost);
					Material.SetFloat("_AlphaBias", _AlphaBias);
					SetShaderKeywordBasedOnBool(_UseUV1, Material, "USE_UV1");
					SetShaderKeywordBasedOnBool(_FadeWhenNearCamera, Material, "FADECLOSE");
					Material.SetFloat("_FadeCloseDistance", _FadeCloseDistance);
					Material.SetFloat("_Cull", Convert.ToSingle(_Cull_Mode));
					Material.SetFloat("_ZTest", Convert.ToSingle(_ZTest_Mode));
					Material.SetFloat("_DepthOffset", _DepthOffset);
					SetShaderKeywordBasedOnBool(_CloudRemapping, Material, "USE_CLOUDS");
					SetShaderKeywordBasedOnBool(_DistortionClouds, Material, "CLOUDOFFSET");
					Material.SetFloat("_DistortionStrength", _DistortionStrength);
					if (Object.op_Implicit((Object)(object)_Cloud1Tex))
					{
						Material.SetTexture("_Cloud1Tex", _Cloud1Tex);
						Material.SetTextureScale("_Cloud1Tex", _Cloud1TexScale);
						Material.SetTextureOffset("_Cloud1Tex", _Cloud1TexOffset);
					}
					else
					{
						Material.SetTexture("_Cloud1Tex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_Cloud2Tex))
					{
						Material.SetTexture("_Cloud2Tex", _Cloud2Tex);
						Material.SetTextureScale("_Cloud2Tex", _Cloud2TexScale);
						Material.SetTextureOffset("_Cloud2Tex", _Cloud2TexOffset);
					}
					else
					{
						Material.SetTexture("_Cloud2Tex", (Texture)null);
					}
					Material.SetVector("_CutoffScroll", _CutoffScroll);
					SetShaderKeywordBasedOnBool(_VertexColors, Material, "VERTEXCOLOR");
					SetShaderKeywordBasedOnBool(_LuminanceForVertexAlpha, Material, "VERTEXALPHA");
					SetShaderKeywordBasedOnBool(_LuminanceForTextureAlpha, Material, "CALCTEXTUREALPHA");
					SetShaderKeywordBasedOnBool(_VertexOffset, Material, "VERTEXOFFSET");
					SetShaderKeywordBasedOnBool(_FresnelFade, Material, "FRESNEL");
					SetShaderKeywordBasedOnBool(_SkyboxOnly, Material, "SKYBOX_ONLY");
					Material.SetFloat("_FresnelPower", _FresnelPower);
					Material.SetFloat("_OffsetAmount", _VertexOffsetAmount);
				}
			}
		}

		public class HGIntersectionController : MonoBehaviour
		{
			public enum _SrcBlendFloatEnum
			{
				Zero,
				One,
				DstColor,
				SrcColor,
				OneMinusDstColor,
				SrcAlpha,
				OneMinusSrcColor,
				DstAlpha,
				OneMinusDstAlpha,
				SrcAlphaSaturate,
				OneMinusSrcAlpha
			}

			public enum _DstBlendFloatEnum
			{
				Zero,
				One,
				DstColor,
				SrcColor,
				OneMinusDstColor,
				SrcAlpha,
				OneMinusSrcColor,
				DstAlpha,
				OneMinusDstAlpha,
				SrcAlphaSaturate,
				OneMinusSrcAlpha
			}

			public enum _CullEnum
			{
				Off,
				Front,
				Back
			}

			public Material Material;

			public Renderer Renderer;

			public string MaterialName;

			public _SrcBlendFloatEnum _Source_Blend_Mode;

			public _DstBlendFloatEnum _Destination_Blend_Mode;

			public Color _Tint;

			public Texture _MainTex;

			public Vector2 _MainTexScale;

			public Vector2 _MainTexOffset;

			public Texture _Cloud1Tex;

			public Vector2 _Cloud1TexScale;

			public Vector2 _Cloud1TexOffset;

			public Texture _Cloud2Tex;

			public Vector2 _Cloud2TexScale;

			public Vector2 _Cloud2TexOffset;

			public Texture _RemapTex;

			public Vector2 _RemapTexScale;

			public Vector2 _RemapTexOffset;

			public Vector4 _CutoffScroll;

			[Range(0f, 30f)]
			public float _SoftFactor;

			[Range(0.1f, 20f)]
			public float _SoftPower;

			[Range(0f, 5f)]
			public float _BrightnessBoost;

			[Range(0.1f, 20f)]
			public float _RimPower;

			[Range(0f, 5f)]
			public float _RimStrength;

			[Range(0f, 20f)]
			public float _AlphaBoost;

			[Range(0f, 20f)]
			public float _IntersectionStrength;

			public _CullEnum _Cull_Mode;

			public bool _FadeFromVertexColorsOn;

			public bool _EnableTriplanarProjectionsForClouds;

			public void Start()
			{
				GrabMaterialValues();
			}

			public void GrabMaterialValues()
			{
				//IL_004e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_0103: Unknown result type (might be due to invalid IL or missing references)
				//IL_0114: Unknown result type (might be due to invalid IL or missing references)
				//IL_0119: Unknown result type (might be due to invalid IL or missing references)
				//IL_0140: Unknown result type (might be due to invalid IL or missing references)
				//IL_0145: Unknown result type (might be due to invalid IL or missing references)
				//IL_0156: Unknown result type (might be due to invalid IL or missing references)
				//IL_015b: Unknown result type (might be due to invalid IL or missing references)
				//IL_016c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0171: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)Material))
				{
					_Source_Blend_Mode = (_SrcBlendFloatEnum)Material.GetFloat("_SrcBlendFloat");
					_Destination_Blend_Mode = (_DstBlendFloatEnum)Material.GetFloat("_DstBlendFloat");
					_Tint = Material.GetColor("_TintColor");
					_MainTex = Material.GetTexture("_MainTex");
					_MainTexScale = Material.GetTextureScale("_MainTex");
					_MainTexOffset = Material.GetTextureOffset("_MainTex");
					_Cloud1Tex = Material.GetTexture("_Cloud1Tex");
					_Cloud1TexScale = Material.GetTextureScale("_Cloud1Tex");
					_Cloud1TexOffset = Material.GetTextureOffset("_Cloud1Tex");
					_Cloud2Tex = Material.GetTexture("_Cloud2Tex");
					_Cloud2TexScale = Material.GetTextureScale("_Cloud2Tex");
					_Cloud2TexOffset = Material.GetTextureOffset("_Cloud2Tex");
					_RemapTex = Material.GetTexture("_RemapTex");
					_RemapTexScale = Material.GetTextureScale("_RemapTex");
					_RemapTexOffset = Material.GetTextureOffset("_RemapTex");
					_CutoffScroll = Material.GetVector("_CutoffScroll");
					_SoftFactor = Material.GetFloat("_InvFade");
					_SoftPower = Material.GetFloat("_SoftPower");
					_BrightnessBoost = Material.GetFloat("_Boost");
					_RimPower = Material.GetFloat("_RimPower");
					_RimStrength = Material.GetFloat("_RimStrength");
					_AlphaBoost = Material.GetFloat("_AlphaBoost");
					_IntersectionStrength = Material.GetFloat("_IntersectionStrength");
					_Cull_Mode = (_CullEnum)Material.GetFloat("_Cull");
					_FadeFromVertexColorsOn = Material.IsKeywordEnabled("FADE_FROM_VERTEX_COLORS");
					_EnableTriplanarProjectionsForClouds = Material.IsKeywordEnabled("TRIPLANAR");
					MaterialName = ((Object)Material).name;
				}
			}

			public void Update()
			{
				//IL_00a7: 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_00fc: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: Unknown result type (might be due to invalid IL or missing references)
				//IL_0168: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_022d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0244: Unknown result type (might be due to invalid IL or missing references)
				//IL_0272: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)Material))
				{
					if (((Object)Material).name != MaterialName && Object.op_Implicit((Object)(object)Renderer))
					{
						GrabMaterialValues();
						PutMaterialIntoMeshRenderer(Renderer, Material);
					}
					Material.SetFloat("_SrcBlendFloat", Convert.ToSingle(_Source_Blend_Mode));
					Material.SetFloat("_DstBlendFloat", Convert.ToSingle(_Destination_Blend_Mode));
					Material.SetColor("_TintColor", _Tint);
					if (Object.op_Implicit((Object)(object)_MainTex))
					{
						Material.SetTexture("_MainTex", _MainTex);
						Material.SetTextureScale("_MainTex", _MainTexScale);
						Material.SetTextureOffset("_MainTex", _MainTexOffset);
					}
					else
					{
						Material.SetTexture("_MainTex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_Cloud1Tex))
					{
						Material.SetTexture("_Cloud1Tex", _Cloud1Tex);
						Material.SetTextureScale("_Cloud1Tex", _Cloud1TexScale);
						Material.SetTextureOffset("_Cloud1Tex", _Cloud1TexOffset);
					}
					else
					{
						Material.SetTexture("_Cloud1Tex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_Cloud2Tex))
					{
						Material.SetTexture("_Cloud2Tex", _Cloud2Tex);
						Material.SetTextureScale("_Cloud2Tex", _Cloud2TexScale);
						Material.SetTextureOffset("_Cloud2Tex", _Cloud2TexOffset);
					}
					else
					{
						Material.SetTexture("_Cloud2Tex", (Texture)null);
					}
					if (Object.op_Implicit((Object)(object)_RemapTex))
					{
						Material.SetTexture("_RemapTex", _RemapTex);
						Material.SetTextureScale("_RemapTex", _RemapTexScale);
						Material.SetTextureOffset("_RemapTex", _RemapTexOffset);
					}
					else
					{
						Material.SetTexture("_RemapTex", (Texture)null);
					}
					Material.SetVector("_CutoffScroll", _CutoffScroll);
					Material.SetFloat("_InvFade", _SoftFactor);
					Material.SetFloat("_SoftPower", _SoftPower);
					Material.SetFloat("_Boost", _BrightnessBoost);
					Material.SetFloat("_RimPower", _RimPower);
					Material.SetFloat("_RimStrength", _RimStrength);
					Material.SetFloat("_AlphaBoost", _AlphaBoost);
					Material.SetFloat("_IntersectionStrength", _IntersectionStrength);
					Material.SetFloat("_Cull", Convert.ToSingle(_Cull_Mode));
					SetShaderKeywordBasedOnBool(_FadeFromVertexColorsOn, Material, "FADE_FROM_VERTEX_COLORS");
					SetShaderKeywordBasedOnBool(_EnableTriplanarProjectionsForClouds, Material, "TRIPLANAR");
				}
			}
		}

		public static void SetShaderKeywordBasedOnBool(bool enabled, Material material, string keyword)
		{
			if (!Object.op_Implicit((Object)(object)material))
			{
				return;
			}
			if (enabled)
			{
				if (!material.IsKeywordEnabled(keyword))
				{
					material.EnableKeyword(keyword);
				}
			}
			else if (material.IsKeywordEnabled(keyword))
			{
				material.DisableKeyword(keyword);
			}
		}

		public static void PutMaterialIntoMeshRenderer(Renderer renderer, Material material)
		{
			if (Object.op_Implicit((Object)(object)material) && Object.op_Implicit((Object)(object)renderer))
			{
				renderer.materials[0] = material;
			}
		}
	}
}
namespace TsunamiItemCore.Items
{
	public class AntiqueShield : ItemBase<AntiqueShield>
	{
		public static float shieldArmor;

		public override string ItemName => "Antique Shield";

		public override string ItemLangTokenName => "TSUNAMI_ANTIQUE_SHIELD";

		public override string ItemPickupDesc => "Gain extra armor.";

		public override string ItemFullDescription => "Gain an extra <style=cIsUtility>5 armor</style> <style=cStack>(+5 per stack)</style>.";

		public override string ItemLore => "Man, this work is backbreaking.\nYou could say that again, pal. I mean what the hell are we doing out here? We’ve barely found anything even remotely interesting!\nWhat about this old shield?\nHuh? What shield? Lemme take a look.\n... \nThat's... <style=cIsHealth>suspicious</style>.\nWhat do you mean? How is it <style=cIsHealth>suspicious</style>? It’s just a shield, man.\nI don’t know, it’s just… it just is. I can’t help but be filled with this overwhelming sense in my mind that it’s fully and absolutely <style=cIsHealth>suspicious</style>, and have this strong urge to make it known.\nYou feeling alright man? You get a good sleep last night?\nGet rid of it.\nWhat?\nThat shield, it’s dangerous. It was left here for a reason. We need to destroy it.\nDude calm the hell down, it’s just a shield.";

		public override ItemTier Tier => (ItemTier)0;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("AntiqueShieldDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("AntiqueShieldIcon.png");

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldArmor = config.Bind<float>("Item: " + ItemName, "Armor Per Shield", 5f, "armor added per shield.").Value;
		}

		public override ItemDisplayRuleDict CreateItemDisplayRules()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
		}

		private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			int count = GetCount(self);
			self.armor += (float)count * shieldArmor;
		}
	}
	public class AshSandwich : ItemBase<AshSandwich>
	{
		public static float shieldArmor;

		public override string ItemName => "Sandwich For Ash";

		public override string ItemLangTokenName => "TSUNAMI_ASH_SANDWICH";

		public override string ItemPickupDesc => "Killing enemies grant a stacking heal consumed by using Special.";

		public override string ItemFullDescription => "Killing an enemy will grant you a stacking buff. Upon using your <style=cIsUtility>Special</style>, <style=cIsHealing>heal</style> for <style=cIsHealing>4</style><style=cStack> (+4 per stack)</style> <style=cIsHealing>health</style> multiplied by <style=cIsUtility>every stack</style> of the buff you have.";

		public override string ItemLore => "Sounds of keys clacking and occasional groans can be heard outside of the door. A man enters the room and speaks to the diligent woman on the computer.\n''Hey Ash, whatcha doing?''\n''Coding.''\n''Coding…?''\n''Coding... something.''\n''Uh, right. Well...''\n\nThe sound of a plate being slid onto her desk can be heard. A rather filled sandwich is located on the plate.\n\n''Here. Keep up the good work.''\n''Oh, nice! Thanks man, I was getting a little peckish.''\n\nThe sounds of clacking has been temporarily replaced with the sound of Ash scarfing the sandwich down.\n\n''Yeah no problem, might as well return the favor.''\n''Oh, for that little thing I did for you back then? It was only a kind gesture.''\n''And for that, you get a sandwich! Good luck on your nerd stuff, and thanks for your work.''\n\nThe man gives a quick thumbs up before exiting the room.";

		public override ItemTier Tier => (ItemTier)1;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)2 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("SandwichForAshDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("SandwichForAshIcon.png");

		public BuffDef SandwichBuff { get; private set; }

		public BuffIndex SandwichBuffIndex { get; private set; }

		private void CreateBuff()
		{
			//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_0076: Unknown result type (might be due to invalid IL or missing references)
			SandwichBuff = ScriptableObject.CreateInstance<BuffDef>();
			((Object)SandwichBuff).name = "SandwichHealBuff";
			SandwichBuff.buffColor = new Color(0f, 0.5f, 0f);
			SandwichBuff.canStack = true;
			SandwichBuff.isDebuff = false;
			SandwichBuff.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/AttackSpeedOnCrit").iconSprite;
			SandwichBuff.buffIndex = SandwichBuffIndex;
			ContentAddition.AddBuffDef(SandwichBuff);
		}

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateBuff();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldArmor = config.Bind<float>("Item: " + ItemName, "Armor Per Shield", 5f, "armor added per shield.").Value;
		}

		public override ItemDisplayRuleDict CreateItemDisplayRules()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			GlobalEventManager.OnCharacterDeath += new hook_OnCharacterDeath(OnKillStuff);
			CharacterBody.OnSkillActivated += new hook_OnSkillActivated(DoSandwichTask);
		}

		private void OnKillStuff(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, damageReport);
			CharacterBody victimBody = damageReport.victimBody;
			CharacterBody attackerBody = damageReport.attackerBody;
			if (!victimBody.healthComponent.alive)
			{
				int count = GetCount(attackerBody);
				if (count > 0)
				{
					ItemHelpers.RefreshTimedBuffs(attackerBody, SandwichBuff, 60f);
					attackerBody.AddTimedBuffAuthority(SandwichBuff.buffIndex, 60f);
					ItemHelpers.RefreshTimedBuffs(attackerBody, SandwichBuff, 60f);
				}
			}
		}

		private void DoSandwichTask(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			//IL_0074: 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)
			orig.Invoke(self, skill);
			int count = GetCount(self);
			bool flag;
			if (count > 0)
			{
				SkillLocator skillLocator = self.skillLocator;
				flag = (Object)(object)(((Object)skillLocator != (Object)null) ? skillLocator.special : null) == (Object)(object)skill;
			}
			else
			{
				flag = false;
			}
			if (flag)
			{
				if (NetworkServer.active)
				{
					self.healthComponent.Heal((float)(4 * self.GetBuffCount(SandwichBuff) * count), default(ProcChainMask), true);
					self.ClearTimedBuffs(SandwichBuff);
				}
				self.ClearTimedBuffs(SandwichBuff);
			}
		}
	}
	public class BerserkersKneepad : ItemBase<BerserkersKneepad>
	{
		public static float shieldArmor;

		public override string ItemName => "Berzerker’s Kneepad";

		public override string ItemLangTokenName => "TSUNAMI_BERZERKERS_KNEEPAD";

		public override string ItemPickupDesc => "Go berserk upon entering combat.";

		public override string ItemFullDescription => "Upon entering combat, enter a battle frenzy for 3 seconds, dealing <style=cIsDamage>10%</style><style=cStack> (+10% per stack)</style> more <style=cIsDamage>damage</style>, moving <style=cIsUtility>20%</style><style=cStack> (+10% per stack)</style> <style=cIsUtility>faster</style>, and attacking <style=cIsUtility>20%</style><style=cStack> (+10% per stack)</style> faster. Recharges every <style=cIsUtility>13</style> seconds.";

		public override string ItemLore => "THEY GON RUMBLE\nTHEY GON TAKE YO FACE OFF\nIT'S ABOUT RICE, IT'S ABOUT FLOUR\nYOU STAY HUNGRY, I DEVOUR";

		public override ItemTier Tier => (ItemTier)0;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("BerzerkersKneepadDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("BerserkersKneepad.png");

		public BuffDef BerserkBuff { get; private set; }

		public BuffDef BerserkDebuff { get; private set; }

		public BuffIndex BerserkDebuffIndex { get; private set; }

		public BuffIndex BerserkBuffIndex { get; private set; }

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateBuffs();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldArmor = config.Bind<float>("Item: " + ItemName, "Armor Per Shield", 5f, "armor added per shield.").Value;
		}

		private void CreateBuffs()
		{
			//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_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			BerserkBuff = ScriptableObject.CreateInstance<BuffDef>();
			((Object)BerserkBuff).name = "Berserk Buff";
			BerserkBuff.buffColor = new Color(0.5f, 0f, 0f);
			BerserkBuff.canStack = false;
			BerserkBuff.isDebuff = false;
			BerserkBuff.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/Cripple").iconSprite;
			BerserkBuff.buffIndex = BerserkBuffIndex;
			ContentAddition.AddBuffDef(BerserkBuff);
			BerserkDebuff = ScriptableObject.CreateInstance<BuffDef>();
			((Object)BerserkDebuff).name = "Berserk Cooldown";
			BerserkDebuff.buffColor = Color.gray;
			BerserkDebuff.canStack = false;
			BerserkDebuff.isDebuff = false;
			BerserkDebuff.isCooldown = true;
			BerserkDebuff.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/Cripple").iconSprite;
			BerserkDebuff.buffIndex = BerserkDebuffIndex;
			ContentAddition.AddBuffDef(BerserkDebuff);
		}

		public override ItemDisplayRuleDict CreateItemDisplayRules()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			CharacterBody.OnSkillActivated += new hook_OnSkillActivated(GoBananas);
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(AddBananasBuff);
		}

		private void GoBananas(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, skill);
			int count = GetCount(self);
			CharacterBody component = ((Component)self).GetComponent<CharacterBody>();
			if (count > 0 && !component.HasBuff(BerserkDebuff))
			{
				component.AddTimedBuff(BerserkDebuff, 13f);
				component.AddTimedBuff(BerserkBuff, 3f);
			}
		}

		private void AddBananasBuff(CharacterBody sender, StatHookEventArgs args)
		{
			int count = GetCount(sender);
			if (sender.HasBuff(BerserkBuff))
			{
				args.damageMultAdd += 0.1f * (float)count;
				args.attackSpeedMultAdd += 0.1f + 0.1f * (float)count;
				args.moveSpeedMultAdd += 0.1f + 0.1f * (float)count;
			}
		}
	}
	public class DeckofCards : ItemBase<DeckofCards>
	{
		public static float shieldArmor;

		public override string ItemName => "Deck of Cards";

		public override string ItemLangTokenName => "TSUNAMI_CARD_DECK";

		public override string ItemPickupDesc => "Gain a chance to get a random base game buff on killing an enemy.";

		public override string ItemFullDescription => "Upon killing an enemy, you have a 5%<style=cStack> (+5% per stack)</style> chance to gain a <style=cIsUtility>random buff</style> for <style=cIsUtility>3</style><style=cStack> (+3 per stack)</style> seconds.";

		public override string ItemLore => "You know, I've heard some... interesting things about those cards of yours.\n\nThe younger player shuffled his deck around idly, almost completely brushing off the words of the older player.\n\nYeah, so what? My cards are awesome! Never lost me a game. Now are we playing or what?\n\nThe older man begin to chuckle oddly at him. He would get up slowly approach him.\n\nOh, they are quite... awesome, as you'd describe them.\nBut you see, I know your secret... you didn't even make this deck.\n\nThe younger would recoil in obvious shock, as no one he had played against knew his secret.\n\nT-the hell?! Who even are you?\n\nOh, you see... I'm the original holder of those very special cards. I made them with my...friends. And I want them back. Now. hand them over. The young man hopped out of his chair and began to run away.\nYou can have them back if you can catch me! Good luck with that, coffin dodger!\n\nThe old man began to take out a very ornate looking camera.\nA fast one. You'll make a nice addition...\n\n\n...An echoing click rang out through the ship.";

		public override ItemTier Tier => (ItemTier)1;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("DeckOfCardsDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("DeckOfCardsIcon.png");

		public Xoroshiro128Plus rng { get; internal set; }

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldArmor = config.Bind<float>("Item: " + ItemName, "Armor Per Shield", 5f, "armor added per shield.").Value;
		}

		public override ItemDisplayRuleDict CreateItemDisplayRules()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			GlobalEventManager.OnCharacterDeath += new hook_OnCharacterDeath(OnKillStuff);
		}

		private void OnKillStuff(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport)
		{
			orig.Invoke(self, damageReport);
			CharacterBody victimBody = damageReport.victimBody;
			CharacterBody attackerBody = damageReport.attackerBody;
			if (!victimBody.healthComponent.alive)
			{
				int count = GetCount(attackerBody);
				if (count > 0 && Util.CheckRoll(5f * (float)count, attackerBody.master))
				{
					attackerBody.AddTimedBuff(ChooseRandomBuff(), 3.5f * (float)count);
				}
			}
		}

		private BuffDef ChooseRandomBuff()
		{
			BuffDef result = null;
			switch (Run.instance.runRNG.RangeInt(1, 34))
			{
			case 1:
				result = Buffs.ArmorBoost;
				break;
			case 2:
				result = Buffs.AttackSpeedOnCrit;
				break;
			case 3:
				result = Buffs.BanditSkull;
				break;
			case 4:
				result = Buffs.Cloak;
				break;
			case 5:
				result = Buffs.CloakSpeed;
				break;
			case 6:
				result = Buffs.CrocoRegen;
				break;
			case 7:
				result = Buffs.ElephantArmorBoost;
				break;
			case 8:
				result = Buffs.Energized;
				break;
			case 9:
				result = Buffs.EngiShield;
				break;
			case 10:
				result = Buffs.FullCrit;
				break;
			case 11:
				result = Buffs.HiddenInvincibility;
				break;
			case 12:
				result = Buffs.Immune;
				break;
			case 13:
				result = Buffs.LifeSteal;
				break;
			case 14:
				result = Buffs.MedkitHeal;
				break;
			case 15:
				result = Buffs.NoCooldowns;
				break;
			case 16:
				result = Buffs.PowerBuff;
				break;
			case 17:
				result = Buffs.SmallArmorBoost;
				break;
			case 18:
				result = Buffs.TeamWarCry;
				break;
			case 19:
				result = Buffs.TonicBuff;
				break;
			case 20:
				result = Buffs.Warbanner;
				break;
			case 21:
				result = Buffs.WarCryBuff;
				break;
			case 22:
				result = Buffs.WhipBoost;
				break;
			case 23:
				result = Buffs.KillMoveSpeed;
				break;
			case 24:
				result = Buffs.OutOfCombatArmorBuff;
				break;
			case 25:
				result = Buffs.PrimarySkillShurikenBuff;
				break;
			case 26:
				result = Buffs.TeslaField;
				break;
			case 27:
				result = Buffs.AffixHauntedRecipient;
				break;
			case 28:
				result = Buffs.MushroomVoidActive;
				break;
			case 29:
				result = ItemBase<Suppressor>.instance.SuppressorBuff;
				break;
			case 30:
				result = ItemBase<ScoutsRifle>.instance.ScoutBuff;
				break;
			case 31:
				result = ItemBase<BerserkersKneepad>.instance.BerserkBuff;
				break;
			case 32:
				result = ItemBase<IonicCola>.instance.ColaBuff;
				break;
			case 33:
				result = ItemBase<ForeignFlower>.instance.FlowerBuff;
				break;
			case 34:
				result = ItemBase<ObsidianFragment>.instance.ObsidianBuff;
				break;
			case 35:
				result = Buffs.AurelioniteBlessing;
				break;
			case 36:
				result = Buffs.BoostAllStatsBuff;
				break;
			case 37:
				result = Buffs.Boosted;
				break;
			case 38:
				result = Buffs.ChakraBuff;
				break;
			case 39:
				result = Buffs.DelayedDamageBuff;
				break;
			case 40:
				result = Buffs.ExtraLifeBuff;
				break;
			case 41:
				result = Buffs.ExtraStatsOnLevelUpBuff;
				break;
			case 42:
				result = Buffs.FreeChest;
				break;
			case 43:
				result = Buffs.FreeUnlocks;
				break;
			case 44:
				result = Buffs.GeodeBuff;
				break;
			case 45:
				result = Buffs.HealAndReviveRegenBuff;
				break;
			case 46:
				result = Buffs.IncreaseDamageBuff;
				break;
			case 47:
				result = Buffs.IncreasePrimaryDamageBuff;
				break;
			case 48:
				result = Buffs.LowerHealthHigherDamageBuff;
				break;
			case 49:
				result = Buffs.RevitalizeBuff;
				break;
			case 50:
				result = Buffs.SojournHealing;
				break;
			case 51:
				result = Buffs.StunAndPierceBuff;
				break;
			case 52:
				result = Buffs.BodyArmor;
				break;
			case 53:
				result = Buffs.EngiTeamShield;
				break;
			case 54:
				result = Buffs.EnrageAncientWisp;
				break;
			case 55:
				result = Buffs.GoldEmpowered;
				break;
			case 56:
				result = Buffs.LightningShield;
				break;
			case 57:
				result = Buffs.LoaderOvercharged;
				break;
			case 58:
				result = Buffs.LoaderPylonPowered;
				break;
			case 59:
				result = Buffs.MeatRegenBoost;
				break;
			case 60:
				result = Buffs.EliteBeadCorruption;
				break;
			}
			return result;
		}
	}
	public class DoctorsBag : ItemBase<DoctorsBag>
	{
		public static float shieldArmor;

		public override string ItemName => "Doctor’s Bag";

		public override string ItemLangTokenName => "TSUNAMI_DOCTORS_BAG";

		public override string ItemPickupDesc => "Gain a chance to double incoming healing.";

		public override string ItemFullDescription => "Gain a <style=cIsUtility>10%</style><style=cStack> (+10% per stack)</style> to '<style=cIsHealing>Critically Heal</style>', doubling your <style=cIsHealing>healing</style> received.";

		public override string ItemLore => "Gunfire rains heavy as the man lets out a cry of pain.\n''I'm hurt bad out here!''\nThe well armored man hastily retreated back into the vault, with his LMG hanging loosely off his back.\n''Damn it- how many bags do we got left?''\nWet spots are starting to appear on the masked man’s armor.\n''Got enough for another man, get over here Daryl!''\nThe last few needles and bandages clinked inside the case, whilst the symphony of gunfire rings outside the bank vault.\nThe man takes the entire case, and starts to frantically use everything that was left. Bandaging, methadone, everything.\nSoon after, he feels his vigor returning, his will to keep going, to finish off this disaster of a heist.\n''…''\n''Much better.''";

		public override ItemTier Tier => (ItemTier)0;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)2 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("DoctorsBagDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("DoctorsBagIcon.png");

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldArmor = config.Bind<float>("Item: " + ItemName, "Armor Per Shield", 5f, "armor added per shield.").Value;
		}

		public override ItemDisplayRuleDict CreateItemDisplayRules()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			HealthComponent.Heal += new hook_Heal(HealthComponent_Heal);
		}

		private float HealthComponent_Heal(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procChainMask, bool nonRegen)
		{
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			int count = GetCount(self.body);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)self.body.inventory) && GetCount(self.body) > 0 && Util.CheckRoll(10f * (float)count, self.body.master))
			{
				amount *= 2f;
			}
			return orig.Invoke(self, amount, procChainMask, nonRegen);
		}
	}
	public class ForeignFlower : ItemBase<ForeignFlower>
	{
		public static float shieldArmor;

		public override string ItemName => "Foreign Flower";

		public override string ItemLangTokenName => "TSUNAMI_FOREIGN_FLOWER";

		public override string ItemPickupDesc => "Regenerate upon using your equipment.";

		public override string ItemFullDescription => "Upon using your <style=cIsUtility>equipment</style>, increase your <style=cIsHealing>regen</style> heavily for <style=cIsUtility>3</style><style=cStack> (+1 per stack)</style> seconds.";

		public override string ItemLore => "A Nutapple's bloom may not be as nutritious as it's fully grown fruit form, but it's unique herbal flavor and lighter properties still lead it to have it's own vague yet distinct flavor. Among Titan's other natural trees including the Delliux, Bezacon, Lexaquill, and the Aacororo, the Xelphum Tree is easily the most popular.\n\n- Dietary Sciences Digest";

		public override ItemTier Tier => (ItemTier)0;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)2 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("ForeignFlowerDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("ForeignFlowerIcon.png");

		public BuffDef FlowerBuff { get; private set; }

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateBuff();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldArmor = config.Bind<float>("Item: " + ItemName, "Armor Per Shield", 5f, "armor added per shield.").Value;
		}

		private void CreateBuff()
		{
			//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)
			FlowerBuff = ScriptableObject.CreateInstance<BuffDef>();
			((Object)FlowerBuff).name = "FlowerRegenBuff";
			FlowerBuff.buffColor = Color.green;
			FlowerBuff.canStack = false;
			FlowerBuff.isDebuff = false;
			FlowerBuff.iconSprite = LegacyResourcesAPI.Load<BuffDef>("BuffDefs/Fruiting").iconSprite;
			ContentAddition.AddBuffDef(FlowerBuff);
		}

		public override ItemDisplayRuleDict CreateItemDisplayRules()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			EquipmentSlot.PerformEquipmentAction += new hook_PerformEquipmentAction(EquipmentSlot_PerformEquipmentAction);
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(AddFlowerBuff);
		}

		private bool EquipmentSlot_PerformEquipmentAction(orig_PerformEquipmentAction orig, EquipmentSlot self, EquipmentDef equipmentDef)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			bool flag = orig.Invoke(self, equipmentDef);
			if (flag && Object.op_Implicit((Object)self))
			{
				CharacterBody characterBody = self.characterBody;
				if (Object.op_Implicit((Object)characterBody))
				{
					int count = GetCount(characterBody);
					if (count > 0)
					{
						characterBody.AddTimedBuff(FlowerBuff.buffIndex, 3f + 1f * (float)(count - 1));
					}
				}
			}
			return flag;
		}

		private void AddFlowerBuff(CharacterBody sender, StatHookEventArgs args)
		{
			int count = GetCount(sender);
			if (sender.HasBuff(FlowerBuff))
			{
				args.regenMultAdd += 7f * (float)sender.GetBuffCount(FlowerBuff);
			}
		}
	}
	public class GeigerCounter : ItemBase<GeigerCounter>
	{
		public static float shieldArmor;

		private int attackCounter;

		private static int geigerExplosionCharge = 10;

		public static GameObject geigerExplosionEffectPrefab = Resources.Load<GameObject>("prefabs/effects/impacteffects/CrocoLeapExplosion");

		public override string ItemName => "Geiger Counter";

		public override string ItemLangTokenName => "TSUNAMI_GEIGER_COUNTER";

		public override string ItemPickupDesc => "Every 10 skill uses causes a blighted explosion.";

		public override string ItemFullDescription => "Every <style=cIsUtility>10</style> non-primary skill uses cause you to explode for <style=cIsDamage>1600%</style> <style=cStack>(+400% damage per stack)</style> damage, applying <style=cIsDamage>Blight</style> to enemies.";

		public override string ItemLore => "Hello, sir. I'm assuming you're one of the hired prospectors?\nNo time to talk, I have some very important cargo on board and I need to get this to the grand prospector ASAP.\n...very well, please allow me to scan your luggage for contraband and other miscellaneous hazards.\nMake it quick lady, I don't got all day.\n\n<style=cMono>[KRRRRRKRRKZZRRRKRRRRRR]</style>\n\nExcuse me sir, it appears that you have radioactive hazards located somewhere on your ship. Please allow our automated search drones to inspect your ship.\n*sigh* Yeah yeah, alright. Hurry up with it already!\n\n<style=cMono>.     .     .</style>\n\nIt's been 20 damn minutes lady, hurry this up!\nIt appears that our scanners are having trouble detecting the hazard. This may take a bit longer than expected.\nGrrrrrr...\n\n<style=cMono>.     .     .</style>\n\nOh my! we seem to have found the problem! The hazard is not on your ship, but rather... on you.\nWhat the hell are you talking about, lady?! Quit spouting bull and open up the damn port!\nSorry sir! I don't make the rules, I simply work here. I do recommend that next time you want to smuggle a deadly nuclear weapon somewhere, you don't put it so close to yourself.";

		public override ItemTier Tier => (ItemTier)2;

		public override ItemTag[] ItemTags { get; set; } = (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 };


		public override GameObject ItemModel => Main.MainAssets.LoadAsset<GameObject>("GeigerCounterDisplay.prefab");

		public override Sprite ItemIcon => Main.MainAssets.LoadAsset<Sprite>("GeigerCounterIcon.png");

		public BuffDef GeigerBuff { get; private set; }

		public override void Init(ConfigFile config)
		{
			CreateConfig(config);
			CreateLang();
			CreateBuff();
			CreateItem();
			Hooks();
		}

		public override void CreateConfig(ConfigFile config)
		{
			shieldAr