From 2e9c9e4837cead8a6c1314660a4a614cda2ab8f6 Mon Sep 17 00:00:00 2001 From: TheReVeaLz <202110715072@mhs.ubharajaya.ac.id> Date: Sat, 16 Dec 2023 02:15:43 +0700 Subject: [PATCH 1/6] (fix) Scrap table couldn't get some item --- NonLethalCompany-Mod/Main.cs | 74 +++++++++++++++++------------------- 1 file changed, 34 insertions(+), 40 deletions(-) diff --git a/NonLethalCompany-Mod/Main.cs b/NonLethalCompany-Mod/Main.cs index 3fce441..de6d312 100644 --- a/NonLethalCompany-Mod/Main.cs +++ b/NonLethalCompany-Mod/Main.cs @@ -241,9 +241,9 @@ private void OnGUI() GUILayout.EndScrollView(); GUILayout.EndArea(); } - private bool IsOnScreen(Vector3 position) + private bool IsOnScreen(Vector3 position, Camera camera) { - if (position.x < 0f || position.y < 0f || position.z < 0f) return false; + if (position.x < 0f || position.x > camera.pixelWidth || position.y < 0f || position.y > camera.pixelHeight || position.z < 0f) return false; return true; } @@ -252,11 +252,14 @@ private void HandleESP() var player = GameNetworkManager.Instance.localPlayerController; if (player == null) return; - var camera = player.gameplayCamera; + var camera = player.isPlayerDead ? player.playersManager.spectateCamera : player.gameplayCamera; if (camera == null) return; - var propList = GameObject.FindGameObjectsWithTag("PhysicsProp"); + var ScreenScale = new Vector2((float)Screen.width / camera.pixelWidth, (float)Screen.height / camera.pixelHeight); + var ScreenCenter = new Vector2((float)(Screen.width / 2), (float)(Screen.height - 1)); + + var propList = GameObject.FindObjectsOfType(); if (propList == null || propList.Length == 0) return; @@ -266,25 +269,19 @@ private void HandleESP() { if (!_setESPScrap) break; - if (prop == null) + if (prop == null || prop.isHeld || !prop.grabbable || prop.isInShipRoom || prop.isInElevator) continue; - var physicsPropComp = prop.GetComponent(); - if (physicsPropComp == null) + Vector3 pos = prop.transform.position; + Vector3 screenPos = camera.WorldToScreenPoint(pos); + if (!IsOnScreen(screenPos, camera)) continue; - var grabbableObj = physicsPropComp as GrabbableObject; - if (grabbableObj == null) - continue; + var scanNodeComp = prop.GetComponentInChildren(); - var actualName = grabbableObj.itemProperties.itemName; + var actualName = scanNodeComp ? scanNodeComp.headerText : prop.itemProperties.itemName; var distance = Vector3.Distance(player.transform.position, prop.transform.position); - Vector3 pos = prop.transform.position; - Vector3 screenPos = camera.WorldToScreenPoint(pos); - if (!IsOnScreen(screenPos)) - continue; - Vector2 vec2Pos = new Vector2(screenPos.x * ScreenScale.x, (float)Screen.height - (screenPos.y * ScreenScale.y)); Color color = _setESPColor ? Color.blue : Color.white; @@ -293,12 +290,12 @@ private void HandleESP() renderTxt += actualName; if (_drawDistance) - renderTxt += " | " + Math.Round(distance) + "m"; + renderTxt += " | " + distance.ToString("F1") + "m"; if (renderTxt != "") Render.DrawString(new Vector2(vec2Pos.x, vec2Pos.y - 20f), renderTxt, true); if (_drawLine) - Render.DrawLine(new Vector2((float)(Screen.width / 2), (float)(Screen.height - 1)), vec2Pos, color, 2f); + Render.DrawLine(ScreenCenter, vec2Pos, color, 2f); } var enemyAIs = GameObject.FindObjectsOfType(); @@ -312,27 +309,30 @@ private void HandleESP() if (enemy == null || enemy.isEnemyDead) continue; - var actualName = enemy.enemyType.enemyName; - var distance = Vector3.Distance(player.transform.position, enemy.transform.position); - Vector3 pos = enemy.transform.position; Vector3 screenPos = camera.WorldToScreenPoint(pos); - if (!IsOnScreen(screenPos)) + if (!IsOnScreen(screenPos, camera)) continue; + var scanNodeComp = enemy.GetComponentInChildren(); + + var actualName = scanNodeComp ? scanNodeComp.headerText : enemy.enemyType.enemyName; + var distance = Vector3.Distance(player.transform.position, enemy.transform.position); + Vector2 vec2Pos = new Vector2(screenPos.x * ScreenScale.x, (float)Screen.height - (screenPos.y * ScreenScale.y)); Color color = _setESPColor ? Color.red : Color.white; + string renderTxt = ""; if (_drawName) renderTxt += actualName; if (_drawDistance) - renderTxt += " | " + Math.Round(distance) + "m"; + renderTxt += " | " + distance.ToString("F1") + "m"; if (renderTxt != "") Render.DrawString(new Vector2(vec2Pos.x, vec2Pos.y - 20f), renderTxt, true); if (_drawLine) - Render.DrawLine(new Vector2((float)(Screen.width / 2), (float)(Screen.height-1)), vec2Pos, color, 2f); + Render.DrawLine(ScreenCenter, vec2Pos, color, 2f); } } @@ -349,36 +349,26 @@ private void DrawScrapTable() // _showHeld = GUILayout.Toggle(_showHeld, "Show Held"); // GUILayout.EndHorizontal(); - var propList = GameObject.FindGameObjectsWithTag("PhysicsProp"); + var propList = GameObject.FindObjectsOfType(); if (propList == null || propList.Length == 0) return; foreach (var prop in propList) { - if (prop == null) + if (prop == null || !prop.itemProperties.isScrap || !prop.grabbable || prop.isHeld || prop is { isInShipRoom: true, isInElevator: true }) continue; var player = GameNetworkManager.Instance.localPlayerController; if (player == null) continue; - var physicsPropComp = prop.GetComponent(); - if (physicsPropComp == null) - continue; - var scanNodeComp = prop.GetComponentInChildren(); if (scanNodeComp == null) continue; - var grabbableObj = physicsPropComp as GrabbableObject; - if (grabbableObj == null) - continue; - var actualName = scanNodeComp.headerText; var distance = Vector3.Distance(prop.transform.position, player.transform.position); - var scrapValue = grabbableObj.scrapValue; - if (scrapValue == 1 || !grabbableObj.grabbable || grabbableObj.isHeld || grabbableObj is { isInShipRoom: true, isInElevator: true }) - continue; + var scrapValue = prop.scrapValue; GUILayout.BeginHorizontal(); GUILayout.Label(actualName, GUILayout.MinWidth(120)); @@ -387,9 +377,9 @@ private void DrawScrapTable() if (GUILayout.Button("T")) TeleportPlayer(prop.transform.position); if (GUILayout.Button("+")) - grabbableObj.SetScrapValue(scrapValue + 1); + prop.SetScrapValue(scrapValue + 1); if (GUILayout.Button("-")) - grabbableObj.SetScrapValue(scrapValue - 1); + prop.SetScrapValue(scrapValue - 1); GUILayout.EndHorizontal(); } @@ -420,7 +410,9 @@ private void DrawEnemyTable() if (player == null) continue; - var actualName = enemy.enemyType.enemyName; + var scanNodeComp = enemy.GetComponentInChildren(); + + var actualName = scanNodeComp ? scanNodeComp.headerText : enemy.enemyType.enemyName; var distance = Vector3.Distance(enemy.transform.position, player.transform.position); GUILayout.BeginHorizontal(); @@ -468,6 +460,8 @@ private void DrawPlayerTable() GUILayout.Label(distance.ToString("F2"), GUILayout.MinWidth(50)); if (GUILayout.Button("T")) TeleportPlayer(playerObj.transform.position); + if (GUILayout.Button("K")) + playerObj.KillPlayer(Vector3.zero); GUILayout.EndHorizontal(); } From 3c3a0743ce4408e9f8ca25c799c6194006694040 Mon Sep 17 00:00:00 2001 From: TheReVeaLz <202110715072@mhs.ubharajaya.ac.id> Date: Tue, 19 Dec 2023 22:50:01 +0700 Subject: [PATCH 2/6] (feat) ESP Player --- NonLethalCompany-Mod/Main.cs | 71 +++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/NonLethalCompany-Mod/Main.cs b/NonLethalCompany-Mod/Main.cs index de6d312..3ebb8d1 100644 --- a/NonLethalCompany-Mod/Main.cs +++ b/NonLethalCompany-Mod/Main.cs @@ -52,9 +52,11 @@ public class Main : BaseUnityPlugin private bool _drawLine = true; private bool _drawDistance; private bool _drawName = true; - private bool _setESPEnemy = true; - private bool _setESPScrap = true; + private bool _setESPPlayer; + private bool _setESPEnemy; + private bool _setESPScrap; + private Vector2 ScreenScale, ScreenCenter; #endregion private void Awake() @@ -154,6 +156,7 @@ private void OnGUI() _setESP = GUILayout.Toggle(_setESP, "ESP"); if (_setESP) { + _setESPPlayer = GUILayout.Toggle(_setESPPlayer, "ESP Player"); _setESPEnemy = GUILayout.Toggle(_setESPEnemy, "ESP Enemy"); _setESPScrap = GUILayout.Toggle(_setESPScrap, "ESP Scrap"); _setESPColor = GUILayout.Toggle(_setESPColor, "Different ESP Color"); @@ -256,19 +259,25 @@ private void HandleESP() if (camera == null) return; - var ScreenScale = new Vector2((float)Screen.width / camera.pixelWidth, (float)Screen.height / camera.pixelHeight); - var ScreenCenter = new Vector2((float)(Screen.width / 2), (float)(Screen.height - 1)); + ScreenScale = new Vector2((float)Screen.width / camera.pixelWidth, (float)Screen.height / camera.pixelHeight); + ScreenCenter = new Vector2((float)(Screen.width / 2), (float)(Screen.height - 1)); + if (_setESPScrap) + ESPItem(player, camera); + if (_setESPEnemy) + ESPEnemy(player, camera); + if (_setESPPlayer) + ESPPlayer(player, camera); + } + + private void ESPItem(PlayerControllerB player, Camera camera) + { var propList = GameObject.FindObjectsOfType(); if (propList == null || propList.Length == 0) return; - var ScreenScale = new Vector2((float)Screen.width / camera.pixelWidth, (float)Screen.height / camera.pixelHeight); - foreach (var prop in propList) { - if (!_setESPScrap) break; - if (prop == null || prop.isHeld || !prop.grabbable || prop.isInShipRoom || prop.isInElevator) continue; @@ -283,7 +292,7 @@ private void HandleESP() var distance = Vector3.Distance(player.transform.position, prop.transform.position); Vector2 vec2Pos = new Vector2(screenPos.x * ScreenScale.x, (float)Screen.height - (screenPos.y * ScreenScale.y)); - Color color = _setESPColor ? Color.blue : Color.white; + Color color = _setESPColor ? Color.green : Color.white; string renderTxt = ""; if (_drawName) @@ -297,14 +306,16 @@ private void HandleESP() if (_drawLine) Render.DrawLine(ScreenCenter, vec2Pos, color, 2f); } + } + private void ESPEnemy(PlayerControllerB player, Camera camera) + { var enemyAIs = GameObject.FindObjectsOfType(); if (enemyAIs == null) return; foreach (var enemy in enemyAIs) { - if (!_setESPEnemy) break; if (enemy == null || enemy.isEnemyDead) continue; @@ -336,6 +347,46 @@ private void HandleESP() } } + private void ESPPlayer(PlayerControllerB player, Camera camera) + { + var allPlayerObjs = StartOfRound.Instance.allPlayerObjects; + if (allPlayerObjs == null) + return; + + foreach (var allPlayerObj in allPlayerObjs) + { + var playerObj = allPlayerObj.GetComponent(); + if (playerObj == null || playerObj.isPlayerDead || playerObj.IsOwner) + continue; + + Vector3 pos = playerObj.transform.position; + Vector3 screenPos = camera.WorldToScreenPoint(pos); + if (!IsOnScreen(screenPos, camera)) + continue; + + var actualName = playerObj.playerUsername; + var distance = Vector3.Distance(playerObj.transform.position, player.transform.position); + + if (actualName.Contains("Player #")) + continue; + + Vector2 vec2Pos = new Vector2(screenPos.x * ScreenScale.x, (float)Screen.height - (screenPos.y * ScreenScale.y)); + Color color = _setESPColor ? Color.blue : Color.white; + + string renderTxt = ""; + if (_drawName) + renderTxt += actualName; + + if (_drawDistance) + renderTxt += " | " + distance.ToString("F1") + "m"; + + if (renderTxt != "") + Render.DrawString(new Vector2(vec2Pos.x, vec2Pos.y - 20f), renderTxt, true); + if (_drawLine) + Render.DrawLine(ScreenCenter, vec2Pos, color, 2f); + } + } + private void DrawScrapTable() { GUILayout.BeginHorizontal(); From cb16c20ea4b176ef46ef97ed275076d5ab1b16d2 Mon Sep 17 00:00:00 2001 From: TheReVeaLz <202110715072@mhs.ubharajaya.ac.id> Date: Tue, 19 Dec 2023 22:53:55 +0700 Subject: [PATCH 3/6] (misc) Change mspd & grab distance UI --- NonLethalCompany-Mod/Main.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/NonLethalCompany-Mod/Main.cs b/NonLethalCompany-Mod/Main.cs index 3ebb8d1..3a03bd1 100644 --- a/NonLethalCompany-Mod/Main.cs +++ b/NonLethalCompany-Mod/Main.cs @@ -79,7 +79,6 @@ private void Update() HandleUnlimitedSprint(); HandleNoWeight(); HandleGodMode(); - HandleGrabDistance(); HandleUnlimitedBatteries(); } @@ -97,10 +96,13 @@ private void OnGUI() #region Movement Speed + GUILayout.BeginHorizontal(); GUILayout.Label("Movement Speed: " + _movementSpeed); _movementSpeed = GUILayout.HorizontalSlider(_movementSpeed, 4.6f, 100.0f); if (GUILayout.Button("Set Movement Speed")) HandleMovementSpeed(); + GUILayout.EndHorizontal(); + _movementSpeed = GUILayout.HorizontalSlider(_movementSpeed, 4.6f, 100.0f); #endregion @@ -169,7 +171,11 @@ private void OnGUI() #region Grab Distance + GUILayout.BeginHorizontal(); GUILayout.Label("Grab Distance: " + _grabDistance); + if (GUILayout.Button("Set Grab Distance")) + HandleGrabDistance(); + GUILayout.EndHorizontal(); _grabDistance = GUILayout.HorizontalSlider(_grabDistance, 5, 100); #endregion From 6efa025c19ba8cf58847033e0f7db023ef8895e0 Mon Sep 17 00:00:00 2001 From: TheReVeaLz <202110715072@mhs.ubharajaya.ac.id> Date: Tue, 19 Dec 2023 22:57:26 +0700 Subject: [PATCH 4/6] (feat) No fog, invite in-game, player dead notification --- NonLethalCompany-Mod/Main.cs | 100 ++++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) diff --git a/NonLethalCompany-Mod/Main.cs b/NonLethalCompany-Mod/Main.cs index 3a03bd1..6551d4f 100644 --- a/NonLethalCompany-Mod/Main.cs +++ b/NonLethalCompany-Mod/Main.cs @@ -32,6 +32,10 @@ public class Main : BaseUnityPlugin public static bool NoInvisible; + public static bool PlayerDeadNotify; + + public static bool EnableInvite; + private bool _setUnlimitedSprint; private bool _setNoWeight; @@ -64,6 +68,8 @@ private void Awake() Logger.LogMessage("\u001b[31mMOD LOADED WOW!!!!!!!!!!!!!!\u001b[0m"); Harmony.CreateAndPatchAll(typeof(PlayerControllerBPatch)); Harmony.CreateAndPatchAll(typeof(EnemyAIPatch)); + Harmony.CreateAndPatchAll(typeof(GameNetworkManagerPatch)); + Harmony.CreateAndPatchAll(typeof(QuickMenuManagerPatch)); } private void Start() @@ -98,7 +104,6 @@ private void OnGUI() GUILayout.BeginHorizontal(); GUILayout.Label("Movement Speed: " + _movementSpeed); - _movementSpeed = GUILayout.HorizontalSlider(_movementSpeed, 4.6f, 100.0f); if (GUILayout.Button("Set Movement Speed")) HandleMovementSpeed(); GUILayout.EndHorizontal(); @@ -147,12 +152,32 @@ private void OnGUI() #endregion + #region Player Dead Notifier + + PlayerDeadNotify = GUILayout.Toggle(PlayerDeadNotify, "Player Dead Notification"); + + #endregion + #region No Invisible Enemy NoInvisible = GUILayout.Toggle(NoInvisible, "No Invisible Enemies"); #endregion + #region Enable Invite + + EnableInvite = GUILayout.Toggle(EnableInvite, "Enable Invite & Join Mid-game"); + + #endregion + + #region No Fog + + var fogTxt = RenderSettings.fog ? "Disable" : "Enable"; + if (GUILayout.Button($"{fogTxt} No Fog")) + HandleNoFog(!RenderSettings.fog); + + #endregion + #region ESP _setESP = GUILayout.Toggle(_setESP, "ESP"); @@ -536,6 +561,17 @@ private void HandleMovementSpeed() player.movementSpeed = _movementSpeed; } + private void HandleNoFog(bool enable) + { + GameObject system = GameObject.Find("Systems"); + + if (system == null) + return; + + system.transform.Find("Rendering").Find("VolumeMain").gameObject.SetActive(!enable); + RenderSettings.fog = enable; + } + private void HandleNoClip() { if (!IsInGameScene()) @@ -808,6 +844,27 @@ private static void KillPlayerPrefix(ref CauseOfDeath causeOfDeath) return; } + [HarmonyPatch("KillPlayerClientRpc")] + [HarmonyPrefix] + private static void KillPlayerClientRpcPrefix(PlayerControllerB __instance, ref int playerId, ref int causeOfDeath) + { + if (Main.PlayerDeadNotify) + { + var player = __instance.playersManager.allPlayerObjects[playerId].GetComponent(); + var HUD = HUDManager.Instance; + var txt = "" + player.playerUsername + " dead by " + (CauseOfDeath)causeOfDeath + ""; + HUD.DisplayTip("Player Dead", txt); + HUD.ChatMessageHistory.Add(txt); + HUD.chatText.text += "\n" + txt; + while (HUD.ChatMessageHistory.Count >= 4) + { + HUD.chatText.text.Remove(0, 1); + HUD.ChatMessageHistory.Remove(HUD.ChatMessageHistory[0]); + } + HUD.PingHUDElement(HUD.Chat, 4f, 1f, 0.2f); + } + } + [HarmonyPatch("AllowPlayerDeath")] [HarmonyPrefix] private static bool AllowPlayerDeathPrefix(PlayerControllerB __instance) @@ -838,6 +895,47 @@ private static void EnableEnemyMeshPrefix(ref bool enable) } } +[HarmonyPatch(typeof(GameNetworkManager))] +public class GameNetworkManagerPatch +{ + [HarmonyPatch(nameof(GameNetworkManager.LeaveLobbyAtGameStart))] + [HarmonyPrefix] + private static bool LeaveLobbyAtGameStartPatch() + { + if (Main.EnableInvite) return false; + return true; + } +} + +[HarmonyPatch(typeof(QuickMenuManager))] +public class QuickMenuManagerPatch +{ + [HarmonyPatch(nameof(QuickMenuManager.InviteFriendsButton))] + [HarmonyPrefix] + private static bool InviteFriendsButtonPatch() + { + if (Main.EnableInvite) + { + GameNetworkManager.Instance.gameHasStarted = false; + GameNetworkManager.Instance.InviteFriendsUI(); + return false; + } + return true; + } + + [HarmonyPatch(nameof(QuickMenuManager.DisableInviteFriendsButton))] + [HarmonyPrefix] + private static bool DisableInviteFriendsButtonPatch() + { + if (Main.EnableInvite) + { + GameNetworkManager.Instance.gameHasStarted = false; + return false; + } + return true; + } +} + public static class Constants { public const string LaunchOptionsScene = "InitSceneLaunchOptions"; From b6de6a6e67848e182520297739430fdacad63bf6 Mon Sep 17 00:00:00 2001 From: TheReVeaLz <202110715072@mhs.ubharajaya.ac.id> Date: Tue, 19 Dec 2023 22:58:53 +0700 Subject: [PATCH 5/6] (fix) Player & Enemy kill need owner --- NonLethalCompany-Mod/Main.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NonLethalCompany-Mod/Main.cs b/NonLethalCompany-Mod/Main.cs index 6551d4f..485dbad 100644 --- a/NonLethalCompany-Mod/Main.cs +++ b/NonLethalCompany-Mod/Main.cs @@ -503,7 +503,7 @@ private void DrawEnemyTable() if (GUILayout.Button("T")) TeleportPlayer(enemy.transform.position); if (GUILayout.Button("K")) - enemy.KillEnemy(true); + enemy.KillEnemyServerRpc(false); GUILayout.EndHorizontal(); } @@ -543,7 +543,7 @@ private void DrawPlayerTable() if (GUILayout.Button("T")) TeleportPlayer(playerObj.transform.position); if (GUILayout.Button("K")) - playerObj.KillPlayer(Vector3.zero); + playerObj.DamagePlayerFromOtherClientServerRpc(playerObj.health, Vector3.zero, (int)playerObj.playerClientId); GUILayout.EndHorizontal(); } From 4b5ad01e97879fd21d708eb621c7cdbfb0f6d6d5 Mon Sep 17 00:00:00 2001 From: TheReVeaLz <202110715072@mhs.ubharajaya.ac.id> Date: Tue, 19 Dec 2023 23:01:38 +0700 Subject: [PATCH 6/6] (fix) Missing include --- NonLethalCompany-Mod/NonLethalCompany-Mod.csproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NonLethalCompany-Mod/NonLethalCompany-Mod.csproj b/NonLethalCompany-Mod/NonLethalCompany-Mod.csproj index d38490d..4fea7d8 100644 --- a/NonLethalCompany-Mod/NonLethalCompany-Mod.csproj +++ b/NonLethalCompany-Mod/NonLethalCompany-Mod.csproj @@ -33,6 +33,9 @@ ..\libs\UnityEngine.UI.dll + + ..\libs\Unity.TextMeshPro.dll +