Decompiled source of CrowdControl REPO v1.0.6
BepInEx/plugins/CrowdControl.dll
Decompiled 9 hours 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.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using BepInEx; using BepInEx.Logging; using BepinControl.Effects; using HarmonyLib; using Microsoft.CodeAnalysis; using MyBox; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Photon.Pun; using Photon.Realtime; using REPOLib.Modules; using TMPro; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("LethalCompanyCrowdControlMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LethalCompanyCrowdControlMod")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d4f6b961-e8ae-4e4b-950c-37644e42d4ca")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } } namespace BepinControl { public class HelperUtils { public static PlayerAvatar FindPlayerAvatarByNumberOld(int actorNumber, bool alive = true, bool random = false) { List<PlayerAvatar> list = new List<PlayerAvatar>(); foreach (PlayerAvatar player in GameDirector.instance.PlayerList) { PhotonView component = ((Component)player).GetComponent<PhotonView>(); if ((Object)(object)component == (Object)null) { continue; } FieldInfo field = typeof(PlayerAvatar).GetField("isDisabled", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null && (bool)field.GetValue(player) && alive) { continue; } if (random) { if (component.Owner.ActorNumber != actorNumber) { list.Add(player); } } else if (component.Owner.ActorNumber == actorNumber) { return player; } } if (random && list.Count > 0) { int index = Random.Range(0, list.Count); return list[index]; } return null; } public static async Task<PlayerHealth> FindPlayerHealthByAvatarNumber(int targetActor) { TaskCompletionSource<PlayerHealth> tcs = new TaskCompletionSource<PlayerHealth>(TaskCreationOptions.RunContinuationsAsynchronously); await Task.Yield(); CrowdControlMod.ActionQueue.Enqueue(delegate { try { PlayerHealth[] array = Object.FindObjectsOfType<PlayerHealth>(); List<PlayerHealth> list = new List<PlayerHealth>(); PlayerHealth[] array2 = array; foreach (PlayerHealth val in array2) { PhotonView component = ((Component)val).GetComponent<PhotonView>(); if ((Object)(object)component != (Object)null && component.Owner.ActorNumber == targetActor) { list.Add(val); } } tcs.TrySetResult(list.FirstOrDefault()); } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Error in FindPlayerByActorNumberAsync: " + ex.Message)); tcs.TrySetResult(null); } }); return await tcs.Task; } public static async Task<PlayerAvatar> FindPlayerAvatarByNumber(int actorNumber, bool alive = true, bool random = false) { TaskCompletionSource<PlayerAvatar> tcs = new TaskCompletionSource<PlayerAvatar>(TaskCreationOptions.RunContinuationsAsynchronously); await Task.Yield(); CrowdControlMod.ActionQueue.Enqueue(delegate { try { List<PlayerAvatar> list = new List<PlayerAvatar>(); foreach (PlayerAvatar player in GameDirector.instance.PlayerList) { PhotonView component = ((Component)player).GetComponent<PhotonView>(); if (!((Object)(object)component == (Object)null)) { FieldInfo field = typeof(PlayerAvatar).GetField("isDisabled", BindingFlags.Instance | BindingFlags.NonPublic); if (!(field != null && (bool)field.GetValue(player) && alive)) { if (random) { if (component.Owner.ActorNumber != actorNumber) { list.Add(player); } } else if (component.Owner.ActorNumber == actorNumber) { tcs.TrySetResult(player); return; } } } } if (random && list.Count > 0) { int index = Random.Range(0, list.Count); PlayerAvatar result = list[index]; tcs.TrySetResult(result); } else { tcs.TrySetResult(null); } } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Error in FindPlayerAvatarByNumberAsync: " + ex.Message)); tcs.TrySetResult(null); } }); return await tcs.Task; } public static async Task<PlayerAvatar> FindRandomAvatar(int actorNumber) { TaskCompletionSource<PlayerAvatar> tcs = new TaskCompletionSource<PlayerAvatar>(TaskCreationOptions.RunContinuationsAsynchronously); await Task.Yield(); CrowdControlMod.ActionQueue.Enqueue(delegate { try { List<PlayerAvatar> list = new List<PlayerAvatar>(); foreach (PlayerAvatar player in GameDirector.instance.PlayerList) { PhotonView component = ((Component)player).GetComponent<PhotonView>(); if (!((Object)(object)component == (Object)null) && component.Owner.ActorNumber != actorNumber) { list.Add(player); } } if (list.Count > 0) { tcs.TrySetResult(null); } int index = Random.Range(0, list.Count); PlayerAvatar val = list[index]; if (Object.op_Implicit((Object)(object)val)) { tcs.TrySetResult(val); } tcs.TrySetResult(null); } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Error in FindRandomPlayer: " + ex.Message)); tcs.TrySetResult(null); } }); return await tcs.Task; } } public enum TimedType { INVINCIBLE, INFINITE_STAMINA, ANTI_GRAVITY, DISABLE_CROUCH, DISABLE_INPUT, FEATHER, SPEED, PRAISE, KILL } public class Timed { public TimedType type; private float old; public int duration; private static Dictionary<string, object> customVariables = new Dictionary<string, object>(); private static int frames = 0; public static T GetCustomVariable<T>(string key) { if (customVariables.TryGetValue(key, out var value)) { return (T)value; } throw new KeyNotFoundException("Custom variable with key '" + key + "' not found."); } public void SetCustomVariables(Dictionary<string, object> variables) { customVariables = variables; } public Timed(TimedType t) { type = t; } public void addEffect() { _ = (float)duration / 1000f; switch (type) { case TimedType.INVINCIBLE: CrowdControlMod.infiniteHealth = true; CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance6 = Singleton<MissionUI>.Instance; if (instance6 != null) { instance6.MissionText("CC Infinite Health activated", Color.green, Color.green, 1f); } }); break; case TimedType.INFINITE_STAMINA: CrowdControlMod.infiniteStamina = true; CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance3 = Singleton<MissionUI>.Instance; if (instance3 != null) { instance3.MissionText("CC Infinite Energy activated", Color.green, Color.green, 1f); } }); break; case TimedType.SPEED: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance5 = Singleton<MissionUI>.Instance; if (instance5 != null) { instance5.MissionText("CC Increased Speed activated", Color.green, Color.green, 1f); } }); break; case TimedType.ANTI_GRAVITY: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance2 = Singleton<MissionUI>.Instance; if (instance2 != null) { instance2.MissionText("CC Anti-Gravity activated", Color.green, Color.green, 1f); } }); break; case TimedType.DISABLE_CROUCH: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance = Singleton<MissionUI>.Instance; if (instance != null) { instance.MissionText("CC Crouch is disabled", Color.red, Color.red, 1f); } }); break; case TimedType.DISABLE_INPUT: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance4 = Singleton<MissionUI>.Instance; if (instance4 != null) { instance4.MissionText("CC All inputs disabled", Color.red, Color.red, 1f); } }); break; case TimedType.FEATHER: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance7 = Singleton<MissionUI>.Instance; if (instance7 != null) { instance7.MissionText("CC Feather activated", Color.green, Color.green, 1f); } }); break; } } public static bool removeEffect(TimedType etype) { try { switch (etype) { case TimedType.INVINCIBLE: CrowdControlMod.infiniteHealth = false; CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance6 = Singleton<MissionUI>.Instance; if (instance6 != null) { instance6.MissionText("CC Infinite Health deactivated", Color.red, Color.red, 1f); } }); break; case TimedType.INFINITE_STAMINA: CrowdControlMod.infiniteStamina = false; CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance3 = Singleton<MissionUI>.Instance; if (instance3 != null) { instance3.MissionText("CC Infinite Energy deactivated", Color.red, Color.red, 1f); } }); break; case TimedType.SPEED: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance5 = Singleton<MissionUI>.Instance; if (instance5 != null) { instance5.MissionText("CC Increased Speed deactivated", Color.red, Color.red, 1f); } }); break; case TimedType.ANTI_GRAVITY: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance2 = Singleton<MissionUI>.Instance; if (instance2 != null) { instance2.MissionText("CC Anti-Gravity deactivated", Color.red, Color.red, 1f); } }); break; case TimedType.DISABLE_CROUCH: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance = Singleton<MissionUI>.Instance; if (instance != null) { instance.MissionText("CC Crouch is enabled", Color.green, Color.green, 1f); } }); break; case TimedType.DISABLE_INPUT: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance4 = Singleton<MissionUI>.Instance; if (instance4 != null) { instance4.MissionText("CC All inputs recovered", Color.green, Color.green, 1f); } }); break; case TimedType.FEATHER: CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) MissionUI instance7 = Singleton<MissionUI>.Instance; if (instance7 != null) { instance7.MissionText("CC Feather decatived", Color.red, Color.red, 1f); } }); break; } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.ToString()); return false; } return true; } public void tick() { frames++; _ = type; _ = 1; } } public class TimedThread { public static List<TimedThread> threads = new List<TimedThread>(); public readonly Timed effect; public int duration; public int remain; public int id; public bool paused; public static bool isRunning(TimedType t) { foreach (TimedThread thread in threads) { if (thread.effect.type == t) { return true; } } return false; } public static void tick() { foreach (TimedThread thread in threads) { if (!thread.paused) { thread.effect.tick(); } } } public static void addTime(int duration) { try { lock (threads) { foreach (TimedThread thread in threads) { Interlocked.Add(ref thread.duration, duration + 5); if (!thread.paused) { int dur = Volatile.Read(ref thread.remain); new TimedResponse(thread.id, dur, CrowdResponse.Status.STATUS_PAUSE).Send(ControlClient.Socket); thread.paused = true; } } } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.ToString()); } } public static void tickTime(int duration) { try { lock (threads) { foreach (TimedThread thread in threads) { int num = Volatile.Read(ref thread.remain); num -= duration; if (num < 0) { num = 0; } Volatile.Write(ref thread.remain, num); } } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.ToString()); } } public static void unPause() { try { lock (threads) { foreach (TimedThread thread in threads) { if (thread.paused) { int dur = Volatile.Read(ref thread.remain); new TimedResponse(thread.id, dur, CrowdResponse.Status.STATUS_RESUME).Send(ControlClient.Socket); thread.paused = false; } } } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.ToString()); } } public TimedThread(int id, TimedType type, int duration, Dictionary<string, object> customVariables = null) { effect = new Timed(type); this.duration = duration; remain = duration; this.id = id; paused = false; if (customVariables == null) { customVariables = new Dictionary<string, object>(); } effect.SetCustomVariables(customVariables); try { lock (threads) { threads.Add(this); } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.ToString()); } } public void Run() { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; effect.addEffect(); bool flag = false; try { do { flag = false; for (int num = Volatile.Read(ref duration); num > 0; num = Volatile.Read(ref duration)) { Interlocked.Add(ref duration, -num); Thread.Sleep(num); } if (Timed.removeEffect(effect.type)) { lock (threads) { threads.Remove(this); } new TimedResponse(id, 0, CrowdResponse.Status.STATUS_STOP).Send(ControlClient.Socket); } else { flag = true; } } while (flag); } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.ToString()); } } } [BepInPlugin("WarpWorld.CrowdControl", "Crowd Control", "1.0.6.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class CrowdControlMod : BaseUnityPlugin { [HarmonyPatch(typeof(RunManager))] [HarmonyPatch("OnApplicationQuit")] public class OnApplicationQuitPatch { private static bool Prefix() { try { if (ControlClient.Socket != null && ControlClient.Socket.Connected) { ControlClient.Socket.Shutdown(SocketShutdown.Both); ControlClient.Socket.Close(); ControlClient.Socket.Dispose(); } ControlClient.connected = false; new ControlClient().Stop(); mls.LogInfo((object)"ControlClient stopped successfully."); } catch (Exception arg) { mls.LogError((object)$"Error during application quit: {arg}"); } return true; } } [HarmonyPatch(typeof(PlayerHealth))] internal class PlayerHealthPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePatch(PlayerHealth __instance) { Traverse.Create((object)__instance).Field("godMode").SetValue((object)infiniteHealth); } } [HarmonyPatch(typeof(HealthUI), "Update")] public class Patch_HealthUI_Update { private static bool Prefix(HealthUI __instance) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown if (infiniteHealth) { FieldInfo fieldInfo = AccessTools.Field(typeof(HealthUI), "Text"); FieldInfo fieldInfo2 = AccessTools.Field(typeof(HealthUI), "textMaxHealth"); if (fieldInfo != null) { TextMeshProUGUI val = (TextMeshProUGUI)fieldInfo.GetValue(__instance); if ((Object)(object)val != (Object)null) { ((TMP_Text)val).text = "INFINITE"; } } if (fieldInfo2 != null) { TextMeshProUGUI val2 = (TextMeshProUGUI)fieldInfo2.GetValue(__instance); if ((Object)(object)val2 != (Object)null) { ((TMP_Text)val2).text = ""; } } return false; } return true; } } [HarmonyPatch(typeof(MissionUI), "MissionText")] public class MissionUITextPatch { private static void Postfix(MissionUI __instance) { FieldInfo field = typeof(MissionUI).GetField("Text", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object? value = field.GetValue(__instance); TMP_Text val = (TMP_Text)((value is TMP_Text) ? value : null); if ((Object)(object)val != (Object)null && val.text.StartsWith("<b>FOCUS > </b>CC ")) { val.text = val.text.Replace("FOCUS >", "CrowdControl:").Replace("CC ", " "); } } } } [HarmonyPatch(typeof(EnergyUI), "Update")] public class Patch_EnergyUI_Update { private static bool Prefix(EnergyUI __instance) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown if (infiniteStamina) { FieldInfo fieldInfo = AccessTools.Field(typeof(EnergyUI), "Text"); FieldInfo fieldInfo2 = AccessTools.Field(typeof(EnergyUI), "textEnergyMax"); if (fieldInfo != null) { TextMeshProUGUI val = (TextMeshProUGUI)fieldInfo.GetValue(__instance); if ((Object)(object)val != (Object)null) { ((TMP_Text)val).text = "INFINITE"; } } if (fieldInfo2 != null) { TextMeshProUGUI val2 = (TextMeshProUGUI)fieldInfo2.GetValue(__instance); if ((Object)(object)val2 != (Object)null) { ((TMP_Text)val2).text = ""; } } return false; } return true; } } [HarmonyPatch(typeof(MenuPageLobby), "PlayerAdd")] public static class PlayerAddPatch { private static void Postfix(PlayerAvatar player) { FieldInfo field = typeof(PlayerAvatar).GetField("steamID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); string key = ((field != null) ? ((field.GetValue(player) as string) ?? "0") : "0"); PlayerVersions[key] = "1.0.6.0"; RPCCommands.MessageHandler.SendMessageToHost("CC_CONNECT", 0, PhotonNetwork.LocalPlayer.ActorNumber, 0, new Dictionary<string, object> { { "version", "1.0.6.0" } }); } } [HarmonyPatch(typeof(MenuPageLobby), "Update")] public static class MenuPageLobbyPatch { private static void Postfix(MenuPageLobby __instance) { FieldInfo field = typeof(MenuPageLobby).GetField("listObjects", BindingFlags.Instance | BindingFlags.NonPublic); if (field == null || !(field.GetValue(__instance) is List<GameObject> list)) { return; } foreach (GameObject item in list) { MenuPlayerListed component = item.GetComponent<MenuPlayerListed>(); if ((Object)(object)component == (Object)null) { continue; } FieldInfo field2 = typeof(MenuPlayerListed).GetField("playerAvatar", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field2 == null) { continue; } object? value = field2.GetValue(component); PlayerAvatar val = (PlayerAvatar)((value is PlayerAvatar) ? value : null); if (!((Object)(object)val == (Object)null) && !((Object)(object)val.photonView == (Object)null)) { FieldInfo field3 = typeof(PlayerAvatar).GetField("steamID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); string key = ((field3 != null) ? ((field3.GetValue(val) as string) ?? "0") : "0"); string value2; bool num = PlayerVersions.TryGetValue(key, out value2); string text = (num ? ("Crowd Control v" + value2) : "Crowd Control Not Found"); string text2 = ((num && value2 == "1.0.6.0") ? "00FF00" : "FF0000"); text = "<color=#" + text2 + ">" + text + "</color>"; FieldInfo field4 = typeof(PlayerAvatar).GetField("playerName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); string text3 = ((field4 != null) ? ((field4.GetValue(val) as string) ?? "Unknown Player") : "Unknown Player"); if (val.photonView.Owner == PhotonNetwork.MasterClient) { ((TMP_Text)component.playerName).text = text3 + " <color=#331100>[HOST]</color>\n<color=#00FF00><size=50%>CrowdControl v1.0.6.0</size></color>"; } else { ((TMP_Text)component.playerName).text = text3 + "\n<size=50%>" + text + "</size>"; } } } } } [HarmonyPatch(typeof(PlayerController))] internal class PlayerStaminaPatch { [HarmonyPatch("Update")] [HarmonyPatch("FixedUpdate")] [HarmonyPostfix] private static void InfiniteStaminaPatch(PlayerController __instance) { if (__instance.sprinting && infiniteStamina) { __instance.EnergyCurrent = __instance.EnergyStart; } else if (__instance.Sliding && infiniteStamina) { __instance.EnergyCurrent = __instance.EnergyStart; } } } private const string modGUID = "WarpWorld.CrowdControl"; private const string modName = "Crowd Control"; public const string modVersion = "1.0.6.0"; private readonly Harmony harmony = new Harmony("WarpWorld.CrowdControl"); public static ManualLogSource mls; internal static CrowdControlMod Instance = null; private ControlClient client; public static bool isFocused = true; public static bool modActivated = false; public static bool infiniteHealth = false; public static bool infiniteStamina = false; public static Dictionary<string, string> PlayerVersions = new Dictionary<string, string>(); public static Queue<Action> ActionQueue = new Queue<Action>(); private void Awake() { Instance = this; mls = Logger.CreateLogSource("Crowd Control"); mls.LogInfo((object)"Loaded WarpWorld.CrowdControl. Patching."); harmony.PatchAll(typeof(CrowdControlMod)); harmony.PatchAll(); mls.LogInfo((object)"Initializing Crowd Control"); string? directoryName = Path.GetDirectoryName(typeof(CrowdControlMod).Assembly.Location); string text = Path.Combine(directoryName, "food"); Path.Combine(directoryName, "warpworld.hypetrain"); AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { mls.LogError((object)("Failed to load AssetBundle from " + text)); } if ((Object)(object)val != (Object)null) { string text2 = "assets/carton of milk 4k pbr/prefab/breadgroup.prefab"; string text3 = "assets/carton of milk 4k pbr/prefab/milkgroup.prefab"; GameObject val2 = val.LoadAsset<GameObject>(text2); if ((Object)(object)val2 == (Object)null) { mls.LogError((object)$"Failed to load '{text2}' from asset bundle {val}"); } GameObject val3 = val.LoadAsset<GameObject>(text3); if ((Object)(object)val3 == (Object)null) { mls.LogError((object)$"Failed to load '{text3}' from asset bundle {val}"); } if ((Object)(object)val2 != (Object)null) { Valuables.RegisterValuable(val2); } if ((Object)(object)val3 != (Object)null) { Valuables.RegisterValuable(val3); } } try { client = new ControlClient(); new Thread(client.NetworkLoop).Start(); new Thread(client.RequestLoop).Start(); } catch (Exception ex) { mls.LogInfo((object)("CC Init Error: " + ex.ToString())); } mls.LogInfo((object)"Crowd Control Initialized"); mls = ((BaseUnityPlugin)this).Logger; } [HarmonyPatch(typeof(PunManager), "Update")] [HarmonyPrefix] private static void RunEffects() { while (ActionQueue.Count > 0) { ActionQueue.Dequeue()(); } lock (TimedThread.threads) { foreach (TimedThread thread in TimedThread.threads) { if (!thread.paused) { thread.effect.tick(); } } } } } public class ControlClient { public static readonly string CV_HOST = "127.0.0.1"; public static readonly int CV_PORT = 51337; private bool paused; public static bool connected = false; public static bool setName = false; public static bool resetName = false; public static bool disableLogging = true; public bool inGame = true; public bool questMessage; public static string currentLevel = ""; private Dictionary<string, CrowdDelegate> Delegate { get; set; } private IPEndPoint Endpoint { get; set; } private Queue<CrowdRequest> Requests { get; set; } private bool Running { get; set; } public static Socket Socket { get; set; } public ControlClient() { Endpoint = new IPEndPoint(IPAddress.Parse(CV_HOST), CV_PORT); Requests = new Queue<CrowdRequest>(); Running = true; Socket = null; Delegate = new Dictionary<string, CrowdDelegate> { { "player_invincible", (ControlClient client, CrowdRequest req) => new PlayerInvincibleEffect(client, req).Execute() }, { "player_infinitestam", (ControlClient client, CrowdRequest req) => new PlayerInfiniteStaminaEffect(client, req).Execute() }, { "player_antigravity", (ControlClient client, CrowdRequest req) => new PlayerAntiGravityEffect(client, req).Execute() }, { "player_disablecrouch", (ControlClient client, CrowdRequest req) => new PlayerDisableCrouchEffect(client, req).Execute() }, { "player_disableinput", (ControlClient client, CrowdRequest req) => new PlayerDisableInputEffect(client, req).Execute() }, { "player_feather", (ControlClient client, CrowdRequest req) => new PlayerFeatherEffect(client, req).Execute() }, { "player_fast", (ControlClient client, CrowdRequest req) => new PlayerSpeedEffect(client, req).Execute() }, { "player_drain_energy", (ControlClient client, CrowdRequest req) => new PlayerDrainEnergyEffect(client, req).Execute() }, { "player_refill_energy", (ControlClient client, CrowdRequest req) => new PlayerRefillEnergyEffect(client, req).Execute() }, { "player_heal", (ControlClient client, CrowdRequest req) => new PlayerHealEffect(client, req).Execute() }, { "player_hurt", (ControlClient client, CrowdRequest req) => new PlayerHurtEffect(client, req).Execute() }, { "player_revive", (ControlClient client, CrowdRequest req) => new PlayerReviveEffect(client, req).Execute() }, { "praise_crowd_control", (ControlClient client, CrowdRequest req) => new PraiseCrowdControlEffect(client, req).Execute() }, { "player_teleport", (ControlClient client, CrowdRequest req) => new PlayerTeleportEffect(client, req).Execute() }, { "player_teleport_extraction", (ControlClient client, CrowdRequest req) => new PlayerTeleportToExtractionEffect(client, req).Execute() }, { "destroy_random_item", (ControlClient client, CrowdRequest req) => new DamageRandomValuableEffect(client, req).Execute() }, { "player_heal_random", (ControlClient client, CrowdRequest req) => new PlayerHealEffect(client, req).Execute() }, { "spawncollectablerandom_ItemCartMedium", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "increase_loot_goal", (ControlClient client, CrowdRequest req) => new UpdateHaulGoalEffect(client, req).Execute() }, { "decrease_loot_goal", (ControlClient client, CrowdRequest req) => new UpdateHaulGoalEffect(client, req).Execute() }, { "playerupgrade_energy", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_health", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_map", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_jump", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_grabrange", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_grabstrength", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_sprint", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_throw", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "playerupgrade_tumble", (ControlClient client, CrowdRequest req) => new UpgradePlayerEffect(client, req).Execute() }, { "killplayer", (ControlClient client, CrowdRequest req) => new PlayerKillEffect(client, req).Execute() }, { "spawnenemy", (ControlClient client, CrowdRequest req) => new SpawnEnemyEffect(client, req).Execute() }, { "spawncustom_Bread", (ControlClient client, CrowdRequest req) => new SpawnCustomItemEffect(client, req).Execute() }, { "spawncustom_Milk", (ControlClient client, CrowdRequest req) => new SpawnCustomItemEffect(client, req).Execute() }, { "spawncollectable_ItemCartMedium", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemCartSmall", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemDroneBattery", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemDroneFeather", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemDroneIndestructible", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemDroneTorque", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemDroneZeroGravity", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemExtractionTracker", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGrenadeDuctTaped", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGrenadeExplosive", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGrenadeHuman", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGrenadeShockwave", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGrenadeStun", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGunHandgun", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGunShotgun", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemGunTranq", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemHealthPackLarge", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemHealthPackMedium", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemHealthPackSmall", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMeleeBaseballBat", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMeleeFryingPan", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMeleeInflatableHammer", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMeleeSledgeHammer", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMeleeSword", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMineExplosive", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMineShockwave", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemMineStun", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemOrbZeroGravity", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemPowerCrystal", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemRubberDuck", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradeMapPlayerCount", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerEnergy", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerExtraJump", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerGrabRange", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerGrabStrength", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerGrabThrow", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerHealth", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerSprintSpeed", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemUpgradePlayerTumbleLaunch", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ItemValuableTracker", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableDiamond", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableEmeraldBracelet", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableGoblet", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableOcarina", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuablePocketWatch", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableUraniumMug", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticBonsai", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticHDD", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableChompBook", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableCrown", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableDoll", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableFrog", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableGemBox", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableGlobe", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableLovePotion", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableMoney", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableMusicBox", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableToyMonkey", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableUraniumPlate", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableVaseSmall", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArctic3DPrinter", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticLaptop", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticPropaneTank", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticSampleSixPack", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticSample", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableBottle", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableClown", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableComputer", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableFan", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableGramophone", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableMarbleTable", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableRadio", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableShipInBottle", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableTrophy", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableVase", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardGoblinHead", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardPowerCrystal", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardTimeGlass", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticBarrel", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticBigSample", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticCreatureLeg", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticFlamethrower", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticGuitar", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticSampleCooler", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableDiamondDisplay", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableIceSaw", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableScreamDoll", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableTelevision", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableVaseBig", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardCubeOfKnowledge", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardMasterPotion", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableAnimalCrate", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticIceBlock", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableDinosaur", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuablePiano", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardGriffinStatue", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticScienceStation", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableHarp", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuablePainting", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardDumgolfsStaff", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardSword", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableArcticServerRack", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableGoldenStatue", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableGrandfatherClock", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() }, { "spawncollectable_ValuableWizardBroom", (ControlClient client, CrowdRequest req) => new SpawnCollectableEffect(client, req).Execute() } }; } public static bool IsExcludedLevel(Level currentLevel) { return new HashSet<Level> { RunManager.instance.levelShop, RunManager.instance.levelLobby, RunManager.instance.levelArena, RunManager.instance.levelTutorial, RunManager.instance.levelLobbyMenu, RunManager.instance.levelMainMenu, RunManager.instance.levelRecording }.Contains(currentLevel); } public static (bool status, string? message) IsReady() { if (!Object.op_Implicit((Object)(object)RunManager.instance)) { return (false, "Game is not ready."); } if (currentLevel != ((object)RunManager.instance.levelCurrent).ToString() && !CrowdControlMod.modActivated) { RPCCommands.MessageHandler.SendMessageToHost("CC_CONNECT", 0, PhotonNetwork.LocalPlayer.ActorNumber, 0, new Dictionary<string, object> { { "version", "1.0.6.0" } }); } currentLevel = ((object)RunManager.instance.levelCurrent).ToString(); if (IsExcludedLevel(RunManager.instance.levelCurrent)) { return (false, "Not in supported level."); } if (!CrowdControlMod.modActivated) { return (false, "Version does not match host."); } TruckScreenText instance = TruckScreenText.instance; FieldInfo field = typeof(TruckScreenText).GetField("started", BindingFlags.Instance | BindingFlags.NonPublic); if (field == null) { return (false, null); } if (!(bool)field.GetValue(instance)) { return (false, ""); } if (!disableLogging) { CrowdControlMod.mls.LogInfo((object)"Success: All checks passed"); } return (true, ""); } public static void HideEffect(string code) { CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_NOTVISIBLE); crowdResponse.type = 1; crowdResponse.code = code; crowdResponse.Send(Socket); } public static void ShowEffect(string code) { CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_VISIBLE); crowdResponse.type = 1; crowdResponse.code = code; crowdResponse.Send(Socket); } public static void DisableEffect(string code) { CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_NOTSELECTABLE); crowdResponse.type = 1; crowdResponse.code = code; crowdResponse.Send(Socket); } public static void EnableEffect(string code) { CrowdResponse crowdResponse = new CrowdResponse(0, CrowdResponse.Status.STATUS_SELECTABLE); crowdResponse.type = 1; crowdResponse.code = code; crowdResponse.Send(Socket); } private void ClientLoop() { CrowdControlMod.mls.LogInfo((object)"Connected to Crowd Control"); Timer timer = new Timer(timeUpdate, null, 0, 200); try { while (Running) { try { if (Socket == null || !Socket.Connected) { break; } connected = true; CrowdRequest crowdRequest = CrowdRequest.Recieve(this, Socket); if (crowdRequest != null && !crowdRequest.IsKeepAlive()) { lock (Requests) { Requests.Enqueue(crowdRequest); } } continue; } catch (ObjectDisposedException) { break; } catch (SocketException) { break; } catch (ThreadAbortException) { Thread.ResetAbort(); break; } catch (Exception) { } } } catch (Exception arg) { CrowdControlMod.mls.LogInfo((object)$"Critical Error: {arg}"); } finally { CrowdControlMod.mls.LogInfo((object)"Disconnected from Crowd Control."); connected = false; try { if (Socket != null) { Socket.Dispose(); } timer.Dispose(); } catch (Exception) { } } } public void timeUpdate(object state) { inGame = true; if (!IsReady().status) { inGame = false; } if (!inGame) { TimedThread.addTime(200); paused = true; } else if (paused) { paused = false; TimedThread.unPause(); TimedThread.tickTime(200); } else { TimedThread.tickTime(200); } } public bool IsRunning() { return Running; } public void NetworkLoop() { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; while (Running) { CrowdControlMod.mls.LogInfo((object)"Attempting to connect to Crowd Control"); connected = false; try { Socket = new Socket(Endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, optionValue: true); if (Socket.BeginConnect(Endpoint, null, null).AsyncWaitHandle.WaitOne(10000, exitContext: true) && Socket.Connected) { ClientLoop(); } else { CrowdControlMod.mls.LogInfo((object)"Failed to connect to Crowd Control"); connected = false; } Socket.Close(); } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)ex.GetType().Name); CrowdControlMod.mls.LogInfo((object)"Failed to connect to Crowd Control"); connected = false; } Thread.Sleep(10000); } } public void RequestLoop() { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; while (Running) { try { CrowdRequest crowdRequest = null; lock (Requests) { if (Requests.Count == 0) { continue; } crowdRequest = Requests.Dequeue(); goto IL_0052; } IL_0052: string reqCode = crowdRequest.GetReqCode(); try { (bool status, string? message) tuple = IsReady(); bool item = tuple.status; string item2 = tuple.message; CrowdResponse crowdResponse = (item ? Delegate[reqCode](this, crowdRequest) : new CrowdResponse(crowdRequest.GetReqID(), (!(item2 == "")) ? CrowdResponse.Status.STATUS_FAILURE : CrowdResponse.Status.STATUS_RETRY, item2)); if (crowdResponse == null) { new CrowdResponse(crowdRequest.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Request error for '" + reqCode + "'").Send(Socket); } crowdResponse.Send(Socket); } catch (KeyNotFoundException) { new CrowdResponse(crowdRequest.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Request error for '" + reqCode + "'").Send(Socket); } } catch (Exception) { CrowdControlMod.mls.LogInfo((object)"Disconnected from Crowd Control."); connected = false; Socket.Close(); } } } public void Stop() { Running = false; } } public delegate CrowdResponse CrowdDelegate(ControlClient client, CrowdRequest req); public class CrowdDelegates { public static Random rnd = new Random(); public static readonly TimeSpan SERVER_TIMEOUT = TimeSpan.FromSeconds(5.0); public static void setProperty(object a, string prop, object val) { PropertyInfo property = a.GetType().GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null && property.CanWrite) { property.SetValue(a, val); } } public static object getProperty(object a, string prop) { return a.GetType().GetField(prop, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(a); } public static void setSubProperty(object a, string prop, string prop2, object val) { FieldInfo field = a.GetType().GetField(prop, BindingFlags.Instance | BindingFlags.NonPublic); field.GetType().GetField(prop, BindingFlags.Instance | BindingFlags.NonPublic).SetValue(field, val); } public static void callSubFunc(object a, string prop, string func, object val) { callSubFunc(a, prop, func, new object[1] { val }); } public static void callSubFunc(object a, string prop, string func, object[] vals) { FieldInfo field = a.GetType().GetField(prop, BindingFlags.Instance | BindingFlags.NonPublic); field.GetType().GetMethod(func, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Invoke(field, vals); } public static void callFunc(object a, string func, object val) { callFunc(a, func, new object[1] { val }); } public static void callFunc(object a, string func, object[] vals) { a.GetType().GetMethod(func, BindingFlags.Instance | BindingFlags.NonPublic).Invoke(a, vals); } public static object callAndReturnFunc(object a, string func, object val) { return callAndReturnFunc(a, func, new object[1] { val }); } public static object callAndReturnFunc(object a, string func, object[] vals) { return a.GetType().GetMethod(func, BindingFlags.Instance | BindingFlags.NonPublic).Invoke(a, vals); } } public class CrowdRequest { public enum Type { REQUEST_TEST = 0, REQUEST_START = 1, REQUEST_STOP = 2, REQUEST_KEEPALIVE = 255 } public class Target { public string service; public string id; public string name; public string avatar; } public class SourceDetails { public class Contribution { public string user_id; public string user_login; public string user_name; public string type; public int total; } public int total; public int progress; public int goal; public Contribution[] top_contributions; public Contribution last_contribution; public int level; } public static readonly int RECV_BUF = 4096; public static readonly int RECV_TIME = 5000000; public string code; public int id; public int duration; public string type; public string viewer; public Target[] targets; public SourceDetails sourceDetails; public static CrowdRequest Recieve(ControlClient client, Socket socket) { byte[] array = new byte[RECV_BUF]; string text = ""; int num = 0; do { if (!client.IsRunning()) { return null; } if (socket.Poll(RECV_TIME, SelectMode.SelectRead)) { num = socket.Receive(array); if (num < 0) { return null; } text += Encoding.ASCII.GetString(array); } else { CrowdResponse.KeepAlive(socket); } } while (num == 0 || (num == RECV_BUF && array[RECV_BUF - 1] != 0)); return JsonConvert.DeserializeObject<CrowdRequest>(text); } public string GetReqCode() { return code; } public int GetReqID() { return id; } public int GetReqDuration() { return duration; } public Type GetReqType() { string text = type; if (text == "1") { return Type.REQUEST_START; } if (text == "2") { return Type.REQUEST_STOP; } return Type.REQUEST_TEST; } public string GetReqViewer() { return viewer; } public bool IsKeepAlive() { if (id == 0) { return type == "255"; } return false; } } public class CrowdResponse { public enum Status { STATUS_SUCCESS = 0, STATUS_FAILURE = 1, STATUS_UNAVAIL = 2, STATUS_RETRY = 3, STATUS_START = 5, STATUS_PAUSE = 6, STATUS_RESUME = 7, STATUS_STOP = 8, STATUS_VISIBLE = 128, STATUS_NOTVISIBLE = 129, STATUS_SELECTABLE = 130, STATUS_NOTSELECTABLE = 131, STATUS_KEEPALIVE = 255 } public int id; public string message; public string code; public int status; public int type; public CrowdResponse(int id, Status status = Status.STATUS_SUCCESS, string message = "") { type = 0; code = ""; this.id = id; this.message = message; this.status = (int)status; } public static void KeepAlive(Socket socket) { new CrowdResponse(0, Status.STATUS_KEEPALIVE).Send(socket); } public void Send(Socket socket) { byte[] bytes = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject((object)this)); byte[] array = new byte[bytes.Length + 1]; Buffer.BlockCopy(bytes, 0, array, 0, bytes.Length); array[bytes.Length] = 0; socket.Send(array); } } public class RPCCommands { [HarmonyPatch(typeof(NetworkManager))] [HarmonyPatch("Start")] public class NetworkManagerPatch { public static void Postfix() { MessageHandler.Initialize(); } } public class MessageHandler : MonoBehaviourPunCallbacks, IPunObservable { public class NetworkMessage { public string type; public int id; public int targetActor; public int senderID; public Dictionary<string, object> payload; public NetworkMessage(string type, int id = 0, int senderID = 0, int targetActor = 0, Dictionary<string, object> payload = null) { this.type = type; this.payload = payload ?? new Dictionary<string, object>(); this.id = id; this.senderID = senderID; this.targetActor = targetActor; } } private class RequestMessage { public string type { get; set; } public Dictionary<string, object> payload { get; set; } public int id { get; set; } public int senderID { get; set; } public int targetActor { get; set; } public bool random { get; set; } } private class ResponseMessage { public string type { get; set; } = "response"; public int id { get; set; } public int senderID { get; set; } public int targetActor { get; set; } public string status { get; set; } public string message { get; set; } public string version { get; set; } public Dictionary<string, object> payload { get; set; } } [CompilerGenerated] private sealed class <SendDelayedResponse>d__15 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public int id; public int senderID; public bool success; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SendDelayedResponse>d__15(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.1f); <>1__state = 1; return true; case 1: <>1__state = -1; SendResponse(id, senderID, (!success) ? CrowdResponse.Status.STATUS_FAILURE : CrowdResponse.Status.STATUS_SUCCESS); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static MessageHandler instance; public static PhotonView networkView; private static ConcurrentQueue<NetworkMessage> messageQueue = new ConcurrentQueue<NetworkMessage>(); public static void Initialize() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0064: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)instance != (Object)null) { return; } CrowdControlMod.mls.LogInfo((object)"Initializing MessageHandler..."); GameObject val = new GameObject("MessageHandler"); instance = val.AddComponent<MessageHandler>(); networkView = val.AddComponent<PhotonView>(); if ((Object)(object)networkView != (Object)null) { networkView.ViewID = 6767; networkView.Synchronization = (ViewSynchronization)3; networkView.ObservedComponents = new List<Component> { (Component)(object)instance }; CrowdControlMod.mls.LogInfo((object)$"MessageHandler initialized with PhotonView {networkView.ViewID}"); Object.DontDestroyOnLoad((Object)(object)val); lock (networkLock) { _isNetworkReady = null; _isViewValid = null; return; } } CrowdControlMod.mls.LogError((object)"Failed to add PhotonView to MessageHandler"); CrowdControlMod.modActivated = false; } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Error in Initialize: " + ex.Message)); CrowdControlMod.mls.LogError((object)("Stack trace: " + ex.StackTrace)); } } private void OnLevelWasLoaded(int level) { lock (networkLock) { _isNetworkReady = null; _isViewValid = null; } if ((Object)(object)networkView == (Object)null || !networkView.ViewID.Equals(6767)) { Initialize(); } } private void Update() { if (messageQueue.TryDequeue(out var result)) { SendQueuedMessage(result); } } private static void SendQueuedMessage(NetworkMessage message) { if (IsNetworkReady()) { try { string text = JsonConvert.SerializeObject((object)message); networkView.RPC("OnNetworkMessageRPC", (RpcTarget)0, new object[1] { text }); } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Failed to send message: " + ex.Message)); CrowdControlMod.mls.LogError((object)("Stack trace: " + ex.StackTrace)); } } } public static void SendMessageToHost(string type, int id = 0, int senderID = 0, int targetActor = 0, Dictionary<string, object> payload = null) { try { if (!IsNetworkReady()) { return; } NetworkMessage item = new NetworkMessage(type, id, senderID, targetActor, payload); if (id > 0) { lock (pendingRequestIDs) { pendingRequestIDs.Add(id.ToString()); } } messageQueue.Enqueue(item); } catch (Exception arg) { CrowdControlMod.mls.LogInfo((object)$"Failed to queue message: {arg}"); } } public override void OnEnable() { ((MonoBehaviourPunCallbacks)this).OnEnable(); } public override void OnJoinedRoom() { ((MonoBehaviourPunCallbacks)this).OnJoinedRoom(); lock (networkLock) { _isNetworkReady = null; _isViewValid = null; } CrowdControlMod.modActivated = false; if (PhotonNetwork.IsMasterClient) { CrowdControlMod.modActivated = true; } } [PunRPC] public void OnNetworkMessageRPC(string jsonMessage) { try { NetworkMessage networkMessage = JsonConvert.DeserializeObject<NetworkMessage>(jsonMessage); if (networkMessage == null) { CrowdControlMod.mls.LogError((object)"Failed to deserialize message"); } else if (networkMessage.type == "response") { ProcessMessage(jsonMessage); } else if (networkMessage.type == "CC_CONNECT") { ModVersionCheck(networkMessage); } else if (PhotonNetwork.IsMasterClient) { switch (networkMessage.type) { case "spawn_collectable": SpawnCollectableEffect.Trigger(networkMessage); break; case "spawn_custom": SpawnCustomItemEffect.Trigger(networkMessage); break; case "player_heal": PlayerHealEffect.Trigger(networkMessage); break; case "player_hurt": PlayerHurtEffect.Trigger(networkMessage); break; case "player_revive": PlayerReviveEffect.Trigger(networkMessage); break; case "destroy_random_item": DamageRandomValuableEffect.Trigger(networkMessage); break; case "update_haul": UpdateHaulGoalEffect.Trigger(networkMessage); break; case "upgrade_player": UpgradePlayerEffect.Trigger(networkMessage); break; case "spawn_enemy": SpawnEnemyEffect.Trigger(networkMessage); break; default: CrowdControlMod.mls.LogWarning((object)("Unknown message type: " + networkMessage.type)); break; } } } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Failed to process message: " + ex.Message)); CrowdControlMod.mls.LogError((object)("Stack trace: " + ex.StackTrace)); } } public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { } public static async Task ModVersionCheck(NetworkMessage message) { string version = Convert.ToString(message.payload["version"]); PlayerAvatar obj = await HelperUtils.FindPlayerAvatarByNumber(message.senderID); FieldInfo field = typeof(PlayerAvatar).GetField("steamID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); string key = ((field != null) ? ((field.GetValue(obj) as string) ?? "0") : "0"); CrowdControlMod.PlayerVersions[key] = version; if (PhotonNetwork.IsMasterClient) { SendResponse(0, message.senderID, CrowdResponse.Status.STATUS_SUCCESS, "", new Dictionary<string, object> { { "version", "1.0.6.0" } }); } } public static void SendResponse(int id, int senderID, CrowdResponse.Status status, string message = "", Dictionary<string, object> payload = null) { try { int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber; Dictionary<string, object> dictionary = new Dictionary<string, object> { { "status", status.ToString() }, { "message", message.ToString() }, { "cmd", "response" } }; if (payload != null && payload.ContainsKey("version") && payload["version"] != null) { dictionary["version"] = payload["version"].ToString(); } string text = JsonConvert.SerializeObject((object)new NetworkMessage("response", id, senderID, actorNumber, dictionary)); networkView.RPC("OnNetworkMessageRPC", (RpcTarget)0, new object[1] { text }); } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)("SEND RESPONSE CRASHED " + ex)); } } [IteratorStateMachine(typeof(<SendDelayedResponse>d__15))] private IEnumerator SendDelayedResponse(int id, int senderID, bool success) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SendDelayedResponse>d__15(0) { id = id, senderID = senderID, success = success }; } public static bool IsHost() { return PhotonNetwork.IsMasterClient; } public static void SendRequest(string type, int id, int senderID, int targetActor, Dictionary<string, object> payload) { try { string text = JsonConvert.SerializeObject((object)new RequestMessage { type = type, id = id, senderID = senderID, targetActor = targetActor, payload = payload }, jsonSettings); if ((Object)(object)networkView != (Object)null) { pendingRequestIDs.Add(id.ToString()); networkView.RPC("OnNetworkMessageRPC", (RpcTarget)2, new object[1] { text }); } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)("SEND REQUEST " + ex)); } } public static void SendResponse(int id, int senderID, CrowdResponse.Status status, Dictionary<string, object> payload) { try { string text = JsonConvert.SerializeObject((object)new ResponseMessage { id = id, senderID = senderID, status = status.ToString(), payload = payload }, jsonSettings); if ((Object)(object)networkView != (Object)null) { networkView.RPC("OnNetworkMessageRPC", (RpcTarget)0, new object[1] { text }); } } catch (Exception ex) { CrowdControlMod.mls.LogInfo((object)("SEND RESPONSE2 " + ex)); } } public static void AddResponder(int msgID, Action<CrowdResponse.Status> responder) { rspResponders[msgID] = responder; } public static void RemoveResponder(int msgID) { rspResponders.TryRemove(msgID, out var _); } public static void ProcessMessage(string message) { try { if (string.IsNullOrEmpty(message)) { return; } JObject val = JObject.Parse(message); if (val == null) { CrowdControlMod.mls.LogWarning((object)("Received malformed message: " + message)); return; } if (((object)val["type"])?.ToString() == "response") { ResponseMessage responseMessage = new ResponseMessage(); JToken obj = val["id"]; responseMessage.id = ((obj != null) ? Extensions.Value<int>((IEnumerable<JToken>)obj) : 0); JToken obj2 = val["senderID"]; responseMessage.senderID = ((obj2 != null) ? Extensions.Value<int>((IEnumerable<JToken>)obj2) : 0); JToken obj3 = val["targetActor"]; responseMessage.targetActor = ((obj3 != null) ? Extensions.Value<int>((IEnumerable<JToken>)obj3) : 0); JToken obj4 = val["payload"]; responseMessage.payload = ((obj4 != null) ? obj4.ToObject<Dictionary<string, object>>() : null) ?? new Dictionary<string, object>(); JToken obj5 = val["payload"]; responseMessage.status = ((obj5 == null) ? null : ((object)obj5[(object)"status"])?.ToString()); JToken obj6 = val["payload"]; responseMessage.version = ((obj6 == null) ? null : ((object)obj6[(object)"version"])?.ToString()); ProcessResponse(responseMessage); return; } try { JsonConvert.DeserializeObject<RequestMessage>(message, jsonSettings); } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Error processing message2: " + ex.Message)); } } catch (Exception ex2) { CrowdControlMod.mls.LogError((object)("Error processing message: " + ex2.Message)); CrowdControlMod.mls.LogError((object)("Stack trace: " + ex2.StackTrace)); } } private static void ProcessResponse(ResponseMessage message) { if (message.senderID != PhotonNetwork.LocalPlayer.ActorNumber) { return; } if (message.id == 0 && message.version == "1.0.6.0") { CrowdControlMod.modActivated = true; } if (!rspResponders.TryGetValue(message.id, out var value) || !pendingRequestIDs.Remove(message.id.ToString()) || !Enum.TryParse<CrowdResponse.Status>(message.status, out var result)) { return; } try { value(result); } catch (Exception arg) { CrowdControlMod.mls.LogInfo((object)$"Error processing response for message ID {message.id}: {arg}"); } } } internal static HashSet<string> pendingRequestIDs = new HashSet<string>(); private static readonly ConcurrentDictionary<int, Action<CrowdResponse.Status>> rspResponders = new ConcurrentDictionary<int, Action<CrowdResponse.Status>>(); private static readonly JsonSerializerSettings jsonSettings = new JsonSerializerSettings { NullValueHandling = (NullValueHandling)1, ReferenceLoopHandling = (ReferenceLoopHandling)1 }; private static readonly object networkLock = new object(); private static bool? _isNetworkReady = null; private static bool? _isViewValid = null; private static bool IsViewValid() { lock (networkLock) { if (_isViewValid.HasValue) { return _isViewValid.Value; } PhotonView networkView = MessageHandler.networkView; if ((Object)(object)networkView == (Object)null) { _isViewValid = false; CrowdControlMod.mls.LogWarning((object)"NetworkView is null"); return false; } _isViewValid = networkView.ViewID != 0; return _isViewValid.Value; } } private static bool IsNetworkReady() { lock (networkLock) { if (_isNetworkReady.HasValue) { return _isNetworkReady.Value; } bool flag = IsViewValid(); _isNetworkReady = PhotonNetwork.IsConnected && PhotonNetwork.InRoom && flag && MessageHandler.networkView.ObservedComponents != null; return _isNetworkReady.Value; } } } public class TimedResponse : CrowdResponse { public int timeRemaining; public TimedResponse(int id, int dur, Status status = Status.STATUS_SUCCESS, string message = "") : base(id, status, message) { timeRemaining = dur; } } } namespace BepinControl.Effects { public class SpawnCustomItemEffect : BaseEffect { public SpawnCustomItemEffect(ControlClient client, CrowdRequest request) : base(client, request) { } public static async Task Trigger(RPCCommands.MessageHandler.NetworkMessage message) { _ = 1; try { int targetActor = message.targetActor; string item = Convert.ToString(message.payload["item"]); PlayerAvatar playerAvatar = await HelperUtils.FindPlayerAvatarByNumber(targetActor); if ((Object)(object)playerAvatar == (Object)null) { RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE, "Unable to find player."); return; } TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously); CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) try { SpawnItem(item, ((Component)playerAvatar).transform.position, ((Component)playerAvatar).transform.forward, ((Component)playerAvatar).transform.rotation); tcs.TrySetResult(result: true); } catch (Exception arg2) { CrowdControlMod.mls.LogInfo((object)$"Failed to spawn item: {arg2}"); tcs.TrySetResult(result: false); } }); bool flag = await tcs.Task; RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, (!flag) ? CrowdResponse.Status.STATUS_FAILURE : CrowdResponse.Status.STATUS_SUCCESS); } catch (Exception arg) { CrowdControlMod.mls.LogInfo((object)$"Failed to process spawn data: {arg}"); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); } } public override CrowdResponse Execute() { CrowdResponse.Status status = CrowdResponse.Status.STATUS_SUCCESS; string message = ""; string item = ((request.code.Split(new char[1] { '_' }).Length > 1) ? request.code.Split(new char[1] { '_' })[1] : string.Empty); if (string.IsNullOrEmpty(item)) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Invalid item code"); } request.code.ToLowerInvariant().Contains("random_"); int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber; PlayerAvatar result = HelperUtils.FindPlayerAvatarByNumber(actorNumber).Result; if ((Object)(object)result == (Object)null) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Cannot Spawn Items when player is dead!"); } PhotonView component = ((Component)result).GetComponent<PhotonView>(); if ((Object)(object)component == (Object)null) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Cannot Spawn Items when player is dead!"); } int actorNumber2 = component.Owner.ActorNumber; try { TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>(); RPCCommands.MessageHandler.AddResponder(request.GetReqID(), delegate(CrowdResponse.Status s) { tcs.SetResult(s); }); RPCCommands.MessageHandler.SendMessageToHost("spawn_custom", request.GetReqID(), actorNumber, actorNumber2, new Dictionary<string, object> { { "item", item } }); status = (tcs.Task.Wait(CrowdDelegates.SERVER_TIMEOUT) ? tcs.Task.Result : CrowdResponse.Status.STATUS_RETRY); RPCCommands.MessageHandler.RemoveResponder(request.GetReqID()); } catch (Exception) { status = CrowdResponse.Status.STATUS_FAILURE; message = "Failed to spawn item"; } if (status == CrowdResponse.Status.STATUS_SUCCESS) { CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) MissionUI instance = Singleton<MissionUI>.Instance; if (instance != null) { instance.MissionText("CC Spawned " + item, Color.green, Color.green, 1f); } }); } return CreateResponse(status, message); } public static bool SpawnItem(string item, Vector3 playerPosition, Vector3 playerForward, Quaternion rotation) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) bool success = false; CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) try { float num = 1f; RaycastHit val = default(RaycastHit); if (Physics.Raycast(playerPosition, playerForward, ref val, num + 0.5f)) { num = -1f; } Vector3 val2 = playerPosition + playerForward * num; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val2 + Vector3.up * 2f, Vector3.down, ref val3, 10f)) { val2 = ((RaycastHit)(ref val3)).point + Vector3.up * 0.1f; } Quaternion identity = Quaternion.identity; GameObject val4 = ((item == "Bread") ? PhotonNetwork.InstantiateRoomObject("BreadGroup", val2, identity, (byte)0, (object[])null) : PhotonNetwork.InstantiateRoomObject("MilkGroup", val2, identity, (byte)0, (object[])null)); success = (Object)(object)val4 != (Object)null; } catch (Exception arg) { CrowdControlMod.mls.LogInfo((object)$"Failed to spawn item: {arg}"); } }); return success; } } public class SpawnEnemyEffect : BaseEffect { public SpawnEnemyEffect(ControlClient client, CrowdRequest request) : base(client, request) { } public override CrowdResponse Execute() { request.code.ToLowerInvariant().Contains("random_"); int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber; PlayerAvatar result = HelperUtils.FindPlayerAvatarByNumber(actorNumber).Result; if ((Object)(object)result == (Object)null) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Cannot Spawn Items when player is dead!"); } int actorNumber2 = ((Component)result).GetComponent<PhotonView>().Owner.ActorNumber; try { TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>(); RPCCommands.MessageHandler.AddResponder(request.id, delegate(CrowdResponse.Status s) { tcs.SetResult(s); }); RPCCommands.MessageHandler.SendMessageToHost("spawn_enemy", request.id, actorNumber, actorNumber2, new Dictionary<string, object> { { "enemy", "robe" } }); if (tcs.Task.Wait(CrowdDelegates.SERVER_TIMEOUT)) { CrowdResponse.Status result2 = tcs.Task.Result; RPCCommands.MessageHandler.RemoveResponder(request.id); return CreateResponse(result2); } RPCCommands.MessageHandler.RemoveResponder(request.id); return CreateResponse(CrowdResponse.Status.STATUS_RETRY); } catch (Exception) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Failed to spawn enemy."); } } public static async Task Trigger(RPCCommands.MessageHandler.NetworkMessage message) { try { if (message == null) { CrowdControlMod.mls.LogError((object)"SpawnEnemyEffect: Message is null"); return; } PlayerAvatar playerAvatar = await HelperUtils.FindPlayerAvatarByNumber(message.targetActor); if ((Object)(object)playerAvatar == (Object)null) { CrowdControlMod.mls.LogError((object)"SpawnEnemyEffect: Player not found"); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); return; } if (!PhotonNetwork.IsConnected || !PhotonNetwork.InRoom) { CrowdControlMod.mls.LogError((object)"SpawnEnemyEffect: Not connected to network or room"); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); return; } CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0050: 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) try { Vector3 val = ((Component)playerAvatar).transform.position + ((Component)playerAvatar).transform.forward * 2f; Quaternion val2 = Quaternion.LookRotation(-((Component)playerAvatar).transform.forward); GameObject val3 = PhotonNetwork.InstantiateRoomObject("enemies/Enemy - Robe", val, val2, (byte)0, (object[])null); if ((Object)(object)val3 == (Object)null) { CrowdControlMod.mls.LogError((object)"SpawnEnemyEffect: Failed to instantiate enemy"); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); } else { EnemyParent component = val3.GetComponent<EnemyParent>(); EnemyRobe component2 = val3.GetComponent<EnemyRobe>(); PhotonView component3 = val3.GetComponent<PhotonView>(); if ((Object)(object)component == (Object)null || (Object)(object)component2 == (Object)null || (Object)(object)component3 == (Object)null) { CrowdControlMod.mls.LogError((object)"SpawnEnemyEffect: Enemy missing required components"); if ((Object)(object)val3 != (Object)null) { PhotonNetwork.Destroy(val3); } RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); } else { if ((Object)(object)EnemyDirector.instance != (Object)null) { EnemyDirector.instance.enemiesSpawned.Add(component); } component.SpawnedTimerReset(); component3.RPC("UpdateStateRPC", (RpcTarget)0, new object[1] { (object)(State)2 }); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_SUCCESS); } } } catch (Exception ex2) { CrowdControlMod.mls.LogError((object)("SpawnEnemyEffect action error: " + ex2.Message + "\n" + ex2.StackTrace)); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); } }); } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("SpawnEnemyEffect error: " + ex.Message + "\n" + ex.StackTrace)); RPCCommands.MessageHandler.SendResponse(message?.id ?? 0, message?.senderID ?? 0, CrowdResponse.Status.STATUS_FAILURE); } } } public class PlayerKillEffect : BaseEffect { public PlayerKillEffect(ControlClient client, CrowdRequest request) : base(client, request) { } public override CrowdResponse Execute() { request.code.ToLowerInvariant().Contains("random_"); bool flag = false; Player localPlayer = PhotonNetwork.LocalPlayer; int num = ((localPlayer != null) ? localPlayer.ActorNumber : (-1)); if (num == -1) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_FAILURE); } if (TimedThread.isRunning(TimedType.KILL)) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Cannot Kill Player when they are already dead."); } if (TimedThread.isRunning(TimedType.INVINCIBLE)) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_FAILURE, "Cannot Kill Player while they are invincible."); } if (TimedThread.isRunning(TimedType.PRAISE)) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_RETRY); } try { PlayerHealth result = HelperUtils.FindPlayerHealthByAvatarNumber(num).Result; if ((Object)(object)result == (Object)null) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_FAILURE); } if (!((Behaviour)result).isActiveAndEnabled) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_FAILURE); } if ((Object)(object)((Component)result).GetComponent<PhotonView>() == (Object)null) { return new CrowdResponse(request.GetReqID(), CrowdResponse.Status.STATUS_FAILURE); } if ((Object)(object)ChatManager.instance != (Object)null) { ChatManager.instance.PossessSelfDestruction(); flag = true; } } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Error executing KillPlayer: " + ex.Message)); flag = false; } new Thread(new TimedThread(request.GetReqID(), TimedType.KILL, 4000).Run).Start(); return new TimedResponse(request.GetReqID(), 4000, (!flag) ? CrowdResponse.Status.STATUS_FAILURE : CrowdResponse.Status.STATUS_SUCCESS); } } public class UpgradePlayerEffect : BaseEffect { public UpgradePlayerEffect(ControlClient client, CrowdRequest request) : base(client, request) { } public static async Task Trigger(RPCCommands.MessageHandler.NetworkMessage message) { _ = 1; try { string upgradeType = Convert.ToString(message.payload["upgrade"]); PlayerAvatar val = await HelperUtils.FindPlayerAvatarByNumber(message.targetActor); if ((Object)(object)val == (Object)null) { RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); return; } FieldInfo field = typeof(PlayerAvatar).GetField("steamID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field == null || field.GetValue(val) == null) { RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); return; } string steamID = field.GetValue(val).ToString(); TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously); CrowdControlMod.ActionQueue.Enqueue(delegate { try { PunManager punManager = Singleton<PunManager>.Instance; if (new Dictionary<string, Action> { { "energy", delegate { punManager.UpgradePlayerEnergy(steamID); } }, { "health", delegate { punManager.UpgradePlayerHealth(steamID); } }, { "map", delegate { punManager.UpgradeMapPlayerCount(steamID); } }, { "jump", delegate { punManager.UpgradePlayerExtraJump(steamID); } }, { "grabrange", delegate { punManager.UpgradePlayerGrabRange(steamID); } }, { "grabstrength", delegate { punManager.UpgradePlayerGrabStrength(steamID); } }, { "sprint", delegate { punManager.UpgradePlayerSprintSpeed(steamID); } }, { "throw", delegate { punManager.UpgradePlayerThrowStrength(steamID); } }, { "tumble", delegate { punManager.UpgradePlayerTumbleLaunch(steamID); } } }.TryGetValue(upgradeType.ToLower(), out var value)) { value(); tcs.TrySetResult(result: true); } else { CrowdControlMod.mls.LogError((object)("Unknown upgrade type: " + upgradeType)); tcs.TrySetResult(result: false); } } catch (Exception ex2) { CrowdControlMod.mls.LogError((object)("Error applying upgrade: " + ex2.Message)); tcs.TrySetResult(result: false); } }); bool flag = await tcs.Task; RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, (!flag) ? CrowdResponse.Status.STATUS_FAILURE : CrowdResponse.Status.STATUS_SUCCESS); } catch (Exception ex) { CrowdControlMod.mls.LogError((object)("Player upgrade error: " + ex.Message)); RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE); } } public override CrowdResponse Execute() { request.code.ToLowerInvariant().Contains("random_"); int actorNumber = PhotonNetwork.LocalPlayer.ActorNumber; int targetActor = actorNumber; string text = ((request.code.Split(new char[1] { '_' }).Length > 1) ? request.code.Split(new char[1] { '_' })[1] : string.Empty); if (string.IsNullOrEmpty(text)) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Invalid upgrade type"); } if (!new Dictionary<string, string> { { "energy", "Energy" }, { "health", "Health" }, { "map", "Map Power" }, { "jump", "Jumps" }, { "grabrange", "Pick-up Range" }, { "grabstrength", "Strength" }, { "sprint", "Sprint Speed" }, { "throw", "Throw Power" }, { "tumble", "Tumble Distance" } }.TryGetValue(text, out var upgrade)) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Invalid upgrade type"); } try { TaskCompletionSource<CrowdResponse.Status> tcs = new TaskCompletionSource<CrowdResponse.Status>(); RPCCommands.MessageHandler.AddResponder(request.id, delegate(CrowdResponse.Status s) { tcs.SetResult(s); }); RPCCommands.MessageHandler.SendMessageToHost("upgrade_player", request.id, actorNumber, targetActor, new Dictionary<string, object> { { "upgrade", text } }); if (tcs.Task.Wait(CrowdDelegates.SERVER_TIMEOUT)) { CrowdResponse.Status result = tcs.Task.Result; RPCCommands.MessageHandler.RemoveResponder(request.id); if (result == CrowdResponse.Status.STATUS_SUCCESS) { CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) MissionUI instance = Singleton<MissionUI>.Instance; if (instance != null) { instance.MissionText("CC Upgraded " + upgrade, Color.green, Color.green, 1f); } }); } return CreateResponse(result); } RPCCommands.MessageHandler.RemoveResponder(request.id); return CreateResponse(CrowdResponse.Status.STATUS_RETRY); } catch (Exception) { return CreateResponse(CrowdResponse.Status.STATUS_FAILURE, "Unable to update haul goal."); } } } public abstract class BaseEffect { protected readonly ControlClient client; protected readonly CrowdRequest request; protected BaseEffect(ControlClient client, CrowdRequest request) { this.client = client; this.request = request; } public abstract CrowdResponse Execute(); protected CrowdResponse CreateResponse(CrowdResponse.Status status, string message = "") { return new CrowdResponse(request.GetReqID(), status, message); } } public class DamageRandomValuableEffect : BaseEffect { public DamageRandomValuableEffect(ControlClient client, CrowdRequest request) : base(client, request) { } public static async Task Trigger(RPCCommands.MessageHandler.NetworkMessage message) { _ = 1; try { int targetActor = message.targetActor; TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously); string responseMessage = ""; PlayerHealth playerHealth = await HelperUtils.FindPlayerHealthByAvatarNumber(targetActor); if ((Object)(object)playerHealth == (Object)null) { RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE, "Unable to find valuable to damage."); return; } PhotonView component = ((Component)playerHealth).GetComponent<PhotonView>(); if ((Object)(object)component == (Object)null || component.Owner.ActorNumber != targetActor) { RPCCommands.MessageHandler.SendResponse(message.id, message.senderID, CrowdResponse.Status.STATUS_FAILURE, "Unable to find valuable to damage."); return; } CrowdControlMod.ActionQueue.Enqueue(delegate { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) try { Collider[] array = Physics.OverlapSphere(((Component)playerHealth).transform.position, 5f); HashSet<GameObject> hashSet = new HashSet<GameObject>(); Collider[] array2 = array; foreach (Collider val in array2) { if (((Component)val).CompareTag("Phys Grab Object")) { Transform root = ((Component)val).transform.root; if (((Object)root).name.Contains("Valuable")) { hashSet.Add(((Component)root).gameObject); } } } if (hashSet.Count > 0) { List<GameObject> list = hashSet.ToList(); int index = Random.Range(0, list.Count); GameObject val2 = list[index]; PhysGrabObjectImpactDetector component2 = val2.GetComponent<PhysGrabObjectImpactDetector>(); if ((Object)(object)component2 != (Object)null) { component2.BreakHeavy(val2.tra
BepInEx/plugins/HypeTrain.dll
Decompiled 9 hours agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] public class HypeTrainTester : MonoBehaviour { [SerializeField] private string[] m_names = new string[0]; [SerializeField] private HypeTrain m_hypeTrainPrototype; [SerializeField] private Transform m_startTransform; [SerializeField] private Transform m_endTransform; [SerializeField] private Transform m_playerTransform; private HypeTrain m_createdHypeTrain; private void Start() { ((MonoBehaviour)this).StartCoroutine(StartTest()); } private IEnumerator StartTest() { yield return (object)new WaitForSeconds(0.5f); m_createdHypeTrain = Object.Instantiate<HypeTrain>(m_hypeTrainPrototype); m_createdHypeTrain.OnFinishedEvent.AddListener(new UnityAction(ResetTest)); HypeTrainBoxData[] array = new HypeTrainBoxData[m_names.Length]; for (int i = 0; i < m_names.Length; i++) { array[i] = new HypeTrainBoxData { name = m_names[i], box_color = Color.HSVToRGB(Random.value, 1f, 1f), box_color_rate = ((((uint)i & (true ? 1u : 0u)) != 0) ? ((Random.Range(0, 1) == 0) ? (-0.2f) : 1f) : 0f), bit_amount = ((i % 4 == 0) ? Random.Range(1, 1000000) : 0), name_color = Color.HSVToRGB(Random.value, 1f, 1f) }; } m_createdHypeTrain.StartHypeTrain(m_startTransform.position, m_endTransform.position, array, m_playerTransform); } private void ResetTest() { if ((Object)null != (Object)(object)m_createdHypeTrain) { Object.Destroy((Object)(object)((Component)m_createdHypeTrain).gameObject); m_createdHypeTrain = null; } ((MonoBehaviour)this).StartCoroutine(StartTest()); } } public class HypeTrainBit : MonoBehaviour { [SerializeField] private Animator m_animator; [SerializeField] private int m_bitValue; [SerializeField] private Rigidbody m_rigidbody; [SerializeField] private Collider m_collider; [SerializeField] private float m_lifeTime = 20f; private IEnumerator m_deathCoroutine; private static readonly int s_deathTrigger = Animator.StringToHash("Death"); public int BitValue => m_bitValue; public Rigidbody Rigidbody => m_rigidbody; public Collider Collider => m_collider; public float LifeTime { get { return m_lifeTime; } set { m_lifeTime = value; } } private void Awake() { m_animator.StopPlayback(); } public void StartDeathCountdown() { if (m_deathCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(m_deathCoroutine); m_deathCoroutine = null; } m_deathCoroutine = Death(); ((MonoBehaviour)this).StartCoroutine(m_deathCoroutine); } private IEnumerator Death() { yield return (object)new WaitForSeconds(m_lifeTime); m_animator.Play(s_deathTrigger, 0, 0f); } private void Kill() { Object.Destroy((Object)(object)((Component)this).gameObject); } } public class HypeTrain : MonoBehaviour { [SerializeField] private Rigidbody m_rigidBody; [SerializeField] private HypeTrainCarAudio m_carWheelsAudio; [SerializeField] private HypeTrainLocomotive m_locomotive; [SerializeField] private HypeTrainBox m_boxPrototype; [SerializeField] private HypeTrainBitBox m_bitboxPrototype; [SerializeField] private float m_distancePerSecond = 4f; [SerializeField] private HypeTrainBit[] m_bitPrototypes = new HypeTrainBit[0]; [SerializeField] private bool m_keepAliveOnFinish; private UnityEvent m_onFinishedEvent = new UnityEvent(); private List<HypeTrainBox> m_activeBoxes = new List<HypeTrainBox>(); private Queue<HypeTrainBox> m_availableBoxes = new Queue<HypeTrainBox>(); private Queue<HypeTrainBitBox> m_availableBitBoxes = new Queue<HypeTrainBitBox>(); private Vector3 m_startPosition = Vector3.zero; private Vector3 m_stopPosition = Vector3.zero; private Vector3 m_direction = Vector3.zero; private float m_trackDistance; private Transform m_playerRoot; private int m_nextBoxIndexToSpawn; private float m_nextBoxOffset; private HypeTrainBoxData[] m_boxData; public UnityEvent OnFinishedEvent => m_onFinishedEvent; private void Awake() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) m_bitPrototypes = m_bitPrototypes.OrderByDescending((HypeTrainBit bit) => bit.BitValue).ToArray(); ((Component)m_locomotive).transform.localPosition = -m_locomotive.FrontLoc.localPosition; ((UnityEvent<HypeTrainCar, HypeTrainCar.Visibility>)m_locomotive.OnVisibilityChangedEvent).AddListener((UnityAction<HypeTrainCar, HypeTrainCar.Visibility>)OnLocomotiveFinished); StopHypeTrain(); ((Component)m_boxPrototype).gameObject.SetActive(false); ((Component)m_bitboxPrototype).gameObject.SetActive(false); } private void FixedUpdate() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) float num = Time.deltaTime * m_distancePerSecond; m_rigidBody.MovePosition(m_rigidBody.position + m_direction * num); m_locomotive.UpdateCar(Time.deltaTime, num); foreach (HypeTrainBox activeBox in m_activeBoxes) { activeBox.UpdateCar(Time.deltaTime, num); } m_carWheelsAudio.UpdateAudio(Time.deltaTime, num, m_locomotive, m_activeBoxes, m_playerRoot); } public void StartHypeTrain(Vector3 startWorldPosition, Vector3 stopWorldPosition, HypeTrainBoxData[] boxData, Transform playerRoot = null, HypeTrainOptions options = null) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) StopHypeTrain(); m_startPosition = startWorldPosition; m_stopPosition = stopWorldPosition; Vector3 val = m_stopPosition - m_startPosition; m_trackDistance = ((Vector3)(ref val)).magnitude; m_direction = ((Vector3)(ref val)).normalized; m_boxData = boxData; m_playerRoot = playerRoot; m_nextBoxIndexToSpawn = 0; m_nextBoxOffset = 0f - m_locomotive.CalculateCarLength(); m_distancePerSecond = ((options != null && options.distance_per_second.HasValue) ? options.distance_per_second.Value : m_distancePerSecond); m_keepAliveOnFinish = ((options != null && options.keep_alive_on_finish.HasValue) ? options.keep_alive_on_finish.Value : m_keepAliveOnFinish); if (options != null && options.train_layer.HasValue) { SetLayerRecursive(((Component)this).gameObject, options.train_layer.Value); HypeTrainBit[] bitPrototypes = m_bitPrototypes; foreach (HypeTrainBit hypeTrainBit in bitPrototypes) { SetLayerRecursive(((Component)hypeTrainBit).gameObject, options.train_layer.Value); } } if (options != null && options.volume.HasValue) { SetVolume(options.volume.Value); } Transform transform = ((Component)this).transform; Vector3 position = (m_rigidBody.position = startWorldPosition); transform.position = position; Transform transform2 = ((Component)this).transform; Quaternion rotation = (m_rigidBody.rotation = Quaternion.LookRotation(m_direction)); transform2.rotation = rotation; int num = Mathf.Min(Mathf.CeilToInt((m_trackDistance + m_boxPrototype.CalculateCarLength()) / m_boxPrototype.CalculateCarLength()), boxData.Length); for (int j = 0; j < num; j++) { HypeTrainBox hypeTrainBox = Object.Instantiate<HypeTrainBox>(m_boxPrototype, ((Component)m_boxPrototype).transform.parent, false); ((UnityEvent<HypeTrainCar, HypeTrainCar.Visibility>)hypeTrainBox.OnVisibilityChangedEvent).AddListener((UnityAction<HypeTrainCar, HypeTrainCar.Visibility>)OnBoxFinished); m_availableBoxes.Enqueue(hypeTrainBox); } num = Mathf.Min(Mathf.CeilToInt((m_trackDistance + m_bitboxPrototype.CalculateCarLength()) / m_bitboxPrototype.CalculateCarLength()), boxData.Length); for (int k = 0; k < num; k++) { HypeTrainBitBox hypeTrainBitBox = Object.Instantiate<HypeTrainBitBox>(m_bitboxPrototype, ((Component)m_bitboxPrototype).transform.parent, false); hypeTrainBitBox.Init(m_bitPrototypes, playerRoot, options?.player_collider_radius, options?.max_bits_per_car, options?.bit_lifetime_in_seconds); ((UnityEvent<HypeTrainCar, HypeTrainCar.Visibility>)hypeTrainBitBox.OnVisibilityChangedEvent).AddListener((UnityAction<HypeTrainCar, HypeTrainCar.Visibility>)OnBoxFinished); m_availableBitBoxes.Enqueue(hypeTrainBitBox); } m_carWheelsAudio.StartPersistentSounds(); ((Component)m_locomotive).gameObject.SetActive(true); m_locomotive.Engage(0f, m_trackDistance + m_locomotive.CalculateCarLength(), 0); FlushAvailableBoxes(); } public void StopHypeTrain() { m_carWheelsAudio.StopPersistentSounds(); foreach (HypeTrainBox availableBox in m_availableBoxes) { Object.Destroy((Object)(object)((Component)availableBox).gameObject); } m_availableBoxes.Clear(); foreach (HypeTrainBitBox availableBitBox in m_availableBitBoxes) { Object.Destroy((Object)(object)((Component)availableBitBox).gameObject); } m_availableBitBoxes.Clear(); foreach (HypeTrainBox activeBox in m_activeBoxes) { Object.Destroy((Object)(object)((Component)activeBox).gameObject); } m_activeBoxes.Clear(); ((Component)m_locomotive).gameObject.SetActive(false); } public void SetDistancePerSecond(float distancePerSecond) { m_distancePerSecond = distancePerSecond; } public void SetKeepAliveOnFinish(bool keepAlive) { m_keepAliveOnFinish = keepAlive; } public void SetVolume(float volume) { m_locomotive.SetBaseVolume(volume); m_carWheelsAudio.SetBaseVolume(volume); } private void OnLocomotiveFinished(HypeTrainCar car, HypeTrainCar.Visibility visibility) { if (visibility == HypeTrainCar.Visibility.Hidden) { FlushAvailableBoxes(); } } private void OnBoxFinished(HypeTrainCar car, HypeTrainCar.Visibility visibility) { if (visibility == HypeTrainCar.Visibility.Hidden) { m_activeBoxes.Remove((HypeTrainBox)car); if (((object)car).GetType() == typeof(HypeTrainBitBox)) { HypeTrainBitBox item = (HypeTrainBitBox)car; m_availableBitBoxes.Enqueue(item); } else { m_availableBoxes.Enqueue((HypeTrainBox)car); } FlushAvailableBoxes(); } } private void FlushAvailableBoxes() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) while (m_nextBoxIndexToSpawn < m_boxData.Length && m_availableBoxes.Count != 0) { HypeTrainBoxData hypeTrainBoxData = m_boxData[m_nextBoxIndexToSpawn]; HypeTrainBox hypeTrainBox = null; hypeTrainBox = ((hypeTrainBoxData.bit_amount <= 0) ? m_availableBoxes.Dequeue() : m_availableBitBoxes.Dequeue()); ((Component)hypeTrainBox).transform.localPosition = Vector3.forward * m_nextBoxOffset - hypeTrainBox.FrontLoc.localPosition; float num = hypeTrainBox.CalculateCarLength(); float num2 = Mathf.Abs(m_nextBoxOffset); Vector3 val = ((Component)this).transform.position - m_startPosition; float num3 = num2 - ((Vector3)(ref val)).magnitude; hypeTrainBox.Engage(hypeTrainBoxData, num3, num3 + m_trackDistance + num, m_nextBoxIndexToSpawn + 1); m_activeBoxes.Add(hypeTrainBox); m_nextBoxIndexToSpawn++; m_nextBoxOffset -= num; } bool flag = false; flag |= ((Component)m_locomotive).gameObject.activeSelf; foreach (HypeTrainBox activeBox in m_activeBoxes) { flag |= ((Component)activeBox).gameObject.activeSelf; } if (!flag) { OnFinishedEvent.Invoke(); StopHypeTrain(); if (!m_keepAliveOnFinish) { Object.Destroy((Object)(object)((Component)this).gameObject); } } } private void SetLayerRecursive(GameObject go, int layer) { go.layer = layer; for (int i = 0; i < go.transform.childCount; i++) { SetLayerRecursive(((Component)go.transform.GetChild(i)).gameObject, layer); } } } public class HypeTrainBitBox : HypeTrainBox { [SerializeField] private BoxCollider m_bitSpawnZone; [SerializeField] private int m_maxBitBreaks = 100; [SerializeField] private TextMeshPro[] m_bitsTexts = (TextMeshPro[])(object)new TextMeshPro[0]; [SerializeField] private HypeTrainBitBoxPlayerCollider m_playerCollider; private List<HypeTrainBit> m_createdBits = new List<HypeTrainBit>(); private HypeTrainBit[] m_bitPrototypes; private int? m_maxBitsToSpawn; private float? m_bitLifetimeInSeconds; public void Init(HypeTrainBit[] bitPrototypes, Transform playerRoot, float? playerColliderRadius = null, int? maxBitsToSpawn = null, float? bitLifetimeInSeconds = null) { m_bitPrototypes = bitPrototypes; m_maxBitsToSpawn = maxBitsToSpawn; m_bitLifetimeInSeconds = bitLifetimeInSeconds; m_playerCollider.Init(this, playerRoot, playerColliderRadius); } public override void Engage(HypeTrainBoxData data, float distanceToStart, float distanceToStop, int index) { base.Engage(data, distanceToStart, distanceToStop, index); TextMeshPro[] bitsTexts = m_bitsTexts; for (int i = 0; i < bitsTexts.Length; i++) { ((TMP_Text)bitsTexts[i]).SetText($"BITS: {data.bit_amount}", true); } SpawnBits(data.bit_amount); } public void SpawnBits(int amount) { //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) RelinquishCreatedBits(); if (m_bitPrototypes == null) { return; } int num = (m_maxBitsToSpawn.HasValue ? m_maxBitsToSpawn.Value : amount); int num2 = m_maxBitBreaks; Vector3 localPosition = default(Vector3); while (amount > 0 && num > 0) { int num3 = amount; if (0 < num2) { num3 = Random.Range(1, amount + 1); } amount -= num3; while (0 < num3 && num > 0) { HypeTrainBit[] bitPrototypes = m_bitPrototypes; foreach (HypeTrainBit hypeTrainBit in bitPrototypes) { if (hypeTrainBit.BitValue <= num3) { num3 -= hypeTrainBit.BitValue; num--; ((Vector3)(ref localPosition))..ctor(Random.Range((0f - m_bitSpawnZone.size.x) * 0.5f, m_bitSpawnZone.size.x * 0.5f), 0f, Random.Range((0f - m_bitSpawnZone.size.z) * 0.5f, m_bitSpawnZone.size.z * 0.5f)); HypeTrainBit hypeTrainBit2 = Object.Instantiate<HypeTrainBit>(hypeTrainBit, ((Component)m_bitSpawnZone).transform, false); ((Component)hypeTrainBit2).transform.localPosition = localPosition; hypeTrainBit2.Rigidbody.isKinematic = true; hypeTrainBit2.Collider.enabled = true; m_createdBits.Add(hypeTrainBit2); } } } num2--; } } protected override void OnShowFinished() { base.OnShowFinished(); if (m_createdBits.Count == 0) { SpawnBits(100); } } protected override void OnHideFinished() { base.OnHideFinished(); foreach (HypeTrainBit createdBit in m_createdBits) { Object.Destroy((Object)(object)((Component)createdBit).gameObject); } m_createdBits.Clear(); } public void RelinquishCreatedBits() { foreach (HypeTrainBit createdBit in m_createdBits) { createdBit.Rigidbody.isKinematic = false; createdBit.Collider.enabled = true; ((Component)createdBit).transform.SetParent((Transform)null, true); if (m_bitLifetimeInSeconds.HasValue) { createdBit.LifeTime = m_bitLifetimeInSeconds.Value; } createdBit.StartDeathCountdown(); } m_createdBits.Clear(); } } public class HypeTrainBitBoxPlayerCollider : MonoBehaviour { [SerializeField] private SphereCollider m_collider; private HypeTrainBitBox m_owner; private Transform m_playerRoot; public void Init(HypeTrainBitBox owner, Transform playerRoot, float? playerColliderRadius = null) { m_owner = owner; m_playerRoot = playerRoot; if (playerColliderRadius.HasValue) { m_collider.radius = playerColliderRadius.Value; } } private void OnCollisionEnter(Collision other) { if ((Object)null != (Object)(object)m_owner && (Object)(object)other.transform == (Object)(object)m_playerRoot) { m_owner.RelinquishCreatedBits(); } } private void OnTriggerEnter(Collider other) { if ((Object)null != (Object)(object)m_owner && (Object)(object)((Component)other).transform == (Object)(object)m_playerRoot) { m_owner.RelinquishCreatedBits(); } } } public class HypeTrainBox : HypeTrainCar { [SerializeField] private TextMeshPro[] m_nameTexts; private Material m_carMaterial; private Color m_carColor; private float m_carColorRate; private static int s_trimColorMaterialPropertyID = Shader.PropertyToID("_TrimColor"); public virtual void Engage(HypeTrainBoxData data, float distanceToStart, float distanceToStop, int index) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) Engage(distanceToStart, distanceToStop, index); SetName(data.name, data.name_color); SetBoxColor(data.box_color, data.box_color_rate); } public override void UpdateCar(float dt, float delta) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) base.UpdateCar(dt, delta); if (m_carColorRate != 0f) { float num2 = default(float); float num3 = default(float); float num = default(float); Color.RGBToHSV(m_carColor, ref num, ref num2, ref num3); for (num += m_carColorRate * delta; num > 1f; num -= 1f) { } for (; num < 0f; num += 1f) { } SetBoxColor(Color.HSVToRGB(num, num2, num3), m_carColorRate); } } public void SetName(string name, Color nameColor) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) TextMeshPro[] nameTexts = m_nameTexts; foreach (TextMeshPro obj in nameTexts) { ((TMP_Text)obj).SetText(name, true); ((Graphic)obj).color = nameColor; } } public void SetBoxColor(Color color, float carColorRate) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) if ((Object)null == (Object)(object)m_carMaterial) { m_carMaterial = new Material(((Renderer)base.Meshes[0]).material); MeshRenderer[] meshes = base.Meshes; for (int i = 0; i < meshes.Length; i++) { ((Renderer)meshes[i]).material = m_carMaterial; } } m_carColor = color; if ((Object)null != (Object)(object)m_carMaterial) { m_carMaterial.SetColor(s_trimColorMaterialPropertyID, color); } m_carColorRate = carColorRate; } } [Serializable] public class HypeTrainBoxData { public string name = ""; public Color name_color = new Color(1f, 1f, 1f); public Color box_color = new Color(0.3803921f, 0.7960785f, 0.545098f); public float box_color_rate; public int bit_amount; } public class HypeTrainCar : MonoBehaviour { public enum Visibility { Visible, Hidden } public class VisibilityChangedEvent : UnityEvent<HypeTrainCar, Visibility> { } [SerializeField] private Animator m_animatorRoot; [SerializeField] private Animator m_animatorCar; [SerializeField] private Transform m_frontLoc; [SerializeField] private Transform m_backLoc; [SerializeField] private MeshRenderer[] m_meshes = (MeshRenderer[])(object)new MeshRenderer[0]; private VisibilityChangedEvent m_onVisibilityChangedEvent = new VisibilityChangedEvent(); private float m_distanceToStart; private float m_distanceToStop; private static readonly int s_animShowTag = Animator.StringToHash("Show"); private static readonly int s_animHideTag = Animator.StringToHash("Hide"); private static readonly int s_animWobbleTag = Animator.StringToHash("Wobble"); protected MeshRenderer[] Meshes => m_meshes; public Transform FrontLoc => m_frontLoc; public Transform BackLoc => m_backLoc; public VisibilityChangedEvent OnVisibilityChangedEvent => m_onVisibilityChangedEvent; public void Engage(float distanceToStart, float distanceToStop, int index) { m_distanceToStart = distanceToStart; m_distanceToStop = distanceToStop; if (m_distanceToStart <= 0f) { Show(); float num = 5f; m_animatorCar.Play(s_animWobbleTag, 0, (float)index % (num + 1f) / num); } if (m_distanceToStop <= 0f) { Hide(); } } public virtual void UpdateCar(float dt, float delta) { if (m_distanceToStart > 0f) { m_distanceToStart -= delta; if (m_distanceToStart <= 0f) { m_distanceToStart = 0f; Show(); } } if (m_distanceToStop > 0f) { m_distanceToStop -= delta; if (m_distanceToStop <= 0f) { m_distanceToStop = 0f; Hide(); } } } public virtual void Show() { ((Component)this).gameObject.SetActive(true); m_animatorRoot.Play(s_animShowTag, 0, 0f); } public virtual void Hide() { m_animatorRoot.Play(s_animHideTag, 0, 0f); } public float CalculateCarLength() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) Vector3 val = m_frontLoc.localPosition - m_backLoc.localPosition; return ((Vector3)(ref val)).magnitude; } protected virtual void OnShowFinished() { ((UnityEvent<HypeTrainCar, Visibility>)m_onVisibilityChangedEvent).Invoke(this, Visibility.Visible); } protected virtual void OnHideFinished() { ((Component)this).gameObject.SetActive(false); ((UnityEvent<HypeTrainCar, Visibility>)m_onVisibilityChangedEvent).Invoke(this, Visibility.Hidden); } } public class HypeTrainCarAudio : MonoBehaviour { [SerializeField] private AudioSource m_carWheelsAudio; [SerializeField] private AudioSource m_carWheelsClankAudio; [SerializeField] private AudioClip[] m_carWheelsClankAudioClips = (AudioClip[])(object)new AudioClip[0]; [SerializeField] private int m_maxSimultaneousClanks = 3; [SerializeField] private float m_clankMinInterval = 0.1f; [SerializeField] private float m_clankMaxInterval = 0.5f; private float m_nextClankTimer; private float[] m_clankTimers; private float m_wheelVolume = 1f; private float m_baseVolume = 1f; private void Awake() { m_clankTimers = new float[m_maxSimultaneousClanks]; } public void StartPersistentSounds() { m_carWheelsAudio.Play(); } public void StopPersistentSounds() { m_carWheelsAudio.Stop(); } public void UpdateAudio(float dt, float delta, HypeTrainLocomotive locomotive, List<HypeTrainBox> activeBoxes, Transform playerRoot) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)locomotive).transform.position; float x = ((Component)locomotive).transform.lossyScale.x; if ((Object)null != (Object)(object)playerRoot) { float num = Vector3.SqrMagnitude(playerRoot.position - position); foreach (HypeTrainBox activeBox in activeBoxes) { float num2 = Vector3.SqrMagnitude(playerRoot.position - ((Component)activeBox).transform.position); if (num2 < num) { num = num2; position = ((Component)activeBox).transform.position; x = ((Component)activeBox).transform.lossyScale.x; } } } position.y += 0.75f; ((Component)this).transform.position = Vector3.MoveTowards(((Component)m_carWheelsAudio).transform.position, position, delta * 4f); m_wheelVolume = Mathf.MoveTowards(m_wheelVolume, x, dt * 2f); AudioSource carWheelsAudio = m_carWheelsAudio; float volume = (m_carWheelsClankAudio.volume = m_baseVolume * m_wheelVolume); carWheelsAudio.volume = volume; if (m_nextClankTimer > 0f) { m_nextClankTimer -= dt; if (m_nextClankTimer <= 0f) { for (int i = 0; i < m_maxSimultaneousClanks; i++) { if (m_clankTimers[i] <= 0f) { AudioClip val = m_carWheelsClankAudioClips[Random.Range(0, m_carWheelsClankAudioClips.Length)]; m_clankTimers[i] = val.length; m_carWheelsClankAudio.PlayOneShot(val); break; } } } } for (int j = 0; j < m_maxSimultaneousClanks; j++) { m_clankTimers[j] -= dt; if (m_clankTimers[j] <= 0f) { while (m_nextClankTimer <= 0f) { m_nextClankTimer += Random.Range(m_clankMinInterval, m_clankMaxInterval); } } } } public void SetBaseVolume(float volume) { m_baseVolume = volume; AudioSource carWheelsAudio = m_carWheelsAudio; float volume2 = (m_carWheelsClankAudio.volume = m_baseVolume * m_wheelVolume); carWheelsAudio.volume = volume2; } } public class HypeTrainLocomotive : HypeTrainCar { [SerializeField] private AudioSource m_audioSource; private float m_baseVolume = 1f; public override void Show() { base.Show(); m_audioSource.Play(); } protected override void OnHideFinished() { base.OnHideFinished(); m_audioSource.Stop(); } public override void UpdateCar(float dt, float delta) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) base.UpdateCar(dt, delta); m_audioSource.volume = m_baseVolume * Mathf.Clamp01(((Component)this).transform.lossyScale.x); } public void SetBaseVolume(float volume) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) m_baseVolume = volume; m_audioSource.volume = m_baseVolume * Mathf.Clamp01(((Component)this).transform.lossyScale.x); } } [Serializable] public class HypeTrainOptions { public int? train_layer; public float? distance_per_second; public float? player_collider_radius; public int? max_bits_per_car; public float? bit_lifetime_in_seconds; public float? volume; public bool? keep_alive_on_finish; }
BepInEx/plugins/MyBox.dll
Decompiled 9 hours ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using System.Text.RegularExpressions; using JetBrains.Annotations; using MyBox; using MyBox.Internal; using UnityEngine; using UnityEngine.AI; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] public class FPSCounter : MonoBehaviour { private enum Anchor { LeftTop, LeftBottom, RightTop, RightBottom } public bool EditorOnly; [Separator] [SerializeField] private float _updateInterval = 1f; [SerializeField] private int _targetFrameRate = 30; [Separator] [SerializeField] private Anchor _anchor; [SerializeField] private int _xOffset; [SerializeField] private int _yOffset; private float _idleTime = 2f; private float _elapsed; private int _frames; private int _quantity; private float _fps; private float _averageFps; private Color _goodColor; private Color _okColor; private Color _badColor; private float _okFps; private float _badFps; private Rect _rect1; private Rect _rect2; private void Awake() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) if (!EditorOnly || Application.isEditor) { _goodColor = new Color(0.4f, 0.6f, 0.4f); _okColor = new Color(0.8f, 0.8f, 0.2f, 0.6f); _badColor = new Color(0.8f, 0.6f, 0.6f); int num = _targetFrameRate / 100; int num2 = num * 10; int num3 = num * 40; _okFps = _targetFrameRate - num2; _badFps = _targetFrameRate - num3; int num4 = 0; int num5 = 0; int num6 = 40; int num7 = 90; if (_anchor == Anchor.LeftBottom || _anchor == Anchor.RightBottom) { num5 = Screen.height - num6; } if (_anchor == Anchor.RightTop || _anchor == Anchor.RightBottom) { num4 = Screen.width - num7; } num4 += _xOffset; num5 += _yOffset; int num8 = num5 + 18; _rect1 = new Rect((float)num4, (float)num5, (float)num7, (float)num6); _rect2 = new Rect((float)num4, (float)num8, (float)num7, (float)num6); _elapsed = _updateInterval; } } private void Update() { if (EditorOnly && !Application.isEditor) { return; } if (_idleTime > 0f) { _idleTime -= Time.deltaTime; return; } _elapsed += Time.deltaTime; _frames++; if (_elapsed >= _updateInterval) { _fps = (float)_frames / _elapsed; _elapsed = 0f; _frames = 0; } _quantity++; _averageFps += (_fps - _averageFps) / (float)_quantity; } private void OnGUI() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) if (!EditorOnly || Application.isEditor) { Color color = GUI.color; Color color2 = _goodColor; if (_fps <= _okFps || _averageFps <= _okFps) { color2 = _okColor; } if (_fps <= _badFps || _averageFps <= _badFps) { color2 = _badColor; } GUI.color = color2; GUI.Label(_rect1, "FPS: " + (int)_fps); GUI.color = color; } } } [CompilerGenerated] [EditorBrowsable(EditorBrowsableState.Never)] [GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)] internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1 { private struct MonoScriptData { public byte[] FilePathsData; public byte[] TypesData; public int TotalTypes; public int TotalFiles; public bool IsEditorOnly; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static MonoScriptData Get() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[8296] { 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 87, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 65, 117, 116, 111, 80, 114, 111, 112, 101, 114, 116, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 87, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 66, 117, 116, 116, 111, 110, 77, 101, 116, 104, 111, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 67, 104, 97, 114, 97, 99, 116, 101, 114, 115, 82, 97, 110, 103, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 91, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 67, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 70, 105, 101, 108, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 93, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 67, 111, 110, 115, 116, 97, 110, 116, 115, 83, 101, 108, 101, 99, 116, 105, 111, 110, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 68, 101, 102, 105, 110, 101, 100, 86, 97, 108, 117, 101, 115, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 91, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 68, 105, 115, 112, 108, 97, 121, 73, 110, 115, 112, 101, 99, 116, 111, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 82, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 70, 111, 108, 100, 111, 117, 116, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 94, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 73, 110, 105, 116, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 70, 105, 101, 108, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 80, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 76, 97, 121, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 83, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 77, 97, 120, 86, 97, 108, 117, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 77, 105, 110, 77, 97, 120, 82, 97, 110, 103, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 83, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 77, 105, 110, 86, 97, 108, 117, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 89, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 77, 117, 115, 116, 66, 101, 65, 115, 115, 105, 103, 110, 101, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 79, 118, 101, 114, 114, 105, 100, 101, 76, 97, 98, 101, 108, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 92, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 80, 111, 115, 105, 116, 105, 118, 101, 86, 97, 108, 117, 101, 79, 110, 108, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 82, 97, 110, 103, 101, 86, 101, 99, 116, 111, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 83, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 82, 101, 97, 100, 79, 110, 108, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 82, 101, 103, 101, 120, 83, 116, 114, 105, 110, 103, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 87, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 82, 101, 113, 117, 105, 114, 101, 76, 97, 121, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 82, 101, 113, 117, 105, 114, 101, 84, 97, 103, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 80, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 83, 99, 101, 110, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 89, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 83, 101, 97, 114, 99, 104, 97, 98, 108, 101, 69, 110, 117, 109, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 84, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 83, 101, 112, 97, 114, 97, 116, 111, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 83, 112, 114, 105, 116, 101, 76, 97, 121, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 84, 97, 103, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 65, 108, 103, 111, 114, 105, 116, 104, 109, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 67, 111, 108, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 83, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 67, 111, 109, 109, 111, 110, 67, 111, 110, 115, 116, 97, 110, 116, 115, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 67, 111, 114, 111, 117, 116, 105, 110, 101, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 68, 101, 98, 117, 103, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 82, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 68, 101, 108, 97, 121, 101, 100, 65, 99, 116, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 71, 105, 122, 109, 111, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 73, 110, 112, 117, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 76, 97, 121, 101, 114, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 72, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 77, 97, 116, 104, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 78, 97, 118, 77, 101, 115, 104, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 79, 98, 115, 111, 108, 101, 116, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 80, 104, 121, 115, 105, 99, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 80, 104, 121, 115, 105, 99, 115, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 82, 101, 103, 101, 120, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 83, 116, 114, 105, 110, 103, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 84, 101, 120, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 70, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 85, 73, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 85, 110, 105, 116, 121, 69, 118, 101, 110, 116, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 77, 121, 86, 101, 99, 116, 111, 114, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 89, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 83, 104, 97, 107, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 80, 114, 101, 112, 97, 114, 101, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 102, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 73, 109, 97, 103, 101, 83, 116, 114, 105, 110, 103, 67, 111, 110, 118, 101, 114, 116, 101, 114, 92, 73, 109, 97, 103, 101, 83, 116, 114, 105, 110, 103, 67, 111, 110, 118, 101, 114, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 67, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 77, 121, 83, 99, 101, 110, 101, 66, 117, 110, 100, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 69, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 84, 105, 109, 101, 84, 101, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 85, 110, 100, 111, 110, 101, 92, 71, 76, 68, 114, 97, 119, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 76, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 85, 110, 100, 111, 110, 101, 92, 77, 121, 76, 111, 103, 103, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 111, 111, 108, 115, 92, 87, 97, 114, 110, 105, 110, 103, 115, 80, 111, 111, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 65, 99, 116, 105, 118, 101, 83, 116, 97, 116, 101, 79, 110, 83, 116, 97, 114, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 84, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 65, 110, 105, 109, 97, 116, 105, 111, 110, 83, 116, 97, 116, 101, 82, 101, 102, 101, 114, 101, 110, 99, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 76, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 65, 115, 115, 101, 116, 70, 111, 108, 100, 101, 114, 80, 97, 116, 104, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 70, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 65, 115, 115, 101, 116, 80, 97, 116, 104, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 70, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 66, 105, 108, 108, 98, 111, 97, 114, 100, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 87, 114, 97, 112, 112, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 67, 111, 108, 108, 105, 100, 101, 114, 71, 105, 122, 109, 111, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 67, 111, 108, 108, 105, 100, 101, 114, 84, 111, 77, 101, 115, 104, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 80, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 67, 111, 109, 109, 101, 110, 116, 97, 114, 121, 67, 111, 109, 112, 111, 110, 101, 110, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 67, 111, 114, 111, 117, 116, 105, 110, 101, 71, 114, 111, 117, 112, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 71, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 70, 80, 83, 67, 111, 117, 110, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 71, 85, 73, 68, 92, 71, 117, 105, 100, 67, 111, 109, 112, 111, 110, 101, 110, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 77, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 71, 85, 73, 68, 92, 71, 117, 105, 100, 77, 97, 110, 97, 103, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 71, 85, 73, 68, 92, 71, 117, 105, 100, 82, 101, 102, 101, 114, 101, 110, 99, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 67, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 77, 105, 110, 77, 97, 120, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 69, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 77, 121, 67, 117, 114, 115, 111, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 73, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 77, 121, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 46, 99, 115, 0, 0, 0, 8, 0, 0, 0, 69, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 79, 112, 116, 105, 111, 110, 97, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 79, 112, 116, 105, 111, 110, 97, 108, 77, 105, 110, 77, 97, 120, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 76, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 66, 111, 111, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 77, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 70, 108, 111, 97, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 73, 110, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 83, 116, 114, 105, 110, 103, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 76, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 84, 121, 112, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 50, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 82, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 50, 73, 110, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 51, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 82, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 51, 73, 110, 116, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 72, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 83, 99, 101, 110, 101, 82, 101, 102, 101, 114, 101, 110, 99, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 70, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 83, 105, 110, 103, 108, 101, 116, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 74, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 69, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 85, 73, 70, 111, 108, 108, 111, 119, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 85, 73, 73, 109, 97, 103, 101, 66, 97, 115, 101, 100, 66, 117, 116, 116, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 85, 73, 82, 101, 108, 97, 116, 105, 118, 101, 80, 111, 115, 105, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 69, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 100, 111, 109, 121, 98, 101, 115, 116, 46, 109, 121, 98, 111, 120, 64, 101, 54, 48, 102, 52, 55, 55, 101, 51, 52, 92, 84, 121, 112, 101, 115, 92, 85, 73, 83, 105, 122, 101, 66, 121, 46, 99, 115 }; result.TypesData = new byte[3451] { 0, 0, 0, 0, 28, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 65, 116, 116, 114, 105, 98, 117, 116, 101, 66, 97, 115, 101, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 124, 65, 117, 116, 111, 80, 114, 111, 112, 101, 114, 116, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 124, 66, 117, 116, 116, 111, 110, 77, 101, 116, 104, 111, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 30, 77, 121, 66, 111, 120, 124, 67, 104, 97, 114, 97, 99, 116, 101, 114, 115, 82, 97, 110, 103, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 31, 77, 121, 66, 111, 120, 124, 67, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 70, 105, 101, 108, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 33, 77, 121, 66, 111, 120, 124, 67, 111, 110, 115, 116, 97, 110, 116, 115, 83, 101, 108, 101, 99, 116, 105, 111, 110, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 28, 77, 121, 66, 111, 120, 124, 68, 101, 102, 105, 110, 101, 100, 86, 97, 108, 117, 101, 115, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 31, 77, 121, 66, 111, 120, 124, 68, 105, 115, 112, 108, 97, 121, 73, 110, 115, 112, 101, 99, 116, 111, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 22, 77, 121, 66, 111, 120, 124, 70, 111, 108, 100, 111, 117, 116, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 34, 77, 121, 66, 111, 120, 124, 73, 110, 105, 116, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 70, 105, 101, 108, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 76, 97, 121, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 77, 97, 120, 86, 97, 108, 117, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 77, 105, 110, 77, 97, 120, 82, 97, 110, 103, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 17, 77, 121, 66, 111, 120, 124, 82, 97, 110, 103, 101, 100, 70, 108, 111, 97, 116, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 82, 97, 110, 103, 101, 100, 73, 110, 116, 0, 0, 0, 0, 22, 77, 121, 66, 111, 120, 124, 82, 97, 110, 103, 101, 100, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 77, 105, 110, 86, 97, 108, 117, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 124, 77, 117, 115, 116, 66, 101, 65, 115, 115, 105, 103, 110, 101, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 28, 77, 121, 66, 111, 120, 124, 79, 118, 101, 114, 114, 105, 100, 101, 76, 97, 98, 101, 108, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 32, 77, 121, 66, 111, 120, 124, 80, 111, 115, 105, 116, 105, 118, 101, 86, 97, 108, 117, 101, 79, 110, 108, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 82, 97, 110, 103, 101, 86, 101, 99, 116, 111, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 82, 101, 97, 100, 79, 110, 108, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 82, 101, 103, 101, 120, 83, 116, 114, 105, 110, 103, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 124, 82, 101, 113, 117, 105, 114, 101, 76, 97, 121, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 25, 77, 121, 66, 111, 120, 124, 82, 101, 113, 117, 105, 114, 101, 84, 97, 103, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 83, 99, 101, 110, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 124, 83, 101, 97, 114, 99, 104, 97, 98, 108, 101, 69, 110, 117, 109, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 83, 101, 112, 97, 114, 97, 116, 111, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 83, 112, 114, 105, 116, 101, 76, 97, 121, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 84, 97, 103, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 77, 121, 65, 108, 103, 111, 114, 105, 116, 104, 109, 115, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 77, 121, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 115, 0, 0, 0, 0, 13, 77, 121, 66, 111, 120, 124, 77, 121, 67, 111, 108, 111, 114, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 77, 121, 67, 111, 109, 109, 111, 110, 67, 111, 110, 115, 116, 97, 110, 116, 115, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 77, 121, 67, 111, 114, 111, 117, 116, 105, 110, 101, 115, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 67, 111, 114, 111, 117, 116, 105, 110, 101, 79, 119, 110, 101, 114, 0, 0, 0, 0, 13, 77, 121, 66, 111, 120, 124, 77, 121, 68, 101, 98, 117, 103, 0, 0, 0, 0, 22, 77, 121, 66, 111, 120, 124, 77, 121, 68, 101, 108, 97, 121, 101, 100, 65, 99, 116, 105, 111, 110, 115, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 77, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 39, 77, 121, 66, 111, 120, 46, 77, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 124, 67, 111, 109, 112, 111, 110, 101, 110, 116, 79, 102, 73, 110, 116, 101, 114, 102, 97, 99, 101, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 77, 121, 71, 105, 122, 109, 111, 115, 0, 0, 0, 0, 13, 77, 121, 66, 111, 120, 124, 77, 121, 73, 110, 112, 117, 116, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 77, 121, 76, 97, 121, 101, 114, 115, 0, 0, 0, 0, 12, 77, 121, 66, 111, 120, 124, 77, 121, 77, 97, 116, 104, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 77, 121, 78, 97, 118, 77, 101, 115, 104, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 77, 121, 79, 98, 115, 111, 108, 101, 116, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 77, 121, 80, 104, 121, 115, 105, 99, 115, 0, 0, 0, 0, 25, 77, 121, 66, 111, 120, 124, 77, 121, 80, 104, 121, 115, 105, 99, 115, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 77, 121, 82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 0, 0, 0, 0, 13, 77, 121, 66, 111, 120, 124, 77, 121, 82, 101, 103, 101, 120, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 77, 121, 83, 116, 114, 105, 110, 103, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 77, 121, 84, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 10, 77, 121, 66, 111, 120, 124, 77, 121, 85, 73, 0, 0, 0, 0, 28, 77, 121, 66, 111, 120, 124, 77, 121, 85, 110, 105, 116, 121, 69, 118, 101, 110, 116, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 77, 121, 86, 101, 99, 116, 111, 114, 115, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 124, 84, 114, 97, 110, 115, 102, 111, 114, 109, 83, 104, 97, 107, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 73, 80, 114, 101, 112, 97, 114, 101, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 73, 109, 97, 103, 101, 83, 116, 114, 105, 110, 103, 67, 111, 110, 118, 101, 114, 116, 101, 114, 0, 0, 0, 0, 30, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 67, 111, 110, 100, 105, 116, 105, 111, 110, 97, 108, 68, 97, 116, 97, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 77, 121, 83, 99, 101, 110, 101, 66, 117, 110, 100, 108, 101, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 99, 101, 110, 101, 66, 117, 110, 100, 108, 101, 0, 0, 0, 0, 21, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 66, 117, 110, 100, 108, 101, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 84, 105, 109, 101, 84, 101, 115, 116, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 46, 84, 105, 109, 101, 84, 101, 115, 116, 124, 84, 105, 109, 101, 84, 101, 115, 116, 68, 97, 116, 97, 0, 0, 0, 0, 21, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 71, 76, 68, 114, 97, 119, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 77, 121, 76, 111, 103, 103, 101, 114, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 87, 97, 114, 110, 105, 110, 103, 115, 80, 111, 111, 108, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 65, 99, 116, 105, 118, 101, 83, 116, 97, 116, 101, 79, 110, 83, 116, 97, 114, 116, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 124, 65, 110, 105, 109, 97, 116, 105, 111, 110, 83, 116, 97, 116, 101, 82, 101, 102, 101, 114, 101, 110, 99, 101, 0, 0, 0, 0, 38, 77, 121, 66, 111, 120, 124, 65, 110, 105, 109, 97, 116, 105, 111, 110, 83, 116, 97, 116, 101, 82, 101, 102, 101, 114, 101, 110, 99, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 0, 0, 0, 0, 21, 77, 121, 66, 111, 120, 124, 65, 115, 115, 101, 116, 70, 111, 108, 100, 101, 114, 80, 97, 116, 104, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 65, 115, 115, 101, 116, 80, 97, 116, 104, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 66, 105, 108, 108, 98, 111, 97, 114, 100, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 87, 114, 97, 112, 112, 101, 114, 0, 0, 0, 0, 36, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 87, 114, 97, 112, 112, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 67, 111, 108, 108, 105, 100, 101, 114, 71, 105, 122, 109, 111, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 67, 111, 108, 108, 105, 100, 101, 114, 84, 111, 77, 101, 115, 104, 0, 0, 0, 0, 33, 77, 121, 66, 111, 120, 46, 67, 111, 108, 108, 105, 100, 101, 114, 84, 111, 77, 101, 115, 104, 124, 84, 114, 105, 97, 110, 103, 117, 108, 97, 116, 111, 114, 0, 0, 0, 0, 34, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 67, 111, 109, 109, 101, 110, 116, 97, 114, 121, 67, 111, 109, 112, 111, 110, 101, 110, 116, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 67, 111, 114, 111, 117, 116, 105, 110, 101, 71, 114, 111, 117, 112, 0, 0, 0, 0, 11, 124, 70, 80, 83, 67, 111, 117, 110, 116, 101, 114, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 71, 117, 105, 100, 67, 111, 109, 112, 111, 110, 101, 110, 116, 0, 0, 0, 0, 17, 77, 121, 66, 111, 120, 124, 71, 117, 105, 100, 77, 97, 110, 97, 103, 101, 114, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 46, 71, 117, 105, 100, 77, 97, 110, 97, 103, 101, 114, 124, 71, 117, 105, 100, 73, 110, 102, 111, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 71, 117, 105, 100, 82, 101, 102, 101, 114, 101, 110, 99, 101, 0, 0, 0, 0, 17, 77, 121, 66, 111, 120, 124, 77, 105, 110, 77, 97, 120, 70, 108, 111, 97, 116, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 77, 105, 110, 77, 97, 120, 73, 110, 116, 0, 0, 0, 0, 22, 77, 121, 66, 111, 120, 124, 77, 105, 110, 77, 97, 120, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 77, 121, 67, 117, 114, 115, 111, 114, 0, 0, 0, 0, 18, 77, 121, 66, 111, 120, 124, 77, 121, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 0, 0, 0, 0, 30, 77, 121, 66, 111, 120, 46, 77, 121, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 124, 80, 114, 105, 109, 101, 72, 101, 108, 112, 101, 114, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 46, 77, 121, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 124, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 70, 108, 111, 97, 116, 0, 0, 0, 0, 17, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 73, 110, 116, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 83, 116, 114, 105, 110, 103, 0, 0, 0, 0, 21, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 75, 101, 121, 67, 111, 100, 101, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 71, 97, 109, 101, 79, 98, 106, 101, 99, 116, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 79, 112, 116, 105, 111, 110, 97, 108, 0, 0, 0, 0, 29, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 79, 112, 116, 105, 111, 110, 97, 108, 80, 97, 114, 101, 110, 116, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 79, 112, 116, 105, 111, 110, 97, 108, 77, 105, 110, 77, 97, 120, 0, 0, 0, 0, 21, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 66, 111, 111, 108, 0, 0, 0, 0, 22, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 70, 108, 111, 97, 116, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 73, 110, 116, 0, 0, 0, 0, 23, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 83, 116, 114, 105, 110, 103, 0, 0, 0, 0, 30, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 84, 121, 112, 101, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 50, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 50, 73, 110, 116, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 51, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 124, 80, 108, 97, 121, 101, 114, 80, 114, 101, 102, 115, 86, 101, 99, 116, 111, 114, 51, 73, 110, 116, 0, 0, 0, 0, 27, 77, 121, 66, 111, 120, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 71, 97, 109, 101, 79, 98, 106, 101, 99, 116, 0, 0, 0, 0, 31, 77, 121, 66, 111, 120, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 71, 97, 109, 101, 79, 98, 106, 101, 99, 116, 76, 105, 115, 116, 0, 0, 0, 0, 26, 77, 121, 66, 111, 120, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 0, 0, 0, 0, 30, 77, 121, 66, 111, 120, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 76, 105, 115, 116, 0, 0, 0, 0, 17, 77, 121, 66, 111, 120, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 21, 77, 121, 66, 111, 120, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 76, 105, 115, 116, 0, 0, 0, 0, 30, 77, 121, 66, 111, 120, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 82, 101, 111, 114, 100, 101, 114, 97, 98, 108, 101, 66, 97, 115, 101, 0, 0, 0, 0, 20, 77, 121, 66, 111, 120, 124, 83, 99, 101, 110, 101, 82, 101, 102, 101, 114, 101, 110, 99, 101, 0, 0, 0, 0, 39, 77, 121, 66, 111, 120, 46, 83, 99, 101, 110, 101, 82, 101, 102, 101, 114, 101, 110, 99, 101, 124, 83, 99, 101, 110, 101, 76, 111, 97, 100, 69, 120, 99, 101, 112, 116, 105, 111, 110, 0, 0, 0, 0, 15, 77, 121, 66, 111, 120, 124, 83, 105, 110, 103, 108, 101, 116, 111, 110, 0, 0, 0, 0, 19, 77, 121, 66, 111, 120, 124, 84, 114, 97, 110, 115, 102, 111, 114, 109, 68, 97, 116, 97, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 85, 73, 70, 111, 108, 108, 111, 119, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 85, 73, 73, 109, 97, 103, 101, 66, 97, 115, 101, 100, 66, 117, 116, 116, 111, 110, 0, 0, 0, 0, 24, 77, 121, 66, 111, 120, 124, 85, 73, 82, 101, 108, 97, 116, 105, 118, 101, 80, 111, 115, 105, 116, 105, 111, 110, 0, 0, 0, 0, 14, 77, 121, 66, 111, 120, 124, 85, 73, 83, 105, 122, 101, 66, 121 }; result.TotalFiles = 95; result.TotalTypes = 125; result.IsEditorOnly = false; return result; } } namespace MyBox { [AttributeUsage(AttributeTargets.Field)] public class AutoPropertyAttribute : PropertyAttribute { public readonly AutoPropertyMode Mode; public readonly string PredicateMethodName; public readonly Type PredicateMethodTarget; public readonly bool AllowEmpty; public AutoPropertyAttribute(AutoPropertyMode mode = AutoPropertyMode.Children, string predicateMethodName = null, Type predicateMethodTarget = null, bool allowEmpty = false) { Mode = mode; PredicateMethodTarget = predicateMethodTarget; PredicateMethodName = predicateMethodName; AllowEmpty = allowEmpty; } } public enum AutoPropertyMode { Children, Parent, Scene, Asset, Any } [AttributeUsage(AttributeTargets.Method)] public class ButtonMethodAttribute : PropertyAttribute { public readonly ButtonMethodDrawOrder DrawOrder; public readonly ConditionalData Condition; public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder = ButtonMethodDrawOrder.AfterInspector) { DrawOrder = drawOrder; } public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, string fieldToCheck, bool inverse = false, params object[] compareValues) { ConditionalData condition = new ConditionalData(fieldToCheck, inverse, compareValues); DrawOrder = drawOrder; Condition = condition; } public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, string[] fieldToCheck, bool[] inverse = null, params object[] compare) { ConditionalData condition = new ConditionalData(fieldToCheck, inverse, compare); DrawOrder = drawOrder; Condition = condition; } public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, params string[] fieldToCheck) { ConditionalData condition = new ConditionalData(fieldToCheck); DrawOrder = drawOrder; Condition = condition; } public ButtonMethodAttribute(ButtonMethodDrawOrder drawOrder, bool useMethod, string method, bool inverse = false) { ConditionalData condition = new ConditionalData(useMethod, method, inverse); DrawOrder = drawOrder; Condition = condition; } } public enum ButtonMethodDrawOrder { BeforeInspector, AfterInspector } public class CharactersRangeAttribute : PropertyAttribute { public readonly string Characters; public readonly CharacterRangeMode Mode; public readonly bool IgnoreCase; public CharactersRangeAttribute(string characters, CharacterRangeMode mode = CharacterRangeMode.Allow, bool ignoreCase = true) { Characters = characters; Mode = mode; IgnoreCase = ignoreCase; } } public enum CharacterRangeMode { Allow, Disallow, WarningIfAny, WarningIfNotMatch } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public class ConditionalFieldAttribute : PropertyAttribute { public readonly ConditionalData Data; public bool IsSet { get { if (Data != null) { return Data.IsSet; } return false; } } public ConditionalFieldAttribute(string fieldToCheck, bool inverse = false, params object[] compareValues) { Data = new ConditionalData(fieldToCheck, inverse, compareValues); } public ConditionalFieldAttribute(string[] fieldToCheck, bool[] inverse = null, params object[] compare) { Data = new ConditionalData(fieldToCheck, inverse, compare); } public ConditionalFieldAttribute(params string[] fieldToCheck) { Data = new ConditionalData(fieldToCheck); } public ConditionalFieldAttribute(bool useMethod, string method, bool inverse = false) { Data = new ConditionalData(useMethod, method, inverse); } } public class ConstantsSelectionAttribute : PropertyAttribute { public readonly Type SelectFromType; public ConstantsSelectionAttribute(Type type) { SelectFromType = type; } } public class DefinedValuesAttribute : PropertyAttribute { public readonly object[] ValuesArray; public readonly string[] LabelsArray; public readonly string UseMethod; public DefinedValuesAttribute(params object[] definedValues) { ValuesArray = definedValues; } public DefinedValuesAttribute(bool withLabels, params object[] definedValues) { int num = definedValues.Length / 2; ValuesArray = new object[num]; LabelsArray = new string[num]; int num2 = 0; int num3; for (num3 = 0; num3 < definedValues.Length; num3++) { ValuesArray[num2] = definedValues[num3]; LabelsArray[num2] = definedValues[++num3].ToString(); num2++; } } public DefinedValuesAttribute(string method) { UseMethod = method; } } public class DisplayInspectorAttribute : PropertyAttribute { public readonly bool DisplayScript; public DisplayInspectorAttribute(bool displayScriptField = true) { DisplayScript = displayScriptField; } } public class FoldoutAttribute : PropertyAttribute { public readonly string Name; public readonly bool FoldEverything; public FoldoutAttribute(string name, bool foldEverything = false) { FoldEverything = foldEverything; Name = name; } } public class InitializationFieldAttribute : PropertyAttribute { } public class LayerAttribute : PropertyAttribute { } public class MaxValueAttribute : AttributeBase { private readonly float _x; private readonly float _y; private readonly float _z; private readonly bool _vectorValuesSet; public MaxValueAttribute(float value) { _x = value; } public MaxValueAttribute(float x, float y, float z) { _x = x; _y = y; _z = z; _vectorValuesSet = true; } } public class MinMaxRangeAttribute : PropertyAttribute { public readonly float Min; public readonly float Max; public MinMaxRangeAttribute(float min, float max) { Min = min; Max = max; } } [Serializable] public struct RangedFloat { public float Min; public float Max; public RangedFloat(float min, float max) { Min = min; Max = max; } } [Serializable] public struct RangedInt { public int Min; public int Max; public RangedInt(int min, int max) { Min = min; Max = max; } } public static class RangedExtensions { public static float LerpFromRange(this RangedFloat ranged, float t) { return Mathf.Lerp(ranged.Min, ranged.Max, t); } public static float LerpFromRangeUnclamped(this RangedFloat ranged, float t) { return Mathf.LerpUnclamped(ranged.Min, ranged.Max, t); } public static float LerpFromRange(this RangedInt ranged, float t) { return Mathf.Lerp((float)ranged.Min, (float)ranged.Max, t); } public static float LerpFromRangeUnclamped(this RangedInt ranged, float t) { return Mathf.LerpUnclamped((float)ranged.Min, (float)ranged.Max, t); } } public class MinValueAttribute : AttributeBase { private readonly float _x; private readonly float _y; private readonly float _z; private readonly bool _vectorValuesSet; public MinValueAttribute(float value) { _x = value; } public MinValueAttribute(float x, float y, float z) { _x = x; _y = y; _z = z; _vectorValuesSet = true; } } [AttributeUsage(AttributeTargets.Field)] public class MustBeAssignedAttribute : PropertyAttribute { } public class OverrideLabelAttribute : PropertyAttribute { public readonly string NewLabel; public OverrideLabelAttribute(string newLabel) { NewLabel = newLabel; } } public class PositiveValueOnlyAttribute : PropertyAttribute { } [AttributeUsage(AttributeTargets.Field)] public sealed class RangeVectorAttribute : PropertyAttribute { public readonly Vector3 min = Vector3.zero; public readonly Vector3 max = Vector3.zero; public bool Valid { get; } = true; public RangeVectorAttribute(float[] min, float[] max) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (min.Length > 3 || max.Length > 3) { Valid = false; return; } switch (min.Length) { case 3: this.min.x = min[0]; this.min.y = min[1]; this.min.z = min[2]; break; case 2: this.min.x = min[0]; this.min.y = min[1]; break; case 1: this.min.x = min[0]; break; } switch (max.Length) { case 3: this.max.x = max[0]; this.max.y = max[1]; this.max.z = max[2]; break; case 2: this.max.x = max[0]; this.max.y = max[1]; break; case 1: this.max.x = max[0]; break; } } } public class ReadOnlyAttribute : ConditionalFieldAttribute { public ReadOnlyAttribute(string fieldToCheck, bool inverse = false, params object[] compareValues) : base(fieldToCheck, inverse, compareValues) { } public ReadOnlyAttribute(string[] fieldToCheck, bool[] inverse = null, params object[] compare) : base(fieldToCheck, inverse, compare) { } public ReadOnlyAttribute(params string[] fieldToCheck) : base(fieldToCheck) { } public ReadOnlyAttribute(bool useMethod, string method, bool inverse = false) : base(useMethod, method, inverse) { } } public class RegexStringAttribute : PropertyAttribute { public readonly Regex Regex; public readonly RegexStringMode AttributeMode; public RegexStringAttribute(string regex, RegexStringMode mode = RegexStringMode.Match, RegexOptions options = RegexOptions.None) { Regex = new Regex(regex, options); AttributeMode = mode; } } public enum RegexStringMode { Match, Replace, WarningIfMatch, WarningIfNotMatch } [AttributeUsage(AttributeTargets.Class)] public class RequireLayerAttribute : Attribute { public readonly string LayerName; public readonly int LayerIndex = -1; public RequireLayerAttribute(string layer) { LayerName = layer; } public RequireLayerAttribute(int layer) { LayerIndex = layer; } } [AttributeUsage(AttributeTargets.Class)] public class RequireTagAttribute : Attribute { public string Tag; public RequireTagAttribute(string tag) { Tag = tag; } } [AttributeUsage(AttributeTargets.Field)] public class SceneAttribute : PropertyAttribute { } public class SearchableEnumAttribute : PropertyAttribute { } public class SeparatorAttribute : PropertyAttribute { public readonly string Title; public readonly bool WithOffset; public SeparatorAttribute() { Title = ""; } public SeparatorAttribute(string title, bool withOffset = false) { Title = title; WithOffset = withOffset; } } public class SpriteLayerAttribute : PropertyAttribute { } public class TagAttribute : PropertyAttribute { } [PublicAPI] public static class MyAlgorithms { public static T Cast<T>(this IConvertible source) { return (T)Convert.ChangeType(source, typeof(T)); } public static bool Is<T>(this object source) { return source is T; } public static T As<T>(this object source) where T : class { return source as T; } public static T Pipe<T>(this T argument, Action<T> action) { action(argument); return argument; } public static TResult Pipe<T, TResult>(this T argument, Func<T, TResult> function) { return function(argument); } public static T PipeKeep<T, TResult>(this T argument, Func<T, TResult> function) { function(argument); return argument; } } [PublicAPI] public static class MyCollections { public static T[] InsertAt<T>(this T[] array, int index) { if (index < 0) { Debug.LogError((object)"Index is less than zero. Array is not modified"); return array; } if (index > array.Length) { Debug.LogError((object)"Index exceeds array length. Array is not modified"); return array; } T[] array2 = new T[array.Length + 1]; int num = 0; for (int i = 0; i < array2.Length; i++) { if (i != index) { array2[i] = array[num]; num++; } } return array2; } public static T[] RemoveAt<T>(this T[] array, int index) { if (index < 0) { Debug.LogError((object)"Index is less than zero. Array is not modified"); return array; } if (index >= array.Length) { Debug.LogError((object)"Index exceeds array length. Array is not modified"); return array; } T[] array2 = new T[array.Length - 1]; int num = 0; for (int i = 0; i < array.Length; i++) { if (i != index) { array2[num] = array[i]; num++; } } return array2; } public static T GetRandom<T>(this T[] collection) { return collection[Random.Range(0, collection.Length)]; } public static T GetRandom<T>(this IList<T> collection) { return collection[Random.Range(0, collection.Count)]; } public static T GetRandom<T>(this IEnumerable<T> collection) { return collection.ElementAt(Random.Range(0, collection.Count())); } public static bool IsNullOrEmpty<T>(this T[] collection) { if (collection != null) { return collection.Length == 0; } return true; } public static bool IsNullOrEmpty<T>(this IList<T> collection) { if (collection != null) { return collection.Count == 0; } return true; } public static bool IsNullOrEmpty<T>(this IEnumerable<T> collection) { if (collection != null) { return !collection.Any(); } return true; } public static bool NotNullOrEmpty<T>(this T[] collection) { return !collection.IsNullOrEmpty(); } public static bool NotNullOrEmpty<T>(this IList<T> collection) { return !collection.IsNullOrEmpty(); } public static bool NotNullOrEmpty<T>(this IEnumerable<T> collection) { return !collection.IsNullOrEmpty(); } public static int NextIndexInCircle<T>(this T[] array, int desiredPosition) { if (array.IsNullOrEmpty()) { Debug.LogError((object)"NextIndexInCircle Caused: source array is null or empty"); return -1; } int num = array.Length; if (num == 1) { return 0; } return (desiredPosition % num + num) % num; } public static int IndexOfItem<T>(this IEnumerable<T> collection, T item) { if (collection == null) { Debug.LogError((object)"IndexOfItem Caused: source collection is null"); return -1; } int num = 0; foreach (T item2 in collection) { if (object.Equals(item2, item)) { return num; } num++; } return -1; } public static bool ContentsMatch<T>(this IEnumerable<T> first, IEnumerable<T> second) { if (first.IsNullOrEmpty() && second.IsNullOrEmpty()) { return true; } if (first.IsNullOrEmpty() || second.IsNullOrEmpty()) { return false; } int num = first.Count(); int num2 = second.Count(); if (num != num2) { return false; } foreach (T item in first) { if (!second.Contains(item)) { return false; } } return true; } public static bool ContentsMatchKeys<T1, T2>(this IDictionary<T1, T2> source, IEnumerable<T1> check) { if (source.IsNullOrEmpty() && check.IsNullOrEmpty()) { return true; } if (source.IsNullOrEmpty() || check.IsNullOrEmpty()) { return false; } return source.Keys.ContentsMatch(check); } public static bool ContentsMatchValues<T1, T2>(this IDictionary<T1, T2> source, IEnumerable<T2> check) { if (source.IsNullOrEmpty() && check.IsNullOrEmpty()) { return true; } if (source.IsNullOrEmpty() || check.IsNullOrEmpty()) { return false; } return source.Values.ContentsMatch(check); } public static TValue GetOrAddDefault<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key) where TValue : new() { if (!source.ContainsKey(key)) { source[key] = new TValue(); } return source[key]; } public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, TValue value) { if (!source.ContainsKey(key)) { source[key] = value; } return source[key]; } public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, Func<TValue> valueFactory) { if (!source.ContainsKey(key)) { source[key] = valueFactory(); } return source[key]; } public static TValue GetOrAdd<TKey, TValue>(this IDictionary<TKey, TValue> source, TKey key, Func<TKey, TValue> valueFactory) { if (!source.ContainsKey(key)) { source[key] = valueFactory(key); } return source[key]; } public static TValue GetOrAdd<TKey, TValue, TArg>(this IDictionary<TKey, TValue> source, TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument) { if (!source.ContainsKey(key)) { source[key] = valueFactory(key, factoryArgument); } return source[key]; } public static IEnumerable<T> ForEach<T>(this IEnumerable<T> source, Action<T> action) { foreach (T item in source) { action(item); } return source; } public static IEnumerable<T> ForEach<T, R>(this IEnumerable<T> source, Func<T, R> func) { foreach (T item in source) { func(item); } return source; } public static IEnumerable<T> ForEach<T>(this IEnumerable<T> source, Action<T, int> action) { int num = 0; foreach (T item in source) { action(item, num); num++; } return source; } public static IEnumerable<T> ForEach<T, R>(this IEnumerable<T> source, Func<T, int, R> func) { int num = 0; foreach (T item in source) { func(item, num); num++; } return source; } public static T MaxBy<T, S>(this IEnumerable<T> source, Func<T, S> selector) where S : IComparable<S> { if (source.IsNullOrEmpty()) { Debug.LogError((object)"MaxBy Caused: source collection is null or empty"); return default(T); } return source.Aggregate((T e, T n) => (selector(e).CompareTo(selector(n)) <= 0) ? n : e); } public static T MinBy<T, S>(this IEnumerable<T> source, Func<T, S> selector) where S : IComparable<S> { if (source.IsNullOrEmpty()) { Debug.LogError((object)"MinBy Caused: source collection is null or empty"); return default(T); } return source.Aggregate((T e, T n) => (selector(e).CompareTo(selector(n)) >= 0) ? n : e); } public static IEnumerable<T> SingleToEnumerable<T>(this T source) { return Enumerable.Empty<T>().Append(source); } public static int FirstIndex<T>(this IList<T> source, Predicate<T> predicate) { for (int i = 0; i < source.Count; i++) { if (predicate(source[i])) { return i; } } return -1; } public static int FirstIndex<T>(this IEnumerable<T> source, Predicate<T> predicate) { int num = 0; foreach (T item in source) { if (predicate(item)) { return num; } num++; } return -1; } public static int LastIndex<T>(this IList<T> source, Predicate<T> predicate) { for (int num = source.Count - 1; num >= 0; num--) { if (predicate(source[num])) { return num; } } return -1; } public static int GetWeightedRandomIndex<T>(this IEnumerable<T> source, Func<T, double> weightSelector) { IEnumerable<double> weights = from w in source.Select(weightSelector) select (!(w < 0.0)) ? w : 0.0; IEnumerable<double> source2 = weights.Select((double w, int i) => weights.Take(i + 1).Sum()); double roll = MyCommonConstants.SystemRandom.NextDouble() * weights.Sum(); return source2.FirstIndex((double ws) => ws > roll); } public static T GetWeightedRandom<T>(this IList<T> source, Func<T, double> weightSelector) { return source[source.GetWeightedRandomIndex(weightSelector)]; } public static T GetWeightedRandom<T>(this IEnumerable<T> source, Func<T, double> weightSelector) { return source.ElementAt(source.GetWeightedRandomIndex(weightSelector)); } public static IList<T> FillBy<T>(this IList<T> source, Func<int, T> valueFactory) { for (int i = 0; i < source.Count; i++) { source[i] = valueFactory(i); } return source; } public static T[] FillBy<T>(this T[] source, Func<int, T> valueFactory) { for (int i = 0; i < source.Length; i++) { source[i] = valueFactory(i); } return source; } public static T[] ExclusiveSample<T>(this IList<T> source, int sampleNumber) { if (sampleNumber > source.Count) { throw new ArgumentOutOfRangeException("Cannot sample more elements than what the source collection contains"); } T[] array = new T[sampleNumber]; int num = 0; for (int i = 0; i < source.Count; i++) { if (num >= sampleNumber) { break; } double num2 = (double)(sampleNumber - num) / (double)(source.Count - i); if (MyCommonConstants.SystemRandom.NextDouble() < num2) { array[num] = source[i]; num++; } } return array; } public static IList<T> SwapInPlace<T>(this IList<T> source, int index1, int index2) { T val = source[index2]; T val2 = source[index1]; T val4 = (source[index1] = val); val4 = (source[index2] = val2); return source; } public static IList<T> Shuffle<T>(this IList<T> source) { for (int i = 0; i < source.Count - 1; i++) { int index = Random.Range(i, source.Count); source.SwapInPlace(i, index); } return source; } } public static class MyColor { private const float LightOffset = 0.0625f; public static Color RandomBright => new Color(Random.Range(0.4f, 1f), Random.Range(0.4f, 1f), Random.Range(0.4f, 1f)); public static Color RandomDim => new Color(Random.Range(0.4f, 0.6f), Random.Range(0.4f, 0.8f), Random.Range(0.4f, 0.8f)); public static Color RandomColor => new Color(Random.Range(0.1f, 0.9f), Random.Range(0.1f, 0.9f), Random.Range(0.1f, 0.9f)); public static Color WithAlphaSetTo(this Color color, float a) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) return new Color(color.r, color.g, color.b, a); } public static void SetAlpha(this Graphic graphic, float a) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) graphic.color = graphic.color.WithAlphaSetTo(a); } public static void SetAlpha(this SpriteRenderer renderer, float a) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) renderer.color = renderer.color.WithAlphaSetTo(a); } public static string ToHex(this Color color) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) return $"#{(int)(color.r * 255f):X2}{(int)(color.g * 255f):X2}{(int)(color.b * 255f):X2}"; } public static Color Lighter(this Color color) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) return color.BrightnessOffset(0.0625f); } public static Color Darker(this Color color) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) return color.BrightnessOffset(-0.0625f); } public static Color BrightnessOffset(this Color color, float offset) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) return new Color(color.r + offset, color.g + offset, color.b + offset, color.a); } public static Color ToUnityColor(this string source) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) Color result = default(Color); ColorUtility.TryParseHtmlString(source, ref result); return result; } } public class MyCommonConstants { public static readonly Random SystemRandom = new Random(); } public static class MyCoroutines { private static CoroutineOwner _coroutineOwner; private static CoroutineOwner CoroutineOwner { get { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_coroutineOwner != (Object)null) { return _coroutineOwner; } GameObject val = new GameObject("Static Coroutine Owner"); Object.DontDestroyOnLoad((Object)val); ((Object)val).hideFlags = (HideFlags)61; _coroutineOwner = val.AddComponent<CoroutineOwner>(); return _coroutineOwner; } } public static Coroutine StartCoroutine(this IEnumerator coroutine) { return ((MonoBehaviour)CoroutineOwner).StartCoroutine(coroutine); } public static Coroutine StartNext(this Coroutine coroutine, IEnumerator nextCoroutine) { return StartNextCoroutine(coroutine, nextCoroutine).StartCoroutine(); } public static Coroutine OnComplete(this Coroutine coroutine, Action onComplete) { return OnCompleteCoroutine(coroutine, onComplete).StartCoroutine(); } public static void StopCoroutine(Coroutine coroutine) { ((MonoBehaviour)CoroutineOwner).StopCoroutine(coroutine); } public static void StopAllCoroutines() { ((MonoBehaviour)CoroutineOwner).StopAllCoroutines(); } public static CoroutineGroup CreateGroup(MonoBehaviour owner = null) { return new CoroutineGroup((MonoBehaviour)(object)(((Object)(object)owner != (Object)null) ? ((CoroutineOwner)(object)owner) : CoroutineOwner)); } private static IEnumerator StartNextCoroutine(Coroutine coroutine, IEnumerator nextCoroutine) { yield return coroutine; yield return nextCoroutine.StartCoroutine(); } private static IEnumerator OnCompleteCoroutine(Coroutine coroutine, Action onComplete) { yield return coroutine; onComplete?.Invoke(); } } public static class MyDebug { private static StringBuilder _stringBuilder; private static void PrepareStringBuilder() { if (_stringBuilder == null) { _stringBuilder = new StringBuilder(); } else { _stringBuilder.Clear(); } } public static void LogArray<T>(T[] toLog) { PrepareStringBuilder(); _stringBuilder.Append("Log Array: ").Append(typeof(T).Name).Append(" (") .Append(toLog.Length) .Append(")\n"); for (int i = 0; i < toLog.Length; i++) { _stringBuilder.Append("\n\t").Append(i.ToString().Colored(Colors.brown)).Append(": ") .Append(toLog[i]); } Debug.Log((object)_stringBuilder.ToString()); } public static void LogArray<T>(IList<T> toLog) { PrepareStringBuilder(); int count = toLog.Count; _stringBuilder.Append("Log Array: ").Append(typeof(T).Name).Append(" (") .Append(count) .Append(")\n"); for (int i = 0; i < count; i++) { _stringBuilder.Append("\n\t" + i.ToString().Colored(Colors.brown) + ": " + toLog[i]); } Debug.Log((object)_stringBuilder.ToString()); } public static void LogColor(Color color) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) string text = ColorUtility.ToHtmlStringRGB(color); Color val = color; Debug.Log((object)("<color=#" + text + ">████████████</color> = " + ((object)(Color)(ref val)).ToString())); } public static void DrawDebugBounds(MeshFilter mesh, Color color) { } public static void DrawDebugBounds(MeshRenderer renderer, Color color) { } public static void DrawDebugBounds(Bounds bounds, Color color) { } public static void DrawString(string text, Vector3 worldPos, Color? colour = null) { } public static void DrawArrowRay(Vector3 position, Vector3 direction, float headLength = 0.25f, float headAngle = 20f) { } public static void DrawDimensionalCross(Vector3 position, float size) { } } public static class MyDelayedActions { public static Coroutine DelayedAction(float waitSeconds, Action action, bool unscaled = false) { return DelayedActionCoroutine(waitSeconds, action, unscaled).StartCoroutine(); } public static void DelayedAction(Action action) { Coroutine().StartCoroutine(); IEnumerator Coroutine() { yield return null; action?.Invoke(); } } public static Coroutine DelayedAction(this MonoBehaviour invoker, float waitSeconds, Action action, bool unscaled = false) { return invoker.StartCoroutine(DelayedActionCoroutine(waitSeconds, action, unscaled)); } public static Coroutine DelayedAction(this MonoBehaviour invoker, Action action) { return invoker.StartCoroutine(Coroutine()); IEnumerator Coroutine() { yield return null; action?.Invoke(); } } public static IEnumerator DelayedUiSelection(GameObject objectToSelect) { yield return null; EventSystem.current.SetSelectedGameObject((GameObject)null); EventSystem.current.SetSelectedGameObject(objectToSelect); } public static Coroutine DelayedUiSelection(this MonoBehaviour invoker, GameObject objectToSelect) { return invoker.StartCoroutine(DelayedUiSelection(objectToSelect)); } private static IEnumerator DelayedActionCoroutine(float waitSeconds, Action action, bool unscaled = false) { if (unscaled) { yield return (object)new WaitForSecondsRealtime(waitSeconds); } else { yield return (object)new WaitForSeconds(waitSeconds); } action?.Invoke(); } } public static class MyExtensions { public struct ComponentOfInterface<T> { public readonly Component Component; public readonly T Interface; public ComponentOfInterface(Component component, T @interface) { Component = component; Interface = @interface; } } public static void Swap<T>(this T[] array, int a, int b) { T val = array[b]; T val2 = array[a]; array[a] = val; array[b] = val2; } public static bool IsWorldPointInViewport(this Camera camera, Vector3 point) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) Vector3 val = camera.WorldToViewportPoint(point); if (val.x > 0f) { return val.y > 0f; } return false; } public static Vector3 WorldPointOffsetByDepth(this Camera camera, Vector3 source, float distanceFromCamera, MonoOrStereoscopicEye eye = 2) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) Vector3 vector = camera.WorldToScreenPoint(source, eye); return camera.ScreenToWorldPoint(vector.SetZ(distanceFromCamera), eye); } public static void ResetPosition(this Transform transform) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) transform.position = Vector3.zero; } public static Transform SetLossyScale(this Transform source, Vector3 targetLossyScale) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) source.localScale = source.lossyScale.Pow(-1f).ScaleBy(targetLossyScale).ScaleBy(source.localScale); return source; } public static T SetLayerRecursively<T>(this T source, string layerName) where T : Component { ((Component)source).gameObject.SetLayerRecursively(LayerMask.NameToLayer(layerName)); return source; } public static T SetLayerRecursively<T>(this T source, int layer) where T : Component { ((Component)source).gameObject.SetLayerRecursively(layer); return source; } public static GameObject SetLayerRecursively(this GameObject source, string layerName) { source.SetLayerRecursively(LayerMask.NameToLayer(layerName)); return source; } public static GameObject SetLayerRecursively(this GameObject source, int layer) { Transform[] componentsInChildren = source.GetComponentsInChildren<Transform>(true); for (int i = 0; i < componentsInChildren.Length; i++) { ((Component)componentsInChildren[i]).gameObject.layer = layer; } return source; } public static T GetOrAddComponent<T>(this GameObject gameObject) where T : Component { T component = gameObject.GetComponent<T>(); if ((Object)(object)component != (Object)null) { return component; } return gameObject.AddComponent<T>(); } public static T GetOrAddComponent<T>(this Component component) where T : Component { return component.gameObject.GetOrAddComponent<T>(); } public static bool HasComponent<T>(this GameObject gameObject) { return gameObject.GetComponent<T>() != null; } public static bool HasComponent<T>(this Component component) { return component.GetComponent<T>() != null; } public static List<Transform> GetChildsWhere(this Transform transform, Predicate<Transform> match) { List<Transform> list = new List<Transform>(); RecursiveCheck(transform); return list; void RecursiveCheck(Transform parent) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown foreach (Transform item in parent) { Transform val = item; RecursiveCheck(val); if (match(val)) { list.Add(val); } } } } public static List<Transform> GetObjectsOfLayerInChilds(this GameObject gameObject, int layer) { return gameObject.transform.GetChildsWhere((Transform t) => ((Component)t).gameObject.layer == layer); } public static List<Transform> GetObjectsOfLayerInChilds(this GameObject gameObject, string layer) { return gameObject.GetObjectsOfLayerInChilds(LayerMask.NameToLayer(layer)); } public static List<Transform> GetObjectsOfLayerInChilds(this Component component, string layer) { return component.GetObjectsOfLayerInChilds(LayerMask.NameToLayer(layer)); } public static List<Transform> GetObjectsOfLayerInChilds(this Component component, int layer) { return component.gameObject.GetObjectsOfLayerInChilds(layer); } public static void SetBodyState(this Rigidbody body, bool state) { body.isKinematic = !state; body.detectCollisions = state; } public static T[] FindObjectsOfInterface<T>() where T : class { return (from behaviour in Object.FindObjectsOfType<Transform>() select ((Component)behaviour).GetComponent(typeof(T))).OfType<T>().ToArray(); } public static ComponentOfInterface<T>[] FindObjectsOfInterfaceAsComponents<T>() where T : class { return (from c in Object.FindObjectsOfType<Component>() where c is T select new ComponentOfInterface<T>(c, c as T)).ToArray(); } public static T[] OnePerInstance<T>(this T[] components) where T : Component { if (components == null || components.Length == 0) { return null; } return (from h in components group h by ((Object)((Component)h).transform).GetInstanceID() into g select g.First()).ToArray(); } public static RaycastHit2D[] OneHitPerInstance(this RaycastHit2D[] hits) { if (hits == null || hits.Length == 0) { return null; } return (from h in hits group h by ((Object)((RaycastHit2D)(ref h)).transform).GetInstanceID() into g select g.First()).ToArray(); } public static Collider2D[] OneHitPerInstance(this Collider2D[] hits) { if (hits == null || hits.Length == 0) { return null; } return (from h in hits group h by ((Object)((Component)h).transform).GetInstanceID() into g select g.First()).ToArray(); } public static List<Collider2D> OneHitPerInstanceList(this Collider2D[] hits) { if (hits == null || hits.Length == 0) { return null; } return (from h in hits group h by ((Object)((Component)h).transform).GetInstanceID() into g select g.First()).ToList(); } } public static class MyGizmos { public static void DrawArrow(Vector3 from, Vector3 direction, float headLength = 0.25f, float headAngle = 20f) { } } public static class MyInput { public static bool GetNumberDown(int num) { switch (num) { case 0: if (Input.GetKeyDown((KeyCode)48) || Input.GetKeyDown((KeyCode)256)) { return true; } break; case 1: if (Input.GetKeyDown((KeyCode)49) || Input.GetKeyDown((KeyCode)257)) { return true; } break; case 2: if (Input.GetKeyDown((KeyCode)50) || Input.GetKeyDown((KeyCode)258)) { return true; } break; case 3: if (Input.GetKeyDown((KeyCode)51) || Input.GetKeyDown((KeyCode)259)) { return true; } break; case 4: if (Input.GetKeyDown((KeyCode)52) || Input.GetKeyDown((KeyCode)260)) { return true; } break; case 5: if (Input.GetKeyDown((KeyCode)53) || Input.GetKeyDown((KeyCode)261)) { return true; } break; case 6: if (Input.GetKeyDown((KeyCode)54) || Input.GetKeyDown((KeyCode)262)) { return true; } break; case 7: if (Input.GetKeyDown((KeyCode)55) || Input.GetKeyDown((KeyCode)263)) { return true; } break; case 8: if (Input.GetKeyDown((KeyCode)56) || Input.GetKeyDown((KeyCode)264)) { return true; } break; case 9: if (Input.GetKeyDown((KeyCode)57) || Input.GetKeyDown((KeyCode)265)) { return true; } break; } return false; } public static int GetNumberDown(KeyCode key) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Invalid comparison between Unknown and I4 //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Invalid comparison between Unknown and I4 //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Invalid comparison between Unknown and I4 //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Invalid comparison between Unknown and I4 //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Invalid comparison between Unknown and I4 //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Invalid comparison between Unknown and I4 //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Invalid comparison between Unknown and I4 //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Inv