Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Odins Fruit v0.59.6
BepInEx/plugins/CharloneLightFruit/CharloneLightFruit.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
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