winstxnhdw / lc-hax

A powerful, feature-rich and highly performant internal cheat for the co-op indie horror video game, Lethal Company.
87 stars 26 forks source link

[Feature Request]: Allow voice chat at camera's position while in `Phantom` #41

Closed joep26020 closed 7 months ago

joep26020 commented 9 months ago

What happened?

adadwaasdadw.

Current Commit Hash

adwa

Injector

If you selected "Others" above, please specify the injector you are using.

No response

Log output

No response

Acknowledgement

winstxnhdw commented 9 months ago

maybe even toggle location on current location in phantom mode to troll people?

I have no clue what you mean by this. I'd also appreciate if you keep your titles more concise and elaborate more in the description.

joep26020 commented 9 months ago

maybe even toggle location on current location in phantom mode to troll people?

I have no clue what you mean by this. I'd also appreciate if you keep your titles more concise and elaborate more in the description.

I'm talking about people hearing your voice wherever you are in phantom mode. Like pretend you turned you character invisible and could fly. Kind of like that.

winstxnhdw commented 9 months ago

I can look into this.

tslpy1 commented 9 months ago

I can look into this.

respawn can achieve invisibility. If you are not the host, other players will not be able to see you after rebirth, but you can still do anything. Perhaps consider adding a client respawn function.

winstxnhdw commented 9 months ago

Do you have a reference implementation?

tslpy1 commented 9 months ago

Do you have a reference implementation?

There are two examples, but I'm not sure which one has a better effect 1 :

            if (GUILayout.Button("Revive all players (Host)", Array.Empty<GUILayoutOption>()))
            {
                StartOfRound startOfRound2 = UnityEngine.Object.FindObjectOfType<StartOfRound>();
                if (startOfRound2 != null)
                {
                    startOfRound2.ReviveDeadPlayers();
                    startOfRound2.PlayerHasRevivedServerRpc();
                }
            }

ReviveDeadPlayers(); PlayerHasRevivedServerRpc(); Both are in Assembly-CSharp - StartOfRound.

2 :

    private void ReviveLocalPlayer() // This is a modified version of StartOfRound.ReviveDeadPlayers
    {
        PlayerControllerB localPlayer = GameObjectManager.Instance.localPlayer;
        StartOfRound.Instance.allPlayersDead = false;
        localPlayer.ResetPlayerBloodObjects(localPlayer.isPlayerDead);
        if (localPlayer.isPlayerDead || localPlayer.isPlayerControlled)
        {
            localPlayer.isClimbingLadder = false;
            localPlayer.ResetZAndXRotation();
            localPlayer.thisController.enabled = true;
            localPlayer.health = 100;
            localPlayer.disableLookInput = false;
            if (localPlayer.isPlayerDead)
            {
                localPlayer.isPlayerDead = false;
                localPlayer.isPlayerControlled = true;
                localPlayer.isInElevator = true;
                localPlayer.isInHangarShipRoom = true;
                localPlayer.isInsideFactory = false;
                localPlayer.wasInElevatorLastFrame = false;
                StartOfRound.Instance.SetPlayerObjectExtrapolate(false);
                localPlayer.TeleportPlayer(StartOfRound.Instance.playerSpawnPositions[0].position, false, 0f, false, true);
                localPlayer.setPositionOfDeadPlayer = false;
                localPlayer.DisablePlayerModel(StartOfRound.Instance.allPlayerObjects[localPlayer.playerClientId], true, true);
                localPlayer.helmetLight.enabled = false;
                localPlayer.Crouch(false);
                localPlayer.criticallyInjured = false;
                if (localPlayer.playerBodyAnimator != null)
                    localPlayer.playerBodyAnimator.SetBool("Limp", false);
                localPlayer.bleedingHeavily = false;
                localPlayer.activatingItem = false;
                localPlayer.twoHanded = false;
                localPlayer.inSpecialInteractAnimation = false;
                localPlayer.disableSyncInAnimation = false;
                localPlayer.inAnimationWithEnemy = null;
                localPlayer.holdingWalkieTalkie = false;
                localPlayer.speakingToWalkieTalkie = false;
                localPlayer.isSinking = false;
                localPlayer.isUnderwater = false;
                localPlayer.sinkingValue = 0f;
                localPlayer.statusEffectAudio.Stop();
                localPlayer.DisableJetpackControlsLocally();
                localPlayer.health = 100;
                localPlayer.mapRadarDotAnimator.SetBool("dead", false);
                if (localPlayer.IsOwner)
                {
                    HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
                    localPlayer.hasBegunSpectating = false;
                    HUDManager.Instance.RemoveSpectateUI();
                    HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
                    localPlayer.hinderedMultiplier = 1f;
                    localPlayer.isMovementHindered = 0;
                    localPlayer.sourcesCausingSinking = 0;
                    localPlayer.reverbPreset = StartOfRound.Instance.shipReverb;
                }
            }
            SoundManager.Instance.earsRingingTimer = 0f;
            localPlayer.voiceMuffledByEnemy = false;
            SoundManager.Instance.playerVoicePitchTargets[localPlayer.playerClientId] = 1f;
            SoundManager.Instance.SetPlayerPitch(1f, (int)localPlayer.playerClientId);
            if (localPlayer.currentVoiceChatIngameSettings == null)
            {
                StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
            }
            if (localPlayer.currentVoiceChatIngameSettings != null)
            {
                if (localPlayer.currentVoiceChatIngameSettings.voiceAudio == null)
                    localPlayer.currentVoiceChatIngameSettings.InitializeComponents();

                if (localPlayer.currentVoiceChatIngameSettings.voiceAudio == null)
                    return;

                localPlayer.currentVoiceChatIngameSettings.voiceAudio.GetComponent<OccludeAudio>().overridingLowPass = false;
            }
        }
        PlayerControllerB playerControllerB = GameNetworkManager.Instance.localPlayerController;
        playerControllerB.bleedingHeavily = false;
        playerControllerB.criticallyInjured = false;
        playerControllerB.playerBodyAnimator.SetBool("Limp", false);
        playerControllerB.health = 100;
        HUDManager.Instance.UpdateHealthUI(100, false);
        playerControllerB.spectatedPlayerScript = null;
        HUDManager.Instance.audioListenerLowPass.enabled = false;
        StartOfRound.Instance.SetSpectateCameraToGameOverMode(false, playerControllerB);
        RagdollGrabbableObject[] array = UnityEngine.Object.FindObjectsOfType<RagdollGrabbableObject>();
        for (int j = 0; j < array.Length; j++)
        {
            if (!array[j].isHeld)
            {
                if (StartOfRound.Instance.IsServer)
                {
                    if (array[j].NetworkObject.IsSpawned)
                    {
                        array[j].NetworkObject.Despawn(true);
                    }
                    else
                    {
                        UnityEngine.Object.Destroy(array[j].gameObject);
                    }
                }
            }
            else if (array[j].isHeld && array[j].playerHeldBy != null)
            {
                array[j].playerHeldBy.DropAllHeldItems(true, false);
            }
        }
        DeadBodyInfo[] array2 = UnityEngine.Object.FindObjectsOfType<DeadBodyInfo>();
        for (int k = 0; k < array2.Length; k++)
        {
            UnityEngine.Object.Destroy(array2[k].gameObject);
        }
        StartOfRound.Instance.livingPlayers = StartOfRound.Instance.connectedPlayersAmount + 1;
        StartOfRound.Instance.allPlayersDead = false;
        StartOfRound.Instance.UpdatePlayerVoiceEffects();
        StartOfRound.Instance.shipAnimator.ResetTrigger("ShipLeave");
    }
winstxnhdw commented 9 months ago

I think I've tried the first one before but it never worked. I'll look into it again.

winstxnhdw commented 9 months ago

I've tried both versions but no luck :/

joep26020 commented 9 months ago

I've tried both versions but no luck :/

Did you add it to the mod?

winstxnhdw commented 9 months ago

I really want to get this feature in but I don't have anyone to test it with.

joep26020 commented 9 months ago

I really want to get this feature in but I don't have anyone to test it with.

ill test with u

joep26020 commented 9 months ago

I really want to get this feature in but I don't have anyone to test it with.

i could be ur test dummy lol

AverageVirusTotalEnjoyer commented 8 months ago

was this tested @winstxnhdw

winstxnhdw commented 8 months ago

Not yet, don't think I can test this until I've fully recovered and can focus 100% on this.

AverageVirusTotalEnjoyer commented 8 months ago

Ok

joep26020 commented 8 months ago

Not yet, don't think I can test this until I've fully recovered and can focus 100% on this.

couldn't you just add a fly and noclip mod and be invisible with this?

joep26020 commented 8 months ago

Not yet, don't think I can test this until I've fully recovered and can focus 100% on this.

couldn't you just add a fly and noclip mod and be invisible with this?

or infinite jump maybe

Totoqoe commented 7 months ago

I wonder if this could be possible, I know of one instance where the voice detaches itself from the player body and that's when a player gets stuck in the void, once they load in as nameless, the ESP shows their body as if they're several meters away, yet their voice still seems to come closely from the left wall of the ship. Not sure if this can be replicated outside of that one niche scenario.

winstxnhdw commented 7 months ago

It's definitely possible. But it's probably super painful and annoying to do. Even hear sucks.

winstxnhdw commented 7 months ago

Nevermind. It's host-only.