Please disclose if your mod was created primarily 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 MaskedReplacePlayer v1.0.1
MaskedReplacePlayer.dll
Decompiled 2 years 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.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("MaskedReplacePlayer")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("TENCENT")] [assembly: AssemblyProduct("MaskedReplacePlayer")] [assembly: AssemblyCopyright("Copyright © TENCENT 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("996ee7ef-3a81-4091-bc49-a4e2e4d566f3")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace MaskedReplacePlayer; [BepInPlugin("MaskedReplacePlayer", "MaskedReplacePlayer", "0.0.1")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("MaskedEnemyRework"); private static Plugin Instance; internal ManualLogSource logger; private ConfigEntry<float> ReplaceRatePerMinConfig; private ConfigEntry<float> RateChangePerMinConfig; private ConfigEntry<bool> ReplaceOutsideConfig; private ConfigEntry<bool> RemoveMaskConfig; private ConfigEntry<bool> RemoveArmsConfig; private ConfigEntry<int> TeleportPlayerConfig; private ConfigEntry<int> ShowPlayerNameConfig; public static float ReplaceRatePerMin; public static float RateChangePerMin; public static bool ReplaceOutside; public static int TeleportPlayer; public static bool RemoveMask; public static bool RemoveArms; public static int ShowPlayerName; public static int PlayerCount; public static SpawnableEnemyWithRarity maskedPrefab; public static GameObject networkPrefab; public static AssetBundle assetBundle { get; private set; } private void Awake() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown if ((Object)Instance == (Object)null) { Instance = this; } ReplaceRatePerMinConfig = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Replace player rate per min", 5f, (ConfigDescription)null); RateChangePerMinConfig = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Rate change per min", 0.5f, (ConfigDescription)null); ReplaceOutsideConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Can zombie replace player outside", true, (ConfigDescription)null); TeleportPlayerConfig = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Replace player type", 2, "0 = Masked will spawn nearest 1 = Spawn masked and teleport player 2 = Random 0 or 1"); RemoveMaskConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Remove zombie mask", true, (ConfigDescription)null); RemoveArmsConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Remove zombie arms", true, (ConfigDescription)null); ShowPlayerNameConfig = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Masked show player name", 1, "0 = close 1 = normal 2 = always"); ReplaceRatePerMin = ReplaceRatePerMinConfig.Value; RateChangePerMin = RateChangePerMinConfig.Value; ReplaceOutside = ReplaceOutsideConfig.Value; TeleportPlayer = TeleportPlayerConfig.Value; RemoveMask = RemoveMaskConfig.Value; RemoveArms = RemoveArmsConfig.Value; ShowPlayerName = ShowPlayerNameConfig.Value; assetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "networkprefab")); logger = ((BaseUnityPlugin)this).Logger; networkPrefab = assetBundle.LoadAsset<GameObject>("Assets/AssetBundles/networkPrefab.prefab"); networkPrefab.AddComponent<MaskedReplaceNetworkComp>(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin MaskedReplacePlayer is loaded"); harmony.PatchAll(typeof(Plugin)); harmony.PatchAll(typeof(GetMaskedPrefabForLaterUse)); harmony.PatchAll(typeof(MaskedReplaceInit)); harmony.PatchAll(typeof(Masked_Patch)); harmony.PatchAll(typeof(PlayerController_Patch)); } } [HarmonyPatch(typeof(Terminal))] internal class GetMaskedPrefabForLaterUse { [HarmonyPatch("Start")] [HarmonyPostfix] private static void SavesPrefabForLaterUse(ref SelectableLevel[] ___moonsCatalogueList) { ManualLogSource val = Logger.CreateLogSource("MaskedReplacePlayer"); SelectableLevel[] array = ___moonsCatalogueList; for (int i = 0; i < array.Length; i++) { foreach (SpawnableEnemyWithRarity enemy in array[i].Enemies) { if (enemy.enemyType.enemyName == "Masked") { val.LogInfo((object)"Found Masked!"); Plugin.maskedPrefab = enemy; } } } } } internal class MaskedReplaceInit { [HarmonyPatch(typeof(MenuManager), "Start")] [HarmonyPostfix] public static void InitNetworkPrefab(MenuManager __instance) { Logger.CreateLogSource("MaskedReplaceNetworkInit").LogInfo((object)"MaskedReplaceNetworkInit"); if (!NetworkManager.Singleton.NetworkConfig.Prefabs.Prefabs.Select((NetworkPrefab pref) => ((Object)pref.Prefab).name).Contains(((Object)Plugin.networkPrefab).name)) { NetworkManager.Singleton.AddNetworkPrefab(Plugin.networkPrefab); } } [HarmonyPatch(typeof(RoundManager), "Start")] [HarmonyPrefix] private static void InitMaskedReplace(ref SelectableLevel ___currentLevel) { if (((NetworkBehaviour)RoundManager.Instance).IsServer) { Logger.CreateLogSource("MaskedReplaceInit").LogInfo((object)"InitMaskedReplace"); Object.Instantiate<GameObject>(Plugin.networkPrefab).GetComponent<NetworkObject>().Spawn(false); } } [HarmonyPatch(typeof(RoundManager), "BeginEnemySpawning")] [HarmonyPrefix] private static void AttachMaskReplaceComp(ref SelectableLevel ___currentLevel) { ManualLogSource val = Logger.CreateLogSource("MaskedReplaceInit"); val.LogInfo((object)"MaskedReplaceComp Start Attach"); if (!Object.op_Implicit((Object)(object)RoundManager.Instance)) { return; } GameObject gameObject = ((Component)RoundManager.Instance).gameObject; if (((NetworkBehaviour)RoundManager.Instance).IsServer) { MaskedReplaceComp maskedReplaceComp = gameObject.GetComponent<MaskedReplaceComp>(); if ((Object)(object)maskedReplaceComp == (Object)null) { maskedReplaceComp = gameObject.AddComponent<MaskedReplaceComp>(); val.LogInfo((object)"MaskedReplaceComp Created and Attached"); } else { val.LogInfo((object)"MaskedReplaceComp Attached"); } maskedReplaceComp._currentLevel = ___currentLevel; Random.InitState(StartOfRound.Instance.randomMapSeed); } } } internal class MaskedReplaceComp : MonoBehaviour { public SelectableLevel _currentLevel; private float nextTimeToCheckSpawn = 60f; private float curTime; private float CurRate = Plugin.ReplaceRatePerMin; private void Update() { //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) if (!RoundManager.Instance.isSpawningEnemies) { curTime = 0f; } else if (curTime == 0f) { CurRate = Plugin.ReplaceRatePerMin; curTime = Time.realtimeSinceStartup; } else { if (!(Time.realtimeSinceStartup - curTime > nextTimeToCheckSpawn)) { return; } curTime = Time.realtimeSinceStartup; ManualLogSource val = Logger.CreateLogSource("MaskedReplaceComp"); float num = Random.Range(0f, 100f); val.LogInfo((object)("MaskedReplaceComp Value = " + num + " CurRate: " + CurRate)); if (num <= CurRate) { val.LogInfo((object)"MaskedReplaceComp Start Replace Player"); PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; List<PlayerControllerB> list = new List<PlayerControllerB>(); int num2 = 0; for (int i = 0; i < StartOfRound.Instance.ClientPlayerList.Count; i++) { PlayerControllerB val2 = allPlayerScripts[i]; if (Object.op_Implicit((Object)(object)val2) && !val2.isPlayerDead && (Plugin.ReplaceOutside || val2.isInsideFactory)) { list.Add(val2); num2++; } } val.LogInfo((object)("MaskedReplaceComp Can Replace Player Count:" + num2)); if (num2 > 0) { int index = Random.Range(0, num2); val.LogInfo((object)("MaskedReplaceComp index = " + index)); PlayerControllerB Player = list[index]; Vector3 val3 = ((Component)Player).transform.position; Quaternion rotation = ((Component)Player).transform.rotation; int num3 = Plugin.TeleportPlayer; if (Plugin.TeleportPlayer > 1) { num3 = Random.Range(0, 2); } if (num3 == 1) { MaskedStaticPatch.TeleportPlayerRandomly(Player); } else { val3 = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(val3, 10f, default(NavMeshHit)); } MaskedStaticPatch.SpawnMaskedOnTrans(ref _currentLevel, ref Player, val3, rotation); val.LogInfo((object)("Replace Player:" + Player.playerClientId)); } } CurRate += Plugin.RateChangePerMin; } } } internal class MaskedReplaceNetworkComp : NetworkBehaviour { public static MaskedReplaceNetworkComp Instance; private void Awake() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)"__rpc_handler_init"); NetworkManager.__rpc_func_table.Add(3441244552u, new RpcReceiveHandler(__rpc_handler_3441244552)); NetworkManager.__rpc_func_table.Add(3441244553u, new RpcReceiveHandler(__rpc_handler_3441244553)); NetworkManager.__rpc_func_table.Add(3441244554u, new RpcReceiveHandler(__rpc_handler_3441244554)); } private void Start() { NetworkManager.Singleton.OnClientConnectedCallback += OnClientConnected; if ((Object)(object)Instance == (Object)null) { Instance = this; } } public override void OnDestroy() { if ((Object)(object)NetworkManager.Singleton != (Object)null) { NetworkManager.Singleton.OnClientConnectedCallback -= OnClientConnected; } } private void OnClientConnected(ulong clientId) { if (((NetworkBehaviour)this).IsServer) { Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)("OnClientConnected" + clientId + " " + NetworkManager.Singleton.LocalClientId)); if (clientId != NetworkManager.Singleton.LocalClientId) { ((Component)this).gameObject.GetComponent<NetworkObject>().SpawnAsPlayerObject(clientId, false); } } } private static void __rpc_handler_3441244552(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)"__rpc_handler_3441244552"); NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netObjectRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref netObjectRef, default(ForNetworkSerializable)); bool inFactory = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref inFactory, default(ForPrimitives)); int playerClientId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerClientId); ((NetworkBehaviour)(MaskedReplaceNetworkComp)(object)target).__rpc_exec_stage = (__RpcExecStage)2; ((MaskedReplaceNetworkComp)(object)target).CreateMaskedSpawnRpc(netObjectRef, inFactory, playerClientId); ((NetworkBehaviour)(MaskedReplaceNetworkComp)(object)target).__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3441244553(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)"__rpc_handler_3441244553"); NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerClientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerClientId); Vector3 teleportPos = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref teleportPos); ((NetworkBehaviour)(MaskedReplaceNetworkComp)(object)target).__rpc_exec_stage = (__RpcExecStage)1; ((MaskedReplaceNetworkComp)(object)target).RpcServerTeleportPlayer(playerClientId, teleportPos); ((NetworkBehaviour)(MaskedReplaceNetworkComp)(object)target).__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3441244554(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)"__rpc_handler_3441244554"); NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerClientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerClientId); Vector3 teleportPos = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref teleportPos); ((NetworkBehaviour)(MaskedReplaceNetworkComp)(object)target).__rpc_exec_stage = (__RpcExecStage)2; ((MaskedReplaceNetworkComp)(object)target).RpcTeleportPlayer(playerClientId, teleportPos); ((NetworkBehaviour)(MaskedReplaceNetworkComp)(object)target).__rpc_exec_stage = (__RpcExecStage)0; } } [ClientRpc] public void CreateMaskedSpawnRpc(NetworkObjectReference netObjectRef, bool inFactory, int playerClientId) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Invalid comparison between Unknown and I4 //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Invalid comparison between Unknown and I4 //IL_0053: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)("CreateMaskedSpawnRpc: " + playerClientId)); NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3441244552u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref netObjectRef, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref inFactory, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, playerClientId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3441244552u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsServer) { ((MonoBehaviour)this).StartCoroutine(waitForMaskedSpawn(netObjectRef, inFactory, playerClientId)); } } } private IEnumerator waitForMaskedSpawn(NetworkObjectReference netObjectRef, bool inFactory, int playerClientId) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)("waitForMimicEnemySpawn: " + playerClientId)); PlayerControllerB player = StartOfRound.Instance.allPlayerScripts[playerClientId]; 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)netObject != (Object)null) { MaskedPlayerEnemy component = ((Component)netObject).GetComponent<MaskedPlayerEnemy>(); component.mimickingPlayer = player; MaskedStaticPatch.RefreshMaskedSight(component); } } [ServerRpc(RequireOwnership = false)] public void RpcServerTeleportPlayer(ulong playerClientId, Vector3 TeleportPos) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Invalid comparison between Unknown and I4 //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Invalid comparison between Unknown and I4 //IL_0049: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) ManualLogSource val = Logger.CreateLogSource("MaskedReplaceNetworkComp"); val.LogInfo((object)"RpcServerTeleportPlayer"); NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val2 = default(ServerRpcParams); FastBufferWriter val3 = ((NetworkBehaviour)this).__beginSendServerRpc(3441244553u, val2, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val3, playerClientId); ((FastBufferWriter)(ref val3)).WriteValueSafe(ref TeleportPos); ((NetworkBehaviour)this).__endSendServerRpc(ref val3, 3441244553u, val2, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { val.LogInfo((object)("Send To Client:" + playerClientId)); RpcTeleportPlayer(playerClientId, TeleportPos); } } } [ClientRpc] public void RpcTeleportPlayer(ulong playerClientId, Vector3 TeleportPos) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Invalid comparison between Unknown and I4 //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Invalid comparison between Unknown and I4 //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) Logger.CreateLogSource("MaskedReplaceNetworkComp").LogInfo((object)("RpcTeleportPlayer:" + playerClientId)); NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3441244554u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerClientId); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref TeleportPos); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3441244554u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { MaskedStaticPatch.TeleportPlayerInternal(playerClientId, TeleportPos); } } } } internal class MaskedStaticPatch { public static void TeleportPlayerInternal(ulong playerClientId, Vector3 TeleportPos) { //IL_0039: 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_007e: Unknown result type (might be due to invalid IL or missing references) ManualLogSource val = Logger.CreateLogSource("RpcTeleportPlayerRandomly"); val.LogInfo((object)("playerClientId:" + playerClientId)); PlayerControllerB val2 = StartOfRound.Instance.allPlayerScripts[playerClientId]; if (Object.op_Implicit((Object)(object)val2)) { val2.TeleportPlayer(TeleportPos, false, 0f, false, true); val2.beamOutParticle.Play(); val2.movementAudio.PlayOneShot(StartOfRound.Instance.damageSFX); string text = val2.playerClientId.ToString(); Vector3 val3 = TeleportPos; val.LogInfo((object)("Teleport Player:" + text + " to " + ((object)(Vector3)(ref val3)).ToString())); } } public static void TeleportPlayerRandomly(PlayerControllerB playerController) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) ManualLogSource obj = Logger.CreateLogSource("MaskedReplaceComp"); Vector3 position = RoundManager.Instance.insideAINodes[Random.Range(0, RoundManager.Instance.insideAINodes.Length)].transform.position; if (!playerController.isInsideFactory) { position = ((Component)StartOfRound.Instance.shipInnerRoomBounds).transform.position; } position = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(position, 10f, default(NavMeshHit)); string text = playerController.playerClientId.ToString(); Vector3 val = position; obj.LogInfo((object)("Teleport Player:" + text + " to " + ((object)(Vector3)(ref val)).ToString())); MaskedReplaceNetworkComp instance = MaskedReplaceNetworkComp.Instance; TeleportPlayerInternal(playerController.playerClientId, position); instance.RpcServerTeleportPlayer(playerController.playerClientId, position); } public static void SpawnMaskedOnTrans(ref SelectableLevel __currentLevel, ref PlayerControllerB Player, Vector3 Position, Quaternion Rotation) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) ManualLogSource val = Logger.CreateLogSource("SpawnMaskedOnTrans"); SpawnableEnemyWithRarity maskedPrefab = Plugin.maskedPrefab; MaskedReplaceNetworkComp instance = MaskedReplaceNetworkComp.Instance; NetworkObjectReference netObjectRef = RoundManager.Instance.SpawnEnemyGameObject(Position, ((Quaternion)(ref Rotation)).eulerAngles.y, -1, maskedPrefab.enemyType); NetworkObject val2 = default(NetworkObject); if (((NetworkObjectReference)(ref netObjectRef)).TryGet(ref val2, (NetworkManager)null)) { bool flag = Position.y < -80f; MaskedPlayerEnemy component = ((Component)val2).GetComponent<MaskedPlayerEnemy>(); component.SetSuit(Player.currentSuitID); component.mimickingPlayer = Player; component.SetEnemyOutside(!flag); val.LogInfo((object)("SpawnMasked Name = " + ((object)(NetworkObjectReference)(ref netObjectRef)).ToString())); instance.CreateMaskedSpawnRpc(netObjectRef, flag, (int)Player.playerClientId); } } public static void RefreshMaskedSight(MaskedPlayerEnemy __instance) { if (Object.op_Implicit((Object)(object)__instance)) { ManualLogSource obj = Logger.CreateLogSource("OnStartClient"); obj.LogInfo((object)(((Object)__instance).name + " RefreshMaskedSight Start")); __instance.SetEnemyOutside(!__instance.mimickingPlayer.isInsideFactory); obj.LogInfo((object)(((Object)__instance).name + " RefreshMaskedSight Finish")); } } public static void ReformEnemy(MaskedPlayerEnemy __instance) { //IL_0064: 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) ManualLogSource val = Logger.CreateLogSource("ReformEnemy"); PlayerControllerB mimickingPlayer = __instance.mimickingPlayer; if ((Object)(object)mimickingPlayer == (Object)null) { val.LogInfo((object)" Player Not Found!! "); return; } val.LogInfo((object)("ReformAndSetNameBillboard, instanceID:" + ((Object)__instance).GetInstanceID() + " PlayerName: " + mimickingPlayer.playerUsername)); __instance.SetSuit(mimickingPlayer.currentSuitID); if (Plugin.RemoveMask) { ((Component)((Component)__instance).gameObject.transform.Find("ScavengerModel/metarig/spine/spine.001/spine.002/spine.003/spine.004/HeadMaskComedy")).gameObject.SetActive(false); ((Component)((Component)__instance).gameObject.transform.Find("ScavengerModel/metarig/spine/spine.001/spine.002/spine.003/spine.004/HeadMaskTragedy")).gameObject.SetActive(false); } } public static void SetNameBillboard(MaskedPlayerEnemy __instance) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) ManualLogSource val = Logger.CreateLogSource("SetNameBillboard"); PlayerControllerB mimickingPlayer = __instance.mimickingPlayer; if ((Object)(object)mimickingPlayer == (Object)null) { val.LogInfo((object)"SetNameBillboard Player Not Found!! "); return; } Masked_ExtValue masked_ExtValue = default(Masked_ExtValue); if (!((Component)__instance).gameObject.TryGetComponent<Masked_ExtValue>(ref masked_ExtValue)) { masked_ExtValue = ((Component)__instance).gameObject.AddComponent<Masked_ExtValue>(); } val.LogInfo((object)("SetNameBillboard Start, instance: " + ((Object)__instance).name)); masked_ExtValue.usernameCanvas = Object.Instantiate<Canvas>(mimickingPlayer.usernameCanvas); ((Component)masked_ExtValue.usernameCanvas).gameObject.AddComponent<CanvasGroup>(); GameObject val2 = new GameObject("usernameBillboardText"); val2.transform.SetParent(((Component)masked_ExtValue.usernameCanvas).transform, false); masked_ExtValue.usernameBillboardText = val2.AddComponent<TextMeshProUGUI>(); ((TMP_Text)masked_ExtValue.usernameBillboardText).text = ((TMP_Text)mimickingPlayer.usernameBillboardText).text; ((TMP_Text)masked_ExtValue.usernameBillboardText).font = ((TMP_Text)mimickingPlayer.usernameBillboardText).font; ((Graphic)masked_ExtValue.usernameBillboardText).color = ((Graphic)mimickingPlayer.usernameBillboardText).color; ((TMP_Text)masked_ExtValue.usernameBillboardText).fontSize = ((TMP_Text)mimickingPlayer.usernameBillboardText).fontSize; ((TMP_Text)masked_ExtValue.usernameBillboardText).enableAutoSizing = ((TMP_Text)mimickingPlayer.usernameBillboardText).enableAutoSizing; ((TMP_Text)masked_ExtValue.usernameBillboardText).extraPadding = ((TMP_Text)mimickingPlayer.usernameBillboardText).extraPadding; ((TMP_Text)masked_ExtValue.usernameBillboardText).alignment = ((TMP_Text)mimickingPlayer.usernameBillboardText).alignment; ((TMP_Text)masked_ExtValue.usernameBillboardText).textStyle = ((TMP_Text)mimickingPlayer.usernameBillboardText).textStyle; ((TMP_Text)masked_ExtValue.usernameBillboardText).textPreprocessor = ((TMP_Text)mimickingPlayer.usernameBillboardText).textPreprocessor; ((TMP_Text)masked_ExtValue.usernameBillboardText).characterSpacing = ((TMP_Text)mimickingPlayer.usernameBillboardText).characterSpacing; ((TMP_Text)masked_ExtValue.usernameBillboardText).wordSpacing = ((TMP_Text)mimickingPlayer.usernameBillboardText).wordSpacing; ((TMP_Text)masked_ExtValue.usernameBillboardText).lineSpacing = ((TMP_Text)mimickingPlayer.usernameBillboardText).lineSpacing; ((TMP_Text)masked_ExtValue.usernameBillboardText).margin = ((TMP_Text)mimickingPlayer.usernameBillboardText).margin; ((TMP_Text)masked_ExtValue.usernameBillboardText).overflowMode = ((TMP_Text)mimickingPlayer.usernameBillboardText).overflowMode; ((TMP_Text)masked_ExtValue.usernameBillboardText).fontSharedMaterial = ((TMP_Text)mimickingPlayer.usernameBillboardText).fontSharedMaterial; ((TMP_Text)masked_ExtValue.usernameBillboardText).fontSizeMin = ((TMP_Text)mimickingPlayer.usernameBillboardText).fontSizeMin; ((TMP_Text)masked_ExtValue.usernameBillboardText).fontSizeMax = ((TMP_Text)mimickingPlayer.usernameBillboardText).fontSizeMax; ((TMP_Text)masked_ExtValue.usernameBillboardText).enableKerning = ((TMP_Text)mimickingPlayer.usernameBillboardText).enableKerning; RectTransform component = ((Component)mimickingPlayer.usernameBillboardText).GetComponent<RectTransform>(); RectTransform component2 = ((Component)masked_ExtValue.usernameBillboardText).GetComponent<RectTransform>(); ((Transform)component2).localPosition = ((Transform)component).localPosition; component2.sizeDelta = component.sizeDelta; component2.anchorMin = component.anchorMin; component2.anchorMax = component.anchorMax; component2.pivot = component.pivot; component2.anchoredPosition = component.anchoredPosition; ((Transform)component2).localScale = ((Transform)component).localScale; component2.offsetMin = component.offsetMin; component2.offsetMax = component.offsetMax; ((Transform)component2).right = ((Transform)component).right; ((Component)masked_ExtValue.usernameBillboardText).gameObject.SetActive(true); ((Behaviour)masked_ExtValue.usernameBillboardText).enabled = true; ((Behaviour)masked_ExtValue.usernameCanvas).enabled = true; val.LogInfo((object)("SetNameBillboard Finish, Playername:" + ((TMP_Text)masked_ExtValue.usernameBillboardText).text)); } public static CanvasGroup GetCanvasAlpha(Canvas canvas) { CanvasGroup val = null; if (Object.op_Implicit((Object)(object)canvas)) { val = ((Component)canvas).gameObject.GetComponent<CanvasGroup>(); if (!Object.op_Implicit((Object)(object)val)) { val = ((Component)canvas).gameObject.AddComponent<CanvasGroup>(); } } return val; } public static void ShowNameBillboard(ref MaskedPlayerEnemy __instance) { Masked_ExtValue masked_ExtValue = default(Masked_ExtValue); if (((Component)__instance).gameObject.TryGetComponent<Masked_ExtValue>(ref masked_ExtValue)) { GetCanvasAlpha(masked_ExtValue.usernameCanvas).alpha = 1f; ((Component)masked_ExtValue.usernameCanvas).gameObject.SetActive(true); } } } internal class Masked_ExtValue : MonoBehaviour { public Canvas usernameCanvas; public TextMeshProUGUI usernameBillboardText; } [HarmonyPatch(typeof(MaskedPlayerEnemy))] internal class Masked_Patch { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void OnSpawn(ref MaskedPlayerEnemy __instance) { Logger.CreateLogSource("Masked_Patch").LogInfo((object)("Masked Spawned " + ((Object)__instance).GetInstanceID())); } [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_ShowBillboard(ref MaskedPlayerEnemy __instance) { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0153: 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_0173: Unknown result type (might be due to invalid IL or missing references) //IL_018a: 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_019f: Unknown result type (might be due to invalid IL or missing references) ManualLogSource val = Logger.CreateLogSource("Masked_Patch"); Masked_ExtValue masked_ExtValue = default(Masked_ExtValue); if (((Component)__instance).gameObject.TryGetComponent<Masked_ExtValue>(ref masked_ExtValue)) { Canvas usernameCanvas = masked_ExtValue.usernameCanvas; CanvasGroup canvasAlpha = MaskedStaticPatch.GetCanvasAlpha(usernameCanvas); Transform transform = ((Component)usernameCanvas).transform; TextMeshProUGUI usernameBillboardText = masked_ExtValue.usernameBillboardText; if (Object.op_Implicit((Object)(object)usernameCanvas) && Object.op_Implicit((Object)(object)transform) && Object.op_Implicit((Object)(object)canvasAlpha)) { if (!((Component)usernameBillboardText).gameObject.activeInHierarchy || !Object.op_Implicit((Object)(object)((Graphic)usernameBillboardText).canvas)) { ((TMP_Text)usernameBillboardText).transform.SetParent(transform, false); } if (Plugin.ShowPlayerName > 1) { canvasAlpha.alpha = 1f; ((Component)usernameCanvas).gameObject.SetActive(true); Vector3 val2 = default(Vector3); ((Vector3)(ref val2)).Set(((Component)__instance).transform.position.x, ((Component)__instance).transform.position.y + 2.64f, ((Component)__instance).transform.position.z); transform.SetPositionAndRotation(val2, transform.rotation); transform.LookAt(GameNetworkManager.Instance.localPlayerController.localVisorTargetPoint); } else if (canvasAlpha.alpha >= 0f && (Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null) { canvasAlpha.alpha -= Time.deltaTime; Vector3 val3 = default(Vector3); ((Vector3)(ref val3)).Set(((Component)__instance).transform.position.x, ((Component)__instance).transform.position.y + 2.64f, ((Component)__instance).transform.position.z); transform.SetPositionAndRotation(val3, transform.rotation); transform.LookAt(GameNetworkManager.Instance.localPlayerController.localVisorTargetPoint); } else if (((Component)usernameCanvas).gameObject.activeSelf) { ((Component)usernameCanvas).gameObject.SetActive(false); } } else { val.LogInfo((object)"Masked_ExtValue Init Failed"); } } else if (Object.op_Implicit((Object)(object)__instance.mimickingPlayer)) { val.LogInfo((object)"SetEnemyOutside to AutoReformAndSetNameBillboard"); __instance.SetEnemyOutside(((EnemyAI)__instance).isOutside); } else { val.LogInfo((object)"not mimickingPlayer"); } } [HarmonyPatch("SetHandsOutClientRpc")] [HarmonyPrefix] private static void RemoveMaskedArms(ref bool setOut) { if (Plugin.RemoveArms) { setOut = false; } } [HarmonyPatch("SetEnemyOutside")] [HarmonyPostfix] public static void AutoReformAndSetNameBillboard(MaskedPlayerEnemy __instance) { Logger.CreateLogSource("AutoReformAndSetNameBillboard").LogInfo((object)"AutoReformAndSetNameBillboard! "); MaskedStaticPatch.ReformEnemy(__instance); MaskedStaticPatch.SetNameBillboard(__instance); } [HarmonyPatch("waitForMimicEnemySpawn")] [HarmonyPostfix] private static void AfterKillingSpawn(ref NetworkObjectReference netObjectRef, ref bool inFactory, ref int playerKilled) { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerKilled]; Logger.CreateLogSource("AutoReformAndSetNameBillboard").LogInfo((object)("AfterKillingSpawn, killed player id = " + playerKilled + "PlayerName = " + val.playerUsername)); NetworkObject val2 = null; ((NetworkObjectReference)(ref netObjectRef)).TryGet(ref val2, (NetworkManager)null); if ((Object)(object)val2 != (Object)null) { MaskedPlayerEnemy component = ((Component)val2).GetComponent<MaskedPlayerEnemy>(); component.mimickingPlayer = val; component.SetSuit(val.currentSuitID); component.SetEnemyOutside(!inFactory); } } [HarmonyPatch("OnDestroy")] [HarmonyPrefix] public static void DestroyBillboard(MaskedPlayerEnemy __instance) { Masked_ExtValue masked_ExtValue = default(Masked_ExtValue); if (((Component)__instance).gameObject.TryGetComponent<Masked_ExtValue>(ref masked_ExtValue)) { Object.Destroy((Object)(object)masked_ExtValue.usernameBillboardText); Object.Destroy((Object)(object)masked_ExtValue.usernameCanvas); } } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerController_Patch { [HarmonyPatch("SetHoverTipAndCurrentInteractTrigger")] [HarmonyPrefix] private static void AimingMasked(PlayerControllerB __instance) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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) if (Plugin.ShowPlayerName != 1) { return; } Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)__instance.gameplayCamera).transform.position, ((Component)__instance.gameplayCamera).transform.forward); LayerMask val2 = LayerMask.op_Implicit(524288); RaycastHit val3 = default(RaycastHit); if (!__instance.isFreeCamera && Physics.Raycast(val, ref val3, 5f, LayerMask.op_Implicit(val2))) { EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val3)).collider).gameObject.GetComponent<EnemyAICollisionDetect>(); MaskedPlayerEnemy __instance2 = null; if (Object.op_Implicit((Object)(object)component)) { __instance2 = ((Component)component.mainScript).gameObject.GetComponent<MaskedPlayerEnemy>(); } if ((Object)(object)__instance2 != (Object)null) { MaskedStaticPatch.ShowNameBillboard(ref __instance2); } } } }