Decompiled source of Odins Fruit v0.59.6

BepInEx/plugins/CharloneLightFruit/CharloneLightFruit.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Security.Cryptography;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;

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

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace CharloneLightFruit
{
	internal static class GuraWorld
	{
		internal static ConfigEntry<bool> Terrain;

		internal static ConfigEntry<float> CraterRadius;

		private static ConfigEntry<bool> Trees;

		private static ConfigEntry<bool> Structures;

		private static ConfigEntry<bool> PlayerStructures;

		private static ConfigEntry<bool> Rocks;

		private static ConfigEntry<bool> Instant;

		private static ConfigEntry<bool> Bypass;

		private static ConfigEntry<float> Depth;

		private static readonly MethodInfo Operate = AccessTools.Method(typeof(TerrainComp), "DoOperation", (Type[])null, (Type[])null);

		private static readonly FieldInfo Initialized = AccessTools.Field(typeof(TerrainComp), "m_initialized");

		internal static void Bind(ConfigFile c)
		{
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Expected O, but got Unknown
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Expected O, but got Unknown
			Trees = c.Bind<bool>("GuraDestruction", "DamageTrees", true, "Gura-specific tree/log destruction.");
			Structures = c.Bind<bool>("GuraDestruction", "DamageStructures", true, "Gura-specific building destruction.");
			PlayerStructures = c.Bind<bool>("GuraDestruction", "DamagePlayerStructures", true, "Direct quake hits damage player-built pieces, including your own base. Terrain changes may still remove their support.");
			Rocks = c.Bind<bool>("GuraDestruction", "DamageOreAndRocks", true, "Damage native MineRock/MineRock5 deposits and mineable destructibles in the blast radius.");
			Instant = c.Bind<bool>("GuraDestruction", "InstantOreShatter", true, "Overwhelming pickaxe damage to each deposit section touched by a blast. Normal drops/support collapse; does not delete whole deposits directly.");
			Bypass = c.Bind<bool>("GuraDestruction", "BypassMiningTier", true, "True supplies mining tier 10. False uses the highest pickaxe tier in your inventory; no pickaxe means no ore damage.");
			Terrain = c.Bind<bool>("GuraTerrain", "Enabled", true, "Charged O crater permanently lowers terrain. H/J never deform terrain. Test in a separate world first.");
			CraterRadius = c.Bind<float>("GuraTerrain", "CraterRadius", 6f, new ConfigDescription("Crater/charged impact radius in metres.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(2f, 10f), Array.Empty<object>()));
			Depth = c.Bind<float>("GuraTerrain", "Depth", 2f, new ConfigDescription("Requested central lowering per cast, within native terrain limits. Sloped terrain may be uneven.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.25f, 3f), Array.Empty<object>()));
		}

		internal static void Impact(Player p, Vector3 point, float radius, float damage, HashSet<Collider> seen)
		{
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: 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_028f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_0297: Unknown result type (might be due to invalid IL or missing references)
			//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Expected O, but got Unknown
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_034b: Unknown result type (might be due to invalid IL or missing references)
			seen = seen ?? new HashSet<Collider>();
			int num = (Bypass.Value ? 10 : (from i in ((Humanoid)p).GetInventory().GetAllItems()
				where i.m_shared.m_damages.m_pickaxe > 0f
				select i.m_shared.m_toolTier).DefaultIfEmpty(-1).Max());
			HashSet<Component> hashSet = new HashSet<Component>();
			Collider[] array = Physics.OverlapSphere(point, radius, -1, (QueryTriggerInteraction)1);
			foreach (Collider val in array)
			{
				if (!Object.op_Implicit((Object)(object)val) || seen.Contains(val) || Object.op_Implicit((Object)(object)((Component)val).GetComponentInParent<Character>()))
				{
					continue;
				}
				Piece componentInParent = ((Component)val).GetComponentInParent<Piece>();
				Component val2 = (Component)(object)((Component)val).GetComponentInParent<MineRock5>();
				if (!Object.op_Implicit((Object)(object)val2))
				{
					val2 = (Component)(object)((Component)val).GetComponentInParent<MineRock>();
				}
				bool flag = Object.op_Implicit((Object)(object)val2);
				if (!Object.op_Implicit((Object)(object)val2))
				{
					val2 = (Component)(object)((Component)val).GetComponentInParent<TreeBase>();
				}
				if (!Object.op_Implicit((Object)(object)val2))
				{
					val2 = (Component)(object)((Component)val).GetComponentInParent<TreeLog>();
				}
				Destructible componentInParent2 = ((Component)val).GetComponentInParent<Destructible>();
				bool flag2 = Object.op_Implicit((Object)(object)val2) && !flag;
				if (Object.op_Implicit((Object)(object)componentInParent2) && (componentInParent2.m_destructibleType & 2) != 0)
				{
					flag2 = true;
				}
				if (!Object.op_Implicit((Object)(object)val2))
				{
					val2 = (Component)(object)((Component)val).GetComponentInParent<WearNTear>();
				}
				if (!Object.op_Implicit((Object)(object)val2))
				{
					val2 = (Component)(object)componentInParent2;
				}
				bool flag3 = flag || (Object.op_Implicit((Object)(object)componentInParent2) && !Object.op_Implicit((Object)(object)componentInParent) && !flag2 && (((Object)((Component)componentInParent2).gameObject).name.StartsWith("rock", StringComparison.OrdinalIgnoreCase) || ((Object)((Component)componentInParent2).gameObject).name.StartsWith("mudpile", StringComparison.OrdinalIgnoreCase)));
				if (!Object.op_Implicit((Object)(object)val2) || !GuraRules.EligibleWorld(character: false, Object.op_Implicit((Object)(object)componentInParent), flag2, flag3, Trees.Value, Structures.Value, Object.op_Implicit((Object)(object)componentInParent) && componentInParent.IsPlacedByPlayer(), PlayerStructures.Value, Rocks.Value) || (flag3 && num < 0) || (!flag && !hashSet.Add(val2)))
				{
					continue;
				}
				seen.Add(val);
				if (!flag)
				{
					Collider[] componentsInChildren = val2.GetComponentsInChildren<Collider>();
					foreach (Collider item in componentsInChildren)
					{
						seen.Add(item);
					}
				}
				ZNetView component = val2.GetComponent<ZNetView>();
				if (Object.op_Implicit((Object)(object)component) && !component.IsValid())
				{
					continue;
				}
				Vector3 val3 = val.ClosestPoint(point);
				if (PrivateArea.CheckAccess(val3, 0f, false, false))
				{
					HitData val4 = new HitData
					{
						m_point = val3
					};
					Vector3 val5 = val3 - point;
					val4.m_dir = ((Vector3)(ref val5)).normalized;
					val4.m_hitCollider = val;
					val4.m_toolTier = (short)(flag3 ? num : 10);
					val4.m_ranged = true;
					HitData val6 = val4;
					if (flag3)
					{
						val6.m_damage.m_pickaxe = GuraRules.MiningDamage(Instant.Value, damage);
					}
					else if (flag2)
					{
						val6.m_damage.m_chop = damage;
					}
					else
					{
						val6.m_damage.m_blunt = damage;
					}
					if (!FruitBuildingProtection.Protected(val2, val6.m_point))
					{
						val6.SetAttacker((Character)(object)p);
						((IDestructible)val2).Damage(val6);
					}
				}
			}
		}

		internal static void Crater(Vector3 point)
		{
			//IL_000c: 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_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: 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_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_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Expected O, but got Unknown
			//IL_01cd: 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)
			if (!Terrain.Value || FruitBuildingProtection.At(point))
			{
				return;
			}
			for (int i = 0; i < 16; i++)
			{
				float num = (float)i * MathF.PI / 8f;
				if (FruitBuildingProtection.At(point + new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)) * CraterRadius.Value))
				{
					return;
				}
			}
			List<Heightmap> list = new List<Heightmap>();
			Heightmap.FindHeightmap(point, CraterRadius.Value, list);
			if (list.Count == 0)
			{
				throw new InvalidOperationException("No loaded heightmap at impact.");
			}
			List<TerrainComp> list2 = new List<TerrainComp>();
			foreach (Heightmap item in list)
			{
				TerrainComp andCreateTerrainCompiler = item.GetAndCreateTerrainCompiler();
				ZNetView val = (Object.op_Implicit((Object)(object)andCreateTerrainCompiler) ? ((Component)andCreateTerrainCompiler).GetComponent<ZNetView>() : null);
				if (Plugin.IsCoop && Object.op_Implicit((Object)(object)val) && val.IsValid() && !val.IsOwner())
				{
					val.ClaimOwnership();
				}
				if (!Object.op_Implicit((Object)(object)andCreateTerrainCompiler) || !Object.op_Implicit((Object)(object)val) || !val.IsValid() || !val.IsOwner() || !(bool)Initialized.GetValue(andCreateTerrainCompiler))
				{
					throw new InvalidOperationException("Terrain compiler is not locally owned and ready.");
				}
				list2.Add(andCreateTerrainCompiler);
			}
			Settings val2 = new Settings
			{
				m_level = false,
				m_raise = true,
				m_raiseRadius = CraterRadius.Value,
				m_raiseDelta = 0f - Depth.Value,
				m_raisePower = 1f,
				m_smooth = false,
				m_paintCleared = false,
				m_square = false
			};
			foreach (TerrainComp item2 in list2)
			{
				Operate.Invoke(item2, new object[3]
				{
					point,
					Vector3.zero,
					val2
				});
			}
		}
	}
	internal static class IcePathRules
	{
		internal const float TileSize = 0.75f;

		internal static HashSet<Tuple<int, int>> Cells(float x, float z, float dx, float dz, float speed, float dt, float width)
		{
			HashSet<Tuple<int, int>> hashSet = new HashSet<Tuple<int, int>>();
			float num = IceRules.LookAhead(speed, dt);
			int num2 = (int)Math.Ceiling(num / 0.35f);
			for (int i = 0; i <= num2; i++)
			{
				float num3 = x + dx * num * (float)i / (float)Math.Max(1, num2);
				float num4 = z + dz * num * (float)i / (float)Math.Max(1, num2);
				int num5 = (int)Math.Round(num3 / 0.75f);
				int num6 = (int)Math.Round(num4 / 0.75f);
				for (int j = -2; j <= 2; j++)
				{
					for (int k = -2; k <= 2; k++)
					{
						int num7 = num5 + j;
						int num8 = num6 + k;
						float num9 = (float)num7 * 0.75f - num3;
						float num10 = (float)num8 * 0.75f - num4;
						if (num9 * num9 + num10 * num10 <= width * width * 0.25f)
						{
							hashSet.Add(Tuple.Create(num7, num8));
						}
					}
				}
			}
			return hashSet;
		}
	}
	[BepInPlugin("charlone.valheim.lightfruit", "Charlone's Devil Fruits", "0.59.6")]
	public sealed class Plugin : BaseUnityPlugin
	{
		private sealed class PendingEffect
		{
			internal string key;

			internal object[] args;

			internal GameObject go;

			internal int id;
		}

		private sealed class RemoteEffect
		{
			internal GameObject go;

			internal Player actor;

			internal float seen;
		}

		private struct AbilitySlot
		{
			internal string name;

			internal string key;

			internal int icon;

			internal float until;

			internal float duration;

			internal float cost;

			internal float charge;

			internal bool active;

			internal bool available;

			internal unsafe AbilitySlot(string n, KeyboardShortcut k, int i, float u = 0f, float d = 1f, float c = 0f, bool a = false, bool usable = true, float ch = -1f)
			{
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_004e: Invalid comparison between Unknown and I4
				name = n;
				key = ((object)(*(KeyboardShortcut*)(&k))/*cast due to .constrained prefix*/).ToString();
				icon = i;
				until = u;
				duration = d;
				cost = c;
				active = a;
				available = usable && (int)((KeyboardShortcut)(ref k)).MainKey > 0;
				charge = ch;
			}
		}

		private sealed class MagmaPatch
		{
			internal Vector3 point;

			internal float radius;

			internal float expiry;

			internal GameObject visual;
		}

		private struct DarkPull
		{
			internal Vector3 point;

			internal float speed;

			internal float until;
		}

		private sealed class GravityField
		{
			internal Vector3 point;

			internal float radius;

			internal float expiry;

			internal float nextDamage;

			internal float bossUntil;

			internal bool well;

			internal GameObject visual;
		}

		private struct GravityControl
		{
			internal bool well;

			internal Vector3 center;

			internal float until;
		}

		private sealed class VenomField
		{
			internal Vector3 point;

			internal float radius;

			internal float expiry;

			internal float dps;

			internal bool cloud;

			internal GameObject visual;
		}

		private sealed class DamageBudget
		{
			internal float credit;

			internal float last;
		}

		private sealed class FlamePatch
		{
			internal Vector3 point;

			internal float radius;

			internal float expiry;

			internal GameObject visual;
		}

		internal sealed class SignatureDef
		{
			internal string id;

			internal string name;

			internal string prefab;

			internal string perk;

			internal float length;

			internal float grip;

			internal bool blunt;

			internal SignatureDef(string i, string n, string b, float l, float g, bool bluntDamage, string text)
			{
				id = i;
				name = n;
				prefab = b;
				length = l;
				grip = g;
				blunt = bluntDamage;
				perk = text;
			}
		}

		private sealed class BomuShot
		{
			internal Vector3 position;

			internal Vector3 direction;

			internal float left;

			internal float damage;

			internal float radius;

			internal GameObject visual;
		}

		private sealed class BomuMine
		{
			internal Vector3 point;

			internal float armed;

			internal float expires;

			internal GameObject visual;
		}

		internal sealed class TaktTarget
		{
			internal Character character;

			internal Rigidbody body;

			internal bool gravity;

			internal bool thrown;

			internal Vector3 hover;

			internal Vector3 direction;

			internal float expires;

			internal GameObject halo;
		}

		private sealed class SandField
		{
			internal Vector3 point;

			internal float radius;

			internal float expiry;

			internal float nextDamage;

			internal bool tornado;

			internal GameObject visual;
		}

		private sealed class FrozenEnemy
		{
			internal float until;

			internal float immuneUntil;

			internal float speed = 1f;

			internal Animator animator;

			internal GameObject visual;

			internal readonly Dictionary<Renderer, Material[]> materials = new Dictionary<Renderer, Material[]>();
		}

		private sealed class RemotePresentation
		{
			internal GameObject aura;

			internal GameObject room;

			internal GameObject blade;

			internal GameObject weapon;

			internal int sword;

			internal readonly Dictionary<Renderer, bool> bladeHidden = new Dictionary<Renderer, bool>();

			internal readonly Dictionary<Renderer, bool> bodyHidden = new Dictionary<Renderer, bool>();

			internal string fruit;
		}

		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<SupplyDef, bool> <>9__20_0;

			public static Predicate<GameObject> <>9__28_0;

			public static Func<ItemData, int, global::<>f__AnonymousType0<ItemData, int>> <>9__43_0;

			public static Func<List<GameObject>, GameObject[]> <>9__68_0;

			public static Predicate<GameObject> <>9__68_1;

			public static Func<object, bool> <>9__75_0;

			public static Func<KeyValuePair<string, RemoteEffect>, bool> <>9__81_0;

			public static Func<KeyValuePair<string, RemoteEffect>, string> <>9__81_1;

			public static Predicate<FlameProjectile> <>9__141_0;

			public static Func<RaycastHit, bool> <>9__144_0;

			public static ConsoleEvent <>9__266_0;

			public static Predicate<MagmaProjectile> <>9__269_0;

			public static Func<RaycastHit, bool> <>9__273_0;

			public static Func<MeshRenderer, IEnumerable<Material>> <>9__289_2;

			public static Func<Material, bool> <>9__289_3;

			public static Func<SkinnedMeshRenderer, IEnumerable<Material>> <>9__289_0;

			public static Func<Material, bool> <>9__289_1;

			public static Predicate<GameObject> <>9__292_0;

			public static Predicate<GameObject> <>9__298_0;

			public static Func<MagmaPatch, bool> <>9__320_0;

			public static Func<BountyContract, bool> <>9__331_0;

			public static Func<string, bool> <>9__331_1;

			public static Func<BountyContract, bool> <>9__332_0;

			public static Func<BountyContract, bool> <>9__334_0;

			public static Func<BountyContract, bool> <>9__335_0;

			public static Func<BountyContract, bool> <>9__336_0;

			public static Func<BountyContract, bool> <>9__336_1;

			public static Func<TaktTarget, bool> <>9__356_0;

			public static Func<TaktTarget, bool> <>9__356_1;

			public static Func<TaktTarget, bool> <>9__356_2;

			public static Func<AbilitySlot, bool> <>9__357_0;

			public static Func<RaycastHit, bool> <>9__369_0;

			public static Func<RaycastHit, float> <>9__369_1;

			public static Func<RaycastHit, bool> <>9__370_0;

			public static ConsoleEvent <>9__436_0;

			public static ConsoleEvent <>9__520_0;

			public static Func<RaycastHit, bool> <>9__524_0;

			public static Predicate<GameObject> <>9__527_0;

			public static Predicate<GameObject> <>9__538_0;

			public static Predicate<GameObject> <>9__546_0;

			public static Func<MeshRenderer, IEnumerable<Material>> <>9__566_0;

			public static Func<Material, bool> <>9__566_1;

			public static Predicate<GameObject> <>9__578_0;

			public static Func<int[], IEnumerable<int>> <>9__578_1;

			public static Func<ItemData, bool> <>9__614_0;

			public static Func<RaycastHit, float> <>9__619_1;

			public static Func<RaycastHit, bool> <>9__622_0;

			public static Func<TaktTarget, bool> <>9__623_0;

			public static Func<Player, bool> <>9__712_0;

			public static Func<GameObject, bool> <>9__713_0;

			public static Func<TavernSeat, bool> <>9__765_7;

			public static Func<KeyValuePair<string, (long player, string game, Vector3 start, double time)>, string> <>9__765_9;

			public static Func<TavernSeat, int> <>9__767_2;

			public static Func<TavernSeat, string> <>9__767_3;

			public static Func<int, string> <>9__768_2;

			public static ConsoleEvent <>9__844_0;

			public static Func<AnimatorControllerParameter, bool> <>9__850_0;

			public static Func<AnimatorControllerParameter, string> <>9__850_1;

			public static Func<RaycastHit, float> <>9__857_1;

			public static Func<List<ObservationBody>, IEnumerable<ObservationBody>> <>9__888_0;

			public static Func<ObservationBody, bool> <>9__888_1;

			public static Func<RaycastHit, float> <>9__916_2;

			public static Func<RaycastHit, bool> <>9__917_0;

			public static Func<RaycastHit, float> <>9__917_1;

			public static Func<KeyValuePair<string, float>, bool> <>9__937_0;

			public static Func<KeyValuePair<string, float>, string> <>9__937_1;

			public static Func<KeyValuePair<long, (long peer, string target, string fruit, float sent, float hakiXp)>, bool> <>9__937_2;

			public static Func<KeyValuePair<long, (long peer, string target, string fruit, float sent, float hakiXp)>, long> <>9__937_3;

			public static Func<Character, bool> <>9__937_4;

			public static Func<Tuple<int, int>, Vector2Int> <>9__955_0;

			public static Func<KeyValuePair<Vector2Int, GameObject>, bool> <>9__955_1;

			public static Func<KeyValuePair<Vector2Int, GameObject>, Vector2Int> <>9__955_2;

			public static Func<RaycastHit, bool> <>9__955_3;

			public static Func<KeyValuePair<Vector2Int, GameObject>, float> <>9__955_5;

			public static ConsoleEvent <>9__1011_0;

			public static Func<RaycastHit, float> <>9__1013_0;

			public static Func<RaycastHit, float> <>9__1020_0;

			public static ConsoleEvent <>9__1082_0;

			public static Predicate<GameObject> <>9__1086_0;

			public static Func<RaycastHit, float> <>9__1089_0;

			public static Func<VenomField, bool> <>9__1090_0;

			public static Predicate<VenomField> <>9__1090_1;

			public static Func<KeyValuePair<long, double>, string> <>9__1156_1;

			public static Predicate<GameObject> <>9__1163_0;

			public static Func<KeyValuePair<Character, DamageBudget>, bool> <>9__1171_0;

			public static Func<KeyValuePair<Character, DamageBudget>, Character> <>9__1171_1;

			public static Func<string, bool> <>9__1231_0;

			public static Func<ItemData, int> <>9__1257_1;

			public static Func<int, int> <>9__1264_0;

			public static Func<ItemData, int> <>9__1295_1;

			public static Func<SupplySlot, int> <>9__1297_1;

			public static Func<ItemData, bool> <>9__1298_0;

			public static ConsoleEvent <>9__1328_0;

			public static Func<ItemData, bool> <>9__1329_0;

			public static Func<ItemData, int> <>9__1329_1;

			public static Func<ItemData, bool> <>9__1347_1;

			public static Func<ItemData, bool> <>9__1467_0;

			public static Func<RaycastHit, float> <>9__1472_0;

			public static Func<ItemData, bool> <>9__1482_0;

			public static Func<RaycastHit, float> <>9__1484_1;

			public static Func<string, bool> <>9__1508_0;

			public static Func<KeyValuePair<string, string>, bool> <>9__1508_1;

			public static Func<TavernRoll, long> <>9__1527_0;

			public static Func<IGrouping<long, TavernRoll>, TavernRoll> <>9__1527_1;

			public static ConsoleEvent <>9__1595_0;

			public static Predicate<GameObject> <>9__1597_0;

			public static Predicate<GameObject> <>9__1615_0;

			public static ConsoleEvent <>9__1683_0;

			public static Func<BountyContract, bool> <>9__1685_0;

			public static Func<ConfigEntry<int>, long> <>9__1688_0;

			public static Func<string, bool> <>9__1697_0;

			public static Func<RaycastHit, bool> <>9__1703_0;

			public static Func<RaycastHit, float> <>9__1703_1;

			public static Func<Collider, bool> <>9__1703_2;

			public static Func<Collider, bool> <>9__1703_3;

			public static Func<GameObject, IEnumerable<ParticleSystem>> <>9__1718_0;

			public static Func<ParticleSystem, bool> <>9__1718_1;

			public static Func<ParticleSystem, bool> <>9__1718_2;

			public static Func<ParticleSystem, bool> <>9__1718_3;

			public static Func<ParticleSystem, string> <>9__1718_4;

			public static Predicate<GameObject> <>9__1722_0;

			public static Func<Transform, bool> <>9__1733_0;

			public static Predicate<GameObject> <>9__1741_0;

			public static Func<RaycastHit, bool> <>9__1753_2;

			public static Func<RaycastHit, float> <>9__1753_3;

			public static Func<BountyContract, bool> <>9__1753_0;

			public static Func<BountyContract, bool> <>9__1753_1;

			public static Func<BountyContract, bool> <>9__1754_0;

			public static Func<BountyContract, bool> <>9__1754_1;

			public static Func<KeyValuePair<long, (long bounty, double seen)>, long> <>9__1770_0;

			public static Func<Collider, bool> <>9__1772_1;

			public static Func<string, bool> <>9__1772_2;

			public static Func<RaycastHit, bool> <>9__1772_3;

			public static Func<RaycastHit, float> <>9__1772_4;

			public static Func<Collider, bool> <>9__1772_5;

			public static Func<Collider, bool> <>9__1772_6;

			public static Predicate<GameObject> <>9__1789_0;

			public static Func<GameObject, bool> <>9__1792_0;

			public static Func<ParticleSystem, bool> <>9__1792_3;

			public static Func<ParticleSystem, bool> <>9__1792_4;

			public static Func<AudioClip, bool> <>9__1792_1;

			public static Func<AudioClip, float> <>9__1792_2;

			public static Func<RaycastHit, bool> <>9__1832_0;

			public static Func<RaycastHit, float> <>9__1832_1;

			public static Func<RaycastHit, bool> <>9__1833_0;

			public static Predicate<GameObject> <>9__1842_0;

			public static Func<(float until, float baseline), bool> <>9__1864_0;

			public static Func<SignatureDef, string> <>9__1867_0;

			public static ConsoleEvent <>9__1929_0;

			public static Func<RaycastHit, float> <>9__1934_0;

			public static ConsoleEvent <>9__2016_0;

			public static Func<Collider, bool> <>9__2022_0;

			public static Func<RaycastHit, bool> <>9__2028_0;

			public static Predicate<GameObject> <>9__2036_0;

			public static Func<SupplySlot, bool> <>9__2060_1;

			public static Func<TaktTarget, bool> <>9__2081_0;

			public static Func<RaycastHit, bool> <>9__2082_0;

			public static Func<TaktTarget, bool> <>9__2083_0;

			public static Func<TaktTarget, bool> <>9__2084_0;

			public static Func<RaycastHit, bool> <>9__2087_0;

			public static ConsoleEvent <>9__2146_0;

			public static Func<RaycastHit, float> <>9__2149_0;

			public static Func<RaycastHit, bool> <>9__2221_0;

			public static ConsoleEvent <>9__2285_0;

			public static Predicate<GameObject> <>9__2289_0;

			public static Func<ItemData, bool> <>9__2291_0;

			public static Func<RaycastHit, bool> <>9__2292_0;

			public static Predicate<GameObject> <>9__2318_0;

			public static Func<string, bool> <>9__2342_0;

			public static ConsoleEvent <>9__2357_0;

			public static Predicate<GameObject> <>9__2367_0;

			public static Predicate<GameObject> <>9__2368_0;

			internal bool <EnsureSupplyCatalog>b__20_0(SupplyDef s)
			{
				return Object.op_Implicit((Object)(object)ObjectDB.instance.GetItemPrefab(s.prefab));
			}

			internal bool <TrackDark>b__28_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal global::<>f__AnonymousType0<ItemData, int> <DrawDuplicateWeapons>b__43_0(ItemData item, int index)
			{
				return new { item, index };
			}

			internal GameObject[] <ReplayEffect>b__68_0(List<GameObject> l)
			{
				return l.ToArray();
			}

			internal bool <ReplayEffect>b__68_1(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <QueueSharedEffect>b__75_0(object a)
			{
				Transform val = (Transform)((a is Transform) ? a : null);
				if (val != null)
				{
					return Object.op_Implicit((Object)(object)val);
				}
				return false;
			}

			internal bool <UpdateSharedEffects>b__81_0(KeyValuePair<string, RemoteEffect> e)
			{
				if (Object.op_Implicit((Object)(object)e.Value.go) && Object.op_Implicit((Object)(object)e.Value.actor))
				{
					return Time.unscaledTime - e.Value.seen > 3f;
				}
				return true;
			}

			internal string <UpdateSharedEffects>b__81_1(KeyValuePair<string, RemoteEffect> e)
			{
				return e.Key;
			}

			internal bool <UpdateFlame>b__141_0(FlameProjectile s)
			{
				return !Object.op_Implicit((Object)(object)s);
			}

			internal bool <FlameImpact>b__144_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal void <BindMagma>b__266_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (TestingEnabled.Value && MagmaEnabled.Value && Enabled.Value && SessionReady() && Object.op_Implicit((Object)(object)localPlayer))
				{
					if (a.Args.Length < 2 || a.Args[1] != "fruit")
					{
						a.Context.AddString("Use magu fruit");
						return;
					}
					ItemData val = Items.Create("Raspberry", "charlone.magu.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Magma fruit added. Clear other powers before eating." : "Make a free inventory slot.");
				}
			}

			internal bool <UpdateMagma>b__269_0(MagmaProjectile s)
			{
				return !Object.op_Implicit((Object)(object)s);
			}

			internal bool <MagmaImpact>b__273_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal IEnumerable<Material> <DiamondMaterial>b__289_2(MeshRenderer r)
			{
				return ((Renderer)r).sharedMaterials;
			}

			internal bool <DiamondMaterial>b__289_3(Material m)
			{
				if (Object.op_Implicit((Object)(object)m) && Object.op_Implicit((Object)(object)m.shader) && m.shader.isSupported)
				{
					return m.renderQueue < 2500;
				}
				return false;
			}

			internal IEnumerable<Material> <DiamondMaterial>b__289_0(SkinnedMeshRenderer r)
			{
				return ((Renderer)r).sharedMaterials;
			}

			internal bool <DiamondMaterial>b__289_1(Material m)
			{
				if (Object.op_Implicit((Object)(object)m) && Object.op_Implicit((Object)(object)m.shader))
				{
					return m.shader.isSupported;
				}
				return false;
			}

			internal bool <UpdateDiamondHands>b__292_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <TrackDiamond>b__298_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <UpdateAmbience>b__320_0(MagmaPatch x)
			{
				if (Object.op_Implicit((Object)(object)x.visual))
				{
					return x.expiry > Time.time;
				}
				return false;
			}

			internal bool <AcceptOperation>b__331_0(BountyContract c)
			{
				return c.operationKind > 0;
			}

			internal bool <AcceptOperation>b__331_1(string id)
			{
				GameObject prefab = ZNetScene.instance.GetPrefab(id);
				if (Object.op_Implicit((Object)(object)prefab) && Object.op_Implicit((Object)(object)prefab.GetComponent<Character>()))
				{
					return Object.op_Implicit((Object)(object)prefab.GetComponent<MonsterAI>());
				}
				return false;
			}

			internal bool <UpdateOperation>b__332_0(BountyContract c)
			{
				return c.state == 3;
			}

			internal bool <OperationProgress>b__334_0(BountyContract c)
			{
				return c.state == 2;
			}

			internal bool <OperationHud>b__335_0(BountyContract c)
			{
				if (c.operationKind > 0 && c.operationKind != 5)
				{
					return c.state < 2;
				}
				return false;
			}

			internal bool <DrawOperations>b__336_0(BountyContract c)
			{
				return c.operationKind > 0;
			}

			internal bool <DrawOperations>b__336_1(BountyContract c)
			{
				return c.operationKind > 0;
			}

			internal bool <FruitSlots>b__356_0(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <FruitSlots>b__356_1(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <FruitSlots>b__356_2(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <AbilityBar>b__357_0(AbilitySlot s)
			{
				if (s.until > Time.time)
				{
					return s.until - Time.time > s.duration - 0.3f;
				}
				return false;
			}

			internal bool <AddMagmaPatch>b__369_0(RaycastHit h)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>()))
				{
					return ((RaycastHit)(ref h)).normal.y > 0.4f;
				}
				return false;
			}

			internal float <AddMagmaPatch>b__369_1(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <UpdateMagmaPatches>b__370_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal void <BindString>b__436_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && StringEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.string.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "String-String fruit added. Clear existing powers before eating." : "Make inventory space.");
				}
			}

			internal void <BindDark>b__520_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && DarkEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.dark.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Dark-Dark fruit added. Clear existing powers before eating." : "Make inventory space.");
				}
			}

			internal bool <ApplyDarkMotion>b__524_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal bool <LaunchDarkSpear>b__527_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <BombExplosionVisual>b__538_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <MagmaBurst>b__546_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal IEnumerable<Material> <SignatureOpaqueDonor>b__566_0(MeshRenderer r)
			{
				return ((Renderer)r).sharedMaterials;
			}

			internal bool <SignatureOpaqueDonor>b__566_1(Material m)
			{
				<>c__DisplayClass566_0 CS$<>8__locals6 = new <>c__DisplayClass566_0
				{
					m = m
				};
				if (Object.op_Implicit((Object)(object)CS$<>8__locals6.m) && Object.op_Implicit((Object)(object)CS$<>8__locals6.m.shader) && CS$<>8__locals6.m.shader.isSupported && CS$<>8__locals6.m.HasProperty("_MainTex") && CS$<>8__locals6.m.renderQueue < 2500)
				{
					return !new string[5] { "particle", "sprite", "unlit", "transparent", "vegetation" }.Any((string word) => ((Object)CS$<>8__locals6.m.shader).name.ToLowerInvariant().Contains(word));
				}
				return false;
			}

			internal bool <IceField>b__578_0(GameObject x)
			{
				return !Object.op_Implicit((Object)(object)x);
			}

			internal IEnumerable<int> <IceField>b__578_1(int[] t)
			{
				return t;
			}

			internal bool <GiveOpeFruit>b__614_0(ItemData i)
			{
				return Tagged(i, "charlone.ope.fruit");
			}

			internal float <GroundDestination>b__619_1(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <CounterShock>b__622_0(RaycastHit h)
			{
				return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
			}

			internal bool <OpeHud>b__623_0(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <HakiPlayers>b__712_0(Player p)
			{
				return Object.op_Implicit((Object)(object)p);
			}

			internal bool <UpdateCoating>b__713_0(GameObject go)
			{
				if (Object.op_Implicit((Object)(object)go))
				{
					return go.activeInHierarchy;
				}
				return false;
			}

			internal bool <ReceiveTavern>b__765_7(TavernSeat s)
			{
				return s.done;
			}

			internal string <ReceiveTavern>b__765_9(KeyValuePair<string, (long player, string game, Vector3 start, double time)> x)
			{
				return x.Key;
			}

			internal int <ResolveTavern>b__767_2(TavernSeat s)
			{
				return s.bet;
			}

			internal string <ResolveTavern>b__767_3(TavernSeat s)
			{
				return s.name;
			}

			internal string <SendTavernView>b__768_2(int c)
			{
				return CasinoRules.Card(c).Replace("\n", " ");
			}

			internal void <BindDiamond>b__844_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && DiamondEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.diamond.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Diamond-Diamond fruit added. Clear current powers before eating." : "Make inventory space.");
				}
			}

			internal bool <DiamondCastPose>b__850_0(AnimatorControllerParameter x)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Invalid comparison between Unknown and I4
				return (int)x.type == 9;
			}

			internal string <DiamondCastPose>b__850_1(AnimatorControllerParameter x)
			{
				return x.name;
			}

			internal float <DiamondGroundStep>b__857_1(RaycastHit x)
			{
				return ((RaycastHit)(ref x)).distance;
			}

			internal IEnumerable<ObservationBody> <DrawObservationVision>b__888_0(List<ObservationBody> list)
			{
				return list;
			}

			internal bool <DrawObservationVision>b__888_1(ObservationBody body)
			{
				return body.player;
			}

			internal float <GuraBlast>b__916_2(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <GuraFault>b__917_0(RaycastHit h)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>()))
				{
					return ((RaycastHit)(ref h)).normal.y >= 0.45f;
				}
				return false;
			}

			internal float <GuraFault>b__917_1(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <UpdateCoopCombat>b__937_0(KeyValuePair<string, float> x)
			{
				return Time.time > x.Value + 10f;
			}

			internal string <UpdateCoopCombat>b__937_1(KeyValuePair<string, float> x)
			{
				return x.Key;
			}

			internal bool <UpdateCoopCombat>b__937_2(KeyValuePair<long, (long peer, string target, string fruit, float sent, float hakiXp)> x)
			{
				return Time.unscaledTime - x.Value.sent > 15f;
			}

			internal long <UpdateCoopCombat>b__937_3(KeyValuePair<long, (long peer, string target, string fruit, float sent, float hakiXp)> x)
			{
				return x.Key;
			}

			internal bool <UpdateCoopCombat>b__937_4(Character x)
			{
				return !Object.op_Implicit((Object)(object)x);
			}

			internal Vector2Int <IceBridge>b__955_0(Tuple<int, int> k)
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				return new Vector2Int(k.Item1, k.Item2);
			}

			internal bool <IceBridge>b__955_1(KeyValuePair<Vector2Int, GameObject> t)
			{
				return !Object.op_Implicit((Object)(object)t.Value);
			}

			internal Vector2Int <IceBridge>b__955_2(KeyValuePair<Vector2Int, GameObject> t)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				return t.Key;
			}

			internal bool <IceBridge>b__955_3(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>()))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponent<IceTemporary>());
				}
				return false;
			}

			internal float <IceBridge>b__955_5(KeyValuePair<Vector2Int, GameObject> k)
			{
				return k.Value.GetComponent<IceTemporary>().expiry;
			}

			internal void <BindGravity>b__1011_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && GravityEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.gravity.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Gravity Fruit added. Clear current powers before eating." : "Make inventory space.");
				}
			}

			internal float <GravityAim>b__1013_0(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal float <GravityMeteorCast>b__1020_0(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal void <BindPoison>b__1082_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && PoisonEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.poison.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Poison Fruit added. Clear existing powers before eating." : "Make inventory space.");
				}
			}

			internal bool <LaunchVenom>b__1086_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal float <VenomFloor>b__1089_0(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <AddVenomField>b__1090_0(VenomField f)
			{
				return !f.cloud;
			}

			internal bool <AddVenomField>b__1090_1(VenomField f)
			{
				return !f.cloud;
			}

			internal string <RecordCoopHit>b__1156_1(KeyValuePair<long, double> x)
			{
				return x.Key + ":" + x.Value.ToString("R", CultureInfo.InvariantCulture);
			}

			internal bool <TrackPawTransient>b__1163_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <LimitFruitHit>b__1171_0(KeyValuePair<Character, DamageBudget> k)
			{
				if (Object.op_Implicit((Object)(object)k.Key))
				{
					return Time.time - k.Value.last > 30f;
				}
				return true;
			}

			internal Character <LimitFruitHit>b__1171_1(KeyValuePair<Character, DamageBudget> k)
			{
				return k.Key;
			}

			internal bool <CleanupRemovedFeatures>b__1231_0(string k)
			{
				if (!k.StartsWith("charlone_captain_", StringComparison.Ordinal))
				{
					return k.StartsWith("charlone_arena_", StringComparison.Ordinal);
				}
				return true;
			}

			internal int <MoneyCount>b__1257_1(ItemData i)
			{
				return i.m_stack;
			}

			internal int <StartCasinoGame>b__1264_0(int _)
			{
				return CasinoRules.Random(6);
			}

			internal int <MaterialCount>b__1295_1(ItemData i)
			{
				return i.m_stack;
			}

			internal int <DrawSupplies>b__1297_1(SupplySlot s)
			{
				return s.tier;
			}

			internal bool <DrawWeaponUpgrades>b__1298_0(ItemData i)
			{
				return SignatureId(i) != null;
			}

			internal void <BindTokens>b__1328_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (!Object.op_Implicit((Object)(object)localPlayer) || !SessionReady() || !Enabled.Value || !TestingEnabled.Value || a.Args.Length != 3 || a.Args[1] != "test" || !int.TryParse(a.Args[2], out var result) || result < 1 || result > 100)
				{
					a.Context.AddString("Testing only: dftokens test 10");
					return;
				}
				ItemData val = Items.Create("Coins", "charlone.bounty.token.v1");
				if (val != null)
				{
					val.m_stack = result;
					if (!((Humanoid)localPlayer).GetInventory().CanAddItem(val, result) || !((Humanoid)localPlayer).GetInventory().AddItem(val))
					{
						a.Context.AddString("Make inventory space.");
					}
					else
					{
						a.Context.AddString("Test tokens added.");
					}
				}
			}

			internal bool <TokenCount>b__1329_0(ItemData i)
			{
				return Tagged(i, "charlone.bounty.token.v1");
			}

			internal int <TokenCount>b__1329_1(ItemData i)
			{
				return i.m_stack;
			}

			internal bool <SpinWheel>b__1347_1(ItemData i)
			{
				if (Tagged(i, "charlone.bounty.token.v1"))
				{
					return i.m_stack > 0;
				}
				return false;
			}

			internal bool <GiveFruit>b__1467_0(ItemData i)
			{
				return Tagged(i, "charlone.pika.fruit");
			}

			internal float <Trace>b__1472_0(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <RemoveSwords>b__1482_0(ItemData i)
			{
				return Tagged(i, "charlone.pika.sword");
			}

			internal float <FlyStep>b__1484_1(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <DeliverProgressionRewards>b__1508_0(string k)
			{
				return k.StartsWith("charlone.reward.v1.firstboss.", StringComparison.Ordinal);
			}

			internal bool <DeliverProgressionRewards>b__1508_1(KeyValuePair<string, string> x)
			{
				if (x.Key.StartsWith("charlone.reward.v1.", StringComparison.Ordinal))
				{
					return x.Value != "done";
				}
				return false;
			}

			internal long <DrawTavernRoll>b__1527_0(TavernRoll x)
			{
				return x.player;
			}

			internal TavernRoll <DrawTavernRoll>b__1527_1(IGrouping<long, TavernRoll> g)
			{
				return g.Last();
			}

			internal void <BindPaw>b__1595_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && PawEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.paw.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Paw-Paw Fruit added. Clear existing powers before eating." : "Make inventory space.");
				}
			}

			internal bool <LaunchPaw>b__1597_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <TrackString>b__1615_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal void <BindBounties>b__1683_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (!Object.op_Implicit((Object)(object)localPlayer) || !SessionReady())
				{
					a.Context.AddString("Enter a supported world.");
					return;
				}
				if (a.Args.Length == 3 && a.Args[1] == "test" && TestingEnabled.Value && long.TryParse(a.Args[2], out var result))
				{
					localPlayer.m_customData["charlone.bounty.current.v1"] = BountyRules.Clean(result).ToString(CultureInfo.InvariantCulture);
					a.Context.AddString("Testing bounty set; lifetime notoriety unchanged.");
					return;
				}
				a.Context.AddString("Bounty: " + CurrentBounty(localPlayer).ToString("N0") + " | Lifetime: " + ReadNumber(localPlayer, "charlone.bounty.lifetime.v1").ToString("N0") + ". Visit a constructed Bounty Board.");
			}

			internal bool <BountyPlayerDeath>b__1685_0(BountyContract c)
			{
				if (c.state == 1)
				{
					if (c.operationKind != 3 && c.operationKind != 4)
					{
						return c.operationKind == 8;
					}
					return true;
				}
				return false;
			}

			internal long <UnlockedTier>b__1688_0(ConfigEntry<int> x)
			{
				return x.Value;
			}

			internal bool <OfferPrefab>b__1697_0(string id)
			{
				GameObject prefab = ZNetScene.instance.GetPrefab(id);
				if (Object.op_Implicit((Object)(object)prefab) && Object.op_Implicit((Object)(object)prefab.GetComponent<Character>()))
				{
					return Object.op_Implicit((Object)(object)prefab.GetComponent<MonsterAI>());
				}
				return false;
			}

			internal bool <SpawnBountyTarget>b__1703_0(RaycastHit h)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponent<Heightmap>()))
				{
					return ((RaycastHit)(ref h)).normal.y > 0.8f;
				}
				return false;
			}

			internal float <SpawnBountyTarget>b__1703_1(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <SpawnBountyTarget>b__1703_2(Collider c)
			{
				Piece componentInParent = ((Component)c).GetComponentInParent<Piece>();
				if (Object.op_Implicit((Object)(object)componentInParent))
				{
					return componentInParent.IsPlacedByPlayer();
				}
				return false;
			}

			internal bool <SpawnBountyTarget>b__1703_3(Collider c)
			{
				return !Object.op_Implicit((Object)(object)((Component)c).GetComponent<Heightmap>());
			}

			internal IEnumerable<ParticleSystem> <FindNativeFire>b__1718_0(GameObject r)
			{
				return r.GetComponentsInChildren<ParticleSystem>(true);
			}

			internal bool <FindNativeFire>b__1718_1(ParticleSystem ps)
			{
				if (Object.op_Implicit((Object)(object)ps) && Object.op_Implicit((Object)(object)((Component)ps).GetComponent<ParticleSystemRenderer>()))
				{
					return Object.op_Implicit((Object)(object)((Renderer)((Component)ps).GetComponent<ParticleSystemRenderer>()).sharedMaterial);
				}
				return false;
			}

			internal bool <FindNativeFire>b__1718_2(ParticleSystem ps)
			{
				if (((Object)ps).name.IndexOf("smoke", StringComparison.OrdinalIgnoreCase) < 0)
				{
					return ((Object)ps).name.IndexOf("ash", StringComparison.OrdinalIgnoreCase) < 0;
				}
				return false;
			}

			internal bool <FindNativeFire>b__1718_3(ParticleSystem ps)
			{
				if (((Object)ps).name.IndexOf("flame", StringComparison.OrdinalIgnoreCase) < 0)
				{
					return ((Object)ps).name.IndexOf("fire", StringComparison.OrdinalIgnoreCase) >= 0;
				}
				return true;
			}

			internal string <FindNativeFire>b__1718_4(ParticleSystem s)
			{
				return ((Object)s).name;
			}

			internal bool <NativeFlameBurst>b__1722_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <CoatLimbs>b__1733_0(Transform b)
			{
				if (Object.op_Implicit((Object)(object)b))
				{
					return ArmamentGeometry.ArmBone(((Object)b).name);
				}
				return false;
			}

			internal bool <VenomSplash>b__1741_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <UpdateExtraOperation>b__1753_2(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponent<Heightmap>());
				}
				return false;
			}

			internal float <UpdateExtraOperation>b__1753_3(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <UpdateExtraOperation>b__1753_0(BountyContract x)
			{
				return x.state == 3;
			}

			internal bool <UpdateExtraOperation>b__1753_1(BountyContract x)
			{
				return x.state == 2;
			}

			internal bool <ExtraProgress>b__1754_0(BountyContract t)
			{
				return t.state == 2;
			}

			internal bool <ExtraProgress>b__1754_1(BountyContract t)
			{
				return t.state == 2;
			}

			internal long <UpdateWanted>b__1770_0(KeyValuePair<long, (long bounty, double seen)> x)
			{
				return x.Value.bounty;
			}

			internal bool <ReceiveHunt>b__1772_1(Collider c)
			{
				Piece componentInParent = ((Component)c).GetComponentInParent<Piece>();
				if (Object.op_Implicit((Object)(object)componentInParent))
				{
					return componentInParent.IsPlacedByPlayer();
				}
				return false;
			}

			internal bool <ReceiveHunt>b__1772_2(string id)
			{
				GameObject prefab = ZNetScene.instance.GetPrefab(id);
				if (Object.op_Implicit((Object)(object)prefab))
				{
					return Object.op_Implicit((Object)(object)prefab.GetComponent<MonsterAI>());
				}
				return false;
			}

			internal bool <ReceiveHunt>b__1772_3(RaycastHit h)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponent<Heightmap>()))
				{
					return ((RaycastHit)(ref h)).normal.y > 0.8f;
				}
				return false;
			}

			internal float <ReceiveHunt>b__1772_4(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <ReceiveHunt>b__1772_5(Collider c)
			{
				return !Object.op_Implicit((Object)(object)((Component)c).GetComponent<Heightmap>());
			}

			internal bool <ReceiveHunt>b__1772_6(Collider c)
			{
				Piece componentInParent = ((Component)c).GetComponentInParent<Piece>();
				if (Object.op_Implicit((Object)(object)componentInParent))
				{
					return componentInParent.IsPlacedByPlayer();
				}
				return false;
			}

			internal bool <TrackGoro>b__1789_0(GameObject x)
			{
				return !Object.op_Implicit((Object)(object)x);
			}

			internal bool <DiscoverGoroNative>b__1792_0(GameObject go)
			{
				//IL_0009: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)go))
				{
					Scene scene = go.scene;
					if (!((Scene)(ref scene)).IsValid())
					{
						return ((Object)go).name.IndexOf("eikthyr", StringComparison.OrdinalIgnoreCase) >= 0;
					}
				}
				return false;
			}

			internal bool <DiscoverGoroNative>b__1792_3(ParticleSystem ps)
			{
				//IL_002d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Invalid comparison between Unknown and I4
				if (Object.op_Implicit((Object)(object)ps) && Object.op_Implicit((Object)(object)((Component)ps).GetComponent<ParticleSystemRenderer>()) && Object.op_Implicit((Object)(object)((Renderer)((Component)ps).GetComponent<ParticleSystemRenderer>()).sharedMaterial))
				{
					return (int)((Component)ps).GetComponent<ParticleSystemRenderer>().renderMode != 4;
				}
				return false;
			}

			internal bool <DiscoverGoroNative>b__1792_4(ParticleSystem ps)
			{
				if (((Object)ps).name.IndexOf("lightning", StringComparison.OrdinalIgnoreCase) < 0 && ((Object)ps).name.IndexOf("electric", StringComparison.OrdinalIgnoreCase) < 0)
				{
					return ((Object)ps).name.IndexOf("spark", StringComparison.OrdinalIgnoreCase) >= 0;
				}
				return true;
			}

			internal bool <DiscoverGoroNative>b__1792_1(AudioClip c)
			{
				if (Object.op_Implicit((Object)(object)c) && c.length > 0.15f && c.length < 6f)
				{
					if (((Object)c).name.IndexOf("lightning", StringComparison.OrdinalIgnoreCase) < 0)
					{
						return ((Object)c).name.IndexOf("thunder", StringComparison.OrdinalIgnoreCase) >= 0;
					}
					return true;
				}
				return false;
			}

			internal float <DiscoverGoroNative>b__1792_2(AudioClip c)
			{
				return c.length;
			}

			internal bool <AddFlamePatch>b__1832_0(RaycastHit h)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>()))
				{
					return ((RaycastHit)(ref h)).normal.y > 0.4f;
				}
				return false;
			}

			internal float <AddFlamePatch>b__1832_1(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <UpdateFlamePatches>b__1833_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal bool <GravityPulse>b__1842_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <SignatureCooldown>b__1864_0((float until, float baseline) k)
			{
				return k.until <= Time.time;
			}

			internal string <GiveSignatureSet>b__1867_0(SignatureDef d)
			{
				return d.id;
			}

			internal void <BindBomb>b__1929_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && BombEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.bomb.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Bomb-Bomb fruit added. Clear current powers before eating." : "Make inventory space.");
				}
			}

			internal float <BombGround>b__1934_0(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal void <BindSmoke>b__2016_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && SmokeEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.smoke.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Smoke-Smoke fruit added. Clear existing powers before eating." : "Make inventory space.");
				}
			}

			internal bool <SmokeClear>b__2022_0(Collider c)
			{
				if (Object.op_Implicit((Object)(object)c))
				{
					return !Object.op_Implicit((Object)(object)((Component)c).GetComponentInParent<Character>());
				}
				return false;
			}

			internal bool <ApplySmokeMotion>b__2028_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal bool <TrackSmoke>b__2036_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <ReceiveSupplyRequest>b__2060_1(SupplySlot s)
			{
				return s.tier <= LocalWorldTier();
			}

			internal bool <UpdateOpeCombatInput>b__2081_0(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <VisibleEnemy>b__2082_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal bool <LiftTakt>b__2083_0(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <ThrowTakt>b__2084_0(TaktTarget t)
			{
				return !t.thrown;
			}

			internal bool <TaktImpact>b__2087_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal void <BindSand>b__2146_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (Object.op_Implicit((Object)(object)localPlayer) && SessionReady() && Enabled.Value && TestingEnabled.Value && SandEnabled.Value)
				{
					ItemData val = Items.Create("Raspberry", "charlone.sand.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Sand Fruit added. Clear existing powers before eating." : "Make inventory space.");
				}
			}

			internal float <SandGround>b__2149_0(RaycastHit h)
			{
				return ((RaycastHit)(ref h)).distance;
			}

			internal bool <LightFistImpact>b__2221_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>());
				}
				return false;
			}

			internal void <BindIce>b__2285_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (TestingEnabled.Value && IceEnabled.Value && Enabled.Value && SessionReady() && Object.op_Implicit((Object)(object)localPlayer))
				{
					ItemData val = Items.Create("Raspberry", "charlone.hie.fruit");
					Say((val != null && ((Humanoid)localPlayer).GetInventory().AddItem(val)) ? "Ice fruit added. Right-click to eat after clearing other powers." : "Make a free inventory slot.");
				}
			}

			internal bool <UpdateIce>b__2289_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <StopIce>b__2291_0(ItemData i)
			{
				return Tagged(i, "charlone.hie.sword");
			}

			internal bool <IceImpact>b__2292_0(RaycastHit h)
			{
				if (Object.op_Implicit((Object)(object)((RaycastHit)(ref h)).collider) && !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<Character>()))
				{
					return !Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref h)).collider).GetComponentInParent<IceTemporary>());
				}
				return false;
			}

			internal bool <EnhancedFireImpact>b__2318_0(GameObject g)
			{
				return !Object.op_Implicit((Object)(object)g);
			}

			internal bool <CurrentPremium>b__2342_0(string name)
			{
				if (Object.op_Implicit((Object)(object)ObjectDB.instance))
				{
					return Object.op_Implicit((Object)(object)ObjectDB.instance.GetItemPrefab(name));
				}
				return false;
			}

			internal void <BindTesting>b__2357_0(ConsoleEventArgs a)
			{
				Player localPlayer = Player.m_localPlayer;
				if (!Object.op_Implicit((Object)(object)localPlayer) || !SessionReady() || !TestingEnabled.Value)
				{
					return;
				}
				if (!HasAnyPower(localPlayer))
				{
					a.Context.AddString("Eat or select a fruit first.");
					return;
				}
				if (a.Args.Length != 2 || !int.TryParse(a.Args[1], out var result) || result < 1 || result > 99)
				{
					a.Context.AddString("Usage: dfmastery 1..99");
					return;
				}
				double num = 0.0;
				for (int i = 1; i < result; i++)
				{
					num += MasteryRules.Threshold(i);
				}
				SaveMastery(localPlayer, num);
				Say("Current fruit mastery set to " + result + ".");
			}

			internal bool <SandPuff>b__2367_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}

			internal bool <SandBladeCrest>b__2368_0(GameObject o)
			{
				return !Object.op_Implicit((Object)(object)o);
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass566_0
		{
			public Material m;

			internal bool <SignatureOpaqueDonor>b__2(string word)
			{
				return ((Object)m.shader).name.ToLowerInvariant().Contains(word);
			}
		}

		internal const string PurgeKey = "charlone.df.purge";

		internal static ConfigEntry<bool> PurgeEnabled;

		internal static ConfigEntry<int> PurgePrice;

		internal bool purgeOpen;

		private ItemData purgeItem;

		private Inventory purgeInventory;

		private Player purgePlayer;

		private GameObject purgeDisplay;

		internal TradeItem purgeTrade;

		private bool supplyCatalogReady;

		private readonly List<SupplyDef> supplyCatalog = new List<SupplyDef>();

		private Material darkMaterial;

		private Material darkStone;

		private Mesh darkSpearMesh;

		private bool duplicateView;

		private ItemData duplicateSelected;

		private int duplicateRank = -1;

		internal const float TavernTargetCenter = 1.95f;

		private static readonly string[] TavernAssets = new string[6] { "blackjack_table", "coin_toss_table", "dice_table", "archery_target", "shared_poker_table", "contract_crate" };

		private static readonly string[] TavernNames = new string[6] { "Blackjack Table", "Heads or Tails Table", "Dice Table", "Archery Challenge", "Shared Poker Table", "Contract Supplies" };

		private readonly Dictionary<string, GameObject> tavernPrefabs = new Dictionary<string, GameObject>();

		private const string NetEffect = "Charlone056Effect";

		private const string NetEffectMove = "Charlone056EffectMove";

		[ThreadStatic]
		internal static bool replayingEffects;

		[ThreadStatic]
		internal static int effectNesting;

		private readonly List<PendingEffect> pendingEffects = new List<PendingEffect>();

		private readonly Dictionary<int, GameObject> sentEffects = new Dictionary<int, GameObject>();

		private readonly Dictionary<string, RemoteEffect> receivedEffects = new Dictionary<string, RemoteEffect>();

		private readonly Dictionary<long, (float start, int count)> effectRates = new Dictionary<long, (float, int)>();

		private readonly List<GameObject> remoteTransientEffects = new List<GameObject>();

		private readonly Dictionary<int, PendingEffect> effectDefinitions = new Dictionary<int, PendingEffect>();

		private float nextEffectRefresh;

		private int effectSerial;

		private float nextEffectMove;

		private float effectWindow;

		private int effectCount;

		private float nextEffectError;

		internal const string FlameFruitKey = "charlone.mera.fruit";

		internal static ConfigEntry<bool> FlameEnabled;

		internal static ConfigEntry<bool> FlameLootEnabled;

		internal static ConfigEntry<bool> FlameFireImmune;

		internal static ConfigEntry<bool> FlameFists;

		internal static ConfigEntry<float> FlameChestChance;

		internal static ConfigEntry<float> FlameHarvestMultiplier;

		internal static ConfigEntry<float> FlameSpeed;

		internal static ConfigEntry<float> FlameBoost;

		internal static ConfigEntry<float> FlameDashDistance;

		internal static ConfigEntry<float> FlameDashDuration;

		internal static ConfigEntry<float> FlameDashCooldown;

		internal static ConfigEntry<float> FlameDashCost;

		internal static ConfigEntry<float> FlameDashDamage;

		private static ConfigEntry<KeyboardShortcut> FlameH;

		private static ConfigEntry<KeyboardShortcut> FlameJ;

		private static ConfigEntry<KeyboardShortcut> FlameK;

		private static ConfigEntry<KeyboardShortcut> FlameU;

		private static ConfigEntry<KeyboardShortcut> FlameO;

		private static ConfigEntry<float> FlameFistDamage;

		private static ConfigEntry<float> FlameFistRadius;

		private static ConfigEntry<float> FlameHikenDamage;

		private static ConfigEntry<float> FlameHikenRadius;

		private static ConfigEntry<float> FlameHikenCost;

		private static ConfigEntry<float> FlameHikenCooldown;

		private static ConfigEntry<float> FlameGunDamage;

		private static ConfigEntry<float> FlameGunCost;

		private static ConfigEntry<float> FlameGunCooldown;

		private static ConfigEntry<float> FlameEnteiDamage;

		private static ConfigEntry<float> FlameEnteiRadius;

		private static ConfigEntry<float> FlameEnteiCost;

		private static ConfigEntry<float> FlameEnteiCooldown;

		private static ConfigEntry<float> FlameEnteiHold;

		private static ConfigEntry<float> FlameForce;

		private static ConfigEntry<float> FlameShake;

		private float nextFlameH;

		private float nextFlameK;

		private float nextFlameO;

		private float nextFlameFist;

		private float nextFlameWater;

		private float enteiStart = -1f;

		private GameObject enteiOrb;

		private Coroutine flameGunRoutine;

		private readonly List<FlameProjectile> flameShots = new List<FlameProjectile>();

		internal const string GoroFruitKey = "charlone.goro.fruit";

		internal static ConfigEntry<bool> GoroEnabled;

		internal static ConfigEntry<bool> GoroLootEnabled;

		internal static ConfigEntry<bool> GoroFists;

		internal static ConfigEntry<bool> GoroDestruction;

		internal static ConfigEntry<bool> GoroLightningImmune;

		internal static ConfigEntry<float> GoroChestChance;

		internal static ConfigEntry<float> GoroHarvestMultiplier;

		private static ConfigEntry<KeyboardShortcut> GoroH;

		private static ConfigEntry<KeyboardShortcut> GoroJ;

		private static ConfigEntry<KeyboardShortcut> GoroK;

		private static ConfigEntry<KeyboardShortcut> GoroU;

		private static ConfigEntry<KeyboardShortcut> GoroO;

		private static ConfigEntry<float> GoroFistDamage;

		private static ConfigEntry<float> GoroFistRadius;

		private static ConfigEntry<float> GoroHDamage;

		private static ConfigEntry<float> GoroHRadius;

		private static ConfigEntry<float> GoroHCost;

		private static ConfigEntry<float> GoroHCooldown;

		private static ConfigEntry<float> GoroChainDamage;

		private static ConfigEntry<float> GoroChainRange;

		private static ConfigEntry<float> GoroChainCost;

		private static ConfigEntry<float> GoroChainCooldown;

		private static ConfigEntry<float> GoroStrikeDamage;

		private static ConfigEntry<float> GoroStrikeRadius;

		private static ConfigEntry<float> GoroStrikeCost;

		private static ConfigEntry<float> GoroStrikeCooldown;

		private static ConfigEntry<float> GoroDashDistance;

		private static ConfigEntry<float> GoroDashDuration;

		private static ConfigEntry<float> GoroDashCost;

		private static ConfigEntry<float> GoroDashCooldown;

		private static ConfigEntry<float> GoroRaigoDamage;

		private static ConfigEntry<float> GoroRaigoRadius;

		private static ConfigEntry<float> GoroRaigoCost;

		private static ConfigEntry<float> GoroRaigoCooldown;

		private static ConfigEntry<float> GoroRaigoHold;

		private static ConfigEntry<float> GoroForce;

		private static ConfigEntry<float> GoroShake;

		private static ConfigEntry<int> GoroChainTargets;

		private float nextGoroH;

		private float nextGoroJ;

		private float nextGoroK;

		private float nextGoroO;

		private float nextGoroFist;

		private float nextGoroWater;

		private float goroCharge = -1f;

		private Coroutine goroRoutine;

		private GameObject goroCloud;

		private Vector3 goroTarget;

		internal const string MagmaFruitKey = "charlone.magu.fruit";

		internal static ConfigEntry<bool> MagmaEnabled;

		internal static ConfigEntry<bool> MagmaLootEnabled;

		internal static ConfigEntry<bool> MagmaFireImmune;

		internal static ConfigEntry<bool> MagmaFists;

		internal static ConfigEntry<float> MagmaChestChance;

		internal static ConfigEntry<float> MagmaHarvestMultiplier;

		internal static ConfigEntry<float> MagmaDashDistance;

		internal static ConfigEntry<float> MagmaDashDuration;

		internal static ConfigEntry<float> MagmaDashCooldown;

		internal static ConfigEntry<float> MagmaDashCost;

		internal static ConfigEntry<float> MagmaDashDamage;

		private static ConfigEntry<KeyboardShortcut> MagmaFlightKey;

		private static ConfigEntry<KeyboardShortcut> MagmaH;

		private static ConfigEntry<KeyboardShortcut> MagmaJ;

		private static ConfigEntry<KeyboardShortcut> MagmaK;

		private static ConfigEntry<KeyboardShortcut> MagmaU;

		private static ConfigEntry<KeyboardShortcut> MagmaO;

		private static ConfigEntry<float> MagmaFistDamage;

		private static ConfigEntry<float> MagmaFistRadius;

		private static ConfigEntry<float> MagmaDaiFunkaDamage;

		private static ConfigEntry<float> MagmaDaiFunkaRadius;

		private static ConfigEntry<float> MagmaDaiFunkaCost;

		private static ConfigEntry<float> MagmaDaiFunkaCooldown;

		private static ConfigEntry<float> MagmaGunDamage;

		private static ConfigEntry<float> MagmaGunCost;

		private static ConfigEntry<float> MagmaGunCooldown;

		private static ConfigEntry<float> MagmaCalderaDamage;

		private static ConfigEntry<float> MagmaCalderaRadius;

		private static ConfigEntry<float> MagmaCalderaCost;

		private static ConfigEntry<float> MagmaCalderaCooldown;

		private static ConfigEntry<float> MagmaCalderaHold;

		private static ConfigEntry<float> MagmaForce;

		private static ConfigEntry<float> MagmaShake;

		private static ConfigEntry<float> MagmaFlightSpeed;

		private static ConfigEntry<float> MagmaFlightBoost;

		private static ConfigEntry<float> MagmaBurstDamage;

		private static ConfigEntry<float> MagmaBurstRadius;

		private static ConfigEntry<float> MagmaBurstCost;

		private static ConfigEntry<float> MagmaBurstCooldown;

		private float nextMagmaJ;

		private float nextMagmaH;

		private float nextMagmaK;

		private float nextMagmaO;

		private float nextMagmaFist;

		private float nextMagmaWater;

		private float calderaStart = -1f;

		private GameObject calderaOrb;

		private Coroutine magmaGunRoutine;

		private readonly List<MagmaProjectile> magmaShots = new List<MagmaProjectile>();

		private Material diamondMaterial;

		private Mesh diamondMesh;

		private float nextDiamondCoating;

		private GameObject diamondShieldVisual;

		private GameObject diamondChargeVisual;

		private readonly Dictionary<SkinnedMeshRenderer, MaterialPropertyBlock> diamondOriginalBlocks = new Dictionary<SkinnedMeshRenderer, MaterialPropertyBlock>();

		private readonly List<GameObject> diamondPlates = new List<GameObject>();

		private readonly List<GameObject> diamondHands = new List<GameObject>();

		private readonly List<GameObject> diamondVisuals = new List<GameObject>();

		private ConfigEntry<bool> IconBar;

		private ConfigEntry<bool> AmbientEnabled;

		private ConfigEntry<bool> UseNativeLavaTexture;

		private ConfigEntry<float> BarScale;

		private ConfigEntry<float> BarX;

		private ConfigEntry<float> BarY;

		private ConfigEntry<float> LavaSoundVolume;

		private ConfigEntry<float> IceGlideSoundVolume;

		private ConfigEntry<float> IceFormationVolume;

		private AudioSource lavaAmbient;

		private AudioSource iceAmbient;

		private GameObject lavaAmbientObject;

		private float nextIceFormation;

		private Vector2 operationsScroll;

		private ConfigEntry<bool> OperationsEnabled;

		private ConfigEntry<bool> EndgameContractsEnabled;

		private ConfigEntry<bool> OperationHudEnabled;

		private ConfigEntry<float> EndgameTargetHealth;

		private ConfigEntry<int> EndgameTokenReward;

		private int menuCameraLastOpenFrame = -10;

		private readonly Dictionary<string, Texture2D> abilityTextures = new Dictionary<string, Texture2D>();

		private readonly List<Texture2D> cooldownMasks = new List<Texture2D>();

		private float abilityCombatAt = -100f;

		private static float abilityAlpha = 1f;

		private bool barDragging;

		private Vector2 barDragOffset;

		private Vector2 barDragPosition;

		private GUIStyle abilityLabel;

		private GUIStyle abilityNumber;

		private GUIStyle abilitySmall;

		private static ConfigEntry<bool> MagmaTrees;

		private static ConfigEntry<bool> MagmaStructures;

		private static ConfigEntry<bool> MagmaPlayerStructures;

		private static ConfigEntry<bool> MagmaPatchesEnabled;

		private static ConfigEntry<float> MagmaPatchDuration;

		private static ConfigEntry<float> MagmaPatchDamage;

		private readonly List<MagmaPatch> magmaPatches = new List<MagmaPatch>();

		private float nextMagmaPatchTick;

		internal const string StringFruitKey = "charlone.string.fruit";

		internal static ConfigEntry<bool> StringEnabled;

		internal static ConfigEntry<bool> StringLootEnabled;

		internal static ConfigEntry<bool> StringFists;

		internal static ConfigEntry<bool> StringDestruction;

		internal static ConfigEntry<float> StringChestChance;

		internal static ConfigEntry<float> StringHarvestMultiplier;

		private static ConfigEntry<KeyboardShortcut> StringH;

		private static ConfigEntry<KeyboardShortcut> StringJ;

		private static ConfigEntry<KeyboardShortcut> StringK;

		private static ConfigEntry<KeyboardShortcut> StringL;

		private static ConfigEntry<KeyboardShortcut> StringU;

		private static ConfigEntry<KeyboardShortcut> StringO;

		private static ConfigEntry<float> StringSpeed;

		private static ConfigEntry<float> StringBoost;

		private static ConfigEntry<float> StringSlashDamage;

		private static ConfigEntry<float> StringSlashRange;

		private static ConfigEntry<float> StringSlashCost;

		private static ConfigEntry<float> StringSlashCooldown;

		private static ConfigEntry<float> StringParasiteDamage;

		private static ConfigEntry<float> StringParasiteRange;

		private static ConfigEntry<float> StringParasiteDuration;

		private static ConfigEntry<float> StringParasiteCost;

		private static ConfigEntry<float> StringParasiteCooldown;

		private static ConfigEntry<float> StringHeatDamage;

		private static ConfigEntry<float> StringHeatRange;

		private static ConfigEntry<float> StringHeatRadius;

		private static ConfigEntry<float> StringHeatCost;

		private static ConfigEntry<float> StringHeatCooldown;

		private static ConfigEntry<float> StringWebRadius;

		private static ConfigEntry<float> StringWebDuration;

		private static ConfigEntry<float> StringWebCost;

		private static ConfigEntry<float> StringWebCooldown;

		private static ConfigEntry<float> StringCageRadius;

		private static ConfigEntry<float> StringCageDuration;

		private static ConfigEntry<float> StringCageDamage;

		private static ConfigEntry<float> StringCageFinish;

		private static ConfigEntry<float> StringCageCost;

		private static ConfigEntry<float> StringCageCooldown;

		private static ConfigEntry<float> StringFistDamage;

		private float nextStringH;

		private float nextStringK;

		private float nextStringL;

		private float nextStringU;

		private float nextStringO;

		private float nextStringFist;

		private float nextStringWater;

		private float nextStringShieldFlash;

		private float stringBoundUntil;

		private float stringWebUntil;

		private float stringCageStart = -1f;

		private Character stringBound;

		private GameObject stringBoundVisual;

		private GameObject stringWebVisual;

		private GameObject stringCageVisual;

		private Vector3 stringCagePoint;

		private float stringCageInitial;

		private float stringCageLifetime;

		private float nextStringCageDamage;

		private readonly HashSet<Character> stringCaged = new HashSet<Character>();

		private readonly List<GameObject> stringTransient = new List<GameObject>();

		internal const string DarkFruitKey = "charlone.dark.fruit";

		internal static ConfigEntry<bool> DarkEnabled;

		internal static ConfigEntry<bool> DarkLootEnabled;

		internal static ConfigEntry<bool> DarkFists;

		internal static ConfigEntry<bool> DarkDestruction;

		internal static ConfigEntry<float> DarkChestChance;

		internal static ConfigEntry<float> DarkHarvestMultiplier;

		private static ConfigEntry<KeyboardShortcut> DarkH;

		private static ConfigEntry<KeyboardShortcut> DarkJ;

		private static ConfigEntry<KeyboardShortcut> DarkK;

		private static ConfigEntry<KeyboardShortcut> DarkU;

		private static ConfigEntry<KeyboardShortcut> DarkO;

		private static ConfigEntry<KeyboardShortcut> DarkFlightKey;

		private static ConfigEntry<float> DarkFlightSpeed;

		private static ConfigEntry<float> DarkFlightBoost;

		private static ConfigEntry<float> DarkVortexDamage;

		private static ConfigEntry<float> DarkVortexRange;

		private static ConfigEntry<float> DarkVortexPull;

		private static ConfigEntry<float> DarkVortexCost;

		private static ConfigEntry<float> DarkVortexCooldown;

		private static ConfigEntry<float> DarkHoleDamage;

		private static ConfigEntry<float> DarkHoleRadius;

		private static ConfigEntry<float> DarkHoleDuration;

		private static ConfigEntry<float> DarkHolePull;

		private static ConfigEntry<float> DarkHoleCost;

		private static ConfigEntry<float> DarkHoleCooldown;

		private static ConfigEntry<float> DarkSpearDamage;

		private static ConfigEntry<float> DarkSpearRadius;

		private static ConfigEntry<float> DarkSpearCost;

		private static ConfigEntry<float> DarkSpearCooldown;

		private static ConfigEntry<float> DarkGuardPercent;

		private static ConfigEntry<float> DarkGuardDuration;

		private static ConfigEntry<float> DarkGuardCost;

		private static ConfigEntry<float> DarkGuardCooldown;

		private static ConfigEntry<float> DarkCapacity;

		private static ConfigEntry<float> DarkReleaseDamage;

		private static ConfigEntry<float> DarkReleaseMultiplier;

		private static ConfigEntry<float> DarkReleaseRadius;

		private static ConfigEntry<float> DarkReleaseCost;

		private static ConfigEntry<float> DarkReleaseCooldown;

		private static ConfigEntry<float> DarkFistDamage;

		private static ConfigEntry<float> DarkFistRadius;

		private float nextDarkH;

		private float nextDarkJ;

		private float nextDarkK;

		private float nextDarkU;

		private float nextDarkO;

		private float nextDarkFist;

		private float nextDarkWater;

		private float nextDarkTick;

		private float nextDarkFieldDamage;

		private float darkGuardUntil;

		private float darkHoleUntil;

		private float darkEnergy;

		private float nextDarkAbsorbFlash;

		private Vector3 darkHolePoint;

		private GameObject darkHoleVisual;

		private GameObject darkGuardVisual;

		private Coroutine darkRelease;

		private readonly List<GameObject> darkProjectiles = new List<GameObject>();

		private readonly List<GameObject> darkTransient = new List<GameObject>();

		private readonly Dictionary<Character, DarkPull> darkPulls = new Dictionary<Character, DarkPull>();

		internal readonly MenuAttackGate boardAttackGate = new MenuAttackGate();

		private Material magmaMaterial;

		private Material magmaCrust;

		private readonly Dictionary<string, Mesh> gearMeshes = new Dictionary<string, Mesh>();

		private readonly Dictionary<string, Texture2D> gearTextures = new Dictionary<string, Texture2D>();

		private readonly Dictionary<string, Sprite> gearIcons = new Dictionary<string, Sprite>();

		private static readonly FieldInfo GearBack = AccessTools.Field(typeof(VisEquipment), "m_rightBackItemInstance");

		private static readonly FieldInfo GearHidden = AccessTools.Field(typeof(Humanoid), "m_hiddenRightItem");

		private SignatureVisual backGear;

		private GameObject backNative;

		private string backId;

		private SignatureVisual heldGear;

		private GameObject heldNative;

		private string heldId;

		private GameObject gearFire;

		private Material signatureOpaqueSource;

		private bool signatureOpaqueMissing;

		private readonly List<GameObject> iceAgeFields = new List<GameObject>();

		private ConfigEntry<float> iceAgeSpread;

		private ConfigEntry<float> iceAgeVisualLife;

		private ConfigEntry<bool> iceAgeCoatWorld;

		internal const string OpeFruitKey = "charlone.ope.fruit";

		internal static ConfigEntry<bool> OpeEnabled;

		internal static ConfigEntry<bool> OpeBossSwap;

		internal static ConfigEntry<bool> OpeLootEnabled;

		internal static ConfigEntry<float> OpeRoomRadius;

		internal static ConfigEntry<float> OpeRoomDrain;

		internal static ConfigEntry<float> OpeRoomMinimum;

		internal static ConfigEntry<float> OpeShamblesCooldown;

		internal static ConfigEntry<float> OpeShockDamage;

		internal static ConfigEntry<float> OpeShockRange;

		internal static ConfigEntry<float> OpeShockCooldown;

		internal static ConfigEntry<float> OpeShockForce;

		internal static ConfigEntry<float> OpeChestChance;

		internal static ConfigEntry<float> OpeHarvestMultiplier;

		internal static ConfigEntry<KeyboardShortcut> OpeRoomKey;

		internal static ConfigEntry<KeyboardShortcut> OpeShamblesKey;

		internal static ConfigEntry<KeyboardShortcut> OpeShockKey;

		private GameObject room;

		private Material opeMaterial;

		private Material roomFill;

		private Vector3 roomCenter;

		private float roomProgress;

		private bool roomClosing;

		private float roomRadius;

		private float nextShambles;

		private float nextShock;

		private float nextOpeWater;

		internal static ConfigEntry<KeyboardShortcut> DashKey;

		internal static ConfigEntry<KeyboardShortcut> KickKey;

		internal static ConfigEntry<float> DashDistance;

		internal static ConfigEntry<float> DashCooldown;

		internal static ConfigEntry<float> DashCost;

		internal static ConfigEntry<float> DashDuration;

		internal static ConfigEntry<float> KickDamage;

		internal static ConfigEntry<float> KickCooldown;

		internal static ConfigEntry<float> KickCost;

		internal static ConfigEntry<float> KickRange;

		internal static ConfigEntry<float> KickRadius;

		internal static ConfigEntry<float> KickForce;

		private readonly Dictionary<Renderer, bool> hiddenRenderers = new Dictionary<Renderer, bool>();

		private float revealUntil;

		private float nextDash;

		private float nextKick;

		private bool kickActive;

		private bool beamCharging;

		private float dashFlashUntil;

		internal bool dashActive;

		private Coroutine dashRoutine;

		private Rigidbody dashBody;

		private bool dashGravity;

		private Coroutine kickRoutine;

		private Coroutine beamRoutine;

		private GameObject dashFlash;

		private GameObject beamCharge;

		private GameObject kickCharge;

		internal const string HakiSeal = "charlone.haki.seal.v1";

		internal const string ConquerKey = "charlone.haki.conqueror.v1";

		private ConfigEntry<bool> HakiEnabled;

		private ConfigEntry<bool> ConquerorTestingUnlocked;

		private ConfigEntry<float> HakiScreen;

		private ConfigEntry<KeyboardShortcut> ArmamentKey;

		private ConfigEntry<KeyboardShortcut> ObservationKey;

		private ConfigEntry<KeyboardShortcut> ConquerorKey;

		private bool armament;

		private bool observation;

		private int observationCharges = -1;

		private float nextHakiDodge;

		private float lastHakiCombat;

		private float regenHaki;

		private float nextHakiTrain;

		private float nextHakiDefenseTrain;

		private float conquerFlash;

		private float nextHakiVisual;

		private Player hakiOwner;

		private readonly Dictionary<Renderer, Material[]> coated = new Dictionary<Renderer, Material[]>();

		private readonly List<Material> coatings = new List<Material>();

		private static readonly string[] HakiTrophies = new string[6] { "TrophyEikthyr", "TrophyTheElder", "TrophyBonemass", "TrophyDragonQueen", "TrophyGoblinKing", "TrophySeekerQueen" };

		private float nextCoatingWarning;

		internal static ConfigEntry<bool> LogiaEnvironmentEnabled;

		private Texture2D iceFrostTexture;

		private Mesh icePlateMesh;

		private Material iceAgeSurface;

		private Texture2D iceAgeTexture;

		private const string TavernRequest = "Charlone057Tavern";

		private const string TavernResponse = "Charlone057Table";

		private const string TavernPaid = "charlone.tavern.ticket.";

		private ConfigEntry<bool> TavernEnabled;

		private TavernLedger tavernLedger = new TavernLedger();

		private string tavernPath;

		private bool tavernInvalid;

		private TavernView tavernView;

		private TavernTicket tavernTicket;

		private Player tavernPlayer;

		private float nextTavernPoll;

		private float nextTavernSave;

		private bool tavernSolo = true;

		private int tavernBet;

		private int tavernChoice;

		private int tavernHolds;

		private long tavernWorld;

		private readonly Dictionary<long, float> tavernRate = new Dictionary<long, float>();

		private readonly Dictionary<string, (long player, string game, Vector3 start, double time)> archeryShots = new Dictionary<string, (long, string, Vector3, double)>();

		private ConfigEntry<float> BountyX;

		private ConfigEntry<float> BountyY;

		private bool bountyDragging;

		private Vector2 bountyDragOffset;

		private static readonly FieldInfo InventoryPanel = AccessTools.Field(typeof(InventoryGui), "m_player");

		internal const string DiamondFruitKey = "charlone.diamond.fruit";

		internal static ConfigEntry<bool> DiamondEnabled;

		internal static ConfigEntry<bool> DiamondLootEnabled;

		internal static ConfigEntry<bool> DiamondFists;

		internal static ConfigEntry<bool> DiamondDestruction;

		internal static ConfigEntry<float> DiamondChestChance;

		internal static ConfigEntry<float> DiamondHarvestMultiplier;

		private static ConfigEntry<KeyboardShortcut> DiamondH;

		private static ConfigEntry<KeyboardShortcut> DiamondJ;

		private static ConfigEntry<KeyboardShortcut> DiamondK;

		private static ConfigEntry<KeyboardShortcut> DiamondL;

		private static ConfigEntry<KeyboardShortcut> DiamondU;

		private static ConfigEntry<KeyboardShortcut> DiamondO;

		private static ConfigEntry<float> DiamondBodyReduction;

		private static ConfigEntry<float> DiamondBodyDrain;

		private static ConfigEntry<float> DiamondBodyBonus;

		private static ConfigEntry<float> DiamondFistDamage;

		private static ConfigEntry<float> DiamondPunchDamage;

		private static ConfigEntry<float> DiamondPunchCost;

		private static ConfigEntry<float> DiamondPunchCooldown;

		private static ConfigEntry<float> DiamondRushDamage;

		private static ConfigEntry<float> DiamondRushCost;

		private static ConfigEntry<float> DiamondRushCooldown;

		private static ConfigEntry<float> DiamondRushDistance;

		private static ConfigEntry<float> DiamondClapDamage;

		private static ConfigEntry<float> DiamondClapCost;

		private static ConfigEntry<float> DiamondClapCooldown;

		private static ConfigEntry<float> DiamondGuardDuration;

		private static ConfigEntry<float> DiamondGuardCost;

		private static ConfigEntry<float> DiamondGuardCooldown;

		private static ConfigEntry<float> DiamondSlamDamage;

		private static ConfigEntry<float> DiamondSlamRadius;

		private static ConfigEntry<float> DiamondSlamCharge;

		private static ConfigEntry<float> DiamondSlamCost;

		private static ConfigEntry<float> DiamondSlamCooldown;

		private float nextDiamondH;

		private float nextDiamondJ;

		private float nextDiamondK;

		private float nextDiamondL;

		private float nextDiamondU;

		private float nextDiamondO;

		private float nextDiamondFist;

		private float nextDiamondWater;

		private float nextDiamondHitFx;

		private float diamondGuardUntil;

		private float diamondFlashUntil;

		private float diamondHandsUntil;

		private float diamondCharge = -1f;

		private float diamondRushLeft;

		private float diamondStrikeAt = -1f;

		private float diamondStrikePower;

		private int diamondStrikeKind;

		private Vector3 diamondRushDirection;

		private Vector3 diamondStrikeDirection;

		private bool diamondBody;

		private readonly HashSet<Character> diamondRushHits = new HashSet<Character>();

		private readonly HashSet<Component> diamondRushWorld = new HashSet<Component>();

		private ConfigEntry<float> SlotVolume;

		private AudioClip slotClick;

		private AudioClip slotStop;

		private AudioClip slotWin;

		private AudioClip slotJackpot;

		private float audioSpin = -100f;

		private float nextSlotTick;

		private int stoppedReels;

		private bool slotResultPlayed;

		private readonly Dictionary<Character, List<ObservationBody>> observationHighlights = new Dictionary<Character, List<ObservationBody>>();

		private Material observationMaterial;

		private float nextObservationBake;

		private Texture2D observationVignette;

		private GUIStyle observationLabel;

		internal static ConfigEntry<bool> GuraFistsEnabled;

		private static ConfigEntry<float> GuraFistDamage;

		private static ConfigEntry<float> GuraFistRadius;

		private static ConfigEntry<float> GuraFistCooldown;

		private static ConfigEntry<float> GuraFistForce;

		private static ConfigEntry<KeyboardShortcut> GuraBlastKey;

		private static ConfigEntry<KeyboardShortcut> GuraFaultKey;

		private static ConfigEntry<float> GuraBlastDamage;

		private static ConfigEntry<float> GuraBlastRadius;

		private static ConfigEntry<float> GuraBlastRange;

		private static ConfigEntry<float> GuraBlastSpeed;

		private static ConfigEntry<float> GuraBlastCost;

		private static ConfigEntry<float> GuraBlastCooldown;

		private static ConfigEntry<float> GuraFaultDamage;

		private static ConfigEntry<float> GuraFaultRadius;

		private static ConfigEntry<float> GuraFaultLength;

		private static ConfigEntry<float> GuraFaultCost;

		private static ConfigEntry<float> GuraFaultCooldown;

		internal static readonly FieldInfo GuraUnarmed = AccessTools.Field(typeof(Humanoid), "m_unarmedWeapon");

		internal static readonly FieldInfo GuraSecondary = AccessTools.Field(typeof(Humanoid), "m_currentAttackIsSecondary");

		private float nextGuraFist;

		private float nextGuraBlast;

		private float nextGuraFault;

		private GameObject guraProjectile;

		private const string NetHit = "Charlone051Hit";

		private const string NetHitResult = "Charlone051HitResult";

		private const string NetControl = "Charlone051Control";

		private const string NetVisual = "Charlone051Visual";

		[ThreadStatic]
		internal static bool applyingCoopHit;

		[ThreadStatic]
		internal static Character iceNetworkShatter;

		private float nextSharedHitFx;

		private long hitSequence;

		private readonly Dictionary<long, (long peer, string target, string fruit, float sent, float hakiXp)> pendingHits = new Dictionary<long, (long, string, string, float, float)>();

		private readonly Dictionary<Character, float> nextControlSend = new Dictionary<Character, float>();

		private readonly Dictionary<string, float> remoteXpNext = new Dictionary<string, float>();

		private Material iceMaterial;

		private Mesh iceCrystalMesh;

		private readonly Dictionary<Renderer, Material[]> iceSwordMaterials = new Dictionary<Renderer, Material[]>();

		private GameObject iceSwordModel;

		private readonly Dictionary<Vector2Int, GameObject> iceTiles = new Dictionary<Vector2Int, GameObject>();

		private const float IceTileSize = 0.75f;

		private Material icePathMaterial;

		private static readonly FieldInfo IceMoveDir = AccessTools.Field(typeof(Character), "m_moveDir");

		private static readonly FieldInfo IceGroundCollider = AccessTools.Field(typeof(Character), "m_lastGroundCollider");

		internal const string GravityFruitKey = "charlone.gravity.fruit";

		internal static ConfigEntry<bool> GravityEnabled;

		internal static ConfigEntry<bool> GravityLootEnabled;

		internal static ConfigEntry<bool> GravityDestruction;

		internal static ConfigEntry<float> GravityChestChance;

		internal static ConfigEntry<float> GravityHarvestMultiplier;

		private static ConfigEntry<KeyboardShortcut> GravityH;

		private static ConfigEntry<KeyboardShortcut> GravityJ;

		private static ConfigEntry<KeyboardShortcut> GravityK;

		private static ConfigEntry<KeyboardShortcut> GravityU;

		private static ConfigEntry<KeyboardShortcut> GravityO;

		private static ConfigEntry<float> GravityPressDamage;

		private static ConfigEntry<float> GravityPressRadius;

		private static ConfigEntry<float> GravityPressDuration;

		private static ConfigEntry<float> GravityPressCost;

		private static ConfigEntry<float> GravityPressCooldown;

		private static ConfigEntry<float> GravityWaveDamage;

		private static ConfigEntry<float> GravityWaveRange;

		private static ConfigEntry<float> GravityWaveRadius;

		private static ConfigEntry<float> GravityWaveForce;

		private static ConfigEntry<float> GravityWaveCost;

		private static ConfigEntry<float> GravityWaveCooldown;

		private static ConfigEntry<float> GravityWellDamage;

		private static ConfigEntry<float> GravityWellRadius;

		private static ConfigEntry<float> GravityWellDuration;

		private static ConfigEntry<float> GravityWellPull;

		private static ConfigEntry<float> GravityWellCost;

		private static ConfigEntry<float> GravityWellCooldown;

		private static ConfigEntry<float> GravityMeteorDamage;

		private static ConfigEntry<float> GravityMeteorRadius;

		private static ConfigEntry<float> GravityMeteorCost;

		private static ConfigEntry<float> GravityMeteorCooldown;

		private static ConfigEntry<float> GravitySpeed;

		private static ConfigEntry<float> GravityBoost;

		private float nextGravityH;

		private float nextGravityK;

		private float nextGravityU;

		private float nextGravityO;

		private float nextGravityTick;

		private float nextGravityWater;

		private Coroutine gravityWave;

		private Coroutine gravityMeteor;

		private readonly List<GravityField> gravityFields = new List<GravityField>();

		private readonly Dictionary<Character, GravityControl> gravityControls = new Dictionary<Character, GravityControl>();

		private readonly List<GameObject> gravityTransient = new List<GameObject>();

		internal const string PoisonFruitKey = "charlone.poison.fruit";

		internal static ConfigEntry<bool> PoisonEnabled;

		internal static ConfigEntry<bool> PoisonLootEnabled;

		internal static ConfigEntry<bool> PoisonImmunity;

		internal static ConfigEntry<bool> PoisonFists;

		internal static ConfigEntry<float> PoisonChestChance;

		internal static ConfigEntry<float> PoisonHarvestMultiplier;

		private static ConfigEntry<KeyboardShortcut> PoisonH;

		private static ConfigEntry<KeyboardShortcut> PoisonJ;

		private static ConfigEntry<KeyboardShortcut> PoisonK;

		private static ConfigEntry<KeyboardShortcut> PoisonU;

		private static ConfigEntry<KeyboardShortcut> PoisonO;

		private static ConfigEntry<float> PoisonShotDamage;

		private static ConfigEntry<float> PoisonShotRadius;

		private static ConfigEntry<float> PoisonShotCost;

		private static ConfigEntry<float> PoisonShotCooldown;

		private static ConfigEntry<float> PoisonRoadDistance;

		private static ConfigEntry<float> PoisonRoadDuration;

		private static ConfigEntry<float> PoisonRoadCost;

		private static ConfigEntry<float> PoisonRoadCooldown;

		private static ConfigEntry<float> PoisonHydraDamage;

		private static ConfigEntry<float> PoisonHydraRadius;

		private static ConfigEntry<float> PoisonHydraCost;

		private static ConfigEntry<float> PoisonHydraCooldown;

		private static ConfigEntry<float> PoisonCloudDamage;

		private static ConfigEntry<float> PoisonCloudRadius;

		private static ConfigEntry<float> PoisonCloudDuration;

		private static ConfigEntry<float> PoisonCloudCost;

		private static ConfigEntry<float> PoisonCloudCooldown;

		private static ConfigEntry<float> PoisonPoolDamage;

		private static ConfigEntry<float> PoisonPoolDuration;

		private static ConfigEntry<float> PoisonDemonDuration;

		private static ConfigEntry<float> PoisonDemonMultiplier;

		private static ConfigEntry<float> PoisonDemonCost;

		private static ConfigEntry<float> PoisonDemonCooldown;

		private static ConfigEntry<float> PoisonFistDamage;

		private static ConfigEntry<float> PoisonFistRadius;

		private float nextPoisonH;

		private float nextPoisonJ;

		private float nextPoisonK;

		private float nextPoisonU;

		private float nextPoisonO;

		private float nextPoisonFist;

		private float nextPoisonTick;

		private float nextPoisonWater;

		private float poisonDemonUntil;

		internal bool poisonRoadActive;

		private Coroutine poisonRoad;

		private GameObject poisonRoadVisual;

		private GameObject poisonDemonVisual;

		private readonly List<VenomField> venomFields = new List<VenomField>();

		private readonly List<GameObject> poisonProjectiles = new List<GameObject>();

		private readonly List<GameObject> poisonTransient = new List<GameObject>();

		private const string NetHello = "Charlone051Hello";

		private const string NetWelcome = "Charlone051Welcome";

		private const string NetSync = "Charlone051Contracts";

		private const string NetSpawn = "Charlone051Spawn";

		private const string NetReward = "Charlone051Reward";

		private const string NetAck = "Charlone051Ack";

		private const string NetDeath = "Charlone051Death";

		private const string NetBalance = "Charlone051Balance";

		private const string NetStatus = "Charlone051Status";

		private const string NetDespawn = "Charlone051Despawn";

		private const string NetConfirmed = "Charlone051Confirmed";

		private static ConfigEntry<bool> CoopEnabled;

		private ConfigEntry<float> CoopParticipationRange;

		private ZRoutedRpc coopRouter;

		private bool coopWelcomed;

		private bool coopStoreInvalid;

		private long coopWorldID;

		private float nextCoopHello;

		private float nextCoopSync;

		private float nextCoopDelivery;

		private readonly Dictionary<long, long> coopPeers = new Dictionary<long, long>();

		private readonly Dictionary<string, float> spawnGrants = new Dictionary<string, float>();

		private CoopWorld coopWorld = new CoopWorld();

		private string coopPath;

		private float nextIdentityWarning;

		private float nextVersionWarning;

		private readonly Dictionary<string, float> missingTargets = new Dictionary<string, float>();

		private Material pawMaterial;

		private Material pawLineMaterial;

		private Mesh pawSphere;

		private readonly Dictionary<Character, DamageBudget> damageBudgets = new Dictionary<Character, DamageBudget>();

		private static readonly FieldInfo ControlMoveDir = AccessTools.Field(typeof(Character), "m_moveDir");

		private readonly Dictionary<Character, (Vector3 velocity, float until)> gravityPushes = new Dictionary<Character, (Vector3, float)>();

		private GameObject lightBladeRoot;

		private readonly Dictionary<Renderer, bool> lightBladeHidden = new Dictionary<Renderer, bool>();

		private readonly Dictionary<Renderer, bool> iceBladeHidden = new Dictionary<Renderer, bool>();

		private Mesh ligh