using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using HarmonyLib; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using Mirror; using UnityEngine; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("BigDart")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BigDart")] [assembly: AssemblyTitle("BigDart")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BigDart { internal static class DartConfig { internal static ConfigEntry SmokeKey; internal static ConfigEntry SpeedMultiplier; internal static ConfigEntry BuffDurationSeconds; internal static ConfigEntry DebugLog; internal static void Init(ConfigFile config) { SmokeKey = config.Bind("Smoking", "SmokeKey", (KeyCode)99, "press to light a dart, press again to stub it out"); SpeedMultiplier = config.Bind("Buff", "SpeedMultiplier", 1.2f, "movement speed multiplier while the dart buzz lasts"); BuffDurationSeconds = config.Bind("Buff", "BuffDurationSeconds", 600f, "how long the speed boost lasts after lighting up (seconds)"); DebugLog = config.Bind("Debug", "DebugLog", false, "Debugging"); } } public sealed class DartController : MonoBehaviour { private const float HeartbeatSeconds = 15f; private const float AttachRetrySeconds = 1f; private static bool _localSmoking; private static uint _localNetId; private static float _nextHeartbeatAt; private static readonly Dictionary _instances = new Dictionary(); private static readonly HashSet _desired = new HashSet(); private static readonly Dictionary _nextAttachTry = new Dictionary(); private static readonly List _scratch = new List(); public DartController(IntPtr ptr) : base(ptr) { } private void Update() { if (!NetworkClient.active && !NetworkServer.active) { ResetAll(); return; } HandleInput(); PlayerCharacter val = FindLocalPlayer(); TickLocal(val); TickInstances(); SpeedBuff.Tick(val); } private void HandleInput() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(DartConfig.SmokeKey.Value)) { if (_localSmoking) { StopSmokingLocal(); } else { StartSmokingLocal(); } } } private void StartSmokingLocal() { _localSmoking = true; PlayerCharacter val = FindLocalPlayer(); SpeedBuff.StartOrRefresh(val); if (IsAlive(val)) { _localNetId = ((NetworkBehaviour)val.playerNetworking).netId; DartNet.SendSetSmoking(_localNetId, smoking: true); SetSmokingState(_localNetId, smoking: true); } _nextHeartbeatAt = Time.time + 15f; if (DartConfig.DebugLog.Value) { Plugin.Logger.LogInfo((object)"BigDart: lit one up"); } } private void StopSmokingLocal() { _localSmoking = false; PlayerCharacter val = FindLocalPlayer(); if (IsAlive(val)) { _localNetId = ((NetworkBehaviour)val.playerNetworking).netId; } if (_localNetId != 0) { DartNet.SendSetSmoking(_localNetId, smoking: false); SetSmokingState(_localNetId, smoking: false); } if (DartConfig.DebugLog.Value) { Plugin.Logger.LogInfo((object)"BigDart: stubbed it out"); } } private void TickLocal(PlayerCharacter local) { if (_localSmoking && IsAlive(local)) { uint netId = ((NetworkBehaviour)local.playerNetworking).netId; if (netId != _localNetId) { _localNetId = netId; DartNet.SendSetSmoking(netId, smoking: true); SetSmokingState(netId, smoking: true); } if (Time.time >= _nextHeartbeatAt) { _nextHeartbeatAt = Time.time + 15f; DartNet.SendSetSmoking(_localNetId, smoking: true); } } } internal static void SetSmokingState(uint netId, bool smoking) { if (smoking) { _desired.Add(netId); return; } _desired.Remove(netId); if (_instances.TryGetValue(netId, out var value)) { DartVisual.Detach(value); _instances.Remove(netId); } } private void TickInstances() { //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown _scratch.Clear(); foreach (uint item in _desired) { _scratch.Add(item); } bool flag = default(bool); for (int i = 0; i < _scratch.Count; i++) { uint num = _scratch[i]; if ((_instances.TryGetValue(num, out var value) && !DartVisual.IsGone(value)) || (_nextAttachTry.TryGetValue(num, out var value2) && Time.time < value2)) { continue; } _nextAttachTry[num] = Time.time + 1f; PlayerCharacter pc = FindPlayerByNetId(num); if (!IsAlive(pc)) { continue; } DartInstance dartInstance = DartVisual.Attach(pc); if (dartInstance == null) { continue; } _instances[num] = dartInstance; if (DartConfig.DebugLog.Value) { ManualLogSource logger = Plugin.Logger; BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(23, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: dart on netId "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(num); } logger.LogInfo(val); } } _scratch.Clear(); foreach (KeyValuePair instance in _instances) { if (DartVisual.IsGone(instance.Value)) { DartVisual.Detach(instance.Value); _scratch.Add(instance.Key); } else { DartVisual.Tick(instance.Value); } } for (int j = 0; j < _scratch.Count; j++) { _instances.Remove(_scratch[j]); } } private static void ResetAll() { if (_instances.Count == 0 && !_localSmoking) { return; } foreach (KeyValuePair instance in _instances) { DartVisual.Detach(instance.Value); } _instances.Clear(); _desired.Clear(); _nextAttachTry.Clear(); _localSmoking = false; _localNetId = 0u; SpeedBuff.Reset(); } internal static DartInstance FindInstance(PlayerCharacter pc) { if (!IsAlive(pc)) { return null; } uint netId = ((NetworkBehaviour)pc.playerNetworking).netId; _instances.TryGetValue(netId, out var value); return value; } internal static PlayerCharacter FindLocalPlayer() { List allPlayerCharacters = PlayerCharacter.allPlayerCharacters; if (allPlayerCharacters == null) { return null; } for (int i = 0; i < allPlayerCharacters.Count; i++) { PlayerCharacter val = allPlayerCharacters[i]; if (IsAlive(val) && ((NetworkBehaviour)val).isLocalPlayer) { return val; } } return null; } private static PlayerCharacter FindPlayerByNetId(uint netId) { List allPlayerCharacters = PlayerCharacter.allPlayerCharacters; if (allPlayerCharacters == null) { return null; } for (int i = 0; i < allPlayerCharacters.Count; i++) { PlayerCharacter val = allPlayerCharacters[i]; if (IsAlive(val) && ((NetworkBehaviour)val.playerNetworking).netId == netId) { return val; } } return null; } private static bool IsAlive(PlayerCharacter pc) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown return (Object)pc != (Object)null; } } internal static class DartNet { private const ushort FunctionHash = 55847; private const uint Magic = 1145131604u; private const byte ProtocolVersion = 1; private const byte PacketSetSmoking = 1; private static MethodInfo _bufferRpc; internal static void Install(Harmony harmony) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown harmony.Patch((MethodBase)AccessTools.Method(typeof(NetworkServer), "OnCommandMessage", (Type[])null, (Type[])null), new HarmonyMethod(typeof(DartNet), "HandleCommand", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(NetworkClient), "OnRPCMessage", (Type[])null, (Type[])null), new HarmonyMethod(typeof(DartNet), "HandleRpc", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); _bufferRpc = AccessTools.Method(typeof(NetworkConnectionToClient), "BufferRpc", new Type[2] { typeof(RpcMessage), typeof(int) }, (Type[])null); if (_bufferRpc == null) { Plugin.Logger.LogError((object)"BigDart: NetworkConnectionToClient.BufferRpc not found; smoking will not sync."); } } internal static void SendSetSmoking(uint smokerNetId, bool smoking) { if (NetworkServer.active) { RelayToAll(smokerNetId, smoking); } else if (NetworkClient.active && NetworkClient.connection != null) { NetworkWriterPooled val = NetworkWriterPool.Get(); try { NetworkWriterExtensions.WriteUShort((NetworkWriter)(object)val, NetworkMessages.GetId()); NetworkWriterExtensions.WriteUInt((NetworkWriter)(object)val, smokerNetId); ((NetworkWriter)val).WriteByte((byte)0); NetworkWriterExtensions.WriteUShort((NetworkWriter)(object)val, (ushort)55847); NetworkWriterExtensions.WriteBytesAndSize((NetworkWriter)(object)val, BuildPayload(smokerNetId, smoking)); NetworkClient.connection.Send(((NetworkWriter)val).ToArraySegment(), Channels.Reliable); } finally { NetworkWriterPool.Return(val); } } } private static Il2CppStructArray BuildPayload(uint smokerNetId, bool smoking) { NetworkWriterPooled val = NetworkWriterPool.Get(); try { NetworkWriterExtensions.WriteUInt((NetworkWriter)(object)val, 1145131604u); ((NetworkWriter)val).WriteByte((byte)1); ((NetworkWriter)val).WriteByte((byte)1); NetworkWriterExtensions.WriteUInt((NetworkWriter)(object)val, smokerNetId); ((NetworkWriter)val).WriteByte(smoking ? ((byte)1) : ((byte)0)); return ((NetworkWriter)val).ToArray(); } finally { NetworkWriterPool.Return(val); } } private static bool ReadHeader(ArraySegment payload, out NetworkReader reader) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown reader = null; if (payload.Count < 6) { return false; } reader = new NetworkReader(payload); if (NetworkReaderExtensions.ReadUInt(reader) != 1145131604) { return false; } if (reader.ReadByte() != 1) { return false; } return reader.ReadByte() == 1; } private static bool ReadSetSmoking(NetworkReader reader, out uint smokerNetId, out bool smoking) { smokerNetId = 0u; smoking = false; if (reader.Remaining < 5) { return false; } smokerNetId = NetworkReaderExtensions.ReadUInt(reader); smoking = reader.ReadByte() != 0; return true; } private static bool HandleCommand(NetworkConnectionToClient conn, CommandMessage msg) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown if (msg.functionHash != 55847) { return true; } if (!ReadHeader(msg.payload, out var reader)) { return false; } if (!ReadSetSmoking(reader, out var smokerNetId, out var smoking)) { return false; } NetworkIdentity identity = ((NetworkConnection)conn).identity; if ((Object)identity == (Object)null || identity.netId != msg.netId || smokerNetId != msg.netId) { return false; } RelayToAll(smokerNetId, smoking); return false; } private static bool HandleRpc(RpcMessage message) { if (message.functionHash != 55847) { return true; } if (!ReadHeader(message.payload, out var reader)) { return false; } if (!ReadSetSmoking(reader, out var smokerNetId, out var smoking)) { return false; } DartController.SetSmokingState(smokerNetId, smoking); return false; } private static void RelayToAll(uint smokerNetId, bool smoking) { //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Expected O, but got Unknown //IL_0010: 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_001c: 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_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown if (_bufferRpc != null) { RpcMessage val = new RpcMessage { netId = smokerNetId, componentIndex = 0, functionHash = 55847, payload = new ArraySegment((Il2CppArrayBase)(object)BuildPayload(smokerNetId, smoking)) }; Enumerator enumerator = NetworkServer.connections.Values.GetEnumerator(); bool flag = default(bool); while (enumerator.MoveNext()) { NetworkConnectionToClient current = enumerator.Current; if (!((NetworkConnection)current).isReady) { continue; } try { _bufferRpc.Invoke(current, new object[2] { val, Channels.Reliable }); } catch (Exception ex) { ManualLogSource logger = Plugin.Logger; BepInExWarningLogInterpolatedStringHandler val2 = new BepInExWarningLogInterpolatedStringHandler(27, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("BigDart: relay to "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(((NetworkConnection)current).connectionId); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" failed: "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(ex.Message); } logger.LogWarning(val2); } } } if (NetworkClient.active) { DartController.SetSmokingState(smokerNetId, smoking); } } } internal static class DartSound { private static AudioClip _drag; private static AudioClip _exhale; private const string DragResource = "BigDart.sounds.drag.wav"; private const string ExhaleResource = "BigDart.sounds.exhale.wav"; internal static void Load() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown _drag = LoadClip("BigDart.sounds.drag.wav"); _exhale = LoadClip("BigDart.sounds.exhale.wav"); int num = 0; if (IsAlive(_drag)) { num++; } if (IsAlive(_exhale)) { num++; } ManualLogSource logger = Plugin.Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(25, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: sounds loaded "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(num); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("/2"); } logger.LogInfo(val); } internal static AudioSourceController DragStart(PlayerCharacter pc) { return Play(pc, LiveClip(ref _drag, "BigDart.sounds.drag.wav")); } internal static AudioSourceController Exhale(PlayerCharacter pc) { return Play(pc, LiveClip(ref _exhale, "BigDart.sounds.exhale.wav")); } private static bool IsAlive(AudioClip clip) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown if ((Object)clip != (Object)null) { return clip.samples > 0; } return false; } private static AudioClip LiveClip(ref AudioClip clip, string resource) { if (!IsAlive(clip)) { clip = LoadClip(resource); } return clip; } internal static void Stop(AudioSourceController controller) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown if ((Object)controller != (Object)null) { controller.FadeOut(0.15f); } } private static AudioSourceController Play(PlayerCharacter pc, AudioClip clip) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown string text = null; if ((Object)clip == (Object)null) { text = "clip null"; } else if ((Object)pc == (Object)null) { text = "pc null"; } else if ((Object)(object)pc.playerAudio == (Object)null) { text = "playerAudio null"; } else if ((Object)pc.kernal == (Object)null) { text = "kernal null"; } else if ((Object)pc.playerAudio.kickSound == (Object)null) { text = "kickSound null"; } bool flag = default(bool); if (text != null) { if (DartConfig.DebugLog.Value) { ManualLogSource logger = Plugin.Logger; BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(24, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: sound skipped: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(text); } logger.LogInfo(val); } return null; } AudioSourceController result = pc.playerAudio.kickSound.Play(pc.kernal.position, (Object)null, (IAudioRTPCXProvider)null, true, pc.kernal, 0.0, -1f, clip, (FuncOneOut)null, (List)null, (Func)null); if (DartConfig.DebugLog.Value) { ManualLogSource logger2 = Plugin.Logger; BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(16, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: played "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(((Object)clip).name); } logger2.LogInfo(val); } return result; } private static AudioClip LoadClip(string resourceName) { //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Expected O, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown bool flag = default(bool); try { using Stream stream = typeof(DartSound).Assembly.GetManifestResourceStream(resourceName); if (stream == null) { ManualLogSource logger = Plugin.Logger; BepInExWarningLogInterpolatedStringHandler val = new BepInExWarningLogInterpolatedStringHandler(38, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: embedded resource "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(resourceName); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" not found."); } logger.LogWarning(val); return null; } using BinaryReader binaryReader = new BinaryReader(stream); if (new string(binaryReader.ReadChars(4)) != "RIFF") { return null; } binaryReader.ReadInt32(); if (new string(binaryReader.ReadChars(4)) != "WAVE" || new string(binaryReader.ReadChars(4)) != "fmt ") { return null; } int num = binaryReader.ReadInt32(); short num2 = binaryReader.ReadInt16(); short num3 = binaryReader.ReadInt16(); int num4 = binaryReader.ReadInt32(); binaryReader.ReadInt32(); binaryReader.ReadInt16(); short num5 = binaryReader.ReadInt16(); if (num > 16) { binaryReader.ReadBytes(num - 16); } if (new string(binaryReader.ReadChars(4)) != "data" || num2 != 1 || num5 != 16) { return null; } int num6 = binaryReader.ReadInt32() / 2; float[] array = new float[num6]; for (int i = 0; i < num6; i++) { array[i] = (float)binaryReader.ReadInt16() / 32768f; } AudioClip obj = AudioClip.Create(resourceName, num6 / num3, (int)num3, num4, false); obj.SetData(Il2CppStructArray.op_Implicit(array), 0); ((Object)obj).hideFlags = (HideFlags)32; return obj; } catch (Exception ex) { ManualLogSource logger2 = Plugin.Logger; BepInExWarningLogInterpolatedStringHandler val = new BepInExWarningLogInterpolatedStringHandler(25, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(resourceName); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" decode failed: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(ex.Message); } logger2.LogWarning(val); return null; } } } internal sealed class DartInstance { internal PlayerCharacter pc; internal Transform mouthAnchor; internal Transform handAnchor; internal bool hasHand; internal GameObject root; internal Transform filter; internal Transform cig; internal Transform ash; internal Transform ember; internal Material emberMat; internal Light emberLight; internal float burn; internal SmokePuff[] smoke; internal int smokeNext; internal Vector3 emberBaseScale; internal float currentInv = 1f; internal bool atMouth; internal float emberGlow; internal float poseBlend; internal bool viewPoseActive; internal float nextWispAt; internal float exhaleAt; internal int exhalesLeft; internal List eyeTints; internal float nextEyeCheckAt; internal Transform worldHandAnchor; internal AudioSourceController sound; internal float exhaleSoundAt; } internal sealed class EyeTinted { internal Material mat; internal Color color; internal Color emission; } internal struct SmokePuff { internal GameObject go; internal Material mat; internal Vector3 velocity; internal float age; internal float lifetime; internal float wobblePhase; internal float baseSize; internal bool active; } internal static class DartVisual { private const float CigLength = 0.1f; private const float CigRadius = 0.01f; private const float FilterLength = 0.03f; private const float AshLength = 0.012f; private const float BurnSeconds = 240f; private const float BurnKeepFraction = 0.53f; private const float EmberLightRange = 0.35f; private const float EmberLightIntensity = 1.2f; private const float EmberLightBaseIntensity = 0.15f; private static readonly Color EmberSmoulder = new Color(0.55f, 0.12f, 0.02f); private static readonly Color EmberDrag = new Color(1f, 0.35f, 0.05f); private const float HandForwardOffset = 0.05f; private const float WispIntervalSeconds = 1.1f; private const float SmokeLifetimeSeconds = 5f; private const float SmokeRiseSpeed = 0.15f; private const float SmokeAlpha = 0.66f; private const int SmokePoolSize = 28; private const float WispSize = 0.045f; private const float PlumeSize = 0.07f; private const float PlumeForwardSpeed = 0.4f; private const float SmokeGrowTo = 2.5f; private const float ExhaleSoundDelaySeconds = 1.8f; private const float ExhaleDelaySeconds = 2.8f; private const float EyeTintStrength = 0.25f; private const string PuffTemplateName = "HeadPuffParticle"; private const string NoseFallbackName = "animatingNose"; private const string NoseMeshFallbackName = "nose_mesh"; private const int ExhaleBurstMin = 1; private const int ExhaleBurstMax = 8; private const float ExhaleSpacing = 0.4f; private static Shader _unlit; private static Mesh _quadMesh; private static Material _puffTemplate; private static Material _cigMaterial; private static Material _filterMaterial; private static Material _ashMaterial; private static Material _emberMaterial; private static Shader _lit; private const float EyeCheckSeconds = 1f; private static PropertyInfo _tpBodyActive; private static bool _tpBodyActiveQueried; private const float NightSaturation = 0.1f; private const float DayAmbientMix = 0.35f; private static Transform FindLip(PlayerCharacter pc) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown if ((Object)(object)pc == (Object)null) { return null; } if (pc.lips != null) { Transform lipTransform = pc.lips.lipTransform; if ((Object)lipTransform != (Object)null) { return lipTransform; } } Transform kernal = pc.kernal; if ((Object)kernal == (Object)null) { return null; } Il2CppArrayBase componentsInChildren = ((Component)kernal).GetComponentsInChildren(true); Transform result = null; for (int i = 0; i < componentsInChildren.Count; i++) { Transform val = componentsInChildren[i]; if (((Object)val).name == "animatingNose") { return val; } if (((Object)val).name == "nose_mesh") { result = val; } } return result; } private static Shader GetUnlitShader() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown if ((Object)_unlit != (Object)null) { return _unlit; } _unlit = Shader.Find("Universal Render Pipeline/Unlit") ?? Shader.Find("Unlit/Color") ?? Shader.Find("UI/Default") ?? Shader.Find("Sprites/Default") ?? Shader.Find("Legacy Shaders/Diffuse"); return _unlit; } private static Shader GetLitShader() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown if ((Object)_lit != (Object)null) { return _lit; } _lit = Shader.Find("Universal Render Pipeline/Simple Lit") ?? Shader.Find("Universal Render Pipeline/Lit") ?? GetUnlitShader(); return _lit; } private static Material MakeMaterial(Color color) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return MakeMaterial(color, GetUnlitShader()); } private static Material MakeMaterial(Color color, Shader shader) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0018: 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_0030: Unknown result type (might be due to invalid IL or missing references) if ((Object)shader == (Object)null) { return null; } Material val = new Material(shader); val.color = color; val.SetColor("_Color", color); val.SetColor("_BaseColor", color); if (val.HasFloat("_Smoothness")) { val.SetFloat("_Smoothness", 0.1f); } return val; } private static void DressPrimitive(GameObject go, Transform parent, Material mat, int layer) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown Collider component = go.GetComponent(); if ((Object)component != (Object)null) { Object.Destroy((Object)component); } MeshRenderer component2 = go.GetComponent(); if ((Object)component2 != (Object)null) { if ((Object)mat != (Object)null) { ((Renderer)component2).sharedMaterial = mat; } ((Renderer)component2).shadowCastingMode = (ShadowCastingMode)0; } go.layer = layer; go.transform.SetParent(parent, false); } internal static DartInstance Attach(PlayerCharacter pc) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_0090: 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_00e9: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Expected O, but got Unknown //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Expected O, but got Unknown //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Expected O, but got Unknown //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Expected O, but got Unknown Transform val = FindLip(pc); if ((Object)val == (Object)null) { return null; } Transform val2 = null; if (pc.gestures != null) { val2 = pc.gestures.RightHand; } bool flag = (Object)val2 != (Object)null; if ((Object)_cigMaterial == (Object)null) { _cigMaterial = MakeMaterial(new Color(0.92f, 0.9f, 0.85f), GetLitShader()); } if ((Object)_filterMaterial == (Object)null) { _filterMaterial = MakeMaterial(new Color(0.78f, 0.62f, 0.4f), GetLitShader()); } if ((Object)_ashMaterial == (Object)null) { _ashMaterial = MakeMaterial(new Color(0.55f, 0.55f, 0.52f), GetLitShader()); } if ((Object)_emberMaterial == (Object)null) { _emberMaterial = MakeMaterial(new Color(1f, 0.35f, 0.05f)); } int layer = ((Component)val).gameObject.layer; DartInstance dartInstance = new DartInstance { pc = pc, mouthAnchor = val, handAnchor = (flag ? val2 : val), hasHand = flag, emberBaseScale = new Vector3(0.019f, 0.009f, 0.019f) }; GameObject val3 = new GameObject("BigDart"); val3.layer = layer; dartInstance.root = val3; GameObject val4 = GameObject.CreatePrimitive((PrimitiveType)2); ((Object)val4).name = "BigDartFilter"; DressPrimitive(val4, val3.transform, _filterMaterial, layer); dartInstance.filter = val4.transform; GameObject val5 = GameObject.CreatePrimitive((PrimitiveType)2); ((Object)val5).name = "BigDartBody"; DressPrimitive(val5, val3.transform, _cigMaterial, layer); dartInstance.cig = val5.transform; GameObject val6 = GameObject.CreatePrimitive((PrimitiveType)2); ((Object)val6).name = "BigDartAsh"; DressPrimitive(val6, val3.transform, _ashMaterial, layer); dartInstance.ash = val6.transform; GameObject val7 = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)val7).name = "BigDartEmber"; DressPrimitive(val7, val3.transform, null, layer); dartInstance.ember = val7.transform; if ((Object)_emberMaterial != (Object)null) { dartInstance.emberMat = new Material(_emberMaterial); MeshRenderer component = val7.GetComponent(); if ((Object)component != (Object)null) { ((Renderer)component).sharedMaterial = dartInstance.emberMat; } } GameObject val8 = new GameObject("BigDartEmberLight") { layer = layer }; val8.transform.SetParent(val3.transform, false); Light val9 = val8.AddComponent(); val9.type = (LightType)2; val9.color = new Color(1f, 0.45f, 0.15f); val9.intensity = 0f; val9.shadows = (LightShadows)0; dartInstance.emberLight = val9; InitSmoke(dartInstance, pc, layer); Place(dartInstance, Vector3.zero, Vector3.zero, flag ? dartInstance.handAnchor : dartInstance.mouthAnchor); if (pc.arms != null) { dartInstance.worldHandAnchor = pc.arms.rightHand; } dartInstance.nextWispAt = Time.time + NextWispDelay(); TintEyes(dartInstance); return dartInstance; } private static void TintEyes(DartInstance instance) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_010c: Expected O, but got Unknown //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) if (instance.pc.playerEyes == null) { return; } Il2CppReferenceArray renderers = instance.pc.playerEyes.renderers; if (renderers == null) { return; } int submeshIndex = instance.pc.playerEyes.submeshIndex; float num = Mathf.Clamp01(0.25f); Color val = default(Color); ((Color)(ref val))..ctor(1f, 1f - 0.5f * num, 1f - 0.4f * num); if (instance.eyeTints == null) { instance.eyeTints = new List(); } for (int i = 0; i < ((Il2CppArrayBase)(object)renderers).Length; i++) { Renderer val2 = ((Il2CppArrayBase)(object)renderers)[i]; if ((Object)val2 == (Object)null) { continue; } Il2CppReferenceArray sharedMaterials = val2.sharedMaterials; if (sharedMaterials == null || submeshIndex < 0 || submeshIndex >= ((Il2CppArrayBase)(object)sharedMaterials).Length) { continue; } Material val3 = ((Il2CppArrayBase)(object)sharedMaterials)[submeshIndex]; if ((Object)val3 == (Object)null) { continue; } bool flag = false; for (int j = 0; j < instance.eyeTints.Count; j++) { if ((Object)instance.eyeTints[j].mat == (Object)val3) { flag = true; break; } } if (!flag) { EyeTinted eyeTinted = new EyeTinted { mat = val3 }; if (val3.HasColor("_Color")) { eyeTinted.color = val3.GetColor("_Color"); val3.SetColor("_Color", eyeTinted.color * val); } if (val3.HasColor("_EmissionColor")) { eyeTinted.emission = val3.GetColor("_EmissionColor"); val3.SetColor("_EmissionColor", eyeTinted.emission * val); } instance.eyeTints.Add(eyeTinted); } } } private static void RestoreEyes(DartInstance instance) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_004b: 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) if (instance.eyeTints == null) { return; } for (int i = 0; i < instance.eyeTints.Count; i++) { EyeTinted eyeTinted = instance.eyeTints[i]; if (!((Object)eyeTinted.mat == (Object)null)) { if (eyeTinted.mat.HasColor("_Color")) { eyeTinted.mat.SetColor("_Color", eyeTinted.color); } if (eyeTinted.mat.HasColor("_EmissionColor")) { eyeTinted.mat.SetColor("_EmissionColor", eyeTinted.emission); } } } instance.eyeTints.Clear(); } private static void Place(DartInstance instance, Vector3 offsetMeters, Vector3 euler, Transform anchor) { //IL_0006: 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_0039: 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_0045: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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) float num = (instance.currentInv = 1f / Mathf.Max(anchor.lossyScale.x, 0.001f)); Transform transform = instance.root.transform; transform.SetParent(anchor, false); transform.localPosition = offsetMeters * num; transform.localRotation = Quaternion.Euler(euler); transform.localScale = Vector3.one; instance.cig.localRotation = Quaternion.identity; instance.ember.localScale = instance.emberBaseScale * num; LayoutSegments(instance); } private static void LayoutSegments(DartInstance instance) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_008e: 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_00d8: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) float currentInv = instance.currentInv; float num = -0.05f; float num2 = 0.058f * Mathf.Lerp(1f, 0.53f, instance.burn); instance.filter.localScale = new Vector3(0.02f, 0.015f, 0.02f) * currentInv; instance.filter.localPosition = new Vector3(0f, (num + 0.015f) * currentInv, 0f); instance.cig.localScale = new Vector3(0.02f, num2 * 0.5f, 0.02f) * currentInv; instance.cig.localPosition = new Vector3(0f, (num + 0.03f + num2 * 0.5f) * currentInv, 0f); instance.ash.localScale = new Vector3(0.02f, 0.006f, 0.02f) * currentInv; instance.ash.localPosition = new Vector3(0f, (num + 0.03f + num2 + 0.006f) * currentInv, 0f); instance.ember.localPosition = new Vector3(0f, (num + 0.03f + num2 + 0.012f) * currentInv, 0f); } private static bool IsExternalCamera() { if (!_tpBodyActiveQueried) { _tpBodyActiveQueried = true; Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { if (!(assembly.GetName().Name != "ThirdPerson")) { Type type = assembly.GetType("ThirdPerson.PlayerBody"); _tpBodyActive = ((type != null) ? type.GetProperty("Active") : null); break; } } } if (_tpBodyActive != null) { return (bool)_tpBodyActive.GetValue(null); } return false; } private static void AimForward(DartInstance instance) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_0052: 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_0062: Expected O, but got Unknown //IL_0062: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010a: 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_011b: 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_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00b8: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)instance.pc).transform; if ((Object)transform == (Object)null) { return; } Transform val = (IsExternalCamera() ? instance.worldHandAnchor : instance.handAnchor); if (!((Object)val == (Object)null)) { Transform transform2 = instance.root.transform; if ((Object)transform2.parent != (Object)val) { transform2.SetParent(val, true); } if (IsExternalCamera()) { Vector3 val2 = instance.pc.cameraTransform.forward; val2.y = 0f; val2 = ((((Vector3)(ref val2)).sqrMagnitude < 0.001f) ? transform.forward : ((Vector3)(ref val2)).normalized); transform2.position = val.position + val2 * 0.05f; transform2.rotation = Quaternion.LookRotation(val2, Vector3.up) * Quaternion.Euler(90f, 0f, 0f); } else { transform2.position = val.position + transform.forward * 0.05f; transform2.rotation = Quaternion.LookRotation(transform.forward, transform.up) * Quaternion.Euler(90f, 0f, 0f); } } } private static bool InitSmokeAssets(PlayerCharacter pc) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown if ((Object)_puffTemplate != (Object)null) { return true; } Transform kernal = pc.kernal; if ((Object)kernal == (Object)null) { return false; } Il2CppArrayBase componentsInChildren = ((Component)kernal).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Count; i++) { if (!(((Object)componentsInChildren[i]).name != "HeadPuffParticle")) { Material sharedMaterial = ((Renderer)((Component)componentsInChildren[i]).GetComponent()).sharedMaterial; if ((Object)sharedMaterial == (Object)null) { break; } _puffTemplate = new Material(sharedMaterial.shader); _puffTemplate.SetTexture("_MainTex", sharedMaterial.GetTexture("_MainTex")); GameObject obj = GameObject.CreatePrimitive((PrimitiveType)5); _quadMesh = obj.GetComponent().sharedMesh; Object.Destroy((Object)obj); return true; } } Plugin.Logger.LogWarning((object)"BigDart: HeadPuffParticle not found on player prefab; smoke disabled."); return false; } private static void InitSmoke(DartInstance instance, PlayerCharacter pc, int layer) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown if (InitSmokeAssets(pc)) { instance.smoke = new SmokePuff[28]; for (int i = 0; i < 28; i++) { GameObject val = new GameObject("BigDartPuff"); val.layer = layer; val.AddComponent().sharedMesh = _quadMesh; MeshRenderer obj = val.AddComponent(); Material mat = (((Renderer)obj).sharedMaterial = new Material(_puffTemplate)); ((Renderer)obj).shadowCastingMode = (ShadowCastingMode)0; val.SetActive(false); instance.smoke[i] = new SmokePuff { go = val, mat = mat }; } } } private static void SpawnPuff(DartInstance instance, Vector3 origin, Vector3 velocity, float size, float lifetime) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) if (instance.smoke != null) { int smokeNext = instance.smokeNext; instance.smokeNext = (instance.smokeNext + 1) % instance.smoke.Length; instance.smoke[smokeNext].age = 0f; instance.smoke[smokeNext].lifetime = lifetime; instance.smoke[smokeNext].velocity = velocity; instance.smoke[smokeNext].wobblePhase = Random.value * 6.283f; instance.smoke[smokeNext].baseSize = size; instance.smoke[smokeNext].active = true; instance.smoke[smokeNext].go.transform.position = origin; instance.smoke[smokeNext].go.SetActive(true); } } private static void TickSmoke(DartInstance instance, float dt) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Expected O, but got Unknown //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) if (instance.smoke == null) { return; } Transform val = null; List allPlayerCharacters = PlayerCharacter.allPlayerCharacters; if (allPlayerCharacters != null) { for (int i = 0; i < allPlayerCharacters.Count; i++) { PlayerCharacter val2 = allPlayerCharacters[i]; if ((Object)val2 != (Object)null && ((NetworkBehaviour)val2).isLocalPlayer) { val = val2.cameraTransform; break; } } } Color val4 = default(Color); for (int j = 0; j < instance.smoke.Length; j++) { if (!instance.smoke[j].active) { continue; } instance.smoke[j].age += dt; if (instance.smoke[j].age >= instance.smoke[j].lifetime) { instance.smoke[j].active = false; instance.smoke[j].go.SetActive(false); continue; } float num = instance.smoke[j].age / instance.smoke[j].lifetime; instance.smoke[j].velocity = Vector3.Lerp(instance.smoke[j].velocity, Vector3.up * 0.15f, dt * 0.6f); Transform transform = instance.smoke[j].go.transform; transform.position += instance.smoke[j].velocity * dt + new Vector3(Mathf.Sin(instance.smoke[j].age * 1.9f + instance.smoke[j].wobblePhase), 0f, Mathf.Cos(instance.smoke[j].age * 1.6f + instance.smoke[j].wobblePhase * 1.3f)) * (0.05f * dt); transform.localScale = Vector3.one * (instance.smoke[j].baseSize * Mathf.Lerp(1f, 2.5f, num)); if ((Object)val != (Object)null) { transform.rotation = Quaternion.LookRotation(transform.position - val.position); } float num2 = Mathf.Min(num * 8f, 1f) * (1f - num) * 0.66f; Color val3 = SmokeTint(instance, transform.position); ((Color)(ref val4))..ctor(val3.r, val3.g, val3.b, num2); instance.smoke[j].mat.SetColor("_TintColor", val4); instance.smoke[j].mat.SetColor("_Color", val4); } } private static void EmitPuff(ParticleSystem ps, Vector3 origin, Vector3 velocity, float sizeMeters, int count, Color tint, float alphaScale) { //IL_0006: 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_0049: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Max(((Component)ps).transform.lossyScale.x, 0.001f); float num2 = sizeMeters / num; byte b = (byte)(Mathf.Clamp01(0.66f * alphaScale) * 255f); Color32 val = default(Color32); ((Color32)(ref val))..ctor((byte)(Mathf.Clamp01(tint.r) * 255f), (byte)(Mathf.Clamp01(tint.g) * 255f), (byte)(Mathf.Clamp01(tint.b) * 255f), b); for (int i = 0; i < count; i++) { Vector3 val2 = origin + Random.insideUnitSphere * (0.025f / num); ps.Emit(val2, velocity, num2 * Random.Range(0.8f, 1.2f), 5f * Random.Range(0.85f, 1.15f), val); } } private static Color SmokeTint(DartInstance instance, Vector3 origin) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0041: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_00f6: 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_0096: 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_00ce: 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) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) Color ambientLight = RenderSettings.ambientLight; float num = ambientLight.r * 0.3f + ambientLight.g * 0.5f + ambientLight.b * 0.2f; float num2 = Mathf.Clamp01((num - 0.15f) / 0.35f); Color val = Color.Lerp(new Color(num, num, num), ambientLight, 0.1f); Color val2 = Color.Lerp(Color.white, ambientLight, 0.35f); Color val3 = Color.Lerp(val, val2, num2); if ((Object)instance.emberLight != (Object)null && instance.emberLight.intensity > 0.001f) { float num3 = Vector3.Distance(origin, instance.ember.position); float num4 = instance.emberLight.intensity * 0.8f / (1f + num3 * num3 * 400f); val3 += instance.emberLight.color * Mathf.Min(num4, 0.9f); } val3.a = 1f; return val3; } private static float NextWispDelay() { return 1.1f * Random.Range(0.75f, 1.25f); } internal static bool IsDragging(PlayerCharacter pc) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (pc.gestures == null) { return false; } PlayerGestures gestures = pc.gestures; if (!gestures.rightArmPointing) { return gestures.rightArmWavingState.isActive; } return true; } internal static void Tick(DartInstance instance) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Expected O, but got Unknown //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Expected O, but got Unknown //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: 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) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Expected O, but got Unknown //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_03f4: Unknown result type (might be due to invalid IL or missing references) //IL_03ff: Expected O, but got Unknown //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_043a: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Expected O, but got Unknown //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Expected O, but got Unknown //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) //IL_0476: Unknown result type (might be due to invalid IL or missing references) //IL_0488: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_04ea: Unknown result type (might be due to invalid IL or missing references) //IL_050c: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) if ((Object)instance.root == (Object)null || (Object)instance.pc == (Object)null) { return; } float time = Time.time; bool flag = instance.hasHand && IsDragging(instance.pc); if (flag && !instance.atMouth) { instance.atMouth = true; DartSound.Stop(instance.sound); instance.sound = DartSound.DragStart(instance.pc); instance.exhaleAt = 0f; instance.exhaleSoundAt = 0f; instance.exhalesLeft = 0; } else if (!flag && instance.atMouth) { instance.atMouth = false; DartSound.Stop(instance.sound); instance.sound = null; instance.exhaleSoundAt = time + 1.8f; instance.exhaleAt = time + 2.8f; instance.exhalesLeft = Random.Range(1, 9); } AimForward(instance); if (((NetworkBehaviour)instance.pc).isLocalPlayer) { if (instance.poseBlend > 0.001f && !IsExternalCamera()) { Transform cameraTransform = instance.pc.cameraTransform; if ((Object)cameraTransform != (Object)null) { Vector3 val = cameraTransform.position + cameraTransform.forward * 0.28f + cameraTransform.up * -0.12f + cameraTransform.right * 0.06f; Transform transform = instance.root.transform; transform.position = Vector3.Lerp(transform.position, val, instance.poseBlend); transform.rotation = Quaternion.Slerp(transform.rotation, cameraTransform.rotation * Quaternion.Euler(75f, 10f, 0f), instance.poseBlend); instance.viewPoseActive = true; } } else if (instance.viewPoseActive) { instance.viewPoseActive = false; Transform anchor = (((Object)instance.worldHandAnchor != (Object)null) ? instance.worldHandAnchor : instance.handAnchor); Place(instance, Vector3.zero, Vector3.zero, anchor); } } if (instance.exhaleSoundAt > 0f && time >= instance.exhaleSoundAt) { instance.exhaleSoundAt = 0f; DartSound.Stop(instance.sound); instance.sound = DartSound.Exhale(instance.pc); } if (instance.exhaleAt > 0f && time >= instance.exhaleAt) { if (instance.smoke != null) { Vector3 val2 = Vector3.up; Transform transform2 = ((Component)instance.pc).transform; if ((Object)transform2 != (Object)null) { val2 = transform2.forward; } for (int i = 0; i < 3; i++) { SpawnPuff(instance, instance.mouthAnchor.position + Random.insideUnitSphere * 0.02f, val2 * 0.4f * Random.Range(0.75f, 1.25f) + Vector3.up * 0.1f + Random.insideUnitSphere * 0.08f, 0.07f * Random.Range(0.8f, 1.2f), 5f * Random.Range(0.85f, 1.15f)); } } instance.exhalesLeft--; instance.exhaleAt = ((instance.exhalesLeft > 0) ? (time + 0.4f) : 0f); } if (instance.atMouth && instance.burn < 1f) { instance.burn = Mathf.Min(1f, instance.burn + Time.deltaTime / 240f); LayoutSegments(instance); } float num = (instance.atMouth ? 1f : 0f); instance.emberGlow = Mathf.MoveTowards(instance.emberGlow, num, 4f * Time.deltaTime); if ((Object)instance.ember != (Object)null) { instance.ember.localScale = instance.emberBaseScale * instance.currentInv * (1f + 0.45f * instance.emberGlow); } if ((Object)instance.emberMat != (Object)null) { Color val3 = Color.Lerp(EmberSmoulder, EmberDrag, instance.emberGlow); instance.emberMat.color = val3; instance.emberMat.SetColor("_Color", val3); instance.emberMat.SetColor("_BaseColor", val3); } if ((Object)instance.emberLight != (Object)null) { instance.emberLight.intensity = Mathf.Lerp(0.15f, 1.2f, instance.emberGlow); instance.emberLight.range = 0.35f * instance.currentInv; ((Component)instance.emberLight).transform.localPosition = instance.ember.localPosition; } if (instance.smoke != null && time >= instance.nextWispAt) { SpawnPuff(instance, instance.ember.position, new Vector3(Random.Range(-0.02f, 0.02f), 0.15f, Random.Range(-0.02f, 0.02f)), 0.045f * Random.Range(0.8f, 1.2f), 5f * Random.Range(0.85f, 1.15f)); instance.nextWispAt = time + NextWispDelay(); } TickSmoke(instance, Time.deltaTime); if (time >= instance.nextEyeCheckAt) { instance.nextEyeCheckAt = time + 1f; TintEyes(instance); } } internal static void Detach(DartInstance instance) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown if (instance == null) { return; } if ((Object)instance.root != (Object)null) { Object.Destroy((Object)instance.root); } if (instance.smoke != null) { for (int i = 0; i < instance.smoke.Length; i++) { if ((Object)instance.smoke[i].go != (Object)null) { Object.Destroy((Object)instance.smoke[i].go); } if ((Object)instance.smoke[i].mat != (Object)null) { Object.Destroy((Object)instance.smoke[i].mat); } } instance.smoke = null; } DartSound.Stop(instance.sound); instance.sound = null; RestoreEyes(instance); if ((Object)instance.emberMat != (Object)null) { Object.Destroy((Object)instance.emberMat); } instance.emberMat = null; instance.root = null; instance.ember = null; instance.pc = null; } internal static bool IsGone(DartInstance instance) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown if (instance != null) { return (Object)instance.root == (Object)null; } return true; } } [HarmonyPatch(typeof(PlayerArms), "LateUpdate")] internal static class HandPosePatch { private const float BlendSpeed = 6f; private const float PoleDistance = 0.15f; private static void Postfix(PlayerArms __instance) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Expected O, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) List allPlayerCharacters = PlayerCharacter.allPlayerCharacters; if (allPlayerCharacters == null) { return; } for (int i = 0; i < allPlayerCharacters.Count; i++) { PlayerCharacter val = allPlayerCharacters[i]; if ((Object)val == (Object)null || val.arms == null || ((Il2CppObjectBase)val.arms).Pointer != ((Il2CppObjectBase)__instance).Pointer) { continue; } DartInstance dartInstance = DartController.FindInstance(val); if (dartInstance == null || !dartInstance.hasHand) { break; } bool flag = DartVisual.IsDragging(val); if (val.poser != null && (Object)val.poser.playerHoldingMe != (Object)null) { flag = false; } if (val.hands != null && (Object)val.hands.heldProp != (Object)null) { flag = false; } dartInstance.poseBlend = Mathf.MoveTowards(dartInstance.poseBlend, flag ? 1f : 0f, 6f * Time.deltaTime); if (dartInstance.poseBlend <= 0.001f) { break; } float poseBlend = dartInstance.poseBlend; Transform transform = ((Component)val).transform; if (((NetworkBehaviour)val).isLocalPlayer) { Transform cameraTransform = val.cameraTransform; if ((Object)cameraTransform != (Object)null) { Vector3 target = cameraTransform.position + cameraTransform.forward * 0.28f + cameraTransform.up * -0.17f + cameraTransform.right * 0.06f; PoseHand((val.gestures != null) ? val.gestures.RightHand : null, val.arms.localRightArmSpline, target, transform, poseBlend); } Vector3 val2 = (((Object)cameraTransform != (Object)null) ? cameraTransform.forward : transform.forward); val2.y = 0f; val2 = ((((Vector3)(ref val2)).sqrMagnitude < 0.001f) ? transform.forward : ((Vector3)(ref val2)).normalized); Vector3 val3 = Vector3.Cross(Vector3.up, val2); Vector3 normalized = ((Vector3)(ref val3)).normalized; Vector3 target2 = dartInstance.mouthAnchor.position + val2 * 0.06f + normalized * 0.05f + Vector3.down * 0.03f; PoseHand(val.arms.rightHand, val.arms.rightArmLimbSpline, target2, transform, poseBlend, 0.18f, 0.2f, 0.05f); } else { Vector3 target3 = dartInstance.mouthAnchor.position + transform.forward * 0.02f + Vector3.down * 0.03f; PoseHand((val.gestures != null) ? val.gestures.RightHand : null, val.arms.rightArmLimbSpline, target3, transform, poseBlend); } break; } } private static void PoseHand(Transform hand, LimbSpline spline, Vector3 target, Transform body, float blend, float poleOut = -1f, float poleDown = 0f, float poleFwd = 0f) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_001f: 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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_0047: 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_0057: Expected O, but got Unknown //IL_0057: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_011f: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0137: 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_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) if ((Object)hand == (Object)null || (Object)spline == (Object)null) { return; } hand.position = Vector3.Lerp(hand.position, target, blend); Transform endTransform = spline.endTransform; if ((Object)endTransform != (Object)null && (Object)endTransform != (Object)hand) { endTransform.position = hand.position; } Transform handleTransform = spline.handleTransform; Transform startTransform = spline.startTransform; if ((Object)handleTransform != (Object)null && (Object)startTransform != (Object)null) { Vector3 val; if (poleOut >= 0f) { val = startTransform.position + body.right * poleOut + Vector3.down * poleDown + body.forward * poleFwd; } else { Vector3 val2 = (startTransform.position + hand.position) * 0.5f; Vector3 val3 = Vector3.down * 0.7f + body.right * 0.4f; Vector3 normalized = ((Vector3)(ref val3)).normalized; val = val2 + normalized * 0.15f; } handleTransform.position = Vector3.Lerp(handleTransform.position, val, blend); } spline.Refresh(); } } [BepInPlugin("com.zaddish.bigdart", "BigDart", "1.1.0")] public sealed class Plugin : BasePlugin { public const string Guid = "com.zaddish.bigdart"; public const string Name = "BigDart"; public const string Version = "1.1.0"; internal static ManualLogSource Logger; public override void Load() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_003b: 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_0055: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown Logger = ((BasePlugin)this).Log; DartConfig.Init(new ConfigFile(Path.Combine(Paths.ConfigPath, "BigDart.cfg"), true)); ClassInjector.RegisterTypeInIl2Cpp(); ((BasePlugin)this).AddComponent(); DartSound.Load(); Harmony val = new Harmony("com.zaddish.bigdart"); val.PatchAll(typeof(HandPosePatch)); DartNet.Install(val); ManualLogSource logger = Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(9, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted("BigDart"); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted("1.1.0"); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" loaded."); } logger.LogInfo(val2); } } internal static class SpeedBuff { private static bool _active; private static float _expiresAt; private static PlayerCharacter _appliedTo; private static float _forward; private static float _sprint; private static float _crouch; private static float _crouchSprint; private static float _swim; private static float _swimSprint; internal static void StartOrRefresh(PlayerCharacter pc) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown _expiresAt = Time.time + DartConfig.BuffDurationSeconds.Value; if (!_active) { _active = true; ApplyTo(pc); } else if (!IsAlive(_appliedTo)) { ApplyTo(pc); } if (DartConfig.DebugLog.Value) { ManualLogSource logger = Plugin.Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(20, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: buzz until "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(_expiresAt, "F0"); } logger.LogInfo(val); } } internal static void Tick(PlayerCharacter localPlayer) { if (!_active) { return; } if (Time.time >= _expiresAt) { Restore(); _active = false; _appliedTo = null; if (DartConfig.DebugLog.Value) { Plugin.Logger.LogInfo((object)"BigDart: buzz over"); } } else if (IsAlive(localPlayer) && (!IsAlive(_appliedTo) || ((Il2CppObjectBase)localPlayer).Pointer != ((Il2CppObjectBase)_appliedTo).Pointer)) { ApplyTo(localPlayer); } } private static void ApplyTo(PlayerCharacter pc) { //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown if (!IsAlive(pc) || pc.tunings == null) { _appliedTo = null; return; } PlayerTunings tunings = pc.tunings; _forward = tunings.forwardSpeed; _sprint = tunings.forwardSprintSpeed; _crouch = tunings.crouchForwardSpeed; _crouchSprint = tunings.crouchForwardSprintSpeed; _swim = tunings.swimForwardSpeed; _swimSprint = tunings.swimForwardSprintSpeed; float value = DartConfig.SpeedMultiplier.Value; tunings.forwardSpeed = _forward * value; tunings.forwardSprintSpeed = _sprint * value; tunings.crouchForwardSpeed = _crouch * value; tunings.crouchForwardSprintSpeed = _crouchSprint * value; tunings.swimForwardSpeed = _swim * value; tunings.swimForwardSprintSpeed = _swimSprint * value; _appliedTo = pc; if (DartConfig.DebugLog.Value) { ManualLogSource logger = Plugin.Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(19, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("BigDart: speed "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(_forward, "F2"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" -> "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(tunings.forwardSpeed, "F2"); } logger.LogInfo(val); } } private static void Restore() { if (IsAlive(_appliedTo) && _appliedTo.tunings != null) { PlayerTunings tunings = _appliedTo.tunings; tunings.forwardSpeed = _forward; tunings.forwardSprintSpeed = _sprint; tunings.crouchForwardSpeed = _crouch; tunings.crouchForwardSprintSpeed = _crouchSprint; tunings.swimForwardSpeed = _swim; tunings.swimForwardSprintSpeed = _swimSprint; } } internal static void Reset() { if (_active) { Restore(); } _active = false; _appliedTo = null; } private static bool IsAlive(PlayerCharacter pc) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown return (Object)pc != (Object)null; } } }