Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Seichi v1.0.5
BepInEx/plugins/seichi/LethalCompanySeichiItems.dll
Decompiled 6 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalCompanySeichiItems.Kanabo; using LethalCompanySeichiItems.NetcodePatcher; using LethalCompanySeichiItems.Uchiwa; using Microsoft.CodeAnalysis; using Unity.Collections; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: AssemblyCompany("Louis")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Lethal Company Seichi Items")] [assembly: AssemblyFileVersion("3.2.0.0")] [assembly: AssemblyInformationalVersion("3.2.0+c2cea823af9a531358eb978edcb6924b28dfde86")] [assembly: AssemblyProduct("LethalCompanySeichiItems")] [assembly: AssemblyTitle("LethalCompanySeichiItems")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("3.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LethalCompanySeichiItems { [BepInPlugin("LethalCompanySeichiItems", "LethalCompanySeichiItems", "3.2.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class SeichiItemsPlugin : BaseUnityPlugin { internal enum LogLevel { Debug, Info, Warning, Error } public const string ModGuid = "LCM_SeichiItems|3.2.0"; private readonly Harmony _harmony = new Harmony("LCM_SeichiItems|3.2.0"); private static SeichiItemsPlugin _instance; private static readonly ManualLogSource Mls = new ManualLogSource("LCM_SeichiItems|3.2.0"); public static UchiwaConfig UchiwaConfigInstance { get; internal set; } public static KanaboConfig KanaboConfigInstance { get; internal set; } private void Awake() { if ((Object)(object)_instance == (Object)null) { _instance = this; } _harmony.PatchAll(); UchiwaConfigInstance = new UchiwaConfig(((BaseUnityPlugin)this).Config); KanaboConfigInstance = new KanaboConfig(((BaseUnityPlugin)this).Config); _harmony.PatchAll(); _harmony.PatchAll(typeof(SeichiItemsPlugin)); InitializeNetworkStuff(); } internal static void Log(string msg, string prefix = "", LogLevel logLevel = LogLevel.Debug) { msg = prefix + "|" + msg; switch (logLevel) { case LogLevel.Debug: Mls.LogDebug((object)msg); break; case LogLevel.Info: Mls.LogInfo((object)msg); break; case LogLevel.Warning: Mls.LogWarning((object)msg); break; case LogLevel.Error: Mls.LogError((object)msg); break; default: throw new ArgumentOutOfRangeException("logLevel", logLevel, null); } } internal static void ChangeNetworkVar<T>(NetworkVariable<T> networkVariable, T newValue) where T : IEquatable<T> { if (!EqualityComparer<T>.Default.Equals(networkVariable.Value, newValue)) { networkVariable.Value = newValue; } } private static void InitializeNetworkStuff() { IEnumerable<Type> enumerable; try { enumerable = Assembly.GetExecutingAssembly().GetTypes(); } catch (ReflectionTypeLoadException ex) { enumerable = ex.Types.Where((Type t) => t != null); } foreach (Type item in enumerable) { MethodInfo[] methods = item.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } } } [Serializable] public class SyncedInstance<T> { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnRequestSync; public static HandleNamedMessageDelegate <1>__OnReceiveSync; } [NonSerialized] protected static int IntSize = 4; internal static CustomMessagingManager MessageManager => NetworkManager.Singleton.CustomMessagingManager; internal static bool IsClient => NetworkManager.Singleton.IsClient; internal static bool IsHost => NetworkManager.Singleton.IsHost; public static T Default { get; private set; } public static T Instance { get; private set; } public static bool Synced { get; internal set; } protected void InitInstance(T instance) { Default = instance; Instance = instance; IntSize = 4; } internal static void SyncInstance(byte[] data) { Instance = DeserializeFromBytes(data); Synced = true; } internal static void RevertSync() { Instance = Default; Synced = false; } public static byte[] SerializeToBytes(T val) { BinaryFormatter binaryFormatter = new BinaryFormatter(); using MemoryStream memoryStream = new MemoryStream(); try { binaryFormatter.Serialize(memoryStream, val); return memoryStream.ToArray(); } catch (Exception arg) { Debug.LogError((object)$"Error serializing instance: {arg}"); return null; } } public static T DeserializeFromBytes(byte[] data) { BinaryFormatter binaryFormatter = new BinaryFormatter(); using MemoryStream serializationStream = new MemoryStream(data); try { return (T)binaryFormatter.Deserialize(serializationStream); } catch (Exception arg) { Debug.LogError((object)$"Error deserializing instance: {arg}"); return default(T); } } private static void RequestSync() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (!IsClient) { return; } FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(IntSize, (Allocator)2, -1); try { MessageManager.SendNamedMessage("LCM_SeichiItems|3.2.0_OnRequestConfigSync", 0uL, val, (NetworkDelivery)3); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } private static void OnRequestSync(ulong clientId, FastBufferReader _) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) if (!IsHost) { return; } Debug.Log((object)$"Config sync request received from client: {clientId}"); byte[] array = SerializeToBytes(Instance); int num = array.Length; FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(num + IntSize, (Allocator)2, -1); try { ((FastBufferWriter)(ref val)).WriteValueSafe<int>(ref num, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteBytesSafe(array, -1, 0); MessageManager.SendNamedMessage("LCM_SeichiItems|3.2.0_OnReceiveConfigSync", clientId, val, (NetworkDelivery)3); } catch (Exception arg) { Debug.Log((object)$"Error occurred syncing config with client: {clientId}\n{arg}"); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } private static void OnReceiveSync(ulong _, FastBufferReader reader) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (!((FastBufferReader)(ref reader)).TryBeginRead(IntSize)) { Debug.LogError((object)"Config sync error: Could not begin reading buffer."); return; } int num = default(int); ((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref num, default(ForPrimitives)); if (!((FastBufferReader)(ref reader)).TryBeginRead(num)) { Debug.LogError((object)"Config sync error: Host could not sync."); return; } byte[] data = new byte[num]; ((FastBufferReader)(ref reader)).ReadBytesSafe(ref data, num, 0); SyncInstance(data); Debug.Log((object)"Successfully synced config with host."); } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] public static void InitializeLocalPlayer() { //IL_0058: 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_0063: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown if (IsHost) { CustomMessagingManager messageManager = MessageManager; object obj = <>O.<0>__OnRequestSync; if (obj == null) { HandleNamedMessageDelegate val = OnRequestSync; <>O.<0>__OnRequestSync = val; obj = (object)val; } messageManager.RegisterNamedMessageHandler("LCM_SeichiItems|3.2.0_OnRequestConfigSync", (HandleNamedMessageDelegate)obj); Synced = true; return; } Synced = false; CustomMessagingManager messageManager2 = MessageManager; object obj2 = <>O.<1>__OnReceiveSync; if (obj2 == null) { HandleNamedMessageDelegate val2 = OnReceiveSync; <>O.<1>__OnReceiveSync = val2; obj2 = (object)val2; } messageManager2.RegisterNamedMessageHandler("LCM_SeichiItems|3.2.0_OnReceiveConfigSync", (HandleNamedMessageDelegate)obj2); RequestSync(); } [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] public static void PlayerLeave() { RevertSync(); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "LethalCompanySeichiItems"; public const string PLUGIN_NAME = "LethalCompanySeichiItems"; public const string PLUGIN_VERSION = "3.2.0"; } } namespace LethalCompanySeichiItems.Uchiwa { public class UchiwaConfig : SyncedInstance<UchiwaConfig> { internal readonly ConfigEntry<int> UchiwaHealAmount; public UchiwaConfig(ConfigFile cfg) { InitInstance(this); UchiwaHealAmount = cfg.Bind<int>("Uchiwa", "Player Heal Amount", 5, "The amount of health a player receives when hit with the Uchiwa."); } } public class UchiwaItem : GrabbableObject { private enum AudioClipTypes { Hit, Swing, HitSurface } private const string LOGPrefix = "Uchiwa"; [Tooltip("The amount of healing the Uchiwa does per swing.")] [SerializeField] private int healAmount = 5; [Header("Audio")] [Space(5f)] [SerializeField] private AudioSource uchiwaAudio; public AudioClip[] hitSfx; public AudioClip[] swingSfx; private PlayerControllerB _previousPlayerHeldBy; private List<RaycastHit> _objectsHitByUchiwaList = new List<RaycastHit>(); private RaycastHit[] _objectsHitByUchiwa; private static readonly int UseHeldItem1 = Animator.StringToHash("UseHeldItem1"); private const int KnifeMask = 11012424; private float _timeAtLastDamageDealt; public override void Start() { ((GrabbableObject)this).Start(); healAmount = Mathf.Clamp(SyncedInstance<UchiwaConfig>.Instance.UchiwaHealAmount.Value, 0, int.MaxValue); } public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)base.playerHeldBy != (Object)null) { _previousPlayerHeldBy = base.playerHeldBy; if (((NetworkBehaviour)base.playerHeldBy).IsOwner) { base.playerHeldBy.playerBodyAnimator.SetTrigger(UseHeldItem1); } } if (((NetworkBehaviour)this).IsOwner) { PlayAudioClipTypeServerRpc(AudioClipTypes.Swing); HitUchiwa(); } } private void HitUchiwa(bool cancel = false) { //IL_0054: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0260: 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_012b: 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_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_0187: 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_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_previousPlayerHeldBy == (Object)null) { SeichiItemsPlugin.Log("Variable '_previousPlayerHeldBy' is null on this client when HitUchiwa is called.", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); return; } _previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; int num = -1; if (!cancel) { _previousPlayerHeldBy.twoHanded = false; _objectsHitByUchiwa = Physics.SphereCastAll(((Component)_previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)_previousPlayerHeldBy.gameplayCamera).transform.right * 0.1f, 0.3f, ((Component)_previousPlayerHeldBy.gameplayCamera).transform.forward, 0.75f, 11012424, (QueryTriggerInteraction)2); _objectsHitByUchiwaList = _objectsHitByUchiwa.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); IHittable val3 = default(IHittable); for (int i = 0; i < _objectsHitByUchiwaList.Count; i++) { RaycastHit val = _objectsHitByUchiwaList[i]; RaycastHit val2 = val; if (((Component)((RaycastHit)(ref val2)).transform).gameObject.layer != 8 && ((Component)((RaycastHit)(ref val2)).transform).gameObject.layer != 11) { val2 = val; if (!((Component)((RaycastHit)(ref val2)).transform).TryGetComponent<IHittable>(ref val3)) { continue; } val2 = val; if ((Object)(object)((RaycastHit)(ref val2)).transform == (Object)(object)((Component)_previousPlayerHeldBy).transform) { continue; } val2 = val; if (!(((RaycastHit)(ref val2)).point == Vector3.zero)) { Vector3 position = ((Component)_previousPlayerHeldBy.gameplayCamera).transform.position; val2 = val; Vector3 point = ((RaycastHit)(ref val2)).point; RaycastHit val4 = default(RaycastHit); int collidersAndRoomMaskAndDefault = StartOfRound.Instance.collidersAndRoomMaskAndDefault; if (Physics.Linecast(position, point, ref val4, collidersAndRoomMaskAndDefault)) { continue; } } flag = true; Vector3 forward = ((Component)_previousPlayerHeldBy.gameplayCamera).transform.forward; try { if ((double)Time.realtimeSinceStartup - (double)_timeAtLastDamageDealt > 0.4300000071525574) { _timeAtLastDamageDealt = Time.realtimeSinceStartup; flag2 = true; PlayerControllerB val5 = (PlayerControllerB)(object)((val3 is PlayerControllerB) ? val3 : null); if (val5 != null) { HealPlayerServerRpc(val5.actualClientId); } else { val3.Hit(0, forward, _previousPlayerHeldBy, true, 5); } } } catch (Exception arg) { SeichiItemsPlugin.Log($"Exception when hitting object with uchiwa from player #{_previousPlayerHeldBy.playerClientId}: {arg}", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); } continue; } flag = true; val2 = val; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (!(StartOfRound.Instance.footstepSurfaces[j].surfaceTag != ((Component)((RaycastHit)(ref val2)).collider).gameObject.tag)) { num = j; break; } } } } if (flag) { PlayAudioClipTypeServerRpc(AudioClipTypes.Hit); if (!flag2 && num != -1) { PlayAudioClipTypeClientRpc(AudioClipTypes.HitSurface, num); } } } [ServerRpc(RequireOwnership = false)] private void HealPlayerServerRpc(ulong playerId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2944637045u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2944637045u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB val3; try { val3 = StartOfRound.Instance.allPlayerScripts[playerId]; } catch (IndexOutOfRangeException) { SeichiItemsPlugin.Log($"Tried to heal player with ID: {playerId}, but such player does not exist.", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); return; } if ((Object)(object)val3 == (Object)null) { SeichiItemsPlugin.Log($"Tried to heal player with ID: {playerId}, but the player object is null.", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); } int playerMaxHealth = GetPlayerMaxHealth(val3); int playerNewHealth = ((playerMaxHealth != -1) ? Mathf.Min(val3.health + healAmount, playerMaxHealth) : Mathf.Min(val3.health + healAmount, 100)); HealPlayerClientRpc(playerId, playerNewHealth); } } [ClientRpc] private void HealPlayerClientRpc(ulong playerId, int playerNewHealth) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3245975384u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, playerNewHealth); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3245975384u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerId]; val3.health = playerNewHealth; if ((Object)(object)HUDManager.Instance.localPlayer == (Object)(object)val3) { HUDManager.Instance.UpdateHealthUI(val3.health, false); } } } private static int GetPlayerMaxHealth(PlayerControllerB player) { if (UchiwaSharedData.Instance.PlayersMaxHealth.ContainsKey(player)) { return UchiwaSharedData.Instance.PlayersMaxHealth[player]; } SeichiItemsPlugin.Log("Could not get the health of player " + player.playerUsername + ". This should not happen.", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); return -1; } [ServerRpc(RequireOwnership = false)] private void PlayAudioClipTypeServerRpc(AudioClipTypes audioClipType, bool interrupt = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2229229963u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref interrupt, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2229229963u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; int num = audioClipType switch { AudioClipTypes.Hit => hitSfx.Length, AudioClipTypes.Swing => swingSfx.Length, _ => -1, }; switch (num) { case 0: SeichiItemsPlugin.Log($"There are no audio clips for audio clip type {audioClipType}.", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); break; case -1: SeichiItemsPlugin.Log($"Audio Clip Type was not listed, cannot play audio clip. Number of audio clips: {num}.", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); break; default: { int clipIndex = Random.Range(0, num); PlayAudioClipTypeClientRpc(audioClipType, clipIndex, interrupt); break; } } } } [ClientRpc] private void PlayAudioClipTypeClientRpc(AudioClipTypes audioClipType, int clipIndex, bool interrupt = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_00a5: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3423178400u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); BytePacker.WriteValueBitPacked(val2, clipIndex); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref interrupt, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3423178400u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; AudioClip val3 = (AudioClip)(audioClipType switch { AudioClipTypes.Hit => hitSfx[clipIndex], AudioClipTypes.Swing => swingSfx[clipIndex], AudioClipTypes.HitSurface => StartOfRound.Instance.footstepSurfaces[clipIndex].hitSurfaceSFX, _ => null, }); if ((Object)(object)val3 == (Object)null) { SeichiItemsPlugin.Log($"Invalid audio clip with type: {audioClipType} and index: {clipIndex}", "Uchiwa", SeichiItemsPlugin.LogLevel.Error); return; } if (interrupt) { uchiwaAudio.Stop(true); } uchiwaAudio.PlayOneShot(val3); WalkieTalkie.TransmitOneShotAudio(uchiwaAudio, val3, uchiwaAudio.volume); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 8f, 0.4f, 0, false, 0); } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(2944637045u, new RpcReceiveHandler(__rpc_handler_2944637045), "HealPlayerServerRpc"); ((NetworkBehaviour)this).__registerRpc(3245975384u, new RpcReceiveHandler(__rpc_handler_3245975384), "HealPlayerClientRpc"); ((NetworkBehaviour)this).__registerRpc(2229229963u, new RpcReceiveHandler(__rpc_handler_2229229963), "PlayAudioClipTypeServerRpc"); ((NetworkBehaviour)this).__registerRpc(3423178400u, new RpcReceiveHandler(__rpc_handler_3423178400), "PlayAudioClipTypeClientRpc"); ((GrabbableObject)this).__initializeRpcs(); } private static void __rpc_handler_2944637045(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); target.__rpc_exec_stage = (__RpcExecStage)1; ((UchiwaItem)(object)target).HealPlayerServerRpc(playerId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3245975384(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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) //IL_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); int playerNewHealth = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerNewHealth); target.__rpc_exec_stage = (__RpcExecStage)1; ((UchiwaItem)(object)target).HealPlayerClientRpc(playerId, playerNewHealth); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2229229963(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { AudioClipTypes audioClipType = default(AudioClipTypes); ((FastBufferReader)(ref reader)).ReadValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); bool interrupt = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref interrupt, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((UchiwaItem)(object)target).PlayAudioClipTypeServerRpc(audioClipType, interrupt); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3423178400(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { AudioClipTypes audioClipType = default(AudioClipTypes); ((FastBufferReader)(ref reader)).ReadValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); int clipIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clipIndex); bool interrupt = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref interrupt, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((UchiwaItem)(object)target).PlayAudioClipTypeClientRpc(audioClipType, clipIndex, interrupt); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "UchiwaItem"; } } public class UchiwaSharedData { private static UchiwaSharedData _instance; public static UchiwaSharedData Instance => _instance ?? (_instance = new UchiwaSharedData()); public Dictionary<PlayerControllerB, int> PlayersMaxHealth { get; } = new Dictionary<PlayerControllerB, int>(); public static void FlushDictionaries() { Instance.PlayersMaxHealth.Clear(); } } } namespace LethalCompanySeichiItems.Uchiwa.Patches { [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatches { [HarmonyPatch("ShipLeave")] [HarmonyPostfix] private static void ResetData(StartOfRound __instance) { UchiwaSharedData.FlushDictionaries(); } [HarmonyPatch("StartGame")] [HarmonyPostfix] private static void GetAllPlayersMaxHealth(StartOfRound __instance) { for (int i = 0; i < __instance.allPlayerScripts.Length; i++) { PlayerControllerB val = __instance.allPlayerScripts[i]; if (UchiwaSharedData.Instance.PlayersMaxHealth.ContainsKey(val)) { UchiwaSharedData.Instance.PlayersMaxHealth.Remove(val); } UchiwaSharedData.Instance.PlayersMaxHealth.Add(val, val.health); } } } } namespace LethalCompanySeichiItems.Lantern { public class LanternItem : GrabbableObject { private const string LOGPrefix = "Lantern"; [Header("Lantern Stuff")] [Space(15f)] [SerializeField] private Light bulbLightSource; [SerializeField] private Light bulbGlowLightSource; [SerializeField] private AudioSource audioSource; [SerializeField] private AudioClip[] turnOnAudioClips; [SerializeField] private AudioClip[] turnOffAudioClips; [SerializeField] private Material bulbLightMaterial; [SerializeField] private Material bulbDarkMaterial; [SerializeField] private MeshRenderer meshRenderer; [SerializeField] private GameObject lanternHelmetLightPrefab; private GameObject lanternHelmetLightInstance; private Light lanternHelmetLightSource; private readonly NetworkVariable<bool> _isMainLightOn = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1); private readonly NetworkVariable<bool> _isHelmetLightOn = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1); private readonly NetworkVariable<bool> _isOn = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1); private bool _subscribedToNetworkEvents; private bool _hasInstantiated; private void OnEnable() { SubscribeToNetworkEvents(); } private void OnDisable() { UnsubscribeFromNetworkEvents(); } public override void OnDestroy() { if ((Object)(object)lanternHelmetLightInstance != (Object)null) { Object.Destroy((Object)(object)lanternHelmetLightInstance); } ((NetworkBehaviour)this).OnDestroy(); } public override void Start() { //IL_0116: Unknown result type (might be due to invalid IL or missing references) SubscribeToNetworkEvents(); if (_hasInstantiated) { return; } if ((Object)(object)meshRenderer == (Object)null) { meshRenderer = ((Component)this).GetComponent<MeshRenderer>(); } if ((Object)(object)meshRenderer == (Object)null) { SeichiItemsPlugin.Log("The mesh renderer component on the lantern is null.", "Lantern", SeichiItemsPlugin.LogLevel.Error); } if ((Object)(object)bulbLightSource == (Object)null) { SeichiItemsPlugin.Log("The bulbLightSource on the lantern is null.", "Lantern", SeichiItemsPlugin.LogLevel.Error); } if ((Object)(object)bulbGlowLightSource == (Object)null) { SeichiItemsPlugin.Log("The bulbGlowLightSource on the lantern is null.", "Lantern", SeichiItemsPlugin.LogLevel.Error); } if ((Object)(object)lanternHelmetLightPrefab == (Object)null) { SeichiItemsPlugin.Log("The lanternHelmetLightPrefab gameobject on this lantern is null.", "Lantern", SeichiItemsPlugin.LogLevel.Error); } lanternHelmetLightInstance = Object.Instantiate<GameObject>(lanternHelmetLightPrefab); lanternHelmetLightSource = lanternHelmetLightInstance.GetComponent<Light>(); if ((Object)(object)lanternHelmetLightSource == (Object)null) { lanternHelmetLightSource = lanternHelmetLightInstance.GetComponentInChildren<Light>(); if ((Object)(object)lanternHelmetLightSource == (Object)null) { SeichiItemsPlugin.Log("The lanternHelmetLightSource light component on this lantern is null.", "Lantern", SeichiItemsPlugin.LogLevel.Error); } } ((Component)lanternHelmetLightSource).gameObject.transform.position = ((Component)this).transform.position; ((Behaviour)lanternHelmetLightSource).enabled = false; ((Behaviour)bulbLightSource).enabled = false; ((Behaviour)bulbGlowLightSource).enabled = false; _hasInstantiated = true; ((GrabbableObject)this).Start(); } public override void LateUpdate() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) if ((base.isHeld || base.isPocketed) && _isOn.Value && _isHelmetLightOn.Value) { lanternHelmetLightInstance.transform.position = ((Component)base.playerHeldBy.helmetLight).transform.position; lanternHelmetLightInstance.transform.rotation = ((Component)base.playerHeldBy.helmetLight).transform.rotation; } ((GrabbableObject)this).LateUpdate(); } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0084: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); base.isBeingUsed = used; bool flag = false; if (!_isOn.Value) { if (turnOnAudioClips.Length != 0) { audioSource.PlayOneShot(turnOnAudioClips[Random.Range(0, turnOnAudioClips.Length)]); flag = true; } } else if (turnOffAudioClips.Length != 0) { audioSource.PlayOneShot(turnOffAudioClips[Random.Range(0, turnOffAudioClips.Length)]); flag = true; } if (flag) { RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 6f, 0.3f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0); } if (((NetworkBehaviour)this).IsOwner) { _isOn.Value = !_isOn.Value; _isMainLightOn.Value = !_isMainLightOn.Value; _isHelmetLightOn.Value = !_isHelmetLightOn.Value; } } public override void DiscardItem() { if (((NetworkBehaviour)this).IsOwner) { SeichiItemsPlugin.ChangeNetworkVar(_isHelmetLightOn, newValue: false); SeichiItemsPlugin.ChangeNetworkVar(_isMainLightOn, _isOn.Value); } ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { if (((NetworkBehaviour)this).IsOwner) { SeichiItemsPlugin.ChangeNetworkVar(_isHelmetLightOn, _isOn.Value); SeichiItemsPlugin.ChangeNetworkVar(_isMainLightOn, _isOn.Value); } ((GrabbableObject)this).EquipItem(); } public override void PocketItem() { if (((NetworkBehaviour)this).IsOwner) { SeichiItemsPlugin.ChangeNetworkVar(_isHelmetLightOn, _isOn.Value); SeichiItemsPlugin.ChangeNetworkVar(_isMainLightOn, newValue: false); } ((GrabbableObject)this).PocketItem(); } private void OnMainLightToggled(bool oldIsTurnedOn, bool newIsTurnedOn) { SeichiItemsPlugin.Log($"Main light on?: {newIsTurnedOn}", "Lantern"); ((Behaviour)bulbLightSource).enabled = newIsTurnedOn; ((Behaviour)bulbGlowLightSource).enabled = newIsTurnedOn; Material[] sharedMaterials = ((Renderer)meshRenderer).sharedMaterials; sharedMaterials[0] = (newIsTurnedOn ? bulbLightMaterial : bulbDarkMaterial); ((Renderer)meshRenderer).sharedMaterials = sharedMaterials; } private void OnHelmetLightToggled(bool oldIsTurnedOn, bool newIsTurnedOn) { SeichiItemsPlugin.Log($"Helmet light on?: {newIsTurnedOn}", "Lantern"); ((Behaviour)lanternHelmetLightSource).enabled = newIsTurnedOn; } private void SubscribeToNetworkEvents() { if (!_subscribedToNetworkEvents) { NetworkVariable<bool> isMainLightOn = _isMainLightOn; isMainLightOn.OnValueChanged = (OnValueChangedDelegate<bool>)(object)Delegate.Combine((Delegate?)(object)isMainLightOn.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate<bool>(OnMainLightToggled)); NetworkVariable<bool> isHelmetLightOn = _isHelmetLightOn; isHelmetLightOn.OnValueChanged = (OnValueChangedDelegate<bool>)(object)Delegate.Combine((Delegate?)(object)isHelmetLightOn.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate<bool>(OnHelmetLightToggled)); _subscribedToNetworkEvents = true; } } private void UnsubscribeFromNetworkEvents() { if (_subscribedToNetworkEvents) { NetworkVariable<bool> isMainLightOn = _isMainLightOn; isMainLightOn.OnValueChanged = (OnValueChangedDelegate<bool>)(object)Delegate.Remove((Delegate?)(object)isMainLightOn.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate<bool>(OnMainLightToggled)); NetworkVariable<bool> isHelmetLightOn = _isHelmetLightOn; isHelmetLightOn.OnValueChanged = (OnValueChangedDelegate<bool>)(object)Delegate.Remove((Delegate?)(object)isHelmetLightOn.OnValueChanged, (Delegate?)(object)new OnValueChangedDelegate<bool>(OnHelmetLightToggled)); _subscribedToNetworkEvents = false; } } protected override void __initializeVariables() { if (_isMainLightOn == null) { throw new Exception("LanternItem._isMainLightOn cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)_isMainLightOn).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_isMainLightOn, "_isMainLightOn"); ((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_isMainLightOn); if (_isHelmetLightOn == null) { throw new Exception("LanternItem._isHelmetLightOn cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)_isHelmetLightOn).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_isHelmetLightOn, "_isHelmetLightOn"); ((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_isHelmetLightOn); if (_isOn == null) { throw new Exception("LanternItem._isOn cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)_isOn).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_isOn, "_isOn"); ((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)_isOn); ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { ((GrabbableObject)this).__initializeRpcs(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "LanternItem"; } } } namespace LethalCompanySeichiItems.Kanabo { public class KanaboConfig : SyncedInstance<KanaboConfig> { public readonly ConfigEntry<int> KanaboDamage; public readonly ConfigEntry<float> KanaboReelUpTime; public KanaboConfig(ConfigFile cfg) { InitInstance(this); KanaboDamage = cfg.Bind<int>("Kanabo", "Damage", 2, "The amount of damage the Kanabo does per hit."); KanaboReelUpTime = cfg.Bind<float>("Kanabo", "Reel Up Time", 0.7f, "The time it takes in seconds for the player to reel up the Kanabo."); } } public class KanaboItem : GrabbableObject { private enum AudioClipTypes { ReelUp, Swing, Hit, HitSurface } private const string LOGPrefix = "Kanabo"; [Tooltip("The amount of damage the Kanabo does on a single hit.")] [SerializeField] private int hitForce = 2; [Tooltip("The reel up time in seconds for the Kanabo.")] [SerializeField] private float reelUpTime = 0.7f; [Header("Audio")] [Space(5f)] [SerializeField] private AudioSource kanaboAudio; public AudioClip[] reelUpSfx; public AudioClip[] swingSfx; public AudioClip[] hitSfx; private const int ShovelMask = 11012424; private static readonly int ShovelHit = Animator.StringToHash("shovelHit"); private static readonly int ReelingUp = Animator.StringToHash("reelingUp"); private bool _reelingUp; private bool _isHoldingButton; private bool _animatorSpeedCurrentlyModified; private float _origionalPlayerAnimatorSpeed; private List<RaycastHit> _objectsHitByKanaboList = new List<RaycastHit>(); private RaycastHit[] _objectsHitByKanabo; private Coroutine _reelingUpCoroutine; private PlayerControllerB _previousPlayerHeldBy; private void OnDisable() { if (_animatorSpeedCurrentlyModified) { base.playerHeldBy.playerBodyAnimator.speed = _origionalPlayerAnimatorSpeed; } } public override void Start() { ((GrabbableObject)this).Start(); hitForce = Mathf.Clamp(SyncedInstance<KanaboConfig>.Instance.KanaboDamage.Value, 0, int.MaxValue); reelUpTime = Mathf.Clamp(SyncedInstance<KanaboConfig>.Instance.KanaboReelUpTime.Value, 0.05f, 2.1474836E+09f); _origionalPlayerAnimatorSpeed = StartOfRound.Instance.allPlayerScripts[0].playerBodyAnimator.speed; } public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)base.playerHeldBy == (Object)null) { return; } _isHoldingButton = buttonDown; if (!_reelingUp && buttonDown) { _reelingUp = true; _previousPlayerHeldBy = base.playerHeldBy; if (_reelingUpCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_reelingUpCoroutine); _reelingUpCoroutine = null; } _reelingUpCoroutine = ((MonoBehaviour)this).StartCoroutine(ReelUpKanabo()); } } private IEnumerator ReelUpKanabo() { try { if ((Object)(object)base.playerHeldBy == (Object)null) { SeichiItemsPlugin.Log("PlayerHeldBy is null at the start of ReelUpKanabo. Aborting.", "Kanabo", SeichiItemsPlugin.LogLevel.Warning); yield break; } ulong playerHeldByClientId = base.playerHeldBy.actualClientId; Animator animator = base.playerHeldBy.playerBodyAnimator; if ((Object)(object)animator == (Object)null) { SeichiItemsPlugin.Log("PlayerBodyAnimator is null. Aborting.", "Kanabo", SeichiItemsPlugin.LogLevel.Warning); yield break; } base.playerHeldBy.activatingItem = true; base.playerHeldBy.twoHanded = true; animator.ResetTrigger(ShovelHit); animator.SetBool(ReelingUp, true); yield return null; RuntimeAnimatorController runtimeAnimatorController = animator.runtimeAnimatorController; AnimationClip val = ((runtimeAnimatorController == null) ? null : runtimeAnimatorController.animationClips?.FirstOrDefault((Func<AnimationClip, bool>)((AnimationClip clip) => ((Object)clip).name == "ShovelReelUp"))); if ((Object)(object)val != (Object)null) { _origionalPlayerAnimatorSpeed = animator.speed; float speed = val.length / reelUpTime; _animatorSpeedCurrentlyModified = true; animator.speed = speed; PlayAudioClipTypeServerRpc(AudioClipTypes.ReelUp); yield return (object)new WaitForSeconds(reelUpTime); if ((Object)(object)animator == (Object)null) { animator = StartOfRound.Instance.allPlayerScripts[playerHeldByClientId].playerBodyAnimator; } animator.speed = _origionalPlayerAnimatorSpeed; _animatorSpeedCurrentlyModified = false; } else { SeichiItemsPlugin.Log("No animation clips found in the runtimeAnimatorController.", "Kanabo", SeichiItemsPlugin.LogLevel.Warning); } yield return (object)new WaitUntil((Func<bool>)(() => !_isHoldingButton || !base.isHeld)); SwingKanabo(!base.isHeld); yield return (object)new WaitForSeconds(0.13f); yield return (object)new WaitForEndOfFrame(); HitKanabo(!base.isHeld); yield return (object)new WaitForSeconds(0.3f); } finally { KanaboItem kanaboItem = this; kanaboItem._reelingUp = false; kanaboItem._reelingUpCoroutine = null; } } public void SwingKanabo(bool cancel = false) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) _previousPlayerHeldBy.playerBodyAnimator.SetBool(ReelingUp, false); if (!cancel) { if (((NetworkBehaviour)this).IsServer) { PlayAudioClipTypeServerRpc(AudioClipTypes.Swing); } _previousPlayerHeldBy.UpdateSpecialAnimationValue(true, (short)((Component)_previousPlayerHeldBy).transform.localEulerAngles.y, 0.4f, false); } } public void HitKanabo(bool cancel = false) { //IL_0054: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0220: 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_012b: 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_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_0187: 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_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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) if ((Object)(object)_previousPlayerHeldBy == (Object)null) { SeichiItemsPlugin.Log("Variable '_previousPlayerHeldBy' is null on this client when HitKanabo is called.", "Kanabo", SeichiItemsPlugin.LogLevel.Error); return; } _previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; int num = -1; if (!cancel) { _previousPlayerHeldBy.twoHanded = false; _objectsHitByKanabo = Physics.SphereCastAll(((Component)_previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)_previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)_previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, 11012424, (QueryTriggerInteraction)2); _objectsHitByKanaboList = _objectsHitByKanabo.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); IHittable val3 = default(IHittable); for (int i = 0; i < _objectsHitByKanaboList.Count; i++) { RaycastHit val = _objectsHitByKanaboList[i]; RaycastHit val2 = val; if (((Component)((RaycastHit)(ref val2)).transform).gameObject.layer != 8 && ((Component)((RaycastHit)(ref val2)).transform).gameObject.layer != 11) { val2 = val; if (!((Component)((RaycastHit)(ref val2)).transform).TryGetComponent<IHittable>(ref val3)) { continue; } val2 = val; if ((Object)(object)((RaycastHit)(ref val2)).transform == (Object)(object)((Component)_previousPlayerHeldBy).transform) { continue; } val2 = val; if (!(((RaycastHit)(ref val2)).point == Vector3.zero)) { Vector3 position = ((Component)_previousPlayerHeldBy.gameplayCamera).transform.position; val2 = val; Vector3 point = ((RaycastHit)(ref val2)).point; RaycastHit val4 = default(RaycastHit); int collidersAndRoomMaskAndDefault = StartOfRound.Instance.collidersAndRoomMaskAndDefault; if (Physics.Linecast(position, point, ref val4, collidersAndRoomMaskAndDefault)) { continue; } } flag = true; Vector3 forward = ((Component)_previousPlayerHeldBy.gameplayCamera).transform.forward; try { val3.Hit(hitForce, forward, _previousPlayerHeldBy, true, 1); flag2 = true; } catch (Exception arg) { SeichiItemsPlugin.Log($"Exception caught when hitting object with Kanabo from player {_previousPlayerHeldBy.playerUsername}: {arg}", "Kanabo", SeichiItemsPlugin.LogLevel.Error); } continue; } flag = true; val2 = val; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (!(StartOfRound.Instance.footstepSurfaces[j].surfaceTag != ((Component)((RaycastHit)(ref val2)).collider).gameObject.tag)) { num = j; break; } } } } if (flag) { if (!flag2 && num != -1) { PlayAudioClipTypeClientRpc(AudioClipTypes.HitSurface, num); } base.playerHeldBy.playerBodyAnimator.SetTrigger(ShovelHit); PlayAudioClipTypeServerRpc(AudioClipTypes.Hit); } } public override void DiscardItem() { if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.activatingItem = false; } ((GrabbableObject)this).DiscardItem(); } [ServerRpc(RequireOwnership = false)] private void PlayAudioClipTypeServerRpc(AudioClipTypes audioClipType, bool interrupt = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1864931625u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref interrupt, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1864931625u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; int num = audioClipType switch { AudioClipTypes.Swing => swingSfx.Length, AudioClipTypes.Hit => hitSfx.Length, AudioClipTypes.ReelUp => reelUpSfx.Length, _ => -1, }; switch (num) { case 0: SeichiItemsPlugin.Log($"There are no audio clips for audio clip type {audioClipType}.", "Kanabo", SeichiItemsPlugin.LogLevel.Error); break; case -1: SeichiItemsPlugin.Log($"Audio Clip Type was not listed, cannot play audio clip. Number of audio clips: {num}.", "Kanabo", SeichiItemsPlugin.LogLevel.Error); break; default: { int clipIndex = Random.Range(0, num); PlayAudioClipTypeClientRpc(audioClipType, clipIndex, interrupt); break; } } } } [ClientRpc] private void PlayAudioClipTypeClientRpc(AudioClipTypes audioClipType, int clipIndex, bool interrupt = false) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_00a5: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(739090681u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); BytePacker.WriteValueBitPacked(val2, clipIndex); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref interrupt, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 739090681u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; AudioClip val3 = (AudioClip)(audioClipType switch { AudioClipTypes.Hit => hitSfx[clipIndex], AudioClipTypes.Swing => swingSfx[clipIndex], AudioClipTypes.ReelUp => reelUpSfx[clipIndex], AudioClipTypes.HitSurface => StartOfRound.Instance.footstepSurfaces[clipIndex].hitSurfaceSFX, _ => null, }); if ((Object)(object)val3 == (Object)null) { SeichiItemsPlugin.Log($"Invalid audio clip with type: {audioClipType} and index: {clipIndex}", "Kanabo", SeichiItemsPlugin.LogLevel.Error); return; } if (interrupt) { kanaboAudio.Stop(true); } kanaboAudio.PlayOneShot(val3); WalkieTalkie.TransmitOneShotAudio(kanaboAudio, val3, kanaboAudio.volume); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 8f, 0.4f, 0, false, 0); } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1864931625u, new RpcReceiveHandler(__rpc_handler_1864931625), "PlayAudioClipTypeServerRpc"); ((NetworkBehaviour)this).__registerRpc(739090681u, new RpcReceiveHandler(__rpc_handler_739090681), "PlayAudioClipTypeClientRpc"); ((GrabbableObject)this).__initializeRpcs(); } private static void __rpc_handler_1864931625(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { AudioClipTypes audioClipType = default(AudioClipTypes); ((FastBufferReader)(ref reader)).ReadValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); bool interrupt = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref interrupt, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((KanaboItem)(object)target).PlayAudioClipTypeServerRpc(audioClipType, interrupt); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_739090681(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { AudioClipTypes audioClipType = default(AudioClipTypes); ((FastBufferReader)(ref reader)).ReadValueSafe<AudioClipTypes>(ref audioClipType, default(ForEnums)); int clipIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clipIndex); bool interrupt = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref interrupt, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((KanaboItem)(object)target).PlayAudioClipTypeClientRpc(audioClipType, clipIndex, interrupt); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "KanaboItem"; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<bool>(); NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<bool>(); } } } namespace LethalCompanySeichiItems.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }
BepInEx/plugins/seichi/ScarletMansionSeichiPatch.dll
Decompiled 6 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Logging; using HarmonyLib; using ScarletMansion.DunGenPatch; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ScarletMansionSeichiPatch")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ScarletMansionSeichiPatch")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("3fb44756-2543-4ee4-ace4-da3fdb995192")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace ScarletMansionSeichiPatch; public class Patch { public static void Activate() { Plugin.Instance.harmony.PatchAll(typeof(Patch)); } public static Volume GetVolume() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) GameObject[] array = null; for (int i = 0; i < SceneManager.sceneCount; i++) { Scene sceneAt = SceneManager.GetSceneAt(i); if (((Scene)(ref sceneAt)).name.ToLowerInvariant() == "seichi") { array = ((Scene)(ref sceneAt)).GetRootGameObjects(); Plugin.logger.LogInfo((object)"Found Seichi scene"); break; } } if (array == null) { return null; } GameObject[] array2 = array; foreach (GameObject val in array2) { if (((Object)val).name.ToLowerInvariant() == "environment") { Transform val2 = val.transform.Find("RaphtaliaVolume"); if ((Object)(object)val2 != (Object)null) { return ((Component)val2).GetComponentInChildren<Volume>(true); } } } return null; } [HarmonyPatch(typeof(RoundManager), "SetPowerOffAtStart")] [HarmonyPostfix] public static void ShipLandedPatch(ref RoundManager __instance) { if (Patch.active) { Volume volume = GetVolume(); if ((Object)(object)volume == (Object)null) { Plugin.logger.LogWarning((object)"Couldn't setup SDM/Seichi compatibility feature"); } else { ((Behaviour)volume).enabled = true; } } } } [BepInPlugin("dev.ladyalice.scarletmansion.seichipatch", "Scarlet Mansion Seichi Patch", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string modGUID = "dev.ladyalice.scarletmansion.seichipatch"; private const string modName = "Scarlet Mansion Seichi Patch"; private const string modVersion = "1.0.0"; public const string targetModGUID = "dev.ladyalice.scarletmansion"; public const string targetModVersion = "1.3.27"; public readonly Harmony harmony = new Harmony("dev.ladyalice.scarletmansion.seichipatch"); public static Plugin Instance { get; private set; } public static ManualLogSource logger { get; internal set; } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = Logger.CreateLogSource("dev.ladyalice.scarletmansion.seichipatch"); if (Chainloader.PluginInfos.ContainsKey("dev.ladyalice.scarletmansion")) { PluginInfo val = Chainloader.PluginInfos["dev.ladyalice.scarletmansion"]; Version version = val.Metadata.Version; bool flag; if (string.IsNullOrWhiteSpace("1.3.27")) { flag = true; } else { Version version2 = new Version("1.3.27"); flag = version >= version2; } if (flag) { logger.LogInfo((object)"Plugin Scarlet Mansion Seichi Patch has been added!"); Patch.Activate(); } } } }
BepInEx/plugins/seichi/SeichiAdditions.dll
Decompiled 6 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using JLL.API; using JLL.API.LevelProperties; using JLLItemsModule.Components; using Microsoft.CodeAnalysis; using SeichiAdditions.Components; using SeichiAdditions.Managers; using SeichiAdditions.NetcodePatcher; using SeichiAdditions.Patches; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SeichiAdditions")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SeichiAdditions")] [assembly: AssemblyTitle("SeichiAdditions")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SeichiAdditions { [BepInPlugin("JacobG5.SeichiAdditions", "SeichiAdditions", "0.0.6")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { private const string modGUID = "JacobG5.SeichiAdditions"; private const string modName = "SeichiAdditions"; private const string modVersion = "0.0.6"; private Harmony harmony = new Harmony("JacobG5.SeichiAdditions"); internal ConfigFile SecretConfig = new ConfigFile(Path.Combine(Paths.ConfigPath, "SeichiAdditions.cfg"), true); public static ConfigEntry<bool> deathBreaksMarriage; public static ManualLogSource mls { get; private set; } public void Awake() { mls = Logger.CreateLogSource("JacobG5.SeichiAdditions"); deathBreaksMarriage = SecretConfig.Bind<bool>("Funny", "TillDeathDoUsPart", false, "It's funnier this way"); harmony.PatchAll(typeof(MarriageManager)); if (!SecretConfig.Bind<bool>("Funny", "DisableHealthPatch", false, "Removes a transpiler").Value) { harmony.PatchAll(typeof(MaxHealthTranspiler)); } if (!SecretConfig.Bind<bool>("Funny", "DisableMaskPatches", false, "Removes a transpilers & patches related to masked enemies and items").Value) { harmony.PatchAll(typeof(MaskedPatches)); } Type[] types = Assembly.GetExecutingAssembly().GetTypes(); foreach (Type type in types) { try { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array = methods; foreach (MethodInfo methodInfo in array) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } catch { mls.LogInfo((object)"Skipping Netcode Class"); } } } } } namespace SeichiAdditions.Patches { public class MaskedPatches { private static IEnumerable<CodeInstruction> AddAfter(IEnumerable<CodeInstruction> instructions, string debug, MethodInfo original, Action<List<CodeInstruction>> action) { List<CodeInstruction> newInstructions = new List<CodeInstruction>(); bool found = false; foreach (CodeInstruction instruction in instructions) { newInstructions.Add(instruction); if (instruction.opcode == OpCodes.Call && CodeInstructionExtensions.Calls(instruction, original)) { found = true; action(newInstructions); } } Plugin.mls.LogInfo((object)$"Patched {debug}: {found}"); foreach (CodeInstruction item in newInstructions) { yield return item; } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> MaskedKillAnim_Transpiler(IEnumerable<CodeInstruction> instructions) { return AddAfter(instructions, "Masked Kill Anim", AccessTools.Method(typeof(MaskedPlayerEnemy), "CreateMimicClientRpc", (Type[])null, (Type[])null), delegate(List<CodeInstruction> newInstructions) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown newInstructions.Add(new CodeInstruction(OpCodes.Ldloc_1, (object)null)); newInstructions.Add(new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(MaskedPatches), "SpawnMaskedPartner", new Type[1] { typeof(MaskedPlayerEnemy) }, (Type[])null))); }); } [HarmonyPatch(typeof(StartOfRound), "Start")] [HarmonyPriority(100)] [HarmonyPostfix] private static void StartOfRoundStart_Postfix(StartOfRound __instance) { HauntedMaskItem mask = default(HauntedMaskItem); foreach (Item items in __instance.allItemsList.itemsList) { if (items.spawnPrefab.TryGetComponent<HauntedMaskItem>(ref mask)) { MaskData maskData = items.spawnPrefab.AddComponent<MaskData>(); maskData.mask = mask; Plugin.mls.LogInfo((object)("Added MaskData to " + items.itemName)); } } } [HarmonyPatch(typeof(HauntedMaskItem), "EquipItem")] [HarmonyPostfix] private static void DamageOnOtherClients_Postfix(HauntedMaskItem __instance) { MaskData maskData = default(MaskData); if (((Component)__instance).gameObject.TryGetComponent<MaskData>(ref maskData)) { maskData.previousPlayerHeldBy = ((GrabbableObject)__instance).playerHeldBy; maskData.previousPlayerPartner = MarriageManager.GetPartner(maskData.previousPlayerHeldBy); } } [HarmonyPatch(typeof(HauntedMaskItem), "CreateMimicServerRpc")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> CreateMimicServer_Transpiler(IEnumerable<CodeInstruction> instructions) { return AddAfter(instructions, "Mask Item", AccessTools.Method(typeof(HauntedMaskItem), "CreateMimicClientRpc", (Type[])null, (Type[])null), delegate(List<CodeInstruction> newInstructions) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown newInstructions.Add(new CodeInstruction(OpCodes.Ldarg_0, (object)null)); newInstructions.Add(new CodeInstruction(OpCodes.Ldarg_1, (object)null)); newInstructions.Add(new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(MaskedPatches), "SpawnMaskedPartner", new Type[2] { typeof(HauntedMaskItem), typeof(bool) }, (Type[])null))); }); } public static void SpawnMaskedPartner(MaskedPlayerEnemy masked) { //IL_0023: 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_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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_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_00f8: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB partner = MarriageManager.GetPartner(((EnemyAI)masked).inSpecialAnimationWithPlayer); if ((Object)(object)partner == (Object)null) { return; } bool flag = ((Component)partner).transform.position.y < -80f; Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(((Component)partner).transform.position, default(NavMeshHit), 10f, -1); if (!RoundManager.Instance.GotNavMeshPositionResult) { return; } NetworkObjectReference val = RoundManager.Instance.SpawnEnemyGameObject(navMeshPosition, ((Component)partner).transform.eulerAngles.y, -1, ((EnemyAI)masked).enemyType); NetworkObject val2 = default(NetworkObject); if (((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null)) { MaskedPlayerEnemy component = ((Component)val2).GetComponent<MaskedPlayerEnemy>(); component.SetSuit(partner.currentSuitID); component.mimickingPlayer = partner; ((EnemyAI)component).SetEnemyOutside(!flag); partner.redirectToEnemy = (EnemyAI)(object)component; if ((Object)(object)partner.deadBody != (Object)null) { partner.deadBody.DeactivateBody(false); } } masked.CreateMimicClientRpc(val, flag, (int)partner.playerClientId); } public static void SpawnMaskedPartner(HauntedMaskItem mask, bool inFactory) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0067: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) MaskData maskData = default(MaskData); if (!((Component)mask).gameObject.TryGetComponent<MaskData>(ref maskData)) { return; } PlayerControllerB val = maskData.previousPlayerPartner; if (val == null) { val = MarriageManager.GetPartner(maskData.previousPlayerHeldBy); } if ((Object)(object)val == (Object)null) { return; } Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(((Component)val).transform.position, default(NavMeshHit), 10f, -1); if (!RoundManager.Instance.GotNavMeshPositionResult) { return; } NetworkObjectReference netObjectRef = RoundManager.Instance.SpawnEnemyGameObject(navMeshPosition, ((Component)val).transform.eulerAngles.y, -1, mask.mimicEnemy); NetworkObject val2 = default(NetworkObject); if (((NetworkObjectReference)(ref netObjectRef)).TryGet(ref val2, (NetworkManager)null)) { Debug.Log((object)"Got network object for mask enemy"); MaskedPlayerEnemy component = ((Component)val2).GetComponent<MaskedPlayerEnemy>(); component.SetSuit(val.currentSuitID); component.mimickingPlayer = val; ((EnemyAI)component).SetEnemyOutside(!inFactory); component.SetVisibilityOfMaskedEnemy(); component.SetMaskType(mask.maskTypeId); val.redirectToEnemy = (EnemyAI)(object)component; if (Object.op_Implicit((Object)(object)val.deadBody)) { val.deadBody.DeactivateBody(false); } } maskData.CreateMimicClientRpc(netObjectRef, (int)val.playerClientId, inFactory); } } public static class MaxHealthTranspiler { [HarmonyPatch(typeof(PlayerControllerB), "DamagePlayer")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> newInstructions = new List<CodeInstruction>(); FieldInfo HealthField = AccessTools.Field(typeof(PlayerControllerB), "health"); MethodInfo ReplacementMethod = AccessTools.Method(typeof(MarriageManager), "GetMaxHealth", new Type[1] { typeof(PlayerControllerB) }, (Type[])null); bool found = false; int matches = 0; foreach (CodeInstruction instruction in instructions) { if (1 == 0) { } bool flag = matches switch { 0 => instruction.opcode == OpCodes.Ldarg_0, 1 => instruction.opcode == OpCodes.Ldarg_0, 2 => instruction.opcode == OpCodes.Ldfld && CodeInstructionExtensions.LoadsField(instruction, HealthField, false), 3 => instruction.opcode == OpCodes.Ldarg_1, 4 => instruction.opcode == OpCodes.Sub, 5 => instruction.opcode == OpCodes.Ldc_I4_0, 6 => true, 7 => instruction.opcode == OpCodes.Call, 8 => instruction.opcode == OpCodes.Stfld && CodeInstructionExtensions.StoresField(instruction, HealthField), _ => false, }; if (1 == 0) { } if (flag) { matches++; if (matches == 9) { found = true; CodeInstruction clampCall = newInstructions[newInstructions.Count - 1]; newInstructions.RemoveAt(newInstructions.Count - 1); newInstructions.RemoveAt(newInstructions.Count - 1); newInstructions.Add(new CodeInstruction(OpCodes.Ldarg_0, (object)null)); newInstructions.Add(new CodeInstruction(OpCodes.Call, (object)ReplacementMethod)); newInstructions.Add(clampCall); } } else { matches = 0; } newInstructions.Add(instruction); } Plugin.mls.LogInfo((object)$"Patched Player Damage: {found}"); foreach (CodeInstruction item in newInstructions) { yield return item; } } } } namespace SeichiAdditions.Managers { public static class MarriageManager { private static readonly List<(PlayerControllerB, PlayerControllerB)> Partners = new List<(PlayerControllerB, PlayerControllerB)>(); private static readonly List<PlayerControllerB> DivorceRequests = new List<PlayerControllerB>(); public static bool Marry(PlayerControllerB playerA, PlayerControllerB playerB) { if ((Object)(object)playerA == (Object)(object)playerB || playerA.isPlayerDead || playerB.isPlayerDead || HasPartner(playerA) || HasPartner(playerB)) { return false; } playerA.health = (playerB.health += playerA.health); if (JLLExtentions.IsLocalPlayer(playerA) || JLLExtentions.IsLocalPlayer(playerB)) { HUDManager.Instance.UpdateHealthUI(playerA.health, false); } Partners.Add((playerA, playerB)); HUDManager.Instance.AddTextToChatOnServer(playerA.playerUsername + " and " + playerB.playerUsername + " are now Married!", -1); return true; } public static bool Divorce(PlayerControllerB player) { for (int i = 0; i < Partners.Count; i++) { (PlayerControllerB, PlayerControllerB) tuple = Partners[i]; PlayerControllerB val = null; if ((Object)(object)tuple.Item1 == (Object)(object)player) { val = tuple.Item2; } else if ((Object)(object)tuple.Item2 == (Object)(object)player) { (val, _) = tuple; } if (!((Object)(object)val != (Object)null)) { continue; } if (DivorceRequests.Contains(val)) { Partners.RemoveAt(i); DivorceRequests.Remove(val); if (!tuple.Item1.isPlayerDead && !tuple.Item2.isPlayerDead) { PlayerControllerB item = tuple.Item1; PlayerControllerB item2 = tuple.Item2; item.health = (item2.health /= 2); if (JLLExtentions.IsLocalPlayer(tuple.Item1) || JLLExtentions.IsLocalPlayer(tuple.Item2)) { HUDManager.Instance.UpdateHealthUI(tuple.Item1.health, true); JHudHelper.QueueDisplayTip("Divorced!", "You have been divorced from " + (JLLExtentions.IsLocalPlayer(tuple.Item1) ? tuple.Item2.playerUsername : tuple.Item1.playerUsername) + "!", false, false, "LC_Tip1"); } } return true; } HUDManager.Instance.AddTextToChatOnServer(player.playerUsername + " has filed for a divorce with " + val.playerUsername + "!", -1); if (JLLExtentions.IsLocalPlayer(val)) { JHudHelper.QueueDisplayTip("Divorce Request", player.playerUsername + " would like to divorce you!", false, false, "LC_Tip1"); } break; } DivorceRequests.Add(player); return false; } public static void Remove(PlayerControllerB player) { for (int i = 0; i < Partners.Count; i++) { (PlayerControllerB, PlayerControllerB) tuple = Partners[i]; if ((Object)(object)tuple.Item1 != (Object)(object)player && (Object)(object)tuple.Item2 != (Object)(object)player) { continue; } DivorceRequests.Remove(tuple.Item1); DivorceRequests.Remove(tuple.Item2); Partners.RemoveAt(i); if (!tuple.Item1.isPlayerDead && !tuple.Item2.isPlayerDead) { PlayerControllerB item = tuple.Item1; PlayerControllerB item2 = tuple.Item2; item.health = (item2.health /= 2); if (JLLExtentions.IsLocalPlayer(tuple.Item1) || JLLExtentions.IsLocalPlayer(tuple.Item2)) { HUDManager.Instance.UpdateHealthUI(tuple.Item1.health, true); } } break; } } public static bool HasPartner(PlayerControllerB partner) { foreach (var partner2 in Partners) { if ((Object)(object)partner2.Item1 == (Object)(object)partner || (Object)(object)partner2.Item2 == (Object)(object)partner) { return true; } } return false; } public static PlayerControllerB GetPartner(PlayerControllerB player) { if ((Object)(object)player == (Object)null) { return null; } foreach (var partner in Partners) { if ((Object)(object)partner.Item1 == (Object)(object)player) { return partner.Item2; } if ((Object)(object)partner.Item2 == (Object)(object)player) { return partner.Item1; } } return null; } public static int GetMaxHealth(PlayerControllerB player) { Plugin.mls.LogInfo((object)$"Damaged Player! Married = {HasPartner(player)}"); return HasPartner(player) ? 200 : 100; } [HarmonyPatch(typeof(StartOfRound), "OnDestroy")] [HarmonyPostfix] private static void StartOfRoundOnDestroy_Postfix() { Partners.Clear(); DivorceRequests.Clear(); } [HarmonyPatch(typeof(PlayerControllerB), "DamageOnOtherClients")] [HarmonyPostfix] private static void DamageOnOtherClients_Postfix(int damageNumber, int newHealthAmount, PlayerControllerB __instance) { PlayerControllerB partner = GetPartner(__instance); if ((Object)(object)partner != (Object)null) { partner.health = newHealthAmount; if (JLLExtentions.IsLocalPlayer(partner)) { HUDManager.Instance.UpdateHealthUI(newHealthAmount, true); } } } [HarmonyPatch(typeof(PlayerControllerB), "IHittable.Hit")] [HarmonyPrefix] private static void PlayerHit_Prefix(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID, PlayerControllerB __instance) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)GetPartner(StartOfRound.Instance.localPlayerController) == (Object)(object)__instance) { ((IHittable)StartOfRound.Instance.localPlayerController).Hit(force, hitDirection, playerWhoHit, playHitSFX, hitID); } } [HarmonyPatch(typeof(PlayerControllerB), "KillPlayerClientRpc")] [HarmonyPostfix] private static void KillPlayerClient_Postfix(int playerId, bool spawnBody, Vector3 bodyVelocity, int causeOfDeath, int deathAnimation, Vector3 positionOffset, PlayerControllerB __instance) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) if (!StartOfRound.Instance.localPlayerController.isPlayerDead && (Object)(object)GetPartner(StartOfRound.Instance.localPlayerController) == (Object)(object)__instance) { Plugin.mls.LogInfo((object)"Married Player Has Died. Killing Self."); StartOfRound.Instance.localPlayerController.KillPlayer(bodyVelocity, spawnBody, (CauseOfDeath)causeOfDeath, deathAnimation, positionOffset); if (Plugin.deathBreaksMarriage != null && Plugin.deathBreaksMarriage.Value) { Divorce(__instance); } } } [HarmonyPatch(typeof(StartOfRound), "ReviveDeadPlayers")] [HarmonyPostfix] private static void RevivePlayers_Postfix() { foreach (var partner in Partners) { partner.Item1.health = (partner.Item2.health = 200); if (JLLExtentions.IsLocalPlayer(partner.Item1) || JLLExtentions.IsLocalPlayer(partner.Item2)) { HUDManager.Instance.UpdateHealthUI(200, false); } } } [HarmonyPatch(typeof(StartOfRound), "OnPlayerDC")] [HarmonyPrefix] private static void OnPlayerDC_Prefix(int playerObjectNumber, ulong clientId) { Remove(GetPartner(StartOfRound.Instance.allPlayerScripts[playerObjectNumber])); } } } namespace SeichiAdditions.Components { public class MarriageContract : JMeleeWeapon { public bool destroyOnUse = true; public override bool OnWeaponHit(IHittable target, Vector3 hitDir) { if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { PlayerControllerB val = (PlayerControllerB)(object)((target is PlayerControllerB) ? target : null); if (val != null && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)(object)val && !MarriageManager.HasPartner(((GrabbableObject)this).playerHeldBy) && !MarriageManager.HasPartner(val)) { UseContractClientRpc((int)val.playerClientId, ((GrabbableObject)this).playerHeldBy.currentItemSlot); return true; } } return false; } [ClientRpc] public void UseContractClientRpc(int targetId, int slot) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1036822283u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, targetId); BytePacker.WriteValueBitPacked(val2, slot); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1036822283u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (!((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) && ((GrabbableObject)this).playerHeldBy.ItemSlots[slot] is MarriageContract) { PlayerControllerB playerB = StartOfRound.Instance.allPlayerScripts[targetId]; if (MarriageManager.Marry(((GrabbableObject)this).playerHeldBy, playerB) && destroyOnUse) { ((GrabbableObject)this).playerHeldBy.DestroyItemInSlot(slot); } } } protected override void __initializeVariables() { ((JMeleeWeapon)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1036822283u, new RpcReceiveHandler(__rpc_handler_1036822283), "UseContractClientRpc"); ((JMeleeWeapon)this).__initializeRpcs(); } private static void __rpc_handler_1036822283(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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) //IL_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int targetId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref targetId); int slot = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref slot); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageContract)(object)target).UseContractClientRpc(targetId, slot); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "MarriageContract"; } } public class MarriageCreator : NetworkBehaviour { public string header = "Marriage Altar"; public bool requiresRings = true; private bool ceramonyComplete = false; public InteractTrigger interactTrigger; private PlayerControllerB bride; public GameObject brideRing; public TMP_Text brideTxt; private PlayerControllerB groom; public GameObject groomRing; public TMP_Text groomTxt; private readonly string[] errorFeedback = new string[2] { "You are already Married!", "Ring required!" }; public UnityEvent marriageEvent = new UnityEvent(); private string DefaultTip => requiresRings ? "Place ring?" : "Use Altar?"; private void Start() { Reset(); } private void Reset() { interactTrigger.hoverTip = DefaultTip; groom = (bride = null); TMP_Text obj = groomTxt; if (obj != null) { obj.SetText(string.Empty, true); } TMP_Text obj2 = brideTxt; if (obj2 != null) { obj2.SetText(string.Empty, true); } GameObject obj3 = groomRing; if (obj3 != null) { obj3.SetActive(false); } GameObject obj4 = brideRing; if (obj4 != null) { obj4.SetActive(false); } } public void MarryPlayer(PlayerControllerB player) { if (!ceramonyComplete && JLLExtentions.IsLocalPlayer(player)) { RequestMarriageServerRpc((int)player.playerClientId); } } [ServerRpc(RequireOwnership = false)] private void RequestMarriageServerRpc(int playerWhoSent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2669310054u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerWhoSent); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2669310054u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (ceramonyComplete || playerWhoSent < 0) { return; } int num = (((Object)(object)bride == (Object)null) ? (-1) : ((int)bride.playerClientId)); int groomId = -1; if (num == playerWhoSent) { CancelWeddingClientRpc(); return; } PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerWhoSent]; if (MarriageManager.HasPartner(val3)) { SendFeedbackClientRpc(playerWhoSent, 0); return; } if (requiresRings) { if (!((Object)(object)val3.currentlyHeldObjectServer != (Object)null) || !((Object)(object)val3.currentlyHeldObjectServer.itemProperties != (Object)null) || !val3.currentlyHeldObjectServer.itemProperties.itemName.Contains("ring", StringComparison.InvariantCultureIgnoreCase)) { SendFeedbackClientRpc(playerWhoSent, 1); return; } RemoveRingItemClientRpc(playerWhoSent, val3.currentItemSlot); } if (num == -1) { num = playerWhoSent; } else { groomId = playerWhoSent; } UpdateCeramonyClientRpc(num, groomId); } [ClientRpc] private void UpdateCeramonyClientRpc(int brideId, int groomId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1016687170u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, brideId); BytePacker.WriteValueBitPacked(val2, groomId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1016687170u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; Plugin.mls.LogInfo((object)$"{brideId} {groomId}"); if (brideId >= 0) { bride = StartOfRound.Instance.allPlayerScripts[brideId]; GameObject obj = brideRing; if (obj != null) { obj.SetActive(true); } TMP_Text obj2 = brideTxt; if (obj2 != null) { obj2.SetText(bride.playerUsername, true); } } else { bride = null; GameObject obj3 = brideRing; if (obj3 != null) { obj3.SetActive(false); } TMP_Text obj4 = brideTxt; if (obj4 != null) { obj4.SetText(string.Empty, true); } } if (groomId >= 0) { groom = StartOfRound.Instance.allPlayerScripts[groomId]; GameObject obj5 = groomRing; if (obj5 != null) { obj5.SetActive(true); } TMP_Text obj6 = groomTxt; if (obj6 != null) { obj6.SetText(groom.playerUsername, true); } } else { groom = null; GameObject obj7 = groomRing; if (obj7 != null) { obj7.SetActive(false); } TMP_Text obj8 = groomTxt; if (obj8 != null) { obj8.SetText(string.Empty, true); } } if ((Object)(object)bride != (Object)null && (Object)(object)groom != (Object)null) { MarriageManager.Marry(bride, groom); ceramonyComplete = true; interactTrigger.disabledHoverTip = bride.playerUsername + " & " + groom.playerUsername + " have been wed"; interactTrigger.interactable = false; marriageEvent.Invoke(); } else if ((Object)(object)bride != (Object)null) { interactTrigger.hoverTip = (JLLExtentions.IsLocalPlayer(bride) ? "Cancel Wedding" : ("Marry " + bride.playerUsername + "?")); } else { interactTrigger.hoverTip = DefaultTip; } } [ClientRpc] private void SendFeedbackClientRpc(int clientId, int id) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1235078690u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); BytePacker.WriteValueBitPacked(val2, id); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1235078690u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; if (id >= 0 && id < errorFeedback.Length && JLLExtentions.IsLocalPlayer(StartOfRound.Instance.allPlayerScripts[clientId])) { JHudHelper.QueueDisplayTip(header, errorFeedback[id], true, false, "LC_Tip1"); } } } [ClientRpc] private void RemoveRingItemClientRpc(int clientId, int slot) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1592172660u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); BytePacker.WriteValueBitPacked(val2, slot); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1592172660u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; StartOfRound.Instance.allPlayerScripts[clientId].DestroyItemInSlot(slot); } } } [ClientRpc] private void CancelWeddingClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2284013184u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2284013184u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; if ((Object)(object)bride != (Object)null) { HUDManager.Instance.AddTextToChatOnServer(bride.playerUsername + " has called off the wedding!", -1); } Reset(); } } public void HoneyMoonTeleport(PlayerControllerB player) { if (JLLExtentions.IsLocalPlayer(player)) { if (MarriageManager.HasPartner(player)) { HoneyMoonTeleportServerRpc((int)player.playerClientId); } else { JHudHelper.QueueDisplayTip("Honeymoon", "You must be married to go on Honeymoon!", true, false, "LC_Tip1"); } } } [ServerRpc(RequireOwnership = false)] private void HoneyMoonTeleportServerRpc(int playerWhoSent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4002669869u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerWhoSent); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4002669869u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; bool inside; Vector3 val3 = FindHoneymoon(out inside); NavMeshHit val4 = default(NavMeshHit); if (NavMesh.SamplePosition(val3, ref val4, 3f, -1)) { val3 = ((NavMeshHit)(ref val4)).position + Vector3.up; } HoneyMoonTeleportClientRpc(playerWhoSent, val3, inside); } } private Vector3 FindHoneymoon(out bool inside) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00b0: Unknown result type (might be due to invalid IL or missing references) inside = true; Vector3 result = default(Vector3); if (JLevelPropertyRegistry.GetPOI("honeymoon", ref result)) { return result; } LungProp[] array = Object.FindObjectsOfType<LungProp>(); LungProp[] array2 = array; foreach (LungProp val in array2) { if (val.isLungDocked) { return ((Component)val).transform.position; } } EntranceTeleport[] array3 = (from entrance in Object.FindObjectsOfType<EntranceTeleport>() where !entrance.isEntranceToBuilding select entrance).ToArray(); if (array3.Length != 0) { return ((Component)array3[Random.Range(0, array3.Length)]).transform.position; } inside = false; return new Vector3(0f, 0f, -14f); } [ClientRpc] private void HoneyMoonTeleportClientRpc(int playerWhoSent, Vector3 pos, bool inside) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3171295165u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerWhoSent); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref pos); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref inside, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3171295165u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerWhoSent]; PlayerControllerB partner = MarriageManager.GetPartner(val3); if (!((Object)(object)partner == (Object)null)) { val3.isInsideFactory = inside; partner.isInsideFactory = inside; val3.TeleportPlayer(pos, false, 0f, false, true); partner.TeleportPlayer(pos, false, 0f, false, true); } } } public void FileDivorce(PlayerControllerB player) { if (JLLExtentions.IsLocalPlayer(player)) { if (MarriageManager.HasPartner(player)) { FileDivorceServerRpc((int)player.playerClientId); } else { JHudHelper.QueueDisplayTip("Divorce", "You must be married to get divorced!", true, false, "LC_Tip1"); } } } [ServerRpc(RequireOwnership = false)] private void FileDivorceServerRpc(int playerWhoSent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3172716445u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerWhoSent); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3172716445u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; FileDivorceClientRpc(playerWhoSent); } } } [ClientRpc] private void FileDivorceClientRpc(int playerWhoSent) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2930509885u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerWhoSent); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2930509885u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; MarriageManager.Divorce(StartOfRound.Instance.allPlayerScripts[playerWhoSent]); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(2669310054u, new RpcReceiveHandler(__rpc_handler_2669310054), "RequestMarriageServerRpc"); ((NetworkBehaviour)this).__registerRpc(1016687170u, new RpcReceiveHandler(__rpc_handler_1016687170), "UpdateCeramonyClientRpc"); ((NetworkBehaviour)this).__registerRpc(1235078690u, new RpcReceiveHandler(__rpc_handler_1235078690), "SendFeedbackClientRpc"); ((NetworkBehaviour)this).__registerRpc(1592172660u, new RpcReceiveHandler(__rpc_handler_1592172660), "RemoveRingItemClientRpc"); ((NetworkBehaviour)this).__registerRpc(2284013184u, new RpcReceiveHandler(__rpc_handler_2284013184), "CancelWeddingClientRpc"); ((NetworkBehaviour)this).__registerRpc(4002669869u, new RpcReceiveHandler(__rpc_handler_4002669869), "HoneyMoonTeleportServerRpc"); ((NetworkBehaviour)this).__registerRpc(3171295165u, new RpcReceiveHandler(__rpc_handler_3171295165), "HoneyMoonTeleportClientRpc"); ((NetworkBehaviour)this).__registerRpc(3172716445u, new RpcReceiveHandler(__rpc_handler_3172716445), "FileDivorceServerRpc"); ((NetworkBehaviour)this).__registerRpc(2930509885u, new RpcReceiveHandler(__rpc_handler_2930509885), "FileDivorceClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_2669310054(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerWhoSent = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).RequestMarriageServerRpc(playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1016687170(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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) //IL_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int brideId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref brideId); int groomId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref groomId); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).UpdateCeramonyClientRpc(brideId, groomId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1235078690(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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) //IL_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int clientId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); int id = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref id); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).SendFeedbackClientRpc(clientId, id); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1592172660(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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) //IL_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int clientId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); int slot = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref slot); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).RemoveRingItemClientRpc(clientId, slot); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2284013184(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).CancelWeddingClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4002669869(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerWhoSent = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).HoneyMoonTeleportServerRpc(playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3171295165(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerWhoSent = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoSent); Vector3 pos = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref pos); bool inside = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref inside, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).HoneyMoonTeleportClientRpc(playerWhoSent, pos, inside); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3172716445(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerWhoSent = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).FileDivorceServerRpc(playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2930509885(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerWhoSent = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)1; ((MarriageCreator)(object)target).FileDivorceClientRpc(playerWhoSent); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "MarriageCreator"; } } public class MaskData : NetworkBehaviour { public HauntedMaskItem mask; public PlayerControllerB previousPlayerHeldBy; public PlayerControllerB previousPlayerPartner; [ClientRpc] public void CreateMimicClientRpc(NetworkObjectReference netObjectRef, int playerId, bool inFactory) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_00a5: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2790610568u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref netObjectRef, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, playerId); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref inFactory, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2790610568u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; ((MonoBehaviour)this).StartCoroutine(waitForMimicEnemySpawn(netObjectRef, StartOfRound.Instance.allPlayerScripts[playerId], inFactory)); } } } public IEnumerator waitForMimicEnemySpawn(NetworkObjectReference netObjectRef, PlayerControllerB player, bool inFactory) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) NetworkObject netObject = null; float startTime = Time.realtimeSinceStartup; yield return (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - startTime > 20f || ((NetworkObjectReference)(ref netObjectRef)).TryGet(ref netObject, (NetworkManager)null))); if ((Object)(object)player.deadBody == (Object)null) { startTime = Time.realtimeSinceStartup; yield return (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - startTime > 20f || (Object)(object)player.deadBody != (Object)null)); } if (!((Object)(object)player.deadBody == (Object)null)) { player.deadBody.DeactivateBody(false); if ((Object)(object)netObject != (Object)null) { Debug.Log((object)"Got network object for mask enemy client"); MaskedPlayerEnemy component = ((Component)netObject).GetComponent<MaskedPlayerEnemy>(); component.mimickingPlayer = player; component.SetSuit(player.currentSuitID); ((EnemyAI)component).SetEnemyOutside(!inFactory); component.SetVisibilityOfMaskedEnemy(); component.SetMaskType(mask.maskTypeId); player.redirectToEnemy = (EnemyAI)(object)component; } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(2790610568u, new RpcReceiveHandler(__rpc_handler_2790610568), "CreateMimicClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_2790610568(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netObjectRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref netObjectRef, default(ForNetworkSerializable)); int playerId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); bool inFactory = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref inFactory, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((MaskData)(object)target).CreateMimicClientRpc(netObjectRef, playerId, inFactory); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "MaskData"; } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace SeichiAdditions.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }
BepInEx/plugins/seichi/TestAccount666.StatueThingy.dll
Decompiled 6 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; 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 TestAccount666.StatueThingy.NetcodePatcher; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("TestAccount666.StatueThingy")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("StatueThingy")] [assembly: AssemblyTitle("TestAccount666.StatueThingy")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] 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 StatueThingy { [BepInPlugin("TestAccount666.StatueThingy", "StatueThingy", "1.0.0")] public class StatueThingy : BaseUnityPlugin { public static StatueThingy Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } internal static void Patch() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("TestAccount666.StatueThingy"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Patch(); ExecuteNetcodePatcher(); Logger.LogInfo((object)"TestAccount666.StatueThingy v1.0.0 has loaded!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } private static void ExecuteNetcodePatcher() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); Type[] types = executingAssembly.GetTypes(); foreach (Type type in types) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } } } [AddComponentMenu("TestAccount666/StatueThingy/StatueThingySync")] public class StatueThingySync : NetworkBehaviour { [CompilerGenerated] private sealed class <WaitUntilInitializationAndApply>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int index; public StatueThingySync <>4__this; private string[] <>s__1; private int <>s__2; private string <triggerName>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WaitUntilInitializationAndApply>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = null; <triggerName>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitUntil((Func<bool>)delegate { int result; if (<>4__this != null && <>4__this.animator != null) { string[] poseTriggers = <>4__this.poseTriggers; if (poseTriggers != null) { result = ((poseTriggers.Length > 0) ? 1 : 0); goto IL_0020; } } result = 0; goto IL_0020; IL_0020: return (byte)result != 0; }); <>1__state = 1; return true; case 1: <>1__state = -1; if (<>4__this._poseTriggersHash.Count <= 0) { <>s__1 = <>4__this.poseTriggers; for (<>s__2 = 0; <>s__2 < <>s__1.Length; <>s__2++) { <triggerName>5__3 = <>s__1[<>s__2]; <>4__this._poseTriggersHash.AddLast(Animator.StringToHash(<triggerName>5__3)); <triggerName>5__3 = null; } <>s__1 = null; } <>4__this.ApplyMeshAndMaterial(index); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <WaitUntilInitializationAndSync>d__7 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public StatueThingySync <>4__this; private Random <seededRandom>5__1; private int <index>5__2; private string[] <>s__3; private int <>s__4; private string <triggerName>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WaitUntilInitializationAndSync>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <seededRandom>5__1 = null; <>s__3 = null; <triggerName>5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitUntil((Func<bool>)delegate { int result; if (<>4__this != null && <>4__this.animator != null) { string[] poseTriggers = <>4__this.poseTriggers; if (poseTriggers != null) { result = ((poseTriggers.Length > 0) ? 1 : 0); goto IL_0020; } } result = 0; goto IL_0020; IL_0020: return (byte)result != 0; }); <>1__state = 1; return true; case 1: <>1__state = -1; if (!((NetworkBehaviour)<>4__this).IsHost && !((NetworkBehaviour)<>4__this).IsServer) { return false; } if (<>4__this._poseTriggersHash.Count <= 0) { <>s__3 = <>4__this.poseTriggers; for (<>s__4 = 0; <>s__4 < <>s__3.Length; <>s__4++) { <triggerName>5__5 = <>s__3[<>s__4]; <>4__this._poseTriggersHash.AddLast(Animator.StringToHash(<triggerName>5__5)); <triggerName>5__5 = null; } <>s__3 = null; } <seededRandom>5__1 = new Random(StartOfRound.Instance.randomMapSeed); <index>5__2 = <seededRandom>5__1.Next(0, <>4__this.poseTriggers.Length); <>4__this.SyncPoseClientRpc(<index>5__2); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [SerializeField] private string[] poseTriggers = Array.Empty<string>(); [SerializeField] private Animator? animator; private readonly LinkedList<int> _poseTriggersHash = new LinkedList<int>(); [ClientRpc] private void SyncPoseClientRpc(int index) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3043677422u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, index); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3043677422u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; if (((Behaviour)this).isActiveAndEnabled) { ((MonoBehaviour)this).StartCoroutine(WaitUntilInitializationAndApply(index)); } } } private void Start() { if (((NetworkBehaviour)this).IsHost || ((NetworkBehaviour)this).IsServer) { NetworkObject component = ((Component)this).GetComponent<NetworkObject>(); if (!component.IsSpawned) { component.Spawn(true); } } } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); ((MonoBehaviour)this).StartCoroutine(WaitUntilInitializationAndSync()); } [IteratorStateMachine(typeof(<WaitUntilInitializationAndApply>d__6))] private IEnumerator WaitUntilInitializationAndApply(int index) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WaitUntilInitializationAndApply>d__6(0) { <>4__this = this, index = index }; } [IteratorStateMachine(typeof(<WaitUntilInitializationAndSync>d__7))] private IEnumerator WaitUntilInitializationAndSync() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WaitUntilInitializationAndSync>d__7(0) { <>4__this = this }; } private void ApplyMeshAndMaterial(int index) { Animator? obj = animator; if (obj != null) { obj.SetTrigger(_poseTriggersHash.ElementAt(index)); } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(3043677422u, new RpcReceiveHandler(__rpc_handler_3043677422), "SyncPoseClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_3043677422(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int index = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref index); target.__rpc_exec_stage = (__RpcExecStage)1; ((StatueThingySync)(object)target).SyncPoseClientRpc(index); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "StatueThingySync"; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "TestAccount666.StatueThingy"; public const string PLUGIN_NAME = "StatueThingy"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace TestAccount666.StatueThingy.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }