using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using REPOLib.Modules; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("Autodesk.Fbx")] [assembly: IgnoresAccessChecksTo("Discord.Sdk")] [assembly: IgnoresAccessChecksTo("Domain_Reload")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("FbxBuildTestAssets")] [assembly: IgnoresAccessChecksTo("Klattersynth")] [assembly: IgnoresAccessChecksTo("Photon3Unity3D")] [assembly: IgnoresAccessChecksTo("PhotonChat")] [assembly: IgnoresAccessChecksTo("PhotonRealtime")] [assembly: IgnoresAccessChecksTo("PhotonUnityNetworking")] [assembly: IgnoresAccessChecksTo("PhotonUnityNetworking.Utilities")] [assembly: IgnoresAccessChecksTo("PhotonVoice.API")] [assembly: IgnoresAccessChecksTo("PhotonVoice")] [assembly: IgnoresAccessChecksTo("PhotonVoice.PUN")] [assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime.Public")] [assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Attributes")] [assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Modules.Unity.Addressables")] [assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Modules.UnityLocalization")] [assembly: IgnoresAccessChecksTo("Sirenix.Serialization.Config")] [assembly: IgnoresAccessChecksTo("Sirenix.Serialization")] [assembly: IgnoresAccessChecksTo("Sirenix.Utilities")] [assembly: IgnoresAccessChecksTo("Unity.Addressables")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.Formats.Fbx.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.InternalAPIEngineBridge.013")] [assembly: IgnoresAccessChecksTo("Unity.Localization")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.MemoryProfiler")] [assembly: IgnoresAccessChecksTo("Unity.Postprocessing.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.ResourceManager")] [assembly: IgnoresAccessChecksTo("Unity.ScriptableBuildPipeline")] [assembly: IgnoresAccessChecksTo("Unity.Splines")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Antlr3.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Core")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Flow")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.State")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("websocket-sharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Marlin404")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SolItem")] [assembly: AssemblyTitle("SolItem")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 SolItem { [BepInPlugin("Marlin404.SolItem", "SolItem", "4.0.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class SolItem : BaseUnityPlugin { internal static SolItem Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(directoryName, "solplush.assets")); GameObject val2 = val.LoadAsset("Valuable Sol"); GameObject val3 = val.LoadAsset("Valuable SolChat"); GameObject val4 = val.LoadAsset("Valuable SolCrystal"); GameObject val5 = val.LoadAsset("Valuable SolChatBig"); GameObject val6 = val.LoadAsset("Valuable SolCrystalBlue"); GameObject val7 = val.LoadAsset("Valuable SolCrystalGreen"); GameObject val8 = val.LoadAsset("Valuable SolCrystalYellow"); GameObject val9 = val.LoadAsset("Valuable SolChibi"); Valuables.RegisterValuable(val2); Valuables.RegisterValuable(val3); Valuables.RegisterValuable(val4); Valuables.RegisterValuable(val5); Valuables.RegisterValuable(val6); Valuables.RegisterValuable(val7); Valuables.RegisterValuable(val8); Valuables.RegisterValuable(val9); GameObject val10 = val.LoadAsset("Valuable SolChat1"); Valuables.RegisterValuable(val10); GameObject val11 = val.LoadAsset("Valuable SolChat2"); Valuables.RegisterValuable(val11); } internal void Patch() { //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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } public class SolItemTrap : Trap { private enum State { Idle, Active } public enum SoundType { Pickup, HurtLight, HurtMedium, HurtHeavy, TailBreak, Destroyed } private PhysGrabObject physgrabobject; [Space] [Header("Sol Plush Components")] public GameObject? leftEye; public GameObject? rightEye; public GameObject? leftPupil; public GameObject? rightPupil; public bool doChatPhrases; public List phrases = new List(); private float coolDownUntilNextSentence = 3f; private string playerName = "[playerName]"; private State currentState; private Rigidbody? rb; private ParticleScriptExplosion particleScriptExplosion; private bool tailBroken; private bool eyeTracking; private PlayerAvatar lastPlayerGrabbed; private bool prevUpdateGrabbed; public float playerPupilDilationSize = 3f; [Space] public Transform? Center; public bool changePitch; [Space] public bool hourGlass; public bool speed; public bool shrink; public bool heal; [Space] [Header("Sounds")] public Sound? pickup; public Sound? hurtLight; public Sound? hurtMedium; public Sound? hurtHeavy; public Sound? destroyed; private DateTime lastTimeCalled; private DateTime lastTimeHeld; [Space] [Header("Death Objects")] public GameObject? spawnOnDeath; public int deathSpawnMinCount = 1; public int deathSpawnCount = 1; public bool deathSpawnCountRandom = false; public override void Start() { //IL_0037: 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_0057: 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) ((Trap)this).Start(); rb = ((Component)this).GetComponent(); physgrabobject = ((Component)this).GetComponent(); particleScriptExplosion = ((Component)this).GetComponent(); leftPupil.transform.localScale = Vector3.one * 2f; rightPupil.transform.localScale = Vector3.one * 2f; } public override void Update() { if (base.physGrabObject.grabbedLocal) { PlayerAvatar instance = PlayerAvatar.instance; if (playerPupilDilationSize != 1f) { instance.OverridePupilSize(playerPupilDilationSize, 4, 1f, 1f, 5f, 0.5f, 0.1f); } } if (doChatPhrases && SemiFunc.IsMultiplayer()) { switch (currentState) { case State.Idle: StateIdle(); break; case State.Active: StateActive(); break; } } if (hourGlass) { foreach (PhysGrabber item in base.physGrabObject.playerGrabbing) { if (Object.op_Implicit((Object)(object)item) && !item.isLocal) { item.playerAvatar.voiceChat.OverridePitch(0.65f, 1f, 2f, 0.1f, 0f, 0f); } } if (SemiFunc.IsMasterClientOrSingleplayer()) { base.physGrabObject.OverrideDrag(20f, 0.1f); base.physGrabObject.OverrideAngularDrag(40f, 0.1f); } if (base.physGrabObject.grabbedLocal) { PlayerAvatar instance2 = PlayerAvatar.instance; if (Object.op_Implicit((Object)(object)instance2.voiceChat)) { instance2.voiceChat.OverridePitch(0.65f, 1f, 2f, 0.1f, 0f, 0f); } instance2.OverridePupilSize(3f, 4, 1f, 1f, 5f, 0.5f, 0.1f); PlayerController.instance.OverrideSpeed(0.5f, 0.1f); PlayerController.instance.OverrideLookSpeed(0.5f, 2f, 1f, 0.1f); PlayerController.instance.OverrideAnimationSpeed(0.2f, 1f, 2f, 0.1f); PlayerController.instance.OverrideTimeScale(0.1f, 0.1f); base.physGrabObject.OverrideTorqueStrength(0.6f, 0.1f); CameraZoom.Instance.OverrideZoomSet(50f, 0.1f, 0.5f, 1f, ((Component)this).gameObject, 0); PostProcessing.Instance.SaturationOverride(50f, 0.1f, 0.5f, 0.1f, ((Component)this).gameObject); } } if (speed) { foreach (PhysGrabber item2 in base.physGrabObject.playerGrabbing) { if (Object.op_Implicit((Object)(object)item2) && !item2.isLocal) { item2.playerAvatar.voiceChat.OverridePitch(1.35f, 2f, 1f, 0.1f, 0f, 0f); } } if (base.physGrabObject.grabbedLocal) { PlayerAvatar instance3 = PlayerAvatar.instance; if (Object.op_Implicit((Object)(object)instance3.voiceChat)) { instance3.voiceChat.OverridePitch(1.8f, 1f, 2f, 0.1f, 0f, 0f); } instance3.OverridePupilSize(0.3f, 4, 1f, 1f, 5f, 0.5f, 0.1f); PlayerController.instance.OverrideSpeed(2f, 0.1f); base.physGrabObject.OverrideTorqueStrength(2f, 0.1f); PlayerController.instance.OverrideAnimationSpeed(2f, 2f, 1f, 0.1f); } } if (shrink) { } ((Trap)this).Update(); } private void FixedUpdate() { //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) PhysGrabObject component = ((Component)this).GetComponent(); PlayerAvatar lastPlayerGrabbing = component.lastPlayerGrabbing; if (component.grabbed && !prevUpdateGrabbed) { prevUpdateGrabbed = true; PlayPickupSound(); } else if (!component.grabbed && prevUpdateGrabbed) { prevUpdateGrabbed = false; lastTimeHeld = DateTime.Now; } if (eyeTracking) { if ((Object)(object)lastPlayerGrabbing != (Object)null && (Object)(object)lastPlayerGrabbing != (Object)(object)lastPlayerGrabbed) { lastPlayerGrabbed = lastPlayerGrabbing; } if ((Object)(object)lastPlayerGrabbed != (Object)null) { Vector3 position = ((Component)lastPlayerGrabbed).transform.position; bool flag = true; position.y = lastPlayerGrabbed.PlayerVisionTarget.TargetPosition; rightEye.transform.LookAt(position); leftEye.transform.LookAt(position); } } } private void StateIdle() { //IL_00ba: 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_01d6: 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_011d: Unknown result type (might be due to invalid IL or missing references) if (coolDownUntilNextSentence > 0f && base.physGrabObject.grabbed) { coolDownUntilNextSentence -= Time.deltaTime; } else { if (!Object.op_Implicit((Object)(object)PhysGrabber.instance) || !PhysGrabber.instance.grabbed || !Object.op_Implicit((Object)(object)PhysGrabber.instance.grabbedPhysGrabObject) || !((Object)(object)PhysGrabber.instance.grabbedPhysGrabObject == (Object)(object)base.physGrabObject)) { return; } bool flag = false; if (!SemiFunc.IsMultiplayer()) { playerName = "Sol"; flag = true; } else { List list = SemiFunc.PlayerGetAllPlayerAvatarWithinRange(10f, ((Component)PhysGrabber.instance).transform.position, false, default(LayerMask)); PlayerAvatar val = null; float num = float.MaxValue; foreach (PlayerAvatar item in list) { if (!((Object)(object)item == (Object)(object)PlayerAvatar.instance)) { float num2 = Vector3.Distance(((Component)PhysGrabber.instance).transform.position, ((Component)item).transform.position); if (num2 < num) { num = num2; val = item; } } } flag = true; if ((Object)(object)val != (Object)null) { playerName = val.playerName; } else { playerName = "Sol"; } } if (flag) { string text = GenerateAffectionateSentence(); currentState = State.Active; Color val2 = default(Color); ((Color)(ref val2))..ctor(1f, 0.3f, 0.6f, 1f); ChatManager.instance.PossessChatScheduleStart(10); ChatManager.instance.PossessChat((PossessChatID)1, text, 1f, val2, 0f, false, 0, (UnityEvent)null); ChatManager.instance.PossessChatScheduleEnd(); } } } private string GenerateAffectionateSentence() { string text = "Sol really stinks"; if (phrases.Count > 0) { text = phrases[Random.Range(0, phrases.Count)]; } string text2 = text.Replace("{playerName}", playerName); return char.ToUpper(text2[0]) + text2.Substring(1); } private void StateActive() { if (PhysGrabber.instance.grabbed && Object.op_Implicit((Object)(object)PhysGrabber.instance.grabbedPhysGrabObject) && (Object)(object)PhysGrabber.instance.grabbedPhysGrabObject != (Object)(object)base.physGrabObject) { currentState = State.Idle; coolDownUntilNextSentence = Random.Range(5f, 15f); } else if (!ChatManager.instance.StateIsPossessed()) { currentState = State.Idle; coolDownUntilNextSentence = Random.Range(5f, 15f); } } public void StartEyeTracking() { eyeTracking = true; } public void PlayPickupSound() { SoundManager(SoundType.Pickup); } public void PlayHurtSound() { if ((DateTime.Now - lastTimeHeld).TotalSeconds < 3.0) { SoundManager(SoundType.HurtLight); } } public void PlayHurtSoundMedium() { SoundManager(SoundType.HurtMedium); } public void PlayHurtSoundHeavy() { SoundManager(SoundType.HurtHeavy); } public void TrapStop() { //IL_002d: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) SoundManager(SoundType.Destroyed); SpawnOnBreak(); if (!heal) { return; } List list = SemiFunc.PlayerGetAllPlayerAvatarWithinRange(3f, ((Component)PhysGrabber.instance).transform.position, false, default(LayerMask)); PlayerAvatar val = null; foreach (PlayerAvatar item in list) { if (!((Object)(object)item == (Object)(object)PlayerAvatar.instance)) { float num = Vector3.Distance(((Component)PhysGrabber.instance).transform.position, ((Component)item).transform.position); item.playerHealth.Heal((int)(num * 10f), true); } } } private void SoundManager(SoundType SoundNum) { //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_0148: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) DateTime now = DateTime.Now; if ((now - lastTimeCalled).TotalSeconds < 0.05) { try { if (SoundNum == SoundType.Pickup) { pickup.Stop(); } if (SoundNum == SoundType.HurtLight) { hurtLight.Stop(); } if (SoundNum >= SoundType.HurtMedium) { hurtMedium.Stop(); } if (SoundNum >= SoundType.HurtHeavy) { hurtHeavy.Stop(); } } catch (Exception) { } } if ((now - lastTimeCalled).TotalSeconds > 3.0) { if (SoundNum == SoundType.Pickup) { pickup.Play(base.physGrabObject.centerPoint, 1f, 1f, 1f, 1f); } if (SoundNum == SoundType.HurtLight) { hurtLight.Play(base.physGrabObject.centerPoint, 1f, 1f, 1f, 1f); } if (SoundNum == SoundType.HurtMedium) { hurtMedium.Play(base.physGrabObject.centerPoint, 1f, 1f, 1f, 1f); } if (SoundNum == SoundType.HurtHeavy) { hurtHeavy.Play(base.physGrabObject.centerPoint, 1f, 1f, 1f, 1f); } lastTimeCalled = now; } if (SoundNum == SoundType.Destroyed) { destroyed.Play(base.physGrabObject.centerPoint, 1f, 1f, 1f, 1f); lastTimeCalled = now; } } public void SpawnOnBreak() { //IL_008b: 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_005b: 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_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_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)spawnOnDeath != (Object)null)) { return; } int num = deathSpawnCount; if (deathSpawnCountRandom) { num = Random.Range(deathSpawnMinCount, deathSpawnCount); } for (int i = 0; i < num; i++) { GameObject val = (SemiFunc.IsMultiplayer() ? PhotonNetwork.InstantiateRoomObject("Valuables/" + ((Object)spawnOnDeath).name, ((Component)this).transform.position, Quaternion.identity, (byte)0, (object[])null) : Object.Instantiate(spawnOnDeath, ((Component)this).transform.position, Quaternion.identity)); if ((Object)(object)val != (Object)null) { rb = val.GetComponent(); Vector3 onUnitSphere = Random.onUnitSphere; onUnitSphere.y = Mathf.Abs(onUnitSphere.y); rb.AddForce(onUnitSphere * 10f, (ForceMode)1); } } } } }