Decompiled source of ImagePings v1.0.0
ImagePings.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using HG; using HG.Reflection; using ImagePings.Utils; using ImagePings.Utils.Components; using MG.GIF; using Microsoft.CodeAnalysis; using On.RoR2; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using RoR2; using RoR2.Audio; using RoR2.EntitlementManagement; using RoR2.ExpansionManagement; using RoR2.Navigation; using RoR2.Projectile; using RoR2.Skills; using RoR2.SolusWingGrid; using RoR2.UI; using TMPro; using UnityEngine; using UnityEngine.AI; using UnityEngine.AddressableAssets; using UnityEngine.Audio; using UnityEngine.Networking; using UnityEngine.Rendering.PostProcessing; using UnityEngine.UI; using UnityEngine.UIElements; using UnityEngine.Video; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ImagePings")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+32ab7b7a5be3186f405d7a02ac0a714ddf5fd748")] [assembly: AssemblyProduct("ImagePings")] [assembly: AssemblyTitle("ImagePings")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace MG.GIF { public class Image : ICloneable { public int Width; public int Height; public int Delay; public Color32[] RawImage; public Image() { } public Image(Image img) { Width = img.Width; Height = img.Height; Delay = img.Delay; RawImage = ((img.RawImage != null) ? ((Color32[])img.RawImage.Clone()) : null); } public object Clone() { return new Image(this); } public Texture2D CreateTexture() { //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) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown Texture2D val = new Texture2D(Width, Height, (TextureFormat)5, false) { filterMode = (FilterMode)0, wrapMode = (TextureWrapMode)1 }; val.SetPixels32(RawImage); val.Apply(); return val; } } public class Decoder : IDisposable { [Flags] private enum ImageFlag { Interlaced = 0x40, ColourTable = 0x80, TableSizeMask = 7, BitDepthMask = 0x70 } private enum Block { Image = 44, Extension = 33, End = 59 } private enum Extension { GraphicControl = 249, Comments = 254, PlainText = 1, ApplicationData = 255 } private enum Disposal { None = 0, DoNotDispose = 4, RestoreBackground = 8, ReturnToPrevious = 12 } [Flags] private enum ControlFlags { HasTransparency = 1, DisposalMask = 0xC } public string Version; public ushort Width; public ushort Height; public Color32 BackgroundColour; private const uint NoCode = 65535u; private const ushort NoTransparency = ushort.MaxValue; private byte[] Input; private int D; private Color32[] GlobalColourTable; private Color32[] LocalColourTable; private Color32[] ActiveColourTable; private ushort TransparentIndex; private Image Image = new Image(); private ushort ImageLeft; private ushort ImageTop; private ushort ImageWidth; private ushort ImageHeight; private Color32[] Output; private Color32[] PreviousImage; private readonly int[] Pow2 = new int[13] { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 }; private bool Disposed = false; private int CodesLength; private IntPtr CodesHandle; private unsafe ushort* pCodes; private IntPtr CurBlock; private unsafe uint* pCurBlock; private const int MaxCodes = 4096; private IntPtr Indices; private unsafe ushort** pIndicies; public Decoder(byte[] data) : this() { Load(data); } public Decoder Load(byte[] data) { Input = data; D = 0; GlobalColourTable = (Color32[])(object)new Color32[256]; LocalColourTable = (Color32[])(object)new Color32[256]; TransparentIndex = ushort.MaxValue; Output = null; PreviousImage = null; Image.Delay = 0; return this; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private byte ReadByte() { return Input[D++]; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private ushort ReadUInt16() { return (ushort)(Input[D++] | (Input[D++] << 8)); } private void ReadHeader() { //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) if (Input == null || Input.Length <= 12) { throw new Exception("Invalid data"); } Version = Encoding.ASCII.GetString(Input, 0, 6); D = 6; if (Version != "GIF87a" && Version != "GIF89a") { throw new Exception("Unsupported GIF version"); } Width = ReadUInt16(); Height = ReadUInt16(); Image.Width = Width; Image.Height = Height; ImageFlag imageFlag = (ImageFlag)ReadByte(); byte b = ReadByte(); ReadByte(); if (imageFlag.HasFlag(ImageFlag.ColourTable)) { ReadColourTable(GlobalColourTable, imageFlag); } BackgroundColour = GlobalColourTable[b]; } public Image NextImage() { if (D == 0) { ReadHeader(); } while (true) { switch ((Block)ReadByte()) { case Block.Image: { Image image = ReadImageBlock(); if (image != null) { return image; } break; } case Block.Extension: { Extension extension = (Extension)ReadByte(); if (extension == Extension.GraphicControl) { ReadControlBlock(); } else { SkipBlocks(); } break; } case Block.End: return null; default: throw new Exception("Unexpected block type"); } } } private Color32[] ReadColourTable(Color32[] colourTable, ImageFlag flags) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) int num = Pow2[(int)((flags & ImageFlag.TableSizeMask) + 1)]; for (int i = 0; i < num; i++) { colourTable[i] = new Color32(Input[D++], Input[D++], Input[D++], byte.MaxValue); } return colourTable; } private void SkipBlocks() { for (byte b = Input[D++]; b != 0; b = Input[D++]) { D += b; } } private void ReadControlBlock() { ReadByte(); ControlFlags controlFlags = (ControlFlags)ReadByte(); Image.Delay = ReadUInt16() * 10; byte transparentIndex = ReadByte(); ReadByte(); if (controlFlags.HasFlag(ControlFlags.HasTransparency)) { TransparentIndex = transparentIndex; } else { TransparentIndex = ushort.MaxValue; } switch ((Disposal)(controlFlags & ControlFlags.DisposalMask)) { default: PreviousImage = Output; break; case Disposal.RestoreBackground: Output = (Color32[])(object)new Color32[Width * Height]; break; case Disposal.ReturnToPrevious: Output = (Color32[])(object)new Color32[Width * Height]; if (PreviousImage != null) { Array.Copy(PreviousImage, Output, Output.Length); } break; } } private Image ReadImageBlock() { ImageLeft = ReadUInt16(); ImageTop = ReadUInt16(); ImageWidth = ReadUInt16(); ImageHeight = ReadUInt16(); ImageFlag imageFlag = (ImageFlag)ReadByte(); if (ImageWidth == 0 || ImageHeight == 0) { return null; } if (imageFlag.HasFlag(ImageFlag.ColourTable)) { ActiveColourTable = ReadColourTable(LocalColourTable, imageFlag); } else { ActiveColourTable = GlobalColourTable; } if (Output == null) { Output = (Color32[])(object)new Color32[Width * Height]; PreviousImage = Output; } DecompressLZW(); if (imageFlag.HasFlag(ImageFlag.Interlaced)) { Deinterlace(); } Image.RawImage = Output; return Image; } private void Deinterlace() { int num = Output.Length / Width; int num2 = Output.Length - Width; Color32[] output = Output; Output = (Color32[])(object)new Color32[Output.Length]; for (int i = 0; i < num; i++) { int num3; if (i % 8 == 0) { num3 = i / 8; } else if ((i + 4) % 8 == 0) { int num4 = num / 8; num3 = num4 + (i - 4) / 8; } else if ((i + 2) % 4 == 0) { int num5 = num / 4; num3 = num5 + (i - 2) / 4; } else { int num6 = num / 2; num3 = num6 + (i - 1) / 2; } Array.Copy(output, (num - num3 - 1) * Width, Output, num2, Width); num2 -= Width; } } public unsafe Decoder() { CodesLength = 131072; CodesHandle = Marshal.AllocHGlobal(CodesLength * 2); pCodes = (ushort*)CodesHandle.ToPointer(); CurBlock = Marshal.AllocHGlobal(256); pCurBlock = (uint*)CurBlock.ToPointer(); Indices = Marshal.AllocHGlobal(4096 * sizeof(ushort*)); pIndicies = (ushort**)Indices.ToPointer(); } protected virtual void Dispose(bool disposing) { if (!Disposed) { Marshal.FreeHGlobal(CodesHandle); Marshal.FreeHGlobal(CurBlock); Marshal.FreeHGlobal(Indices); Disposed = true; } } ~Decoder() { Dispose(disposing: false); } public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } private unsafe void DecompressLZW() { //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_03f2: Unknown result type (might be due to invalid IL or missing references) //IL_04a6: Unknown result type (might be due to invalid IL or missing references) //IL_04ab: Unknown result type (might be due to invalid IL or missing references) ushort* ptr = pCodes + CodesLength; fixed (byte* ptr9 = Input) { fixed (Color32* ptr2 = Output) { fixed (Color32* ptr12 = ActiveColourTable) { int num = (Height - ImageTop - 1) * Width; int num2 = ((ImageLeft + ImageWidth > Width) ? (Width - ImageLeft) : ImageWidth); Color32* ptr3 = (Color32*)((byte*)ptr2 + (nint)(num + ImageLeft) * (nint)Unsafe.SizeOf<Color32>()); Color32* ptr4 = ptr3; Color32* ptr5 = (Color32*)((byte*)ptr3 + (nint)(int)ImageWidth * (nint)Unsafe.SizeOf<Color32>()); Color32* ptr6 = (Color32*)((byte*)ptr3 + (nint)num2 * (nint)Unsafe.SizeOf<Color32>()); int num3 = Input[D++]; if (num3 > 11) { num3 = 11; } int num4 = num3 + 1; int num5 = Pow2[num4]; int num6 = Pow2[num3]; int num7 = num6; int num8 = num6 + 1; int num9 = num6 + 2; ushort* ptr7 = pCodes; for (ushort num10 = 0; num10 < num9; num10++) { pIndicies[(int)num10] = ptr7; *(ptr7++) = 1; *(ptr7++) = num10; } uint num11 = 65535u; uint num12 = (uint)(num5 - 1); uint num13 = 0u; int num14 = 0; int num15 = 0; uint* ptr8 = pCurBlock; while (true) { uint num16 = num13 & num12; if (num14 >= num4) { num14 -= num4; num13 >>= num4; } else { if (num15 <= 0) { byte* source = ptr9 + D++; num15 = *(source++); D += num15; if (num15 == 0) { return; } pCurBlock[(num15 - 1) / 4] = 0u; Buffer.MemoryCopy(source, pCurBlock, 256L, num15); ptr8 = pCurBlock; } num13 = *(ptr8++); int num17 = ((num15 >= 4) ? 32 : (num15 * 8)); num15 -= 4; if (num14 > 0) { int num18 = num4 - num14; num16 |= (num13 << num14) & num12; num13 >>= num18; num14 = num17 - num18; } else { num16 = num13 & num12; num13 >>= num4; num14 = num17 - num4; } } if (num16 == num7) { num4 = num3 + 1; num5 = Pow2[num4]; num9 = num6 + 2; ptr7 = pCodes + num9 * 2; num11 = 65535u; num12 = (uint)(num5 - 1); continue; } if (num16 == num8) { break; } bool flag = false; ushort* ptr10 = null; if (num16 < num9) { ptr10 = pIndicies[num16]; } else { if (num11 == 65535) { continue; } ptr10 = pIndicies[num11]; flag = true; } ushort num19 = *(ptr10++); ushort num20 = *ptr10; ushort* ptr11 = ptr10 + (int)num19; do { ushort num21 = *(ptr10++); if (num21 != TransparentIndex && ptr3 < ptr6) { Unsafe.Write(ptr3, ((byte*)ptr12)[(nint)(int)num21 * (nint)Unsafe.SizeOf<Color32>()]); } if ((ptr3 = (Color32*)((byte*)ptr3 + Unsafe.SizeOf<Color32>())) == ptr5) { ptr4 = (Color32*)((byte*)ptr4 - (nint)(int)Width * (nint)Unsafe.SizeOf<Color32>()); ptr3 = ptr4; ptr5 = (Color32*)((byte*)ptr4 + (nint)(int)ImageWidth * (nint)Unsafe.SizeOf<Color32>()); ptr6 = (Color32*)((byte*)ptr4 + (nint)num2 * (nint)Unsafe.SizeOf<Color32>()); if (ptr3 < ptr2) { SkipBlocks(); return; } } } while (ptr10 < ptr11); if (flag) { if (num20 != TransparentIndex && ptr3 < ptr6) { Unsafe.Write(ptr3, ((byte*)ptr12)[(nint)(int)num20 * (nint)Unsafe.SizeOf<Color32>()]); } if ((ptr3 = (Color32*)((byte*)ptr3 + Unsafe.SizeOf<Color32>())) == ptr5) { ptr4 = (Color32*)((byte*)ptr4 - (nint)(int)Width * (nint)Unsafe.SizeOf<Color32>()); ptr3 = ptr4; ptr5 = (Color32*)((byte*)ptr4 + (nint)(int)ImageWidth * (nint)Unsafe.SizeOf<Color32>()); ptr6 = (Color32*)((byte*)ptr4 + (nint)num2 * (nint)Unsafe.SizeOf<Color32>()); if (ptr3 < ptr2) { break; } } } if (num11 != 65535 && num9 != 4096) { ptr10 = pIndicies[num11]; num19 = *(ptr10++); if (ptr7 + (int)num19 + 1 >= ptr) { ushort* ptr13 = pCodes; CodesLength *= 2; CodesHandle = Marshal.ReAllocHGlobal(CodesHandle, (IntPtr)(CodesLength * 2)); pCodes = (ushort*)CodesHandle.ToPointer(); ptr = pCodes + CodesLength; ptr7 = pCodes + (ptr7 - ptr13); for (int i = 0; i < num9; i++) { pIndicies[i] = pCodes + (pIndicies[i] - ptr13); } ptr10 = pIndicies[num11]; ptr10++; } pIndicies[num9++] = ptr7; *(ptr7++) = (ushort)(num19 + 1); Buffer.MemoryCopy(ptr10, ptr7, num19 * 2, num19 * 2); ptr7 += (int)num19; *(ptr7++) = num20; } if (num9 >= num5 && num4 < 12) { num5 = Pow2[++num4]; num12 = (uint)(num5 - 1); } num11 = num16; } SkipBlocks(); } } } } public static string Ident() { string text = "1.1"; string text2 = (BitConverter.IsLittleEndian ? "L" : "B"); string text3 = "M"; string text4 = "U"; string text5 = "2.0"; return text + " " + text2 + text4 + text3 + " " + text5; } } } namespace ImagePings { [BepInPlugin("pseudopulse.ImagePings", "ImagePings", "1.0.0")] public class ImagePings : BaseUnityPlugin { public const string PluginGUID = "pseudopulse.ImagePings"; public const string PluginAuthor = "pseudopulse"; public const string PluginName = "ImagePings"; public const string PluginVersion = "1.0.0"; public static ImagePings instance; public static string videoLocation; public static ManualLogSource ModLogger; public static GameObject GIFRenderer; public static GameObject VideoRenderer; public static GameObject ImageRenderer; public static Dictionary<string, ImageHandler> ImageCache = new Dictionary<string, ImageHandler>(); public void Awake() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Expected O, but got Unknown ModLogger = ((BaseUnityPlugin)this).Logger; instance = this; Chat.AddMessage_ChatMessageBase += new hook_AddMessage_ChatMessageBase(OnMessageSent); videoLocation = Assembly.GetExecutingAssembly().Location.Replace("ImagePings.dll", ""); ImageRenderer = PrefabAPI.InstantiateClone(new GameObject(), "IPImageRenderer", false); ImageRenderer.AddComponent<RawImage>(); ImageRenderer.AddComponent<Canvas>((Action<Canvas>)delegate(Canvas x) { x.renderMode = (RenderMode)2; ((Component)x).gameObject.layer = LayerIndex.uiWorldSpace.intVal; }); ImageRenderer.AddComponent<Billboard>(); GIFRenderer = PrefabAPI.InstantiateClone(new GameObject(), "IPGifRenderer", false); GIFRenderer.AddComponent<RawImage>(); GIFRenderer.AddComponent<GIFRenderer>(); GIFRenderer.AddComponent<Canvas>((Action<Canvas>)delegate(Canvas x) { x.renderMode = (RenderMode)2; ((Component)x).gameObject.layer = LayerIndex.uiWorldSpace.intVal; }); GIFRenderer.AddComponent<Billboard>(); VideoRenderer = PrefabAPI.InstantiateClone(new GameObject(), "IPVideoRenderer", false); VideoRenderer.AddComponent<VideoPlayer>(); VideoRenderer.AddComponent<RawImage>(); VideoRenderer.AddComponent<VideoRenderer>(); VideoRenderer.AddComponent<Canvas>((Action<Canvas>)delegate(Canvas x) { x.renderMode = (RenderMode)2; ((Component)x).gameObject.layer = LayerIndex.uiWorldSpace.intVal; }); VideoRenderer.AddComponent<Billboard>(); } private void OnMessageSent(orig_AddMessage_ChatMessageBase orig, ChatMessageBase message) { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) string text = IdentifyURL(message.ConstructChatString()); if (text != null) { try { Uri uRLFromString = GetURLFromString(text); if (uRLFromString != null && message is UserChatMessage) { ImageHandler imageHandler = null; ImageFormat format = CheckImageFormat(text); bool flag = false; NetworkUser component = ((UserChatMessage)((message is UserChatMessage) ? message : null)).sender.GetComponent<NetworkUser>(); Transform val = null; Vector3 zero = Vector3.zero; if (Object.op_Implicit((Object)(object)component.masterController) && Object.op_Implicit((Object)(object)component.masterController.pingerController) && component.masterController.pingerController.currentPing.active) { PingInfo currentPing = component.masterController.pingerController.currentPing; GameObject targetGameObject = ((PingInfo)(ref currentPing)).targetGameObject; val = ((targetGameObject != null) ? targetGameObject.transform : null) ?? null; zero = currentPing.origin; } else { val = component.GetCurrentBody().transform; zero = component.GetCurrentBody().corePosition; } if (ImageCache.ContainsKey(text)) { imageHandler = ImageCache[text]; } else { imageHandler = new ImageHandler(); RunCoro(imageHandler.Initialize(format, uRLFromString, new ImageHandler.SpawnInfo { target = val, offset = zero })); flag = true; ImageCache.Add(text, imageHandler); } if (!flag) { imageHandler.Instantiate(val, zero); } return; } } catch { } } orig.Invoke(message); } public static void RunCoro(IEnumerator coro) { ((MonoBehaviour)instance).StartCoroutine(coro); } public string IdentifyURL(string message) { message = message.Replace("<noparse>", "").Replace("</noparse>", "").Replace("</color>", ""); string[] array = message.Split(" "); string[] array2 = array; foreach (string text in array2) { if (Uri.IsWellFormedUriString(text, UriKind.RelativeOrAbsolute)) { return text; } } return null; } private Uri GetURLFromString(string text) { string[] array = text.Split(' '); foreach (string uriString in array) { if (Uri.IsWellFormedUriString(uriString, UriKind.RelativeOrAbsolute) && CheckImageFormat(text) != 0) { Uri uri = new Uri(uriString); if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) { return uri; } } } return null; } private ImageFormat CheckImageFormat(string text) { if (text.Contains(".png")) { return ImageFormat.PNG; } if (text.Contains(".jpg")) { return ImageFormat.JPG; } if (text.Contains(".mp4")) { return ImageFormat.MP4; } if (text.Contains(".gif")) { return ImageFormat.GIF; } return ImageFormat.Invalid; } } public class ImageHandler { public class SpawnInfo { public Transform target; public Vector3 offset; } [CompilerGenerated] private sealed class <Initialize>d__8 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ImageFormat format; public Uri uri; public SpawnInfo queuedSpawn; public ImageHandler <>4__this; private UnityWebRequest <req>5__1; private byte[] <data>5__2; private ImageFormat <>s__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Initialize>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <req>5__1 = null; <data>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Invalid comparison between Unknown and I4 //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.format = format; <>4__this.uri = uri; ImagePings.ModLogger.LogError((object)("initializing for: " + uri?.ToString() + " of format " + format)); <>4__this.fileName = Path.GetFileName(uri.AbsolutePath); <req>5__1 = UnityWebRequest.Get(uri); <req>5__1.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); <>2__current = <req>5__1.SendWebRequest(); <>1__state = 1; return true; case 1: { <>1__state = -1; if ((int)<req>5__1.result != 1) { ImagePings.ModLogger.LogError((object)("failed to download " + uri)); ManualLogSource modLogger = ImagePings.ModLogger; Result result = <req>5__1.result; modLogger.LogError((object)((object)(Result)(ref result)).ToString()); return false; } ImagePings.ModLogger.LogError((object)("received data of length " + <req>5__1.downloadHandler.data.Length)); <data>5__2 = <req>5__1.downloadHandler.data; ImageFormat imageFormat = format; <>s__3 = imageFormat; switch (<>s__3) { case ImageFormat.PNG: case ImageFormat.JPG: <>4__this.ProcessImage(<data>5__2); break; case ImageFormat.MP4: <>4__this.ProcessVideo(<data>5__2); break; case ImageFormat.GIF: <>4__this.ProcessGIF(<data>5__2); break; } if (queuedSpawn != null) { <>4__this.Instantiate(queuedSpawn.target, queuedSpawn.offset); } 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 ImageFormat format; public Uri uri; public string fileName; public Texture2D tex; public Uri videoURI; public string videoPath; public GifFrame[] frames; [IteratorStateMachine(typeof(<Initialize>d__8))] public IEnumerator Initialize(ImageFormat format, Uri uri, SpawnInfo queuedSpawn = null) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Initialize>d__8(0) { <>4__this = this, format = format, uri = uri, queuedSpawn = queuedSpawn }; } public void ProcessImage(byte[] data) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown tex = new Texture2D(0, 0); ImageConversion.LoadImage(tex, data); } public void ProcessVideo(byte[] data) { videoPath = Path.Combine(ImagePings.videoLocation, fileName); File.WriteAllBytes(videoPath, data); videoURI = new Uri(videoPath); } public void ProcessGIF(byte[] data) { List<GifFrame> list = new List<GifFrame>(); using (MG.GIF.Decoder decoder = new MG.GIF.Decoder(data)) { for (Image image = decoder.NextImage(); image != null; image = decoder.NextImage()) { GifFrame gifFrame = new GifFrame(); gifFrame.tex = image.CreateTexture(); gifFrame.frameTime = (float)image.Delay / 1000f; list.Add(gifFrame); } } frames = list.ToArray(); } public void Cleanup() { if (videoPath != null && File.Exists(videoPath)) { File.Delete(videoPath); } } public void Instantiate(CharacterBody target) { } public void Instantiate(Transform target, Vector3 offset) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_0124: 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) GameObject renderer = null; switch (format) { case ImageFormat.PNG: case ImageFormat.JPG: renderer = Object.Instantiate<GameObject>(ImagePings.ImageRenderer); if (Object.op_Implicit((Object)(object)target)) { renderer.transform.SetParent(target); } renderer.transform.position = offset; renderer.GetComponent<RawImage>().texture = (Texture)(object)tex; break; case ImageFormat.MP4: renderer = Object.Instantiate<GameObject>(ImagePings.VideoRenderer); if (Object.op_Implicit((Object)(object)target)) { renderer.transform.SetParent(target); } renderer.transform.position = offset; renderer.GetComponent<VideoRenderer>().uri = videoURI.ToString(); break; case ImageFormat.GIF: renderer = Object.Instantiate<GameObject>(ImagePings.GIFRenderer); if (Object.op_Implicit((Object)(object)target)) { renderer.transform.SetParent(target); } renderer.transform.position = offset; renderer.GetComponent<GIFRenderer>().frames = frames; break; } if (Object.op_Implicit((Object)(object)renderer)) { renderer.transform.localScale = new Vector3(0.08f, 0.08f, 0.08f); renderer.GetComponent<RectTransform>((Action<RectTransform>)delegate(RectTransform x) { //IL_000d: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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_002f: 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) Transform transform = renderer.transform; Vector3 localPosition = transform.localPosition; Bounds val = new Bounds(Vector3.zero, Vector2.op_Implicit(x.sizeDelta)); transform.localPosition = localPosition + new Vector3(0f, ((Bounds)(ref val)).extents.y / 2f * 0.25f, 0f); }); renderer.AddComponent<DestroyOnTimer>((Action<DestroyOnTimer>)delegate(DestroyOnTimer x) { x.duration = 5f; }); } } } public class VideoRenderer : MonoBehaviour { public string uri; public RenderTexture texture; public RawImage image; public DestroyOnTimer timer; public VideoPlayer player; public void Start() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown texture = new RenderTexture(256, 256, 16, (RenderTextureFormat)0); texture.Create(); player = ((Component)(object)this).GetComponent<VideoPlayer>((Action<VideoPlayer>)delegate(VideoPlayer x) { x.renderMode = (VideoRenderMode)2; x.targetTexture = texture; x.url = uri; }); image = ((Component)this).GetComponent<RawImage>(); image.texture = (Texture)(object)texture; timer = ((Component)this).GetComponent<DestroyOnTimer>(); } public void FixedUpdate() { if (Object.op_Implicit((Object)(object)player) && player.length != 0.0) { timer.duration = (float)player.length; } } } public class GIFRenderer : MonoBehaviour { public RawImage target; public GifFrame[] frames; public float stopwatch = 0f; public int index = 0; public GifFrame current; public void Start() { target = ((Component)this).GetComponent<RawImage>(); current = frames[0]; target.texture = (Texture)(object)current.tex; stopwatch = current.frameTime; } public void Update() { stopwatch -= Time.deltaTime; if (stopwatch <= 0f) { Advance(); } } public void Advance() { index++; if (index == frames.Length) { index = 0; } current = frames[index]; stopwatch = current.frameTime; target.texture = (Texture)(object)current.tex; } } public class GifFrame { public Texture2D tex; public float frameTime; } public enum ImageFormat { Invalid, PNG, MP4, JPG, GIF } [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] public class ConfigFieldAttribute : SearchableAttribute { public string name; public string desc; public object defaultValue; public ConfigFieldAttribute(string name, string desc, object defaultValue) { this.name = name; this.desc = desc; this.defaultValue = defaultValue; } } [AttributeUsage(AttributeTargets.Class)] public class ConfigSectionAttribute : Attribute { public string name; public ConfigSectionAttribute(string name) { this.name = name; } } public class ConfigManager { public static void HandleConfigAttributes(Assembly assembly, ConfigFile config) { //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Expected O, but got Unknown //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Expected O, but got Unknown //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Expected O, but got Unknown Type[] types = assembly.GetTypes(); foreach (Type type in types) { TypeInfo typeInfo = type.GetTypeInfo(); ConfigSectionAttribute customAttribute = typeInfo.GetCustomAttribute<ConfigSectionAttribute>(); if (customAttribute == null) { continue; } FieldInfo[] fields = typeInfo.GetFields((BindingFlags)(-1)); foreach (FieldInfo fieldInfo in fields) { if (!fieldInfo.IsStatic) { continue; } Type fieldType = fieldInfo.FieldType; ConfigFieldAttribute customAttribute2 = ((MemberInfo)fieldInfo).GetCustomAttribute<ConfigFieldAttribute>(); if (customAttribute2 != null) { MethodInfo methodInfo = (from x in typeof(ConfigFile).GetMethods() where x.Name == "Bind" select x).First(); methodInfo = methodInfo.MakeGenericMethod(fieldType); ConfigEntryBase val = (ConfigEntryBase)methodInfo.Invoke(config, new object[3] { (object)new ConfigDefinition(customAttribute.name, customAttribute2.name), customAttribute2.defaultValue, (object)new ConfigDescription(customAttribute2.desc, (AcceptableValueBase)null, Array.Empty<object>()) }); fieldInfo.SetValue(null, val.BoxedValue); } } } } } } namespace ImagePings.Utils { public class BasicLaserBeam { public float DamageCoefficient; public CharacterBody Owner; public Transform TargetMuzzle; private LineRenderer lr; public GameObject effectInstance; private bool firing = false; private float stopwatch = 0f; private float growthStopwatch = 0f; private float delay; private BasicLaserInfo info; private Transform origin; private Transform end; private Vector3 targetEndpoint; private float origWidth = 0f; public bool Active => firing; public BasicLaserBeam(CharacterBody owner, Transform muzzle, BasicLaserInfo info) { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) this.info = info; delay = 1f / info.TickRate; TargetMuzzle = muzzle; DamageCoefficient = info.DamageCoefficient * delay; effectInstance = Object.Instantiate<GameObject>(info.EffectPrefab, ((Component)muzzle).transform.position, Quaternion.identity); growthStopwatch = info.ChargeDelay; origin = (info.OriginIsBase ? effectInstance.transform : effectInstance.GetComponent<ChildLocator>().FindChild(info.OriginName)); end = effectInstance.GetComponent<ChildLocator>().FindChild(info.EndpointName); lr = effectInstance.GetComponent<DetachLineRendererAndFade>().line; origWidth = lr.widthMultiplier; Owner = owner; targetEndpoint = GetEndpoint(out var _); ((Component)end).transform.position = targetEndpoint; ((Component)origin).transform.position = ((Component)TargetMuzzle).transform.position; } public void Fire() { if (Object.op_Implicit((Object)(object)info.FiringMaterial)) { ((Renderer)lr).material = info.FiringMaterial; } lr.widthMultiplier = origWidth * info.FiringWidthMultiplier; firing = true; stopwatch = 0f; } public void UpdateVisual(float deltaTime) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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) ((Component)origin).transform.position = ((Component)TargetMuzzle).transform.position; ((Component)end).transform.position = Vector3.MoveTowards(((Component)end).transform.position, targetEndpoint, 250f * deltaTime); } public void Update(float deltaTime) { //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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown stopwatch += deltaTime; if (stopwatch >= delay) { targetEndpoint = GetEndpoint(out var unmodified); stopwatch = 0f; if (firing && ((NetworkBehaviour)Owner).hasAuthority) { GetBulletAttack().Fire(); if (Object.op_Implicit((Object)(object)info.ImpactEffect)) { EffectManager.SpawnEffect(info.ImpactEffect, new EffectData { origin = unmodified, scale = 1f }, false); } } } if (!firing) { growthStopwatch -= deltaTime; lr.widthMultiplier = Mathf.Max(0f, growthStopwatch / info.ChargeDelay); } } public Vector3 GetEndpoint(out Vector3 unmodified) { //IL_0026: 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) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((info.FiringMode == LaserFiringMode.TrackAim) ? Owner.inputBank.aimDirection : TargetMuzzle.forward); Vector3 val2 = ((info.FiringMode == LaserFiringMode.TrackAim) ? Owner.inputBank.aimOrigin : TargetMuzzle.position); Ray val3 = new Ray(val2, val); Vector3 point = ((Ray)(ref val3)).GetPoint(info.MaxRange); RaycastHit val4 = default(RaycastHit); if (Physics.Raycast(val2, val, ref val4, info.MaxRange, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask))) { point = ((RaycastHit)(ref val4)).point; } unmodified = point; return point + val * 5f; } public BulletAttack GetBulletAttack() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_005c: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) BulletAttack val = new BulletAttack(); val.radius = lr.startWidth * 0.75f; val.damage = Owner.damage * DamageCoefficient; val.origin = ((info.FiringMode == LaserFiringMode.TrackAim) ? Owner.inputBank.aimOrigin : TargetMuzzle.position); Vector3 val2 = ((Component)end).transform.position - TargetMuzzle.position; val.aimVector = ((Vector3)(ref val2)).normalized; val.procCoefficient = 1f; val.owner = ((Component)Owner).gameObject; val.falloffModel = (FalloffModel)0; val.isCrit = Util.CheckRoll(Owner.crit, Owner.master); val.stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask; return val; } public void Stop() { Object.Destroy((Object)(object)effectInstance); } } public class BasicLaserInfo { public GameObject EffectPrefab; public string OriginName = "Origin"; public string EndpointName = "End"; public bool OriginIsBase = true; public float TickRate = 20f; public float DamageCoefficient = 1f; public Material FiringMaterial; public float ChargeDelay = 0.5f; public float FiringWidthMultiplier = 2f; public LaserFiringMode FiringMode = LaserFiringMode.Straight; public float MaxRange = 60f; public GameObject ImpactEffect; } public enum LaserFiringMode { TrackAim, Straight } public class CoolerAntiGravityForce : MonoBehaviour { public float antiGravityCoefficient = -0.2f; public Func<float, float> lerpFunction = EaseInQuart; public float rampTime = 0.5f; private float stopwatch; private Rigidbody rb; public void Start() { rb = ((Component)this).GetComponent<Rigidbody>(); } public void FixedUpdate() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) stopwatch += Time.fixedDeltaTime; float num = lerpFunction(Mathf.Clamp(stopwatch, 0f, rampTime) / rampTime); rb.AddForce(-Physics.gravity * Mathf.Lerp(0f, antiGravityCoefficient, num), (ForceMode)5); } public static float EaseInQuad(float x) { return x * x; } public static float EaseInQuart(float x) { return x * x * x * x; } } public abstract class CoolerBasicMeleeAttack : BasicMeleeAttack { public abstract float BaseDuration { get; } public abstract float DamageCoefficient { get; } public abstract string HitboxName { get; } public abstract GameObject HitEffectPrefab { get; } public abstract float ProcCoefficient { get; } public abstract float HitPauseDuration { get; } public abstract GameObject SwingEffectPrefab { get; } public abstract string MuzzleString { get; } public virtual string MechanimHitboxParameter { get; } public virtual bool ScaleHitPauseDurationWithAttackSpeed { get; } = true; public virtual Func<bool> AlternateActiveParameter { get; } = () => true; public override void OnEnter() { base.baseDuration = BaseDuration; base.damageCoefficient = DamageCoefficient; base.hitBoxGroupName = HitboxName; base.hitEffectPrefab = HitEffectPrefab; base.procCoefficient = ProcCoefficient; base.hitPauseDuration = HitPauseDuration; base.swingEffectPrefab = SwingEffectPrefab; base.swingEffectMuzzleString = MuzzleString; if (MechanimHitboxParameter != null) { base.mecanimHitboxActiveParameter = MechanimHitboxParameter; } base.scaleHitPauseDurationAndVelocityWithAttackSpeed = ScaleHitPauseDurationWithAttackSpeed; ((BasicMeleeAttack)this).OnEnter(); } public override void FixedUpdate() { ((EntityState)this).fixedAge = ((EntityState)this).fixedAge + Time.fixedDeltaTime; if (string.IsNullOrEmpty(MechanimHitboxParameter) && AlternateActiveParameter()) { ((BasicMeleeAttack)this).BeginMeleeAttackEffect(); } else if (base.animator.GetFloat(MechanimHitboxParameter) >= 0.5f) { ((BasicMeleeAttack)this).BeginMeleeAttackEffect(); } if (((EntityState)this).isAuthority) { ((BasicMeleeAttack)this).AuthorityFixedUpdate(); } } } [RequireComponent(typeof(InputBankTest))] [RequireComponent(typeof(CharacterBody))] public abstract class Tracker : MonoBehaviour { public Transform target; public Indicator indicator; public GameObject targetingIndicatorPrefab; private float stopwatch = 0f; public float searchDelay = 0.1f; public float maxSearchAngle = 40f; public float maxSearchDistance = 60f; public bool isActive = true; public InputBankTest inputBank; public CharacterBody body; public Func<bool> isActiveCallback = DefaultIsActiveCallback; public float minDot => Mathf.Cos(Mathf.Clamp(maxSearchAngle, 0f, 180f) * (MathF.PI / 180f)); private static bool DefaultIsActiveCallback() { return true; } public virtual void Start() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown indicator = new Indicator(((Component)this).gameObject, targetingIndicatorPrefab); body = ((Component)this).GetComponent<CharacterBody>(); inputBank = ((Component)this).GetComponent<InputBankTest>(); } public virtual void OnDestroy() { if (indicator != null) { indicator.DestroyVisualizer(); } } public virtual void OnEnable() { if (indicator != null) { indicator.active = DefaultIsActiveCallback(); } } public virtual void OnDisable() { if (indicator != null) { indicator.active = false; } } public virtual void FixedUpdate() { if (indicator != null && !DefaultIsActiveCallback()) { indicator.active = false; return; } if (indicator != null && !Object.op_Implicit((Object)(object)target)) { indicator.active = false; } if (indicator != null && Object.op_Implicit((Object)(object)target)) { indicator.active = true; } stopwatch += Time.fixedDeltaTime; if (stopwatch >= searchDelay) { stopwatch = 0f; target = SearchForTarget(); if (Object.op_Implicit((Object)(object)target) && indicator != null) { indicator.targetTransform = target; } } } public abstract Transform SearchForTarget(); } public class HurtboxTracker : Tracker { public enum TargetType { Enemy, Friendly, All } public TeamIndex userIndex; public TargetType targetType; public CharacterBody targetBody; public override void Start() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) base.Start(); userIndex = body.teamComponent.teamIndex; } public override Transform SearchForTarget() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_000e: 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) //IL_0017: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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_00b0: Unknown result type (might be due to invalid IL or missing references) BullseyeSearch val = new BullseyeSearch(); Ray aimRay = inputBank.GetAimRay(); val.searchDirection = ((Ray)(ref aimRay)).direction; val.searchOrigin = ((Component)this).transform.position; val.maxDistanceFilter = maxSearchDistance; val.maxAngleFilter = maxSearchAngle; TeamMask teamMaskFilter = TeamMask.all; switch (targetType) { case TargetType.Enemy: ((TeamMask)(ref teamMaskFilter)).RemoveTeam(userIndex); break; case TargetType.Friendly: teamMaskFilter = TeamMask.none; ((TeamMask)(ref teamMaskFilter)).AddTeam(userIndex); break; case TargetType.All: teamMaskFilter = TeamMask.all; break; } val.teamMaskFilter = teamMaskFilter; val.filterByLoS = true; val.sortMode = (SortMode)2; val.RefreshCandidates(); val.FilterOutGameObject(((Component)this).gameObject); IEnumerable<HurtBox> source = from x in val.GetResults() where Filter(x) select x; HurtBox? obj = source.FirstOrDefault(); Transform val2 = ((obj != null) ? ((Component)obj).transform : null) ?? null; if (Object.op_Implicit((Object)(object)val2)) { targetBody = ((Component)val2).GetComponent<HurtBox>().healthComponent.body; } else { targetBody = null; } return val2; } public virtual bool Filter(HurtBox box) { return true; } } public class ComponentTracker<T> : Tracker where T : Component { public Func<T, bool> validFilter = DefaultFilter; private static bool DefaultFilter(T t) { return true; } public override Transform SearchForTarget() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) T[] array = Object.FindObjectsOfType<T>(); foreach (T val in array) { if (validFilter(val) && !(Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position) > maxSearchDistance)) { Ray aimRay = inputBank.GetAimRay(); Vector3 direction = ((Ray)(ref aimRay)).direction; Vector3 val2 = ((Component)val).transform.position - ((Component)this).transform.position; float num = Vector3.Dot(direction, ((Vector3)(ref val2)).normalized); if (!(num < base.minDot)) { return ((Component)val).transform; } } } return null; } } public class CallNetworkedMethod : INetMessage, ISerializableObject { private GameObject obj; private string method; private uint id; public CallNetworkedMethod(GameObject obj, string method) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) this.obj = obj; this.method = method; NetworkInstanceId netId = obj.GetComponent<NetworkIdentity>().netId; id = ((NetworkInstanceId)(ref netId)).Value; } public void Serialize(NetworkWriter writer) { writer.Write(id); writer.Write(method); } public void Deserialize(NetworkReader reader) { id = reader.ReadUInt32(); method = reader.ReadString(); } public void OnReceived() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) obj = Util.FindNetworkObject(new NetworkInstanceId(id)); if (Object.op_Implicit((Object)(object)obj)) { obj.SendMessage(method, (SendMessageOptions)1); } } public CallNetworkedMethod() { } } public class LockLocalTransform : MonoBehaviour { public Vector3 Position; public Vector3 Rotation; public Vector3 Scale; public void LateUpdate() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localPosition = Position; ((Component)this).transform.localRotation = Quaternion.Euler(Rotation); ((Component)this).transform.localScale = Scale; } } public class ConfigOption<T> { private ConfigEntry<T> Bind; public ConfigOption(ConfigFile config, string categoryName, string configOptionName, T defaultValue, string fullDescription) { Bind = config.Bind<T>(categoryName, configOptionName, defaultValue, fullDescription); } public static implicit operator T(ConfigOption<T> x) { return x.Bind.Value; } public override string ToString() { return Bind.Value.ToString(); } } public static class DamageColourHelper { [CompilerGenerated] private static class <>O { public static hook_FindColor <0>__DamageColor_FindColor; } public static List<DamageColorIndex> registeredColorIndicies = new List<DamageColorIndex>(); internal static void Init() { //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_001c: Expected O, but got Unknown object obj = <>O.<0>__DamageColor_FindColor; if (obj == null) { hook_FindColor val = DamageColor_FindColor; <>O.<0>__DamageColor_FindColor = val; obj = (object)val; } DamageColor.FindColor += (hook_FindColor)obj; } private static Color DamageColor_FindColor(orig_FindColor orig, DamageColorIndex colorIndex) { //IL_0006: 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_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_0015: 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_0028: Unknown result type (might be due to invalid IL or missing references) if (registeredColorIndicies.Contains(colorIndex)) { return DamageColor.colors[colorIndex]; } return orig.Invoke(colorIndex); } public static DamageColorIndex RegisterDamageColor(Color color) { //IL_000b: 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) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) int num = DamageColor.colors.Length; DamageColorIndex val = (DamageColorIndex)(byte)num; ArrayUtils.ArrayAppend<Color>(ref DamageColor.colors, ref color); registeredColorIndicies.Add(val); return val; } } public static class EventRaiser { private static readonly BindingFlags ALL = (BindingFlags)(-1); public static void RaiseEvent(this object instance, string eventName, params object[] e) { Type type = instance.GetType(); FieldInfo field = type.GetField(eventName, ALL); if (field == null) { throw new Exception("Event with name " + eventName + " could not be found."); } if (field.GetValue(instance) is MulticastDelegate multicastDelegate) { Delegate[] invocationList = multicastDelegate.GetInvocationList(); List<object> list = new List<object>(); for (int i = 0; i < e.Length; i++) { list.Add(e[i]); } object[] args = list.ToArray(); Delegate[] array = invocationList; foreach (Delegate @delegate in array) { @delegate.DynamicInvoke(args); } } } } public static class CharacterExtensions { public static bool HasSkillEquipped(this CharacterBody body, SkillDef skill) { GenericSkill[] components = ((Component)body).GetComponents<GenericSkill>(); foreach (GenericSkill val in components) { if ((Object)(object)val.skillDef == (Object)(object)skill) { return true; } } return false; } public static void ClearInventory(this CharacterBody body) { //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_003c: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)body.inventory)) { return; } List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in body.inventory.itemAcquisitionOrder) { ItemDef itemDef = ItemCatalog.GetItemDef(item); list.Add(itemDef); } foreach (ItemDef item2 in list) { body.inventory.RemoveItem(item2, body.inventory.GetItemCount(item2)); } } public static void ClearInventory(this CharacterBody body, bool hidden) { //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_003c: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)body.inventory)) { return; } List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in body.inventory.itemAcquisitionOrder) { ItemDef itemDef = ItemCatalog.GetItemDef(item); if (hidden) { list.Add(itemDef); } else if (!itemDef.hidden) { list.Add(itemDef); } } foreach (ItemDef item2 in list) { body.inventory.RemoveItem(item2, body.inventory.GetItemCount(item2)); } } public static void StartParticles(this ChildLocator loc, string system, bool withChildren = true) { ((Component)loc.FindChild(system)).GetComponent<ParticleSystem>().Play(withChildren); } public static void StopParticles(this ChildLocator loc, string system, bool withChildren = true) { ((Component)loc.FindChild(system)).GetComponent<ParticleSystem>().Stop(withChildren); } } public static class EnumeratorExtensions { public static T GetRandom<T>(this IEnumerable<T> self) { return self.ElementAt(Random.Range(0, self.Count())); } public static T GetRandom<T>(this IEnumerable<T> self, Xoroshiro128Plus rng) { return self.ElementAt(rng.RangeInt(0, self.Count())); } public static T GetRandom<T>(this IEnumerable<T> self, Func<T, bool> predicate) { try { return self.Where(predicate).ElementAt(Random.Range(0, self.Count())); } catch { return default(T); } } public static T GetRandom<T>(this IEnumerable<T> self, Xoroshiro128Plus rng, Func<T, bool> predicate) { try { return self.Where(predicate).ElementAt(rng.RangeInt(0, self.Count())); } catch { return default(T); } } } public static class StringExtensions { public static string Add(this string str, string text) { LanguageAPI.Add(str, text); return str; } public static void AddOverlay(this string str, string text) { LanguageAPI.AddOverlay(str, text); } public static T Load<T>(this string str) { //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) try { return Addressables.LoadAssetAsync<T>((object)str).WaitForCompletion(); } catch { return default(T); } } public static string RemoveUnsafeCharacters(this string str) { string[] array = new string[17] { "\n", "'", " ", "!", "`", "&", "-", ")", "(", "{", "}", "|", "@", "<", ">", ".", "\\" }; string text = str; string[] array2 = array; foreach (string oldValue in array2) { text = text.Replace(oldValue, ""); } return text; } public static string RemoveUnsafeCharacters(this string str, string[] unsafeChars) { string text = str; foreach (string oldValue in unsafeChars) { text = text.Replace(oldValue, ""); } return text; } public static string AutoFormat(this string str) { return Formatter.FormatString(str); } } internal class Formatter { internal struct Format { public string match; public string expanded; } private static List<Format> formats = new List<Format> { new Format { match = "$su", expanded = "<style=cIsUtility>" }, new Format { match = "$sd", expanded = "<style=cIsDamage>" }, new Format { match = "$ss", expanded = "<style=cStack>" }, new Format { match = "$sr", expanded = "<style=cDeath>" }, new Format { match = "$sh", expanded = "<style=cIsHealing>" }, new Format { match = "$se", expanded = "</style>" }, new Format { match = "$rc", expanded = "<color=#36D7A9>" }, new Format { match = "$ec", expanded = "</color>" }, new Format { match = "$pc", expanded = "<color=#406096>" }, new Format { match = "$sv", expanded = "<style=cIsVoid>" }, new Format { match = "$lc", expanded = "<color=#FF7F7F>" } }; internal static string FormatString(string str) { foreach (Format format in formats) { str = str.Replace(format.match, format.expanded); } return str; } } public static class UnityExtensions { public static void RemoveComponent<T>(this GameObject self) where T : Component { Object.Destroy((Object)(object)self.GetComponent<T>()); } public static void RemoveComponents<T>(this GameObject self) where T : Component { T[] components = self.GetComponents<T>(); for (int i = 0; i < components.Length; i++) { Object.Destroy((Object)(object)components[i]); } } public static void CallNetworkedMethod(this GameObject self, string method, NetworkDestination dest = 1) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) NetMessageExtensions.Send((INetMessage)(object)new CallNetworkedMethod(self, method), dest); } public static T FindComponent<T>(this GameObject self, string name) where T : Component { return self.GetComponentsInChildren<T>().FirstOrDefault((T x) => ((Object)((Component)x).gameObject).name == name); } public static void RemoveComponent<T>(this Component self) where T : Component { Object.Destroy((Object)(object)self.GetComponent<T>()); } public static void RemoveComponents<T>(this Component self) where T : Component { T[] components = self.GetComponents<T>(); for (int i = 0; i < components.Length; i++) { Object.Destroy((Object)(object)components[i]); } } public static T AddComponent<T>(this Component self) where T : Component { return self.gameObject.AddComponent<T>(); } public static T AddComponent<T>(this Component self, Action<T> modification) where T : Component { T val = self.gameObject.AddComponent<T>(); modification(val); return val; } public static T GetComponent<T>(this Component self, Action<T> modification) where T : Component { T component = self.gameObject.GetComponent<T>(); modification(component); return component; } public static T AddComponent<T>(this GameObject self, Action<T> modification) where T : Component { T val = self.AddComponent<T>(); modification(val); return val; } public static T GetComponent<T>(this GameObject self, Action<T> modification) where T : Component { T component = self.GetComponent<T>(); modification(component); return component; } public static void EditComponent<T>(this Component self, Action<T> modification) where T : Component { T component = self.GetComponent<T>(); modification(component); } public static void EditComponent<T>(this GameObject self, Action<T> modification) where T : Component { T component = self.GetComponent<T>(); modification(component); } public static Sprite MakeSprite(this Texture2D self) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) return Sprite.Create(new Rect(0f, 0f, 512f, 512f), new Vector2(256f, 256f), 1f, self); } public static Vector3 Nullify(this Vector3 v, bool x = false, bool y = false, bool z = false) { //IL_0004: 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) //IL_0024: 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_0036: 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) return new Vector3(x ? 0f : v.x, y ? 0f : v.y, z ? 0f : v.z); } } public static class Keywords { public static string Poison = "KEYWORD_POISON"; public static string Regenerative = "KEYWORD_RAPID_REGEN"; public static string Agile = "KEYWORD_AGILE"; public static string HealthCost = "KEYWORD_PERCENT_HP"; public static string Disperse = "KEYWORD_SONIC_BOOM"; public static string Weak = "KEYWORD_WEAK"; public static string Heavy = "KEYWORD_HEAVY"; public static string Freeze = "KEYWORD_FREEZING"; public static string Stun = "KEYWORD_STUNNING"; public static string Expose = "KEYWORD_EXPOSE"; public static string Shock = "KEYWORD_SHOCKING"; public static string Slayer = "KEYWORD_SLAYER"; public static string Hemorrhage = "KEYWORD_SUPERBLEED"; public static string Ignite = "KEYWORD_IGNITE"; public static string Weakpoint = "KEYWORD_WEAKPOINT"; public static string ActiveReload = "KEYWORD_ACTIVERELOAD"; public static string VoidCorruption = "KEYWORD_VOIDCORRUPTION"; } public static class MathHelpers { public static string FloatToPercentageString(float number, float numberBase = 100f) { return (number * numberBase).ToString("##0") + "%"; } public static Vector3 ClosestPointOnSphereToPoint(Vector3 origin, float radius, Vector3 targetPosition) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) Vector3 val = targetPosition - origin; val = Vector3.Normalize(val); val *= radius; return origin + val; } public static List<Vector3> DistributePointsEvenlyAroundSphere(int points, float radius, Vector3 origin) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) List<Vector3> list = new List<Vector3>(); double num = Math.PI * (3.0 - Math.Sqrt(5.0)); for (int i = 0; i < points; i++) { int num2 = 1 - i / (points - 1) * 2; double num3 = Math.Sqrt(1 - num2 * num2); double num4 = num * (double)i; float num5 = (float)(Math.Cos(num4) * num3); float num6 = (float)(Math.Sin(num4) * num3); Vector3 val = origin + new Vector3(num5, (float)num2, num6); list.Add(val * radius); } return list; } public static List<Vector3> DistributePointsEvenlyAroundCircle(int points, float radius, Vector3 origin, float angleOffset = 0f) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) List<Vector3> list = new List<Vector3>(); Vector3 item = default(Vector3); for (int i = 0; i < points; i++) { double num = Math.PI * 2.0 / (double)points; double num2 = num * (double)i + (double)angleOffset; ((Vector3)(ref item))..ctor((float)((double)radius * Math.Cos(num2) + (double)origin.x), origin.y, (float)((double)radius * Math.Sin(num2) + (double)origin.z)); list.Add(item); } return list; } public static Vector3 GetPointOnUnitSphereCap(Quaternion targetDirection, float angle) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) float num = Random.Range(0f, angle) * (MathF.PI / 180f); Vector2 insideUnitCircle = Random.insideUnitCircle; Vector2 val = ((Vector2)(ref insideUnitCircle)).normalized * Mathf.Sin(num); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(val.x, val.y, Mathf.Cos(num)); return targetDirection * val2; } public static Vector3 GetPointOnUnitSphereCap(Vector3 targetDirection, float angle) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) return GetPointOnUnitSphereCap(Quaternion.LookRotation(targetDirection), angle); } public static Vector3 RandomPointOnCircle(Vector3 origin, float radius, Xoroshiro128Plus random) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) float num = random.RangeFloat(0f, MathF.PI * 2f); return origin + new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)) * radius; } public static float InverseHyperbolicScaling(float baseValue, float additionalValue, float maxValue, int itemCount) { return baseValue + (maxValue - baseValue) * (1f - 1f / (1f + additionalValue * (float)(itemCount - 1))); } public static float CustomHyperbolic(float amplificationPercentage, float max = 100f) { return (1f - max / (max + amplificationPercentage)) * max; } } public static class MiscUtils { public static bool HasUnlockable(NetworkUser networkUser, UnlockableDef unlockableDef) { if (!Object.op_Implicit((Object)(object)networkUser)) { return true; } LocalUser localUser = networkUser.localUser; if (localUser != null) { return localUser.userProfile.HasUnlockable(unlockableDef.cachedName); } return networkUser.unlockables.Contains(UnlockableCatalog.GetUnlockableDef(unlockableDef.cachedName)); } public static Vector3? RaycastToDirection(Vector3 position, float maxDistance, Vector3 direction, int layer) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (Physics.Raycast(new Ray(position, direction), ref val, maxDistance, layer, (QueryTriggerInteraction)1)) { return ((RaycastHit)(ref val)).point; } return null; } public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> toShuffle, Xoroshiro128Plus random) { List<T> list = new List<T>(); foreach (T item in toShuffle) { list.Insert(random.RangeInt(0, list.Count + 1), item); } return list; } public static Vector3 FindClosestNodeToPosition(Vector3 position, HullClassification hullClassification, bool checkAirNodes = false) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) NodeGraph val = (checkAirNodes ? SceneInfo.instance.airNodes : SceneInfo.instance.groundNodes); NodeIndex val2 = val.FindClosestNode(position, hullClassification, float.PositiveInfinity); if (val2 != NodeIndex.invalid) { Vector3 result = default(Vector3); val.GetNodePosition(val2, ref result); return result; } return Vector3.zero; } public static bool TeleportBody(CharacterBody characterBody, GameObject target, GameObject teleportEffect, HullClassification hullClassification, Xoroshiro128Plus rng, float minDistance = 20f, float maxDistance = 45f, bool teleportAir = false) { //IL_001d: 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) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)characterBody)) { return false; } SpawnCard val = ScriptableObject.CreateInstance<SpawnCard>(); val.hullSize = hullClassification; val.nodeGraphType = (GraphType)(teleportAir ? 1 : 0); val.prefab = Resources.Load<GameObject>("SpawnCards/HelperPrefab"); GameObject val2 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(val, new DirectorPlacementRule { placementMode = (PlacementMode)1, position = target.transform.position, minDistance = minDistance, maxDistance = maxDistance }, rng)); if (Object.op_Implicit((Object)(object)val2)) { TeleportHelper.TeleportBody(characterBody, val2.transform.position); if (Object.op_Implicit((Object)(object)teleportEffect)) { EffectManager.SimpleEffect(teleportEffect, val2.transform.position, Quaternion.identity, true); } Object.Destroy((Object)(object)val2); Object.Destroy((Object)(object)val); return true; } Object.Destroy((Object)(object)val); return false; } public static Vector3? AboveTargetVectorFromDamageInfo(DamageInfo damageInfo, float distanceAboveTarget) { //IL_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_005a: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) if (damageInfo.rejected || !Object.op_Implicit((Object)(object)damageInfo.attacker)) { return null; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { TeamMask enemyTeams = TeamMask.GetEnemyTeams(component.teamComponent.teamIndex); HurtBox val = new SphereSearch { radius = 1f, mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask, origin = damageInfo.position }.RefreshCandidates().FilterCandidatesByHurtBoxTeam(enemyTeams).OrderCandidatesByDistance() .FilterCandidatesByDistinctHurtBoxEntities() .GetHurtBoxes() .FirstOrDefault(); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body)) { CharacterBody body = val.healthComponent.body; Vector3 val2 = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f)); Vector3? val3 = RaycastToDirection(val2, distanceAboveTarget, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); if (val3.HasValue) { return val3.Value; } return val2 + Vector3.up * distanceAboveTarget; } } return null; } public static Vector3? AboveTargetBody(CharacterBody body, float distanceAbove) { //IL_0030: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)body)) { return null; } Vector3 val = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f)); Vector3? val2 = RaycastToDirection(val, distanceAbove, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); if (val2.HasValue) { return val2.Value; } return val + Vector3.up * distanceAbove; } public static Dictionary<string, Vector3> GetAimSurfaceAlignmentInfo(Ray ray, int layerMask, float distance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_002d: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) Dictionary<string, Vector3> dictionary = new Dictionary<string, Vector3>(); RaycastHit val = default(RaycastHit); if (!Physics.Raycast(ray, ref val, distance, layerMask, (QueryTriggerInteraction)1)) { return null; } Vector3 point = ((RaycastHit)(ref val)).point; Vector3 val2 = Vector3.Cross(((Ray)(ref ray)).direction, Vector3.up); Vector3 val3 = Vector3.ProjectOnPlane(((RaycastHit)(ref val)).normal, val2); Vector3 value = Vector3.Cross(val2, val3); dictionary.Add("Position", point); dictionary.Add("Right", val2); dictionary.Add("Forward", value); dictionary.Add("Up", val3); return dictionary; } public static FireProjectileInfo GetProjectile(GameObject prefab, float coeff, CharacterBody owner, DamageTypeCombo? damageTypeCombo = null) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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_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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) FireProjectileInfo val = default(FireProjectileInfo); val.damage = owner.damage * coeff; val.crit = owner.RollCrit(); val.projectilePrefab = prefab; val.owner = ((Component)owner).gameObject; val.position = owner.corePosition; val.rotation = Util.QuaternionSafeLookRotation(owner.inputBank.aimDirection); FireProjectileInfo result = val; if (damageTypeCombo.HasValue) { result.damageTypeOverride = damageTypeCombo; } return result; } public static Vector3? GroundPoint(this Vector3 point) { //IL_0001: 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_0011: Unknown result type (might be due to invalid IL or missing references) return RaycastToDirection(point, float.PositiveInfinity, Vector3.down, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); } public static Tuple<Vector3?, Vector3?> GroundPointWithNormal(this 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_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_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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) RaycastHit val = default(RaycastHit); if (Physics.Raycast(point + Vector3.up * 20f, Vector3.down, ref val, 4000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask))) { return new Tuple<Vector3?, Vector3?>(((RaycastHit)(ref val)).point, ((RaycastHit)(ref val)).normal); } return new Tuple<Vector3?, Vector3?>(null, null); } public static void DeformPoint(Vector3 pos, float radius = 5f, float depth = 3f) { //IL_0001: 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_0052: Unknown result type (might be due to invalid IL or missing references) Collider[] array = Physics.OverlapSphere(pos, radius, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)); MeshFilter val2 = default(MeshFilter); foreach (Collider val in array) { if (val is MeshCollider && ((Component)val).TryGetComponent<MeshFilter>(ref val2) && val2.mesh.isReadable) { DeformCollider(pos, radius, depth, val2, (MeshCollider)(object)((val is MeshCollider) ? val : null)); } } } public static void DeformCollider(Vector3 pos, float radius, float depth, MeshFilter filter, MeshCollider collider) { //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_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_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) if (!filter.mesh.isReadable) { return; } Matrix4x4 localToWorld = ((Component)filter).transform.localToWorldMatrix; Matrix4x4 worldToLocal = ((Component)filter).transform.worldToLocalMatrix; Vector3[] verts = (Vector3[])(object)new Vector3[filter.mesh.vertices.Length]; Vector3[] original = filter.mesh.vertices; List<Color> colors = new List<Color>(); filter.mesh.GetColors(colors); Parallel.For(0, verts.Length, delegate(int i, ParallelLoopState state) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_001a: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: 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_004a: 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_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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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) Vector3 val = original[i]; Vector3 val2 = ((Matrix4x4)(ref localToWorld)).MultiplyPoint3x4(val); float num = Vector3.Distance(val2, pos); if (num <= radius) { float num2 = 1f - num / radius; val2 += Vector3.down * depth * num2; colors[i] = Color.Lerp(colors[i], Color.red, num2); } verts[i] = ((Matrix4x4)(ref worldToLocal)).MultiplyPoint3x4(val2); }); filter.mesh.SetVertices(verts.ToList()); filter.mesh.SetColors(colors); collider.sharedMesh = filter.mesh; } public static Vector3[] GetSafePositionsWithinDistance(Vector3 center, float distance) { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_004d: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)SceneInfo.instance) && Object.op_Implicit((Object)(object)SceneInfo.instance.groundNodes)) { NodeGraph groundNodes = SceneInfo.instance.groundNodes; List<Vector3> list = new List<Vector3>(); Node[] nodes = groundNodes.nodes; foreach (Node val in nodes) { if (Vector3.Distance(val.position, center) <= distance) { list.Add(val.position); } } return list.ToArray(); } return (Vector3[])(object)new Vector3[1] { center }; } internal static void GetSafePositionsWithinDistance() { throw new NotImplementedException(); } } public class LazyAddressable<T> where T : Object { private Func<T> func; private T asset = default(T); public T Asset { get { if (!Object.op_Implicit((Object)(object)asset)) { asset = func(); } return asset; } } public LazyAddressable(Func<T> func) { this.func = func; } public static implicit operator T(LazyAddressable<T> addressable) { return addressable.Asset; } } public class LazyIndex { private string target; private BodyIndex _value = (BodyIndex)(-1); public BodyIndex Value => UpdateValue(); public LazyIndex(string target) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) this.target = target; } public BodyIndex UpdateValue() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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) if ((int)_value == -1 || (int)_value == -1) { _value = BodyCatalog.FindBodyIndex(target); } return _value; } public static implicit operator BodyIndex(LazyIndex index) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return index.Value; } } public static class NetworkingHelpers { public static T GetObjectFromNetIdValue<T>(uint netIdValue) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) NetworkInstanceId key = default(NetworkInstanceId); ((NetworkInstanceId)(ref key))..ctor(netIdValue); NetworkIdentity value = null; if (NetworkServer.active) { NetworkServer.objects.TryGetValue(key, out value); } else { ClientScene.objects.TryGetValue(key, out value); } if (Object.op_Implicit((Object)(object)value)) { T component = ((Component)value).GetComponent<T>(); if (component != null) { return component; } } return default(T); } } public static class Events { public static uint Play_item_proc_TransferDebuffOnHit_applyToEnemy = 3512537690u; public static uint Play_item_proc_TransferDebuff